Merge branch 'linus' into core/locking
This commit is contained in:
commit
708b8eae0f
2
.mailmap
2
.mailmap
|
@ -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>
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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>' > $@
|
||||||
|
|
|
@ -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(&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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
getdelays
|
|
@ -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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -0,0 +1 @@
|
||||||
|
cfag12864b-example
|
|
@ -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:
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
ucon
|
|
@ -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.
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
aliasing-test
|
|
@ -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
|
|
@ -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.
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
これらのどれもが、時にはとても困難です。これらの慣例を完璧に実施するに
|
これらのどれもが、時にはとても困難です。これらの慣例を完璧に実施するに
|
||||||
は数年かかるかもしれません。これは継続的な改善のプロセスであり、そのた
|
は数年かかるかもしれません。これは継続的な改善のプロセスであり、そのた
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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));
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
ifenslave
|
|
@ -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>
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
crc32hash
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
spidev_fdx
|
||||||
|
spidev_test
|
|
@ -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,
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
v4lgrab
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -0,0 +1 @@
|
||||||
|
slabinfo
|
|
@ -0,0 +1,2 @@
|
||||||
|
watchdog-simple
|
||||||
|
watchdog-test
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
70
MAINTAINERS
70
MAINTAINERS
|
@ -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
|
||||||
|
|
12
Makefile
12
Makefile
|
@ -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; \
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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));
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
*
|
*
|
||||||
|
|
|
@ -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
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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))
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Image
|
||||||
|
zImage
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -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
Loading…
Reference in New Issue