Merge branch 'linus' into core/locking

This commit is contained in:
Ingo Molnar 2008-11-12 12:39:21 +01:00
commit 708b8eae0f
1471 changed files with 23750 additions and 14886 deletions

View File

@ -80,6 +80,8 @@ Nguyen Anh Quynh <aquynh@gmail.com>
Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Patrick Mochel <mochel@digitalimplant.org> Patrick Mochel <mochel@digitalimplant.org>
Peter A Jonsson <pj@ludd.ltu.se> Peter A Jonsson <pj@ludd.ltu.se>
Peter Oruba <peter@oruba.de>
Peter Oruba <peter.oruba@amd.com>
Praveen BP <praveenbp@ti.com> Praveen BP <praveenbp@ti.com>
Rajesh Shah <rajesh.shah@intel.com> Rajesh Shah <rajesh.shah@intel.com>
Ralf Baechle <ralf@linux-mips.org> Ralf Baechle <ralf@linux-mips.org>

View File

@ -172,7 +172,7 @@ i2c/
- directory with info about the I2C bus/protocol (2 wire, kHz speed). - directory with info about the I2C bus/protocol (2 wire, kHz speed).
i2o/ i2o/
- directory with info about the Linux I2O subsystem. - directory with info about the Linux I2O subsystem.
i386/ x86/i386/
- directory with info about Linux on Intel 32 bit architecture. - directory with info about Linux on Intel 32 bit architecture.
ia64/ ia64/
- directory with info about Linux on Intel 64 bit architecture. - directory with info about Linux on Intel 64 bit architecture.
@ -382,7 +382,7 @@ w1/
- directory with documents regarding the 1-wire (w1) subsystem. - directory with documents regarding the 1-wire (w1) subsystem.
watchdog/ watchdog/
- how to auto-reboot Linux if it has "fallen and can't get up". ;-) - how to auto-reboot Linux if it has "fallen and can't get up". ;-)
x86_64/ x86/x86_64/
- directory with info on Linux support for AMD x86-64 (Hammer) machines. - directory with info on Linux support for AMD x86-64 (Hammer) machines.
zorro.txt zorro.txt
- info on writing drivers for Zorro bus devices found on Amigas. - info on writing drivers for Zorro bus devices found on Amigas.

View File

@ -136,7 +136,7 @@ quiet_cmd_db2ps = PS $@
%.ps : %.xml %.ps : %.xml
$(call cmd,db2ps) $(call cmd,db2ps)
quiet_cmd_db2pdf = PDF $@ quiet_cmd_db2pdf = PDF $@
cmd_db2pdf = $(subst TYPE,pdf, $($(PDF_METHOD)template)) cmd_db2pdf = $(subst TYPE,pdf, $($(PDF_METHOD)template))
%.pdf : %.xml %.pdf : %.xml
$(call cmd,db2pdf) $(call cmd,db2pdf)
@ -148,7 +148,7 @@ build_main_index = rm -rf $(main_idx) && \
echo '<h2>Kernel Version: $(KERNELVERSION)</h2>' >> $(main_idx) && \ echo '<h2>Kernel Version: $(KERNELVERSION)</h2>' >> $(main_idx) && \
cat $(HTML) >> $(main_idx) cat $(HTML) >> $(main_idx)
quiet_cmd_db2html = HTML $@ quiet_cmd_db2html = HTML $@
cmd_db2html = xmlto xhtml $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \ cmd_db2html = xmlto xhtml $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \
echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \ echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \
$(patsubst %.html,%,$(notdir $@))</a><p>' > $@ $(patsubst %.html,%,$(notdir $@))</a><p>' > $@

View File

@ -24,7 +24,7 @@
<surname>Cox</surname> <surname>Cox</surname>
<affiliation> <affiliation>
<address> <address>
<email>alan@redhat.com</email> <email>alan@lxorguk.ukuu.org.uk</email>
</address> </address>
</affiliation> </affiliation>
</author> </author>
@ -316,7 +316,7 @@ CPU B: spin_unlock_irqrestore(&amp;dev_lock, flags)
<chapter id="pubfunctions"> <chapter id="pubfunctions">
<title>Public Functions Provided</title> <title>Public Functions Provided</title>
!Iinclude/asm-x86/io_32.h !Iarch/x86/include/asm/io_32.h
!Elib/iomap.c !Elib/iomap.c
</chapter> </chapter>

View File

@ -45,8 +45,8 @@
</sect1> </sect1>
<sect1><title>Atomic and pointer manipulation</title> <sect1><title>Atomic and pointer manipulation</title>
!Iinclude/asm-x86/atomic_32.h !Iarch/x86/include/asm/atomic_32.h
!Iinclude/asm-x86/unaligned.h !Iarch/x86/include/asm/unaligned.h
</sect1> </sect1>
<sect1><title>Delaying, scheduling, and timer routines</title> <sect1><title>Delaying, scheduling, and timer routines</title>
@ -119,7 +119,7 @@ X!Ilib/string.c
!Elib/string.c !Elib/string.c
</sect1> </sect1>
<sect1><title>Bit Operations</title> <sect1><title>Bit Operations</title>
!Iinclude/asm-x86/bitops.h !Iarch/x86/include/asm/bitops.h
</sect1> </sect1>
</chapter> </chapter>
@ -155,7 +155,7 @@ X!Ilib/string.c
!Emm/slab.c !Emm/slab.c
</sect1> </sect1>
<sect1><title>User Space Memory Access</title> <sect1><title>User Space Memory Access</title>
!Iinclude/asm-x86/uaccess_32.h !Iarch/x86/include/asm/uaccess_32.h
!Earch/x86/lib/usercopy_32.c !Earch/x86/lib/usercopy_32.c
</sect1> </sect1>
<sect1><title>More Memory Management Functions</title> <sect1><title>More Memory Management Functions</title>
@ -265,7 +265,7 @@ X!Earch/x86/kernel/mca_32.c
--> -->
</sect2> </sect2>
<sect2><title>MCA Bus DMA</title> <sect2><title>MCA Bus DMA</title>
!Iinclude/asm-x86/mca_dma.h !Iarch/x86/include/asm/mca_dma.h
</sect2> </sect2>
</sect1> </sect1>
</chapter> </chapter>

View File

@ -1239,7 +1239,7 @@ static struct block_device_operations opt_fops = {
</para> </para>
<para> <para>
<filename>include/asm-x86/delay_32.h:</filename> <filename>arch/x86/include/asm/delay.h:</filename>
</para> </para>
<programlisting> <programlisting>
#define ndelay(n) (__builtin_constant_p(n) ? \ #define ndelay(n) (__builtin_constant_p(n) ? \
@ -1265,7 +1265,7 @@ static struct block_device_operations opt_fops = {
</programlisting> </programlisting>
<para> <para>
<filename>include/asm-x86/uaccess_32.h:</filename> <filename>arch/x86/include/asm/uaccess_32.h:</filename>
</para> </para>
<programlisting> <programlisting>

View File

@ -12,7 +12,7 @@
<surname>Cox</surname> <surname>Cox</surname>
<affiliation> <affiliation>
<address> <address>
<email>alan@redhat.com</email> <email>alan@lxorguk.ukuu.org.uk</email>
</address> </address>
</affiliation> </affiliation>
</author> </author>
@ -101,7 +101,7 @@
<chapter id="dmafunctions"> <chapter id="dmafunctions">
<title>DMA Functions Provided</title> <title>DMA Functions Provided</title>
!Iinclude/asm-x86/mca_dma.h !Iarch/x86/include/asm/mca_dma.h
</chapter> </chapter>
</book> </book>

View File

@ -12,7 +12,7 @@
<surname>Cox</surname> <surname>Cox</surname>
<affiliation> <affiliation>
<address> <address>
<email>alan@redhat.com</email> <email>alan@lxorguk.ukuu.org.uk</email>
</address> </address>
</affiliation> </affiliation>
</author> </author>

View File

@ -12,7 +12,7 @@
<surname>Cox</surname> <surname>Cox</surname>
<affiliation> <affiliation>
<address> <address>
<email>alan@redhat.com</email> <email>alan@lxorguk.ukuu.org.uk</email>
</address> </address>
</affiliation> </affiliation>
</author> </author>

View File

@ -17,7 +17,7 @@ companies. If you sign purchase orders or you have any clue about the
budget of your group, you're almost certainly not a kernel manager. budget of your group, you're almost certainly not a kernel manager.
These suggestions may or may not apply to you. These suggestions may or may not apply to you.
First off, I'd suggest buying "Seven Habits of Highly Successful First off, I'd suggest buying "Seven Habits of Highly Effective
People", and NOT read it. Burn it, it's a great symbolic gesture. People", and NOT read it. Burn it, it's a great symbolic gesture.
(*) This document does so not so much by answering the question, but by (*) This document does so not so much by answering the question, but by

1
Documentation/accounting/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
getdelays

View File

@ -1,13 +0,0 @@
Empeg, Ltd's Empeg MP3 Car Audio Player
The initial design is to go in your car, but you can use it at home, on a
boat... almost anywhere. The principle is to store CD-quality music using
MPEG technology onto a hard disk in the unit, and use the power of the
embedded computer to serve up the music you want.
For more details, see:
http://www.empeg.com

View File

@ -1,49 +0,0 @@
Infra-red driver documentation.
Mike Crowe <mac@empeg.com>
(C) Empeg Ltd 1999
Not a lot here yet :-)
The Kenwood KCA-R6A remote control generates a sequence like the following:
Go low for approx 16T (Around 9000us)
Go high for approx 8T (Around 4000us)
Go low for less than 2T (Around 750us)
For each of the 32 bits
Go high for more than 2T (Around 1500us) == 1
Go high for less than T (Around 400us) == 0
Go low for less than 2T (Around 750us)
Rather than repeat a signal when the button is held down certain buttons
generate the following code to indicate repetition.
Go low for approx 16T
Go high for approx 4T
Go low for less than 2T
(By removing the <2T from the start of the sequence and placing at the end
it can be considered a stop bit but I found it easier to deal with it at
the start).
The 32 bits are encoded as XxYy where x and y are the actual data values
while X and Y are the logical inverses of the associated data values. Using
LSB first yields sensible codes for the numbers.
All codes are of the form b9xx
The numeric keys generate the code 0x where x is the number pressed.
Tuner 1c
Tape 1d
CD 1e
CD-MD-CH 1f
Track- 0a
Track+ 0b
Rewind 0c
FF 0d
DNPP 5e
Play/Pause 0e
Vol+ 14
Vol- 15

View File

@ -1,11 +0,0 @@
#!/bin/sh
mknod /dev/display c 244 0
mknod /dev/ir c 242 0
mknod /dev/usb0 c 243 0
mknod /dev/audio c 245 4
mknod /dev/dsp c 245 3
mknod /dev/mixer c 245 0
mknod /dev/empeg_state c 246 0
mknod /dev/radio0 c 81 64
ln -sf radio0 radio
ln -sf usb0 usb

1
Documentation/auxdisplay/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
cfag12864b-example

View File

@ -21,11 +21,14 @@ This driver is known to work with the following cards:
* SA E200 * SA E200
* SA E200i * SA E200i
* SA E500 * SA E500
* SA P700m
* SA P212 * SA P212
* SA P410 * SA P410
* SA P410i * SA P410i
* SA P411 * SA P411
* SA P812 * SA P812
* SA P712m
* SA P711m
Detecting drive failures: Detecting drive failures:
------------------------- -------------------------

1
Documentation/connector/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
ucon

View File

@ -213,4 +213,29 @@ TkRat (GUI)
Works. Use "Insert file..." or external editor. Works. Use "Insert file..." or external editor.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Gmail (Web GUI)
If you just have to use Gmail to send patches, it CAN be made to work. It
requires a bit of external help, though.
The first problem is that Gmail converts tabs to spaces. This will
totally break your patches. To prevent this, you have to use a different
editor. There is a firefox extension called "ViewSourceWith"
(https://addons.mozilla.org/en-US/firefox/addon/394) which allows you to
edit any text box in the editor of your choice. Configure it to launch
your favorite editor. When you want to send a patch, use this technique.
Once you have crafted your messsage + patch, save and exit the editor,
which should reload the Gmail edit box. GMAIL WILL PRESERVE THE TABS.
Hoorah. Apparently you can cut-n-paste literal tabs, but Gmail will
convert those to spaces upon sending!
The second problem is that Gmail converts tabs to spaces on replies. If
you reply to a patch, don't expect to be able to apply it as a patch.
The last problem is that Gmail will base64-encode any message that has a
non-ASCII character. That includes things like European names. Be aware.
Gmail is not convenient for lkml patches, but CAN be made to work.
### ###

View File

@ -56,30 +56,6 @@ Who: Mauro Carvalho Chehab <mchehab@infradead.org>
--------------------------- ---------------------------
What: old tuner-3036 i2c driver
When: 2.6.28
Why: This driver is for VERY old i2c-over-parallel port teletext receiver
boxes. Rather then spending effort on converting this driver to V4L2,
and since it is extremely unlikely that anyone still uses one of these
devices, it was decided to drop it.
Who: Hans Verkuil <hverkuil@xs4all.nl>
Mauro Carvalho Chehab <mchehab@infradead.org>
---------------------------
What: V4L2 dpc7146 driver
When: 2.6.28
Why: Old driver for the dpc7146 demonstration board that is no longer
relevant. The last time this was tested on actual hardware was
probably around 2002. Since this is a driver for a demonstration
board the decision was made to remove it rather than spending a
lot of effort continually updating this driver to stay in sync
with the latest internal V4L2 or I2C API.
Who: Hans Verkuil <hverkuil@xs4all.nl>
Mauro Carvalho Chehab <mchehab@infradead.org>
---------------------------
What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl]) What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
When: November 2005 When: November 2005
Files: drivers/pcmcia/: pcmcia_ioctl.c Files: drivers/pcmcia/: pcmcia_ioctl.c

View File

@ -161,8 +161,12 @@ prototypes:
int (*set_page_dirty)(struct page *page); int (*set_page_dirty)(struct page *page);
int (*readpages)(struct file *filp, struct address_space *mapping, int (*readpages)(struct file *filp, struct address_space *mapping,
struct list_head *pages, unsigned nr_pages); struct list_head *pages, unsigned nr_pages);
int (*prepare_write)(struct file *, struct page *, unsigned, unsigned); int (*write_begin)(struct file *, struct address_space *mapping,
int (*commit_write)(struct file *, struct page *, unsigned, unsigned); loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata);
int (*write_end)(struct file *, struct address_space *mapping,
loff_t pos, unsigned len, unsigned copied,
struct page *page, void *fsdata);
sector_t (*bmap)(struct address_space *, sector_t); sector_t (*bmap)(struct address_space *, sector_t);
int (*invalidatepage) (struct page *, unsigned long); int (*invalidatepage) (struct page *, unsigned long);
int (*releasepage) (struct page *, int); int (*releasepage) (struct page *, int);
@ -180,8 +184,6 @@ sync_page: no maybe
writepages: no writepages: no
set_page_dirty no no set_page_dirty no no
readpages: no readpages: no
prepare_write: no yes yes
commit_write: no yes yes
write_begin: no locks the page yes write_begin: no locks the page yes
write_end: no yes, unlocks yes write_end: no yes, unlocks yes
perform_write: no n/a yes perform_write: no n/a yes
@ -191,7 +193,7 @@ releasepage: no yes
direct_IO: no direct_IO: no
launder_page: no yes launder_page: no yes
->prepare_write(), ->commit_write(), ->sync_page() and ->readpage() ->write_begin(), ->write_end(), ->sync_page() and ->readpage()
may be called from the request handler (/dev/loop). may be called from the request handler (/dev/loop).
->readpage() unlocks the page, either synchronously or via I/O ->readpage() unlocks the page, either synchronously or via I/O

View File

@ -8,6 +8,12 @@ if you want to format from within Linux.
VFAT MOUNT OPTIONS VFAT MOUNT OPTIONS
---------------------------------------------------------------------- ----------------------------------------------------------------------
uid=### -- Set the owner of all files on this filesystem.
The default is the uid of current process.
gid=### -- Set the group of all files on this filesystem.
The default is the gid of current process.
umask=### -- The permission mask (for files and directories, see umask(1)). umask=### -- The permission mask (for files and directories, see umask(1)).
The default is the umask of current process. The default is the umask of current process.
@ -36,7 +42,7 @@ codepage=### -- Sets the codepage number for converting to shortname
characters on FAT filesystem. characters on FAT filesystem.
By default, FAT_DEFAULT_CODEPAGE setting is used. By default, FAT_DEFAULT_CODEPAGE setting is used.
iocharset=name -- Character set to use for converting between the iocharset=<name> -- Character set to use for converting between the
encoding is used for user visible filename and 16 bit encoding is used for user visible filename and 16 bit
Unicode characters. Long filenames are stored on disk Unicode characters. Long filenames are stored on disk
in Unicode format, but Unix for the most part doesn't in Unicode format, but Unix for the most part doesn't
@ -86,6 +92,8 @@ check=s|r|n -- Case sensitivity checking setting.
r: relaxed, case insensitive r: relaxed, case insensitive
n: normal, default setting, currently case insensitive n: normal, default setting, currently case insensitive
nocase -- This was deprecated for vfat. Use shortname=win95 instead.
shortname=lower|win95|winnt|mixed shortname=lower|win95|winnt|mixed
-- Shortname display/create setting. -- Shortname display/create setting.
lower: convert to lowercase for display, lower: convert to lowercase for display,
@ -99,11 +107,31 @@ shortname=lower|win95|winnt|mixed
tz=UTC -- Interpret timestamps as UTC rather than local time. tz=UTC -- Interpret timestamps as UTC rather than local time.
This option disables the conversion of timestamps This option disables the conversion of timestamps
between local time (as used by Windows on FAT) and UTC between local time (as used by Windows on FAT) and UTC
(which Linux uses internally). This is particuluarly (which Linux uses internally). This is particularly
useful when mounting devices (like digital cameras) useful when mounting devices (like digital cameras)
that are set to UTC in order to avoid the pitfalls of that are set to UTC in order to avoid the pitfalls of
local time. local time.
showexec -- If set, the execute permission bits of the file will be
allowed only if the extension part of the name is .EXE,
.COM, or .BAT. Not set by default.
debug -- Can be set, but unused by the current implementation.
sys_immutable -- If set, ATTR_SYS attribute on FAT is handled as
IMMUTABLE flag on Linux. Not set by default.
flush -- If set, the filesystem will try to flush to disk more
early than normal. Not set by default.
rodir -- FAT has the ATTR_RO (read-only) attribute. But on Windows,
the ATTR_RO of the directory will be just ignored actually,
and is used by only applications as flag. E.g. it's setted
for the customized folder.
If you want to use ATTR_RO as read-only flag even for
the directory, set this option.
<bool>: 0,1,yes,no,true,false <bool>: 0,1,yes,no,true,false
TODO TODO

View File

@ -492,7 +492,7 @@ written-back to storage typically in whole pages, however the
address_space has finer control of write sizes. address_space has finer control of write sizes.
The read process essentially only requires 'readpage'. The write The read process essentially only requires 'readpage'. The write
process is more complicated and uses prepare_write/commit_write or process is more complicated and uses write_begin/write_end or
set_page_dirty to write data into the address_space, and writepage, set_page_dirty to write data into the address_space, and writepage,
sync_page, and writepages to writeback data to storage. sync_page, and writepages to writeback data to storage.
@ -521,8 +521,6 @@ struct address_space_operations {
int (*set_page_dirty)(struct page *page); int (*set_page_dirty)(struct page *page);
int (*readpages)(struct file *filp, struct address_space *mapping, int (*readpages)(struct file *filp, struct address_space *mapping,
struct list_head *pages, unsigned nr_pages); struct list_head *pages, unsigned nr_pages);
int (*prepare_write)(struct file *, struct page *, unsigned, unsigned);
int (*commit_write)(struct file *, struct page *, unsigned, unsigned);
int (*write_begin)(struct file *, struct address_space *mapping, int (*write_begin)(struct file *, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata); struct page **pagep, void **fsdata);
@ -598,37 +596,7 @@ struct address_space_operations {
readpages is only used for read-ahead, so read errors are readpages is only used for read-ahead, so read errors are
ignored. If anything goes wrong, feel free to give up. ignored. If anything goes wrong, feel free to give up.
prepare_write: called by the generic write path in VM to set up a write write_begin:
request for a page. This indicates to the address space that
the given range of bytes is about to be written. The
address_space should check that the write will be able to
complete, by allocating space if necessary and doing any other
internal housekeeping. If the write will update parts of
any basic-blocks on storage, then those blocks should be
pre-read (if they haven't been read already) so that the
updated blocks can be written out properly.
The page will be locked.
Note: the page _must not_ be marked uptodate in this function
(or anywhere else) unless it actually is uptodate right now. As
soon as a page is marked uptodate, it is possible for a concurrent
read(2) to copy it to userspace.
commit_write: If prepare_write succeeds, new data will be copied
into the page and then commit_write will be called. It will
typically update the size of the file (if appropriate) and
mark the inode as dirty, and do any other related housekeeping
operations. It should avoid returning an error if possible -
errors should have been handled by prepare_write.
write_begin: This is intended as a replacement for prepare_write. The
key differences being that:
- it returns a locked page (in *pagep) rather than being
given a pre locked page;
- it must be able to cope with short writes (where the
length passed to write_begin is greater than the number
of bytes copied into the page).
Called by the generic buffered write code to ask the filesystem to Called by the generic buffered write code to ask the filesystem to
prepare to write len bytes at the given offset in the file. The prepare to write len bytes at the given offset in the file. The
address_space should check that the write will be able to complete, address_space should check that the write will be able to complete,
@ -640,6 +608,9 @@ struct address_space_operations {
The filesystem must return the locked pagecache page for the specified The filesystem must return the locked pagecache page for the specified
offset, in *pagep, for the caller to write into. offset, in *pagep, for the caller to write into.
It must be able to cope with short writes (where the length passed to
write_begin is greater than the number of bytes copied into the page).
flags is a field for AOP_FLAG_xxx flags, described in flags is a field for AOP_FLAG_xxx flags, described in
include/linux/fs.h. include/linux/fs.h.

View File

@ -8,7 +8,7 @@ Copyright 2008 Red Hat Inc.
Reviewers: Elias Oltmanns, Randy Dunlap, Andrew Morton, Reviewers: Elias Oltmanns, Randy Dunlap, Andrew Morton,
John Kacur, and David Teigland. John Kacur, and David Teigland.
Written for: 2.6.27-rc1 Written for: 2.6.28-rc2
Introduction Introduction
------------ ------------
@ -50,26 +50,26 @@ of ftrace. Here is a list of some of the key files:
Note: all time values are in microseconds. Note: all time values are in microseconds.
current_tracer : This is used to set or display the current tracer current_tracer: This is used to set or display the current tracer
that is configured. that is configured.
available_tracers : This holds the different types of tracers that available_tracers: This holds the different types of tracers that
have been compiled into the kernel. The tracers have been compiled into the kernel. The tracers
listed here can be configured by echoing their name listed here can be configured by echoing their name
into current_tracer. into current_tracer.
tracing_enabled : This sets or displays whether the current_tracer tracing_enabled: This sets or displays whether the current_tracer
is activated and tracing or not. Echo 0 into this is activated and tracing or not. Echo 0 into this
file to disable the tracer or 1 to enable it. file to disable the tracer or 1 to enable it.
trace : This file holds the output of the trace in a human readable trace: This file holds the output of the trace in a human readable
format (described below). format (described below).
latency_trace : This file shows the same trace but the information latency_trace: This file shows the same trace but the information
is organized more to display possible latencies is organized more to display possible latencies
in the system (described below). in the system (described below).
trace_pipe : The output is the same as the "trace" file but this trace_pipe: The output is the same as the "trace" file but this
file is meant to be streamed with live tracing. file is meant to be streamed with live tracing.
Reads from this file will block until new data Reads from this file will block until new data
is retrieved. Unlike the "trace" and "latency_trace" is retrieved. Unlike the "trace" and "latency_trace"
@ -82,11 +82,11 @@ of ftrace. Here is a list of some of the key files:
tracer is not adding more data, they will display tracer is not adding more data, they will display
the same information every time they are read. the same information every time they are read.
iter_ctrl : This file lets the user control the amount of data iter_ctrl: This file lets the user control the amount of data
that is displayed in one of the above output that is displayed in one of the above output
files. files.
trace_max_latency : Some of the tracers record the max latency. trace_max_latency: Some of the tracers record the max latency.
For example, the time interrupts are disabled. For example, the time interrupts are disabled.
This time is saved in this file. The max trace This time is saved in this file. The max trace
will also be stored, and displayed by either will also be stored, and displayed by either
@ -94,29 +94,26 @@ of ftrace. Here is a list of some of the key files:
only be recorded if the latency is greater than only be recorded if the latency is greater than
the value in this file. (in microseconds) the value in this file. (in microseconds)
trace_entries : This sets or displays the number of trace trace_entries: This sets or displays the number of bytes each CPU
entries each CPU buffer can hold. The tracer buffers buffer can hold. The tracer buffers are the same size
are the same size for each CPU. The displayed number for each CPU. The displayed number is the size of the
is the size of the CPU buffer and not total size. The CPU buffer and not total size of all buffers. The
trace buffers are allocated in pages (blocks of memory trace buffers are allocated in pages (blocks of memory
that the kernel uses for allocation, usually 4 KB in size). that the kernel uses for allocation, usually 4 KB in size).
Since each entry is smaller than a page, if the last If the last page allocated has room for more bytes
allocated page has room for more entries than were than requested, the rest of the page will be used,
requested, the rest of the page is used to allocate making the actual allocation bigger than requested.
entries. (Note, the size may not be a multiple of the page size due
to buffer managment overhead.)
This can only be updated when the current_tracer This can only be updated when the current_tracer
is set to "none". is set to "nop".
NOTE: It is planned on changing the allocated buffers tracing_cpumask: This is a mask that lets the user only trace
from being the number of possible CPUS to
the number of online CPUS.
tracing_cpumask : This is a mask that lets the user only trace
on specified CPUS. The format is a hex string on specified CPUS. The format is a hex string
representing the CPUS. representing the CPUS.
set_ftrace_filter : When dynamic ftrace is configured in (see the set_ftrace_filter: When dynamic ftrace is configured in (see the
section below "dynamic ftrace"), the code is dynamically section below "dynamic ftrace"), the code is dynamically
modified (code text rewrite) to disable calling of the modified (code text rewrite) to disable calling of the
function profiler (mcount). This lets tracing be configured function profiler (mcount). This lets tracing be configured
@ -130,14 +127,11 @@ of ftrace. Here is a list of some of the key files:
be traced. If a function exists in both set_ftrace_filter be traced. If a function exists in both set_ftrace_filter
and set_ftrace_notrace, the function will _not_ be traced. and set_ftrace_notrace, the function will _not_ be traced.
available_filter_functions : When a function is encountered the first available_filter_functions: This lists the functions that ftrace
time by the dynamic tracer, it is recorded and has processed and can trace. These are the function
later the call is converted into a nop. This file names that you can pass to "set_ftrace_filter" or
lists the functions that have been recorded "set_ftrace_notrace". (See the section "dynamic ftrace"
by the dynamic tracer and these functions can below for more details.)
be used to set the ftrace filter by the above
"set_ftrace_filter" file. (See the section "dynamic ftrace"
below for more details).
The Tracers The Tracers
@ -145,7 +139,7 @@ The Tracers
Here is the list of current tracers that may be configured. Here is the list of current tracers that may be configured.
ftrace - function tracer that uses mcount to trace all functions. function - function tracer that uses mcount to trace all functions.
sched_switch - traces the context switches between tasks. sched_switch - traces the context switches between tasks.
@ -166,8 +160,8 @@ Here is the list of current tracers that may be configured.
the highest priority task to get scheduled after the highest priority task to get scheduled after
it has been woken up. it has been woken up.
none - This is not a tracer. To remove all tracers from tracing nop - This is not a tracer. To remove all tracers from tracing
simply echo "none" into current_tracer. simply echo "nop" into current_tracer.
Examples of using the tracer Examples of using the tracer
@ -182,7 +176,7 @@ Output format:
Here is an example of the output format of the file "trace" Here is an example of the output format of the file "trace"
-------- --------
# tracer: ftrace # tracer: function
# #
# TASK-PID CPU# TIMESTAMP FUNCTION # TASK-PID CPU# TIMESTAMP FUNCTION
# | | | | | # | | | | |
@ -192,7 +186,7 @@ Here is an example of the output format of the file "trace"
-------- --------
A header is printed with the tracer name that is represented by the trace. A header is printed with the tracer name that is represented by the trace.
In this case the tracer is "ftrace". Then a header showing the format. Task In this case the tracer is "function". Then a header showing the format. Task
name "bash", the task PID "4251", the CPU that it was running on name "bash", the task PID "4251", the CPU that it was running on
"01", the timestamp in <secs>.<usecs> format, the function name that was "01", the timestamp in <secs>.<usecs> format, the function name that was
traced "path_put" and the parent function that called this function traced "path_put" and the parent function that called this function
@ -291,6 +285,9 @@ explains which is which.
CPU#: The CPU which the process was running on. CPU#: The CPU which the process was running on.
irqs-off: 'd' interrupts are disabled. '.' otherwise. irqs-off: 'd' interrupts are disabled. '.' otherwise.
Note: If the architecture does not support a way to
read the irq flags variable, an 'X' will always
be printed here.
need-resched: 'N' task need_resched is set, '.' otherwise. need-resched: 'N' task need_resched is set, '.' otherwise.
@ -1000,22 +997,20 @@ is the stack for the hard interrupt. This hides the fact that NEED_RESCHED
has been set. We do not see the 'N' until we switch back to the task's has been set. We do not see the 'N' until we switch back to the task's
assigned stack. assigned stack.
ftrace function
------ --------
ftrace is not only the name of the tracing infrastructure, but it This tracer is the function tracer. Enabling the function tracer
is also a name of one of the tracers. The tracer is the function can be done from the debug file system. Make sure the ftrace_enabled is
tracer. Enabling the function tracer can be done from the set; otherwise this tracer is a nop.
debug file system. Make sure the ftrace_enabled is set otherwise
this tracer is a nop.
# sysctl kernel.ftrace_enabled=1 # sysctl kernel.ftrace_enabled=1
# echo ftrace > /debug/tracing/current_tracer # echo function > /debug/tracing/current_tracer
# echo 1 > /debug/tracing/tracing_enabled # echo 1 > /debug/tracing/tracing_enabled
# usleep 1 # usleep 1
# echo 0 > /debug/tracing/tracing_enabled # echo 0 > /debug/tracing/tracing_enabled
# cat /debug/tracing/trace # cat /debug/tracing/trace
# tracer: ftrace # tracer: function
# #
# TASK-PID CPU# TIMESTAMP FUNCTION # TASK-PID CPU# TIMESTAMP FUNCTION
# | | | | | # | | | | |
@ -1037,10 +1032,10 @@ this tracer is a nop.
[...] [...]
Note: ftrace uses ring buffers to store the above entries. The newest data Note: function tracer uses ring buffers to store the above entries.
may overwrite the oldest data. Sometimes using echo to stop the trace The newest data may overwrite the oldest data. Sometimes using echo to
is not sufficient because the tracing could have overwritten the data stop the trace is not sufficient because the tracing could have overwritten
that you wanted to record. For this reason, it is sometimes better to the data that you wanted to record. For this reason, it is sometimes better to
disable tracing directly from a program. This allows you to stop the disable tracing directly from a program. This allows you to stop the
tracing at the point that you hit the part that you are interested in. tracing at the point that you hit the part that you are interested in.
To disable the tracing directly from a C program, something like following To disable the tracing directly from a C program, something like following
@ -1074,18 +1069,31 @@ every kernel function, produced by the -pg switch in gcc), starts
of pointing to a simple return. (Enabling FTRACE will include the of pointing to a simple return. (Enabling FTRACE will include the
-pg switch in the compiling of the kernel.) -pg switch in the compiling of the kernel.)
When dynamic ftrace is initialized, it calls kstop_machine to make At compile time every C file object is run through the
the machine act like a uniprocessor so that it can freely modify code recordmcount.pl script (located in the scripts directory). This
without worrying about other processors executing that same code. At script will process the C object using objdump to find all the
initialization, the mcount calls are changed to call a "record_ip" locations in the .text section that call mcount. (Note, only
function. After this, the first time a kernel function is called, the .text section is processed, since processing other sections
it has the calling address saved in a hash table. like .init.text may cause races due to those sections being freed).
Later on the ftraced kernel thread is awoken and will again call A new section called "__mcount_loc" is created that holds references
kstop_machine if new functions have been recorded. The ftraced thread to all the mcount call sites in the .text section. This section is
will change all calls to mcount to "nop". Just calling mcount compiled back into the original object. The final linker will add
and having mcount return has shown a 10% overhead. By converting all these references into a single table.
it to a nop, there is no measurable overhead to the system.
On boot up, before SMP is initialized, the dynamic ftrace code
scans this table and updates all the locations into nops. It also
records the locations, which are added to the available_filter_functions
list. Modules are processed as they are loaded and before they are
executed. When a module is unloaded, it also removes its functions from
the ftrace function list. This is automatic in the module unload
code, and the module author does not need to worry about it.
When tracing is enabled, kstop_machine is called to prevent races
with the CPUS executing code being modified (which can cause the
CPU to do undesireable things), and the nops are patched back
to calls. But this time, they do not call mcount (which is just
a function stub). They now call into the ftrace infrastructure.
One special side-effect to the recording of the functions being One special side-effect to the recording of the functions being
traced is that we can now selectively choose which functions we traced is that we can now selectively choose which functions we
@ -1248,36 +1256,6 @@ Produces:
We can see that there's no more lock or preempt tracing. We can see that there's no more lock or preempt tracing.
ftraced
-------
As mentioned above, when dynamic ftrace is configured in, a kernel
thread wakes up once a second and checks to see if there are mcount
calls that need to be converted into nops. If there are not any, then
it simply goes back to sleep. But if there are some, it will call
kstop_machine to convert the calls to nops.
There may be a case in which you do not want this added latency.
Perhaps you are doing some audio recording and this activity might
cause skips in the playback. There is an interface to disable
and enable the "ftraced" kernel thread.
# echo 0 > /debug/tracing/ftraced_enabled
This will disable the calling of kstop_machine to update the
mcount calls to nops. Remember that there is a large overhead
to calling mcount. Without this kernel thread, that overhead will
exist.
If there are recorded calls to mcount, any write to the ftraced_enabled
file will cause the kstop_machine to run. This means that a
user can manually perform the updates when they want to by simply
echoing a '0' into the ftraced_enabled file.
The updates are also done at the beginning of enabling a tracer
that uses ftrace function recording.
trace_pipe trace_pipe
---------- ----------
@ -1286,14 +1264,14 @@ on the tracing is different. Every read from trace_pipe is consumed.
This means that subsequent reads will be different. The trace This means that subsequent reads will be different. The trace
is live. is live.
# echo ftrace > /debug/tracing/current_tracer # echo function > /debug/tracing/current_tracer
# cat /debug/tracing/trace_pipe > /tmp/trace.out & # cat /debug/tracing/trace_pipe > /tmp/trace.out &
[1] 4153 [1] 4153
# echo 1 > /debug/tracing/tracing_enabled # echo 1 > /debug/tracing/tracing_enabled
# usleep 1 # usleep 1
# echo 0 > /debug/tracing/tracing_enabled # echo 0 > /debug/tracing/tracing_enabled
# cat /debug/tracing/trace # cat /debug/tracing/trace
# tracer: ftrace # tracer: function
# #
# TASK-PID CPU# TIMESTAMP FUNCTION # TASK-PID CPU# TIMESTAMP FUNCTION
# | | | | | # | | | | |
@ -1314,7 +1292,7 @@ is live.
Note, reading the trace_pipe file will block until more input is added. Note, reading the trace_pipe file will block until more input is added.
By changing the tracer, trace_pipe will issue an EOF. We needed By changing the tracer, trace_pipe will issue an EOF. We needed
to set the ftrace tracer _before_ cating the trace_pipe file. to set the function tracer _before_ we "cat" the trace_pipe file.
trace entries trace entries
@ -1331,10 +1309,10 @@ number of entries.
65620 65620
Note, to modify this, you must have tracing completely disabled. To do that, Note, to modify this, you must have tracing completely disabled. To do that,
echo "none" into the current_tracer. If the current_tracer is not set echo "nop" into the current_tracer. If the current_tracer is not set
to "none", an EINVAL error will be returned. to "nop", an EINVAL error will be returned.
# echo none > /debug/tracing/current_tracer # echo nop > /debug/tracing/current_tracer
# echo 100000 > /debug/tracing/trace_entries # echo 100000 > /debug/tracing/trace_entries
# cat /debug/tracing/trace_entries # cat /debug/tracing/trace_entries
100045 100045

View File

@ -42,7 +42,7 @@ I suspect that this driver could be made to work for the following SiS
chipsets as well: 635, and 635T. If anyone owns a board with those chips chipsets as well: 635, and 635T. If anyone owns a board with those chips
AND is willing to risk crashing & burning an otherwise well-behaved kernel AND is willing to risk crashing & burning an otherwise well-behaved kernel
in the name of progress... please contact me at <mhoffman@lightlink.com> or in the name of progress... please contact me at <mhoffman@lightlink.com> or
via the project's mailing list: <i2c@lm-sensors.org>. Please send bug via the linux-i2c mailing list: <linux-i2c@vger.kernel.org>. Please send bug
reports and/or success stories as well. reports and/or success stories as well.

1
Documentation/ia64/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
aliasing-test

View File

@ -0,0 +1,405 @@
Elantech Touchpad Driver
========================
Copyright (C) 2007-2008 Arjan Opmeer <arjan@opmeer.net>
Extra information for hardware version 1 found and
provided by Steve Havelka
Version 2 (EeePC) hardware support based on patches
received from Woody at Xandros and forwarded to me
by user StewieGriffin at the eeeuser.com forum
Contents
~~~~~~~~
1. Introduction
2. Extra knobs
3. Hardware version 1
3.1 Registers
3.2 Native relative mode 4 byte packet format
3.3 Native absolute mode 4 byte packet format
4. Hardware version 2
4.1 Registers
4.2 Native absolute mode 6 byte packet format
4.2.1 One finger touch
4.2.2 Two finger touch
1. Introduction
~~~~~~~~~~~~
Currently the Linux Elantech touchpad driver is aware of two different
hardware versions unimaginatively called version 1 and version 2. Version 1
is found in "older" laptops and uses 4 bytes per packet. Version 2 seems to
be introduced with the EeePC and uses 6 bytes per packet.
The driver tries to support both hardware versions and should be compatible
with the Xorg Synaptics touchpad driver and its graphical configuration
utilities.
Additionally the operation of the touchpad can be altered by adjusting the
contents of some of its internal registers. These registers are represented
by the driver as sysfs entries under /sys/bus/serio/drivers/psmouse/serio?
that can be read from and written to.
Currently only the registers for hardware version 1 are somewhat understood.
Hardware version 2 seems to use some of the same registers but it is not
known whether the bits in the registers represent the same thing or might
have changed their meaning.
On top of that, some register settings have effect only when the touchpad is
in relative mode and not in absolute mode. As the Linux Elantech touchpad
driver always puts the hardware into absolute mode not all information
mentioned below can be used immediately. But because there is no freely
available Elantech documentation the information is provided here anyway for
completeness sake.
/////////////////////////////////////////////////////////////////////////////
2. Extra knobs
~~~~~~~~~~~
Currently the Linux Elantech touchpad driver provides two extra knobs under
/sys/bus/serio/drivers/psmouse/serio? for the user.
* debug
Turn different levels of debugging ON or OFF.
By echoing "0" to this file all debugging will be turned OFF.
Currently a value of "1" will turn on some basic debugging and a value of
"2" will turn on packet debugging. For hardware version 1 the default is
OFF. For version 2 the default is "1".
Turning packet debugging on will make the driver dump every packet
received to the syslog before processing it. Be warned that this can
generate quite a lot of data!
* paritycheck
Turns parity checking ON or OFF.
By echoing "0" to this file parity checking will be turned OFF. Any
non-zero value will turn it ON. For hardware version 1 the default is ON.
For version 2 the default it is OFF.
Hardware version 1 provides basic data integrity verification by
calculating a parity bit for the last 3 bytes of each packet. The driver
can check these bits and reject any packet that appears corrupted. Using
this knob you can bypass that check.
It is not known yet whether hardware version 2 provides the same parity
bits. Hence checking is disabled by default. Currently even turning it on
will do nothing.
/////////////////////////////////////////////////////////////////////////////
3. Hardware version 1
==================
3.1 Registers
~~~~~~~~~
By echoing a hexadecimal value to a register it contents can be altered.
For example:
echo -n 0x16 > reg_10
* reg_10
bit 7 6 5 4 3 2 1 0
B C T D L A S E
E: 1 = enable smart edges unconditionally
S: 1 = enable smart edges only when dragging
A: 1 = absolute mode (needs 4 byte packets, see reg_11)
L: 1 = enable drag lock (see reg_22)
D: 1 = disable dynamic resolution
T: 1 = disable tapping
C: 1 = enable corner tap
B: 1 = swap left and right button
* reg_11
bit 7 6 5 4 3 2 1 0
1 0 0 H V 1 F P
P: 1 = enable parity checking for relative mode
F: 1 = enable native 4 byte packet mode
V: 1 = enable vertical scroll area
H: 1 = enable horizontal scroll area
* reg_20
single finger width?
* reg_21
scroll area width (small: 0x40 ... wide: 0xff)
* reg_22
drag lock time out (short: 0x14 ... long: 0xfe;
0xff = tap again to release)
* reg_23
tap make timeout?
* reg_24
tap release timeout?
* reg_25
smart edge cursor speed (0x02 = slow, 0x03 = medium, 0x04 = fast)
* reg_26
smart edge activation area width?
3.2 Native relative mode 4 byte packet format
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
byte 0:
bit 7 6 5 4 3 2 1 0
c c p2 p1 1 M R L
L, R, M = 1 when Left, Right, Middle mouse button pressed
some models have M as byte 3 odd parity bit
when parity checking is enabled (reg_11, P = 1):
p1..p2 = byte 1 and 2 odd parity bit
c = 1 when corner tap detected
byte 1:
bit 7 6 5 4 3 2 1 0
dx7 dx6 dx5 dx4 dx3 dx2 dx1 dx0
dx7..dx0 = x movement; positive = right, negative = left
byte 1 = 0xf0 when corner tap detected
byte 2:
bit 7 6 5 4 3 2 1 0
dy7 dy6 dy5 dy4 dy3 dy2 dy1 dy0
dy7..dy0 = y movement; positive = up, negative = down
byte 3:
parity checking enabled (reg_11, P = 1):
bit 7 6 5 4 3 2 1 0
w h n1 n0 ds3 ds2 ds1 ds0
normally:
ds3..ds0 = scroll wheel amount and direction
positive = down or left
negative = up or right
when corner tap detected:
ds0 = 1 when top right corner tapped
ds1 = 1 when bottom right corner tapped
ds2 = 1 when bottom left corner tapped
ds3 = 1 when top left corner tapped
n1..n0 = number of fingers on touchpad
only models with firmware 2.x report this, models with
firmware 1.x seem to map one, two and three finger taps
directly to L, M and R mouse buttons
h = 1 when horizontal scroll action
w = 1 when wide finger touch?
otherwise (reg_11, P = 0):
bit 7 6 5 4 3 2 1 0
ds7 ds6 ds5 ds4 ds3 ds2 ds1 ds0
ds7..ds0 = vertical scroll amount and direction
negative = up
positive = down
3.3 Native absolute mode 4 byte packet format
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
byte 0:
firmware version 1.x:
bit 7 6 5 4 3 2 1 0
D U p1 p2 1 p3 R L
L, R = 1 when Left, Right mouse button pressed
p1..p3 = byte 1..3 odd parity bit
D, U = 1 when rocker switch pressed Up, Down
firmware version 2.x:
bit 7 6 5 4 3 2 1 0
n1 n0 p2 p1 1 p3 R L
L, R = 1 when Left, Right mouse button pressed
p1..p3 = byte 1..3 odd parity bit
n1..n0 = number of fingers on touchpad
byte 1:
firmware version 1.x:
bit 7 6 5 4 3 2 1 0
f 0 th tw x9 x8 y9 y8
tw = 1 when two finger touch
th = 1 when three finger touch
f = 1 when finger touch
firmware version 2.x:
bit 7 6 5 4 3 2 1 0
. . . . x9 x8 y9 y8
byte 2:
bit 7 6 5 4 3 2 1 0
x7 x6 x5 x4 x3 x2 x1 x0
x9..x0 = absolute x value (horizontal)
byte 3:
bit 7 6 5 4 3 2 1 0
y7 y6 y5 y4 y3 y2 y1 y0
y9..y0 = absolute y value (vertical)
/////////////////////////////////////////////////////////////////////////////
4. Hardware version 2
==================
4.1 Registers
~~~~~~~~~
By echoing a hexadecimal value to a register it contents can be altered.
For example:
echo -n 0x56 > reg_10
* reg_10
bit 7 6 5 4 3 2 1 0
0 1 0 1 0 1 D 0
D: 1 = enable drag and drop
* reg_11
bit 7 6 5 4 3 2 1 0
1 0 0 0 S 0 1 0
S: 1 = enable vertical scroll
* reg_21
unknown (0x00)
* reg_22
drag and drop release time out (short: 0x70 ... long 0x7e;
0x7f = never i.e. tap again to release)
4.2 Native absolute mode 6 byte packet format
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4.2.1 One finger touch
~~~~~~~~~~~~~~~~
byte 0:
bit 7 6 5 4 3 2 1 0
n1 n0 . . . . R L
L, R = 1 when Left, Right mouse button pressed
n1..n0 = numbers of fingers on touchpad
byte 1:
bit 7 6 5 4 3 2 1 0
x15 x14 x13 x12 x11 x10 x9 x8
byte 2:
bit 7 6 5 4 3 2 1 0
x7 x6 x5 x4 x4 x2 x1 x0
x15..x0 = absolute x value (horizontal)
byte 3:
bit 7 6 5 4 3 2 1 0
. . . . . . . .
byte 4:
bit 7 6 5 4 3 2 1 0
y15 y14 y13 y12 y11 y10 y8 y8
byte 5:
bit 7 6 5 4 3 2 1 0
y7 y6 y5 y4 y3 y2 y1 y0
y15..y0 = absolute y value (vertical)
4.2.2 Two finger touch
~~~~~~~~~~~~~~~~
byte 0:
bit 7 6 5 4 3 2 1 0
n1 n0 ay8 ax8 . . R L
L, R = 1 when Left, Right mouse button pressed
n1..n0 = numbers of fingers on touchpad
byte 1:
bit 7 6 5 4 3 2 1 0
ax7 ax6 ax5 ax4 ax3 ax2 ax1 ax0
ax8..ax0 = first finger absolute x value
byte 2:
bit 7 6 5 4 3 2 1 0
ay7 ay6 ay5 ay4 ay3 ay2 ay1 ay0
ay8..ay0 = first finger absolute y value
byte 3:
bit 7 6 5 4 3 2 1 0
. . by8 bx8 . . . .
byte 4:
bit 7 6 5 4 3 2 1 0
bx7 bx6 bx5 bx4 bx3 bx2 bx1 bx0
bx8..bx0 = second finger absolute x value
byte 5:
bit 7 6 5 4 3 2 1 0
by7 by8 by5 by4 by3 by2 by1 by0
by8..by0 = second finger absolute y value

View File

@ -0,0 +1,82 @@
The io_mapping functions in linux/io-mapping.h provide an abstraction for
efficiently mapping small regions of an I/O device to the CPU. The initial
usage is to support the large graphics aperture on 32-bit processors where
ioremap_wc cannot be used to statically map the entire aperture to the CPU
as it would consume too much of the kernel address space.
A mapping object is created during driver initialization using
struct io_mapping *io_mapping_create_wc(unsigned long base,
unsigned long size)
'base' is the bus address of the region to be made
mappable, while 'size' indicates how large a mapping region to
enable. Both are in bytes.
This _wc variant provides a mapping which may only be used
with the io_mapping_map_atomic_wc or io_mapping_map_wc.
With this mapping object, individual pages can be mapped either atomically
or not, depending on the necessary scheduling environment. Of course, atomic
maps are more efficient:
void *io_mapping_map_atomic_wc(struct io_mapping *mapping,
unsigned long offset)
'offset' is the offset within the defined mapping region.
Accessing addresses beyond the region specified in the
creation function yields undefined results. Using an offset
which is not page aligned yields an undefined result. The
return value points to a single page in CPU address space.
This _wc variant returns a write-combining map to the
page and may only be used with mappings created by
io_mapping_create_wc
Note that the task may not sleep while holding this page
mapped.
void io_mapping_unmap_atomic(void *vaddr)
'vaddr' must be the the value returned by the last
io_mapping_map_atomic_wc call. This unmaps the specified
page and allows the task to sleep once again.
If you need to sleep while holding the lock, you can use the non-atomic
variant, although they may be significantly slower.
void *io_mapping_map_wc(struct io_mapping *mapping,
unsigned long offset)
This works like io_mapping_map_atomic_wc except it allows
the task to sleep while holding the page mapped.
void io_mapping_unmap(void *vaddr)
This works like io_mapping_unmap_atomic, except it is used
for pages mapped with io_mapping_map_wc.
At driver close time, the io_mapping object must be freed:
void io_mapping_free(struct io_mapping *mapping)
Current Implementation:
The initial implementation of these functions uses existing mapping
mechanisms and so provides only an abstraction layer and no new
functionality.
On 64-bit processors, io_mapping_create_wc calls ioremap_wc for the whole
range, creating a permanent kernel-visible mapping to the resource. The
map_atomic and map functions add the requested offset to the base of the
virtual address returned by ioremap_wc.
On 32-bit processors with HIGHMEM defined, io_mapping_map_atomic_wc uses
kmap_atomic_pfn to map the specified page in an atomic fashion;
kmap_atomic_pfn isn't really supposed to be used with device pages, but it
provides an efficient mapping for this usage.
On 32-bit processors without HIGHMEM defined, io_mapping_map_atomic_wc and
io_mapping_map_wc both use ioremap_wc, a terribly inefficient function which
performs an IPI to inform all processors about the new mapping. This results
in a significant performance penalty.

View File

@ -5,7 +5,7 @@ I want to thank all who contributed to this project and especially to:
Thomas Bogendörfer (tsbogend@bigbug.franken.de) Thomas Bogendörfer (tsbogend@bigbug.franken.de)
Tester, lots of bugfixes and hints. Tester, lots of bugfixes and hints.
Alan Cox (alan@redhat.com) Alan Cox (alan@lxorguk.ukuu.org.uk)
For help getting into standard-kernel. For help getting into standard-kernel.
Henner Eisen (eis@baty.hanse.de) Henner Eisen (eis@baty.hanse.de)

View File

@ -11,14 +11,14 @@ for non English (read: Japanese) speakers and is not intended as a
fork. So if you have any comments or updates for this file, please try fork. So if you have any comments or updates for this file, please try
to update the original English file first. to update the original English file first.
Last Updated: 2008/08/21 Last Updated: 2008/10/24
================================== ==================================
これは、 これは、
linux-2.6.27/Documentation/HOWTO linux-2.6.28/Documentation/HOWTO
の和訳です。 の和訳です。
翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > 翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
翻訳日: 2008/8/5 翻訳日: 2008/10/24
翻訳者: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com> 翻訳者: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com>
校正者: 松倉さん <nbh--mats at nifty dot com> 校正者: 松倉さん <nbh--mats at nifty dot com>
小林 雅典さん (Masanori Kobayasi) <zap03216 at nifty dot ne dot jp> 小林 雅典さん (Masanori Kobayasi) <zap03216 at nifty dot ne dot jp>
@ -110,8 +110,8 @@ Linux カーネルソースツリーは幅広い範囲のドキュメントを
新しいドキュメントファイルも追加することを勧めます。 新しいドキュメントファイルも追加することを勧めます。
カーネルの変更が、カーネルがユーザ空間に公開しているインターフェイスの カーネルの変更が、カーネルがユーザ空間に公開しているインターフェイスの
変更を引き起こす場合、その変更を説明するマニュアルページのパッチや情報 変更を引き起こす場合、その変更を説明するマニュアルページのパッチや情報
をマニュアルページのメンテナ mtk.manpages@gmail.com に送ることを勧めま をマニュアルページのメンテナ mtk.manpages@gmail.com に送り、CC を
す。 linux-api@ver.kernel.org に送ることを勧めます。
以下はカーネルソースツリーに含まれている読んでおくべきファイルの一覧で 以下はカーネルソースツリーに含まれている読んでおくべきファイルの一覧で
す- す-
@ -149,7 +149,7 @@ Linux カーネルソースツリーは幅広い範囲のドキュメントを
この他にパッチを作る方法についてのよくできた記述は- この他にパッチを作る方法についてのよくできた記述は-
"The Perfect Patch" "The Perfect Patch"
http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt http://userweb.kernel.org/~akpm/stuff/tpp.txt
"Linux kernel patch submission format" "Linux kernel patch submission format"
http://linux.yyz.us/patch-format.html http://linux.yyz.us/patch-format.html
@ -664,7 +664,7 @@ Linux カーネルコミュニティは、一度に大量のコードの塊を
これについて全てがどのようにあるべきかについての詳細は、以下のドキュメ これについて全てがどのようにあるべきかについての詳細は、以下のドキュメ
ントの ChangeLog セクションを見てください- ントの ChangeLog セクションを見てください-
"The Perfect Patch" "The Perfect Patch"
http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt http://userweb.kernel.org/~akpm/stuff/tpp.txt
これらのどれもが、時にはとても困難です。これらの慣例を完璧に実施するに これらのどれもが、時にはとても困難です。これらの慣例を完璧に実施するに
は数年かかるかもしれません。これは継続的な改善のプロセスであり、そのた は数年かかるかもしれません。これは継続的な改善のプロセスであり、そのた

View File

@ -100,7 +100,7 @@ parameter is applicable:
X86-32 X86-32, aka i386 architecture is enabled. X86-32 X86-32, aka i386 architecture is enabled.
X86-64 X86-64 architecture is enabled. X86-64 X86-64 architecture is enabled.
More X86-64 boot options can be found in More X86-64 boot options can be found in
Documentation/x86_64/boot-options.txt . Documentation/x86/x86_64/boot-options.txt .
X86 Either 32bit or 64bit x86 (same as X86-32+X86-64) X86 Either 32bit or 64bit x86 (same as X86-32+X86-64)
In addition, the following text indicates that the option: In addition, the following text indicates that the option:
@ -112,10 +112,10 @@ In addition, the following text indicates that the option:
Parameters denoted with BOOT are actually interpreted by the boot Parameters denoted with BOOT are actually interpreted by the boot
loader, and have no meaning to the kernel directly. loader, and have no meaning to the kernel directly.
Do not modify the syntax of boot loader parameters without extreme Do not modify the syntax of boot loader parameters without extreme
need or coordination with <Documentation/i386/boot.txt>. need or coordination with <Documentation/x86/i386/boot.txt>.
There are also arch-specific kernel-parameters not documented here. There are also arch-specific kernel-parameters not documented here.
See for example <Documentation/x86_64/boot-options.txt>. See for example <Documentation/x86/x86_64/boot-options.txt>.
Note that ALL kernel parameters listed below are CASE SENSITIVE, and that Note that ALL kernel parameters listed below are CASE SENSITIVE, and that
a trailing = on the name of any parameter states that that parameter will a trailing = on the name of any parameter states that that parameter will
@ -995,13 +995,15 @@ and is between 256 and 4096 characters. It is defined in the file
Format: Format:
<cpu number>,...,<cpu number> <cpu number>,...,<cpu number>
or or
<cpu number>-<cpu number> (must be a positive range in ascending order) <cpu number>-<cpu number>
(must be a positive range in ascending order)
or a mixture or a mixture
<cpu number>,...,<cpu number>-<cpu number> <cpu number>,...,<cpu number>-<cpu number>
This option can be used to specify one or more CPUs This option can be used to specify one or more CPUs
to isolate from the general SMP balancing and scheduling to isolate from the general SMP balancing and scheduling
algorithms. The only way to move a process onto or off algorithms. You can move a process onto or off an
an "isolated" CPU is via the CPU affinity syscalls. "isolated" CPU via the CPU affinity syscalls or cpuset.
<cpu number> begins at 0 and the maximum value is <cpu number> begins at 0 and the maximum value is
"number of CPUs in system - 1". "number of CPUs in system - 1".
@ -1222,7 +1224,7 @@ and is between 256 and 4096 characters. It is defined in the file
mce [X86-32] Machine Check Exception mce [X86-32] Machine Check Exception
mce=option [X86-64] See Documentation/x86_64/boot-options.txt mce=option [X86-64] See Documentation/x86/x86_64/boot-options.txt
md= [HW] RAID subsystems devices and level md= [HW] RAID subsystems devices and level
See Documentation/md.txt. See Documentation/md.txt.
@ -1470,8 +1472,6 @@ and is between 256 and 4096 characters. It is defined in the file
Valid arguments: on, off Valid arguments: on, off
Default: on Default: on
noirqbalance [X86-32,SMP,KNL] Disable kernel irq balancing
noirqdebug [X86-32] Disables the code which attempts to detect and noirqdebug [X86-32] Disables the code which attempts to detect and
disable unhandled interrupt sources. disable unhandled interrupt sources.
@ -1728,7 +1728,7 @@ and is between 256 and 4096 characters. It is defined in the file
See Documentation/paride.txt. See Documentation/paride.txt.
pirq= [SMP,APIC] Manual mp-table setup pirq= [SMP,APIC] Manual mp-table setup
See Documentation/i386/IO-APIC.txt. See Documentation/x86/i386/IO-APIC.txt.
plip= [PPT,NET] Parallel port network link plip= [PPT,NET] Parallel port network link
Format: { parport<nr> | timid | 0 } Format: { parport<nr> | timid | 0 }
@ -2343,7 +2343,7 @@ and is between 256 and 4096 characters. It is defined in the file
See Documentation/fb/modedb.txt. See Documentation/fb/modedb.txt.
vga= [BOOT,X86-32] Select a particular video mode vga= [BOOT,X86-32] Select a particular video mode
See Documentation/i386/boot.txt and See Documentation/x86/i386/boot.txt and
Documentation/svga.txt. Documentation/svga.txt.
Use vga=ask for menu. Use vga=ask for menu.
This is actually a boot loader parameter; the value is This is actually a boot loader parameter; the value is

View File

@ -1,5 +1,5 @@
# This creates the demonstration utility "lguest" which runs a Linux guest. # This creates the demonstration utility "lguest" which runs a Linux guest.
CFLAGS:=-Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include CFLAGS:=-Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include
LDLIBS:=-lz LDLIBS:=-lz
all: lguest all: lguest

View File

@ -44,7 +44,7 @@
#include "linux/virtio_console.h" #include "linux/virtio_console.h"
#include "linux/virtio_rng.h" #include "linux/virtio_rng.h"
#include "linux/virtio_ring.h" #include "linux/virtio_ring.h"
#include "asm-x86/bootparam.h" #include "asm/bootparam.h"
/*L:110 We can ignore the 39 include files we need for this program, but I do /*L:110 We can ignore the 39 include files we need for this program, but I do
* want to draw attention to the use of kernel-style types. * want to draw attention to the use of kernel-style types.
* *
@ -402,7 +402,7 @@ static unsigned long load_bzimage(int fd)
void *p = from_guest_phys(0x100000); void *p = from_guest_phys(0x100000);
/* Go back to the start of the file and read the header. It should be /* Go back to the start of the file and read the header. It should be
* a Linux boot header (see Documentation/i386/boot.txt) */ * a Linux boot header (see Documentation/x86/i386/boot.txt) */
lseek(fd, 0, SEEK_SET); lseek(fd, 0, SEEK_SET);
read(fd, &boot, sizeof(boot)); read(fd, &boot, sizeof(boot));

1
Documentation/networking/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
ifenslave

View File

@ -60,6 +60,6 @@ Tobias Ringstrom <tori@unhappy.mine.nu> : Current Maintainer
Contributors: Contributors:
Marcelo Tosatti <marcelo@conectiva.com.br> Marcelo Tosatti <marcelo@conectiva.com.br>
Alan Cox <alan@redhat.com> Alan Cox <alan@lxorguk.ukuu.org.uk>
Jeff Garzik <jgarzik@pobox.com> Jeff Garzik <jgarzik@pobox.com>
Vojtech Pavlik <vojtech@suse.cz> Vojtech Pavlik <vojtech@suse.cz>

1
Documentation/pcmcia/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
crc32hash

View File

@ -41,25 +41,14 @@ Table of Contents
VI - System-on-a-chip devices and nodes VI - System-on-a-chip devices and nodes
1) Defining child nodes of an SOC 1) Defining child nodes of an SOC
2) Representing devices without a current OF specification 2) Representing devices without a current OF specification
a) MDIO IO device a) PHY nodes
b) Gianfar-compatible ethernet nodes b) Interrupt controllers
c) PHY nodes c) CFI or JEDEC memory-mapped NOR flash
d) Interrupt controllers d) 4xx/Axon EMAC ethernet nodes
e) I2C e) Xilinx IP cores
f) Freescale SOC USB controllers f) USB EHCI controllers
g) Freescale SOC SEC Security Engines g) MDIO on GPIOs
h) Board Control and Status (BCSR) h) SPI busses
i) Freescale QUICC Engine module (QE)
j) CFI or JEDEC memory-mapped NOR flash
k) Global Utilities Block
l) Freescale Communications Processor Module
m) Chipselect/Local Bus
n) 4xx/Axon EMAC ethernet nodes
o) Xilinx IP cores
p) Freescale Synchronous Serial Interface
q) USB EHCI controllers
r) MDIO on GPIOs
s) SPI busses
VII - Marvell Discovery mv64[345]6x System Controller chips VII - Marvell Discovery mv64[345]6x System Controller chips
1) The /system-controller node 1) The /system-controller node
@ -1830,41 +1819,7 @@ platforms are moved over to use the flattened-device-tree model.
big-endian; big-endian;
}; };
r) Freescale Display Interface Unit g) MDIO on GPIOs
The Freescale DIU is a LCD controller, with proper hardware, it can also
drive DVI monitors.
Required properties:
- compatible : should be "fsl-diu".
- reg : should contain at least address and length of the DIU register
set.
- Interrupts : one DIU interrupt should be describe here.
Example (MPC8610HPCD)
display@2c000 {
compatible = "fsl,diu";
reg = <0x2c000 100>;
interrupts = <72 2>;
interrupt-parent = <&mpic>;
};
s) Freescale on board FPGA
This is the memory-mapped registers for on board FPGA.
Required properities:
- compatible : should be "fsl,fpga-pixis".
- reg : should contain the address and the lenght of the FPPGA register
set.
Example (MPC8610HPCD)
board-control@e8000000 {
compatible = "fsl,fpga-pixis";
reg = <0xe8000000 32>;
};
r) MDIO on GPIOs
Currently defined compatibles: Currently defined compatibles:
- virtual,gpio-mdio - virtual,gpio-mdio
@ -1884,7 +1839,7 @@ platforms are moved over to use the flattened-device-tree model.
&qe_pio_c 6>; &qe_pio_c 6>;
}; };
s) SPI (Serial Peripheral Interface) busses h) SPI (Serial Peripheral Interface) busses
SPI busses can be described with a node for the SPI master device SPI busses can be described with a node for the SPI master device
and a set of child nodes for each SPI slave on the bus. For this and a set of child nodes for each SPI slave on the bus. For this

View File

@ -4,8 +4,6 @@ sched-arch.txt
- CPU Scheduler implementation hints for architecture specific code. - CPU Scheduler implementation hints for architecture specific code.
sched-coding.txt sched-coding.txt
- reference for various scheduler-related methods in the O(1) scheduler. - reference for various scheduler-related methods in the O(1) scheduler.
sched-design.txt
- goals, design and implementation of the Linux O(1) scheduler.
sched-design-CFS.txt sched-design-CFS.txt
- goals, design and implementation of the Complete Fair Scheduler. - goals, design and implementation of the Complete Fair Scheduler.
sched-domains.txt sched-domains.txt

View File

@ -92,7 +92,7 @@ other HZ detail. Thus the CFS scheduler has no notion of "timeslices" in the
way the previous scheduler had, and has no heuristics whatsoever. There is way the previous scheduler had, and has no heuristics whatsoever. There is
only one central tunable (you have to switch on CONFIG_SCHED_DEBUG): only one central tunable (you have to switch on CONFIG_SCHED_DEBUG):
/proc/sys/kernel/sched_granularity_ns /proc/sys/kernel/sched_min_granularity_ns
which can be used to tune the scheduler from "desktop" (i.e., low latencies) to which can be used to tune the scheduler from "desktop" (i.e., low latencies) to
"server" (i.e., good batching) workloads. It defaults to a setting suitable "server" (i.e., good batching) workloads. It defaults to a setting suitable

View File

@ -128,7 +128,7 @@ Supported Cards/Chipsets
People People
------------------------- -------------------------
Alan Cox <alan@redhat.com> Alan Cox <alan@lxorguk.ukuu.org.uk>
Christoph Hellwig <hch@infradead.org> (updates for new-style PCI probing and SCSI host registration, Christoph Hellwig <hch@infradead.org> (updates for new-style PCI probing and SCSI host registration,
small cleanups/fixes) small cleanups/fixes)
Matt Domsch <matt_domsch@dell.com> (revision ioctl, adapter messages) Matt Domsch <matt_domsch@dell.com> (revision ioctl, adapter messages)

View File

@ -47,9 +47,7 @@ Next, for companion chips:
`-- sh `-- sh
`-- cchips `-- cchips
`-- hd6446x `-- hd6446x
|-- hd64461 `-- hd64461
| `-- cchip-specific files
`-- hd64465
`-- cchip-specific files `-- cchip-specific files
... and so on. Headers for the companion chips are treated the same way as ... and so on. Headers for the companion chips are treated the same way as

2
Documentation/spi/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
spidev_fdx
spidev_test

View File

@ -12,6 +12,7 @@ Rules on what kind of patches are accepted, and which ones are not, into the
marked CONFIG_BROKEN), an oops, a hang, data corruption, a real marked CONFIG_BROKEN), an oops, a hang, data corruption, a real
security issue, or some "oh, that's not good" issue. In short, something security issue, or some "oh, that's not good" issue. In short, something
critical. critical.
- New device IDs and quirks are also accepted.
- No "theoretical race condition" issues, unless an explanation of how the - No "theoretical race condition" issues, unless an explanation of how the
race can be exploited is also provided. race can be exploited is also provided.
- It cannot contain any "trivial" fixes in it (spelling changes, - It cannot contain any "trivial" fixes in it (spelling changes,

View File

@ -363,11 +363,21 @@ tainted:
Non-zero if the kernel has been tainted. Numeric values, which Non-zero if the kernel has been tainted. Numeric values, which
can be ORed together: can be ORed together:
1 - A module with a non-GPL license has been loaded, this 1 - A module with a non-GPL license has been loaded, this
includes modules with no license. includes modules with no license.
Set by modutils >= 2.4.9 and module-init-tools. Set by modutils >= 2.4.9 and module-init-tools.
2 - A module was force loaded by insmod -f. 2 - A module was force loaded by insmod -f.
Set by modutils >= 2.4.9 and module-init-tools. Set by modutils >= 2.4.9 and module-init-tools.
4 - Unsafe SMP processors: SMP with CPUs not designed for SMP. 4 - Unsafe SMP processors: SMP with CPUs not designed for SMP.
64 - A module from drivers/staging was loaded. 8 - A module was forcibly unloaded from the system by rmmod -f.
16 - A hardware machine check error occurred on the system.
32 - A bad page was discovered on the system.
64 - The user has asked that the system be marked "tainted". This
could be because they are running software that directly modifies
the hardware, or for other reasons.
128 - The system has died.
256 - The ACPI DSDT has been overridden with one supplied by the user
instead of using the one provided by the hardware.
512 - A kernel warning has occurred.
1024 - A module from drivers/staging was loaded.

1
Documentation/video4linux/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
v4lgrab

View File

@ -27,8 +27,8 @@ audio
sound card) should be possible, but there is no code yet ... sound card) should be possible, but there is no code yet ...
vbi vbi
- some code present. Doesn't crash any more, but also doesn't - Code present. Works for NTSC closed caption. PAL and other
work yet ... TV norms may or may not work.
how to add support for new cards how to add support for new cards

View File

@ -3,7 +3,7 @@ Contributors to bttv:
Michael Chu <mmchu@pobox.com> Michael Chu <mmchu@pobox.com>
AverMedia fix and more flexible card recognition AverMedia fix and more flexible card recognition
Alan Cox <alan@redhat.com> Alan Cox <alan@lxorguk.ukuu.org.uk>
Video4Linux interface and 2.1.x kernel adaptation Video4Linux interface and 2.1.x kernel adaptation
Chris Kleitsch Chris Kleitsch

View File

@ -0,0 +1,118 @@
Driver for USB radios for the Silicon Labs Si470x FM Radio Receivers
Copyright (c) 2008 Tobias Lorenz <tobias.lorenz@gmx.net>
Information from Silicon Labs
=============================
Silicon Laboratories is the manufacturer of the radio ICs, that nowadays are the
most often used radio receivers in cell phones. Usually they are connected with
I2C. But SiLabs also provides a reference design, which integrates this IC,
together with a small microcontroller C8051F321, to form a USB radio.
Part of this reference design is also a radio application in binary and source
code. The software also contains an automatic firmware upgrade to the most
current version. Information on these can be downloaded here:
http://www.silabs.com/usbradio
Supported ICs
=============
The following ICs have a very similar register set, so that they are or will be
supported somewhen by the driver:
- Si4700: FM radio receiver
- Si4701: FM radio receiver, RDS Support
- Si4702: FM radio receiver
- Si4703: FM radio receiver, RDS Support
- Si4704: FM radio receiver, no external antenna required
- Si4705: FM radio receiver, no external antenna required, RDS support, Dig I/O
- Si4706: Enhanced FM RDS/TMC radio receiver, no external antenna required, RDS
Support
- Si4707: Dedicated weather band radio receiver with SAME decoder, RDS Support
- Si4708: Smallest FM receivers
- Si4709: Smallest FM receivers, RDS Support
More information on these can be downloaded here:
http://www.silabs.com/products/mcu/Pages/USBFMRadioRD.aspx
Supported USB devices
=====================
Currently the following USB radios (vendor:product) with the Silicon Labs si470x
chips are known to work:
- 10c4:818a: Silicon Labs USB FM Radio Reference Design
- 06e1:a155: ADS/Tech FM Radio Receiver (formerly Instant FM Music) (RDX-155-EF)
- 1b80:d700: KWorld USB FM Radio SnapMusic Mobile 700 (FM700)
Software
========
Testing is usually done with most application under Debian/testing:
- fmtools - Utility for managing FM tuner cards
- gnomeradio - FM-radio tuner for the GNOME desktop
- gradio - GTK FM radio tuner
- kradio - Comfortable Radio Application for KDE
- radio - ncurses-based radio application
There is also a library libv4l, which can be used. It's going to have a function
for frequency seeking, either by using hardware functionality as in radio-si470x
or by implementing a function as we currently have in every of the mentioned
programs. Somewhen the radio programs should make use of libv4l.
For processing RDS information, there is a project ongoing at:
http://rdsd.berlios.de/
There is currently no project for making TMC sentences human readable.
Audio Listing
=============
USB Audio is provided by the ALSA snd_usb_audio module. It is recommended to
also select SND_USB_AUDIO, as this is required to get sound from the radio. For
listing you have to redirect the sound, for example using one of the following
commands.
If you just want to test audio (very poor quality):
cat /dev/dsp1 > /dev/dsp
If you use OSS try:
sox -2 --endian little -r 96000 -t oss /dev/dsp1 -t oss /dev/dsp
If you use arts try:
arecord -D hw:1,0 -r96000 -c2 -f S16_LE | artsdsp aplay -B -
Module Parameters
=================
After loading the module, you still have access to some of them in the sysfs
mount under /sys/module/radio_si470x/parameters. The contents of read-only files
(0444) are not updated, even if space, band and de are changed using private
video controls. The others are runtime changeable.
Errors
======
Increase tune_timeout, if you often get -EIO errors.
When timed out or band limit is reached, hw_freq_seek returns -EAGAIN.
If you get any errors from snd_usb_audio, please report them to the ALSA people.
Open Issues
===========
V4L minor device allocation and parameter setting is not perfect. A solution is
currently under discussion.
There is an USB interface for downloading/uploading new firmware images. Support
for it can be implemented using the request_firmware interface.
There is a RDS interrupt mode. The driver is already using the same interface
for polling RDS information, but is currently not using the interrupt mode.
There is a LED interface, which can be used to override the LED control
programmed in the firmware. This can be made available using the LED support
functions in the kernel.
Other useful information and links
==================================
http://www.silabs.com/usbradio

1
Documentation/vm/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
slabinfo

2
Documentation/watchdog/src/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
watchdog-simple
watchdog-test

View File

@ -35,7 +35,7 @@ APICs
nolapic Don't use the local APIC (alias for i386 compatibility) nolapic Don't use the local APIC (alias for i386 compatibility)
pirq=... See Documentation/i386/IO-APIC.txt pirq=... See Documentation/x86/i386/IO-APIC.txt
noapictimer Don't set up the APIC timer noapictimer Don't set up the APIC timer
@ -139,7 +139,7 @@ Non Executable Mappings
SMP SMP
additional_cpus=NUM Allow NUM more CPUs for hotplug additional_cpus=NUM Allow NUM more CPUs for hotplug
(defaults are specified by the BIOS, see Documentation/x86_64/cpu-hotplug-spec) (defaults are specified by the BIOS, see Documentation/x86/x86_64/cpu-hotplug-spec)
NUMA NUMA

View File

@ -10,7 +10,7 @@ amount of system memory that are available to a certain class of tasks.
For more information on the features of cpusets, see Documentation/cpusets.txt. For more information on the features of cpusets, see Documentation/cpusets.txt.
There are a number of different configurations you can use for your needs. For There are a number of different configurations you can use for your needs. For
more information on the numa=fake command line option and its various ways of more information on the numa=fake command line option and its various ways of
configuring fake nodes, see Documentation/x86_64/boot-options.txt. configuring fake nodes, see Documentation/x86/x86_64/boot-options.txt.
For the purposes of this introduction, we'll assume a very primitive NUMA For the purposes of this introduction, we'll assume a very primitive NUMA
emulation setup of "numa=fake=4*512,". This will split our system memory into emulation setup of "numa=fake=4*512,". This will split our system memory into

View File

@ -347,7 +347,7 @@ S: Maintained
ALI1563 I2C DRIVER ALI1563 I2C DRIVER
P: Rudolf Marek P: Rudolf Marek
M: r.marek@assembler.cz M: r.marek@assembler.cz
L: i2c@lm-sensors.org L: linux-i2c@vger.kernel.org
S: Maintained S: Maintained
ALPHA PORT ALPHA PORT
@ -610,6 +610,11 @@ P: Philipp Zabel
M: philipp.zabel@gmail.com M: philipp.zabel@gmail.com
S: Maintained S: Maintained
ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT
P: Michael Petchkovsky
M: mkpetch@internode.on.net
S: Maintained
ARM/TOSA MACHINE SUPPORT ARM/TOSA MACHINE SUPPORT
P: Dmitry Baryshkov P: Dmitry Baryshkov
M: dbaryshkov@gmail.com M: dbaryshkov@gmail.com
@ -716,7 +721,7 @@ W: http://sourceforge.net/projects/acpi4asus
W: http://xf.iksaif.net/acpi4asus W: http://xf.iksaif.net/acpi4asus
S: Maintained S: Maintained
ASYNCHRONOUS TRANSFERS/TRANSFORMS API ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API
P: Dan Williams P: Dan Williams
M: dan.j.williams@intel.com M: dan.j.williams@intel.com
P: Maciej Sosnowski P: Maciej Sosnowski
@ -738,6 +743,8 @@ P: Nick Kossifidis
M: mickflemm@gmail.com M: mickflemm@gmail.com
P: Luis R. Rodriguez P: Luis R. Rodriguez
M: mcgrof@gmail.com M: mcgrof@gmail.com
P: Bob Copeland
M: me@bobcopeland.com
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
L: ath5k-devel@lists.ath5k.org L: ath5k-devel@lists.ath5k.org
S: Maintained S: Maintained
@ -1749,7 +1756,7 @@ FREESCALE I2C CPM DRIVER
P: Jochen Friedrich P: Jochen Friedrich
M: jochen@scram.de M: jochen@scram.de
L: linuxppc-dev@ozlabs.org L: linuxppc-dev@ozlabs.org
L: i2c@lm-sensors.org L: linux-i2c@vger.kernel.org
S: Maintained S: Maintained
FREESCALE SOC FS_ENET DRIVER FREESCALE SOC FS_ENET DRIVER
@ -1872,6 +1879,37 @@ M: linux-kernel@vger.kernel.org
W: http://www.kernel.org/pub/linux/kernel/people/rml/hdaps/ W: http://www.kernel.org/pub/linux/kernel/people/rml/hdaps/
S: Maintained S: Maintained
GSPCA FINEPIX SUBDRIVER
P: Frank Zago
M: frank@zago.net
L: video4linux-list@redhat.com
S: Maintained
GSPCA M5602 SUBDRIVER
P: Erik Andren
M: erik.andren@gmail.com
L: video4linux-list@redhat.com
S: Maintained
GSPCA PAC207 SONIXB SUBDRIVER
P: Hans de Goede
M: hdegoede@redhat.com
L: video4linux-list@redhat.com
S: Maintained
GSPCA T613 SUBDRIVER
P: Leandro Costantino
M: lcostantino@gmail.com
L: video4linux-list@redhat.com
S: Maintained
GSPCA USB WEBCAM DRIVER
P: Jean-Francois Moine
M: moinejf@free.fr
W: http://moinejf.free.fr
L: video4linux-list@redhat.com
S: Maintained
HARDWARE MONITORING HARDWARE MONITORING
L: lm-sensors@lm-sensors.org L: lm-sensors@lm-sensors.org
W: http://www.lm-sensors.org/ W: http://www.lm-sensors.org/
@ -2022,7 +2060,7 @@ S: Maintained
I2C/SMBUS STUB DRIVER I2C/SMBUS STUB DRIVER
P: Mark M. Hoffman P: Mark M. Hoffman
M: mhoffman@lightlink.com M: mhoffman@lightlink.com
L: i2c@lm-sensors.org L: linux-i2c@vger.kernel.org
S: Maintained S: Maintained
I2C SUBSYSTEM I2C SUBSYSTEM
@ -2030,14 +2068,14 @@ P: Jean Delvare (PC drivers, core)
M: khali@linux-fr.org M: khali@linux-fr.org
P: Ben Dooks (embedded platforms) P: Ben Dooks (embedded platforms)
M: ben-linux@fluff.org M: ben-linux@fluff.org
L: i2c@lm-sensors.org L: linux-i2c@vger.kernel.org
T: quilt http://khali.linux-fr.org/devel/linux-2.6/jdelvare-i2c/ T: quilt http://khali.linux-fr.org/devel/linux-2.6/jdelvare-i2c/
S: Maintained S: Maintained
I2C-TINY-USB DRIVER I2C-TINY-USB DRIVER
P: Till Harbaum P: Till Harbaum
M: till@harbaum.org M: till@harbaum.org
L: i2c@lm-sensors.org L: linux-i2c@vger.kernel.org
T: http://www.harbaum.org/till/i2c_tiny_usb T: http://www.harbaum.org/till/i2c_tiny_usb
S: Maintained S: Maintained
@ -2701,6 +2739,16 @@ M: matthew@wil.cx
L: linux-scsi@vger.kernel.org L: linux-scsi@vger.kernel.org
S: Maintained S: Maintained
LTP (Linux Test Project)
P: Subrata Modak
M: subrata@linux.vnet.ibm.com
P: Mike Frysinger
M: vapier@gentoo.org
L: ltp-list@lists.sourceforge.net (subscribers-only)
W: http://ltp.sourceforge.net/
T: git kernel.org/pub/scm/linux/kernel/git/galak/ltp.git
S: Maintained
M32R ARCHITECTURE M32R ARCHITECTURE
P: Hirokazu Takata P: Hirokazu Takata
M: takata@linux-m32r.org M: takata@linux-m32r.org
@ -3143,7 +3191,7 @@ S: Maintained
OPENCORES I2C BUS DRIVER OPENCORES I2C BUS DRIVER
P: Peter Korsgaard P: Peter Korsgaard
M: jacmet@sunsite.dk M: jacmet@sunsite.dk
L: i2c@lm-sensors.org L: linux-i2c@vger.kernel.org
S: Maintained S: Maintained
OPROFILE OPROFILE
@ -3190,7 +3238,7 @@ S: Maintained
PA SEMI SMBUS DRIVER PA SEMI SMBUS DRIVER
P: Olof Johansson P: Olof Johansson
M: olof@lixom.net M: olof@lixom.net
L: i2c@lm-sensors.org L: linux-i2c@vger.kernel.org
S: Maintained S: Maintained
PANASONIC LAPTOP ACPI EXTRAS DRIVER PANASONIC LAPTOP ACPI EXTRAS DRIVER
@ -3335,7 +3383,7 @@ S: Maintained
PNXxxxx I2C DRIVER PNXxxxx I2C DRIVER
P: Vitaly Wool P: Vitaly Wool
M: vitalywool@gmail.com M: vitalywool@gmail.com
L: i2c@lm-sensors.org L: linux-i2c@vger.kernel.org
S: Maintained S: Maintained
PPP PROTOCOL DRIVERS AND COMPRESSORS PPP PROTOCOL DRIVERS AND COMPRESSORS
@ -3799,7 +3847,7 @@ S: Maintained
SIS 96X I2C/SMBUS DRIVER SIS 96X I2C/SMBUS DRIVER
P: Mark M. Hoffman P: Mark M. Hoffman
M: mhoffman@lightlink.com M: mhoffman@lightlink.com
L: i2c@lm-sensors.org L: linux-i2c@vger.kernel.org
S: Maintained S: Maintained
SIS FRAMEBUFFER DRIVER SIS FRAMEBUFFER DRIVER
@ -4546,7 +4594,7 @@ S: Maintained
VIAPRO SMBUS DRIVER VIAPRO SMBUS DRIVER
P: Jean Delvare P: Jean Delvare
M: khali@linux-fr.org M: khali@linux-fr.org
L: i2c@lm-sensors.org L: linux-i2c@vger.kernel.org
S: Maintained S: Maintained
VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER

View File

@ -1,7 +1,7 @@
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 28 SUBLEVEL = 28
EXTRAVERSION = -rc2 EXTRAVERSION = -rc4
NAME = Killer Bat of Doom NAME = Killer Bat of Doom
# *DOCUMENTATION* # *DOCUMENTATION*
@ -536,7 +536,7 @@ KBUILD_CFLAGS += -g
KBUILD_AFLAGS += -gdwarf-2 KBUILD_AFLAGS += -gdwarf-2
endif endif
ifdef CONFIG_FTRACE ifdef CONFIG_FUNCTION_TRACER
KBUILD_CFLAGS += -pg KBUILD_CFLAGS += -pg
endif endif
@ -961,6 +961,7 @@ export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
# The asm symlink changes when $(ARCH) changes. # The asm symlink changes when $(ARCH) changes.
# Detect this and ask user to run make mrproper # Detect this and ask user to run make mrproper
# If asm is a stale symlink (point to dir that does not exist) remove it
define check-symlink define check-symlink
set -e; \ set -e; \
if [ -L include/asm ]; then \ if [ -L include/asm ]; then \
@ -970,6 +971,10 @@ define check-symlink
echo " set ARCH or save .config and run 'make mrproper' to fix it"; \ echo " set ARCH or save .config and run 'make mrproper' to fix it"; \
exit 1; \ exit 1; \
fi; \ fi; \
test -e $$asmlink || rm include/asm; \
elif [ -d include/asm ]; then \
echo "ERROR: $@ is a directory but a symlink was expected";\
exit 1; \
fi fi
endef endef
@ -1431,7 +1436,8 @@ ALLSOURCE_ARCHS := $(SRCARCH)
define find-sources define find-sources
( for arch in $(ALLSOURCE_ARCHS) ; do \ ( for arch in $(ALLSOURCE_ARCHS) ; do \
find $(__srctree)arch/$${arch} $(RCS_FIND_IGNORE) \ find $(__srctree)arch/$${arch} $(RCS_FIND_IGNORE) \
-name $1 -print; \ -wholename $(__srctree)arch/$${arch}/include/asm -type d -prune \
-o -name $1 -print; \
done ; \ done ; \
find $(__srctree)security/selinux/include $(RCS_FIND_IGNORE) \ find $(__srctree)security/selinux/include $(RCS_FIND_IGNORE) \
-name $1 -print; \ -name $1 -print; \

View File

@ -21,7 +21,7 @@ config OPROFILE_IBS
Instruction-Based Sampling (IBS) is a new profiling Instruction-Based Sampling (IBS) is a new profiling
technique that provides rich, precise program performance technique that provides rich, precise program performance
information. IBS is introduced by AMD Family10h processors information. IBS is introduced by AMD Family10h processors
(AMD Opteron Quad-Core processor “Barcelona”) to overcome (AMD Opteron Quad-Core processor "Barcelona") to overcome
the limitations of conventional performance counter the limitations of conventional performance counter
sampling. sampling.

View File

@ -16,8 +16,7 @@ config ARM
select HAVE_ARCH_KGDB select HAVE_ARCH_KGDB
select HAVE_KPROBES if (!XIP_KERNEL) select HAVE_KPROBES if (!XIP_KERNEL)
select HAVE_KRETPROBES if (HAVE_KPROBES) select HAVE_KRETPROBES if (HAVE_KPROBES)
select HAVE_FTRACE if (!XIP_KERNEL) select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
select HAVE_DYNAMIC_FTRACE if (HAVE_FTRACE)
select HAVE_GENERIC_DMA_COHERENT select HAVE_GENERIC_DMA_COHERENT
help help
The ARM series is a line of low-power-consumption RISC chip designs The ARM series is a line of low-power-consumption RISC chip designs

View File

@ -70,7 +70,7 @@ SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/
targets := vmlinux vmlinux.lds piggy.gz piggy.o font.o font.c \ targets := vmlinux vmlinux.lds piggy.gz piggy.o font.o font.c \
head.o misc.o $(OBJS) head.o misc.o $(OBJS)
ifeq ($(CONFIG_FTRACE),y) ifeq ($(CONFIG_FUNCTION_TRACER),y)
ORIG_CFLAGS := $(KBUILD_CFLAGS) ORIG_CFLAGS := $(KBUILD_CFLAGS)
KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS)) KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))
endif endif

View File

@ -54,11 +54,13 @@
/* /*
* Prototypes * Prototypes
*/ */
#ifdef CONFIG_PM
static int sharpsl_off_charge_battery(void); static int sharpsl_off_charge_battery(void);
static int sharpsl_check_battery_temp(void);
static int sharpsl_check_battery_voltage(void); static int sharpsl_check_battery_voltage(void);
static int sharpsl_ac_check(void);
static int sharpsl_fatal_check(void); static int sharpsl_fatal_check(void);
#endif
static int sharpsl_check_battery_temp(void);
static int sharpsl_ac_check(void);
static int sharpsl_average_value(int ad); static int sharpsl_average_value(int ad);
static void sharpsl_average_clear(void); static void sharpsl_average_clear(void);
static void sharpsl_charge_toggle(struct work_struct *private_); static void sharpsl_charge_toggle(struct work_struct *private_);
@ -424,6 +426,7 @@ static int sharpsl_check_battery_temp(void)
return 0; return 0;
} }
#ifdef CONFIG_PM
static int sharpsl_check_battery_voltage(void) static int sharpsl_check_battery_voltage(void)
{ {
int val, i, buff[5]; int val, i, buff[5];
@ -455,6 +458,7 @@ static int sharpsl_check_battery_voltage(void)
return 0; return 0;
} }
#endif
static int sharpsl_ac_check(void) static int sharpsl_ac_check(void)
{ {
@ -586,8 +590,6 @@ static int corgi_pxa_pm_enter(suspend_state_t state)
return 0; return 0;
} }
#endif
/* /*
* Check for fatal battery errors * Check for fatal battery errors
@ -738,7 +740,10 @@ static int sharpsl_off_charge_battery(void)
} }
} }
} }
#else
#define sharpsl_pm_suspend NULL
#define sharpsl_pm_resume NULL
#endif
static ssize_t battery_percentage_show(struct device *dev, struct device_attribute *attr, char *buf) static ssize_t battery_percentage_show(struct device *dev, struct device_attribute *attr, char *buf)
{ {
@ -768,10 +773,12 @@ static void sharpsl_apm_get_power_status(struct apm_power_info *info)
info->battery_life = sharpsl_pm.battstat.mainbat_percent; info->battery_life = sharpsl_pm.battstat.mainbat_percent;
} }
#ifdef CONFIG_PM
static struct platform_suspend_ops sharpsl_pm_ops = { static struct platform_suspend_ops sharpsl_pm_ops = {
.enter = corgi_pxa_pm_enter, .enter = corgi_pxa_pm_enter,
.valid = suspend_valid_only_mem, .valid = suspend_valid_only_mem,
}; };
#endif
static int __init sharpsl_pm_probe(struct platform_device *pdev) static int __init sharpsl_pm_probe(struct platform_device *pdev)
{ {
@ -802,7 +809,9 @@ static int __init sharpsl_pm_probe(struct platform_device *pdev)
apm_get_power_status = sharpsl_apm_get_power_status; apm_get_power_status = sharpsl_apm_get_power_status;
#ifdef CONFIG_PM
suspend_set_ops(&sharpsl_pm_ops); suspend_set_ops(&sharpsl_pm_ops);
#endif
mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250)); mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250));

View File

@ -1,7 +1,7 @@
#ifndef _ASM_ARM_FTRACE #ifndef _ASM_ARM_FTRACE
#define _ASM_ARM_FTRACE #define _ASM_ARM_FTRACE
#ifdef CONFIG_FTRACE #ifdef CONFIG_FUNCTION_TRACER
#define MCOUNT_ADDR ((long)(mcount)) #define MCOUNT_ADDR ((long)(mcount))
#define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */ #define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */

View File

@ -44,10 +44,10 @@
* The module space lives between the addresses given by TASK_SIZE * The module space lives between the addresses given by TASK_SIZE
* and PAGE_OFFSET - it must be within 32MB of the kernel text. * and PAGE_OFFSET - it must be within 32MB of the kernel text.
*/ */
#define MODULE_END (PAGE_OFFSET) #define MODULES_END (PAGE_OFFSET)
#define MODULE_START (MODULE_END - 16*1048576) #define MODULES_VADDR (MODULES_END - 16*1048576)
#if TASK_SIZE > MODULE_START #if TASK_SIZE > MODULES_VADDR
#error Top of user space clashes with start of module space #error Top of user space clashes with start of module space
#endif #endif
@ -56,7 +56,7 @@
* Since we use sections to map it, this macro replaces the physical address * Since we use sections to map it, this macro replaces the physical address
* with its virtual address while keeping offset from the base section. * with its virtual address while keeping offset from the base section.
*/ */
#define XIP_VIRT_ADDR(physaddr) (MODULE_START + ((physaddr) & 0x000fffff)) #define XIP_VIRT_ADDR(physaddr) (MODULES_VADDR + ((physaddr) & 0x000fffff))
/* /*
* Allow 16MB-aligned ioremap pages * Allow 16MB-aligned ioremap pages
@ -94,8 +94,8 @@
/* /*
* The module can be at any place in ram in nommu mode. * The module can be at any place in ram in nommu mode.
*/ */
#define MODULE_END (END_MEM) #define MODULES_END (END_MEM)
#define MODULE_START (PHYS_OFFSET) #define MODULES_VADDR (PHYS_OFFSET)
#endif /* !CONFIG_MMU */ #endif /* !CONFIG_MMU */

View File

@ -42,6 +42,10 @@
#define CR_U (1 << 22) /* Unaligned access operation */ #define CR_U (1 << 22) /* Unaligned access operation */
#define CR_XP (1 << 23) /* Extended page tables */ #define CR_XP (1 << 23) /* Extended page tables */
#define CR_VE (1 << 24) /* Vectored interrupts */ #define CR_VE (1 << 24) /* Vectored interrupts */
#define CR_EE (1 << 25) /* Exception (Big) Endian */
#define CR_TRE (1 << 28) /* TEX remap enable */
#define CR_AFE (1 << 29) /* Access flag enable */
#define CR_TE (1 << 30) /* Thumb exception enable */
/* /*
* This is used to ensure the compiler did actually allocate the register we * This is used to ensure the compiler did actually allocate the register we

View File

@ -183,6 +183,6 @@ EXPORT_SYMBOL(_find_next_bit_be);
EXPORT_SYMBOL(copy_page); EXPORT_SYMBOL(copy_page);
#ifdef CONFIG_FTRACE #ifdef CONFIG_FUNCTION_TRACER
EXPORT_SYMBOL(mcount); EXPORT_SYMBOL(mcount);
#endif #endif

View File

@ -21,12 +21,16 @@ int elf_check_arch(const struct elf32_hdr *x)
eflags = x->e_flags; eflags = x->e_flags;
if ((eflags & EF_ARM_EABI_MASK) == EF_ARM_EABI_UNKNOWN) { if ((eflags & EF_ARM_EABI_MASK) == EF_ARM_EABI_UNKNOWN) {
unsigned int flt_fmt;
/* APCS26 is only allowed if the CPU supports it */ /* APCS26 is only allowed if the CPU supports it */
if ((eflags & EF_ARM_APCS_26) && !(elf_hwcap & HWCAP_26BIT)) if ((eflags & EF_ARM_APCS_26) && !(elf_hwcap & HWCAP_26BIT))
return 0; return 0;
flt_fmt = eflags & (EF_ARM_VFP_FLOAT | EF_ARM_SOFT_FLOAT);
/* VFP requires the supporting code */ /* VFP requires the supporting code */
if ((eflags & EF_ARM_VFP_FLOAT) && !(elf_hwcap & HWCAP_VFP)) if (flt_fmt == EF_ARM_VFP_FLOAT && !(elf_hwcap & HWCAP_VFP))
return 0; return 0;
} }
return 1; return 1;

View File

@ -101,7 +101,7 @@ ENDPROC(ret_from_fork)
#undef CALL #undef CALL
#define CALL(x) .long x #define CALL(x) .long x
#ifdef CONFIG_FTRACE #ifdef CONFIG_FUNCTION_TRACER
#ifdef CONFIG_DYNAMIC_FTRACE #ifdef CONFIG_DYNAMIC_FTRACE
ENTRY(mcount) ENTRY(mcount)
stmdb sp!, {r0-r3, lr} stmdb sp!, {r0-r3, lr}
@ -149,7 +149,7 @@ trace:
ftrace_stub: ftrace_stub:
mov pc, lr mov pc, lr
#endif /* CONFIG_FTRACE */ #endif /* CONFIG_FUNCTION_TRACER */
/*============================================================================= /*=============================================================================
* SWI handler * SWI handler

View File

@ -95,19 +95,6 @@ int ftrace_update_ftrace_func(ftrace_func_t func)
return ret; return ret;
} }
int ftrace_mcount_set(unsigned long *data)
{
unsigned long pc, old;
unsigned long *addr = data;
unsigned char *new;
pc = (unsigned long)&mcount_call;
memcpy(&old, &mcount_call, MCOUNT_INSN_SIZE);
new = ftrace_call_replace(pc, *addr);
*addr = ftrace_modify_code(pc, (unsigned char *)&old, new);
return 0;
}
/* run from kstop_machine */ /* run from kstop_machine */
int __init ftrace_dyn_arch_init(void *data) int __init ftrace_dyn_arch_init(void *data)
{ {

View File

@ -26,12 +26,12 @@
/* /*
* The XIP kernel text is mapped in the module area for modules and * The XIP kernel text is mapped in the module area for modules and
* some other stuff to work without any indirect relocations. * some other stuff to work without any indirect relocations.
* MODULE_START is redefined here and not in asm/memory.h to avoid * MODULES_VADDR is redefined here and not in asm/memory.h to avoid
* recompiling the whole kernel when CONFIG_XIP_KERNEL is turned on/off. * recompiling the whole kernel when CONFIG_XIP_KERNEL is turned on/off.
*/ */
extern void _etext; extern void _etext;
#undef MODULE_START #undef MODULES_VADDR
#define MODULE_START (((unsigned long)&_etext + ~PGDIR_MASK) & PGDIR_MASK) #define MODULES_VADDR (((unsigned long)&_etext + ~PGDIR_MASK) & PGDIR_MASK)
#endif #endif
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
@ -43,7 +43,7 @@ void *module_alloc(unsigned long size)
if (!size) if (!size)
return NULL; return NULL;
area = __get_vm_area(size, VM_ALLOC, MODULE_START, MODULE_END); area = __get_vm_area(size, VM_ALLOC, MODULES_VADDR, MODULES_END);
if (!area) if (!area)
return NULL; return NULL;

View File

@ -165,6 +165,7 @@ static struct at91_mmc_data __initdata afeb9260_mmc_data = {
static struct i2c_board_info __initdata afeb9260_i2c_devices[] = { static struct i2c_board_info __initdata afeb9260_i2c_devices[] = {
{ {
I2C_BOARD_INFO("fm3130", 0x68), I2C_BOARD_INFO("fm3130", 0x68),
}, {
I2C_BOARD_INFO("24c64", 0x50), I2C_BOARD_INFO("24c64", 0x50),
}, },
}; };

View File

@ -13,6 +13,7 @@
#ifndef __ASM_ARCH_AT91RM9200_GPIO_H #ifndef __ASM_ARCH_AT91RM9200_GPIO_H
#define __ASM_ARCH_AT91RM9200_GPIO_H #define __ASM_ARCH_AT91RM9200_GPIO_H
#include <linux/kernel.h>
#include <asm/irq.h> #include <asm/irq.h>
#define PIN_BASE NR_AIC_IRQS #define PIN_BASE NR_AIC_IRQS
@ -220,6 +221,7 @@ static inline int gpio_request(unsigned gpio, const char *label)
static inline void gpio_free(unsigned gpio) static inline void gpio_free(unsigned gpio)
{ {
might_sleep();
} }
extern int gpio_direction_input(unsigned gpio); extern int gpio_direction_input(unsigned gpio);

View File

@ -26,6 +26,7 @@
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/dma-mapping.h>
#include <linux/time.h> #include <linux/time.h>
#include <linux/timex.h> #include <linux/timex.h>
#include <linux/delay.h> #include <linux/delay.h>
@ -449,12 +450,13 @@ static struct resource ep93xx_ohci_resources[] = {
}, },
}; };
static struct platform_device ep93xx_ohci_device = { static struct platform_device ep93xx_ohci_device = {
.name = "ep93xx-ohci", .name = "ep93xx-ohci",
.id = -1, .id = -1,
.dev = { .dev = {
.dma_mask = (void *)0xffffffff, .dma_mask = &ep93xx_ohci_device.dev.coherent_dma_mask,
.coherent_dma_mask = 0xffffffff, .coherent_dma_mask = DMA_BIT_MASK(32),
}, },
.num_resources = ARRAY_SIZE(ep93xx_ohci_resources), .num_resources = ARRAY_SIZE(ep93xx_ohci_resources),
.resource = ep93xx_ohci_resources, .resource = ep93xx_ohci_resources,

View File

@ -1,5 +1,6 @@
#ifndef _IMX_GPIO_H #ifndef _IMX_GPIO_H
#include <linux/kernel.h>
#include <mach/imx-regs.h> #include <mach/imx-regs.h>
#define IMX_GPIO_ALLOC_MODE_NORMAL 0 #define IMX_GPIO_ALLOC_MODE_NORMAL 0
@ -63,6 +64,8 @@ static inline int gpio_request(unsigned gpio, const char *label)
static inline void gpio_free(unsigned gpio) static inline void gpio_free(unsigned gpio)
{ {
might_sleep();
imx_gpio_free(gpio); imx_gpio_free(gpio);
} }

View File

@ -25,6 +25,7 @@
#ifndef __ASM_ARCH_IXP4XX_GPIO_H #ifndef __ASM_ARCH_IXP4XX_GPIO_H
#define __ASM_ARCH_IXP4XX_GPIO_H #define __ASM_ARCH_IXP4XX_GPIO_H
#include <linux/kernel.h>
#include <mach/hardware.h> #include <mach/hardware.h>
static inline int gpio_request(unsigned gpio, const char *label) static inline int gpio_request(unsigned gpio, const char *label)
@ -34,6 +35,8 @@ static inline int gpio_request(unsigned gpio, const char *label)
static inline void gpio_free(unsigned gpio) static inline void gpio_free(unsigned gpio)
{ {
might_sleep();
return; return;
} }

View File

@ -11,6 +11,8 @@
#ifndef __ASM_ARCH_GPIO_H_ #ifndef __ASM_ARCH_GPIO_H_
#define __ASM_ARCH_GPIO_H_ #define __ASM_ARCH_GPIO_H_
#include <linux/kernel.h>
#define KS8695_GPIO_0 0 #define KS8695_GPIO_0 0
#define KS8695_GPIO_1 1 #define KS8695_GPIO_1 1
#define KS8695_GPIO_2 2 #define KS8695_GPIO_2 2
@ -74,6 +76,7 @@ static inline int gpio_request(unsigned int pin, const char *label)
static inline void gpio_free(unsigned int pin) static inline void gpio_free(unsigned int pin)
{ {
might_sleep();
} }
#endif #endif

View File

@ -35,6 +35,8 @@
#include <mach/imx-uart.h> #include <mach/imx-uart.h>
#include <mach/iomux-mx3.h> #include <mach/iomux-mx3.h>
#include "devices.h"
/*! /*!
* @file mx31ads.c * @file mx31ads.c
* *

View File

@ -91,12 +91,12 @@ static struct map_desc pcm037_io_desc[] __initdata = {
.virtual = AIPS1_BASE_ADDR_VIRT, .virtual = AIPS1_BASE_ADDR_VIRT,
.pfn = __phys_to_pfn(AIPS1_BASE_ADDR), .pfn = __phys_to_pfn(AIPS1_BASE_ADDR),
.length = AIPS1_SIZE, .length = AIPS1_SIZE,
.type = MT_DEVICE .type = MT_DEVICE_NONSHARED
}, { }, {
.virtual = AIPS2_BASE_ADDR_VIRT, .virtual = AIPS2_BASE_ADDR_VIRT,
.pfn = __phys_to_pfn(AIPS2_BASE_ADDR), .pfn = __phys_to_pfn(AIPS2_BASE_ADDR),
.length = AIPS2_SIZE, .length = AIPS2_SIZE,
.type = MT_DEVICE .type = MT_DEVICE_NONSHARED
}, },
}; };

View File

@ -8,6 +8,7 @@
* under the terms of the GNU General Public License version 2 as published by * under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation. * the Free Software Foundation.
*/ */
#include <linux/kernel.h>
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
@ -63,6 +64,7 @@ EXPORT_SYMBOL(gpio_request);
void gpio_free(unsigned gpio) void gpio_free(unsigned gpio)
{ {
might_sleep();
clear_bit(gpio, gpiores); clear_bit(gpio, gpiores);
return; return;
} }

View File

@ -429,18 +429,16 @@ void __init gpmc_init(void)
gpmc_l3_clk = clk_get(NULL, ck); gpmc_l3_clk = clk_get(NULL, ck);
if (IS_ERR(gpmc_l3_clk)) { if (IS_ERR(gpmc_l3_clk)) {
printk(KERN_ERR "Could not get GPMC clock %s\n", ck); printk(KERN_ERR "Could not get GPMC clock %s\n", ck);
return -ENODEV; BUG();
} }
gpmc_base = ioremap(l, SZ_4K); gpmc_base = ioremap(l, SZ_4K);
if (!gpmc_base) { if (!gpmc_base) {
clk_put(gpmc_l3_clk); clk_put(gpmc_l3_clk);
printk(KERN_ERR "Could not get GPMC register memory\n"); printk(KERN_ERR "Could not get GPMC register memory\n");
return -ENOMEM; BUG();
} }
BUG_ON(IS_ERR(gpmc_l3_clk));
l = gpmc_read_reg(GPMC_REVISION); l = gpmc_read_reg(GPMC_REVISION);
printk(KERN_INFO "GPMC revision %d.%d\n", (l >> 4) & 0x0f, l & 0x0f); printk(KERN_INFO "GPMC revision %d.%d\n", (l >> 4) & 0x0f, l & 0x0f);
/* Set smart idle mode and automatic L3 clock gating */ /* Set smart idle mode and automatic L3 clock gating */

View File

@ -165,6 +165,8 @@ EXPORT_SYMBOL(gpio_request);
void gpio_free(unsigned pin) void gpio_free(unsigned pin)
{ {
might_sleep();
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) { if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
pr_debug("%s: invalid GPIO %d\n", __func__, pin); pr_debug("%s: invalid GPIO %d\n", __func__, pin);
return; return;

View File

@ -204,7 +204,9 @@ static struct sharpsl_charger_machinfo corgi_pm_machinfo = {
.read_devdata = corgipm_read_devdata, .read_devdata = corgipm_read_devdata,
.charger_wakeup = corgi_charger_wakeup, .charger_wakeup = corgi_charger_wakeup,
.should_wakeup = corgi_should_wakeup, .should_wakeup = corgi_should_wakeup,
#ifdef CONFIG_BACKLIGHT_CORGI #if defined(CONFIG_LCD_CORGI)
.backlight_limit = corgi_lcd_limit_intensity,
#elif defined(CONFIG_BACKLIGHT_CORGI)
.backlight_limit = corgibl_limit_intensity, .backlight_limit = corgibl_limit_intensity,
#endif #endif
.charge_on_volt = SHARPSL_CHARGE_ON_VOLT, .charge_on_volt = SHARPSL_CHARGE_ON_VOLT,

View File

@ -26,6 +26,7 @@ struct corgits_machinfo {
* SharpSL Backlight * SharpSL Backlight
*/ */
extern void corgibl_limit_intensity(int limit); extern void corgibl_limit_intensity(int limit);
extern void corgi_lcd_limit_intensity(int limit);
/* /*

View File

@ -385,6 +385,16 @@ static void __init spitz_init_spi(void)
if (err) if (err)
goto err_free_2; goto err_free_2;
err = gpio_direction_output(SPITZ_GPIO_ADS7846_CS, 1);
if (err)
goto err_free_3;
err = gpio_direction_output(SPITZ_GPIO_LCDCON_CS, 1);
if (err)
goto err_free_3;
err = gpio_direction_output(SPITZ_GPIO_MAX1111_CS, 1);
if (err)
goto err_free_3;
if (machine_is_akita()) { if (machine_is_akita()) {
spitz_lcdcon_info.gpio_backlight_cont = AKITA_GPIO_BACKLIGHT_CONT; spitz_lcdcon_info.gpio_backlight_cont = AKITA_GPIO_BACKLIGHT_CONT;
spitz_lcdcon_info.gpio_backlight_on = AKITA_GPIO_BACKLIGHT_ON; spitz_lcdcon_info.gpio_backlight_on = AKITA_GPIO_BACKLIGHT_ON;
@ -394,6 +404,8 @@ static void __init spitz_init_spi(void)
spi_register_board_info(ARRAY_AND_SIZE(spitz_spi_devices)); spi_register_board_info(ARRAY_AND_SIZE(spitz_spi_devices));
return; return;
err_free_3:
gpio_free(SPITZ_GPIO_MAX1111_CS);
err_free_2: err_free_2:
gpio_free(SPITZ_GPIO_LCDCON_CS); gpio_free(SPITZ_GPIO_LCDCON_CS);
err_free_1: err_free_1:

View File

@ -198,7 +198,9 @@ struct sharpsl_charger_machinfo spitz_pm_machinfo = {
.read_devdata = spitzpm_read_devdata, .read_devdata = spitzpm_read_devdata,
.charger_wakeup = spitz_charger_wakeup, .charger_wakeup = spitz_charger_wakeup,
.should_wakeup = spitz_should_wakeup, .should_wakeup = spitz_should_wakeup,
#ifdef CONFIG_BACKLIGHT_CORGI #if defined(CONFIG_LCD_CORGI)
.backlight_limit = corgi_lcd_limit_intensity,
#elif defined(CONFIG_BACKLIGHT_CORGI)
.backlight_limit = corgibl_limit_intensity, .backlight_limit = corgibl_limit_intensity,
#endif #endif
.charge_on_volt = SHARPSL_CHARGE_ON_VOLT, .charge_on_volt = SHARPSL_CHARGE_ON_VOLT,

View File

@ -98,7 +98,7 @@ static void xsc3_l2_inv_range(unsigned long start, unsigned long end)
/* /*
* Clean and invalidate partial last cache line. * Clean and invalidate partial last cache line.
*/ */
if (end & (CACHE_LINE_SIZE - 1)) { if (start < end && (end & (CACHE_LINE_SIZE - 1))) {
xsc3_l2_clean_pa(end & ~(CACHE_LINE_SIZE - 1)); xsc3_l2_clean_pa(end & ~(CACHE_LINE_SIZE - 1));
xsc3_l2_inv_pa(end & ~(CACHE_LINE_SIZE - 1)); xsc3_l2_inv_pa(end & ~(CACHE_LINE_SIZE - 1));
end &= ~(CACHE_LINE_SIZE - 1); end &= ~(CACHE_LINE_SIZE - 1);
@ -107,7 +107,7 @@ static void xsc3_l2_inv_range(unsigned long start, unsigned long end)
/* /*
* Invalidate all full cache lines between 'start' and 'end'. * Invalidate all full cache lines between 'start' and 'end'.
*/ */
while (start != end) { while (start < end) {
xsc3_l2_inv_pa(start); xsc3_l2_inv_pa(start);
start += CACHE_LINE_SIZE; start += CACHE_LINE_SIZE;
} }

View File

@ -180,20 +180,20 @@ void adjust_cr(unsigned long mask, unsigned long set)
#endif #endif
#define PROT_PTE_DEVICE L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_WRITE #define PROT_PTE_DEVICE L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_WRITE
#define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_XN|PMD_SECT_AP_WRITE #define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_AP_WRITE
static struct mem_type mem_types[] = { static struct mem_type mem_types[] = {
[MT_DEVICE] = { /* Strongly ordered / ARMv6 shared device */ [MT_DEVICE] = { /* Strongly ordered / ARMv6 shared device */
.prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_SHARED | .prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_SHARED |
L_PTE_SHARED, L_PTE_SHARED,
.prot_l1 = PMD_TYPE_TABLE, .prot_l1 = PMD_TYPE_TABLE,
.prot_sect = PROT_SECT_DEVICE | PMD_SECT_UNCACHED, .prot_sect = PROT_SECT_DEVICE | PMD_SECT_S,
.domain = DOMAIN_IO, .domain = DOMAIN_IO,
}, },
[MT_DEVICE_NONSHARED] = { /* ARMv6 non-shared device */ [MT_DEVICE_NONSHARED] = { /* ARMv6 non-shared device */
.prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_NONSHARED, .prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_NONSHARED,
.prot_l1 = PMD_TYPE_TABLE, .prot_l1 = PMD_TYPE_TABLE,
.prot_sect = PROT_SECT_DEVICE | PMD_SECT_TEX(2), .prot_sect = PROT_SECT_DEVICE,
.domain = DOMAIN_IO, .domain = DOMAIN_IO,
}, },
[MT_DEVICE_CACHED] = { /* ioremap_cached */ [MT_DEVICE_CACHED] = { /* ioremap_cached */
@ -205,7 +205,7 @@ static struct mem_type mem_types[] = {
[MT_DEVICE_WC] = { /* ioremap_wc */ [MT_DEVICE_WC] = { /* ioremap_wc */
.prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_WC, .prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_WC,
.prot_l1 = PMD_TYPE_TABLE, .prot_l1 = PMD_TYPE_TABLE,
.prot_sect = PROT_SECT_DEVICE | PMD_SECT_BUFFERABLE, .prot_sect = PROT_SECT_DEVICE,
.domain = DOMAIN_IO, .domain = DOMAIN_IO,
}, },
[MT_CACHECLEAN] = { [MT_CACHECLEAN] = {
@ -273,22 +273,23 @@ static void __init build_mem_type_table(void)
#endif #endif
/* /*
* On non-Xscale3 ARMv5-and-older systems, use CB=01 * Strip out features not present on earlier architectures.
* (Uncached/Buffered) for ioremap_wc() mappings. On XScale3 * Pre-ARMv5 CPUs don't have TEX bits. Pre-ARMv6 CPUs or those
* and ARMv6+, use TEXCB=00100 mappings (Inner/Outer Uncacheable * without extended page tables don't have the 'Shared' bit.
* in xsc3 parlance, Uncached Normal in ARMv6 parlance).
*/ */
if (cpu_is_xsc3() || cpu_arch >= CPU_ARCH_ARMv6) { if (cpu_arch < CPU_ARCH_ARMv5)
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_TEX(1); for (i = 0; i < ARRAY_SIZE(mem_types); i++)
mem_types[MT_DEVICE_WC].prot_sect &= ~PMD_SECT_BUFFERABLE; mem_types[i].prot_sect &= ~PMD_SECT_TEX(7);
} if ((cpu_arch < CPU_ARCH_ARMv6 || !(cr & CR_XP)) && !cpu_is_xsc3())
for (i = 0; i < ARRAY_SIZE(mem_types); i++)
mem_types[i].prot_sect &= ~PMD_SECT_S;
/* /*
* ARMv5 and lower, bit 4 must be set for page tables. * ARMv5 and lower, bit 4 must be set for page tables (was: cache
* (was: cache "update-able on write" bit on ARM610) * "update-able on write" bit on ARM610). However, Xscale and
* However, Xscale cores require this bit to be cleared. * Xscale3 require this bit to be cleared.
*/ */
if (cpu_is_xscale()) { if (cpu_is_xscale() || cpu_is_xsc3()) {
for (i = 0; i < ARRAY_SIZE(mem_types); i++) { for (i = 0; i < ARRAY_SIZE(mem_types); i++) {
mem_types[i].prot_sect &= ~PMD_BIT4; mem_types[i].prot_sect &= ~PMD_BIT4;
mem_types[i].prot_l1 &= ~PMD_BIT4; mem_types[i].prot_l1 &= ~PMD_BIT4;
@ -302,6 +303,64 @@ static void __init build_mem_type_table(void)
} }
} }
/*
* Mark the device areas according to the CPU/architecture.
*/
if (cpu_is_xsc3() || (cpu_arch >= CPU_ARCH_ARMv6 && (cr & CR_XP))) {
if (!cpu_is_xsc3()) {
/*
* Mark device regions on ARMv6+ as execute-never
* to prevent speculative instruction fetches.
*/
mem_types[MT_DEVICE].prot_sect |= PMD_SECT_XN;
mem_types[MT_DEVICE_NONSHARED].prot_sect |= PMD_SECT_XN;
mem_types[MT_DEVICE_CACHED].prot_sect |= PMD_SECT_XN;
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_XN;
}
if (cpu_arch >= CPU_ARCH_ARMv7 && (cr & CR_TRE)) {
/*
* For ARMv7 with TEX remapping,
* - shared device is SXCB=1100
* - nonshared device is SXCB=0100
* - write combine device mem is SXCB=0001
* (Uncached Normal memory)
*/
mem_types[MT_DEVICE].prot_sect |= PMD_SECT_TEX(1);
mem_types[MT_DEVICE_NONSHARED].prot_sect |= PMD_SECT_TEX(1);
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_BUFFERABLE;
} else if (cpu_is_xsc3()) {
/*
* For Xscale3,
* - shared device is TEXCB=00101
* - nonshared device is TEXCB=01000
* - write combine device mem is TEXCB=00100
* (Inner/Outer Uncacheable in xsc3 parlance)
*/
mem_types[MT_DEVICE].prot_sect |= PMD_SECT_TEX(1) | PMD_SECT_BUFFERED;
mem_types[MT_DEVICE_NONSHARED].prot_sect |= PMD_SECT_TEX(2);
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_TEX(1);
} else {
/*
* For ARMv6 and ARMv7 without TEX remapping,
* - shared device is TEXCB=00001
* - nonshared device is TEXCB=01000
* - write combine device mem is TEXCB=00100
* (Uncached Normal in ARMv6 parlance).
*/
mem_types[MT_DEVICE].prot_sect |= PMD_SECT_BUFFERED;
mem_types[MT_DEVICE_NONSHARED].prot_sect |= PMD_SECT_TEX(2);
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_TEX(1);
}
} else {
/*
* On others, write combining is "Uncached/Buffered"
*/
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_BUFFERABLE;
}
/*
* Now deal with the memory-type mappings
*/
cp = &cache_policies[cachepolicy]; cp = &cache_policies[cachepolicy];
vecs_pgprot = kern_pgprot = user_pgprot = cp->pte; vecs_pgprot = kern_pgprot = user_pgprot = cp->pte;
@ -317,12 +376,8 @@ static void __init build_mem_type_table(void)
* Enable CPU-specific coherency if supported. * Enable CPU-specific coherency if supported.
* (Only available on XSC3 at the moment.) * (Only available on XSC3 at the moment.)
*/ */
if (arch_is_coherent()) { if (arch_is_coherent() && cpu_is_xsc3())
if (cpu_is_xsc3()) { mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;
mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;
mem_types[MT_MEMORY].prot_pte |= L_PTE_SHARED;
}
}
/* /*
* ARMv6 and above have extended page tables. * ARMv6 and above have extended page tables.
@ -336,11 +391,6 @@ static void __init build_mem_type_table(void)
mem_types[MT_MINICLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE; mem_types[MT_MINICLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE; mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
/*
* Mark the device area as "shared device"
*/
mem_types[MT_DEVICE].prot_sect |= PMD_SECT_BUFFERED;
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* /*
* Mark memory with the "shared" attribute for SMP systems * Mark memory with the "shared" attribute for SMP systems
@ -360,9 +410,6 @@ static void __init build_mem_type_table(void)
mem_types[MT_LOW_VECTORS].prot_pte |= vecs_pgprot; mem_types[MT_LOW_VECTORS].prot_pte |= vecs_pgprot;
mem_types[MT_HIGH_VECTORS].prot_pte |= vecs_pgprot; mem_types[MT_HIGH_VECTORS].prot_pte |= vecs_pgprot;
if (cpu_arch < CPU_ARCH_ARMv5)
mem_types[MT_MINICLEAN].prot_sect &= ~PMD_SECT_TEX(1);
pgprot_user = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | user_pgprot); pgprot_user = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | user_pgprot);
pgprot_kernel = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | pgprot_kernel = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG |
L_PTE_DIRTY | L_PTE_WRITE | L_PTE_DIRTY | L_PTE_WRITE |
@ -654,7 +701,7 @@ static inline void prepare_page_table(struct meminfo *mi)
/* /*
* Clear out all the mappings below the kernel image. * Clear out all the mappings below the kernel image.
*/ */
for (addr = 0; addr < MODULE_START; addr += PGDIR_SIZE) for (addr = 0; addr < MODULES_VADDR; addr += PGDIR_SIZE)
pmd_clear(pmd_off_k(addr)); pmd_clear(pmd_off_k(addr));
#ifdef CONFIG_XIP_KERNEL #ifdef CONFIG_XIP_KERNEL
@ -766,7 +813,7 @@ static void __init devicemaps_init(struct machine_desc *mdesc)
*/ */
#ifdef CONFIG_XIP_KERNEL #ifdef CONFIG_XIP_KERNEL
map.pfn = __phys_to_pfn(CONFIG_XIP_PHYS_ADDR & SECTION_MASK); map.pfn = __phys_to_pfn(CONFIG_XIP_PHYS_ADDR & SECTION_MASK);
map.virtual = MODULE_START; map.virtual = MODULES_VADDR;
map.length = ((unsigned long)&_etext - map.virtual + ~SECTION_MASK) & SECTION_MASK; map.length = ((unsigned long)&_etext - map.virtual + ~SECTION_MASK) & SECTION_MASK;
map.type = MT_ROM; map.type = MT_ROM;
create_mapping(&map); create_mapping(&map);

View File

@ -115,7 +115,7 @@ ENTRY(cpu_v7_set_pte_ext)
orr r3, r3, r2 orr r3, r3, r2
orr r3, r3, #PTE_EXT_AP0 | 2 orr r3, r3, #PTE_EXT_AP0 | 2
tst r2, #1 << 4 tst r1, #1 << 4
orrne r3, r3, #PTE_EXT_TEX(1) orrne r3, r3, #PTE_EXT_TEX(1)
tst r1, #L_PTE_WRITE tst r1, #L_PTE_WRITE
@ -192,11 +192,11 @@ __v7_setup:
mov pc, lr @ return to head.S:__ret mov pc, lr @ return to head.S:__ret
ENDPROC(__v7_setup) ENDPROC(__v7_setup)
/* /* AT
* V X F I D LR * TFR EV X F I D LR
* .... ...E PUI. .T.T 4RVI ZFRS BLDP WCAM * .EEE ..EE PUI. .T.T 4RVI ZFRS BLDP WCAM
* rrrr rrrx xxx0 0101 xxxx xxxx x111 xxxx < forced * rxxx rrxx xxx0 0101 xxxx xxxx x111 xxxx < forced
* 0 110 0011 1.00 .111 1101 < we want * 1 0 110 0011 1.00 .111 1101 < we want
*/ */
.type v7_crval, #object .type v7_crval, #object
v7_crval: v7_crval:

View File

@ -349,7 +349,7 @@ ENTRY(cpu_xsc3_switch_mm)
cpu_xsc3_mt_table: cpu_xsc3_mt_table:
.long 0x00 @ L_PTE_MT_UNCACHED .long 0x00 @ L_PTE_MT_UNCACHED
.long PTE_EXT_TEX(1) @ L_PTE_MT_BUFFERABLE .long PTE_EXT_TEX(1) @ L_PTE_MT_BUFFERABLE
.long PTE_CACHEABLE @ L_PTE_MT_WRITETHROUGH .long PTE_EXT_TEX(5) | PTE_CACHEABLE @ L_PTE_MT_WRITETHROUGH
.long PTE_CACHEABLE | PTE_BUFFERABLE @ L_PTE_MT_WRITEBACK .long PTE_CACHEABLE | PTE_BUFFERABLE @ L_PTE_MT_WRITEBACK
.long PTE_EXT_TEX(1) | PTE_BUFFERABLE @ L_PTE_MT_DEV_SHARED .long PTE_EXT_TEX(1) | PTE_BUFFERABLE @ L_PTE_MT_DEV_SHARED
.long 0x00 @ unused .long 0x00 @ unused

View File

@ -188,7 +188,7 @@ static int mxc_gpio_get(struct gpio_chip *chip, unsigned offset)
struct mxc_gpio_port *port = struct mxc_gpio_port *port =
container_of(chip, struct mxc_gpio_port, chip); container_of(chip, struct mxc_gpio_port, chip);
return (__raw_readl(port->base + GPIO_DR) >> offset) & 1; return (__raw_readl(port->base + GPIO_PSR) >> offset) & 1;
} }
static int mxc_gpio_direction_input(struct gpio_chip *chip, unsigned offset) static int mxc_gpio_direction_input(struct gpio_chip *chip, unsigned offset)

View File

@ -14,6 +14,26 @@
/* Allow IO space to be anywhere in the memory */ /* Allow IO space to be anywhere in the memory */
#define IO_SPACE_LIMIT 0xffffffff #define IO_SPACE_LIMIT 0xffffffff
#ifdef CONFIG_ARCH_MX3
#define __arch_ioremap __mx3_ioremap
#define __arch_iounmap __iounmap
static inline void __iomem *
__mx3_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype)
{
if (mtype == MT_DEVICE) {
/* Access all peripherals below 0x80000000 as nonshared device
* but leave l2cc alone.
*/
if ((phys_addr < 0x80000000) && ((phys_addr < L2CC_BASE_ADDR) ||
(phys_addr >= L2CC_BASE_ADDR + L2CC_SIZE)))
mtype = MT_DEVICE_NONSHARED;
}
return __arm_ioremap(phys_addr, size, mtype);
}
#endif
/* io address mapping macro */ /* io address mapping macro */
#define __io(a) ((void __iomem *)(a)) #define __io(a) ((void __iomem *)(a))

View File

@ -428,23 +428,23 @@ static int clk_debugfs_register_one(struct clk *c)
if (c->id != 0) if (c->id != 0)
sprintf(p, ":%d", c->id); sprintf(p, ":%d", c->id);
d = debugfs_create_dir(s, pa ? pa->dent : clk_debugfs_root); d = debugfs_create_dir(s, pa ? pa->dent : clk_debugfs_root);
if (IS_ERR(d)) if (!d)
return PTR_ERR(d); return -ENOMEM;
c->dent = d; c->dent = d;
d = debugfs_create_u8("usecount", S_IRUGO, c->dent, (u8 *)&c->usecount); d = debugfs_create_u8("usecount", S_IRUGO, c->dent, (u8 *)&c->usecount);
if (IS_ERR(d)) { if (!d) {
err = PTR_ERR(d); err = -ENOMEM;
goto err_out; goto err_out;
} }
d = debugfs_create_u32("rate", S_IRUGO, c->dent, (u32 *)&c->rate); d = debugfs_create_u32("rate", S_IRUGO, c->dent, (u32 *)&c->rate);
if (IS_ERR(d)) { if (!d) {
err = PTR_ERR(d); err = -ENOMEM;
goto err_out; goto err_out;
} }
d = debugfs_create_x32("flags", S_IRUGO, c->dent, (u32 *)&c->flags); d = debugfs_create_x32("flags", S_IRUGO, c->dent, (u32 *)&c->flags);
if (IS_ERR(d)) { if (!d) {
err = PTR_ERR(d); err = -ENOMEM;
goto err_out; goto err_out;
} }
return 0; return 0;
@ -483,8 +483,8 @@ static int __init clk_debugfs_init(void)
int err; int err;
d = debugfs_create_dir("clock", NULL); d = debugfs_create_dir("clock", NULL);
if (IS_ERR(d)) if (!d)
return PTR_ERR(d); return -ENOMEM;
clk_debugfs_root = d; clk_debugfs_root = d;
list_for_each_entry(c, &clocks, node) { list_for_each_entry(c, &clocks, node) {

View File

@ -65,7 +65,8 @@
#include <mach/omap34xx.h> #include <mach/omap34xx.h>
#endif #endif
#define INTCPS_SIR_IRQ_OFFSET 0x0040 /* Active interrupt number */ #define INTCPS_SIR_IRQ_OFFSET 0x0040 /* Active interrupt offset */
#define ACTIVEIRQ_MASK 0x7f /* Active interrupt bits */
.macro disable_fiq .macro disable_fiq
.endm .endm
@ -88,6 +89,7 @@
cmp \irqnr, #0x0 cmp \irqnr, #0x0
2222: 2222:
ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET] ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET]
and \irqnr, \irqnr, #ACTIVEIRQ_MASK /* Clear spurious bits */
.endm .endm

View File

@ -372,7 +372,7 @@
/* External TWL4030 gpio interrupts are optional */ /* External TWL4030 gpio interrupts are optional */
#define TWL4030_GPIO_IRQ_BASE TWL4030_PWR_IRQ_END #define TWL4030_GPIO_IRQ_BASE TWL4030_PWR_IRQ_END
#ifdef CONFIG_TWL4030_GPIO #ifdef CONFIG_GPIO_TWL4030
#define TWL4030_GPIO_NR_IRQS 18 #define TWL4030_GPIO_NR_IRQS 18
#else #else
#define TWL4030_GPIO_NR_IRQS 0 #define TWL4030_GPIO_NR_IRQS 0

View File

@ -23,12 +23,17 @@ mach-$(CONFIG_ETRAXFS) := fs
ifneq ($(arch-y),) ifneq ($(arch-y),)
SARCH := arch-$(arch-y) SARCH := arch-$(arch-y)
inc := -Iarch/cris/include/$(SARCH)
inc += -Iarch/cris/include/$(SARCH)/arch
else else
SARCH := SARCH :=
inc :=
endif endif
ifneq ($(mach-y),) ifneq ($(mach-y),)
MACH := mach-$(mach-y) MACH := mach-$(mach-y)
inc += -Iarch/cris/include/$(SARCH)/$(MACH)/
inc += -Iarch/cris/include/$(SARCH)/$(MACH)/mach
else else
MACH := MACH :=
endif endif
@ -39,95 +44,57 @@ OBJCOPYFLAGS := -O binary -R .note -R .comment -S
CPPFLAGS_vmlinux.lds = -DDRAM_VIRTUAL_BASE=0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE) CPPFLAGS_vmlinux.lds = -DDRAM_VIRTUAL_BASE=0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE)
KBUILD_AFLAGS += -mlinux -march=$(arch-y) -Iinclude/asm/arch/mach -Iinclude/asm/arch KBUILD_AFLAGS += -mlinux -march=$(arch-y) $(inc)
KBUILD_CFLAGS += -mlinux -march=$(arch-y) -pipe $(inc)
KBUILD_CFLAGS += -mlinux -march=$(arch-y) -pipe -Iinclude/asm/arch/mach -Iinclude/asm/arch KBUILD_CPPFLAGS += $(inc)
ifdef CONFIG_FRAME_POINTER ifdef CONFIG_FRAME_POINTER
KBUILD_CFLAGS := $(subst -fomit-frame-pointer,,$(KBUILD_CFLAGS)) -g KBUILD_CFLAGS := $(subst -fomit-frame-pointer,,$(KBUILD_CFLAGS)) -g
KBUILD_CFLAGS += -fno-omit-frame-pointer KBUILD_CFLAGS += -fno-omit-frame-pointer
endif endif
head-y := arch/$(ARCH)/$(SARCH)/kernel/head.o head-y := arch/cris/$(SARCH)/kernel/head.o
LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) -print-file-name=libgcc.a) LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS) -print-file-name=libgcc.a)
core-y += arch/$(ARCH)/kernel/ arch/$(ARCH)/mm/ core-y += arch/cris/kernel/ arch/cris/mm/
core-y += arch/$(ARCH)/$(SARCH)/kernel/ arch/$(ARCH)/$(SARCH)/mm/ core-y += arch/cris/$(SARCH)/kernel/ arch/cris/$(SARCH)/mm/
ifdef CONFIG_ETRAX_ARCH_V32 ifdef CONFIG_ETRAX_ARCH_V32
core-y += arch/$(ARCH)/$(SARCH)/$(MACH)/ core-y += arch/cris/$(SARCH)/$(MACH)/
endif endif
drivers-y += arch/$(ARCH)/$(SARCH)/drivers/ drivers-y += arch/cris/$(SARCH)/drivers/
libs-y += arch/$(ARCH)/$(SARCH)/lib/ $(LIBGCC) libs-y += arch/cris/$(SARCH)/lib/ $(LIBGCC)
# cris source path # cris source path
SRC_ARCH = $(srctree)/arch/$(ARCH) SRC_ARCH = $(srctree)/arch/cris
# cris object files path # cris object files path
OBJ_ARCH = $(objtree)/arch/$(ARCH) OBJ_ARCH = $(objtree)/arch/cris
boot := arch/$(ARCH)/boot boot := arch/cris/$(SARCH)/boot
MACHINE := arch/$(ARCH)/$(SARCH) MACHINE := arch/cris/$(SARCH)
all: zImage all: zImage
zImage Image: vmlinux zImage Image: vmlinux
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
archprepare: $(SRC_ARCH)/.links $(srctree)/include/asm-$(ARCH)/.arch FORCE archprepare:
# Create some links to make all tools happy
$(SRC_ARCH)/.links:
@rm -rf $(SRC_ARCH)/drivers
@ln -sfn $(SARCH)/drivers $(SRC_ARCH)/drivers
@rm -rf $(SRC_ARCH)/boot
@ln -sfn $(SARCH)/boot $(SRC_ARCH)/boot
@rm -rf $(SRC_ARCH)/lib
@ln -sfn $(SARCH)/lib $(SRC_ARCH)/lib
@rm -f $(SRC_ARCH)/arch/mach
@rm -rf $(SRC_ARCH)/arch
@ln -sfn $(SARCH) $(SRC_ARCH)/arch
ifdef CONFIG_ETRAX_ARCH_V32
@ln -sfn ../$(SARCH)/$(MACH) $(SRC_ARCH)/arch/mach
endif
@rm -rf $(SRC_ARCH)/kernel/vmlinux.lds.S
@ln -sfn ../$(SARCH)/vmlinux.lds.S $(SRC_ARCH)/kernel/vmlinux.lds.S
@rm -rf $(SRC_ARCH)/kernel/asm-offsets.c
@ln -sfn ../$(SARCH)/kernel/asm-offsets.c $(SRC_ARCH)/kernel/asm-offsets.c
@touch $@
# Create link to sub arch includes
$(srctree)/include/asm-$(ARCH)/.arch: $(wildcard include/config/arch/*.h)
@echo ' SYMLINK include/asm-$(ARCH)/arch -> include/asm-$(ARCH)/$(SARCH)'
@rm -f $(srctree)/include/asm-$(ARCH)/arch/mach
@rm -f $(srctree)/include/asm-$(ARCH)/arch
@ln -sf $(SARCH) $(srctree)/include/asm-$(ARCH)/arch
ifdef CONFIG_ETRAX_ARCH_V32
@ln -sf $(MACH) $(srctree)/include/asm-$(ARCH)/arch/mach
endif
@touch $@
archclean: archclean:
$(Q)if [ -e arch/$(ARCH)/boot ]; then \ $(Q)if [ -e arch/cris/$(SARCH)/boot ]; then \
$(MAKE) $(clean)=arch/$(ARCH)/boot; \ $(MAKE) $(clean)=arch/cris/$(SARCH)/boot; \
fi fi
CLEAN_FILES += \ CLEAN_FILES += \
$(MACHINE)/boot/zImage \ $(MACHINE)/boot/zImage \
$(MACHINE)/boot/compressed/decompress.bin \ $(MACHINE)/boot/compressed/decompress.bin \
$(MACHINE)/boot/compressed/piggy.gz \ $(MACHINE)/boot/compressed/piggy.gz \
$(MACHINE)/boot/rescue/rescue.bin \ $(MACHINE)/boot/rescue/rescue.bin
$(SRC_ARCH)/.links \
$(srctree)/include/asm-$(ARCH)/.arch
MRPROPER_FILES += \
$(SRC_ARCH)/drivers \ # MRPROPER_FILES +=
$(SRC_ARCH)/boot \
$(SRC_ARCH)/lib \
$(SRC_ARCH)/arch \
$(SRC_ARCH)/kernel/vmlinux.lds.S \
$(SRC_ARCH)/kernel/asm-offsets.c
define archhelp define archhelp
echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)' echo '* zImage - Compressed kernel image (arch/cris/boot/zImage)'
echo '* Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' echo '* Image - Uncompressed kernel image (arch/cris/boot/Image)'
endef endef

2
arch/cris/arch-v10/boot/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
Image
zImage

View File

@ -9,7 +9,7 @@
*/ */
#define ASSEMBLER_MACROS_ONLY #define ASSEMBLER_MACROS_ONLY
#include <asm/arch/sv_addr_ag.h> #include <arch/sv_addr_ag.h>
#define RAM_INIT_MAGIC 0x56902387 #define RAM_INIT_MAGIC 0x56902387
#define COMMAND_LINE_MAGIC 0x87109563 #define COMMAND_LINE_MAGIC 0x87109563

View File

@ -20,7 +20,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <asm/arch/svinto.h> #include <arch/svinto.h>
/* /*
* gzip declarations * gzip declarations

View File

@ -65,7 +65,7 @@
#ifdef CONFIG_ETRAX_AXISFLASHMAP #ifdef CONFIG_ETRAX_AXISFLASHMAP
#define ASSEMBLER_MACROS_ONLY #define ASSEMBLER_MACROS_ONLY
#include <asm/arch/sv_addr_ag.h> #include <arch/sv_addr_ag.h>
;; The partitiontable is looked for at the first sector after the boot ;; The partitiontable is looked for at the first sector after the boot
;; sector. Sector size is 65536 bytes in all flashes we use. ;; sector. Sector size is 65536 bytes in all flashes we use.

View File

@ -6,7 +6,7 @@
*/ */
#define ASSEMBLER_MACROS_ONLY #define ASSEMBLER_MACROS_ONLY
#include <asm/arch/sv_addr_ag.h> #include <arch/sv_addr_ag.h>
#define CODE_START 0x40004000 #define CODE_START 0x40004000
#define CODE_LENGTH 784 #define CODE_LENGTH 784

View File

@ -6,7 +6,7 @@
*/ */
#define ASSEMBLER_MACROS_ONLY #define ASSEMBLER_MACROS_ONLY
#include <asm/arch/sv_addr_ag.h> #include <arch/sv_addr_ag.h>
.text .text

View File

@ -26,7 +26,7 @@
#include <asm/axisflashmap.h> #include <asm/axisflashmap.h>
#include <asm/mmu.h> #include <asm/mmu.h>
#include <asm/arch/sv_addr_ag.h> #include <arch/sv_addr_ag.h>
#ifdef CONFIG_CRIS_LOW_MAP #ifdef CONFIG_CRIS_LOW_MAP
#define FLASH_UNCACHED_ADDR KSEG_8 #define FLASH_UNCACHED_ADDR KSEG_8

View File

@ -24,10 +24,10 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/arch/svinto.h> #include <arch/svinto.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/rtc.h> #include <asm/rtc.h>
#include <asm/arch/io_interface_mux.h> #include <arch/io_interface_mux.h>
#include "i2c.h" #include "i2c.h"

View File

@ -23,11 +23,11 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <asm/etraxgpio.h> #include <asm/etraxgpio.h>
#include <asm/arch/svinto.h> #include <arch/svinto.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/arch/io_interface_mux.h> #include <arch/io_interface_mux.h>
#define GPIO_MAJOR 120 /* experimental MAJOR number */ #define GPIO_MAJOR 120 /* experimental MAJOR number */

View File

@ -25,10 +25,10 @@
#include <asm/etraxi2c.h> #include <asm/etraxi2c.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/arch/svinto.h> #include <arch/svinto.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/delay.h> #include <asm/delay.h>
#include <asm/arch/io_interface_mux.h> #include <arch/io_interface_mux.h>
#include "i2c.h" #include "i2c.h"

Some files were not shown because too many files have changed in this diff Show More