Commit graph

207207 commits

Author SHA1 Message Date
Jesper Nilsson
72e08db187 CRIS: Add ARTPEC-3 and timestamps for sync-serial
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:39 +02:00
Jesper Nilsson
4f248d1cea CRIS: Better ARTPEC-3 support for gpio
Add PWM support, correct comment for ARTPEC-3.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:38 +02:00
Jesper Nilsson
97a644461d CRIS: Add include guard
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:38 +02:00
Jesper Nilsson
0c07d3abc8 CRIS: Better handling of pinmux settings
Depending on eth, eth_mido and geth fields in wr_hwprot, don't set
corresponding pins on gpio port b to gpio mode. This avoids
re-resetting the ethernet PHY should this already have been done.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:37 +02:00
Jesper Nilsson
6f09963caf CRIS: New DMA defines for ARTPEC-3
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:36 +02:00
Jesper Nilsson
da2af0a771 CRIS: __do_strncpy_from_user: Don't read the byte beyond the nil
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:36 +02:00
Jesper Nilsson
2dc1c40c6e CRIS: Pagetable for ARTPEC-3
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:35 +02:00
Jesper Nilsson
32e7a8ba8d CRIS: Machine dependent memmap.h
Move the old one to mach-fs and replace with a new one that
only include the correct one for the machine architecture.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:35 +02:00
Jesper Nilsson
243ba2fa46 CRIS: Check if pointer is set before using it
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:34 +02:00
Jesper Nilsson
a3af54ffa9 CRIS: Machine dependent dma.h
Move the old one to mach-fs and replace with a new one that
only include the correct one for the machine architecture.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:34 +02:00
Jesper Nilsson
6fdf581e9d CRIS: Define __read_mostly for CRISv32
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:33 +02:00
Jesper Nilsson
d717809bce CRIS: Discard .note.gnu.build-id section
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:33 +02:00
Jesper Nilsson
76fdf67bb5 CRIS: Avoid compilation warning for puts
Rename to aputs.
Also, simplify code by moving some common code out to macros.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:32 +02:00
Jesper Nilsson
ac93f62179 CRIS: Add debug for assembler macros
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:31 +02:00
Jesper Nilsson
7ec280c52c CRIS: Update for ARTPEC-3
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:31 +02:00
Jesper Nilsson
98560bd83e CRIS: Add more delays in DDR setup
Also, make DDR latency configurable.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:30 +02:00
Jesper Nilsson
2d0503d1a6 CRIS: Add debug info for assembler code
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:30 +02:00
Jesper Nilsson
3a38125d3e CRIS: Add debug info for assembler code
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:29 +02:00
Jesper Nilsson
5f9ac92f3d CRIS: Add debug symbols for assembler code
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:29 +02:00
Jesper Nilsson
e2ee9bb225 CRIS: Minor formatting fix in traps.c
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:15 +02:00
Jesper Nilsson
399233265c CRIS: v32: Correct auto-restart of syscalls
Register number was incorrect in syscalls
that go via the restartblock (e.g, poll).

Signed-off-by: Edgar Iglesias <Edgar.Iglesias@axis.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:02:01 +02:00
Jesper Nilsson
e281a31e1c CRIS: More ARTPEC-3 support and i2c-boardinfo.
Add standard i2d-devices.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:01:50 +02:00
Jesper Nilsson
c9cbf097b7 CRIS: Remove obsolete pinmux.c, now machine dependent.
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:01:29 +02:00
Jesper Nilsson
ab43d14dab CRIS: kgdb: Fix compilation errors
Paths were not correct and pack_hex_byte() takes two arguments.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:01:12 +02:00
Jesper Nilsson
e336285db2 CRIS: v32: Correct path for intr_vect.h
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:00:53 +02:00
Jesper Nilsson
e75a320eda CRIS: v32: Better irq mapping code
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:00:45 +02:00
Jesper Nilsson
403a1c4f13 CRIS: v32: Correct address for romfs in the image
Is after __bss_start, not __vmlinux_end

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:00:30 +02:00
Jesper Nilsson
345c52e079 CRIS: Additional mmu settings for ARTPEC-3
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:00:20 +02:00
Jesper Nilsson
cd4f20110c CRIS: Faster syscall entry for CRISv32.
Signed-off-by: Edgar Iglesias <Edgar.Iglesias@axis.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:00:09 +02:00
Jesper Nilsson
43f6cdd769 CRIS: Simple insn reschedule to avoid interlocks.
Brings down the CPI from ~1.5 to ~1.1.

Signed-off-by: Edgar Iglesias <Edgar.Iglesias@axis.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 13:00:00 +02:00
Jesper Nilsson
a80a635f3d CRIS: Add debug for assembler functions
Signed-off-by: Edgar Iglesias <Edgar.Iglesias@axis.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 12:59:43 +02:00
Jesper Nilsson
b4973ae9da CRIS: Correct address of the romfs in boot image
The romfs should land after __init_end

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 12:59:43 +02:00
Jesper Nilsson
d77eab8cb1 CRIS: Fasttimer: Remove obsolete ifdef
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 12:59:42 +02:00
Jesper Nilsson
5866d7ef95 CRIS: Better link to rs485 in help
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 12:59:42 +02:00
Jesper Nilsson
fcb31dbb36 CRIS: Remove CVS tag.
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 12:59:41 +02:00
Jesper Nilsson
0e0aff2126 CRIS: v10: remove all BKL usage
We don't need to take the BKL here.
Also fixes compile error after last commit (smp_lock.h was not included)

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 12:59:28 +02:00
Jesper Nilsson
60362158e2 CRIS: gpio: don't call copy_to_user()/copy_from_user() while holding spinlocks
copy_to_user()/copy_from_user() must not be used with spinlocks held.
Move locks inside each case so we have better control of when the locks
are held.

Also, since we use spinlocks, we don't need to hold the BKL, so remove it.

Reported-by: Kulikov Vasiliy <segooon@gmail.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 12:59:14 +02:00
Joe Perches
16bc0fe5ce arch/cris: Remove unnecessary casts of private_data
Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 12:59:06 +02:00
Jesper Nilsson
096b7bdc86 cris: autoconvert trivial BKL users to private mutex
All these files use the big kernel lock in a trivial
way to serialize their private file operations,
typically resulting from an earlier semi-automatic
pushdown from VFS.

None of these drivers appears to want to lock against
other code, and they all use the BKL as the top-level
lock in their file operations, meaning that there
is no lock-order inversion problem.

Consequently, we can remove the BKL completely,
replacing it with a per-file mutex in every case.
Using a scripted approach means we can avoid
typos.

file=$1
name=$2
if grep -q lock_kernel ${file} ; then
    if grep -q 'include.*linux.mutex.h' ${file} ; then
            sed -i '/include.*<linux\/smp_lock.h>/d' ${file}
    else
            sed -i 's/include.*<linux\/smp_lock.h>.*$/include <linux\/mutex.h>/g' ${file}
    fi
    sed -i ${file} \
        -e "/^#include.*linux.mutex.h/,$ {
                1,/^\(static\|int\|long\)/ {
                     /^\(static\|int\|long\)/istatic DEFINE_MUTEX(${name}_mutex);

} }"  \
    -e "s/\(un\)*lock_kernel\>[ ]*()/mutex_\1lock(\&${name}_mutex)/g" \
    -e '/[      ]*cycle_kernel_lock();/d'
else
    sed -i -e '/include.*\<smp_lock.h\>/d' ${file}  \
                -e '/cycle_kernel_lock()/d'
fi

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 12:59:06 +02:00
Jesper Nilsson
90276a1a64 cris: Pushdown the bkl from ioctl
From: Frederic Weisbecker <fweisbec@gmail.com>

Pushdown the bkl to the remaining drivers using the
deprecated .ioctl.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: John Kacur <jkacur@redhat.com>
2010-08-04 12:58:57 +02:00
Jesper Nilsson
3648bdf79f CRIS: invoke oom-killer from page fault
As explained in commit 1c0fe6e3bd, we want to call the architecture independent
oom killer when getting an unexplained OOM from handle_mm_fault, rather than
simply killing current.

Signed-off-by: Nick Piggin <npiggin@suse.de>
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
Signed-off-by: Mikael Starvik <starvik@axis.com>
2010-08-04 12:58:56 +02:00
Jesper Nilsson
60dbd66331 CRIS: GENERIC_TIME fixes
GENERIC_TIME was not functional for CRIS, giving random backward
time jumps.

For CRISv32 implement a new clocksource using the free running counter
and ditch the arch_gettimeoffset.

The random time jumps still existed, but turned out to be the write_seqlock
which was missing around our do_timer() call.

So switch over to GENERIC_TIME using the clocksource for CRISv32.

CRISv10 doesn't have the free running counter needed for the
clocksource trick, but we can still use GENERIC_TIME with
arch_gettimeoffset.

Unfortunately, there were problems in using the prescaler register
to timer0 for the gettimeoffset calculation, so it is now ignored,
making our resolution worse by the tune of 40usec (0.4%) worst case.

At the same time, clean up some formatting and use NSEC_PER_SEC
instead of 1000000000.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
2010-08-04 12:58:55 +02:00
Latchesar Ionkov
26bfeea38a 9p: Pass the correct end of buffer to p9stat_read
Pass the correct end of the buffer to p9stat_read.

Signed-off-by: Latchesar Ionkov <lucho@ionkov.net>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
2010-08-04 12:58:55 +02:00
Jason Wang
7e788b4289 omap: Fix DEBUG_LL uart to access phys addr when MMU isn't enable
Now we use a memory address to store the debug port info, So we need
to read/write this address when we choose DEBUG_LL. When MMU isn't
enable(I.E. the begining part of init stage of the linux kernel boot),
we need to access physical address instead of virtual address,
otherwise the kernel will crash.

Signed-off-by: Jason Wang <jason77.wang@gmail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2010-08-04 12:17:53 +03:00
Borislav Petkov
c4799c7570 amd64_edac: Minor formatting fix
EDAC MC3: CE page 0xc32281, offset 0x8a0, grain 0, syndrome 0x1, row 2, channel 1, label "": amd64_edac
EDAC MC3: CE - no information available: amd64_edacError Overflow

Add the missing space before "Error Overflow" on the second line.

Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
2010-08-04 11:16:01 +02:00
Borislav Petkov
962b70a1eb amd64_edac: Fix operator precendence error
The bitwise AND is of higher precedence, make that explicit.

Cc: <stable@kernel.org> # 34.x
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
2010-08-04 11:15:09 +02:00
Patrick Pannuto
0fcb80818b Documentation: Add timers/timers-howto.txt
This file seeks to explain the nuances in various delays;
many driver writers are not necessarily familiar with the
various kernel timers, their shortfalls, and quirks. When
faced with

ndelay, udelay, mdelay, usleep_range, msleep, and msleep_interrubtible

the question "How do I just wait 1 ms for my hardware to
latch?" has the non-intuitive "best" answer:
	usleep_range(1000,1500)

This patch is followed by a series of checkpatch additions
that seek to help kernel hackers pick the best delay.

Signed-off-by: Patrick Pannuto <ppannuto@codeaurora.org>
Cc: apw@canonical.com
Cc: corbet@lwn.net
Cc: arjan@linux.intel.com
Cc: Randy Dunlap <rdunlap@xenotime.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
LKML-Reference: <1280786467-26999-3-git-send-email-ppannuto@codeaurora.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2010-08-04 11:00:45 +02:00
Patrick Pannuto
5e7f5a178b timer: Added usleep_range timer
usleep_range is a finer precision implementations of msleep
and is designed to be a drop-in replacement for udelay where
a precise sleep / busy-wait is unnecessary.

Since an easy interface to hrtimers could lead to an undesired
proliferation of interrupts, we provide only a "range" API,
forcing the caller to think about an acceptable tolerance on
both ends and hopefully avoiding introducing another interrupt.

INTRO

As discussed here ( http://lkml.org/lkml/2007/8/3/250 ), msleep(1) is not
precise enough for many drivers (yes, sleep precision is an unfair notion,
but consistently sleeping for ~an order of magnitude greater than requested
is worth fixing). This patch adds a usleep API so that udelay does not have
to be used. Obviously not every udelay can be replaced (those in atomic
contexts or being used for simple bitbanging come to mind), but there are
many, many examples of

mydriver_write(...)
/* Wait for hardware to latch */
udelay(100)

in various drivers where a busy-wait loop is neither beneficial nor
necessary, but msleep simply does not provide enough precision and people
are using a busy-wait loop instead.

CONCERNS FROM THE RFC

Why is udelay a problem / necessary? Most callers of udelay are in device/
driver initialization code, which is serial...

	As I see it, there is only benefit to sleeping over a delay; the
	notion of "refactoring" areas that use udelay was presented, but
	I see usleep as the refactoring. Consider i2c, if the bus is busy,
	you need to wait a bit (say 100us) before trying again, your
	current options are:

		* udelay(100)
		* msleep(1) <-- As noted above, actually as high as ~20ms
				on some platforms, so not really an option
		* Manually set up an hrtimer to try again in 100us (which
		  is what usleep does anyway...)

	People choose the udelay route because it is EASY; we need to
	provide a better easy route.

	Device / driver / boot code is *currently* serial, but every few
	months someone makes noise about parallelizing boot, and IMHO, a
	little forward-thinking now is one less thing to worry about
	if/when that ever happens

udelay's could be preempted

	Sure, but if udelay plans on looping 1000 times, and it gets
	preempted on loop 200, whenever it's scheduled again, it is
	going to do the next 800 loops.

Is the interruptible case needed?

	Probably not, but I see usleep as a very logical parallel to msleep,
	so it made sense to include the "full" API. Processors are getting
	faster (albeit not as quickly as they are becoming more parallel),
	so if someone wanted to be interruptible for a few usecs, why not
	let them? If this is a contentious point, I'm happy to remove it.

OTHER THOUGHTS

I believe there is also value in exposing the usleep_range option; it gives
the scheduler a lot more flexibility and allows the programmer to express
his intent much more clearly; it's something I would hope future driver
writers will take advantage of.

To get the results in the NUMBERS section below, I literally s/udelay/usleep
the kernel tree; I had to go in and undo the changes to the USB drivers, but
everything else booted successfully; I find that extremely telling in and
of itself -- many people are using a delay API where a sleep will suit them
just fine.

SOME ATTEMPTS AT NUMBERS

It turns out that calculating quantifiable benefit on this is challenging,
so instead I will simply present the current state of things, and I hope
this to be sufficient:

How many udelay calls are there in 2.6.35-rc5?

	udealy(ARG) >=	| COUNT
	1000		| 319
	500		| 414
	100		| 1146
	20		| 1832

I am working on Android, so that is my focus for this. The following table
is a modified usleep that simply printk's the amount of time requested to
sleep; these tests were run on a kernel with udelay >= 20 --> usleep

"boot" is power-on to lock screen
"power collapse" is when the power button is pushed and the device suspends
"resume" is when the power button is pushed and the lock screen is displayed
         (no touchscreen events or anything, just turning on the display)
"use device" is from the unlock swipe to clicking around a bit; there is no
	sd card in this phone, so fail loading music, video, camera

	ACTION		| TOTAL NUMBER OF USLEEP CALLS	| NET TIME (us)
	boot		| 22				| 1250
	power-collapse	| 9				| 1200
	resume		| 5				| 500
	use device	| 59				| 7700

The most interesting category to me is the "use device" field; 7700us of
busy-wait time that could be put towards better responsiveness, or at the
least less power usage.

Signed-off-by: Patrick Pannuto <ppannuto@codeaurora.org>
Cc: apw@canonical.com
Cc: corbet@lwn.net
Cc: arjan@linux.intel.com
Cc: Randy Dunlap <rdunlap@xenotime.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2010-08-04 11:00:45 +02:00
Thomas Gleixner
e1b004c3ef Revert "timer: Added usleep[_range] timer"
This reverts commit 22b8f15c2f to merge
an advanced version.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2010-08-04 10:53:00 +02:00
Michal Simek
2d5973cb5a microblaze: Add KGDB support
Kgdb uses brki r16, 0x18 instruction to call
low level _debug_exception function which save
current state to pt_regs and call microblaze_kgdb_break
function. _debug_exception should be called only from
the kernel space. User space calling is not supported
because user application debugging uses different handling.

pt_regs_to_gdb_regs loads additional special registers
which can't be changed

 * Enable KGDB in Kconfig
 * Remove ancient not-tested KGDB support
 * Remove ancient _debug_exception code from entry.S

Only MMU KGDB support is supported.

Signed-off-by: Michal Simek <monstr@monstr.eu>
CC: Jason Wessel <jason.wessel@windriver.com>
CC: John Williams <john.williams@petalogix.com>
CC: Edgar E. Iglesias <edgar.iglesias@petalogix.com>
CC: linux-kernel@vger.kernel.org
Acked-by: Jason Wessel <jason.wessel@windriver.com>
2010-08-04 10:45:17 +02:00