Merge tag 'v3.1-rc6' into staging/for_v3.2
* tag 'v3.1-rc6': (1902 commits) Linux 3.1-rc6 ioctl: register LTTng ioctl fuse: fix memory leak fuse: fix flock breakage Btrfs: add dummy extent if dst offset excceeds file end in Btrfs: calc file extent num_bytes correctly in file clone btrfs: xattr: fix attribute removal Btrfs: fix wrong nbytes information of the inode Btrfs: fix the file extent gap when doing direct IO Btrfs: fix unclosed transaction handle in btrfs_cont_expand Btrfs: fix misuse of trans block rsv Btrfs: reset to appropriate block rsv after orphan operations Btrfs: skip locking if searching the commit root in csum lookup btrfs: fix warning in iput for bad-inode Btrfs: fix an oops when deleting snapshots [media] vp7045: fix buffer setup [media] nuvoton-cir: simplify raw IR sample handling [media] [Resend] viacam: Don't explode if pci_find_bus() returns NULL [media] v4l2: Fix documentation of the codec device controls [media] gspca - sonixj: Fix the darkness of sensor om6802 in 320x240 ...
This commit is contained in:
commit
7577911244
17
CREDITS
17
CREDITS
|
@ -504,7 +504,7 @@ N: Dominik Brodowski
|
||||||
E: linux@brodo.de
|
E: linux@brodo.de
|
||||||
W: http://www.brodo.de/
|
W: http://www.brodo.de/
|
||||||
P: 1024D/725B37C6 190F 3E77 9C89 3B6D BECD 46EE 67C3 0308 725B 37C6
|
P: 1024D/725B37C6 190F 3E77 9C89 3B6D BECD 46EE 67C3 0308 725B 37C6
|
||||||
D: parts of CPUFreq code, ACPI bugfixes
|
D: parts of CPUFreq code, ACPI bugfixes, PCMCIA rewrite, cpufrequtils
|
||||||
S: Tuebingen, Germany
|
S: Tuebingen, Germany
|
||||||
|
|
||||||
N: Andries Brouwer
|
N: Andries Brouwer
|
||||||
|
@ -857,6 +857,10 @@ S: One Dell Way
|
||||||
S: Round Rock, TX 78682
|
S: Round Rock, TX 78682
|
||||||
S: USA
|
S: USA
|
||||||
|
|
||||||
|
N: Mattia Dongili
|
||||||
|
E: malattia@gmail.com
|
||||||
|
D: cpufrequtils (precursor to cpupowerutils)
|
||||||
|
|
||||||
N: Ben Dooks
|
N: Ben Dooks
|
||||||
E: ben-linux@fluff.org
|
E: ben-linux@fluff.org
|
||||||
E: ben@simtec.co.uk
|
E: ben@simtec.co.uk
|
||||||
|
@ -1883,6 +1887,11 @@ S: Kruislaan 419
|
||||||
S: 1098 VA Amsterdam
|
S: 1098 VA Amsterdam
|
||||||
S: The Netherlands
|
S: The Netherlands
|
||||||
|
|
||||||
|
N: Goran Koruga
|
||||||
|
E: korugag@siol.net
|
||||||
|
D: cpufrequtils (precursor to cpupowerutils)
|
||||||
|
S: Slovenia
|
||||||
|
|
||||||
N: Jiri Kosina
|
N: Jiri Kosina
|
||||||
E: jikos@jikos.cz
|
E: jikos@jikos.cz
|
||||||
E: jkosina@suse.cz
|
E: jkosina@suse.cz
|
||||||
|
@ -2916,6 +2925,12 @@ S: Schlossbergring 9
|
||||||
S: 79098 Freiburg
|
S: 79098 Freiburg
|
||||||
S: Germany
|
S: Germany
|
||||||
|
|
||||||
|
N: Thomas Renninger
|
||||||
|
E: trenn@suse.de
|
||||||
|
D: cpupowerutils
|
||||||
|
S: SUSE Linux GmbH
|
||||||
|
S: Germany
|
||||||
|
|
||||||
N: Joerg Reuter
|
N: Joerg Reuter
|
||||||
E: jreuter@yaina.de
|
E: jreuter@yaina.de
|
||||||
W: http://yaina.de/jreuter/
|
W: http://yaina.de/jreuter/
|
||||||
|
|
|
@ -272,6 +272,8 @@ printk-formats.txt
|
||||||
- how to get printk format specifiers right
|
- how to get printk format specifiers right
|
||||||
prio_tree.txt
|
prio_tree.txt
|
||||||
- info on radix-priority-search-tree use for indexing vmas.
|
- info on radix-priority-search-tree use for indexing vmas.
|
||||||
|
ramoops.txt
|
||||||
|
- documentation of the ramoops oops/panic logging module.
|
||||||
rbtree.txt
|
rbtree.txt
|
||||||
- info on what red-black trees are and what they are for.
|
- info on what red-black trees are and what they are for.
|
||||||
robust-futex-ABI.txt
|
robust-futex-ABI.txt
|
||||||
|
|
|
@ -39,3 +39,9 @@ Description: Generic interface to platform dependent persistent storage.
|
||||||
multiple) files based on the record size of the underlying
|
multiple) files based on the record size of the underlying
|
||||||
persistent storage until at least this amount is reached.
|
persistent storage until at least this amount is reached.
|
||||||
Default is 10 Kbytes.
|
Default is 10 Kbytes.
|
||||||
|
|
||||||
|
Pstore only supports one backend at a time. If multiple
|
||||||
|
backends are available, the preferred backend may be
|
||||||
|
set by passing the pstore.backend= argument to the kernel at
|
||||||
|
boot time.
|
||||||
|
|
||||||
|
|
|
@ -4,3 +4,20 @@ KernelVersion: 2.6.37
|
||||||
Contact: "Ike Panhc <ike.pan@canonical.com>"
|
Contact: "Ike Panhc <ike.pan@canonical.com>"
|
||||||
Description:
|
Description:
|
||||||
Control the power of camera module. 1 means on, 0 means off.
|
Control the power of camera module. 1 means on, 0 means off.
|
||||||
|
|
||||||
|
What: /sys/devices/platform/ideapad/cfg
|
||||||
|
Date: Jun 2011
|
||||||
|
KernelVersion: 3.1
|
||||||
|
Contact: "Ike Panhc <ike.pan@canonical.com>"
|
||||||
|
Description:
|
||||||
|
Ideapad capability bits.
|
||||||
|
Bit 8-10: 1 - Intel graphic only
|
||||||
|
2 - ATI graphic only
|
||||||
|
3 - Nvidia graphic only
|
||||||
|
4 - Intel and ATI graphic
|
||||||
|
5 - Intel and Nvidia graphic
|
||||||
|
Bit 16: Bluetooth exist (1 for exist)
|
||||||
|
Bit 17: 3G exist (1 for exist)
|
||||||
|
Bit 18: Wifi exist (1 for exist)
|
||||||
|
Bit 19: Camera exist (1 for exist)
|
||||||
|
|
||||||
|
|
|
@ -80,22 +80,13 @@ available tools.
|
||||||
The limit on the length of lines is 80 columns and this is a strongly
|
The limit on the length of lines is 80 columns and this is a strongly
|
||||||
preferred limit.
|
preferred limit.
|
||||||
|
|
||||||
Statements longer than 80 columns will be broken into sensible chunks.
|
Statements longer than 80 columns will be broken into sensible chunks, unless
|
||||||
Descendants are always substantially shorter than the parent and are placed
|
exceeding 80 columns significantly increases readability and does not hide
|
||||||
substantially to the right. The same applies to function headers with a long
|
information. Descendants are always substantially shorter than the parent and
|
||||||
argument list. Long strings are as well broken into shorter strings. The
|
are placed substantially to the right. The same applies to function headers
|
||||||
only exception to this is where exceeding 80 columns significantly increases
|
with a long argument list. However, never break user-visible strings such as
|
||||||
readability and does not hide information.
|
printk messages, because that breaks the ability to grep for them.
|
||||||
|
|
||||||
void fun(int a, int b, int c)
|
|
||||||
{
|
|
||||||
if (condition)
|
|
||||||
printk(KERN_WARNING "Warning this is a long printk with "
|
|
||||||
"3 parameters a: %u b: %u "
|
|
||||||
"c: %u \n", a, b, c);
|
|
||||||
else
|
|
||||||
next_statement;
|
|
||||||
}
|
|
||||||
|
|
||||||
Chapter 3: Placing Braces and Spaces
|
Chapter 3: Placing Braces and Spaces
|
||||||
|
|
||||||
|
|
|
@ -1455,7 +1455,7 @@ Applicable to the H264 encoder.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-video-h264-vui-sar-idc">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_video_h264_vui_sar_idc</entry>
|
<entry>enum v4l2_mpeg_video_h264_vui_sar_idc</entry>
|
||||||
</row>
|
</row>
|
||||||
|
@ -1561,7 +1561,7 @@ Applicable to the H264 encoder.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-video-h264-level">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LEVEL</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LEVEL</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_video_h264_level</entry>
|
<entry>enum v4l2_mpeg_video_h264_level</entry>
|
||||||
</row>
|
</row>
|
||||||
|
@ -1641,7 +1641,7 @@ Possible values are:</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-video-mpeg4-level">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_video_mpeg4_level</entry>
|
<entry>enum v4l2_mpeg_video_mpeg4_level</entry>
|
||||||
</row>
|
</row>
|
||||||
|
@ -1689,9 +1689,9 @@ Possible values are:</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-video-h264-profile">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_PROFILE</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_PROFILE</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_h264_profile</entry>
|
<entry>enum v4l2_mpeg_video_h264_profile</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry spanname="descr">The profile information for H264.
|
<row><entry spanname="descr">The profile information for H264.
|
||||||
Applicable to the H264 encoder.
|
Applicable to the H264 encoder.
|
||||||
|
@ -1774,9 +1774,9 @@ Possible values are:</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-video-mpeg4-profile">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_mpeg4_profile</entry>
|
<entry>enum v4l2_mpeg_video_mpeg4_profile</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry spanname="descr">The profile information for MPEG4.
|
<row><entry spanname="descr">The profile information for MPEG4.
|
||||||
Applicable to the MPEG4 encoder.
|
Applicable to the MPEG4 encoder.
|
||||||
|
@ -1820,9 +1820,9 @@ Applicable to the encoder.
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-video-multi-slice-mode">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_multi_slice_mode</entry>
|
<entry>enum v4l2_mpeg_video_multi_slice_mode</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry spanname="descr">Determines how the encoder should handle division of frame into slices.
|
<row><entry spanname="descr">Determines how the encoder should handle division of frame into slices.
|
||||||
Applicable to the encoder.
|
Applicable to the encoder.
|
||||||
|
@ -1868,9 +1868,9 @@ Applicable to the encoder.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-video-h264-loop-filter-mode">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_h264_loop_filter_mode</entry>
|
<entry>enum v4l2_mpeg_video_h264_loop_filter_mode</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry spanname="descr">Loop filter mode for H264 encoder.
|
<row><entry spanname="descr">Loop filter mode for H264 encoder.
|
||||||
Possible values are:</entry>
|
Possible values are:</entry>
|
||||||
|
@ -1913,9 +1913,9 @@ Applicable to the H264 encoder.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-video-h264-entropy-mode">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_h264_symbol_mode</entry>
|
<entry>enum v4l2_mpeg_video_h264_entropy_mode</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry spanname="descr">Entropy coding mode for H264 - CABAC/CAVALC.
|
<row><entry spanname="descr">Entropy coding mode for H264 - CABAC/CAVALC.
|
||||||
Applicable to the H264 encoder.
|
Applicable to the H264 encoder.
|
||||||
|
@ -2140,9 +2140,9 @@ previous frames. Applicable to the H264 encoder.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-video-header-mode">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_HEADER_MODE</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_HEADER_MODE</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_header_mode</entry>
|
<entry>enum v4l2_mpeg_video_header_mode</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry spanname="descr">Determines whether the header is returned as the first buffer or is
|
<row><entry spanname="descr">Determines whether the header is returned as the first buffer or is
|
||||||
it returned together with the first frame. Applicable to encoders.
|
it returned together with the first frame. Applicable to encoders.
|
||||||
|
@ -2320,9 +2320,9 @@ Valid only when H.264 and macroblock level RC is enabled (<constant>V4L2_CID_MPE
|
||||||
Applicable to the H264 encoder.</entry>
|
Applicable to the H264 encoder.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-mfc51-video-frame-skip-mode">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_mfc51_frame_skip_mode</entry>
|
<entry>enum v4l2_mpeg_mfc51_video_frame_skip_mode</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry spanname="descr">
|
<row><entry spanname="descr">
|
||||||
Indicates in what conditions the encoder should skip frames. If encoding a frame would cause the encoded stream to be larger then
|
Indicates in what conditions the encoder should skip frames. If encoding a frame would cause the encoded stream to be larger then
|
||||||
|
@ -2361,9 +2361,9 @@ the stream will meet tight bandwidth contraints. Applicable to encoders.
|
||||||
</entry>
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry></entry></row>
|
<row><entry></entry></row>
|
||||||
<row>
|
<row id="v4l2-mpeg-mfc51-video-force-frame-type">
|
||||||
<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE</constant> </entry>
|
<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_mfc51_force_frame_type</entry>
|
<entry>enum v4l2_mpeg_mfc51_video_force_frame_type</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry spanname="descr">Force a frame type for the next queued buffer. Applicable to encoders.
|
<row><entry spanname="descr">Force a frame type for the next queued buffer. Applicable to encoders.
|
||||||
Possible values are:</entry>
|
Possible values are:</entry>
|
||||||
|
|
|
@ -45,7 +45,7 @@ arrived in memory (this becomes more likely with devices behind PCI-PCI
|
||||||
bridges). In order to ensure that all the data has arrived in memory,
|
bridges). In order to ensure that all the data has arrived in memory,
|
||||||
the interrupt handler must read a register on the device which raised
|
the interrupt handler must read a register on the device which raised
|
||||||
the interrupt. PCI transaction ordering rules require that all the data
|
the interrupt. PCI transaction ordering rules require that all the data
|
||||||
arrives in memory before the value can be returned from the register.
|
arrive in memory before the value may be returned from the register.
|
||||||
Using MSIs avoids this problem as the interrupt-generating write cannot
|
Using MSIs avoids this problem as the interrupt-generating write cannot
|
||||||
pass the data writes, so by the time the interrupt is raised, the driver
|
pass the data writes, so by the time the interrupt is raised, the driver
|
||||||
knows that all the data has arrived in memory.
|
knows that all the data has arrived in memory.
|
||||||
|
@ -86,13 +86,13 @@ device.
|
||||||
|
|
||||||
int pci_enable_msi(struct pci_dev *dev)
|
int pci_enable_msi(struct pci_dev *dev)
|
||||||
|
|
||||||
A successful call will allocate ONE interrupt to the device, regardless
|
A successful call allocates ONE interrupt to the device, regardless
|
||||||
of how many MSIs the device supports. The device will be switched from
|
of how many MSIs the device supports. The device is switched from
|
||||||
pin-based interrupt mode to MSI mode. The dev->irq number is changed
|
pin-based interrupt mode to MSI mode. The dev->irq number is changed
|
||||||
to a new number which represents the message signaled interrupt.
|
to a new number which represents the message signaled interrupt;
|
||||||
This function should be called before the driver calls request_irq()
|
consequently, this function should be called before the driver calls
|
||||||
since enabling MSIs disables the pin-based IRQ and the driver will not
|
request_irq(), because an MSI is delivered via a vector that is
|
||||||
receive interrupts on the old interrupt.
|
different from the vector of a pin-based interrupt.
|
||||||
|
|
||||||
4.2.2 pci_enable_msi_block
|
4.2.2 pci_enable_msi_block
|
||||||
|
|
||||||
|
@ -111,20 +111,20 @@ the device are in the range dev->irq to dev->irq + count - 1.
|
||||||
|
|
||||||
If this function returns a negative number, it indicates an error and
|
If this function returns a negative number, it indicates an error and
|
||||||
the driver should not attempt to request any more MSI interrupts for
|
the driver should not attempt to request any more MSI interrupts for
|
||||||
this device. If this function returns a positive number, it will be
|
this device. If this function returns a positive number, it is
|
||||||
less than 'count' and indicate the number of interrupts that could have
|
less than 'count' and indicates the number of interrupts that could have
|
||||||
been allocated. In neither case will the irq value have been
|
been allocated. In neither case is the irq value updated or the device
|
||||||
updated, nor will the device have been switched into MSI mode.
|
switched into MSI mode.
|
||||||
|
|
||||||
The device driver must decide what action to take if
|
The device driver must decide what action to take if
|
||||||
pci_enable_msi_block() returns a value less than the number asked for.
|
pci_enable_msi_block() returns a value less than the number requested.
|
||||||
Some devices can make use of fewer interrupts than the maximum they
|
For instance, the driver could still make use of fewer interrupts;
|
||||||
request; in this case the driver should call pci_enable_msi_block()
|
in this case the driver should call pci_enable_msi_block()
|
||||||
again. Note that it is not guaranteed to succeed, even when the
|
again. Note that it is not guaranteed to succeed, even when the
|
||||||
'count' has been reduced to the value returned from a previous call to
|
'count' has been reduced to the value returned from a previous call to
|
||||||
pci_enable_msi_block(). This is because there are multiple constraints
|
pci_enable_msi_block(). This is because there are multiple constraints
|
||||||
on the number of vectors that can be allocated; pci_enable_msi_block()
|
on the number of vectors that can be allocated; pci_enable_msi_block()
|
||||||
will return as soon as it finds any constraint that doesn't allow the
|
returns as soon as it finds any constraint that doesn't allow the
|
||||||
call to succeed.
|
call to succeed.
|
||||||
|
|
||||||
4.2.3 pci_disable_msi
|
4.2.3 pci_disable_msi
|
||||||
|
@ -137,10 +137,10 @@ interrupt number and frees the previously allocated message signaled
|
||||||
interrupt(s). The interrupt may subsequently be assigned to another
|
interrupt(s). The interrupt may subsequently be assigned to another
|
||||||
device, so drivers should not cache the value of dev->irq.
|
device, so drivers should not cache the value of dev->irq.
|
||||||
|
|
||||||
A device driver must always call free_irq() on the interrupt(s)
|
Before calling this function, a device driver must always call free_irq()
|
||||||
for which it has called request_irq() before calling this function.
|
on any interrupt for which it previously called request_irq().
|
||||||
Failure to do so will result in a BUG_ON(), the device will be left with
|
Failure to do so results in a BUG_ON(), leaving the device with
|
||||||
MSI enabled and will leak its vector.
|
MSI enabled and thus leaking its vector.
|
||||||
|
|
||||||
4.3 Using MSI-X
|
4.3 Using MSI-X
|
||||||
|
|
||||||
|
@ -155,10 +155,10 @@ struct msix_entry {
|
||||||
};
|
};
|
||||||
|
|
||||||
This allows for the device to use these interrupts in a sparse fashion;
|
This allows for the device to use these interrupts in a sparse fashion;
|
||||||
for example it could use interrupts 3 and 1027 and allocate only a
|
for example, it could use interrupts 3 and 1027 and yet allocate only a
|
||||||
two-element array. The driver is expected to fill in the 'entry' value
|
two-element array. The driver is expected to fill in the 'entry' value
|
||||||
in each element of the array to indicate which entries it wants the kernel
|
in each element of the array to indicate for which entries the kernel
|
||||||
to assign interrupts for. It is invalid to fill in two entries with the
|
should assign interrupts; it is invalid to fill in two entries with the
|
||||||
same number.
|
same number.
|
||||||
|
|
||||||
4.3.1 pci_enable_msix
|
4.3.1 pci_enable_msix
|
||||||
|
@ -168,10 +168,11 @@ int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec)
|
||||||
Calling this function asks the PCI subsystem to allocate 'nvec' MSIs.
|
Calling this function asks the PCI subsystem to allocate 'nvec' MSIs.
|
||||||
The 'entries' argument is a pointer to an array of msix_entry structs
|
The 'entries' argument is a pointer to an array of msix_entry structs
|
||||||
which should be at least 'nvec' entries in size. On success, the
|
which should be at least 'nvec' entries in size. On success, the
|
||||||
function will return 0 and the device will have been switched into
|
device is switched into MSI-X mode and the function returns 0.
|
||||||
MSI-X interrupt mode. The 'vector' elements in each entry will have
|
The 'vector' member in each entry is populated with the interrupt number;
|
||||||
been filled in with the interrupt number. The driver should then call
|
the driver should then call request_irq() for each 'vector' that it
|
||||||
request_irq() for each 'vector' that it decides to use.
|
decides to use. The device driver is responsible for keeping track of the
|
||||||
|
interrupts assigned to the MSI-X vectors so it can free them again later.
|
||||||
|
|
||||||
If this function returns a negative number, it indicates an error and
|
If this function returns a negative number, it indicates an error and
|
||||||
the driver should not attempt to allocate any more MSI-X interrupts for
|
the driver should not attempt to allocate any more MSI-X interrupts for
|
||||||
|
@ -181,16 +182,14 @@ below.
|
||||||
|
|
||||||
This function, in contrast with pci_enable_msi(), does not adjust
|
This function, in contrast with pci_enable_msi(), does not adjust
|
||||||
dev->irq. The device will not generate interrupts for this interrupt
|
dev->irq. The device will not generate interrupts for this interrupt
|
||||||
number once MSI-X is enabled. The device driver is responsible for
|
number once MSI-X is enabled.
|
||||||
keeping track of the interrupts assigned to the MSI-X vectors so it can
|
|
||||||
free them again later.
|
|
||||||
|
|
||||||
Device drivers should normally call this function once per device
|
Device drivers should normally call this function once per device
|
||||||
during the initialization phase.
|
during the initialization phase.
|
||||||
|
|
||||||
It is ideal if drivers can cope with a variable number of MSI-X interrupts,
|
It is ideal if drivers can cope with a variable number of MSI-X interrupts;
|
||||||
there are many reasons why the platform may not be able to provide the
|
there are many reasons why the platform may not be able to provide the
|
||||||
exact number a driver asks for.
|
exact number that a driver asks for.
|
||||||
|
|
||||||
A request loop to achieve that might look like:
|
A request loop to achieve that might look like:
|
||||||
|
|
||||||
|
@ -212,15 +211,15 @@ static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec)
|
||||||
|
|
||||||
void pci_disable_msix(struct pci_dev *dev)
|
void pci_disable_msix(struct pci_dev *dev)
|
||||||
|
|
||||||
This API should be used to undo the effect of pci_enable_msix(). It frees
|
This function should be used to undo the effect of pci_enable_msix(). It frees
|
||||||
the previously allocated message signaled interrupts. The interrupts may
|
the previously allocated message signaled interrupts. The interrupts may
|
||||||
subsequently be assigned to another device, so drivers should not cache
|
subsequently be assigned to another device, so drivers should not cache
|
||||||
the value of the 'vector' elements over a call to pci_disable_msix().
|
the value of the 'vector' elements over a call to pci_disable_msix().
|
||||||
|
|
||||||
A device driver must always call free_irq() on the interrupt(s)
|
Before calling this function, a device driver must always call free_irq()
|
||||||
for which it has called request_irq() before calling this function.
|
on any interrupt for which it previously called request_irq().
|
||||||
Failure to do so will result in a BUG_ON(), the device will be left with
|
Failure to do so results in a BUG_ON(), leaving the device with
|
||||||
MSI enabled and will leak its vector.
|
MSI-X enabled and thus leaking its vector.
|
||||||
|
|
||||||
4.3.3 The MSI-X Table
|
4.3.3 The MSI-X Table
|
||||||
|
|
||||||
|
@ -232,10 +231,10 @@ mask or unmask an interrupt, it should call disable_irq() / enable_irq().
|
||||||
4.4 Handling devices implementing both MSI and MSI-X capabilities
|
4.4 Handling devices implementing both MSI and MSI-X capabilities
|
||||||
|
|
||||||
If a device implements both MSI and MSI-X capabilities, it can
|
If a device implements both MSI and MSI-X capabilities, it can
|
||||||
run in either MSI mode or MSI-X mode but not both simultaneously.
|
run in either MSI mode or MSI-X mode, but not both simultaneously.
|
||||||
This is a requirement of the PCI spec, and it is enforced by the
|
This is a requirement of the PCI spec, and it is enforced by the
|
||||||
PCI layer. Calling pci_enable_msi() when MSI-X is already enabled or
|
PCI layer. Calling pci_enable_msi() when MSI-X is already enabled or
|
||||||
pci_enable_msix() when MSI is already enabled will result in an error.
|
pci_enable_msix() when MSI is already enabled results in an error.
|
||||||
If a device driver wishes to switch between MSI and MSI-X at runtime,
|
If a device driver wishes to switch between MSI and MSI-X at runtime,
|
||||||
it must first quiesce the device, then switch it back to pin-interrupt
|
it must first quiesce the device, then switch it back to pin-interrupt
|
||||||
mode, before calling pci_enable_msi() or pci_enable_msix() and resuming
|
mode, before calling pci_enable_msi() or pci_enable_msix() and resuming
|
||||||
|
@ -251,7 +250,7 @@ the MSI-X facilities in preference to the MSI facilities. As mentioned
|
||||||
above, MSI-X supports any number of interrupts between 1 and 2048.
|
above, MSI-X supports any number of interrupts between 1 and 2048.
|
||||||
In constrast, MSI is restricted to a maximum of 32 interrupts (and
|
In constrast, MSI is restricted to a maximum of 32 interrupts (and
|
||||||
must be a power of two). In addition, the MSI interrupt vectors must
|
must be a power of two). In addition, the MSI interrupt vectors must
|
||||||
be allocated consecutively, so the system may not be able to allocate
|
be allocated consecutively, so the system might not be able to allocate
|
||||||
as many vectors for MSI as it could for MSI-X. On some platforms, MSI
|
as many vectors for MSI as it could for MSI-X. On some platforms, MSI
|
||||||
interrupts must all be targeted at the same set of CPUs whereas MSI-X
|
interrupts must all be targeted at the same set of CPUs whereas MSI-X
|
||||||
interrupts can all be targeted at different CPUs.
|
interrupts can all be targeted at different CPUs.
|
||||||
|
@ -281,7 +280,7 @@ disabled to enabled and back again.
|
||||||
|
|
||||||
Using 'lspci -v' (as root) may show some devices with "MSI", "Message
|
Using 'lspci -v' (as root) may show some devices with "MSI", "Message
|
||||||
Signalled Interrupts" or "MSI-X" capabilities. Each of these capabilities
|
Signalled Interrupts" or "MSI-X" capabilities. Each of these capabilities
|
||||||
has an 'Enable' flag which will be followed with either "+" (enabled)
|
has an 'Enable' flag which is followed with either "+" (enabled)
|
||||||
or "-" (disabled).
|
or "-" (disabled).
|
||||||
|
|
||||||
|
|
||||||
|
@ -298,7 +297,7 @@ The PCI stack provides three ways to disable MSIs:
|
||||||
|
|
||||||
Some host chipsets simply don't support MSIs properly. If we're
|
Some host chipsets simply don't support MSIs properly. If we're
|
||||||
lucky, the manufacturer knows this and has indicated it in the ACPI
|
lucky, the manufacturer knows this and has indicated it in the ACPI
|
||||||
FADT table. In this case, Linux will automatically disable MSIs.
|
FADT table. In this case, Linux automatically disables MSIs.
|
||||||
Some boards don't include this information in the table and so we have
|
Some boards don't include this information in the table and so we have
|
||||||
to detect them ourselves. The complete list of these is found near the
|
to detect them ourselves. The complete list of these is found near the
|
||||||
quirk_disable_all_msi() function in drivers/pci/quirks.c.
|
quirk_disable_all_msi() function in drivers/pci/quirks.c.
|
||||||
|
@ -317,7 +316,7 @@ Some bridges allow you to enable MSIs by changing some bits in their
|
||||||
PCI configuration space (especially the Hypertransport chipsets such
|
PCI configuration space (especially the Hypertransport chipsets such
|
||||||
as the nVidia nForce and Serverworks HT2000). As with host chipsets,
|
as the nVidia nForce and Serverworks HT2000). As with host chipsets,
|
||||||
Linux mostly knows about them and automatically enables MSIs if it can.
|
Linux mostly knows about them and automatically enables MSIs if it can.
|
||||||
If you have a bridge which Linux doesn't yet know about, you can enable
|
If you have a bridge unknown to Linux, you can enable
|
||||||
MSIs in configuration space using whatever method you know works, then
|
MSIs in configuration space using whatever method you know works, then
|
||||||
enable MSIs on that bridge by doing:
|
enable MSIs on that bridge by doing:
|
||||||
|
|
||||||
|
@ -327,7 +326,7 @@ where $bridge is the PCI address of the bridge you've enabled (eg
|
||||||
0000:00:0e.0).
|
0000:00:0e.0).
|
||||||
|
|
||||||
To disable MSIs, echo 0 instead of 1. Changing this value should be
|
To disable MSIs, echo 0 instead of 1. Changing this value should be
|
||||||
done with caution as it can break interrupt handling for all devices
|
done with caution as it could break interrupt handling for all devices
|
||||||
below this bridge.
|
below this bridge.
|
||||||
|
|
||||||
Again, please notify linux-pci@vger.kernel.org of any bridges that need
|
Again, please notify linux-pci@vger.kernel.org of any bridges that need
|
||||||
|
@ -336,7 +335,7 @@ special handling.
|
||||||
5.3. Disabling MSIs on a single device
|
5.3. Disabling MSIs on a single device
|
||||||
|
|
||||||
Some devices are known to have faulty MSI implementations. Usually this
|
Some devices are known to have faulty MSI implementations. Usually this
|
||||||
is handled in the individual device driver but occasionally it's necessary
|
is handled in the individual device driver, but occasionally it's necessary
|
||||||
to handle this with a quirk. Some drivers have an option to disable use
|
to handle this with a quirk. Some drivers have an option to disable use
|
||||||
of MSI. While this is a convenient workaround for the driver author,
|
of MSI. While this is a convenient workaround for the driver author,
|
||||||
it is not good practise, and should not be emulated.
|
it is not good practise, and should not be emulated.
|
||||||
|
@ -350,7 +349,7 @@ for your machine. You should also check your .config to be sure you
|
||||||
have enabled CONFIG_PCI_MSI.
|
have enabled CONFIG_PCI_MSI.
|
||||||
|
|
||||||
Then, 'lspci -t' gives the list of bridges above a device. Reading
|
Then, 'lspci -t' gives the list of bridges above a device. Reading
|
||||||
/sys/bus/pci/devices/*/msi_bus will tell you whether MSI are enabled (1)
|
/sys/bus/pci/devices/*/msi_bus will tell you whether MSIs are enabled (1)
|
||||||
or disabled (0). If 0 is found in any of the msi_bus files belonging
|
or disabled (0). If 0 is found in any of the msi_bus files belonging
|
||||||
to bridges between the PCI root and the device, MSIs are disabled.
|
to bridges between the PCI root and the device, MSIs are disabled.
|
||||||
|
|
||||||
|
|
|
@ -130,7 +130,7 @@ Linux kernel master tree:
|
||||||
ftp.??.kernel.org:/pub/linux/kernel/...
|
ftp.??.kernel.org:/pub/linux/kernel/...
|
||||||
?? == your country code, such as "us", "uk", "fr", etc.
|
?? == your country code, such as "us", "uk", "fr", etc.
|
||||||
|
|
||||||
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git
|
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git
|
||||||
|
|
||||||
Linux kernel mailing list:
|
Linux kernel mailing list:
|
||||||
linux-kernel@vger.kernel.org
|
linux-kernel@vger.kernel.org
|
||||||
|
|
|
@ -303,7 +303,7 @@ patches that are being emailed around.
|
||||||
|
|
||||||
The sign-off is a simple line at the end of the explanation for the
|
The sign-off is a simple line at the end of the explanation for the
|
||||||
patch, which certifies that you wrote it or otherwise have the right to
|
patch, which certifies that you wrote it or otherwise have the right to
|
||||||
pass it on as a open-source patch. The rules are pretty simple: if you
|
pass it on as an open-source patch. The rules are pretty simple: if you
|
||||||
can certify the below:
|
can certify the below:
|
||||||
|
|
||||||
Developer's Certificate of Origin 1.1
|
Developer's Certificate of Origin 1.1
|
||||||
|
|
|
@ -48,12 +48,19 @@ directory apei/einj. The following files are provided.
|
||||||
- param1
|
- param1
|
||||||
This file is used to set the first error parameter value. Effect of
|
This file is used to set the first error parameter value. Effect of
|
||||||
parameter depends on error_type specified. For memory error, this is
|
parameter depends on error_type specified. For memory error, this is
|
||||||
physical memory address.
|
physical memory address. Only available if param_extension module
|
||||||
|
parameter is specified.
|
||||||
|
|
||||||
- param2
|
- param2
|
||||||
This file is used to set the second error parameter value. Effect of
|
This file is used to set the second error parameter value. Effect of
|
||||||
parameter depends on error_type specified. For memory error, this is
|
parameter depends on error_type specified. For memory error, this is
|
||||||
physical memory address mask.
|
physical memory address mask. Only available if param_extension
|
||||||
|
module parameter is specified.
|
||||||
|
|
||||||
|
Injecting parameter support is a BIOS version specific extension, that
|
||||||
|
is, it only works on some BIOS version. If you want to use it, please
|
||||||
|
make sure your BIOS version has the proper support and specify
|
||||||
|
"param_extension=y" in module parameter.
|
||||||
|
|
||||||
For more information about EINJ, please refer to ACPI specification
|
For more information about EINJ, please refer to ACPI specification
|
||||||
version 4.0, section 17.5.
|
version 4.0, section 17.5.
|
||||||
|
|
|
@ -43,3 +43,74 @@ If one sets slice_idle=0 and if storage supports NCQ, CFQ internally switches
|
||||||
to IOPS mode and starts providing fairness in terms of number of requests
|
to IOPS mode and starts providing fairness in terms of number of requests
|
||||||
dispatched. Note that this mode switching takes effect only for group
|
dispatched. Note that this mode switching takes effect only for group
|
||||||
scheduling. For non-cgroup users nothing should change.
|
scheduling. For non-cgroup users nothing should change.
|
||||||
|
|
||||||
|
CFQ IO scheduler Idling Theory
|
||||||
|
===============================
|
||||||
|
Idling on a queue is primarily about waiting for the next request to come
|
||||||
|
on same queue after completion of a request. In this process CFQ will not
|
||||||
|
dispatch requests from other cfq queues even if requests are pending there.
|
||||||
|
|
||||||
|
The rationale behind idling is that it can cut down on number of seeks
|
||||||
|
on rotational media. For example, if a process is doing dependent
|
||||||
|
sequential reads (next read will come on only after completion of previous
|
||||||
|
one), then not dispatching request from other queue should help as we
|
||||||
|
did not move the disk head and kept on dispatching sequential IO from
|
||||||
|
one queue.
|
||||||
|
|
||||||
|
CFQ has following service trees and various queues are put on these trees.
|
||||||
|
|
||||||
|
sync-idle sync-noidle async
|
||||||
|
|
||||||
|
All cfq queues doing synchronous sequential IO go on to sync-idle tree.
|
||||||
|
On this tree we idle on each queue individually.
|
||||||
|
|
||||||
|
All synchronous non-sequential queues go on sync-noidle tree. Also any
|
||||||
|
request which are marked with REQ_NOIDLE go on this service tree. On this
|
||||||
|
tree we do not idle on individual queues instead idle on the whole group
|
||||||
|
of queues or the tree. So if there are 4 queues waiting for IO to dispatch
|
||||||
|
we will idle only once last queue has dispatched the IO and there is
|
||||||
|
no more IO on this service tree.
|
||||||
|
|
||||||
|
All async writes go on async service tree. There is no idling on async
|
||||||
|
queues.
|
||||||
|
|
||||||
|
CFQ has some optimizations for SSDs and if it detects a non-rotational
|
||||||
|
media which can support higher queue depth (multiple requests at in
|
||||||
|
flight at a time), then it cuts down on idling of individual queues and
|
||||||
|
all the queues move to sync-noidle tree and only tree idle remains. This
|
||||||
|
tree idling provides isolation with buffered write queues on async tree.
|
||||||
|
|
||||||
|
FAQ
|
||||||
|
===
|
||||||
|
Q1. Why to idle at all on queues marked with REQ_NOIDLE.
|
||||||
|
|
||||||
|
A1. We only do tree idle (all queues on sync-noidle tree) on queues marked
|
||||||
|
with REQ_NOIDLE. This helps in providing isolation with all the sync-idle
|
||||||
|
queues. Otherwise in presence of many sequential readers, other
|
||||||
|
synchronous IO might not get fair share of disk.
|
||||||
|
|
||||||
|
For example, if there are 10 sequential readers doing IO and they get
|
||||||
|
100ms each. If a REQ_NOIDLE request comes in, it will be scheduled
|
||||||
|
roughly after 1 second. If after completion of REQ_NOIDLE request we
|
||||||
|
do not idle, and after a couple of milli seconds a another REQ_NOIDLE
|
||||||
|
request comes in, again it will be scheduled after 1second. Repeat it
|
||||||
|
and notice how a workload can lose its disk share and suffer due to
|
||||||
|
multiple sequential readers.
|
||||||
|
|
||||||
|
fsync can generate dependent IO where bunch of data is written in the
|
||||||
|
context of fsync, and later some journaling data is written. Journaling
|
||||||
|
data comes in only after fsync has finished its IO (atleast for ext4
|
||||||
|
that seemed to be the case). Now if one decides not to idle on fsync
|
||||||
|
thread due to REQ_NOIDLE, then next journaling write will not get
|
||||||
|
scheduled for another second. A process doing small fsync, will suffer
|
||||||
|
badly in presence of multiple sequential readers.
|
||||||
|
|
||||||
|
Hence doing tree idling on threads using REQ_NOIDLE flag on requests
|
||||||
|
provides isolation from multiple sequential readers and at the same
|
||||||
|
time we do not idle on individual threads.
|
||||||
|
|
||||||
|
Q2. When to specify REQ_NOIDLE
|
||||||
|
A2. I would think whenever one is doing synchronous write and not expecting
|
||||||
|
more writes to be dispatched from same context soon, should be able
|
||||||
|
to specify REQ_NOIDLE on writes and that probably should work well for
|
||||||
|
most of the cases.
|
||||||
|
|
|
@ -4,7 +4,8 @@ dm-crypt
|
||||||
Device-Mapper's "crypt" target provides transparent encryption of block devices
|
Device-Mapper's "crypt" target provides transparent encryption of block devices
|
||||||
using the kernel crypto API.
|
using the kernel crypto API.
|
||||||
|
|
||||||
Parameters: <cipher> <key> <iv_offset> <device path> <offset>
|
Parameters: <cipher> <key> <iv_offset> <device path> \
|
||||||
|
<offset> [<#opt_params> <opt_params>]
|
||||||
|
|
||||||
<cipher>
|
<cipher>
|
||||||
Encryption cipher and an optional IV generation mode.
|
Encryption cipher and an optional IV generation mode.
|
||||||
|
@ -37,6 +38,24 @@ Parameters: <cipher> <key> <iv_offset> <device path> <offset>
|
||||||
<offset>
|
<offset>
|
||||||
Starting sector within the device where the encrypted data begins.
|
Starting sector within the device where the encrypted data begins.
|
||||||
|
|
||||||
|
<#opt_params>
|
||||||
|
Number of optional parameters. If there are no optional parameters,
|
||||||
|
the optional paramaters section can be skipped or #opt_params can be zero.
|
||||||
|
Otherwise #opt_params is the number of following arguments.
|
||||||
|
|
||||||
|
Example of optional parameters section:
|
||||||
|
1 allow_discards
|
||||||
|
|
||||||
|
allow_discards
|
||||||
|
Block discard requests (a.k.a. TRIM) are passed through the crypt device.
|
||||||
|
The default is to ignore discard requests.
|
||||||
|
|
||||||
|
WARNING: Assess the specific security risks carefully before enabling this
|
||||||
|
option. For example, allowing discards on encrypted devices may lead to
|
||||||
|
the leak of information about the ciphertext device (filesystem type,
|
||||||
|
used space etc.) if the discarded blocks can be located easily on the
|
||||||
|
device later.
|
||||||
|
|
||||||
Example scripts
|
Example scripts
|
||||||
===============
|
===============
|
||||||
LUKS (Linux Unified Key Setup) is now the preferred way to set up disk
|
LUKS (Linux Unified Key Setup) is now the preferred way to set up disk
|
||||||
|
|
|
@ -1,17 +1,53 @@
|
||||||
dm-flakey
|
dm-flakey
|
||||||
=========
|
=========
|
||||||
|
|
||||||
This target is the same as the linear target except that it returns I/O
|
This target is the same as the linear target except that it exhibits
|
||||||
errors periodically. It's been found useful in simulating failing
|
unreliable behaviour periodically. It's been found useful in simulating
|
||||||
devices for testing purposes.
|
failing devices for testing purposes.
|
||||||
|
|
||||||
Starting from the time the table is loaded, the device is available for
|
Starting from the time the table is loaded, the device is available for
|
||||||
<up interval> seconds, then returns errors for <down interval> seconds,
|
<up interval> seconds, then exhibits unreliable behaviour for <down
|
||||||
and then this cycle repeats.
|
interval> seconds, and then this cycle repeats.
|
||||||
|
|
||||||
Parameters: <dev path> <offset> <up interval> <down interval>
|
Also, consider using this in combination with the dm-delay target too,
|
||||||
|
which can delay reads and writes and/or send them to different
|
||||||
|
underlying devices.
|
||||||
|
|
||||||
|
Table parameters
|
||||||
|
----------------
|
||||||
|
<dev path> <offset> <up interval> <down interval> \
|
||||||
|
[<num_features> [<feature arguments>]]
|
||||||
|
|
||||||
|
Mandatory parameters:
|
||||||
<dev path>: Full pathname to the underlying block-device, or a
|
<dev path>: Full pathname to the underlying block-device, or a
|
||||||
"major:minor" device-number.
|
"major:minor" device-number.
|
||||||
<offset>: Starting sector within the device.
|
<offset>: Starting sector within the device.
|
||||||
<up interval>: Number of seconds device is available.
|
<up interval>: Number of seconds device is available.
|
||||||
<down interval>: Number of seconds device returns errors.
|
<down interval>: Number of seconds device returns errors.
|
||||||
|
|
||||||
|
Optional feature parameters:
|
||||||
|
If no feature parameters are present, during the periods of
|
||||||
|
unreliability, all I/O returns errors.
|
||||||
|
|
||||||
|
drop_writes:
|
||||||
|
All write I/O is silently ignored.
|
||||||
|
Read I/O is handled correctly.
|
||||||
|
|
||||||
|
corrupt_bio_byte <Nth_byte> <direction> <value> <flags>:
|
||||||
|
During <down interval>, replace <Nth_byte> of the data of
|
||||||
|
each matching bio with <value>.
|
||||||
|
|
||||||
|
<Nth_byte>: The offset of the byte to replace.
|
||||||
|
Counting starts at 1, to replace the first byte.
|
||||||
|
<direction>: Either 'r' to corrupt reads or 'w' to corrupt writes.
|
||||||
|
'w' is incompatible with drop_writes.
|
||||||
|
<value>: The value (from 0-255) to write.
|
||||||
|
<flags>: Perform the replacement only if bio->bi_rw has all the
|
||||||
|
selected flags set.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
corrupt_bio_byte 32 r 1 0
|
||||||
|
- replaces the 32nd byte of READ bios with the value 1
|
||||||
|
|
||||||
|
corrupt_bio_byte 224 w 0 32
|
||||||
|
- replaces the 224th byte of REQ_META (=32) bios with the value 0
|
||||||
|
|
|
@ -1,70 +1,108 @@
|
||||||
Device-mapper RAID (dm-raid) is a bridge from DM to MD. It
|
dm-raid
|
||||||
provides a way to use device-mapper interfaces to access the MD RAID
|
-------
|
||||||
drivers.
|
|
||||||
|
|
||||||
As with all device-mapper targets, the nominal public interfaces are the
|
The device-mapper RAID (dm-raid) target provides a bridge from DM to MD.
|
||||||
constructor (CTR) tables and the status outputs (both STATUSTYPE_INFO
|
It allows the MD RAID drivers to be accessed using a device-mapper
|
||||||
and STATUSTYPE_TABLE). The CTR table looks like the following:
|
interface.
|
||||||
|
|
||||||
1: <s> <l> raid \
|
The target is named "raid" and it accepts the following parameters:
|
||||||
2: <raid_type> <#raid_params> <raid_params> \
|
|
||||||
3: <#raid_devs> <meta_dev1> <dev1> .. <meta_devN> <devN>
|
|
||||||
|
|
||||||
Line 1 contains the standard first three arguments to any device-mapper
|
<raid_type> <#raid_params> <raid_params> \
|
||||||
target - the start, length, and target type fields. The target type in
|
<#raid_devs> <metadata_dev0> <dev0> [.. <metadata_devN> <devN>]
|
||||||
this case is "raid".
|
|
||||||
|
|
||||||
Line 2 contains the arguments that define the particular raid
|
<raid_type>:
|
||||||
type/personality/level, the required arguments for that raid type, and
|
raid1 RAID1 mirroring
|
||||||
any optional arguments. Possible raid types include: raid4, raid5_la,
|
raid4 RAID4 dedicated parity disk
|
||||||
raid5_ls, raid5_rs, raid6_zr, raid6_nr, and raid6_nc. (raid1 is
|
raid5_la RAID5 left asymmetric
|
||||||
planned for the future.) The list of required and optional parameters
|
- rotating parity 0 with data continuation
|
||||||
is the same for all the current raid types. The required parameters are
|
raid5_ra RAID5 right asymmetric
|
||||||
positional, while the optional parameters are given as key/value pairs.
|
- rotating parity N with data continuation
|
||||||
The possible parameters are as follows:
|
raid5_ls RAID5 left symmetric
|
||||||
<chunk_size> Chunk size in sectors.
|
- rotating parity 0 with data restart
|
||||||
[[no]sync] Force/Prevent RAID initialization
|
raid5_rs RAID5 right symmetric
|
||||||
[rebuild <idx>] Rebuild the drive indicated by the index
|
- rotating parity N with data restart
|
||||||
[daemon_sleep <ms>] Time between bitmap daemon work to clear bits
|
raid6_zr RAID6 zero restart
|
||||||
[min_recovery_rate <kB/sec/disk>] Throttle RAID initialization
|
- rotating parity zero (left-to-right) with data restart
|
||||||
[max_recovery_rate <kB/sec/disk>] Throttle RAID initialization
|
raid6_nr RAID6 N restart
|
||||||
[max_write_behind <sectors>] See '-write-behind=' (man mdadm)
|
- rotating parity N (right-to-left) with data restart
|
||||||
[stripe_cache <sectors>] Stripe cache size for higher RAIDs
|
raid6_nc RAID6 N continue
|
||||||
|
- rotating parity N (right-to-left) with data continuation
|
||||||
|
|
||||||
Line 3 contains the list of devices that compose the array in
|
Refererence: Chapter 4 of
|
||||||
metadata/data device pairs. If the metadata is stored separately, a '-'
|
http://www.snia.org/sites/default/files/SNIA_DDF_Technical_Position_v2.0.pdf
|
||||||
is given for the metadata device position. If a drive has failed or is
|
|
||||||
missing at creation time, a '-' can be given for both the metadata and
|
|
||||||
data drives for a given position.
|
|
||||||
|
|
||||||
NB. Currently all metadata devices must be specified as '-'.
|
<#raid_params>: The number of parameters that follow.
|
||||||
|
|
||||||
Examples:
|
<raid_params> consists of
|
||||||
# RAID4 - 4 data drives, 1 parity
|
Mandatory parameters:
|
||||||
|
<chunk_size>: Chunk size in sectors. This parameter is often known as
|
||||||
|
"stripe size". It is the only mandatory parameter and
|
||||||
|
is placed first.
|
||||||
|
|
||||||
|
followed by optional parameters (in any order):
|
||||||
|
[sync|nosync] Force or prevent RAID initialization.
|
||||||
|
|
||||||
|
[rebuild <idx>] Rebuild drive number idx (first drive is 0).
|
||||||
|
|
||||||
|
[daemon_sleep <ms>]
|
||||||
|
Interval between runs of the bitmap daemon that
|
||||||
|
clear bits. A longer interval means less bitmap I/O but
|
||||||
|
resyncing after a failure is likely to take longer.
|
||||||
|
|
||||||
|
[min_recovery_rate <kB/sec/disk>] Throttle RAID initialization
|
||||||
|
[max_recovery_rate <kB/sec/disk>] Throttle RAID initialization
|
||||||
|
[write_mostly <idx>] Drive index is write-mostly
|
||||||
|
[max_write_behind <sectors>] See '-write-behind=' (man mdadm)
|
||||||
|
[stripe_cache <sectors>] Stripe cache size (higher RAIDs only)
|
||||||
|
[region_size <sectors>]
|
||||||
|
The region_size multiplied by the number of regions is the
|
||||||
|
logical size of the array. The bitmap records the device
|
||||||
|
synchronisation state for each region.
|
||||||
|
|
||||||
|
<#raid_devs>: The number of devices composing the array.
|
||||||
|
Each device consists of two entries. The first is the device
|
||||||
|
containing the metadata (if any); the second is the one containing the
|
||||||
|
data.
|
||||||
|
|
||||||
|
If a drive has failed or is missing at creation time, a '-' can be
|
||||||
|
given for both the metadata and data drives for a given position.
|
||||||
|
|
||||||
|
|
||||||
|
Example tables
|
||||||
|
--------------
|
||||||
|
# RAID4 - 4 data drives, 1 parity (no metadata devices)
|
||||||
# No metadata devices specified to hold superblock/bitmap info
|
# No metadata devices specified to hold superblock/bitmap info
|
||||||
# Chunk size of 1MiB
|
# Chunk size of 1MiB
|
||||||
# (Lines separated for easy reading)
|
# (Lines separated for easy reading)
|
||||||
|
|
||||||
0 1960893648 raid \
|
0 1960893648 raid \
|
||||||
raid4 1 2048 \
|
raid4 1 2048 \
|
||||||
5 - 8:17 - 8:33 - 8:49 - 8:65 - 8:81
|
5 - 8:17 - 8:33 - 8:49 - 8:65 - 8:81
|
||||||
|
|
||||||
# RAID4 - 4 data drives, 1 parity (no metadata devices)
|
# RAID4 - 4 data drives, 1 parity (with metadata devices)
|
||||||
# Chunk size of 1MiB, force RAID initialization,
|
# Chunk size of 1MiB, force RAID initialization,
|
||||||
# min recovery rate at 20 kiB/sec/disk
|
# min recovery rate at 20 kiB/sec/disk
|
||||||
|
|
||||||
0 1960893648 raid \
|
0 1960893648 raid \
|
||||||
raid4 4 2048 min_recovery_rate 20 sync\
|
raid4 4 2048 sync min_recovery_rate 20 \
|
||||||
5 - 8:17 - 8:33 - 8:49 - 8:65 - 8:81
|
5 8:17 8:18 8:33 8:34 8:49 8:50 8:65 8:66 8:81 8:82
|
||||||
|
|
||||||
Performing a 'dmsetup table' should display the CTR table used to
|
'dmsetup table' displays the table used to construct the mapping.
|
||||||
construct the mapping (with possible reordering of optional
|
The optional parameters are always printed in the order listed
|
||||||
parameters).
|
above with "sync" or "nosync" always output ahead of the other
|
||||||
|
arguments, regardless of the order used when originally loading the table.
|
||||||
|
Arguments that can be repeated are ordered by value.
|
||||||
|
|
||||||
Performing a 'dmsetup status' will yield information on the state and
|
'dmsetup status' yields information on the state and health of the
|
||||||
health of the array. The output is as follows:
|
array.
|
||||||
|
The output is as follows:
|
||||||
1: <s> <l> raid \
|
1: <s> <l> raid \
|
||||||
2: <raid_type> <#devices> <1 health char for each dev> <resync_ratio>
|
2: <raid_type> <#devices> <1 health char for each dev> <resync_ratio>
|
||||||
|
|
||||||
Line 1 is standard DM output. Line 2 is best shown by example:
|
Line 1 is the standard output produced by device-mapper.
|
||||||
|
Line 2 is produced by the raid target, and best explained by example:
|
||||||
0 1960893648 raid raid4 5 AAAAA 2/490221568
|
0 1960893648 raid raid4 5 AAAAA 2/490221568
|
||||||
Here we can see the RAID type is raid4, there are 5 devices - all of
|
Here we can see the RAID type is raid4, there are 5 devices - all of
|
||||||
which are 'A'live, and the array is 2/490221568 complete with recovery.
|
which are 'A'live, and the array is 2/490221568 complete with recovery.
|
||||||
|
Faulty or missing devices are marked 'D'. Devices that are out-of-sync
|
||||||
|
are marked 'a'.
|
||||||
|
|
|
@ -10,7 +10,7 @@ Optional properties:
|
||||||
Each button (key) is represented as a sub-node of "gpio-keys":
|
Each button (key) is represented as a sub-node of "gpio-keys":
|
||||||
Subnode properties:
|
Subnode properties:
|
||||||
|
|
||||||
- gpios: OF devcie-tree gpio specificatin.
|
- gpios: OF device-tree gpio specification.
|
||||||
- label: Descriptive name of the key.
|
- label: Descriptive name of the key.
|
||||||
- linux,code: Keycode to emit.
|
- linux,code: Keycode to emit.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
* Freescale MMA8450 3-Axis Accelerometer
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : "fsl,mma8450".
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
accelerometer: mma8450@1c {
|
||||||
|
compatible = "fsl,mma8450";
|
||||||
|
reg = <0x1c>;
|
||||||
|
};
|
|
@ -10,87 +10,181 @@ NOTE: For DMA Engine usage in async_tx please see:
|
||||||
Below is a guide to device driver writers on how to use the Slave-DMA API of the
|
Below is a guide to device driver writers on how to use the Slave-DMA API of the
|
||||||
DMA Engine. This is applicable only for slave DMA usage only.
|
DMA Engine. This is applicable only for slave DMA usage only.
|
||||||
|
|
||||||
The slave DMA usage consists of following steps
|
The slave DMA usage consists of following steps:
|
||||||
1. Allocate a DMA slave channel
|
1. Allocate a DMA slave channel
|
||||||
2. Set slave and controller specific parameters
|
2. Set slave and controller specific parameters
|
||||||
3. Get a descriptor for transaction
|
3. Get a descriptor for transaction
|
||||||
4. Submit the transaction and wait for callback notification
|
4. Submit the transaction
|
||||||
|
5. Issue pending requests and wait for callback notification
|
||||||
|
|
||||||
1. Allocate a DMA slave channel
|
1. Allocate a DMA slave channel
|
||||||
Channel allocation is slightly different in the slave DMA context, client
|
|
||||||
drivers typically need a channel from a particular DMA controller only and even
|
|
||||||
in some cases a specific channel is desired. To request a channel
|
|
||||||
dma_request_channel() API is used.
|
|
||||||
|
|
||||||
Interface:
|
Channel allocation is slightly different in the slave DMA context,
|
||||||
struct dma_chan *dma_request_channel(dma_cap_mask_t mask,
|
client drivers typically need a channel from a particular DMA
|
||||||
dma_filter_fn filter_fn,
|
controller only and even in some cases a specific channel is desired.
|
||||||
void *filter_param);
|
To request a channel dma_request_channel() API is used.
|
||||||
where dma_filter_fn is defined as:
|
|
||||||
typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param);
|
|
||||||
|
|
||||||
When the optional 'filter_fn' parameter is set to NULL dma_request_channel
|
Interface:
|
||||||
simply returns the first channel that satisfies the capability mask. Otherwise,
|
struct dma_chan *dma_request_channel(dma_cap_mask_t mask,
|
||||||
when the mask parameter is insufficient for specifying the necessary channel,
|
dma_filter_fn filter_fn,
|
||||||
the filter_fn routine can be used to disposition the available channels in the
|
void *filter_param);
|
||||||
system. The filter_fn routine is called once for each free channel in the
|
where dma_filter_fn is defined as:
|
||||||
system. Upon seeing a suitable channel filter_fn returns DMA_ACK which flags
|
typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param);
|
||||||
that channel to be the return value from dma_request_channel. A channel
|
|
||||||
allocated via this interface is exclusive to the caller, until
|
The 'filter_fn' parameter is optional, but highly recommended for
|
||||||
dma_release_channel() is called.
|
slave and cyclic channels as they typically need to obtain a specific
|
||||||
|
DMA channel.
|
||||||
|
|
||||||
|
When the optional 'filter_fn' parameter is NULL, dma_request_channel()
|
||||||
|
simply returns the first channel that satisfies the capability mask.
|
||||||
|
|
||||||
|
Otherwise, the 'filter_fn' routine will be called once for each free
|
||||||
|
channel which has a capability in 'mask'. 'filter_fn' is expected to
|
||||||
|
return 'true' when the desired DMA channel is found.
|
||||||
|
|
||||||
|
A channel allocated via this interface is exclusive to the caller,
|
||||||
|
until dma_release_channel() is called.
|
||||||
|
|
||||||
2. Set slave and controller specific parameters
|
2. Set slave and controller specific parameters
|
||||||
Next step is always to pass some specific information to the DMA driver. Most of
|
|
||||||
the generic information which a slave DMA can use is in struct dma_slave_config.
|
|
||||||
It allows the clients to specify DMA direction, DMA addresses, bus widths, DMA
|
|
||||||
burst lengths etc. If some DMA controllers have more parameters to be sent then
|
|
||||||
they should try to embed struct dma_slave_config in their controller specific
|
|
||||||
structure. That gives flexibility to client to pass more parameters, if
|
|
||||||
required.
|
|
||||||
|
|
||||||
Interface:
|
Next step is always to pass some specific information to the DMA
|
||||||
int dmaengine_slave_config(struct dma_chan *chan,
|
driver. Most of the generic information which a slave DMA can use
|
||||||
struct dma_slave_config *config)
|
is in struct dma_slave_config. This allows the clients to specify
|
||||||
|
DMA direction, DMA addresses, bus widths, DMA burst lengths etc
|
||||||
|
for the peripheral.
|
||||||
|
|
||||||
|
If some DMA controllers have more parameters to be sent then they
|
||||||
|
should try to embed struct dma_slave_config in their controller
|
||||||
|
specific structure. That gives flexibility to client to pass more
|
||||||
|
parameters, if required.
|
||||||
|
|
||||||
|
Interface:
|
||||||
|
int dmaengine_slave_config(struct dma_chan *chan,
|
||||||
|
struct dma_slave_config *config)
|
||||||
|
|
||||||
|
Please see the dma_slave_config structure definition in dmaengine.h
|
||||||
|
for a detailed explaination of the struct members. Please note
|
||||||
|
that the 'direction' member will be going away as it duplicates the
|
||||||
|
direction given in the prepare call.
|
||||||
|
|
||||||
3. Get a descriptor for transaction
|
3. Get a descriptor for transaction
|
||||||
For slave usage the various modes of slave transfers supported by the
|
|
||||||
DMA-engine are:
|
For slave usage the various modes of slave transfers supported by the
|
||||||
slave_sg - DMA a list of scatter gather buffers from/to a peripheral
|
DMA-engine are:
|
||||||
dma_cyclic - Perform a cyclic DMA operation from/to a peripheral till the
|
|
||||||
|
slave_sg - DMA a list of scatter gather buffers from/to a peripheral
|
||||||
|
dma_cyclic - Perform a cyclic DMA operation from/to a peripheral till the
|
||||||
operation is explicitly stopped.
|
operation is explicitly stopped.
|
||||||
The non NULL return of this transfer API represents a "descriptor" for the given
|
|
||||||
transaction.
|
|
||||||
|
|
||||||
Interface:
|
A non-NULL return of this transfer API represents a "descriptor" for
|
||||||
struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_sg)(
|
the given transaction.
|
||||||
struct dma_chan *chan,
|
|
||||||
struct scatterlist *dst_sg, unsigned int dst_nents,
|
Interface:
|
||||||
struct scatterlist *src_sg, unsigned int src_nents,
|
struct dma_async_tx_descriptor *(*chan->device->device_prep_slave_sg)(
|
||||||
|
struct dma_chan *chan, struct scatterlist *sgl,
|
||||||
|
unsigned int sg_len, enum dma_data_direction direction,
|
||||||
unsigned long flags);
|
unsigned long flags);
|
||||||
struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_cyclic)(
|
|
||||||
|
struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_cyclic)(
|
||||||
struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
|
struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
|
||||||
size_t period_len, enum dma_data_direction direction);
|
size_t period_len, enum dma_data_direction direction);
|
||||||
|
|
||||||
4. Submit the transaction and wait for callback notification
|
The peripheral driver is expected to have mapped the scatterlist for
|
||||||
To schedule the transaction to be scheduled by dma device, the "descriptor"
|
the DMA operation prior to calling device_prep_slave_sg, and must
|
||||||
returned in above (3) needs to be submitted.
|
keep the scatterlist mapped until the DMA operation has completed.
|
||||||
To tell the dma driver that a transaction is ready to be serviced, the
|
The scatterlist must be mapped using the DMA struct device. So,
|
||||||
descriptor->submit() callback needs to be invoked. This chains the descriptor to
|
normal setup should look like this:
|
||||||
the pending queue.
|
|
||||||
The transactions in the pending queue can be activated by calling the
|
|
||||||
issue_pending API. If channel is idle then the first transaction in queue is
|
|
||||||
started and subsequent ones queued up.
|
|
||||||
On completion of the DMA operation the next in queue is submitted and a tasklet
|
|
||||||
triggered. The tasklet would then call the client driver completion callback
|
|
||||||
routine for notification, if set.
|
|
||||||
Interface:
|
|
||||||
void dma_async_issue_pending(struct dma_chan *chan);
|
|
||||||
|
|
||||||
==============================================================================
|
nr_sg = dma_map_sg(chan->device->dev, sgl, sg_len);
|
||||||
|
if (nr_sg == 0)
|
||||||
|
/* error */
|
||||||
|
|
||||||
Additional usage notes for dma driver writers
|
desc = chan->device->device_prep_slave_sg(chan, sgl, nr_sg,
|
||||||
1/ Although DMA engine specifies that completion callback routines cannot submit
|
direction, flags);
|
||||||
any new operations, but typically for slave DMA subsequent transaction may not
|
|
||||||
be available for submit prior to callback routine being called. This requirement
|
Once a descriptor has been obtained, the callback information can be
|
||||||
is not a requirement for DMA-slave devices. But they should take care to drop
|
added and the descriptor must then be submitted. Some DMA engine
|
||||||
the spin-lock they might be holding before calling the callback routine
|
drivers may hold a spinlock between a successful preparation and
|
||||||
|
submission so it is important that these two operations are closely
|
||||||
|
paired.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
Although the async_tx API specifies that completion callback
|
||||||
|
routines cannot submit any new operations, this is not the
|
||||||
|
case for slave/cyclic DMA.
|
||||||
|
|
||||||
|
For slave DMA, the subsequent transaction may not be available
|
||||||
|
for submission prior to callback function being invoked, so
|
||||||
|
slave DMA callbacks are permitted to prepare and submit a new
|
||||||
|
transaction.
|
||||||
|
|
||||||
|
For cyclic DMA, a callback function may wish to terminate the
|
||||||
|
DMA via dmaengine_terminate_all().
|
||||||
|
|
||||||
|
Therefore, it is important that DMA engine drivers drop any
|
||||||
|
locks before calling the callback function which may cause a
|
||||||
|
deadlock.
|
||||||
|
|
||||||
|
Note that callbacks will always be invoked from the DMA
|
||||||
|
engines tasklet, never from interrupt context.
|
||||||
|
|
||||||
|
4. Submit the transaction
|
||||||
|
|
||||||
|
Once the descriptor has been prepared and the callback information
|
||||||
|
added, it must be placed on the DMA engine drivers pending queue.
|
||||||
|
|
||||||
|
Interface:
|
||||||
|
dma_cookie_t dmaengine_submit(struct dma_async_tx_descriptor *desc)
|
||||||
|
|
||||||
|
This returns a cookie can be used to check the progress of DMA engine
|
||||||
|
activity via other DMA engine calls not covered in this document.
|
||||||
|
|
||||||
|
dmaengine_submit() will not start the DMA operation, it merely adds
|
||||||
|
it to the pending queue. For this, see step 5, dma_async_issue_pending.
|
||||||
|
|
||||||
|
5. Issue pending DMA requests and wait for callback notification
|
||||||
|
|
||||||
|
The transactions in the pending queue can be activated by calling the
|
||||||
|
issue_pending API. If channel is idle then the first transaction in
|
||||||
|
queue is started and subsequent ones queued up.
|
||||||
|
|
||||||
|
On completion of each DMA operation, the next in queue is started and
|
||||||
|
a tasklet triggered. The tasklet will then call the client driver
|
||||||
|
completion callback routine for notification, if set.
|
||||||
|
|
||||||
|
Interface:
|
||||||
|
void dma_async_issue_pending(struct dma_chan *chan);
|
||||||
|
|
||||||
|
Further APIs:
|
||||||
|
|
||||||
|
1. int dmaengine_terminate_all(struct dma_chan *chan)
|
||||||
|
|
||||||
|
This causes all activity for the DMA channel to be stopped, and may
|
||||||
|
discard data in the DMA FIFO which hasn't been fully transferred.
|
||||||
|
No callback functions will be called for any incomplete transfers.
|
||||||
|
|
||||||
|
2. int dmaengine_pause(struct dma_chan *chan)
|
||||||
|
|
||||||
|
This pauses activity on the DMA channel without data loss.
|
||||||
|
|
||||||
|
3. int dmaengine_resume(struct dma_chan *chan)
|
||||||
|
|
||||||
|
Resume a previously paused DMA channel. It is invalid to resume a
|
||||||
|
channel which is not currently paused.
|
||||||
|
|
||||||
|
4. enum dma_status dma_async_is_tx_complete(struct dma_chan *chan,
|
||||||
|
dma_cookie_t cookie, dma_cookie_t *last, dma_cookie_t *used)
|
||||||
|
|
||||||
|
This can be used to check the status of the channel. Please see
|
||||||
|
the documentation in include/linux/dmaengine.h for a more complete
|
||||||
|
description of this API.
|
||||||
|
|
||||||
|
This can be used in conjunction with dma_async_is_complete() and
|
||||||
|
the cookie returned from 'descriptor->submit()' to check for
|
||||||
|
completion of a specific DMA transaction.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
Not all DMA engine drivers can return reliable information for
|
||||||
|
a running DMA channel. It is recommended that DMA engine users
|
||||||
|
pause or stop (via dmaengine_terminate_all) the channel before
|
||||||
|
using this API.
|
||||||
|
|
|
@ -199,18 +199,16 @@ to coerce it into behaving.
|
||||||
|
|
||||||
To beat some sense out of the internal editor, do this:
|
To beat some sense out of the internal editor, do this:
|
||||||
|
|
||||||
- Under account settings, composition and addressing, uncheck "Compose
|
|
||||||
messages in HTML format".
|
|
||||||
|
|
||||||
- Edit your Thunderbird config settings so that it won't use format=flowed.
|
- Edit your Thunderbird config settings so that it won't use format=flowed.
|
||||||
Go to "edit->preferences->advanced->config editor" to bring up the
|
Go to "edit->preferences->advanced->config editor" to bring up the
|
||||||
thunderbird's registry editor, and set "mailnews.send_plaintext_flowed" to
|
thunderbird's registry editor, and set "mailnews.send_plaintext_flowed" to
|
||||||
"false".
|
"false".
|
||||||
|
|
||||||
- Enable "preformat" mode: Shft-click on the Write icon to bring up the HTML
|
- Disable HTML Format: Set "mail.identity.id1.compose_html" to "false".
|
||||||
composer, select "Preformat" from the drop-down box just under the subject
|
|
||||||
line, then close the message without saving. (This setting also applies to
|
- Enable "preformat" mode: Set "editor.quotesPreformatted" to "true".
|
||||||
the text composer, but the only control for it is in the HTML composer.)
|
|
||||||
|
- Enable UTF8: Set "prefs.converted-to-utf8" to "true".
|
||||||
|
|
||||||
- Install the "toggle wordwrap" extension. Download the file from:
|
- Install the "toggle wordwrap" extension. Download the file from:
|
||||||
https://addons.mozilla.org/thunderbird/addon/2351/
|
https://addons.mozilla.org/thunderbird/addon/2351/
|
||||||
|
|
|
@ -143,8 +143,7 @@ o provide a way to configure fault attributes
|
||||||
failslab, fail_page_alloc, and fail_make_request use this way.
|
failslab, fail_page_alloc, and fail_make_request use this way.
|
||||||
Helper functions:
|
Helper functions:
|
||||||
|
|
||||||
init_fault_attr_dentries(entries, attr, name);
|
fault_create_debugfs_attr(name, parent, attr);
|
||||||
void cleanup_fault_attr_dentries(entries);
|
|
||||||
|
|
||||||
- module parameters
|
- module parameters
|
||||||
|
|
||||||
|
|
|
@ -296,15 +296,6 @@ Who: Ravikiran Thirumalai <kiran@scalex86.org>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: CONFIG_THERMAL_HWMON
|
|
||||||
When: January 2009
|
|
||||||
Why: This option was introduced just to allow older lm-sensors userspace
|
|
||||||
to keep working over the upgrade to 2.6.26. At the scheduled time of
|
|
||||||
removal fixed lm-sensors (2.x or 3.x) should be readily available.
|
|
||||||
Who: Rene Herman <rene.herman@gmail.com>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: Code that is now under CONFIG_WIRELESS_EXT_SYSFS
|
What: Code that is now under CONFIG_WIRELESS_EXT_SYSFS
|
||||||
(in net/core/net-sysfs.c)
|
(in net/core/net-sysfs.c)
|
||||||
When: After the only user (hal) has seen a release with the patches
|
When: After the only user (hal) has seen a release with the patches
|
||||||
|
@ -590,3 +581,22 @@ Why: This driver has been superseded by g_mass_storage.
|
||||||
Who: Alan Stern <stern@rowland.harvard.edu>
|
Who: Alan Stern <stern@rowland.harvard.edu>
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
What: threeg and interface sysfs files in /sys/devices/platform/acer-wmi
|
||||||
|
When: 2012
|
||||||
|
Why: In 3.0, we can now autodetect internal 3G device and already have
|
||||||
|
the threeg rfkill device. So, we plan to remove threeg sysfs support
|
||||||
|
for it's no longer necessary.
|
||||||
|
|
||||||
|
We also plan to remove interface sysfs file that exposed which ACPI-WMI
|
||||||
|
interface that was used by acer-wmi driver. It will replaced by
|
||||||
|
information log when acer-wmi initial.
|
||||||
|
Who: Lee, Chun-Yi <jlee@novell.com>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
What: The XFS nodelaylog mount option
|
||||||
|
When: 3.3
|
||||||
|
Why: The delaylog mode that has been the default since 2.6.39 has proven
|
||||||
|
stable, and the old code is in the way of additional improvements in
|
||||||
|
the log code.
|
||||||
|
Who: Christoph Hellwig <hch@lst.de>
|
||||||
|
|
|
@ -27,7 +27,7 @@ His original code can still be found at:
|
||||||
Does anyone know of a more current email address for Makoto? He doesn't
|
Does anyone know of a more current email address for Makoto? He doesn't
|
||||||
respond to the address given above...
|
respond to the address given above...
|
||||||
|
|
||||||
Current maintainer: Sergey S. Kostyliov <rathamahata@php4.ru>
|
This filesystem doesn't have a maintainer.
|
||||||
|
|
||||||
WHAT IS THIS DRIVER?
|
WHAT IS THIS DRIVER?
|
||||||
==================
|
==================
|
||||||
|
|
|
@ -106,13 +106,20 @@ separated by spaces:
|
||||||
To use the first on-chip serial port at baud rate 115200, no parity, 8
|
To use the first on-chip serial port at baud rate 115200, no parity, 8
|
||||||
bits, and no flow control.
|
bits, and no flow control.
|
||||||
|
|
||||||
(*) root=/dev/<xxxx>
|
(*) root=<xxxx>
|
||||||
|
|
||||||
This specifies the device upon which the root filesystem resides. For
|
This specifies the device upon which the root filesystem resides. It
|
||||||
example:
|
may be specified by major and minor number, device path, or even
|
||||||
|
partition uuid, if supported. For example:
|
||||||
|
|
||||||
/dev/nfs NFS root filesystem
|
/dev/nfs NFS root filesystem
|
||||||
/dev/mtdblock3 Fourth RedBoot partition on the System Flash
|
/dev/mtdblock3 Fourth RedBoot partition on the System Flash
|
||||||
|
PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF/PARTNROFF=1
|
||||||
|
first partition after the partition with the given UUID
|
||||||
|
253:0 Device with major 253 and minor 0
|
||||||
|
|
||||||
|
Authoritative information can be found in
|
||||||
|
"Documentation/kernel-parameters.txt".
|
||||||
|
|
||||||
(*) rw
|
(*) rw
|
||||||
|
|
||||||
|
|
|
@ -43,8 +43,8 @@ Documentation/hwmon/pmbus for details.
|
||||||
Sysfs entries
|
Sysfs entries
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
The following attributes are supported. Limits are read-write; all other
|
The following attributes are supported. Limits are read-write, history reset
|
||||||
attributes are read-only.
|
attributes are write-only, all other attributes are read-only.
|
||||||
|
|
||||||
in1_label "vin1" or "vout1" depending on chip variant and
|
in1_label "vin1" or "vout1" depending on chip variant and
|
||||||
configuration.
|
configuration.
|
||||||
|
@ -53,8 +53,12 @@ in1_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register.
|
||||||
in1_max Maximum voltage. From VOUT_OV_WARN_LIMIT register.
|
in1_max Maximum voltage. From VOUT_OV_WARN_LIMIT register.
|
||||||
in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
|
in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
|
||||||
in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
||||||
|
in1_highest Historical maximum voltage.
|
||||||
|
in1_reset_history Write any value to reset history.
|
||||||
|
|
||||||
curr1_label "iout1"
|
curr1_label "iout1"
|
||||||
curr1_input Measured current. From READ_IOUT register.
|
curr1_input Measured current. From READ_IOUT register.
|
||||||
curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register.
|
curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register.
|
||||||
curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register.
|
curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register.
|
||||||
|
curr1_highest Historical maximum current.
|
||||||
|
curr1_reset_history Write any value to reset history.
|
||||||
|
|
|
@ -35,6 +35,13 @@ the Out-Of-Spec bit. Following table summarizes the exported sysfs files:
|
||||||
All Sysfs entries are named with their core_id (represented here by 'X').
|
All Sysfs entries are named with their core_id (represented here by 'X').
|
||||||
tempX_input - Core temperature (in millidegrees Celsius).
|
tempX_input - Core temperature (in millidegrees Celsius).
|
||||||
tempX_max - All cooling devices should be turned on (on Core2).
|
tempX_max - All cooling devices should be turned on (on Core2).
|
||||||
|
Initialized with IA32_THERM_INTERRUPT. When the CPU
|
||||||
|
temperature reaches this temperature, an interrupt is
|
||||||
|
generated and tempX_max_alarm is set.
|
||||||
|
tempX_max_hyst - If the CPU temperature falls below than temperature,
|
||||||
|
an interrupt is generated and tempX_max_alarm is reset.
|
||||||
|
tempX_max_alarm - Set if the temperature reaches or exceeds tempX_max.
|
||||||
|
Reset if the temperature drops to or below tempX_max_hyst.
|
||||||
tempX_crit - Maximum junction temperature (in millidegrees Celsius).
|
tempX_crit - Maximum junction temperature (in millidegrees Celsius).
|
||||||
tempX_crit_alarm - Set when Out-of-spec bit is set, never clears.
|
tempX_crit_alarm - Set when Out-of-spec bit is set, never clears.
|
||||||
Correct CPU operation is no longer guaranteed.
|
Correct CPU operation is no longer guaranteed.
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
Kernel driver max8688
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* National Semiconductor LM25066
|
||||||
|
Prefix: 'lm25066'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheets:
|
||||||
|
http://www.national.com/pf/LM/LM25066.html
|
||||||
|
http://www.national.com/pf/LM/LM25066A.html
|
||||||
|
* National Semiconductor LM5064
|
||||||
|
Prefix: 'lm5064'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet:
|
||||||
|
http://www.national.com/pf/LM/LM5064.html
|
||||||
|
* National Semiconductor LM5066
|
||||||
|
Prefix: 'lm5066'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheet:
|
||||||
|
http://www.national.com/pf/LM/LM5066.html
|
||||||
|
|
||||||
|
Author: Guenter Roeck <guenter.roeck@ericsson.com>
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver supports hardware montoring for National Semiconductor LM25066,
|
||||||
|
LM5064, and LM5064 Power Management, Monitoring, Control, and Protection ICs.
|
||||||
|
|
||||||
|
The driver is a client driver to the core PMBus driver. Please see
|
||||||
|
Documentation/hwmon/pmbus for details on PMBus client drivers.
|
||||||
|
|
||||||
|
|
||||||
|
Usage Notes
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver does not auto-detect devices. You will have to instantiate the
|
||||||
|
devices explicitly. Please see Documentation/i2c/instantiating-devices for
|
||||||
|
details.
|
||||||
|
|
||||||
|
|
||||||
|
Platform data support
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The driver supports standard PMBus driver platform data.
|
||||||
|
|
||||||
|
|
||||||
|
Sysfs entries
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The following attributes are supported. Limits are read-write; all other
|
||||||
|
attributes are read-only.
|
||||||
|
|
||||||
|
in1_label "vin"
|
||||||
|
in1_input Measured input voltage.
|
||||||
|
in1_average Average measured input voltage.
|
||||||
|
in1_min Minimum input voltage.
|
||||||
|
in1_max Maximum input voltage.
|
||||||
|
in1_min_alarm Input voltage low alarm.
|
||||||
|
in1_max_alarm Input voltage high alarm.
|
||||||
|
|
||||||
|
in2_label "vout1"
|
||||||
|
in2_input Measured output voltage.
|
||||||
|
in2_average Average measured output voltage.
|
||||||
|
in2_min Minimum output voltage.
|
||||||
|
in2_min_alarm Output voltage low alarm.
|
||||||
|
|
||||||
|
in3_label "vout2"
|
||||||
|
in3_input Measured voltage on vaux pin
|
||||||
|
|
||||||
|
curr1_label "iin"
|
||||||
|
curr1_input Measured input current.
|
||||||
|
curr1_average Average measured input current.
|
||||||
|
curr1_max Maximum input current.
|
||||||
|
curr1_max_alarm Input current high alarm.
|
||||||
|
|
||||||
|
power1_label "pin"
|
||||||
|
power1_input Measured input power.
|
||||||
|
power1_average Average measured input power.
|
||||||
|
power1_max Maximum input power limit.
|
||||||
|
power1_alarm Input power alarm
|
||||||
|
power1_input_highest Historical maximum power.
|
||||||
|
power1_reset_history Write any value to reset maximum power history.
|
||||||
|
|
||||||
|
temp1_input Measured temperature.
|
||||||
|
temp1_max Maximum temperature.
|
||||||
|
temp1_crit Critical high temperature.
|
||||||
|
temp1_max_alarm Chip temperature high alarm.
|
||||||
|
temp1_crit_alarm Chip temperature critical high alarm.
|
|
@ -113,7 +113,11 @@ Supported chips:
|
||||||
Prefix: 'w83l771'
|
Prefix: 'w83l771'
|
||||||
Addresses scanned: I2C 0x4c
|
Addresses scanned: I2C 0x4c
|
||||||
Datasheet: Not publicly available, can be requested from Nuvoton
|
Datasheet: Not publicly available, can be requested from Nuvoton
|
||||||
|
* Philips/NXP SA56004X
|
||||||
|
Prefix: 'sa56004'
|
||||||
|
Addresses scanned: I2C 0x48 through 0x4F
|
||||||
|
Datasheet: Publicly available at NXP website
|
||||||
|
http://ics.nxp.com/products/interface/datasheet/sa56004x.pdf
|
||||||
|
|
||||||
Author: Jean Delvare <khali@linux-fr.org>
|
Author: Jean Delvare <khali@linux-fr.org>
|
||||||
|
|
||||||
|
@ -193,6 +197,9 @@ W83L771AWG/ASG
|
||||||
* The AWG and ASG variants only differ in package format.
|
* The AWG and ASG variants only differ in package format.
|
||||||
* Diode ideality factor configuration (remote sensor) at 0xE3
|
* Diode ideality factor configuration (remote sensor) at 0xE3
|
||||||
|
|
||||||
|
SA56004X:
|
||||||
|
* Better local resolution
|
||||||
|
|
||||||
All temperature values are given in degrees Celsius. Resolution
|
All temperature values are given in degrees Celsius. Resolution
|
||||||
is 1.0 degree for the local temperature, 0.125 degree for the remote
|
is 1.0 degree for the local temperature, 0.125 degree for the remote
|
||||||
temperature, except for the MAX6657, MAX6658 and MAX6659 which have a
|
temperature, except for the MAX6657, MAX6658 and MAX6659 which have a
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
Kernel driver lm95245
|
||||||
|
==================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* National Semiconductor LM95245
|
||||||
|
Addresses scanned: I2C 0x18, 0x19, 0x29, 0x4c, 0x4d
|
||||||
|
Datasheet: Publicly available at the National Semiconductor website
|
||||||
|
http://www.national.com/mpf/LM/LM95245.html
|
||||||
|
|
||||||
|
|
||||||
|
Author: Alexander Stein <alexander.stein@systec-electronic.com>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The LM95245 is an 11-bit digital temperature sensor with a 2-wire System
|
||||||
|
Management Bus (SMBus) interface and TruTherm technology that can monitor
|
||||||
|
the temperature of a remote diode as well as its own temperature.
|
||||||
|
The LM95245 can be used to very accurately monitor the temperature of
|
||||||
|
external devices such as microprocessors.
|
||||||
|
|
||||||
|
All temperature values are given in millidegrees Celsius. Local temperature
|
||||||
|
is given within a range of -127 to +127.875 degrees. Remote temperatures are
|
||||||
|
given within a range of -127 to +255 degrees. Resolution depends on
|
||||||
|
temperature input and range.
|
||||||
|
|
||||||
|
Each sensor has its own critical limit, but the hysteresis is common to all
|
||||||
|
two channels.
|
||||||
|
|
||||||
|
The lm95245 driver can change its update interval to a fixed set of values.
|
||||||
|
It will round up to the next selectable interval. See the datasheet for exact
|
||||||
|
values. Reading sensor values more often will do no harm, but will return
|
||||||
|
'old' values.
|
|
@ -50,6 +50,8 @@ in[1-4]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
|
||||||
in[1-4]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
in[1-4]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
||||||
in[1-4]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
|
in[1-4]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
|
||||||
in[1-4]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
|
in[1-4]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
|
||||||
|
in[1-4]_highest Historical maximum voltage.
|
||||||
|
in[1-4]_reset_history Write any value to reset history.
|
||||||
|
|
||||||
temp1_input Measured temperature. From READ_TEMPERATURE_1 register.
|
temp1_input Measured temperature. From READ_TEMPERATURE_1 register.
|
||||||
temp1_max Maximum temperature. From OT_WARN_LIMIT register.
|
temp1_max Maximum temperature. From OT_WARN_LIMIT register.
|
||||||
|
@ -60,3 +62,5 @@ temp1_max_alarm Chip temperature high alarm. Set by comparing
|
||||||
temp1_crit_alarm Chip temperature critical high alarm. Set by comparing
|
temp1_crit_alarm Chip temperature critical high alarm. Set by comparing
|
||||||
READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT
|
READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT
|
||||||
status is set.
|
status is set.
|
||||||
|
temp1_highest Historical maximum temperature.
|
||||||
|
temp1_reset_history Write any value to reset history.
|
||||||
|
|
|
@ -62,6 +62,13 @@ can be safely used to identify the chip. You will have to instantiate
|
||||||
the devices explicitly. Please see Documentation/i2c/instantiating-devices for
|
the devices explicitly. Please see Documentation/i2c/instantiating-devices for
|
||||||
details.
|
details.
|
||||||
|
|
||||||
|
WARNING: Do not access chip registers using the i2cdump command, and do not use
|
||||||
|
any of the i2ctools commands on a command register (0xa5 to 0xac). The chips
|
||||||
|
supported by this driver interpret any access to a command register (including
|
||||||
|
read commands) as request to execute the command in question. This may result in
|
||||||
|
power loss, board resets, and/or Flash corruption. Worst case, your board may
|
||||||
|
turn into a brick.
|
||||||
|
|
||||||
|
|
||||||
Sysfs entries
|
Sysfs entries
|
||||||
-------------
|
-------------
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
Kernel driver max1668
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Maxim MAX1668, MAX1805 and MAX1989
|
||||||
|
Prefix: 'max1668'
|
||||||
|
Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e
|
||||||
|
Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX1668-MAX1989.pdf
|
||||||
|
|
||||||
|
Author:
|
||||||
|
David George <david.george@ska.ac.za>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver implements support for the Maxim MAX1668, MAX1805 and MAX1989
|
||||||
|
chips.
|
||||||
|
|
||||||
|
The three devices are very similar, but the MAX1805 has a reduced feature
|
||||||
|
set; only two remote temperature inputs vs the four avaible on the other
|
||||||
|
two ICs.
|
||||||
|
|
||||||
|
The driver is able to distinguish between the devices and creates sysfs
|
||||||
|
entries as follows:
|
||||||
|
|
||||||
|
MAX1805, MAX1668 and MAX1989:
|
||||||
|
|
||||||
|
temp1_input ro local (ambient) temperature
|
||||||
|
temp1_max rw local temperature maximum threshold for alarm
|
||||||
|
temp1_max_alarm ro local temperature maximum threshold alarm
|
||||||
|
temp1_min rw local temperature minimum threshold for alarm
|
||||||
|
temp1_min_alarm ro local temperature minimum threshold alarm
|
||||||
|
temp2_input ro remote temperature 1
|
||||||
|
temp2_max rw remote temperature 1 maximum threshold for alarm
|
||||||
|
temp2_max_alarm ro remote temperature 1 maximum threshold alarm
|
||||||
|
temp2_min rw remote temperature 1 minimum threshold for alarm
|
||||||
|
temp2_min_alarm ro remote temperature 1 minimum threshold alarm
|
||||||
|
temp3_input ro remote temperature 2
|
||||||
|
temp3_max rw remote temperature 2 maximum threshold for alarm
|
||||||
|
temp3_max_alarm ro remote temperature 2 maximum threshold alarm
|
||||||
|
temp3_min rw remote temperature 2 minimum threshold for alarm
|
||||||
|
temp3_min_alarm ro remote temperature 2 minimum threshold alarm
|
||||||
|
|
||||||
|
MAX1668 and MAX1989 only:
|
||||||
|
temp4_input ro remote temperature 3
|
||||||
|
temp4_max rw remote temperature 3 maximum threshold for alarm
|
||||||
|
temp4_max_alarm ro remote temperature 3 maximum threshold alarm
|
||||||
|
temp4_min rw remote temperature 3 minimum threshold for alarm
|
||||||
|
temp4_min_alarm ro remote temperature 3 minimum threshold alarm
|
||||||
|
temp5_input ro remote temperature 4
|
||||||
|
temp5_max rw remote temperature 4 maximum threshold for alarm
|
||||||
|
temp5_max_alarm ro remote temperature 4 maximum threshold alarm
|
||||||
|
temp5_min rw remote temperature 4 minimum threshold for alarm
|
||||||
|
temp5_min_alarm ro remote temperature 4 minimum threshold alarm
|
||||||
|
|
||||||
|
Module Parameters
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* read_only: int
|
||||||
|
Set to non-zero if you wish to prevent write access to alarm thresholds.
|
|
@ -56,6 +56,8 @@ in[1-6]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
|
||||||
in[1-6]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
in[1-6]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
||||||
in[1-6]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
|
in[1-6]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
|
||||||
in[1-6]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
|
in[1-6]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
|
||||||
|
in[1-6]_highest Historical maximum voltage.
|
||||||
|
in[1-6]_reset_history Write any value to reset history.
|
||||||
|
|
||||||
curr[1-6]_label "iout[1-6]".
|
curr[1-6]_label "iout[1-6]".
|
||||||
curr[1-6]_input Measured current. From READ_IOUT register.
|
curr[1-6]_input Measured current. From READ_IOUT register.
|
||||||
|
@ -63,6 +65,8 @@ curr[1-6]_max Maximum current. From IOUT_OC_WARN_LIMIT register.
|
||||||
curr[1-6]_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register.
|
curr[1-6]_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register.
|
||||||
curr[1-6]_max_alarm Current high alarm. From IOUT_OC_WARNING status.
|
curr[1-6]_max_alarm Current high alarm. From IOUT_OC_WARNING status.
|
||||||
curr[1-6]_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status.
|
curr[1-6]_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status.
|
||||||
|
curr[1-6]_highest Historical maximum current.
|
||||||
|
curr[1-6]_reset_history Write any value to reset history.
|
||||||
|
|
||||||
in6 and curr6 attributes only exist for MAX34440.
|
in6 and curr6 attributes only exist for MAX34440.
|
||||||
|
|
||||||
|
@ -75,5 +79,7 @@ temp[1-8]_max Maximum temperature. From OT_WARN_LIMIT register.
|
||||||
temp[1-8]_crit Critical high temperature. From OT_FAULT_LIMIT register.
|
temp[1-8]_crit Critical high temperature. From OT_FAULT_LIMIT register.
|
||||||
temp[1-8]_max_alarm Temperature high alarm.
|
temp[1-8]_max_alarm Temperature high alarm.
|
||||||
temp[1-8]_crit_alarm Temperature critical high alarm.
|
temp[1-8]_crit_alarm Temperature critical high alarm.
|
||||||
|
temp[1-8]_highest Historical maximum temperature.
|
||||||
|
temp[1-8]_reset_history Write any value to reset history.
|
||||||
|
|
||||||
temp7 and temp8 attributes only exist for MAX34440.
|
temp7 and temp8 attributes only exist for MAX34440.
|
||||||
|
|
|
@ -50,6 +50,8 @@ in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
|
||||||
in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
|
||||||
in1_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
|
in1_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
|
||||||
in1_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
|
in1_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
|
||||||
|
in1_highest Historical maximum voltage.
|
||||||
|
in1_reset_history Write any value to reset history.
|
||||||
|
|
||||||
curr1_label "iout1"
|
curr1_label "iout1"
|
||||||
curr1_input Measured current. From READ_IOUT register.
|
curr1_input Measured current. From READ_IOUT register.
|
||||||
|
@ -57,6 +59,8 @@ curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register.
|
||||||
curr1_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register.
|
curr1_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register.
|
||||||
curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register.
|
curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register.
|
||||||
curr1_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status.
|
curr1_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status.
|
||||||
|
curr1_highest Historical maximum current.
|
||||||
|
curr1_reset_history Write any value to reset history.
|
||||||
|
|
||||||
temp1_input Measured temperature. From READ_TEMPERATURE_1 register.
|
temp1_input Measured temperature. From READ_TEMPERATURE_1 register.
|
||||||
temp1_max Maximum temperature. From OT_WARN_LIMIT register.
|
temp1_max Maximum temperature. From OT_WARN_LIMIT register.
|
||||||
|
@ -67,3 +71,5 @@ temp1_max_alarm Chip temperature high alarm. Set by comparing
|
||||||
temp1_crit_alarm Chip temperature critical high alarm. Set by comparing
|
temp1_crit_alarm Chip temperature critical high alarm. Set by comparing
|
||||||
READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT
|
READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT
|
||||||
status is set.
|
status is set.
|
||||||
|
temp1_highest Historical maximum temperature.
|
||||||
|
temp1_reset_history Write any value to reset history.
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
Kernel driver ntc_thermistor
|
||||||
|
=================
|
||||||
|
|
||||||
|
Supported thermistors:
|
||||||
|
* Murata NTC Thermistors NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, NCP15WL333
|
||||||
|
Prefixes: 'ncp15wb473', 'ncp18wb473', 'ncp21wb473', 'ncp03wb473', 'ncp15wl333'
|
||||||
|
Datasheet: Publicly available at Murata
|
||||||
|
|
||||||
|
Other NTC thermistors can be supported simply by adding compensation
|
||||||
|
tables; e.g., NCP15WL333 support is added by the table ncpXXwl333.
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
MyungJoo Ham <myungjoo.ham@samsung.com>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The NTC thermistor is a simple thermistor that requires users to provide the
|
||||||
|
resistance and lookup the corresponding compensation table to get the
|
||||||
|
temperature input.
|
||||||
|
|
||||||
|
The NTC driver provides lookup tables with a linear approximation function
|
||||||
|
and four circuit models with an option not to use any of the four models.
|
||||||
|
|
||||||
|
The four circuit models provided are:
|
||||||
|
|
||||||
|
$: resister, [TH]: the thermistor
|
||||||
|
|
||||||
|
1. connect = NTC_CONNECTED_POSITIVE, pullup_ohm > 0
|
||||||
|
|
||||||
|
[pullup_uV]
|
||||||
|
| |
|
||||||
|
[TH] $ (pullup_ohm)
|
||||||
|
| |
|
||||||
|
+----+-----------------------[read_uV]
|
||||||
|
|
|
||||||
|
$ (pulldown_ohm)
|
||||||
|
|
|
||||||
|
--- (ground)
|
||||||
|
|
||||||
|
2. connect = NTC_CONNECTED_POSITIVE, pullup_ohm = 0 (not-connected)
|
||||||
|
|
||||||
|
[pullup_uV]
|
||||||
|
|
|
||||||
|
[TH]
|
||||||
|
|
|
||||||
|
+----------------------------[read_uV]
|
||||||
|
|
|
||||||
|
$ (pulldown_ohm)
|
||||||
|
|
|
||||||
|
--- (ground)
|
||||||
|
|
||||||
|
3. connect = NTC_CONNECTED_GROUND, pulldown_ohm > 0
|
||||||
|
|
||||||
|
[pullup_uV]
|
||||||
|
|
|
||||||
|
$ (pullup_ohm)
|
||||||
|
|
|
||||||
|
+----+-----------------------[read_uV]
|
||||||
|
| |
|
||||||
|
[TH] $ (pulldown_ohm)
|
||||||
|
| |
|
||||||
|
-------- (ground)
|
||||||
|
|
||||||
|
4. connect = NTC_CONNECTED_GROUND, pulldown_ohm = 0 (not-connected)
|
||||||
|
|
||||||
|
[pullup_uV]
|
||||||
|
|
|
||||||
|
$ (pullup_ohm)
|
||||||
|
|
|
||||||
|
+----------------------------[read_uV]
|
||||||
|
|
|
||||||
|
[TH]
|
||||||
|
|
|
||||||
|
--- (ground)
|
||||||
|
|
||||||
|
When one of the four circuit models is used, read_uV, pullup_uV, pullup_ohm,
|
||||||
|
pulldown_ohm, and connect should be provided. When none of the four models
|
||||||
|
are suitable or the user can get the resistance directly, the user should
|
||||||
|
provide read_ohm and _not_ provide the others.
|
||||||
|
|
||||||
|
Sysfs Interface
|
||||||
|
---------------
|
||||||
|
name the mandatory global attribute, the thermistor name.
|
||||||
|
|
||||||
|
temp1_type always 4 (thermistor)
|
||||||
|
RO
|
||||||
|
|
||||||
|
temp1_input measure the temperature and provide the measured value.
|
||||||
|
(reading this file initiates the reading procedure.)
|
||||||
|
RO
|
||||||
|
|
||||||
|
Note that each NTC thermistor has only _one_ thermistor; thus, only temp1 exists.
|
|
@ -13,6 +13,13 @@ Supported chips:
|
||||||
Prefix: 'ltc2978'
|
Prefix: 'ltc2978'
|
||||||
Addresses scanned: -
|
Addresses scanned: -
|
||||||
Datasheet: http://cds.linear.com/docs/Datasheet/2978fa.pdf
|
Datasheet: http://cds.linear.com/docs/Datasheet/2978fa.pdf
|
||||||
|
* ON Semiconductor ADP4000, NCP4200, NCP4208
|
||||||
|
Prefixes: 'adp4000', 'ncp4200', 'ncp4208'
|
||||||
|
Addresses scanned: -
|
||||||
|
Datasheets:
|
||||||
|
http://www.onsemi.com/pub_link/Collateral/ADP4000-D.PDF
|
||||||
|
http://www.onsemi.com/pub_link/Collateral/NCP4200-D.PDF
|
||||||
|
http://www.onsemi.com/pub_link/Collateral/JUNE%202009-%20REV.%200.PDF
|
||||||
* Generic PMBus devices
|
* Generic PMBus devices
|
||||||
Prefix: 'pmbus'
|
Prefix: 'pmbus'
|
||||||
Addresses scanned: -
|
Addresses scanned: -
|
||||||
|
|
|
@ -139,6 +139,29 @@ in[0-*]_input Voltage input value.
|
||||||
thumb: drivers should report the voltage values at the
|
thumb: drivers should report the voltage values at the
|
||||||
"pins" of the chip.
|
"pins" of the chip.
|
||||||
|
|
||||||
|
in[0-*]_average
|
||||||
|
Average voltage
|
||||||
|
Unit: millivolt
|
||||||
|
RO
|
||||||
|
|
||||||
|
in[0-*]_lowest
|
||||||
|
Historical minimum voltage
|
||||||
|
Unit: millivolt
|
||||||
|
RO
|
||||||
|
|
||||||
|
in[0-*]_highest
|
||||||
|
Historical maximum voltage
|
||||||
|
Unit: millivolt
|
||||||
|
RO
|
||||||
|
|
||||||
|
in[0-*]_reset_history
|
||||||
|
Reset inX_lowest and inX_highest
|
||||||
|
WO
|
||||||
|
|
||||||
|
in_reset_history
|
||||||
|
Reset inX_lowest and inX_highest for all sensors
|
||||||
|
WO
|
||||||
|
|
||||||
in[0-*]_label Suggested voltage channel label.
|
in[0-*]_label Suggested voltage channel label.
|
||||||
Text string
|
Text string
|
||||||
Should only be created if the driver has hints about what
|
Should only be created if the driver has hints about what
|
||||||
|
@ -407,6 +430,29 @@ curr[1-*]_input Current input value
|
||||||
Unit: milliampere
|
Unit: milliampere
|
||||||
RO
|
RO
|
||||||
|
|
||||||
|
curr[1-*]_average
|
||||||
|
Average current use
|
||||||
|
Unit: milliampere
|
||||||
|
RO
|
||||||
|
|
||||||
|
curr[1-*]_lowest
|
||||||
|
Historical minimum current
|
||||||
|
Unit: milliampere
|
||||||
|
RO
|
||||||
|
|
||||||
|
curr[1-*]_highest
|
||||||
|
Historical maximum current
|
||||||
|
Unit: milliampere
|
||||||
|
RO
|
||||||
|
|
||||||
|
curr[1-*]_reset_history
|
||||||
|
Reset currX_lowest and currX_highest
|
||||||
|
WO
|
||||||
|
|
||||||
|
curr_reset_history
|
||||||
|
Reset currX_lowest and currX_highest for all sensors
|
||||||
|
WO
|
||||||
|
|
||||||
Also see the Alarms section for status flags associated with currents.
|
Also see the Alarms section for status flags associated with currents.
|
||||||
|
|
||||||
*********
|
*********
|
||||||
|
|
|
@ -292,6 +292,7 @@ Code Seq#(hex) Include File Comments
|
||||||
<mailto:buk@buks.ipn.de>
|
<mailto:buk@buks.ipn.de>
|
||||||
0xA0 all linux/sdp/sdp.h Industrial Device Project
|
0xA0 all linux/sdp/sdp.h Industrial Device Project
|
||||||
<mailto:kenji@bitgate.com>
|
<mailto:kenji@bitgate.com>
|
||||||
|
0xA2 00-0F arch/tile/include/asm/hardwall.h
|
||||||
0xA3 80-8F Port ACL in development:
|
0xA3 80-8F Port ACL in development:
|
||||||
<mailto:tlewis@mindspring.com>
|
<mailto:tlewis@mindspring.com>
|
||||||
0xA3 90-9F linux/dtlk.h
|
0xA3 90-9F linux/dtlk.h
|
||||||
|
@ -318,4 +319,6 @@ Code Seq#(hex) Include File Comments
|
||||||
<mailto:thomas@winischhofer.net>
|
<mailto:thomas@winischhofer.net>
|
||||||
0xF4 00-1F video/mbxfb.h mbxfb
|
0xF4 00-1F video/mbxfb.h mbxfb
|
||||||
<mailto:raph@8d.com>
|
<mailto:raph@8d.com>
|
||||||
|
0xF6 all LTTng Linux Trace Toolkit Next Generation
|
||||||
|
<mailto:mathieu.desnoyers@efficios.com>
|
||||||
0xFD all linux/dm-ioctl.h
|
0xFD all linux/dm-ioctl.h
|
||||||
|
|
|
@ -620,17 +620,6 @@
|
||||||
(including this document itself) have been moved there, and might
|
(including this document itself) have been moved there, and might
|
||||||
be more up to date than the web version.
|
be more up to date than the web version.
|
||||||
|
|
||||||
* Name: "Linux Source Driver"
|
|
||||||
URL: http://lsd.linux.cz
|
|
||||||
Keywords: Browsing source code.
|
|
||||||
Description: "Linux Source Driver (LSD) is an application, which
|
|
||||||
can make browsing source codes of Linux kernel easier than you can
|
|
||||||
imagine. You can select between multiple versions of kernel (e.g.
|
|
||||||
0.01, 1.0.0, 2.0.33, 2.0.34pre13, 2.0.0, 2.1.101 etc.). With LSD
|
|
||||||
you can search Linux kernel (fulltext, macros, types, functions
|
|
||||||
and variables) and LSD can generate patches for you on the fly
|
|
||||||
(files, directories or kernel)".
|
|
||||||
|
|
||||||
* Name: "Linux Kernel Source Reference"
|
* Name: "Linux Kernel Source Reference"
|
||||||
Author: Thomas Graichen.
|
Author: Thomas Graichen.
|
||||||
URL: http://marc.info/?l=linux-kernel&m=96446640102205&w=4
|
URL: http://marc.info/?l=linux-kernel&m=96446640102205&w=4
|
||||||
|
|
|
@ -40,6 +40,7 @@ parameter is applicable:
|
||||||
ALSA ALSA sound support is enabled.
|
ALSA ALSA sound support is enabled.
|
||||||
APIC APIC support is enabled.
|
APIC APIC support is enabled.
|
||||||
APM Advanced Power Management support is enabled.
|
APM Advanced Power Management support is enabled.
|
||||||
|
ARM ARM architecture is enabled.
|
||||||
AVR32 AVR32 architecture is enabled.
|
AVR32 AVR32 architecture is enabled.
|
||||||
AX25 Appropriate AX.25 support is enabled.
|
AX25 Appropriate AX.25 support is enabled.
|
||||||
BLACKFIN Blackfin architecture is enabled.
|
BLACKFIN Blackfin architecture is enabled.
|
||||||
|
@ -49,6 +50,7 @@ parameter is applicable:
|
||||||
EFI EFI Partitioning (GPT) is enabled
|
EFI EFI Partitioning (GPT) is enabled
|
||||||
EIDE EIDE/ATAPI support is enabled.
|
EIDE EIDE/ATAPI support is enabled.
|
||||||
FB The frame buffer device is enabled.
|
FB The frame buffer device is enabled.
|
||||||
|
FTRACE Function tracing enabled.
|
||||||
GCOV GCOV profiling is enabled.
|
GCOV GCOV profiling is enabled.
|
||||||
HW Appropriate hardware is enabled.
|
HW Appropriate hardware is enabled.
|
||||||
IA-64 IA-64 architecture is enabled.
|
IA-64 IA-64 architecture is enabled.
|
||||||
|
@ -69,6 +71,7 @@ parameter is applicable:
|
||||||
Documentation/m68k/kernel-options.txt.
|
Documentation/m68k/kernel-options.txt.
|
||||||
MCA MCA bus support is enabled.
|
MCA MCA bus support is enabled.
|
||||||
MDA MDA console support is enabled.
|
MDA MDA console support is enabled.
|
||||||
|
MIPS MIPS architecture is enabled.
|
||||||
MOUSE Appropriate mouse support is enabled.
|
MOUSE Appropriate mouse support is enabled.
|
||||||
MSI Message Signaled Interrupts (PCI).
|
MSI Message Signaled Interrupts (PCI).
|
||||||
MTD MTD (Memory Technology Device) support is enabled.
|
MTD MTD (Memory Technology Device) support is enabled.
|
||||||
|
@ -100,7 +103,6 @@ parameter is applicable:
|
||||||
SPARC Sparc architecture is enabled.
|
SPARC Sparc architecture is enabled.
|
||||||
SWSUSP Software suspend (hibernation) is enabled.
|
SWSUSP Software suspend (hibernation) is enabled.
|
||||||
SUSPEND System suspend states are enabled.
|
SUSPEND System suspend states are enabled.
|
||||||
FTRACE Function tracing enabled.
|
|
||||||
TPM TPM drivers are enabled.
|
TPM TPM drivers are enabled.
|
||||||
TS Appropriate touchscreen support is enabled.
|
TS Appropriate touchscreen support is enabled.
|
||||||
UMS USB Mass Storage support is enabled.
|
UMS USB Mass Storage support is enabled.
|
||||||
|
@ -115,7 +117,7 @@ parameter is applicable:
|
||||||
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/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 32-bit or 64-bit x86 (same as X86-32+X86-64)
|
||||||
XEN Xen support is enabled
|
XEN Xen support is enabled
|
||||||
|
|
||||||
In addition, the following text indicates that the option:
|
In addition, the following text indicates that the option:
|
||||||
|
@ -163,6 +165,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
|
|
||||||
See also Documentation/power/pm.txt, pci=noacpi
|
See also Documentation/power/pm.txt, pci=noacpi
|
||||||
|
|
||||||
|
acpi_rsdp= [ACPI,EFI,KEXEC]
|
||||||
|
Pass the RSDP address to the kernel, mostly used
|
||||||
|
on machines running EFI runtime service to boot the
|
||||||
|
second kernel for kdump.
|
||||||
|
|
||||||
acpi_apic_instance= [ACPI, IOAPIC]
|
acpi_apic_instance= [ACPI, IOAPIC]
|
||||||
Format: <int>
|
Format: <int>
|
||||||
2: use 2nd APIC table, if available
|
2: use 2nd APIC table, if available
|
||||||
|
@ -371,7 +378,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
atkbd.softrepeat= [HW]
|
atkbd.softrepeat= [HW]
|
||||||
Use software keyboard repeat
|
Use software keyboard repeat
|
||||||
|
|
||||||
autotest [IA64]
|
autotest [IA-64]
|
||||||
|
|
||||||
baycom_epp= [HW,AX25]
|
baycom_epp= [HW,AX25]
|
||||||
Format: <io>,<mode>
|
Format: <io>,<mode>
|
||||||
|
@ -546,6 +553,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
/proc/<pid>/coredump_filter.
|
/proc/<pid>/coredump_filter.
|
||||||
See also Documentation/filesystems/proc.txt.
|
See also Documentation/filesystems/proc.txt.
|
||||||
|
|
||||||
|
cpuidle.off=1 [CPU_IDLE]
|
||||||
|
disable the cpuidle sub-system
|
||||||
|
|
||||||
cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver
|
cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver
|
||||||
Format:
|
Format:
|
||||||
<first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
|
<first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
|
||||||
|
@ -673,8 +683,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
uart[8250],mmio32,<addr>[,options]
|
uart[8250],mmio32,<addr>[,options]
|
||||||
Start an early, polled-mode console on the 8250/16550
|
Start an early, polled-mode console on the 8250/16550
|
||||||
UART at the specified I/O port or MMIO address.
|
UART at the specified I/O port or MMIO address.
|
||||||
MMIO inter-register address stride is either 8bit (mmio)
|
MMIO inter-register address stride is either 8-bit
|
||||||
or 32bit (mmio32).
|
(mmio) or 32-bit (mmio32).
|
||||||
The options are the same as for ttyS, above.
|
The options are the same as for ttyS, above.
|
||||||
|
|
||||||
earlyprintk= [X86,SH,BLACKFIN]
|
earlyprintk= [X86,SH,BLACKFIN]
|
||||||
|
@ -717,7 +727,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
See Documentation/block/as-iosched.txt and
|
See Documentation/block/as-iosched.txt and
|
||||||
Documentation/block/deadline-iosched.txt for details.
|
Documentation/block/deadline-iosched.txt for details.
|
||||||
|
|
||||||
elfcorehdr= [IA64,PPC,SH,X86]
|
elfcorehdr= [IA-64,PPC,SH,X86]
|
||||||
Specifies physical address of start of kernel core
|
Specifies physical address of start of kernel core
|
||||||
image elf header. Generally kexec loader will
|
image elf header. Generally kexec loader will
|
||||||
pass this option to capture kernel.
|
pass this option to capture kernel.
|
||||||
|
@ -783,7 +793,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
tracer at boot up. function-list is a comma separated
|
tracer at boot up. function-list is a comma separated
|
||||||
list of functions. This list can be changed at run
|
list of functions. This list can be changed at run
|
||||||
time by the set_ftrace_filter file in the debugfs
|
time by the set_ftrace_filter file in the debugfs
|
||||||
tracing directory.
|
tracing directory.
|
||||||
|
|
||||||
ftrace_notrace=[function-list]
|
ftrace_notrace=[function-list]
|
||||||
[FTRACE] Do not trace the functions specified in
|
[FTRACE] Do not trace the functions specified in
|
||||||
|
@ -821,7 +831,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
|
|
||||||
hashdist= [KNL,NUMA] Large hashes allocated during boot
|
hashdist= [KNL,NUMA] Large hashes allocated during boot
|
||||||
are distributed across NUMA nodes. Defaults on
|
are distributed across NUMA nodes. Defaults on
|
||||||
for 64bit NUMA, off otherwise.
|
for 64-bit NUMA, off otherwise.
|
||||||
Format: 0 | 1 (for off | on)
|
Format: 0 | 1 (for off | on)
|
||||||
|
|
||||||
hcl= [IA-64] SGI's Hardware Graph compatibility layer
|
hcl= [IA-64] SGI's Hardware Graph compatibility layer
|
||||||
|
@ -990,10 +1000,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
DMA.
|
DMA.
|
||||||
forcedac [x86_64]
|
forcedac [x86_64]
|
||||||
With this option iommu will not optimize to look
|
With this option iommu will not optimize to look
|
||||||
for io virtual address below 32 bit forcing dual
|
for io virtual address below 32-bit forcing dual
|
||||||
address cycle on pci bus for cards supporting greater
|
address cycle on pci bus for cards supporting greater
|
||||||
than 32 bit addressing. The default is to look
|
than 32-bit addressing. The default is to look
|
||||||
for translation below 32 bit and if not available
|
for translation below 32-bit and if not available
|
||||||
then look in the higher range.
|
then look in the higher range.
|
||||||
strict [Default Off]
|
strict [Default Off]
|
||||||
With this option on every unmap_single operation will
|
With this option on every unmap_single operation will
|
||||||
|
@ -1009,7 +1019,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
off disable Interrupt Remapping
|
off disable Interrupt Remapping
|
||||||
nosid disable Source ID checking
|
nosid disable Source ID checking
|
||||||
|
|
||||||
inttest= [IA64]
|
inttest= [IA-64]
|
||||||
|
|
||||||
iomem= Disable strict checking of access to MMIO memory
|
iomem= Disable strict checking of access to MMIO memory
|
||||||
strict regions from userspace.
|
strict regions from userspace.
|
||||||
|
@ -1026,7 +1036,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
nomerge
|
nomerge
|
||||||
forcesac
|
forcesac
|
||||||
soft
|
soft
|
||||||
pt [x86, IA64]
|
pt [x86, IA-64]
|
||||||
|
|
||||||
io7= [HW] IO7 for Marvel based alpha systems
|
io7= [HW] IO7 for Marvel based alpha systems
|
||||||
See comment before marvel_specify_io7 in
|
See comment before marvel_specify_io7 in
|
||||||
|
@ -1157,7 +1167,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
|
|
||||||
kvm-amd.npt= [KVM,AMD] Disable nested paging (virtualized MMU)
|
kvm-amd.npt= [KVM,AMD] Disable nested paging (virtualized MMU)
|
||||||
for all guests.
|
for all guests.
|
||||||
Default is 1 (enabled) if in 64bit or 32bit-PAE mode
|
Default is 1 (enabled) if in 64-bit or 32-bit PAE mode.
|
||||||
|
|
||||||
kvm-intel.ept= [KVM,Intel] Disable extended page tables
|
kvm-intel.ept= [KVM,Intel] Disable extended page tables
|
||||||
(virtualized MMU) support on capable Intel chips.
|
(virtualized MMU) support on capable Intel chips.
|
||||||
|
@ -1194,10 +1204,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
libata.dma=0 Disable all PATA and SATA DMA
|
libata.dma=0 Disable all PATA and SATA DMA
|
||||||
libata.dma=1 PATA and SATA Disk DMA only
|
libata.dma=1 PATA and SATA Disk DMA only
|
||||||
libata.dma=2 ATAPI (CDROM) DMA only
|
libata.dma=2 ATAPI (CDROM) DMA only
|
||||||
libata.dma=4 Compact Flash DMA only
|
libata.dma=4 Compact Flash DMA only
|
||||||
Combinations also work, so libata.dma=3 enables DMA
|
Combinations also work, so libata.dma=3 enables DMA
|
||||||
for disks and CDROMs, but not CFs.
|
for disks and CDROMs, but not CFs.
|
||||||
|
|
||||||
libata.ignore_hpa= [LIBATA] Ignore HPA limit
|
libata.ignore_hpa= [LIBATA] Ignore HPA limit
|
||||||
libata.ignore_hpa=0 keep BIOS limits (default)
|
libata.ignore_hpa=0 keep BIOS limits (default)
|
||||||
libata.ignore_hpa=1 ignore limits, using full disk
|
libata.ignore_hpa=1 ignore limits, using full disk
|
||||||
|
@ -1323,7 +1333,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
ltpc= [NET]
|
ltpc= [NET]
|
||||||
Format: <io>,<irq>,<dma>
|
Format: <io>,<irq>,<dma>
|
||||||
|
|
||||||
machvec= [IA64] Force the use of a particular machine-vector
|
machvec= [IA-64] Force the use of a particular machine-vector
|
||||||
(machvec) in a generic kernel.
|
(machvec) in a generic kernel.
|
||||||
Example: machvec=hpzx1_swiotlb
|
Example: machvec=hpzx1_swiotlb
|
||||||
|
|
||||||
|
@ -1340,9 +1350,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
it is equivalent to "nosmp", which also disables
|
it is equivalent to "nosmp", which also disables
|
||||||
the IO APIC.
|
the IO APIC.
|
||||||
|
|
||||||
max_loop= [LOOP] Maximum number of loopback devices that can
|
max_loop= [LOOP] The number of loop block devices that get
|
||||||
be mounted
|
(loop.max_loop) unconditionally pre-created at init time. The default
|
||||||
Format: <1-256>
|
number is configured by BLK_DEV_LOOP_MIN_COUNT. Instead
|
||||||
|
of statically allocating a predefined number, loop
|
||||||
|
devices can be requested on-demand with the
|
||||||
|
/dev/loop-control interface.
|
||||||
|
|
||||||
mcatest= [IA-64]
|
mcatest= [IA-64]
|
||||||
|
|
||||||
|
@ -1726,7 +1739,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
|
|
||||||
nointroute [IA-64]
|
nointroute [IA-64]
|
||||||
|
|
||||||
nojitter [IA64] Disables jitter checking for ITC timers.
|
nojitter [IA-64] Disables jitter checking for ITC timers.
|
||||||
|
|
||||||
no-kvmclock [X86,KVM] Disable paravirtualized KVM clock driver
|
no-kvmclock [X86,KVM] Disable paravirtualized KVM clock driver
|
||||||
|
|
||||||
|
@ -1792,7 +1805,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
|
|
||||||
nox2apic [X86-64,APIC] Do not enable x2APIC mode.
|
nox2apic [X86-64,APIC] Do not enable x2APIC mode.
|
||||||
|
|
||||||
nptcg= [IA64] Override max number of concurrent global TLB
|
nptcg= [IA-64] Override max number of concurrent global TLB
|
||||||
purges which is reported from either PAL_VM_SUMMARY or
|
purges which is reported from either PAL_VM_SUMMARY or
|
||||||
SAL PALO.
|
SAL PALO.
|
||||||
|
|
||||||
|
@ -2069,7 +2082,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
Format: { parport<nr> | timid | 0 }
|
Format: { parport<nr> | timid | 0 }
|
||||||
See also Documentation/parport.txt.
|
See also Documentation/parport.txt.
|
||||||
|
|
||||||
pmtmr= [X86] Manual setup of pmtmr I/O Port.
|
pmtmr= [X86] Manual setup of pmtmr I/O Port.
|
||||||
Override pmtimer IOPort with a hex value.
|
Override pmtimer IOPort with a hex value.
|
||||||
e.g. pmtmr=0x508
|
e.g. pmtmr=0x508
|
||||||
|
|
||||||
|
@ -2153,6 +2166,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
[HW,MOUSE] Controls Logitech smartscroll autorepeat.
|
[HW,MOUSE] Controls Logitech smartscroll autorepeat.
|
||||||
0 = disabled, 1 = enabled (default).
|
0 = disabled, 1 = enabled (default).
|
||||||
|
|
||||||
|
pstore.backend= Specify the name of the pstore backend to use
|
||||||
|
|
||||||
pt. [PARIDE]
|
pt. [PARIDE]
|
||||||
See Documentation/blockdev/paride.txt.
|
See Documentation/blockdev/paride.txt.
|
||||||
|
|
||||||
|
@ -2238,6 +2253,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
ro [KNL] Mount root device read-only on boot
|
ro [KNL] Mount root device read-only on boot
|
||||||
|
|
||||||
root= [KNL] Root filesystem
|
root= [KNL] Root filesystem
|
||||||
|
See name_to_dev_t comment in init/do_mounts.c.
|
||||||
|
|
||||||
rootdelay= [KNL] Delay (in seconds) to pause before attempting to
|
rootdelay= [KNL] Delay (in seconds) to pause before attempting to
|
||||||
mount the root filesystem
|
mount the root filesystem
|
||||||
|
@ -2624,6 +2640,16 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
medium is write-protected).
|
medium is write-protected).
|
||||||
Example: quirks=0419:aaf5:rl,0421:0433:rc
|
Example: quirks=0419:aaf5:rl,0421:0433:rc
|
||||||
|
|
||||||
|
user_debug= [KNL,ARM]
|
||||||
|
Format: <int>
|
||||||
|
See arch/arm/Kconfig.debug help text.
|
||||||
|
1 - undefined instruction events
|
||||||
|
2 - system calls
|
||||||
|
4 - invalid data aborts
|
||||||
|
8 - SIGSEGV faults
|
||||||
|
16 - SIGBUS faults
|
||||||
|
Example: user_debug=31
|
||||||
|
|
||||||
userpte=
|
userpte=
|
||||||
[X86] Flags controlling user PTE allocations.
|
[X86] Flags controlling user PTE allocations.
|
||||||
|
|
||||||
|
@ -2669,6 +2695,27 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
vmpoff= [KNL,S390] Perform z/VM CP command after power off.
|
vmpoff= [KNL,S390] Perform z/VM CP command after power off.
|
||||||
Format: <command>
|
Format: <command>
|
||||||
|
|
||||||
|
vsyscall= [X86-64]
|
||||||
|
Controls the behavior of vsyscalls (i.e. calls to
|
||||||
|
fixed addresses of 0xffffffffff600x00 from legacy
|
||||||
|
code). Most statically-linked binaries and older
|
||||||
|
versions of glibc use these calls. Because these
|
||||||
|
functions are at fixed addresses, they make nice
|
||||||
|
targets for exploits that can control RIP.
|
||||||
|
|
||||||
|
emulate [default] Vsyscalls turn into traps and are
|
||||||
|
emulated reasonably safely.
|
||||||
|
|
||||||
|
native Vsyscalls are native syscall instructions.
|
||||||
|
This is a little bit faster than trapping
|
||||||
|
and makes a few dynamic recompilers work
|
||||||
|
better than they would in emulation mode.
|
||||||
|
It also makes exploits much easier to write.
|
||||||
|
|
||||||
|
none Vsyscalls don't work at all. This makes
|
||||||
|
them quite hard to use for exploits but
|
||||||
|
might break your system.
|
||||||
|
|
||||||
vt.cur_default= [VT] Default cursor shape.
|
vt.cur_default= [VT] Default cursor shape.
|
||||||
Format: 0xCCBBAA, where AA, BB, and CC are the same as
|
Format: 0xCCBBAA, where AA, BB, and CC are the same as
|
||||||
the parameters of the <Esc>[?A;B;Cc escape sequence;
|
the parameters of the <Esc>[?A;B;Cc escape sequence;
|
||||||
|
|
|
@ -129,6 +129,20 @@ decimal 11 is the major of SCSI CD-ROMs, and the minor 0 stands for
|
||||||
the first of these. You can find out all valid major numbers by
|
the first of these. You can find out all valid major numbers by
|
||||||
looking into include/linux/major.h.
|
looking into include/linux/major.h.
|
||||||
|
|
||||||
|
In addition to major and minor numbers, if the device containing your
|
||||||
|
root partition uses a partition table format with unique partition
|
||||||
|
identifiers, then you may use them. For instance,
|
||||||
|
"root=PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF". It is also
|
||||||
|
possible to reference another partition on the same device using a
|
||||||
|
known partition UUID as the starting point. For example,
|
||||||
|
if partition 5 of the device has the UUID of
|
||||||
|
00112233-4455-6677-8899-AABBCCDDEEFF then partition 3 may be found as
|
||||||
|
follows:
|
||||||
|
PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF/PARTNROFF=-2
|
||||||
|
|
||||||
|
Authoritative information can be found in
|
||||||
|
"Documentation/kernel-parameters.txt".
|
||||||
|
|
||||||
|
|
||||||
2.2) ro, rw
|
2.2) ro, rw
|
||||||
-----------
|
-----------
|
||||||
|
|
|
@ -1,13 +1,21 @@
|
||||||
00-INDEX
|
00-INDEX
|
||||||
- this file
|
- this file
|
||||||
|
3c359.txt
|
||||||
|
- information on the 3Com TokenLink Velocity XL (3c5359) driver.
|
||||||
3c505.txt
|
3c505.txt
|
||||||
- information on the 3Com EtherLink Plus (3c505) driver.
|
- information on the 3Com EtherLink Plus (3c505) driver.
|
||||||
|
3c509.txt
|
||||||
|
- information on the 3Com Etherlink III Series Ethernet cards.
|
||||||
6pack.txt
|
6pack.txt
|
||||||
- info on the 6pack protocol, an alternative to KISS for AX.25
|
- info on the 6pack protocol, an alternative to KISS for AX.25
|
||||||
DLINK.txt
|
DLINK.txt
|
||||||
- info on the D-Link DE-600/DE-620 parallel port pocket adapters
|
- info on the D-Link DE-600/DE-620 parallel port pocket adapters
|
||||||
PLIP.txt
|
PLIP.txt
|
||||||
- PLIP: The Parallel Line Internet Protocol device driver
|
- PLIP: The Parallel Line Internet Protocol device driver
|
||||||
|
README.ipw2100
|
||||||
|
- README for the Intel PRO/Wireless 2100 driver.
|
||||||
|
README.ipw2200
|
||||||
|
- README for the Intel PRO/Wireless 2915ABG and 2200BG driver.
|
||||||
README.sb1000
|
README.sb1000
|
||||||
- info on General Instrument/NextLevel SURFboard1000 cable modem.
|
- info on General Instrument/NextLevel SURFboard1000 cable modem.
|
||||||
alias.txt
|
alias.txt
|
||||||
|
@ -20,8 +28,12 @@ atm.txt
|
||||||
- info on where to get ATM programs and support for Linux.
|
- info on where to get ATM programs and support for Linux.
|
||||||
ax25.txt
|
ax25.txt
|
||||||
- info on using AX.25 and NET/ROM code for Linux
|
- info on using AX.25 and NET/ROM code for Linux
|
||||||
|
batman-adv.txt
|
||||||
|
- B.A.T.M.A.N routing protocol on top of layer 2 Ethernet Frames.
|
||||||
baycom.txt
|
baycom.txt
|
||||||
- info on the driver for Baycom style amateur radio modems
|
- info on the driver for Baycom style amateur radio modems
|
||||||
|
bonding.txt
|
||||||
|
- Linux Ethernet Bonding Driver HOWTO: link aggregation in Linux.
|
||||||
bridge.txt
|
bridge.txt
|
||||||
- where to get user space programs for ethernet bridging with Linux.
|
- where to get user space programs for ethernet bridging with Linux.
|
||||||
can.txt
|
can.txt
|
||||||
|
@ -34,32 +46,60 @@ cxacru.txt
|
||||||
- Conexant AccessRunner USB ADSL Modem
|
- Conexant AccessRunner USB ADSL Modem
|
||||||
cxacru-cf.py
|
cxacru-cf.py
|
||||||
- Conexant AccessRunner USB ADSL Modem configuration file parser
|
- Conexant AccessRunner USB ADSL Modem configuration file parser
|
||||||
|
cxgb.txt
|
||||||
|
- Release Notes for the Chelsio N210 Linux device driver.
|
||||||
|
dccp.txt
|
||||||
|
- the Datagram Congestion Control Protocol (DCCP) (RFC 4340..42).
|
||||||
de4x5.txt
|
de4x5.txt
|
||||||
- the Digital EtherWORKS DE4?? and DE5?? PCI Ethernet driver
|
- the Digital EtherWORKS DE4?? and DE5?? PCI Ethernet driver
|
||||||
decnet.txt
|
decnet.txt
|
||||||
- info on using the DECnet networking layer in Linux.
|
- info on using the DECnet networking layer in Linux.
|
||||||
depca.txt
|
depca.txt
|
||||||
- the Digital DEPCA/EtherWORKS DE1?? and DE2?? LANCE Ethernet driver
|
- the Digital DEPCA/EtherWORKS DE1?? and DE2?? LANCE Ethernet driver
|
||||||
|
dl2k.txt
|
||||||
|
- README for D-Link DL2000-based Gigabit Ethernet Adapters (dl2k.ko).
|
||||||
|
dm9000.txt
|
||||||
|
- README for the Simtec DM9000 Network driver.
|
||||||
dmfe.txt
|
dmfe.txt
|
||||||
- info on the Davicom DM9102(A)/DM9132/DM9801 fast ethernet driver.
|
- info on the Davicom DM9102(A)/DM9132/DM9801 fast ethernet driver.
|
||||||
|
dns_resolver.txt
|
||||||
|
- The DNS resolver module allows kernel servies to make DNS queries.
|
||||||
|
driver.txt
|
||||||
|
- Softnet driver issues.
|
||||||
e100.txt
|
e100.txt
|
||||||
- info on Intel's EtherExpress PRO/100 line of 10/100 boards
|
- info on Intel's EtherExpress PRO/100 line of 10/100 boards
|
||||||
e1000.txt
|
e1000.txt
|
||||||
- info on Intel's E1000 line of gigabit ethernet boards
|
- info on Intel's E1000 line of gigabit ethernet boards
|
||||||
|
e1000e.txt
|
||||||
|
- README for the Intel Gigabit Ethernet Driver (e1000e).
|
||||||
eql.txt
|
eql.txt
|
||||||
- serial IP load balancing
|
- serial IP load balancing
|
||||||
ewrk3.txt
|
ewrk3.txt
|
||||||
- the Digital EtherWORKS 3 DE203/4/5 Ethernet driver
|
- the Digital EtherWORKS 3 DE203/4/5 Ethernet driver
|
||||||
|
fib_trie.txt
|
||||||
|
- Level Compressed Trie (LC-trie) notes: a structure for routing.
|
||||||
filter.txt
|
filter.txt
|
||||||
- Linux Socket Filtering
|
- Linux Socket Filtering
|
||||||
fore200e.txt
|
fore200e.txt
|
||||||
- FORE Systems PCA-200E/SBA-200E ATM NIC driver info.
|
- FORE Systems PCA-200E/SBA-200E ATM NIC driver info.
|
||||||
framerelay.txt
|
framerelay.txt
|
||||||
- info on using Frame Relay/Data Link Connection Identifier (DLCI).
|
- info on using Frame Relay/Data Link Connection Identifier (DLCI).
|
||||||
|
gen_stats.txt
|
||||||
|
- Generic networking statistics for netlink users.
|
||||||
|
generic_hdlc.txt
|
||||||
|
- The generic High Level Data Link Control (HDLC) layer.
|
||||||
generic_netlink.txt
|
generic_netlink.txt
|
||||||
- info on Generic Netlink
|
- info on Generic Netlink
|
||||||
|
gianfar.txt
|
||||||
|
- Gianfar Ethernet Driver.
|
||||||
ieee802154.txt
|
ieee802154.txt
|
||||||
- Linux IEEE 802.15.4 implementation, API and drivers
|
- Linux IEEE 802.15.4 implementation, API and drivers
|
||||||
|
ifenslave.c
|
||||||
|
- Configure network interfaces for parallel routing (bonding).
|
||||||
|
igb.txt
|
||||||
|
- README for the Intel Gigabit Ethernet Driver (igb).
|
||||||
|
igbvf.txt
|
||||||
|
- README for the Intel Gigabit Ethernet Driver (igbvf).
|
||||||
ip-sysctl.txt
|
ip-sysctl.txt
|
||||||
- /proc/sys/net/ipv4/* variables
|
- /proc/sys/net/ipv4/* variables
|
||||||
ip_dynaddr.txt
|
ip_dynaddr.txt
|
||||||
|
@ -68,41 +108,117 @@ ipddp.txt
|
||||||
- AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation
|
- AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation
|
||||||
iphase.txt
|
iphase.txt
|
||||||
- Interphase PCI ATM (i)Chip IA Linux driver info.
|
- Interphase PCI ATM (i)Chip IA Linux driver info.
|
||||||
|
ipv6.txt
|
||||||
|
- Options to the ipv6 kernel module.
|
||||||
|
ipvs-sysctl.txt
|
||||||
|
- Per-inode explanation of the /proc/sys/net/ipv4/vs interface.
|
||||||
irda.txt
|
irda.txt
|
||||||
- where to get IrDA (infrared) utilities and info for Linux.
|
- where to get IrDA (infrared) utilities and info for Linux.
|
||||||
|
ixgb.txt
|
||||||
|
- README for the Intel 10 Gigabit Ethernet Driver (ixgb).
|
||||||
|
ixgbe.txt
|
||||||
|
- README for the Intel 10 Gigabit Ethernet Driver (ixgbe).
|
||||||
|
ixgbevf.txt
|
||||||
|
- README for the Intel Virtual Function (VF) Driver (ixgbevf).
|
||||||
|
l2tp.txt
|
||||||
|
- User guide to the L2TP tunnel protocol.
|
||||||
lapb-module.txt
|
lapb-module.txt
|
||||||
- programming information of the LAPB module.
|
- programming information of the LAPB module.
|
||||||
ltpc.txt
|
ltpc.txt
|
||||||
- the Apple or Farallon LocalTalk PC card driver
|
- the Apple or Farallon LocalTalk PC card driver
|
||||||
|
mac80211-injection.txt
|
||||||
|
- HOWTO use packet injection with mac80211
|
||||||
multicast.txt
|
multicast.txt
|
||||||
- Behaviour of cards under Multicast
|
- Behaviour of cards under Multicast
|
||||||
|
multiqueue.txt
|
||||||
|
- HOWTO for multiqueue network device support.
|
||||||
|
netconsole.txt
|
||||||
|
- The network console module netconsole.ko: configuration and notes.
|
||||||
|
netdev-features.txt
|
||||||
|
- Network interface features API description.
|
||||||
netdevices.txt
|
netdevices.txt
|
||||||
- info on network device driver functions exported to the kernel.
|
- info on network device driver functions exported to the kernel.
|
||||||
|
netif-msg.txt
|
||||||
|
- Design of the network interface message level setting (NETIF_MSG_*).
|
||||||
|
nfc.txt
|
||||||
|
- The Linux Near Field Communication (NFS) subsystem.
|
||||||
olympic.txt
|
olympic.txt
|
||||||
- IBM PCI Pit/Pit-Phy/Olympic Token Ring driver info.
|
- IBM PCI Pit/Pit-Phy/Olympic Token Ring driver info.
|
||||||
|
operstates.txt
|
||||||
|
- Overview of network interface operational states.
|
||||||
|
packet_mmap.txt
|
||||||
|
- User guide to memory mapped packet socket rings (PACKET_[RT]X_RING).
|
||||||
|
phonet.txt
|
||||||
|
- The Phonet packet protocol used in Nokia cellular modems.
|
||||||
|
phy.txt
|
||||||
|
- The PHY abstraction layer.
|
||||||
|
pktgen.txt
|
||||||
|
- User guide to the kernel packet generator (pktgen.ko).
|
||||||
policy-routing.txt
|
policy-routing.txt
|
||||||
- IP policy-based routing
|
- IP policy-based routing
|
||||||
|
ppp_generic.txt
|
||||||
|
- Information about the generic PPP driver.
|
||||||
|
proc_net_tcp.txt
|
||||||
|
- Per inode overview of the /proc/net/tcp and /proc/net/tcp6 interfaces.
|
||||||
|
radiotap-headers.txt
|
||||||
|
- Background on radiotap headers.
|
||||||
ray_cs.txt
|
ray_cs.txt
|
||||||
- Raylink Wireless LAN card driver info.
|
- Raylink Wireless LAN card driver info.
|
||||||
|
rds.txt
|
||||||
|
- Background on the reliable, ordered datagram delivery method RDS.
|
||||||
|
regulatory.txt
|
||||||
|
- Overview of the Linux wireless regulatory infrastructure.
|
||||||
|
rxrpc.txt
|
||||||
|
- Guide to the RxRPC protocol.
|
||||||
|
s2io.txt
|
||||||
|
- Release notes for Neterion Xframe I/II 10GbE driver.
|
||||||
|
scaling.txt
|
||||||
|
- Explanation of network scaling techniques: RSS, RPS, RFS, aRFS, XPS.
|
||||||
|
sctp.txt
|
||||||
|
- Notes on the Linux kernel implementation of the SCTP protocol.
|
||||||
|
secid.txt
|
||||||
|
- Explanation of the secid member in flow structures.
|
||||||
skfp.txt
|
skfp.txt
|
||||||
- SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info.
|
- SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info.
|
||||||
smc9.txt
|
smc9.txt
|
||||||
- the driver for SMC's 9000 series of Ethernet cards
|
- the driver for SMC's 9000 series of Ethernet cards
|
||||||
smctr.txt
|
smctr.txt
|
||||||
- SMC TokenCard TokenRing Linux driver info.
|
- SMC TokenCard TokenRing Linux driver info.
|
||||||
|
spider-net.txt
|
||||||
|
- README for the Spidernet Driver (as found in PS3 / Cell BE).
|
||||||
|
stmmac.txt
|
||||||
|
- README for the STMicro Synopsys Ethernet driver.
|
||||||
|
tc-actions-env-rules.txt
|
||||||
|
- rules for traffic control (tc) actions.
|
||||||
|
timestamping.txt
|
||||||
|
- overview of network packet timestamping variants.
|
||||||
tcp.txt
|
tcp.txt
|
||||||
- short blurb on how TCP output takes place.
|
- short blurb on how TCP output takes place.
|
||||||
|
tcp-thin.txt
|
||||||
|
- kernel tuning options for low rate 'thin' TCP streams.
|
||||||
tlan.txt
|
tlan.txt
|
||||||
- ThunderLAN (Compaq Netelligent 10/100, Olicom OC-2xxx) driver info.
|
- ThunderLAN (Compaq Netelligent 10/100, Olicom OC-2xxx) driver info.
|
||||||
tms380tr.txt
|
tms380tr.txt
|
||||||
- SysKonnect Token Ring ISA/PCI adapter driver info.
|
- SysKonnect Token Ring ISA/PCI adapter driver info.
|
||||||
|
tproxy.txt
|
||||||
|
- Transparent proxy support user guide.
|
||||||
tuntap.txt
|
tuntap.txt
|
||||||
- TUN/TAP device driver, allowing user space Rx/Tx of packets.
|
- TUN/TAP device driver, allowing user space Rx/Tx of packets.
|
||||||
|
udplite.txt
|
||||||
|
- UDP-Lite protocol (RFC 3828) introduction.
|
||||||
vortex.txt
|
vortex.txt
|
||||||
- info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards.
|
- info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards.
|
||||||
|
vxge.txt
|
||||||
|
- README for the Neterion X3100 PCIe Server Adapter.
|
||||||
x25.txt
|
x25.txt
|
||||||
- general info on X.25 development.
|
- general info on X.25 development.
|
||||||
x25-iface.txt
|
x25-iface.txt
|
||||||
- description of the X.25 Packet Layer to LAPB device interface.
|
- description of the X.25 Packet Layer to LAPB device interface.
|
||||||
|
xfrm_proc.txt
|
||||||
|
- description of the statistics package for XFRM.
|
||||||
|
xfrm_sync.txt
|
||||||
|
- sync patches for XFRM enable migration of an SA between hosts.
|
||||||
|
xfrm_sysctl.txt
|
||||||
|
- description of the XFRM configuration options.
|
||||||
z8530drv.txt
|
z8530drv.txt
|
||||||
- info about Linux driver for Z8530 based HDLC cards for AX.25
|
- info about Linux driver for Z8530 based HDLC cards for AX.25
|
||||||
|
|
|
@ -238,6 +238,18 @@ ad_select
|
||||||
|
|
||||||
This option was added in bonding version 3.4.0.
|
This option was added in bonding version 3.4.0.
|
||||||
|
|
||||||
|
all_slaves_active
|
||||||
|
|
||||||
|
Specifies that duplicate frames (received on inactive ports) should be
|
||||||
|
dropped (0) or delivered (1).
|
||||||
|
|
||||||
|
Normally, bonding will drop duplicate frames (received on inactive
|
||||||
|
ports), which is desirable for most users. But there are some times
|
||||||
|
it is nice to allow duplicate frames to be delivered.
|
||||||
|
|
||||||
|
The default value is 0 (drop duplicate frames received on inactive
|
||||||
|
ports).
|
||||||
|
|
||||||
arp_interval
|
arp_interval
|
||||||
|
|
||||||
Specifies the ARP link monitoring frequency in milliseconds.
|
Specifies the ARP link monitoring frequency in milliseconds.
|
||||||
|
@ -433,6 +445,23 @@ miimon
|
||||||
determined. See the High Availability section for additional
|
determined. See the High Availability section for additional
|
||||||
information. The default value is 0.
|
information. The default value is 0.
|
||||||
|
|
||||||
|
min_links
|
||||||
|
|
||||||
|
Specifies the minimum number of links that must be active before
|
||||||
|
asserting carrier. It is similar to the Cisco EtherChannel min-links
|
||||||
|
feature. This allows setting the minimum number of member ports that
|
||||||
|
must be up (link-up state) before marking the bond device as up
|
||||||
|
(carrier on). This is useful for situations where higher level services
|
||||||
|
such as clustering want to ensure a minimum number of low bandwidth
|
||||||
|
links are active before switchover. This option only affect 802.3ad
|
||||||
|
mode.
|
||||||
|
|
||||||
|
The default value is 0. This will cause carrier to be asserted (for
|
||||||
|
802.3ad mode) whenever there is an active aggregator, regardless of the
|
||||||
|
number of available links in that aggregator. Note that, because an
|
||||||
|
aggregator cannot be active without at least one available link,
|
||||||
|
setting this option to 0 or to 1 has the exact same effect.
|
||||||
|
|
||||||
mode
|
mode
|
||||||
|
|
||||||
Specifies one of the bonding policies. The default is
|
Specifies one of the bonding policies. The default is
|
||||||
|
@ -599,7 +628,7 @@ num_unsol_na
|
||||||
affect only the active-backup mode. These options were added for
|
affect only the active-backup mode. These options were added for
|
||||||
bonding versions 3.3.0 and 3.4.0 respectively.
|
bonding versions 3.3.0 and 3.4.0 respectively.
|
||||||
|
|
||||||
From Linux 2.6.40 and bonding version 3.7.1, these notifications
|
From Linux 3.0 and bonding version 3.7.1, these notifications
|
||||||
are generated by the ipv4 and ipv6 code and the numbers of
|
are generated by the ipv4 and ipv6 code and the numbers of
|
||||||
repetitions cannot be set independently.
|
repetitions cannot be set independently.
|
||||||
|
|
||||||
|
|
|
@ -992,7 +992,7 @@ bindv6only - BOOLEAN
|
||||||
TRUE: disable IPv4-mapped address feature
|
TRUE: disable IPv4-mapped address feature
|
||||||
FALSE: enable IPv4-mapped address feature
|
FALSE: enable IPv4-mapped address feature
|
||||||
|
|
||||||
Default: FALSE (as specified in RFC2553bis)
|
Default: FALSE (as specified in RFC3493)
|
||||||
|
|
||||||
IPv6 Fragmentation:
|
IPv6 Fragmentation:
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,378 @@
|
||||||
|
Scaling in the Linux Networking Stack
|
||||||
|
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
This document describes a set of complementary techniques in the Linux
|
||||||
|
networking stack to increase parallelism and improve performance for
|
||||||
|
multi-processor systems.
|
||||||
|
|
||||||
|
The following technologies are described:
|
||||||
|
|
||||||
|
RSS: Receive Side Scaling
|
||||||
|
RPS: Receive Packet Steering
|
||||||
|
RFS: Receive Flow Steering
|
||||||
|
Accelerated Receive Flow Steering
|
||||||
|
XPS: Transmit Packet Steering
|
||||||
|
|
||||||
|
|
||||||
|
RSS: Receive Side Scaling
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Contemporary NICs support multiple receive and transmit descriptor queues
|
||||||
|
(multi-queue). On reception, a NIC can send different packets to different
|
||||||
|
queues to distribute processing among CPUs. The NIC distributes packets by
|
||||||
|
applying a filter to each packet that assigns it to one of a small number
|
||||||
|
of logical flows. Packets for each flow are steered to a separate receive
|
||||||
|
queue, which in turn can be processed by separate CPUs. This mechanism is
|
||||||
|
generally known as “Receive-side Scaling” (RSS). The goal of RSS and
|
||||||
|
the other scaling techniques to increase performance uniformly.
|
||||||
|
Multi-queue distribution can also be used for traffic prioritization, but
|
||||||
|
that is not the focus of these techniques.
|
||||||
|
|
||||||
|
The filter used in RSS is typically a hash function over the network
|
||||||
|
and/or transport layer headers-- for example, a 4-tuple hash over
|
||||||
|
IP addresses and TCP ports of a packet. The most common hardware
|
||||||
|
implementation of RSS uses a 128-entry indirection table where each entry
|
||||||
|
stores a queue number. The receive queue for a packet is determined
|
||||||
|
by masking out the low order seven bits of the computed hash for the
|
||||||
|
packet (usually a Toeplitz hash), taking this number as a key into the
|
||||||
|
indirection table and reading the corresponding value.
|
||||||
|
|
||||||
|
Some advanced NICs allow steering packets to queues based on
|
||||||
|
programmable filters. For example, webserver bound TCP port 80 packets
|
||||||
|
can be directed to their own receive queue. Such “n-tuple” filters can
|
||||||
|
be configured from ethtool (--config-ntuple).
|
||||||
|
|
||||||
|
==== RSS Configuration
|
||||||
|
|
||||||
|
The driver for a multi-queue capable NIC typically provides a kernel
|
||||||
|
module parameter for specifying the number of hardware queues to
|
||||||
|
configure. In the bnx2x driver, for instance, this parameter is called
|
||||||
|
num_queues. A typical RSS configuration would be to have one receive queue
|
||||||
|
for each CPU if the device supports enough queues, or otherwise at least
|
||||||
|
one for each memory domain, where a memory domain is a set of CPUs that
|
||||||
|
share a particular memory level (L1, L2, NUMA node, etc.).
|
||||||
|
|
||||||
|
The indirection table of an RSS device, which resolves a queue by masked
|
||||||
|
hash, is usually programmed by the driver at initialization. The
|
||||||
|
default mapping is to distribute the queues evenly in the table, but the
|
||||||
|
indirection table can be retrieved and modified at runtime using ethtool
|
||||||
|
commands (--show-rxfh-indir and --set-rxfh-indir). Modifying the
|
||||||
|
indirection table could be done to give different queues different
|
||||||
|
relative weights.
|
||||||
|
|
||||||
|
== RSS IRQ Configuration
|
||||||
|
|
||||||
|
Each receive queue has a separate IRQ associated with it. The NIC triggers
|
||||||
|
this to notify a CPU when new packets arrive on the given queue. The
|
||||||
|
signaling path for PCIe devices uses message signaled interrupts (MSI-X),
|
||||||
|
that can route each interrupt to a particular CPU. The active mapping
|
||||||
|
of queues to IRQs can be determined from /proc/interrupts. By default,
|
||||||
|
an IRQ may be handled on any CPU. Because a non-negligible part of packet
|
||||||
|
processing takes place in receive interrupt handling, it is advantageous
|
||||||
|
to spread receive interrupts between CPUs. To manually adjust the IRQ
|
||||||
|
affinity of each interrupt see Documentation/IRQ-affinity. Some systems
|
||||||
|
will be running irqbalance, a daemon that dynamically optimizes IRQ
|
||||||
|
assignments and as a result may override any manual settings.
|
||||||
|
|
||||||
|
== Suggested Configuration
|
||||||
|
|
||||||
|
RSS should be enabled when latency is a concern or whenever receive
|
||||||
|
interrupt processing forms a bottleneck. Spreading load between CPUs
|
||||||
|
decreases queue length. For low latency networking, the optimal setting
|
||||||
|
is to allocate as many queues as there are CPUs in the system (or the
|
||||||
|
NIC maximum, if lower). The most efficient high-rate configuration
|
||||||
|
is likely the one with the smallest number of receive queues where no
|
||||||
|
receive queue overflows due to a saturated CPU, because in default
|
||||||
|
mode with interrupt coalescing enabled, the aggregate number of
|
||||||
|
interrupts (and thus work) grows with each additional queue.
|
||||||
|
|
||||||
|
Per-cpu load can be observed using the mpstat utility, but note that on
|
||||||
|
processors with hyperthreading (HT), each hyperthread is represented as
|
||||||
|
a separate CPU. For interrupt handling, HT has shown no benefit in
|
||||||
|
initial tests, so limit the number of queues to the number of CPU cores
|
||||||
|
in the system.
|
||||||
|
|
||||||
|
|
||||||
|
RPS: Receive Packet Steering
|
||||||
|
============================
|
||||||
|
|
||||||
|
Receive Packet Steering (RPS) is logically a software implementation of
|
||||||
|
RSS. Being in software, it is necessarily called later in the datapath.
|
||||||
|
Whereas RSS selects the queue and hence CPU that will run the hardware
|
||||||
|
interrupt handler, RPS selects the CPU to perform protocol processing
|
||||||
|
above the interrupt handler. This is accomplished by placing the packet
|
||||||
|
on the desired CPU’s backlog queue and waking up the CPU for processing.
|
||||||
|
RPS has some advantages over RSS: 1) it can be used with any NIC,
|
||||||
|
2) software filters can easily be added to hash over new protocols,
|
||||||
|
3) it does not increase hardware device interrupt rate (although it does
|
||||||
|
introduce inter-processor interrupts (IPIs)).
|
||||||
|
|
||||||
|
RPS is called during bottom half of the receive interrupt handler, when
|
||||||
|
a driver sends a packet up the network stack with netif_rx() or
|
||||||
|
netif_receive_skb(). These call the get_rps_cpu() function, which
|
||||||
|
selects the queue that should process a packet.
|
||||||
|
|
||||||
|
The first step in determining the target CPU for RPS is to calculate a
|
||||||
|
flow hash over the packet’s addresses or ports (2-tuple or 4-tuple hash
|
||||||
|
depending on the protocol). This serves as a consistent hash of the
|
||||||
|
associated flow of the packet. The hash is either provided by hardware
|
||||||
|
or will be computed in the stack. Capable hardware can pass the hash in
|
||||||
|
the receive descriptor for the packet; this would usually be the same
|
||||||
|
hash used for RSS (e.g. computed Toeplitz hash). The hash is saved in
|
||||||
|
skb->rx_hash and can be used elsewhere in the stack as a hash of the
|
||||||
|
packet’s flow.
|
||||||
|
|
||||||
|
Each receive hardware queue has an associated list of CPUs to which
|
||||||
|
RPS may enqueue packets for processing. For each received packet,
|
||||||
|
an index into the list is computed from the flow hash modulo the size
|
||||||
|
of the list. The indexed CPU is the target for processing the packet,
|
||||||
|
and the packet is queued to the tail of that CPU’s backlog queue. At
|
||||||
|
the end of the bottom half routine, IPIs are sent to any CPUs for which
|
||||||
|
packets have been queued to their backlog queue. The IPI wakes backlog
|
||||||
|
processing on the remote CPU, and any queued packets are then processed
|
||||||
|
up the networking stack.
|
||||||
|
|
||||||
|
==== RPS Configuration
|
||||||
|
|
||||||
|
RPS requires a kernel compiled with the CONFIG_RPS kconfig symbol (on
|
||||||
|
by default for SMP). Even when compiled in, RPS remains disabled until
|
||||||
|
explicitly configured. The list of CPUs to which RPS may forward traffic
|
||||||
|
can be configured for each receive queue using a sysfs file entry:
|
||||||
|
|
||||||
|
/sys/class/net/<dev>/queues/rx-<n>/rps_cpus
|
||||||
|
|
||||||
|
This file implements a bitmap of CPUs. RPS is disabled when it is zero
|
||||||
|
(the default), in which case packets are processed on the interrupting
|
||||||
|
CPU. Documentation/IRQ-affinity.txt explains how CPUs are assigned to
|
||||||
|
the bitmap.
|
||||||
|
|
||||||
|
== Suggested Configuration
|
||||||
|
|
||||||
|
For a single queue device, a typical RPS configuration would be to set
|
||||||
|
the rps_cpus to the CPUs in the same memory domain of the interrupting
|
||||||
|
CPU. If NUMA locality is not an issue, this could also be all CPUs in
|
||||||
|
the system. At high interrupt rate, it might be wise to exclude the
|
||||||
|
interrupting CPU from the map since that already performs much work.
|
||||||
|
|
||||||
|
For a multi-queue system, if RSS is configured so that a hardware
|
||||||
|
receive queue is mapped to each CPU, then RPS is probably redundant
|
||||||
|
and unnecessary. If there are fewer hardware queues than CPUs, then
|
||||||
|
RPS might be beneficial if the rps_cpus for each queue are the ones that
|
||||||
|
share the same memory domain as the interrupting CPU for that queue.
|
||||||
|
|
||||||
|
|
||||||
|
RFS: Receive Flow Steering
|
||||||
|
==========================
|
||||||
|
|
||||||
|
While RPS steers packets solely based on hash, and thus generally
|
||||||
|
provides good load distribution, it does not take into account
|
||||||
|
application locality. This is accomplished by Receive Flow Steering
|
||||||
|
(RFS). The goal of RFS is to increase datacache hitrate by steering
|
||||||
|
kernel processing of packets to the CPU where the application thread
|
||||||
|
consuming the packet is running. RFS relies on the same RPS mechanisms
|
||||||
|
to enqueue packets onto the backlog of another CPU and to wake up that
|
||||||
|
CPU.
|
||||||
|
|
||||||
|
In RFS, packets are not forwarded directly by the value of their hash,
|
||||||
|
but the hash is used as index into a flow lookup table. This table maps
|
||||||
|
flows to the CPUs where those flows are being processed. The flow hash
|
||||||
|
(see RPS section above) is used to calculate the index into this table.
|
||||||
|
The CPU recorded in each entry is the one which last processed the flow.
|
||||||
|
If an entry does not hold a valid CPU, then packets mapped to that entry
|
||||||
|
are steered using plain RPS. Multiple table entries may point to the
|
||||||
|
same CPU. Indeed, with many flows and few CPUs, it is very likely that
|
||||||
|
a single application thread handles flows with many different flow hashes.
|
||||||
|
|
||||||
|
rps_sock_table is a global flow table that contains the *desired* CPU for
|
||||||
|
flows: the CPU that is currently processing the flow in userspace. Each
|
||||||
|
table value is a CPU index that is updated during calls to recvmsg and
|
||||||
|
sendmsg (specifically, inet_recvmsg(), inet_sendmsg(), inet_sendpage()
|
||||||
|
and tcp_splice_read()).
|
||||||
|
|
||||||
|
When the scheduler moves a thread to a new CPU while it has outstanding
|
||||||
|
receive packets on the old CPU, packets may arrive out of order. To
|
||||||
|
avoid this, RFS uses a second flow table to track outstanding packets
|
||||||
|
for each flow: rps_dev_flow_table is a table specific to each hardware
|
||||||
|
receive queue of each device. Each table value stores a CPU index and a
|
||||||
|
counter. The CPU index represents the *current* CPU onto which packets
|
||||||
|
for this flow are enqueued for further kernel processing. Ideally, kernel
|
||||||
|
and userspace processing occur on the same CPU, and hence the CPU index
|
||||||
|
in both tables is identical. This is likely false if the scheduler has
|
||||||
|
recently migrated a userspace thread while the kernel still has packets
|
||||||
|
enqueued for kernel processing on the old CPU.
|
||||||
|
|
||||||
|
The counter in rps_dev_flow_table values records the length of the current
|
||||||
|
CPU's backlog when a packet in this flow was last enqueued. Each backlog
|
||||||
|
queue has a head counter that is incremented on dequeue. A tail counter
|
||||||
|
is computed as head counter + queue length. In other words, the counter
|
||||||
|
in rps_dev_flow_table[i] records the last element in flow i that has
|
||||||
|
been enqueued onto the currently designated CPU for flow i (of course,
|
||||||
|
entry i is actually selected by hash and multiple flows may hash to the
|
||||||
|
same entry i).
|
||||||
|
|
||||||
|
And now the trick for avoiding out of order packets: when selecting the
|
||||||
|
CPU for packet processing (from get_rps_cpu()) the rps_sock_flow table
|
||||||
|
and the rps_dev_flow table of the queue that the packet was received on
|
||||||
|
are compared. If the desired CPU for the flow (found in the
|
||||||
|
rps_sock_flow table) matches the current CPU (found in the rps_dev_flow
|
||||||
|
table), the packet is enqueued onto that CPU’s backlog. If they differ,
|
||||||
|
the current CPU is updated to match the desired CPU if one of the
|
||||||
|
following is true:
|
||||||
|
|
||||||
|
- The current CPU's queue head counter >= the recorded tail counter
|
||||||
|
value in rps_dev_flow[i]
|
||||||
|
- The current CPU is unset (equal to NR_CPUS)
|
||||||
|
- The current CPU is offline
|
||||||
|
|
||||||
|
After this check, the packet is sent to the (possibly updated) current
|
||||||
|
CPU. These rules aim to ensure that a flow only moves to a new CPU when
|
||||||
|
there are no packets outstanding on the old CPU, as the outstanding
|
||||||
|
packets could arrive later than those about to be processed on the new
|
||||||
|
CPU.
|
||||||
|
|
||||||
|
==== RFS Configuration
|
||||||
|
|
||||||
|
RFS is only available if the kconfig symbol CONFIG_RFS is enabled (on
|
||||||
|
by default for SMP). The functionality remains disabled until explicitly
|
||||||
|
configured. The number of entries in the global flow table is set through:
|
||||||
|
|
||||||
|
/proc/sys/net/core/rps_sock_flow_entries
|
||||||
|
|
||||||
|
The number of entries in the per-queue flow table are set through:
|
||||||
|
|
||||||
|
/sys/class/net/<dev>/queues/tx-<n>/rps_flow_cnt
|
||||||
|
|
||||||
|
== Suggested Configuration
|
||||||
|
|
||||||
|
Both of these need to be set before RFS is enabled for a receive queue.
|
||||||
|
Values for both are rounded up to the nearest power of two. The
|
||||||
|
suggested flow count depends on the expected number of active connections
|
||||||
|
at any given time, which may be significantly less than the number of open
|
||||||
|
connections. We have found that a value of 32768 for rps_sock_flow_entries
|
||||||
|
works fairly well on a moderately loaded server.
|
||||||
|
|
||||||
|
For a single queue device, the rps_flow_cnt value for the single queue
|
||||||
|
would normally be configured to the same value as rps_sock_flow_entries.
|
||||||
|
For a multi-queue device, the rps_flow_cnt for each queue might be
|
||||||
|
configured as rps_sock_flow_entries / N, where N is the number of
|
||||||
|
queues. So for instance, if rps_flow_entries is set to 32768 and there
|
||||||
|
are 16 configured receive queues, rps_flow_cnt for each queue might be
|
||||||
|
configured as 2048.
|
||||||
|
|
||||||
|
|
||||||
|
Accelerated RFS
|
||||||
|
===============
|
||||||
|
|
||||||
|
Accelerated RFS is to RFS what RSS is to RPS: a hardware-accelerated load
|
||||||
|
balancing mechanism that uses soft state to steer flows based on where
|
||||||
|
the application thread consuming the packets of each flow is running.
|
||||||
|
Accelerated RFS should perform better than RFS since packets are sent
|
||||||
|
directly to a CPU local to the thread consuming the data. The target CPU
|
||||||
|
will either be the same CPU where the application runs, or at least a CPU
|
||||||
|
which is local to the application thread’s CPU in the cache hierarchy.
|
||||||
|
|
||||||
|
To enable accelerated RFS, the networking stack calls the
|
||||||
|
ndo_rx_flow_steer driver function to communicate the desired hardware
|
||||||
|
queue for packets matching a particular flow. The network stack
|
||||||
|
automatically calls this function every time a flow entry in
|
||||||
|
rps_dev_flow_table is updated. The driver in turn uses a device specific
|
||||||
|
method to program the NIC to steer the packets.
|
||||||
|
|
||||||
|
The hardware queue for a flow is derived from the CPU recorded in
|
||||||
|
rps_dev_flow_table. The stack consults a CPU to hardware queue map which
|
||||||
|
is maintained by the NIC driver. This is an auto-generated reverse map of
|
||||||
|
the IRQ affinity table shown by /proc/interrupts. Drivers can use
|
||||||
|
functions in the cpu_rmap (“CPU affinity reverse map”) kernel library
|
||||||
|
to populate the map. For each CPU, the corresponding queue in the map is
|
||||||
|
set to be one whose processing CPU is closest in cache locality.
|
||||||
|
|
||||||
|
==== Accelerated RFS Configuration
|
||||||
|
|
||||||
|
Accelerated RFS is only available if the kernel is compiled with
|
||||||
|
CONFIG_RFS_ACCEL and support is provided by the NIC device and driver.
|
||||||
|
It also requires that ntuple filtering is enabled via ethtool. The map
|
||||||
|
of CPU to queues is automatically deduced from the IRQ affinities
|
||||||
|
configured for each receive queue by the driver, so no additional
|
||||||
|
configuration should be necessary.
|
||||||
|
|
||||||
|
== Suggested Configuration
|
||||||
|
|
||||||
|
This technique should be enabled whenever one wants to use RFS and the
|
||||||
|
NIC supports hardware acceleration.
|
||||||
|
|
||||||
|
XPS: Transmit Packet Steering
|
||||||
|
=============================
|
||||||
|
|
||||||
|
Transmit Packet Steering is a mechanism for intelligently selecting
|
||||||
|
which transmit queue to use when transmitting a packet on a multi-queue
|
||||||
|
device. To accomplish this, a mapping from CPU to hardware queue(s) is
|
||||||
|
recorded. The goal of this mapping is usually to assign queues
|
||||||
|
exclusively to a subset of CPUs, where the transmit completions for
|
||||||
|
these queues are processed on a CPU within this set. This choice
|
||||||
|
provides two benefits. First, contention on the device queue lock is
|
||||||
|
significantly reduced since fewer CPUs contend for the same queue
|
||||||
|
(contention can be eliminated completely if each CPU has its own
|
||||||
|
transmit queue). Secondly, cache miss rate on transmit completion is
|
||||||
|
reduced, in particular for data cache lines that hold the sk_buff
|
||||||
|
structures.
|
||||||
|
|
||||||
|
XPS is configured per transmit queue by setting a bitmap of CPUs that
|
||||||
|
may use that queue to transmit. The reverse mapping, from CPUs to
|
||||||
|
transmit queues, is computed and maintained for each network device.
|
||||||
|
When transmitting the first packet in a flow, the function
|
||||||
|
get_xps_queue() is called to select a queue. This function uses the ID
|
||||||
|
of the running CPU as a key into the CPU-to-queue lookup table. If the
|
||||||
|
ID matches a single queue, that is used for transmission. If multiple
|
||||||
|
queues match, one is selected by using the flow hash to compute an index
|
||||||
|
into the set.
|
||||||
|
|
||||||
|
The queue chosen for transmitting a particular flow is saved in the
|
||||||
|
corresponding socket structure for the flow (e.g. a TCP connection).
|
||||||
|
This transmit queue is used for subsequent packets sent on the flow to
|
||||||
|
prevent out of order (ooo) packets. The choice also amortizes the cost
|
||||||
|
of calling get_xps_queues() over all packets in the flow. To avoid
|
||||||
|
ooo packets, the queue for a flow can subsequently only be changed if
|
||||||
|
skb->ooo_okay is set for a packet in the flow. This flag indicates that
|
||||||
|
there are no outstanding packets in the flow, so the transmit queue can
|
||||||
|
change without the risk of generating out of order packets. The
|
||||||
|
transport layer is responsible for setting ooo_okay appropriately. TCP,
|
||||||
|
for instance, sets the flag when all data for a connection has been
|
||||||
|
acknowledged.
|
||||||
|
|
||||||
|
==== XPS Configuration
|
||||||
|
|
||||||
|
XPS is only available if the kconfig symbol CONFIG_XPS is enabled (on by
|
||||||
|
default for SMP). The functionality remains disabled until explicitly
|
||||||
|
configured. To enable XPS, the bitmap of CPUs that may use a transmit
|
||||||
|
queue is configured using the sysfs file entry:
|
||||||
|
|
||||||
|
/sys/class/net/<dev>/queues/tx-<n>/xps_cpus
|
||||||
|
|
||||||
|
== Suggested Configuration
|
||||||
|
|
||||||
|
For a network device with a single transmission queue, XPS configuration
|
||||||
|
has no effect, since there is no choice in this case. In a multi-queue
|
||||||
|
system, XPS is preferably configured so that each CPU maps onto one queue.
|
||||||
|
If there are as many queues as there are CPUs in the system, then each
|
||||||
|
queue can also map onto one CPU, resulting in exclusive pairings that
|
||||||
|
experience no contention. If there are fewer queues than CPUs, then the
|
||||||
|
best CPUs to share a given queue are probably those that share the cache
|
||||||
|
with the CPU that processes transmit completions for that queue
|
||||||
|
(transmit interrupts).
|
||||||
|
|
||||||
|
|
||||||
|
Further Information
|
||||||
|
===================
|
||||||
|
RPS and RFS were introduced in kernel 2.6.35. XPS was incorporated into
|
||||||
|
2.6.38. Original patches were submitted by Tom Herbert
|
||||||
|
(therbert@google.com)
|
||||||
|
|
||||||
|
Accelerated RFS was introduced in 2.6.35. Original patches were
|
||||||
|
submitted by Ben Hutchings (bhutchings@solarflare.com)
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
Tom Herbert (therbert@google.com)
|
||||||
|
Willem de Bruijn (willemb@google.com)
|
|
@ -54,11 +54,10 @@ referred to as subsystem-level callbacks in what follows.
|
||||||
By default, the callbacks are always invoked in process context with interrupts
|
By default, the callbacks are always invoked in process context with interrupts
|
||||||
enabled. However, subsystems can use the pm_runtime_irq_safe() helper function
|
enabled. However, subsystems can use the pm_runtime_irq_safe() helper function
|
||||||
to tell the PM core that a device's ->runtime_suspend() and ->runtime_resume()
|
to tell the PM core that a device's ->runtime_suspend() and ->runtime_resume()
|
||||||
callbacks should be invoked in atomic context with interrupts disabled
|
callbacks should be invoked in atomic context with interrupts disabled.
|
||||||
(->runtime_idle() is still invoked the default way). This implies that these
|
This implies that these callback routines must not block or sleep, but it also
|
||||||
callback routines must not block or sleep, but it also means that the
|
means that the synchronous helper functions listed at the end of Section 4 can
|
||||||
synchronous helper functions listed at the end of Section 4 can be used within
|
be used within an interrupt handler or in an atomic context.
|
||||||
an interrupt handler or in an atomic context.
|
|
||||||
|
|
||||||
The subsystem-level suspend callback is _entirely_ _responsible_ for handling
|
The subsystem-level suspend callback is _entirely_ _responsible_ for handling
|
||||||
the suspend of the device as appropriate, which may, but need not include
|
the suspend of the device as appropriate, which may, but need not include
|
||||||
|
@ -432,8 +431,7 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
||||||
|
|
||||||
void pm_runtime_irq_safe(struct device *dev);
|
void pm_runtime_irq_safe(struct device *dev);
|
||||||
- set the power.irq_safe flag for the device, causing the runtime-PM
|
- set the power.irq_safe flag for the device, causing the runtime-PM
|
||||||
suspend and resume callbacks (but not the idle callback) to be invoked
|
callbacks to be invoked with interrupts off
|
||||||
with interrupts disabled
|
|
||||||
|
|
||||||
void pm_runtime_mark_last_busy(struct device *dev);
|
void pm_runtime_mark_last_busy(struct device *dev);
|
||||||
- set the power.last_busy field to the current time
|
- set the power.last_busy field to the current time
|
||||||
|
@ -483,6 +481,7 @@ pm_runtime_suspend()
|
||||||
pm_runtime_autosuspend()
|
pm_runtime_autosuspend()
|
||||||
pm_runtime_resume()
|
pm_runtime_resume()
|
||||||
pm_runtime_get_sync()
|
pm_runtime_get_sync()
|
||||||
|
pm_runtime_put_sync()
|
||||||
pm_runtime_put_sync_suspend()
|
pm_runtime_put_sync_suspend()
|
||||||
|
|
||||||
5. Runtime PM Initialization, Device Probing and Removal
|
5. Runtime PM Initialization, Device Probing and Removal
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
Ramoops oops/panic logger
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Sergiu Iordache <sergiu@chromium.org>
|
||||||
|
|
||||||
|
Updated: 8 August 2011
|
||||||
|
|
||||||
|
0. Introduction
|
||||||
|
|
||||||
|
Ramoops is an oops/panic logger that writes its logs to RAM before the system
|
||||||
|
crashes. It works by logging oopses and panics in a circular buffer. Ramoops
|
||||||
|
needs a system with persistent RAM so that the content of that area can
|
||||||
|
survive after a restart.
|
||||||
|
|
||||||
|
1. Ramoops concepts
|
||||||
|
|
||||||
|
Ramoops uses a predefined memory area to store the dump. The start and size of
|
||||||
|
the memory area are set using two variables:
|
||||||
|
* "mem_address" for the start
|
||||||
|
* "mem_size" for the size. The memory size will be rounded down to a
|
||||||
|
power of two.
|
||||||
|
|
||||||
|
The memory area is divided into "record_size" chunks (also rounded down to
|
||||||
|
power of two) and each oops/panic writes a "record_size" chunk of
|
||||||
|
information.
|
||||||
|
|
||||||
|
Dumping both oopses and panics can be done by setting 1 in the "dump_oops"
|
||||||
|
variable while setting 0 in that variable dumps only the panics.
|
||||||
|
|
||||||
|
The module uses a counter to record multiple dumps but the counter gets reset
|
||||||
|
on restart (i.e. new dumps after the restart will overwrite old ones).
|
||||||
|
|
||||||
|
2. Setting the parameters
|
||||||
|
|
||||||
|
Setting the ramoops parameters can be done in 2 different manners:
|
||||||
|
1. Use the module parameters (which have the names of the variables described
|
||||||
|
as before).
|
||||||
|
2. Use a platform device and set the platform data. The parameters can then
|
||||||
|
be set through that platform data. An example of doing that is:
|
||||||
|
|
||||||
|
#include <linux/ramoops.h>
|
||||||
|
[...]
|
||||||
|
|
||||||
|
static struct ramoops_platform_data ramoops_data = {
|
||||||
|
.mem_size = <...>,
|
||||||
|
.mem_address = <...>,
|
||||||
|
.record_size = <...>,
|
||||||
|
.dump_oops = <...>,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device ramoops_dev = {
|
||||||
|
.name = "ramoops",
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &ramoops_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
[... inside a function ...]
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = platform_device_register(&ramoops_dev);
|
||||||
|
if (ret) {
|
||||||
|
printk(KERN_ERR "unable to register platform device\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
3. Dump format
|
||||||
|
|
||||||
|
The data dump begins with a header, currently defined as "====" followed by a
|
||||||
|
timestamp and a new line. The dump then continues with the actual data.
|
||||||
|
|
||||||
|
4. Reading the data
|
||||||
|
|
||||||
|
The dump data can be read from memory (through /dev/mem or other means).
|
||||||
|
Getting the module parameters, which are needed in order to parse the data, can
|
||||||
|
be done through /sys/module/ramoops/parameters/* .
|
|
@ -1,3 +1,11 @@
|
||||||
|
Release Date : Tue. Jul 26, 2011 17:00:00 PST 2010 -
|
||||||
|
(emaild-id:megaraidlinux@lsi.com)
|
||||||
|
Adam Radford
|
||||||
|
Current Version : 00.00.05.40-rc1
|
||||||
|
Old Version : 00.00.05.38-rc1
|
||||||
|
1. Fix FastPath I/O to work with degraded RAID 1.
|
||||||
|
2. Add .change_queue_depth support.
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
Release Date : Wed. May 11, 2011 17:00:00 PST 2010 -
|
Release Date : Wed. May 11, 2011 17:00:00 PST 2010 -
|
||||||
(emaild-id:megaraidlinux@lsi.com)
|
(emaild-id:megaraidlinux@lsi.com)
|
||||||
Adam Radford
|
Adam Radford
|
||||||
|
|
|
@ -8,3 +8,6 @@ lguest/
|
||||||
- Extremely simple hypervisor for experimental/educational use.
|
- Extremely simple hypervisor for experimental/educational use.
|
||||||
uml/
|
uml/
|
||||||
- User Mode Linux, builds/runs Linux kernel as a userspace program.
|
- User Mode Linux, builds/runs Linux kernel as a userspace program.
|
||||||
|
virtio.txt
|
||||||
|
- Text version of draft virtio spec.
|
||||||
|
See http://ozlabs.org/~rusty/virtio-spec
|
||||||
|
|
|
@ -1996,6 +1996,9 @@ int main(int argc, char *argv[])
|
||||||
/* We use a simple helper to copy the arguments separated by spaces. */
|
/* We use a simple helper to copy the arguments separated by spaces. */
|
||||||
concat((char *)(boot + 1), argv+optind+2);
|
concat((char *)(boot + 1), argv+optind+2);
|
||||||
|
|
||||||
|
/* Set kernel alignment to 16M (CONFIG_PHYSICAL_ALIGN) */
|
||||||
|
boot->hdr.kernel_alignment = 0x1000000;
|
||||||
|
|
||||||
/* Boot protocol version: 2.07 supports the fields for lguest. */
|
/* Boot protocol version: 2.07 supports the fields for lguest. */
|
||||||
boot->hdr.version = 0x207;
|
boot->hdr.version = 0x207;
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
67
MAINTAINERS
67
MAINTAINERS
|
@ -1901,7 +1901,7 @@ S: Maintained
|
||||||
F: drivers/connector/
|
F: drivers/connector/
|
||||||
|
|
||||||
CONTROL GROUPS (CGROUPS)
|
CONTROL GROUPS (CGROUPS)
|
||||||
M: Paul Menage <menage@google.com>
|
M: Paul Menage <paul@paulmenage.org>
|
||||||
M: Li Zefan <lizf@cn.fujitsu.com>
|
M: Li Zefan <lizf@cn.fujitsu.com>
|
||||||
L: containers@lists.linux-foundation.org
|
L: containers@lists.linux-foundation.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -1943,8 +1943,14 @@ S: Maintained
|
||||||
F: arch/x86/kernel/cpuid.c
|
F: arch/x86/kernel/cpuid.c
|
||||||
F: arch/x86/kernel/msr.c
|
F: arch/x86/kernel/msr.c
|
||||||
|
|
||||||
|
CPU POWER MONITORING SUBSYSTEM
|
||||||
|
M: Dominik Brodowski <linux@dominikbrodowski.net>
|
||||||
|
M: Thomas Renninger <trenn@suse.de>
|
||||||
|
S: Maintained
|
||||||
|
F: tools/power/cpupower
|
||||||
|
|
||||||
CPUSETS
|
CPUSETS
|
||||||
M: Paul Menage <menage@google.com>
|
M: Paul Menage <paul@paulmenage.org>
|
||||||
W: http://www.bullopensource.org/cpuset/
|
W: http://www.bullopensource.org/cpuset/
|
||||||
W: http://oss.sgi.com/projects/cpusets/
|
W: http://oss.sgi.com/projects/cpusets/
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -2655,18 +2661,17 @@ S: Maintained
|
||||||
F: arch/x86/math-emu/
|
F: arch/x86/math-emu/
|
||||||
|
|
||||||
FRAME RELAY DLCI/FRAD (Sangoma drivers too)
|
FRAME RELAY DLCI/FRAD (Sangoma drivers too)
|
||||||
M: Mike McLagan <mike.mclagan@linux.org>
|
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Orphan
|
||||||
F: drivers/net/wan/dlci.c
|
F: drivers/net/wan/dlci.c
|
||||||
F: drivers/net/wan/sdla.c
|
F: drivers/net/wan/sdla.c
|
||||||
|
|
||||||
FRAMEBUFFER LAYER
|
FRAMEBUFFER LAYER
|
||||||
M: Paul Mundt <lethal@linux-sh.org>
|
M: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
|
||||||
L: linux-fbdev@vger.kernel.org
|
L: linux-fbdev@vger.kernel.org
|
||||||
W: http://linux-fbdev.sourceforge.net/
|
W: http://linux-fbdev.sourceforge.net/
|
||||||
Q: http://patchwork.kernel.org/project/linux-fbdev/list/
|
Q: http://patchwork.kernel.org/project/linux-fbdev/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/fbdev-2.6.git
|
T: git git://github.com/schandinat/linux-2.6.git fbdev-next
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/fb/
|
F: Documentation/fb/
|
||||||
F: Documentation/devicetree/bindings/fb/
|
F: Documentation/devicetree/bindings/fb/
|
||||||
|
@ -3379,6 +3384,12 @@ F: drivers/net/ixgb/
|
||||||
F: drivers/net/ixgbe/
|
F: drivers/net/ixgbe/
|
||||||
F: drivers/net/ixgbevf/
|
F: drivers/net/ixgbevf/
|
||||||
|
|
||||||
|
INTEL MRST PMU DRIVER
|
||||||
|
M: Len Brown <len.brown@intel.com>
|
||||||
|
L: linux-pm@lists.linux-foundation.org
|
||||||
|
S: Supported
|
||||||
|
F: arch/x86/platform/mrst/pmu.*
|
||||||
|
|
||||||
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
|
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
S: Orphan
|
S: Orphan
|
||||||
|
@ -3912,9 +3923,9 @@ F: arch/powerpc/platforms/powermac/
|
||||||
F: drivers/macintosh/
|
F: drivers/macintosh/
|
||||||
|
|
||||||
LINUX FOR POWERPC EMBEDDED MPC5XXX
|
LINUX FOR POWERPC EMBEDDED MPC5XXX
|
||||||
M: Grant Likely <grant.likely@secretlab.ca>
|
M: Anatolij Gustschin <agust@denx.de>
|
||||||
L: linuxppc-dev@lists.ozlabs.org
|
L: linuxppc-dev@lists.ozlabs.org
|
||||||
T: git git://git.secretlab.ca/git/linux-2.6.git
|
T: git git://git.denx.de/linux-2.6-agust.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/powerpc/platforms/512x/
|
F: arch/powerpc/platforms/512x/
|
||||||
F: arch/powerpc/platforms/52xx/
|
F: arch/powerpc/platforms/52xx/
|
||||||
|
@ -4168,6 +4179,13 @@ S: Orphan
|
||||||
F: drivers/video/matrox/matroxfb_*
|
F: drivers/video/matrox/matroxfb_*
|
||||||
F: include/linux/matroxfb.h
|
F: include/linux/matroxfb.h
|
||||||
|
|
||||||
|
MAX1668 TEMPERATURE SENSOR DRIVER
|
||||||
|
M: "David George" <david.george@ska.ac.za>
|
||||||
|
L: lm-sensors@lm-sensors.org
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/hwmon/max1668
|
||||||
|
F: drivers/hwmon/max1668.c
|
||||||
|
|
||||||
MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
|
MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
|
||||||
M: "Hans J. Koch" <hjk@hansjkoch.de>
|
M: "Hans J. Koch" <hjk@hansjkoch.de>
|
||||||
L: lm-sensors@lm-sensors.org
|
L: lm-sensors@lm-sensors.org
|
||||||
|
@ -4414,10 +4432,10 @@ F: net/*/netfilter/
|
||||||
F: net/netfilter/
|
F: net/netfilter/
|
||||||
|
|
||||||
NETLABEL
|
NETLABEL
|
||||||
M: Paul Moore <paul.moore@hp.com>
|
M: Paul Moore <paul@paul-moore.com>
|
||||||
W: http://netlabel.sf.net
|
W: http://netlabel.sf.net
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Maintained
|
||||||
F: Documentation/netlabel/
|
F: Documentation/netlabel/
|
||||||
F: include/net/netlabel.h
|
F: include/net/netlabel.h
|
||||||
F: net/netlabel/
|
F: net/netlabel/
|
||||||
|
@ -4450,8 +4468,8 @@ M: "David S. Miller" <davem@davemloft.net>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
W: http://www.linuxfoundation.org/en/Net
|
W: http://www.linuxfoundation.org/en/Net
|
||||||
W: http://patchwork.ozlabs.org/project/netdev/list/
|
W: http://patchwork.ozlabs.org/project/netdev/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: net/
|
F: net/
|
||||||
F: include/net/
|
F: include/net/
|
||||||
|
@ -4462,7 +4480,6 @@ F: include/linux/netdevice.h
|
||||||
NETWORKING [IPv4/IPv6]
|
NETWORKING [IPv4/IPv6]
|
||||||
M: "David S. Miller" <davem@davemloft.net>
|
M: "David S. Miller" <davem@davemloft.net>
|
||||||
M: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
|
M: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
|
||||||
M: "Pekka Savola (ipv6)" <pekkas@netcore.fi>
|
|
||||||
M: James Morris <jmorris@namei.org>
|
M: James Morris <jmorris@namei.org>
|
||||||
M: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
|
M: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
|
||||||
M: Patrick McHardy <kaber@trash.net>
|
M: Patrick McHardy <kaber@trash.net>
|
||||||
|
@ -4475,7 +4492,7 @@ F: include/net/ip*
|
||||||
F: arch/x86/net/*
|
F: arch/x86/net/*
|
||||||
|
|
||||||
NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK)
|
NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK)
|
||||||
M: Paul Moore <paul.moore@hp.com>
|
M: Paul Moore <paul@paul-moore.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
@ -4605,7 +4622,7 @@ F: arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
|
||||||
F: arch/arm/mach-omap2/clockdomain44xx.c
|
F: arch/arm/mach-omap2/clockdomain44xx.c
|
||||||
|
|
||||||
OMAP AUDIO SUPPORT
|
OMAP AUDIO SUPPORT
|
||||||
M: Jarkko Nikula <jhnikula@gmail.com>
|
M: Jarkko Nikula <jarkko.nikula@bitmer.com>
|
||||||
L: alsa-devel@alsa-project.org (subscribers-only)
|
L: alsa-devel@alsa-project.org (subscribers-only)
|
||||||
L: linux-omap@vger.kernel.org
|
L: linux-omap@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -4727,6 +4744,7 @@ S: Maintained
|
||||||
F: drivers/of
|
F: drivers/of
|
||||||
F: include/linux/of*.h
|
F: include/linux/of*.h
|
||||||
K: of_get_property
|
K: of_get_property
|
||||||
|
K: of_match_table
|
||||||
|
|
||||||
OPENRISC ARCHITECTURE
|
OPENRISC ARCHITECTURE
|
||||||
M: Jonas Bonn <jonas@southpole.se>
|
M: Jonas Bonn <jonas@southpole.se>
|
||||||
|
@ -4971,7 +4989,7 @@ M: Paul Mackerras <paulus@samba.org>
|
||||||
M: Ingo Molnar <mingo@elte.hu>
|
M: Ingo Molnar <mingo@elte.hu>
|
||||||
M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
|
M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
|
||||||
S: Supported
|
S: Supported
|
||||||
F: kernel/perf_event*.c
|
F: kernel/events/*
|
||||||
F: include/linux/perf_event.h
|
F: include/linux/perf_event.h
|
||||||
F: arch/*/kernel/perf_event*.c
|
F: arch/*/kernel/perf_event*.c
|
||||||
F: arch/*/kernel/*/perf_event*.c
|
F: arch/*/kernel/*/perf_event*.c
|
||||||
|
@ -5017,6 +5035,17 @@ F: drivers/i2c/busses/i2c-puv3.c
|
||||||
F: drivers/video/fb-puv3.c
|
F: drivers/video/fb-puv3.c
|
||||||
F: drivers/rtc/rtc-puv3.c
|
F: drivers/rtc/rtc-puv3.c
|
||||||
|
|
||||||
|
PMBUS HARDWARE MONITORING DRIVERS
|
||||||
|
M: Guenter Roeck <guenter.roeck@ericsson.com>
|
||||||
|
L: lm-sensors@lm-sensors.org
|
||||||
|
W: http://www.lm-sensors.org/
|
||||||
|
W: http://www.roeck-us.net/linux/drivers/
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/hwmon/pmbus
|
||||||
|
F: drivers/hwmon/pmbus/
|
||||||
|
F: include/linux/i2c/pmbus.h
|
||||||
|
|
||||||
PMC SIERRA MaxRAID DRIVER
|
PMC SIERRA MaxRAID DRIVER
|
||||||
M: Anil Ravindranath <anil_ravindranath@pmc-sierra.com>
|
M: Anil Ravindranath <anil_ravindranath@pmc-sierra.com>
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
|
@ -5521,6 +5550,7 @@ F: include/media/*7146*
|
||||||
|
|
||||||
SAMSUNG AUDIO (ASoC) DRIVERS
|
SAMSUNG AUDIO (ASoC) DRIVERS
|
||||||
M: Jassi Brar <jassisinghbrar@gmail.com>
|
M: Jassi Brar <jassisinghbrar@gmail.com>
|
||||||
|
M: Sangbeom Kim <sbkim73@samsung.com>
|
||||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
S: Supported
|
S: Supported
|
||||||
F: sound/soc/samsung
|
F: sound/soc/samsung
|
||||||
|
@ -6312,6 +6342,7 @@ F: include/linux/sysv_fs.h
|
||||||
TARGET SUBSYSTEM
|
TARGET SUBSYSTEM
|
||||||
M: Nicholas A. Bellinger <nab@linux-iscsi.org>
|
M: Nicholas A. Bellinger <nab@linux-iscsi.org>
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
|
L: target-devel@vger.kernel.org
|
||||||
L: http://groups.google.com/group/linux-iscsi-target-dev
|
L: http://groups.google.com/group/linux-iscsi-target-dev
|
||||||
W: http://www.linux-iscsi.org
|
W: http://www.linux-iscsi.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/lio-core-2.6.git master
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/lio-core-2.6.git master
|
||||||
|
@ -7075,7 +7106,7 @@ S: Supported
|
||||||
F: drivers/mmc/host/vub300.c
|
F: drivers/mmc/host/vub300.c
|
||||||
|
|
||||||
W1 DALLAS'S 1-WIRE BUS
|
W1 DALLAS'S 1-WIRE BUS
|
||||||
M: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
|
M: Evgeniy Polyakov <zbr@ioremap.net>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/w1/
|
F: Documentation/w1/
|
||||||
F: drivers/w1/
|
F: drivers/w1/
|
||||||
|
@ -7345,7 +7376,7 @@ THE REST
|
||||||
M: Linus Torvalds <torvalds@linux-foundation.org>
|
M: Linus Torvalds <torvalds@linux-foundation.org>
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
Q: http://patchwork.kernel.org/project/LKML/list/
|
Q: http://patchwork.kernel.org/project/LKML/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
|
||||||
S: Buried alive in reporters
|
S: Buried alive in reporters
|
||||||
F: *
|
F: *
|
||||||
F: */
|
F: */
|
||||||
|
|
8
Makefile
8
Makefile
|
@ -1,8 +1,8 @@
|
||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 0
|
PATCHLEVEL = 1
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION =
|
EXTRAVERSION = -rc6
|
||||||
NAME = Sneaky Weasel
|
NAME = "Divemaster Edition"
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
# To see a list of typical targets execute "make help"
|
# To see a list of typical targets execute "make help"
|
||||||
|
@ -360,7 +360,7 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
|
||||||
LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include \
|
LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include \
|
||||||
-Iarch/$(hdr-arch)/include/generated -Iinclude \
|
-Iarch/$(hdr-arch)/include/generated -Iinclude \
|
||||||
$(if $(KBUILD_SRC), -I$(srctree)/include) \
|
$(if $(KBUILD_SRC), -I$(srctree)/include) \
|
||||||
-include include/generated/autoconf.h
|
-include $(srctree)/include/linux/kconfig.h
|
||||||
|
|
||||||
KBUILD_CPPFLAGS := -D__KERNEL__
|
KBUILD_CPPFLAGS := -D__KERNEL__
|
||||||
|
|
||||||
|
|
|
@ -178,4 +178,7 @@ config HAVE_ARCH_MUTEX_CPU_RELAX
|
||||||
config HAVE_RCU_TABLE_FREE
|
config HAVE_RCU_TABLE_FREE
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||||
|
bool
|
||||||
|
|
||||||
source "kernel/gcov/Kconfig"
|
source "kernel/gcov/Kconfig"
|
||||||
|
|
|
@ -14,6 +14,7 @@ config ALPHA
|
||||||
select AUTO_IRQ_AFFINITY if SMP
|
select AUTO_IRQ_AFFINITY if SMP
|
||||||
select GENERIC_IRQ_SHOW
|
select GENERIC_IRQ_SHOW
|
||||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||||
|
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||||
help
|
help
|
||||||
The Alpha is a 64-bit general-purpose processor designed and
|
The Alpha is a 64-bit general-purpose processor designed and
|
||||||
marketed by the Digital Equipment Corporation of blessed memory,
|
marketed by the Digital Equipment Corporation of blessed memory,
|
||||||
|
|
|
@ -27,13 +27,4 @@
|
||||||
#define UAC_NOFIX 2
|
#define UAC_NOFIX 2
|
||||||
#define UAC_SIGBUS 4
|
#define UAC_SIGBUS 4
|
||||||
|
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
|
||||||
|
|
||||||
/* This is the shift that is applied to the UAC bits as stored in the
|
|
||||||
per-thread flags. See thread_info.h. */
|
|
||||||
#define UAC_SHIFT 6
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __ASM_ALPHA_SYSINFO_H */
|
#endif /* __ASM_ALPHA_SYSINFO_H */
|
||||||
|
|
|
@ -74,9 +74,9 @@ register struct thread_info *__current_thread_info __asm__("$8");
|
||||||
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
|
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
|
||||||
#define TIF_POLLING_NRFLAG 8 /* poll_idle is polling NEED_RESCHED */
|
#define TIF_POLLING_NRFLAG 8 /* poll_idle is polling NEED_RESCHED */
|
||||||
#define TIF_DIE_IF_KERNEL 9 /* dik recursion lock */
|
#define TIF_DIE_IF_KERNEL 9 /* dik recursion lock */
|
||||||
#define TIF_UAC_NOPRINT 10 /* see sysinfo.h */
|
#define TIF_UAC_NOPRINT 10 /* ! Preserve sequence of following */
|
||||||
#define TIF_UAC_NOFIX 11
|
#define TIF_UAC_NOFIX 11 /* ! flags as they match */
|
||||||
#define TIF_UAC_SIGBUS 12
|
#define TIF_UAC_SIGBUS 12 /* ! userspace part of 'osf_sysinfo' */
|
||||||
#define TIF_MEMDIE 13 /* is terminating due to OOM killer */
|
#define TIF_MEMDIE 13 /* is terminating due to OOM killer */
|
||||||
#define TIF_RESTORE_SIGMASK 14 /* restore signal mask in do_signal */
|
#define TIF_RESTORE_SIGMASK 14 /* restore signal mask in do_signal */
|
||||||
#define TIF_FREEZE 16 /* is freezing for suspend */
|
#define TIF_FREEZE 16 /* is freezing for suspend */
|
||||||
|
@ -97,7 +97,7 @@ register struct thread_info *__current_thread_info __asm__("$8");
|
||||||
#define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \
|
#define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \
|
||||||
| _TIF_SYSCALL_TRACE)
|
| _TIF_SYSCALL_TRACE)
|
||||||
|
|
||||||
#define ALPHA_UAC_SHIFT 10
|
#define ALPHA_UAC_SHIFT TIF_UAC_NOPRINT
|
||||||
#define ALPHA_UAC_MASK (1 << TIF_UAC_NOPRINT | 1 << TIF_UAC_NOFIX | \
|
#define ALPHA_UAC_MASK (1 << TIF_UAC_NOPRINT | 1 << TIF_UAC_NOFIX | \
|
||||||
1 << TIF_UAC_SIGBUS)
|
1 << TIF_UAC_SIGBUS)
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/sysinfo.h>
|
#include <asm/sysinfo.h>
|
||||||
|
#include <asm/thread_info.h>
|
||||||
#include <asm/hwrpb.h>
|
#include <asm/hwrpb.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
|
|
||||||
|
@ -633,9 +634,10 @@ SYSCALL_DEFINE5(osf_getsysinfo, unsigned long, op, void __user *, buffer,
|
||||||
case GSI_UACPROC:
|
case GSI_UACPROC:
|
||||||
if (nbytes < sizeof(unsigned int))
|
if (nbytes < sizeof(unsigned int))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
w = (current_thread_info()->flags >> UAC_SHIFT) & UAC_BITMASK;
|
w = (current_thread_info()->flags >> ALPHA_UAC_SHIFT) &
|
||||||
if (put_user(w, (unsigned int __user *)buffer))
|
UAC_BITMASK;
|
||||||
return -EFAULT;
|
if (put_user(w, (unsigned int __user *)buffer))
|
||||||
|
return -EFAULT;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case GSI_PROC_TYPE:
|
case GSI_PROC_TYPE:
|
||||||
|
@ -756,8 +758,8 @@ SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
|
||||||
case SSIN_UACPROC:
|
case SSIN_UACPROC:
|
||||||
again:
|
again:
|
||||||
old = current_thread_info()->flags;
|
old = current_thread_info()->flags;
|
||||||
new = old & ~(UAC_BITMASK << UAC_SHIFT);
|
new = old & ~(UAC_BITMASK << ALPHA_UAC_SHIFT);
|
||||||
new = new | (w & UAC_BITMASK) << UAC_SHIFT;
|
new = new | (w & UAC_BITMASK) << ALPHA_UAC_SHIFT;
|
||||||
if (cmpxchg(¤t_thread_info()->flags,
|
if (cmpxchg(¤t_thread_info()->flags,
|
||||||
old, new) != old)
|
old, new) != old)
|
||||||
goto again;
|
goto again;
|
||||||
|
|
|
@ -360,7 +360,7 @@ sys_call_table:
|
||||||
.quad sys_newuname
|
.quad sys_newuname
|
||||||
.quad sys_nanosleep /* 340 */
|
.quad sys_nanosleep /* 340 */
|
||||||
.quad sys_mremap
|
.quad sys_mremap
|
||||||
.quad sys_nfsservctl
|
.quad sys_ni_syscall /* old nfsservctl */
|
||||||
.quad sys_setresuid
|
.quad sys_setresuid
|
||||||
.quad sys_getresuid
|
.quad sys_getresuid
|
||||||
.quad sys_pciconfig_read /* 345 */
|
.quad sys_pciconfig_read /* 345 */
|
||||||
|
|
|
@ -195,8 +195,7 @@ config VECTORS_BASE
|
||||||
The base address of exception vectors.
|
The base address of exception vectors.
|
||||||
|
|
||||||
config ARM_PATCH_PHYS_VIRT
|
config ARM_PATCH_PHYS_VIRT
|
||||||
bool "Patch physical to virtual translations at runtime (EXPERIMENTAL)"
|
bool "Patch physical to virtual translations at runtime"
|
||||||
depends on EXPERIMENTAL
|
|
||||||
depends on !XIP_KERNEL && MMU
|
depends on !XIP_KERNEL && MMU
|
||||||
depends on !ARCH_REALVIEW || !SPARSEMEM
|
depends on !ARCH_REALVIEW || !SPARSEMEM
|
||||||
help
|
help
|
||||||
|
@ -1272,6 +1271,18 @@ config ARM_ERRATA_754327
|
||||||
This workaround defines cpu_relax() as smp_mb(), preventing correctly
|
This workaround defines cpu_relax() as smp_mb(), preventing correctly
|
||||||
written polling loops from denying visibility of updates to memory.
|
written polling loops from denying visibility of updates to memory.
|
||||||
|
|
||||||
|
config ARM_ERRATA_364296
|
||||||
|
bool "ARM errata: Possible cache data corruption with hit-under-miss enabled"
|
||||||
|
depends on CPU_V6 && !SMP
|
||||||
|
help
|
||||||
|
This options enables the workaround for the 364296 ARM1136
|
||||||
|
r0p2 erratum (possible cache data corruption with
|
||||||
|
hit-under-miss enabled). It sets the undocumented bit 31 in
|
||||||
|
the auxiliary control register and the FI bit in the control
|
||||||
|
register, thus disabling hit-under-miss without putting the
|
||||||
|
processor into full low interrupt latency mode. ARM11MPCore
|
||||||
|
is not affected.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
source "arch/arm/common/Kconfig"
|
source "arch/arm/common/Kconfig"
|
||||||
|
|
|
@ -82,7 +82,7 @@ asmlinkage void mmc_loader(unsigned char *buf, unsigned long len)
|
||||||
|
|
||||||
|
|
||||||
/* Disable clock to MMC hardware block */
|
/* Disable clock to MMC hardware block */
|
||||||
__raw_writel(__raw_readl(SMSTPCR3) & (1 << 12), SMSTPCR3);
|
__raw_writel(__raw_readl(SMSTPCR3) | (1 << 12), SMSTPCR3);
|
||||||
|
|
||||||
mmc_update_progress(MMC_PROGRESS_DONE);
|
mmc_update_progress(MMC_PROGRESS_DONE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,7 +85,7 @@ asmlinkage void mmc_loader(unsigned short *buf, unsigned long len)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/* Disable clock to SDHI1 hardware block */
|
/* Disable clock to SDHI1 hardware block */
|
||||||
__raw_writel(__raw_readl(SMSTPCR3) & (1 << 13), SMSTPCR3);
|
__raw_writel(__raw_readl(SMSTPCR3) | (1 << 13), SMSTPCR3);
|
||||||
|
|
||||||
mmc_update_progress(MMC_PROGRESS_DONE);
|
mmc_update_progress(MMC_PROGRESS_DONE);
|
||||||
|
|
||||||
|
|
|
@ -45,8 +45,13 @@
|
||||||
#define L2X0_CLEAN_INV_LINE_PA 0x7F0
|
#define L2X0_CLEAN_INV_LINE_PA 0x7F0
|
||||||
#define L2X0_CLEAN_INV_LINE_IDX 0x7F8
|
#define L2X0_CLEAN_INV_LINE_IDX 0x7F8
|
||||||
#define L2X0_CLEAN_INV_WAY 0x7FC
|
#define L2X0_CLEAN_INV_WAY 0x7FC
|
||||||
#define L2X0_LOCKDOWN_WAY_D 0x900
|
/*
|
||||||
#define L2X0_LOCKDOWN_WAY_I 0x904
|
* The lockdown registers repeat 8 times for L310, the L210 has only one
|
||||||
|
* D and one I lockdown register at 0x0900 and 0x0904.
|
||||||
|
*/
|
||||||
|
#define L2X0_LOCKDOWN_WAY_D_BASE 0x900
|
||||||
|
#define L2X0_LOCKDOWN_WAY_I_BASE 0x904
|
||||||
|
#define L2X0_LOCKDOWN_STRIDE 0x08
|
||||||
#define L2X0_TEST_OPERATION 0xF00
|
#define L2X0_TEST_OPERATION 0xF00
|
||||||
#define L2X0_LINE_DATA 0xF10
|
#define L2X0_LINE_DATA 0xF10
|
||||||
#define L2X0_LINE_TAG 0xF30
|
#define L2X0_LINE_TAG 0xF30
|
||||||
|
@ -64,7 +69,7 @@
|
||||||
#define L2X0_AUX_CTRL_MASK 0xc0000fff
|
#define L2X0_AUX_CTRL_MASK 0xc0000fff
|
||||||
#define L2X0_AUX_CTRL_ASSOCIATIVITY_SHIFT 16
|
#define L2X0_AUX_CTRL_ASSOCIATIVITY_SHIFT 16
|
||||||
#define L2X0_AUX_CTRL_WAY_SIZE_SHIFT 17
|
#define L2X0_AUX_CTRL_WAY_SIZE_SHIFT 17
|
||||||
#define L2X0_AUX_CTRL_WAY_SIZE_MASK (0x3 << 17)
|
#define L2X0_AUX_CTRL_WAY_SIZE_MASK (0x7 << 17)
|
||||||
#define L2X0_AUX_CTRL_SHARE_OVERRIDE_SHIFT 22
|
#define L2X0_AUX_CTRL_SHARE_OVERRIDE_SHIFT 22
|
||||||
#define L2X0_AUX_CTRL_NS_LOCKDOWN_SHIFT 26
|
#define L2X0_AUX_CTRL_NS_LOCKDOWN_SHIFT 26
|
||||||
#define L2X0_AUX_CTRL_NS_INT_CTRL_SHIFT 27
|
#define L2X0_AUX_CTRL_NS_INT_CTRL_SHIFT 27
|
||||||
|
|
|
@ -41,7 +41,7 @@ struct arm_pmu_platdata {
|
||||||
* encoded error on failure.
|
* encoded error on failure.
|
||||||
*/
|
*/
|
||||||
extern struct platform_device *
|
extern struct platform_device *
|
||||||
reserve_pmu(enum arm_pmu_type device);
|
reserve_pmu(enum arm_pmu_type type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* release_pmu() - Relinquish control of the performance counters
|
* release_pmu() - Relinquish control of the performance counters
|
||||||
|
@ -62,26 +62,26 @@ release_pmu(enum arm_pmu_type type);
|
||||||
* the actual hardware initialisation.
|
* the actual hardware initialisation.
|
||||||
*/
|
*/
|
||||||
extern int
|
extern int
|
||||||
init_pmu(enum arm_pmu_type device);
|
init_pmu(enum arm_pmu_type type);
|
||||||
|
|
||||||
#else /* CONFIG_CPU_HAS_PMU */
|
#else /* CONFIG_CPU_HAS_PMU */
|
||||||
|
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
|
|
||||||
static inline struct platform_device *
|
static inline struct platform_device *
|
||||||
reserve_pmu(enum arm_pmu_type device)
|
reserve_pmu(enum arm_pmu_type type)
|
||||||
{
|
{
|
||||||
return ERR_PTR(-ENODEV);
|
return ERR_PTR(-ENODEV);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
release_pmu(struct platform_device *pdev)
|
release_pmu(enum arm_pmu_type type)
|
||||||
{
|
{
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
init_pmu(enum arm_pmu_type device)
|
init_pmu(enum arm_pmu_type type)
|
||||||
{
|
{
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,9 +112,6 @@ EXPORT_SYMBOL(__put_user_4);
|
||||||
EXPORT_SYMBOL(__put_user_8);
|
EXPORT_SYMBOL(__put_user_8);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* crypto hash */
|
|
||||||
EXPORT_SYMBOL(sha_transform);
|
|
||||||
|
|
||||||
/* gcc lib functions */
|
/* gcc lib functions */
|
||||||
EXPORT_SYMBOL(__ashldi3);
|
EXPORT_SYMBOL(__ashldi3);
|
||||||
EXPORT_SYMBOL(__ashrdi3);
|
EXPORT_SYMBOL(__ashrdi3);
|
||||||
|
|
|
@ -178,7 +178,7 @@
|
||||||
CALL(sys_ni_syscall) /* vm86 */
|
CALL(sys_ni_syscall) /* vm86 */
|
||||||
CALL(sys_ni_syscall) /* was sys_query_module */
|
CALL(sys_ni_syscall) /* was sys_query_module */
|
||||||
CALL(sys_poll)
|
CALL(sys_poll)
|
||||||
CALL(sys_nfsservctl)
|
CALL(sys_ni_syscall) /* was nfsservctl */
|
||||||
/* 170 */ CALL(sys_setresgid16)
|
/* 170 */ CALL(sys_setresgid16)
|
||||||
CALL(sys_getresgid16)
|
CALL(sys_getresgid16)
|
||||||
CALL(sys_prctl)
|
CALL(sys_prctl)
|
||||||
|
|
|
@ -195,10 +195,10 @@ ENTRY(iwmmxt_task_disable)
|
||||||
|
|
||||||
@ enable access to CP0 and CP1
|
@ enable access to CP0 and CP1
|
||||||
XSC(mrc p15, 0, r4, c15, c1, 0)
|
XSC(mrc p15, 0, r4, c15, c1, 0)
|
||||||
XSC(orr r4, r4, #0xf)
|
XSC(orr r4, r4, #0x3)
|
||||||
XSC(mcr p15, 0, r4, c15, c1, 0)
|
XSC(mcr p15, 0, r4, c15, c1, 0)
|
||||||
PJ4(mrc p15, 0, r4, c1, c0, 2)
|
PJ4(mrc p15, 0, r4, c1, c0, 2)
|
||||||
PJ4(orr r4, r4, #0x3)
|
PJ4(orr r4, r4, #0xf)
|
||||||
PJ4(mcr p15, 0, r4, c1, c0, 2)
|
PJ4(mcr p15, 0, r4, c1, c0, 2)
|
||||||
|
|
||||||
mov r0, #0 @ nothing to load
|
mov r0, #0 @ nothing to load
|
||||||
|
@ -313,7 +313,7 @@ ENTRY(iwmmxt_task_switch)
|
||||||
teq r2, r3 @ next task owns it?
|
teq r2, r3 @ next task owns it?
|
||||||
movne pc, lr @ no: leave Concan disabled
|
movne pc, lr @ no: leave Concan disabled
|
||||||
|
|
||||||
1: @ flip Conan access
|
1: @ flip Concan access
|
||||||
XSC(eor r1, r1, #0x3)
|
XSC(eor r1, r1, #0x3)
|
||||||
XSC(mcr p15, 0, r1, c15, c1, 0)
|
XSC(mcr p15, 0, r1, c15, c1, 0)
|
||||||
PJ4(eor r1, r1, #0xf)
|
PJ4(eor r1, r1, #0xf)
|
||||||
|
|
|
@ -323,7 +323,11 @@ int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs,
|
||||||
#endif
|
#endif
|
||||||
s = find_mod_section(hdr, sechdrs, ".alt.smp.init");
|
s = find_mod_section(hdr, sechdrs, ".alt.smp.init");
|
||||||
if (s && !is_smp())
|
if (s && !is_smp())
|
||||||
|
#ifdef CONFIG_SMP_ON_UP
|
||||||
fixup_smp((void *)s->sh_addr, s->sh_size);
|
fixup_smp((void *)s->sh_addr, s->sh_size);
|
||||||
|
#else
|
||||||
|
return -EINVAL;
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ static int __devinit pmu_register(struct platform_device *pdev,
|
||||||
{
|
{
|
||||||
if (type < 0 || type >= ARM_NUM_PMU_DEVICES) {
|
if (type < 0 || type >= ARM_NUM_PMU_DEVICES) {
|
||||||
pr_warning("received registration request for unknown "
|
pr_warning("received registration request for unknown "
|
||||||
"device %d\n", type);
|
"PMU device type %d\n", type);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,17 +112,17 @@ static int __init register_pmu_driver(void)
|
||||||
device_initcall(register_pmu_driver);
|
device_initcall(register_pmu_driver);
|
||||||
|
|
||||||
struct platform_device *
|
struct platform_device *
|
||||||
reserve_pmu(enum arm_pmu_type device)
|
reserve_pmu(enum arm_pmu_type type)
|
||||||
{
|
{
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
|
|
||||||
if (test_and_set_bit_lock(device, &pmu_lock)) {
|
if (test_and_set_bit_lock(type, &pmu_lock)) {
|
||||||
pdev = ERR_PTR(-EBUSY);
|
pdev = ERR_PTR(-EBUSY);
|
||||||
} else if (pmu_devices[device] == NULL) {
|
} else if (pmu_devices[type] == NULL) {
|
||||||
clear_bit_unlock(device, &pmu_lock);
|
clear_bit_unlock(type, &pmu_lock);
|
||||||
pdev = ERR_PTR(-ENODEV);
|
pdev = ERR_PTR(-ENODEV);
|
||||||
} else {
|
} else {
|
||||||
pdev = pmu_devices[device];
|
pdev = pmu_devices[type];
|
||||||
}
|
}
|
||||||
|
|
||||||
return pdev;
|
return pdev;
|
||||||
|
@ -130,11 +130,11 @@ reserve_pmu(enum arm_pmu_type device)
|
||||||
EXPORT_SYMBOL_GPL(reserve_pmu);
|
EXPORT_SYMBOL_GPL(reserve_pmu);
|
||||||
|
|
||||||
int
|
int
|
||||||
release_pmu(enum arm_pmu_type device)
|
release_pmu(enum arm_pmu_type type)
|
||||||
{
|
{
|
||||||
if (WARN_ON(!pmu_devices[device]))
|
if (WARN_ON(!pmu_devices[type]))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
clear_bit_unlock(device, &pmu_lock);
|
clear_bit_unlock(type, &pmu_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(release_pmu);
|
EXPORT_SYMBOL_GPL(release_pmu);
|
||||||
|
@ -182,17 +182,17 @@ init_cpu_pmu(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
init_pmu(enum arm_pmu_type device)
|
init_pmu(enum arm_pmu_type type)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
switch (device) {
|
switch (type) {
|
||||||
case ARM_PMU_DEVICE_CPU:
|
case ARM_PMU_DEVICE_CPU:
|
||||||
err = init_cpu_pmu();
|
err = init_cpu_pmu();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pr_warning("attempt to initialise unknown device %d\n",
|
pr_warning("attempt to initialise PMU of unknown "
|
||||||
device);
|
"type %d\n", type);
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/random.h>
|
#include <linux/random.h>
|
||||||
#include <linux/hw_breakpoint.h>
|
#include <linux/hw_breakpoint.h>
|
||||||
|
#include <linux/cpuidle.h>
|
||||||
|
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/leds.h>
|
#include <asm/leds.h>
|
||||||
|
@ -196,7 +197,8 @@ void cpu_idle(void)
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
} else {
|
} else {
|
||||||
stop_critical_timings();
|
stop_critical_timings();
|
||||||
pm_idle();
|
if (cpuidle_idle_call())
|
||||||
|
pm_idle();
|
||||||
start_critical_timings();
|
start_critical_timings();
|
||||||
/*
|
/*
|
||||||
* This will eventually be removed - pm_idle
|
* This will eventually be removed - pm_idle
|
||||||
|
|
|
@ -57,7 +57,8 @@ relocate_new_kernel:
|
||||||
mov r0,#0
|
mov r0,#0
|
||||||
ldr r1,kexec_mach_type
|
ldr r1,kexec_mach_type
|
||||||
ldr r2,kexec_boot_atags
|
ldr r2,kexec_boot_atags
|
||||||
mov pc,lr
|
ARM( mov pc, lr )
|
||||||
|
THUMB( bx lr )
|
||||||
|
|
||||||
.align
|
.align
|
||||||
|
|
||||||
|
|
|
@ -280,18 +280,19 @@ static void __init cacheid_init(void)
|
||||||
if (arch >= CPU_ARCH_ARMv6) {
|
if (arch >= CPU_ARCH_ARMv6) {
|
||||||
if ((cachetype & (7 << 29)) == 4 << 29) {
|
if ((cachetype & (7 << 29)) == 4 << 29) {
|
||||||
/* ARMv7 register format */
|
/* ARMv7 register format */
|
||||||
|
arch = CPU_ARCH_ARMv7;
|
||||||
cacheid = CACHEID_VIPT_NONALIASING;
|
cacheid = CACHEID_VIPT_NONALIASING;
|
||||||
if ((cachetype & (3 << 14)) == 1 << 14)
|
if ((cachetype & (3 << 14)) == 1 << 14)
|
||||||
cacheid |= CACHEID_ASID_TAGGED;
|
cacheid |= CACHEID_ASID_TAGGED;
|
||||||
else if (cpu_has_aliasing_icache(CPU_ARCH_ARMv7))
|
|
||||||
cacheid |= CACHEID_VIPT_I_ALIASING;
|
|
||||||
} else if (cachetype & (1 << 23)) {
|
|
||||||
cacheid = CACHEID_VIPT_ALIASING;
|
|
||||||
} else {
|
} else {
|
||||||
cacheid = CACHEID_VIPT_NONALIASING;
|
arch = CPU_ARCH_ARMv6;
|
||||||
if (cpu_has_aliasing_icache(CPU_ARCH_ARMv6))
|
if (cachetype & (1 << 23))
|
||||||
cacheid |= CACHEID_VIPT_I_ALIASING;
|
cacheid = CACHEID_VIPT_ALIASING;
|
||||||
|
else
|
||||||
|
cacheid = CACHEID_VIPT_NONALIASING;
|
||||||
}
|
}
|
||||||
|
if (cpu_has_aliasing_icache(arch))
|
||||||
|
cacheid |= CACHEID_VIPT_I_ALIASING;
|
||||||
} else {
|
} else {
|
||||||
cacheid = CACHEID_VIVT;
|
cacheid = CACHEID_VIVT;
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,8 +137,8 @@ void __cpuinit twd_timer_setup(struct clock_event_device *clk)
|
||||||
clk->max_delta_ns = clockevent_delta2ns(0xffffffff, clk);
|
clk->max_delta_ns = clockevent_delta2ns(0xffffffff, clk);
|
||||||
clk->min_delta_ns = clockevent_delta2ns(0xf, clk);
|
clk->min_delta_ns = clockevent_delta2ns(0xf, clk);
|
||||||
|
|
||||||
|
clockevents_register_device(clk);
|
||||||
|
|
||||||
/* Make sure our local interrupt controller has this enabled */
|
/* Make sure our local interrupt controller has this enabled */
|
||||||
gic_enable_ppi(clk->irq);
|
gic_enable_ppi(clk->irq);
|
||||||
|
|
||||||
clockevents_register_device(clk);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
|
||||||
strchr.o strrchr.o \
|
strchr.o strrchr.o \
|
||||||
testchangebit.o testclearbit.o testsetbit.o \
|
testchangebit.o testclearbit.o testsetbit.o \
|
||||||
ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
|
ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
|
||||||
ucmpdi2.o lib1funcs.o div64.o sha1.o \
|
ucmpdi2.o lib1funcs.o div64.o \
|
||||||
io-readsb.o io-writesb.o io-readsl.o io-writesl.o
|
io-readsb.o io-writesb.o io-readsl.o io-writesl.o
|
||||||
|
|
||||||
mmu-y := clear_user.o copy_page.o getuser.o putuser.o
|
mmu-y := clear_user.o copy_page.o getuser.o putuser.o
|
||||||
|
|
|
@ -1,211 +0,0 @@
|
||||||
/*
|
|
||||||
* linux/arch/arm/lib/sha1.S
|
|
||||||
*
|
|
||||||
* SHA transform optimized for ARM
|
|
||||||
*
|
|
||||||
* Copyright: (C) 2005 by Nicolas Pitre <nico@fluxnic.net>
|
|
||||||
* Created: September 17, 2005
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* The reference implementation for this code is linux/lib/sha1.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* void sha_transform(__u32 *digest, const char *in, __u32 *W)
|
|
||||||
*
|
|
||||||
* Note: the "in" ptr may be unaligned.
|
|
||||||
*/
|
|
||||||
|
|
||||||
ENTRY(sha_transform)
|
|
||||||
|
|
||||||
stmfd sp!, {r4 - r8, lr}
|
|
||||||
|
|
||||||
@ for (i = 0; i < 16; i++)
|
|
||||||
@ W[i] = be32_to_cpu(in[i]);
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
|
||||||
mov r4, r0
|
|
||||||
mov r0, r2
|
|
||||||
mov r2, #64
|
|
||||||
bl memcpy
|
|
||||||
mov r2, r0
|
|
||||||
mov r0, r4
|
|
||||||
#else
|
|
||||||
mov r3, r2
|
|
||||||
mov lr, #16
|
|
||||||
1: ldrb r4, [r1], #1
|
|
||||||
ldrb r5, [r1], #1
|
|
||||||
ldrb r6, [r1], #1
|
|
||||||
ldrb r7, [r1], #1
|
|
||||||
subs lr, lr, #1
|
|
||||||
orr r5, r5, r4, lsl #8
|
|
||||||
orr r6, r6, r5, lsl #8
|
|
||||||
orr r7, r7, r6, lsl #8
|
|
||||||
str r7, [r3], #4
|
|
||||||
bne 1b
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@ for (i = 0; i < 64; i++)
|
|
||||||
@ W[i+16] = ror(W[i+13] ^ W[i+8] ^ W[i+2] ^ W[i], 31);
|
|
||||||
|
|
||||||
sub r3, r2, #4
|
|
||||||
mov lr, #64
|
|
||||||
2: ldr r4, [r3, #4]!
|
|
||||||
subs lr, lr, #1
|
|
||||||
ldr r5, [r3, #8]
|
|
||||||
ldr r6, [r3, #32]
|
|
||||||
ldr r7, [r3, #52]
|
|
||||||
eor r4, r4, r5
|
|
||||||
eor r4, r4, r6
|
|
||||||
eor r4, r4, r7
|
|
||||||
mov r4, r4, ror #31
|
|
||||||
str r4, [r3, #64]
|
|
||||||
bne 2b
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The SHA functions are:
|
|
||||||
*
|
|
||||||
* f1(B,C,D) = (D ^ (B & (C ^ D)))
|
|
||||||
* f2(B,C,D) = (B ^ C ^ D)
|
|
||||||
* f3(B,C,D) = ((B & C) | (D & (B | C)))
|
|
||||||
*
|
|
||||||
* Then the sub-blocks are processed as follows:
|
|
||||||
*
|
|
||||||
* A' = ror(A, 27) + f(B,C,D) + E + K + *W++
|
|
||||||
* B' = A
|
|
||||||
* C' = ror(B, 2)
|
|
||||||
* D' = C
|
|
||||||
* E' = D
|
|
||||||
*
|
|
||||||
* We therefore unroll each loop 5 times to avoid register shuffling.
|
|
||||||
* Also the ror for C (and also D and E which are successivelyderived
|
|
||||||
* from it) is applied in place to cut on an additional mov insn for
|
|
||||||
* each round.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.macro sha_f1, A, B, C, D, E
|
|
||||||
ldr r3, [r2], #4
|
|
||||||
eor ip, \C, \D
|
|
||||||
add \E, r1, \E, ror #2
|
|
||||||
and ip, \B, ip, ror #2
|
|
||||||
add \E, \E, \A, ror #27
|
|
||||||
eor ip, ip, \D, ror #2
|
|
||||||
add \E, \E, r3
|
|
||||||
add \E, \E, ip
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro sha_f2, A, B, C, D, E
|
|
||||||
ldr r3, [r2], #4
|
|
||||||
add \E, r1, \E, ror #2
|
|
||||||
eor ip, \B, \C, ror #2
|
|
||||||
add \E, \E, \A, ror #27
|
|
||||||
eor ip, ip, \D, ror #2
|
|
||||||
add \E, \E, r3
|
|
||||||
add \E, \E, ip
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro sha_f3, A, B, C, D, E
|
|
||||||
ldr r3, [r2], #4
|
|
||||||
add \E, r1, \E, ror #2
|
|
||||||
orr ip, \B, \C, ror #2
|
|
||||||
add \E, \E, \A, ror #27
|
|
||||||
and ip, ip, \D, ror #2
|
|
||||||
add \E, \E, r3
|
|
||||||
and r3, \B, \C, ror #2
|
|
||||||
orr ip, ip, r3
|
|
||||||
add \E, \E, ip
|
|
||||||
.endm
|
|
||||||
|
|
||||||
ldmia r0, {r4 - r8}
|
|
||||||
|
|
||||||
mov lr, #4
|
|
||||||
ldr r1, .L_sha_K + 0
|
|
||||||
|
|
||||||
/* adjust initial values */
|
|
||||||
mov r6, r6, ror #30
|
|
||||||
mov r7, r7, ror #30
|
|
||||||
mov r8, r8, ror #30
|
|
||||||
|
|
||||||
3: subs lr, lr, #1
|
|
||||||
sha_f1 r4, r5, r6, r7, r8
|
|
||||||
sha_f1 r8, r4, r5, r6, r7
|
|
||||||
sha_f1 r7, r8, r4, r5, r6
|
|
||||||
sha_f1 r6, r7, r8, r4, r5
|
|
||||||
sha_f1 r5, r6, r7, r8, r4
|
|
||||||
bne 3b
|
|
||||||
|
|
||||||
ldr r1, .L_sha_K + 4
|
|
||||||
mov lr, #4
|
|
||||||
|
|
||||||
4: subs lr, lr, #1
|
|
||||||
sha_f2 r4, r5, r6, r7, r8
|
|
||||||
sha_f2 r8, r4, r5, r6, r7
|
|
||||||
sha_f2 r7, r8, r4, r5, r6
|
|
||||||
sha_f2 r6, r7, r8, r4, r5
|
|
||||||
sha_f2 r5, r6, r7, r8, r4
|
|
||||||
bne 4b
|
|
||||||
|
|
||||||
ldr r1, .L_sha_K + 8
|
|
||||||
mov lr, #4
|
|
||||||
|
|
||||||
5: subs lr, lr, #1
|
|
||||||
sha_f3 r4, r5, r6, r7, r8
|
|
||||||
sha_f3 r8, r4, r5, r6, r7
|
|
||||||
sha_f3 r7, r8, r4, r5, r6
|
|
||||||
sha_f3 r6, r7, r8, r4, r5
|
|
||||||
sha_f3 r5, r6, r7, r8, r4
|
|
||||||
bne 5b
|
|
||||||
|
|
||||||
ldr r1, .L_sha_K + 12
|
|
||||||
mov lr, #4
|
|
||||||
|
|
||||||
6: subs lr, lr, #1
|
|
||||||
sha_f2 r4, r5, r6, r7, r8
|
|
||||||
sha_f2 r8, r4, r5, r6, r7
|
|
||||||
sha_f2 r7, r8, r4, r5, r6
|
|
||||||
sha_f2 r6, r7, r8, r4, r5
|
|
||||||
sha_f2 r5, r6, r7, r8, r4
|
|
||||||
bne 6b
|
|
||||||
|
|
||||||
ldmia r0, {r1, r2, r3, ip, lr}
|
|
||||||
add r4, r1, r4
|
|
||||||
add r5, r2, r5
|
|
||||||
add r6, r3, r6, ror #2
|
|
||||||
add r7, ip, r7, ror #2
|
|
||||||
add r8, lr, r8, ror #2
|
|
||||||
stmia r0, {r4 - r8}
|
|
||||||
|
|
||||||
ldmfd sp!, {r4 - r8, pc}
|
|
||||||
|
|
||||||
ENDPROC(sha_transform)
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
.L_sha_K:
|
|
||||||
.word 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* void sha_init(__u32 *buf)
|
|
||||||
*/
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
.L_sha_initial_digest:
|
|
||||||
.word 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0
|
|
||||||
|
|
||||||
ENTRY(sha_init)
|
|
||||||
|
|
||||||
str lr, [sp, #-4]!
|
|
||||||
adr r1, .L_sha_initial_digest
|
|
||||||
ldmia r1, {r1, r2, r3, ip, lr}
|
|
||||||
stmia r0, {r1, r2, r3, ip, lr}
|
|
||||||
ldr pc, [sp], #4
|
|
||||||
|
|
||||||
ENDPROC(sha_init)
|
|
|
@ -157,7 +157,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
|
||||||
CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk),
|
CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk),
|
||||||
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk),
|
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk),
|
||||||
CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.0", &tc1_clk),
|
CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.0", &tc1_clk),
|
||||||
CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc1_clk),
|
CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk),
|
||||||
CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
|
CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
|
||||||
CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
|
CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
|
||||||
CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
|
CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
|
||||||
#include <asm/hardware/entry-macro-gic.S>
|
#include <asm/hardware/entry-macro-gic.S>
|
||||||
|
|
||||||
.macro disable_fiq
|
.macro disable_fiq
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
|
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <asm/proc-fns.h>
|
#include <asm/proc-fns.h>
|
||||||
#include <mach/hardware.h>
|
|
||||||
|
|
||||||
static inline void arch_idle(void)
|
static inline void arch_idle(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <mach/hardware.h>
|
|
||||||
#include <mach/cns3xxx.h>
|
#include <mach/cns3xxx.h>
|
||||||
|
|
||||||
#define AMBA_UART_DR(base) (*(volatile unsigned char *)((base) + 0x00))
|
#define AMBA_UART_DR(base) (*(volatile unsigned char *)((base) + 0x00))
|
||||||
|
|
|
@ -49,7 +49,7 @@ static struct cns3xxx_pcie *sysdata_to_cnspci(void *sysdata)
|
||||||
return &cns3xxx_pcie[root->domain];
|
return &cns3xxx_pcie[root->domain];
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct cns3xxx_pcie *pdev_to_cnspci(struct pci_dev *dev)
|
static struct cns3xxx_pcie *pdev_to_cnspci(const struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
return sysdata_to_cnspci(dev->sysdata);
|
return sysdata_to_cnspci(dev->sysdata);
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,6 +115,32 @@ static struct spi_board_info da850evm_spi_info[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_MTD
|
||||||
|
static void da850_evm_m25p80_notify_add(struct mtd_info *mtd)
|
||||||
|
{
|
||||||
|
char *mac_addr = davinci_soc_info.emac_pdata->mac_addr;
|
||||||
|
size_t retlen;
|
||||||
|
|
||||||
|
if (!strcmp(mtd->name, "MAC-Address")) {
|
||||||
|
mtd->read(mtd, 0, ETH_ALEN, &retlen, mac_addr);
|
||||||
|
if (retlen == ETH_ALEN)
|
||||||
|
pr_info("Read MAC addr from SPI Flash: %pM\n",
|
||||||
|
mac_addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct mtd_notifier da850evm_spi_notifier = {
|
||||||
|
.add = da850_evm_m25p80_notify_add,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void da850_evm_setup_mac_addr(void)
|
||||||
|
{
|
||||||
|
register_mtd_user(&da850evm_spi_notifier);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static void da850_evm_setup_mac_addr(void) { }
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct mtd_partition da850_evm_norflash_partition[] = {
|
static struct mtd_partition da850_evm_norflash_partition[] = {
|
||||||
{
|
{
|
||||||
.name = "bootloaders + env",
|
.name = "bootloaders + env",
|
||||||
|
@ -1244,6 +1270,8 @@ static __init void da850_evm_init(void)
|
||||||
if (ret)
|
if (ret)
|
||||||
pr_warning("da850_evm_init: sata registration failed: %d\n",
|
pr_warning("da850_evm_init: sata registration failed: %d\n",
|
||||||
ret);
|
ret);
|
||||||
|
|
||||||
|
da850_evm_setup_mac_addr();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
||||||
|
|
|
@ -243,7 +243,7 @@
|
||||||
#define PSC_STATE_DISABLE 2
|
#define PSC_STATE_DISABLE 2
|
||||||
#define PSC_STATE_ENABLE 3
|
#define PSC_STATE_ENABLE 3
|
||||||
|
|
||||||
#define MDSTAT_STATE_MASK 0x1f
|
#define MDSTAT_STATE_MASK 0x3f
|
||||||
#define MDCTL_FORCE BIT(31)
|
#define MDCTL_FORCE BIT(31)
|
||||||
|
|
||||||
#ifndef __ASSEMBLER__
|
#ifndef __ASSEMBLER__
|
||||||
|
|
|
@ -217,7 +217,11 @@ ddr2clk_stop_done:
|
||||||
ENDPROC(davinci_ddr_psc_config)
|
ENDPROC(davinci_ddr_psc_config)
|
||||||
|
|
||||||
CACHE_FLUSH:
|
CACHE_FLUSH:
|
||||||
.word arm926_flush_kern_cache_all
|
#ifdef CONFIG_CPU_V6
|
||||||
|
.word v6_flush_kern_cache_all
|
||||||
|
#else
|
||||||
|
.word arm926_flush_kern_cache_all
|
||||||
|
#endif
|
||||||
|
|
||||||
ENTRY(davinci_cpu_suspend_sz)
|
ENTRY(davinci_cpu_suspend_sz)
|
||||||
.word . - davinci_cpu_suspend
|
.word . - davinci_cpu_suspend
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* TS72xx memory map:
|
* TS72xx memory map:
|
||||||
*
|
*
|
||||||
* virt phys size
|
* virt phys size
|
||||||
* febff000 22000000 4K model number register
|
* febff000 22000000 4K model number register (bits 0-2)
|
||||||
* febfe000 22400000 4K options register
|
* febfe000 22400000 4K options register
|
||||||
* febfd000 22800000 4K options register #2
|
* febfd000 22800000 4K options register #2
|
||||||
* febf9000 10800000 4K TS-5620 RTC index register
|
* febf9000 10800000 4K TS-5620 RTC index register
|
||||||
|
@ -20,6 +20,9 @@
|
||||||
#define TS72XX_MODEL_TS7200 0x00
|
#define TS72XX_MODEL_TS7200 0x00
|
||||||
#define TS72XX_MODEL_TS7250 0x01
|
#define TS72XX_MODEL_TS7250 0x01
|
||||||
#define TS72XX_MODEL_TS7260 0x02
|
#define TS72XX_MODEL_TS7260 0x02
|
||||||
|
#define TS72XX_MODEL_TS7300 0x03
|
||||||
|
#define TS72XX_MODEL_TS7400 0x04
|
||||||
|
#define TS72XX_MODEL_MASK 0x07
|
||||||
|
|
||||||
|
|
||||||
#define TS72XX_OPTIONS_PHYS_BASE 0x22400000
|
#define TS72XX_OPTIONS_PHYS_BASE 0x22400000
|
||||||
|
@ -51,19 +54,34 @@
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
static inline int ts72xx_model(void)
|
||||||
|
{
|
||||||
|
return __raw_readb(TS72XX_MODEL_VIRT_BASE) & TS72XX_MODEL_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int board_is_ts7200(void)
|
static inline int board_is_ts7200(void)
|
||||||
{
|
{
|
||||||
return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7200;
|
return ts72xx_model() == TS72XX_MODEL_TS7200;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int board_is_ts7250(void)
|
static inline int board_is_ts7250(void)
|
||||||
{
|
{
|
||||||
return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7250;
|
return ts72xx_model() == TS72XX_MODEL_TS7250;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int board_is_ts7260(void)
|
static inline int board_is_ts7260(void)
|
||||||
{
|
{
|
||||||
return __raw_readb(TS72XX_MODEL_VIRT_BASE) == TS72XX_MODEL_TS7260;
|
return ts72xx_model() == TS72XX_MODEL_TS7260;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int board_is_ts7300(void)
|
||||||
|
{
|
||||||
|
return ts72xx_model() == TS72XX_MODEL_TS7300;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int board_is_ts7400(void)
|
||||||
|
{
|
||||||
|
return ts72xx_model() == TS72XX_MODEL_TS7400;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int is_max197_installed(void)
|
static inline int is_max197_installed(void)
|
||||||
|
|
|
@ -520,7 +520,7 @@ static struct clk init_clocks_off[] = {
|
||||||
.ctrlbit = (1 << 21),
|
.ctrlbit = (1 << 21),
|
||||||
}, {
|
}, {
|
||||||
.name = "ac97",
|
.name = "ac97",
|
||||||
.id = -1,
|
.devname = "samsung-ac97",
|
||||||
.enable = exynos4_clk_ip_peril_ctrl,
|
.enable = exynos4_clk_ip_peril_ctrl,
|
||||||
.ctrlbit = (1 << 27),
|
.ctrlbit = (1 << 27),
|
||||||
}, {
|
}, {
|
||||||
|
|
|
@ -24,12 +24,13 @@
|
||||||
#include <plat/exynos4.h>
|
#include <plat/exynos4.h>
|
||||||
#include <plat/adc-core.h>
|
#include <plat/adc-core.h>
|
||||||
#include <plat/sdhci.h>
|
#include <plat/sdhci.h>
|
||||||
#include <plat/devs.h>
|
|
||||||
#include <plat/fb-core.h>
|
#include <plat/fb-core.h>
|
||||||
#include <plat/fimc-core.h>
|
#include <plat/fimc-core.h>
|
||||||
#include <plat/iic-core.h>
|
#include <plat/iic-core.h>
|
||||||
|
#include <plat/reset.h>
|
||||||
|
|
||||||
#include <mach/regs-irq.h>
|
#include <mach/regs-irq.h>
|
||||||
|
#include <mach/regs-pmu.h>
|
||||||
|
|
||||||
extern int combiner_init(unsigned int combiner_nr, void __iomem *base,
|
extern int combiner_init(unsigned int combiner_nr, void __iomem *base,
|
||||||
unsigned int irq_start);
|
unsigned int irq_start);
|
||||||
|
@ -128,6 +129,11 @@ static void exynos4_idle(void)
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void exynos4_sw_reset(void)
|
||||||
|
{
|
||||||
|
__raw_writel(0x1, S5P_SWRESET);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* exynos4_map_io
|
* exynos4_map_io
|
||||||
*
|
*
|
||||||
|
@ -241,5 +247,8 @@ int __init exynos4_init(void)
|
||||||
/* set idle function */
|
/* set idle function */
|
||||||
pm_idle = exynos4_idle;
|
pm_idle = exynos4_idle;
|
||||||
|
|
||||||
|
/* set sw_reset function */
|
||||||
|
s5p_reset_hook = exynos4_sw_reset;
|
||||||
|
|
||||||
return sysdev_register(&exynos4_sysdev);
|
return sysdev_register(&exynos4_sysdev);
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,9 +80,8 @@
|
||||||
#define IRQ_HSMMC3 IRQ_SPI(76)
|
#define IRQ_HSMMC3 IRQ_SPI(76)
|
||||||
#define IRQ_DWMCI IRQ_SPI(77)
|
#define IRQ_DWMCI IRQ_SPI(77)
|
||||||
|
|
||||||
#define IRQ_MIPICSI0 IRQ_SPI(78)
|
#define IRQ_MIPI_CSIS0 IRQ_SPI(78)
|
||||||
|
#define IRQ_MIPI_CSIS1 IRQ_SPI(80)
|
||||||
#define IRQ_MIPICSI1 IRQ_SPI(80)
|
|
||||||
|
|
||||||
#define IRQ_ONENAND_AUDI IRQ_SPI(82)
|
#define IRQ_ONENAND_AUDI IRQ_SPI(82)
|
||||||
#define IRQ_ROTATOR IRQ_SPI(83)
|
#define IRQ_ROTATOR IRQ_SPI(83)
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
#define S5P_USE_STANDBY_WFE1 (1 << 25)
|
#define S5P_USE_STANDBY_WFE1 (1 << 25)
|
||||||
#define S5P_USE_MASK ((0x3 << 16) | (0x3 << 24))
|
#define S5P_USE_MASK ((0x3 << 16) | (0x3 << 24))
|
||||||
|
|
||||||
|
#define S5P_SWRESET S5P_PMUREG(0x0400)
|
||||||
|
|
||||||
#define S5P_WAKEUP_STAT S5P_PMUREG(0x0600)
|
#define S5P_WAKEUP_STAT S5P_PMUREG(0x0600)
|
||||||
#define S5P_EINT_WAKEUP_MASK S5P_PMUREG(0x0604)
|
#define S5P_EINT_WAKEUP_MASK S5P_PMUREG(0x0604)
|
||||||
#define S5P_WAKEUP_MASK S5P_PMUREG(0x0608)
|
#define S5P_WAKEUP_MASK S5P_PMUREG(0x0608)
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
|
|
||||||
#include <mach/regs-gpio.h>
|
#include <mach/regs-gpio.h>
|
||||||
|
|
||||||
|
#include <asm/mach/irq.h>
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(eint_lock);
|
static DEFINE_SPINLOCK(eint_lock);
|
||||||
|
|
||||||
static unsigned int eint0_15_data[16];
|
static unsigned int eint0_15_data[16];
|
||||||
|
@ -184,8 +186,11 @@ static inline void exynos4_irq_demux_eint(unsigned int start)
|
||||||
|
|
||||||
static void exynos4_irq_demux_eint16_31(unsigned int irq, struct irq_desc *desc)
|
static void exynos4_irq_demux_eint16_31(unsigned int irq, struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
|
struct irq_chip *chip = irq_get_chip(irq);
|
||||||
|
chained_irq_enter(chip, desc);
|
||||||
exynos4_irq_demux_eint(IRQ_EINT(16));
|
exynos4_irq_demux_eint(IRQ_EINT(16));
|
||||||
exynos4_irq_demux_eint(IRQ_EINT(24));
|
exynos4_irq_demux_eint(IRQ_EINT(24));
|
||||||
|
chained_irq_exit(chip, desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void exynos4_irq_eint0_15(unsigned int irq, struct irq_desc *desc)
|
static void exynos4_irq_eint0_15(unsigned int irq, struct irq_desc *desc)
|
||||||
|
@ -193,6 +198,7 @@ static void exynos4_irq_eint0_15(unsigned int irq, struct irq_desc *desc)
|
||||||
u32 *irq_data = irq_get_handler_data(irq);
|
u32 *irq_data = irq_get_handler_data(irq);
|
||||||
struct irq_chip *chip = irq_get_chip(irq);
|
struct irq_chip *chip = irq_get_chip(irq);
|
||||||
|
|
||||||
|
chained_irq_enter(chip, desc);
|
||||||
chip->irq_mask(&desc->irq_data);
|
chip->irq_mask(&desc->irq_data);
|
||||||
|
|
||||||
if (chip->irq_ack)
|
if (chip->irq_ack)
|
||||||
|
@ -201,6 +207,7 @@ static void exynos4_irq_eint0_15(unsigned int irq, struct irq_desc *desc)
|
||||||
generic_handle_irq(*irq_data);
|
generic_handle_irq(*irq_data);
|
||||||
|
|
||||||
chip->irq_unmask(&desc->irq_data);
|
chip->irq_unmask(&desc->irq_data);
|
||||||
|
chained_irq_exit(chip, desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
int __init exynos4_init_irq_eint(void)
|
int __init exynos4_init_irq_eint(void)
|
||||||
|
|
|
@ -79,7 +79,7 @@ static struct s3c2410_uartcfg universal_uartcfgs[] __initdata = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct regulator_consumer_supply max8952_consumer =
|
static struct regulator_consumer_supply max8952_consumer =
|
||||||
REGULATOR_SUPPLY("vddarm", NULL);
|
REGULATOR_SUPPLY("vdd_arm", NULL);
|
||||||
|
|
||||||
static struct max8952_platform_data universal_max8952_pdata __initdata = {
|
static struct max8952_platform_data universal_max8952_pdata __initdata = {
|
||||||
.gpio_vid0 = EXYNOS4_GPX0(3),
|
.gpio_vid0 = EXYNOS4_GPX0(3),
|
||||||
|
@ -105,7 +105,7 @@ static struct max8952_platform_data universal_max8952_pdata __initdata = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct regulator_consumer_supply lp3974_buck1_consumer =
|
static struct regulator_consumer_supply lp3974_buck1_consumer =
|
||||||
REGULATOR_SUPPLY("vddint", NULL);
|
REGULATOR_SUPPLY("vdd_int", NULL);
|
||||||
|
|
||||||
static struct regulator_consumer_supply lp3974_buck2_consumer =
|
static struct regulator_consumer_supply lp3974_buck2_consumer =
|
||||||
REGULATOR_SUPPLY("vddg3d", NULL);
|
REGULATOR_SUPPLY("vddg3d", NULL);
|
||||||
|
|
|
@ -82,7 +82,7 @@ static int exynos4_usb_phy1_init(struct platform_device *pdev)
|
||||||
|
|
||||||
rstcon &= ~(HOST_LINK_PORT_SWRST_MASK | PHY1_SWRST_MASK);
|
rstcon &= ~(HOST_LINK_PORT_SWRST_MASK | PHY1_SWRST_MASK);
|
||||||
writel(rstcon, EXYNOS4_RSTCON);
|
writel(rstcon, EXYNOS4_RSTCON);
|
||||||
udelay(50);
|
udelay(80);
|
||||||
|
|
||||||
clk_disable(otg_clk);
|
clk_disable(otg_clk);
|
||||||
clk_put(otg_clk);
|
clk_put(otg_clk);
|
||||||
|
|
|
@ -62,6 +62,7 @@ config ARCH_EBSA285_HOST
|
||||||
config ARCH_NETWINDER
|
config ARCH_NETWINDER
|
||||||
bool "NetWinder"
|
bool "NetWinder"
|
||||||
select CLKSRC_I8253
|
select CLKSRC_I8253
|
||||||
|
select CLKEVT_I8253
|
||||||
select FOOTBRIDGE_HOST
|
select FOOTBRIDGE_HOST
|
||||||
select ISA
|
select ISA
|
||||||
select ISA_DMA
|
select ISA_DMA
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
|
#include <video/vga.h>
|
||||||
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
|
@ -331,6 +331,9 @@ int __init mx25_clocks_init(void)
|
||||||
__raw_writel(__raw_readl(CRM_BASE+0x64) | (1 << 7) | (1 << 0),
|
__raw_writel(__raw_readl(CRM_BASE+0x64) | (1 << 7) | (1 << 0),
|
||||||
CRM_BASE + 0x64);
|
CRM_BASE + 0x64);
|
||||||
|
|
||||||
|
/* Clock source for gpt is ahb_div */
|
||||||
|
__raw_writel(__raw_readl(CRM_BASE+0x64) & ~(1 << 5), CRM_BASE + 0x64);
|
||||||
|
|
||||||
mxc_timer_init(&gpt_clk, MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), 54);
|
mxc_timer_init(&gpt_clk, MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), 54);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -310,7 +310,7 @@ static struct sys_timer eukrea_cpuimx27_timer = {
|
||||||
.init = eukrea_cpuimx27_timer_init,
|
.init = eukrea_cpuimx27_timer_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
MACHINE_START(CPUIMX27, "EUKREA CPUIMX27")
|
MACHINE_START(EUKREA_CPUIMX27, "EUKREA CPUIMX27")
|
||||||
.boot_params = MX27_PHYS_OFFSET + 0x100,
|
.boot_params = MX27_PHYS_OFFSET + 0x100,
|
||||||
.map_io = mx27_map_io,
|
.map_io = mx27_map_io,
|
||||||
.init_early = imx27_init_early,
|
.init_early = imx27_init_early,
|
||||||
|
|
|
@ -192,7 +192,7 @@ struct sys_timer eukrea_cpuimx35_timer = {
|
||||||
.init = eukrea_cpuimx35_timer_init,
|
.init = eukrea_cpuimx35_timer_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
MACHINE_START(EUKREA_CPUIMX35, "Eukrea CPUIMX35")
|
MACHINE_START(EUKREA_CPUIMX35SD, "Eukrea CPUIMX35")
|
||||||
/* Maintainer: Eukrea Electromatique */
|
/* Maintainer: Eukrea Electromatique */
|
||||||
.boot_params = MX3x_PHYS_OFFSET + 0x100,
|
.boot_params = MX3x_PHYS_OFFSET + 0x100,
|
||||||
.map_io = mx35_map_io,
|
.map_io = mx35_map_io,
|
||||||
|
|
|
@ -161,7 +161,7 @@ static struct sys_timer eukrea_cpuimx25_timer = {
|
||||||
.init = eukrea_cpuimx25_timer_init,
|
.init = eukrea_cpuimx25_timer_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
MACHINE_START(EUKREA_CPUIMX25, "Eukrea CPUIMX25")
|
MACHINE_START(EUKREA_CPUIMX25SD, "Eukrea CPUIMX25")
|
||||||
/* Maintainer: Eukrea Electromatique */
|
/* Maintainer: Eukrea Electromatique */
|
||||||
.boot_params = MX25_PHYS_OFFSET + 0x100,
|
.boot_params = MX25_PHYS_OFFSET + 0x100,
|
||||||
.map_io = mx25_map_io,
|
.map_io = mx25_map_io,
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <sound/tlv320aic32x4.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <asm/mach/time.h>
|
#include <asm/mach/time.h>
|
||||||
|
@ -196,6 +197,17 @@ static struct pca953x_platform_data visstrim_m10_pca9555_pdata = {
|
||||||
.invert = 0,
|
.invert = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct aic32x4_pdata visstrim_m10_aic32x4_pdata = {
|
||||||
|
.power_cfg = AIC32X4_PWR_MICBIAS_2075_LDOIN |
|
||||||
|
AIC32X4_PWR_AVDD_DVDD_WEAK_DISABLE |
|
||||||
|
AIC32X4_PWR_AIC32X4_LDO_ENABLE |
|
||||||
|
AIC32X4_PWR_CMMODE_LDOIN_RANGE_18_36 |
|
||||||
|
AIC32X4_PWR_CMMODE_HP_LDOIN_POWERED,
|
||||||
|
.micpga_routing = AIC32X4_MICPGA_ROUTE_LMIC_IN2R_10K |
|
||||||
|
AIC32X4_MICPGA_ROUTE_RMIC_IN1L_10K,
|
||||||
|
.swapdacs = false,
|
||||||
|
};
|
||||||
|
|
||||||
static struct i2c_board_info visstrim_m10_i2c_devices[] = {
|
static struct i2c_board_info visstrim_m10_i2c_devices[] = {
|
||||||
{
|
{
|
||||||
I2C_BOARD_INFO("pca9555", 0x20),
|
I2C_BOARD_INFO("pca9555", 0x20),
|
||||||
|
@ -203,6 +215,7 @@ static struct i2c_board_info visstrim_m10_i2c_devices[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
I2C_BOARD_INFO("tlv320aic32x4", 0x18),
|
I2C_BOARD_INFO("tlv320aic32x4", 0x18),
|
||||||
|
.platform_data = &visstrim_m10_aic32x4_pdata,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -468,7 +468,7 @@ static struct i2c_board_info __initdata mx31ads_i2c1_devices[] = {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static void mxc_init_i2c(void)
|
static void __init mxc_init_i2c(void)
|
||||||
{
|
{
|
||||||
i2c_register_board_info(1, mx31ads_i2c1_devices,
|
i2c_register_board_info(1, mx31ads_i2c1_devices,
|
||||||
ARRAY_SIZE(mx31ads_i2c1_devices));
|
ARRAY_SIZE(mx31ads_i2c1_devices));
|
||||||
|
@ -486,7 +486,7 @@ static unsigned int ssi_pins[] = {
|
||||||
MX31_PIN_STXD5__STXD5,
|
MX31_PIN_STXD5__STXD5,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void mxc_init_audio(void)
|
static void __init mxc_init_audio(void)
|
||||||
{
|
{
|
||||||
imx31_add_imx_ssi(0, NULL);
|
imx31_add_imx_ssi(0, NULL);
|
||||||
mxc_iomux_setup_multiple_pins(ssi_pins, ARRAY_SIZE(ssi_pins), "ssi");
|
mxc_iomux_setup_multiple_pins(ssi_pins, ARRAY_SIZE(ssi_pins), "ssi");
|
||||||
|
|
|
@ -192,7 +192,7 @@ static struct mxc_usbh_platform_data usbh2_pdata __initdata = {
|
||||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void lilly1131_usb_init(void)
|
static void __init lilly1131_usb_init(void)
|
||||||
{
|
{
|
||||||
imx31_add_mxc_ehci_hs(1, &usbh1_pdata);
|
imx31_add_mxc_ehci_hs(1, &usbh1_pdata);
|
||||||
|
|
||||||
|
|
|
@ -337,15 +337,15 @@ static unsigned long timer_reload;
|
||||||
static void integrator_clocksource_init(u32 khz)
|
static void integrator_clocksource_init(u32 khz)
|
||||||
{
|
{
|
||||||
void __iomem *base = (void __iomem *)TIMER2_VA_BASE;
|
void __iomem *base = (void __iomem *)TIMER2_VA_BASE;
|
||||||
u32 ctrl = TIMER_CTRL_ENABLE;
|
u32 ctrl = TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC;
|
||||||
|
|
||||||
if (khz >= 1500) {
|
if (khz >= 1500) {
|
||||||
khz /= 16;
|
khz /= 16;
|
||||||
ctrl = TIMER_CTRL_DIV16;
|
ctrl |= TIMER_CTRL_DIV16;
|
||||||
}
|
}
|
||||||
|
|
||||||
writel(ctrl, base + TIMER_CTRL);
|
|
||||||
writel(0xffff, base + TIMER_LOAD);
|
writel(0xffff, base + TIMER_LOAD);
|
||||||
|
writel(ctrl, base + TIMER_CTRL);
|
||||||
|
|
||||||
clocksource_mmio_init(base + TIMER_VALUE, "timer2",
|
clocksource_mmio_init(base + TIMER_VALUE, "timer2",
|
||||||
khz * 1000, 200, 16, clocksource_mmio_readl_down);
|
khz * 1000, 200, 16, clocksource_mmio_readl_down);
|
||||||
|
|
|
@ -16,16 +16,18 @@
|
||||||
#include <mach/gpio.h>
|
#include <mach/gpio.h>
|
||||||
#include <mach/pxa168.h>
|
#include <mach/pxa168.h>
|
||||||
#include <mach/mfp-pxa168.h>
|
#include <mach/mfp-pxa168.h>
|
||||||
#include <mach/mfp-gplugd.h>
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
static unsigned long gplugd_pin_config[] __initdata = {
|
static unsigned long gplugd_pin_config[] __initdata = {
|
||||||
/* UART3 */
|
/* UART3 */
|
||||||
GPIO8_UART3_SOUT,
|
GPIO8_UART3_TXD,
|
||||||
GPIO9_UART3_SIN,
|
GPIO9_UART3_RXD,
|
||||||
GPI1O_UART3_CTS,
|
GPIO1O_UART3_CTS,
|
||||||
GPI11_UART3_RTS,
|
GPIO11_UART3_RTS,
|
||||||
|
|
||||||
|
/* USB OTG PEN */
|
||||||
|
GPIO18_GPIO,
|
||||||
|
|
||||||
/* MMC2 */
|
/* MMC2 */
|
||||||
GPIO28_MMC2_CMD,
|
GPIO28_MMC2_CMD,
|
||||||
|
@ -109,6 +111,12 @@ static unsigned long gplugd_pin_config[] __initdata = {
|
||||||
GPIO105_CI2C_SDA,
|
GPIO105_CI2C_SDA,
|
||||||
GPIO106_CI2C_SCL,
|
GPIO106_CI2C_SCL,
|
||||||
|
|
||||||
|
/* SPI NOR Flash on SSP2 */
|
||||||
|
GPIO107_SSP2_RXD,
|
||||||
|
GPIO108_SSP2_TXD,
|
||||||
|
GPIO110_GPIO, /* SPI_CSn */
|
||||||
|
GPIO111_SSP2_CLK,
|
||||||
|
|
||||||
/* Select JTAG */
|
/* Select JTAG */
|
||||||
GPIO109_GPIO,
|
GPIO109_GPIO,
|
||||||
|
|
||||||
|
@ -154,7 +162,7 @@ static void __init select_disp_freq(void)
|
||||||
"frequency\n");
|
"frequency\n");
|
||||||
} else {
|
} else {
|
||||||
gpio_direction_output(35, 1);
|
gpio_direction_output(35, 1);
|
||||||
gpio_free(104);
|
gpio_free(35);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(gpio_request(85, "DISP_FREQ_SEL_2"))) {
|
if (unlikely(gpio_request(85, "DISP_FREQ_SEL_2"))) {
|
||||||
|
@ -162,7 +170,7 @@ static void __init select_disp_freq(void)
|
||||||
"frequency\n");
|
"frequency\n");
|
||||||
} else {
|
} else {
|
||||||
gpio_direction_output(85, 0);
|
gpio_direction_output(85, 0);
|
||||||
gpio_free(104);
|
gpio_free(85);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue