Merge branches 'hyperv', 'multitouch', 'roccat', 'upstream', 'upstream-fixes', 'wacom' and 'wiimote' into for-linus
This commit is contained in:
2
.mailmap
2
.mailmap
@@ -68,6 +68,7 @@ Juha Yrjola <juha.yrjola@solidboot.com>
|
|||||||
Kay Sievers <kay.sievers@vrfy.org>
|
Kay Sievers <kay.sievers@vrfy.org>
|
||||||
Kenneth W Chen <kenneth.w.chen@intel.com>
|
Kenneth W Chen <kenneth.w.chen@intel.com>
|
||||||
Koushik <raghavendra.koushik@neterion.com>
|
Koushik <raghavendra.koushik@neterion.com>
|
||||||
|
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||||
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
||||||
Linas Vepstas <linas@austin.ibm.com>
|
Linas Vepstas <linas@austin.ibm.com>
|
||||||
Mark Brown <broonie@sirena.org.uk>
|
Mark Brown <broonie@sirena.org.uk>
|
||||||
@@ -111,3 +112,4 @@ Uwe Kleine-König <ukl@pengutronix.de>
|
|||||||
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
||||||
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
||||||
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
||||||
|
Yusuke Goda <goda.yusuke@renesas.com>
|
||||||
|
22
Documentation/ABI/stable/sysfs-acpi-pmprofile
Normal file
22
Documentation/ABI/stable/sysfs-acpi-pmprofile
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
What: /sys/firmware/acpi/pm_profile
|
||||||
|
Date: 03-Nov-2011
|
||||||
|
KernelVersion: v3.2
|
||||||
|
Contact: linux-acpi@vger.kernel.org
|
||||||
|
Description: The ACPI pm_profile sysfs interface exports the platform
|
||||||
|
power management (and performance) requirement expectations
|
||||||
|
as provided by BIOS. The integer value is directly passed as
|
||||||
|
retrieved from the FADT ACPI table.
|
||||||
|
Values: For possible values see ACPI specification:
|
||||||
|
5.2.9 Fixed ACPI Description Table (FADT)
|
||||||
|
Field: Preferred_PM_Profile
|
||||||
|
|
||||||
|
Currently these values are defined by spec:
|
||||||
|
0 Unspecified
|
||||||
|
1 Desktop
|
||||||
|
2 Mobile
|
||||||
|
3 Workstation
|
||||||
|
4 Enterprise Server
|
||||||
|
5 SOHO Server
|
||||||
|
6 Appliance PC
|
||||||
|
7 Performance Server
|
||||||
|
>7 Reserved
|
@@ -206,16 +206,3 @@ Description:
|
|||||||
when a discarded area is read the discard_zeroes_data
|
when a discarded area is read the discard_zeroes_data
|
||||||
parameter will be set to one. Otherwise it will be 0 and
|
parameter will be set to one. Otherwise it will be 0 and
|
||||||
the result of reading a discarded area is undefined.
|
the result of reading a discarded area is undefined.
|
||||||
What: /sys/block/<disk>/alias
|
|
||||||
Date: Aug 2011
|
|
||||||
Contact: Nao Nishijima <nao.nishijima.xt@hitachi.com>
|
|
||||||
Description:
|
|
||||||
A raw device name of a disk does not always point a same disk
|
|
||||||
each boot-up time. Therefore, users have to use persistent
|
|
||||||
device names, which udev creates when the kernel finds a disk,
|
|
||||||
instead of raw device name. However, kernel doesn't show those
|
|
||||||
persistent names on its messages (e.g. dmesg).
|
|
||||||
This file can store an alias of the disk and it would be
|
|
||||||
appeared in kernel messages if it is set. A disk can have an
|
|
||||||
alias which length is up to 255bytes. Users can use alphabets,
|
|
||||||
numbers, "-" and "_" in alias name. This file is writeonce.
|
|
||||||
|
@@ -71,3 +71,10 @@ Description: Value of 1 indicates the controller can honor the reset_devices
|
|||||||
a dump device, as kdump requires resetting the device in order
|
a dump device, as kdump requires resetting the device in order
|
||||||
to work reliably.
|
to work reliably.
|
||||||
|
|
||||||
|
Where: /sys/bus/pci/devices/<dev>/ccissX/transport_mode
|
||||||
|
Date: July 2011
|
||||||
|
Kernel Version: 3.0
|
||||||
|
Contact: iss_storagedev@hp.com
|
||||||
|
Description: Value of "simple" indicates that the controller has been placed
|
||||||
|
in "simple mode". Value of "performant" indicates that the
|
||||||
|
controller has been placed in "performant mode".
|
||||||
|
9
Documentation/ABI/testing/sysfs-driver-hid-multitouch
Normal file
9
Documentation/ABI/testing/sysfs-driver-hid-multitouch
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/quirks
|
||||||
|
Date: November 2011
|
||||||
|
Contact: Benjamin Tissoires <benjamin.tissoires@gmail.com>
|
||||||
|
Description: The integer value of this attribute corresponds to the
|
||||||
|
quirks actually in place to handle the device's protocol.
|
||||||
|
When read, this attribute returns the current settings (see
|
||||||
|
MT_QUIRKS_* in hid-multitouch.c).
|
||||||
|
When written this attribute change on the fly the quirks, then
|
||||||
|
the protocol to handle the device.
|
135
Documentation/ABI/testing/sysfs-driver-hid-roccat-isku
Normal file
135
Documentation/ABI/testing/sysfs-driver-hid-roccat-isku
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/actual_profile
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The integer value of this attribute ranges from 0-4.
|
||||||
|
When read, this attribute returns the number of the actual
|
||||||
|
profile. This value is persistent, so its equivalent to the
|
||||||
|
profile that's active when the device is powered on next time.
|
||||||
|
When written, this file sets the number of the startup profile
|
||||||
|
and the device activates this profile immediately.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/info
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When read, this file returns general data like firmware version.
|
||||||
|
The data is 6 bytes long.
|
||||||
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/key_mask
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one deactivate certain keys like
|
||||||
|
windows and application keys, to prevent accidental presses.
|
||||||
|
Profile number for which this settings occur is included in
|
||||||
|
written data. The data has to be 6 bytes long.
|
||||||
|
Before reading this file, control has to be written to select
|
||||||
|
which profile to read.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/keys_capslock
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one set the function of the
|
||||||
|
capslock key for a specific profile. Profile number is included
|
||||||
|
in written data. The data has to be 6 bytes long.
|
||||||
|
Before reading this file, control has to be written to select
|
||||||
|
which profile to read.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/keys_easyzone
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one set the function of the
|
||||||
|
easyzone keys for a specific profile. Profile number is included
|
||||||
|
in written data. The data has to be 65 bytes long.
|
||||||
|
Before reading this file, control has to be written to select
|
||||||
|
which profile to read.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/keys_function
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one set the function of the
|
||||||
|
function keys for a specific profile. Profile number is included
|
||||||
|
in written data. The data has to be 41 bytes long.
|
||||||
|
Before reading this file, control has to be written to select
|
||||||
|
which profile to read.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/keys_macro
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one set the function of the macro
|
||||||
|
keys for a specific profile. Profile number is included in
|
||||||
|
written data. The data has to be 35 bytes long.
|
||||||
|
Before reading this file, control has to be written to select
|
||||||
|
which profile to read.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/keys_media
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one set the function of the media
|
||||||
|
keys for a specific profile. Profile number is included in
|
||||||
|
written data. The data has to be 29 bytes long.
|
||||||
|
Before reading this file, control has to be written to select
|
||||||
|
which profile to read.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/keys_thumbster
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one set the function of the
|
||||||
|
thumbster keys for a specific profile. Profile number is included
|
||||||
|
in written data. The data has to be 23 bytes long.
|
||||||
|
Before reading this file, control has to be written to select
|
||||||
|
which profile to read.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/last_set
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one set the time in secs since
|
||||||
|
epoch in which the last configuration took place.
|
||||||
|
The data has to be 20 bytes long.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/light
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one set the backlight intensity for
|
||||||
|
a specific profile. Profile number is included in written data.
|
||||||
|
The data has to be 10 bytes long.
|
||||||
|
Before reading this file, control has to be written to select
|
||||||
|
which profile to read.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/macro
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one store macros with max 500
|
||||||
|
keystrokes for a specific button for a specific profile.
|
||||||
|
Button and profile numbers are included in written data.
|
||||||
|
The data has to be 2083 bytes long.
|
||||||
|
Before reading this file, control has to be written to select
|
||||||
|
which profile and key to read.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/control
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one select which data from which
|
||||||
|
profile will be read next. The data has to be 3 bytes long.
|
||||||
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/isku/roccatisku<minor>/talk
|
||||||
|
Date: June 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written, this file lets one trigger easyshift functionality
|
||||||
|
from the host.
|
||||||
|
The data has to be 16 bytes long.
|
||||||
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
@@ -8,3 +8,15 @@ Contact: David Herrmann <dh.herrmann@googlemail.com>
|
|||||||
Description: Make it possible to set/get current led state. Reading from it
|
Description: Make it possible to set/get current led state. Reading from it
|
||||||
returns 0 if led is off and 1 if it is on. Writing 0 to it
|
returns 0 if led is off and 1 if it is on. Writing 0 to it
|
||||||
disables the led, writing 1 enables it.
|
disables the led, writing 1 enables it.
|
||||||
|
|
||||||
|
What: /sys/bus/hid/drivers/wiimote/<dev>/extension
|
||||||
|
Date: August 2011
|
||||||
|
KernelVersion: 3.2
|
||||||
|
Contact: David Herrmann <dh.herrmann@googlemail.com>
|
||||||
|
Description: This file contains the currently connected and initialized
|
||||||
|
extensions. It can be one of: none, motionp, nunchuck, classic,
|
||||||
|
motionp+nunchuck, motionp+classic
|
||||||
|
motionp is the official Nintendo Motion+ extension, nunchuck is
|
||||||
|
the official Nintendo Nunchuck extension and classic is the
|
||||||
|
Nintendo Classic Controller extension. The motionp extension can
|
||||||
|
be combined with the other two.
|
||||||
|
@@ -166,8 +166,8 @@ if (condition)
|
|||||||
else
|
else
|
||||||
do_that();
|
do_that();
|
||||||
|
|
||||||
This does not apply if one branch of a conditional statement is a single
|
This does not apply if only one branch of a conditional statement is a single
|
||||||
statement. Use braces in both branches.
|
statement; in the latter case use braces in both branches:
|
||||||
|
|
||||||
if (condition) {
|
if (condition) {
|
||||||
do_this();
|
do_this();
|
||||||
|
@@ -32,7 +32,7 @@
|
|||||||
The Linux DRM layer contains code intended to support the needs
|
The Linux DRM layer contains code intended to support the needs
|
||||||
of complex graphics devices, usually containing programmable
|
of complex graphics devices, usually containing programmable
|
||||||
pipelines well suited to 3D graphics acceleration. Graphics
|
pipelines well suited to 3D graphics acceleration. Graphics
|
||||||
drivers in the kernel can make use of DRM functions to make
|
drivers in the kernel may make use of DRM functions to make
|
||||||
tasks like memory management, interrupt handling and DMA easier,
|
tasks like memory management, interrupt handling and DMA easier,
|
||||||
and provide a uniform interface to applications.
|
and provide a uniform interface to applications.
|
||||||
</para>
|
</para>
|
||||||
@@ -57,10 +57,10 @@
|
|||||||
existing drivers.
|
existing drivers.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
First, we'll go over some typical driver initialization
|
First, we go over some typical driver initialization
|
||||||
requirements, like setting up command buffers, creating an
|
requirements, like setting up command buffers, creating an
|
||||||
initial output configuration, and initializing core services.
|
initial output configuration, and initializing core services.
|
||||||
Subsequent sections will cover core internals in more detail,
|
Subsequent sections cover core internals in more detail,
|
||||||
providing implementation notes and examples.
|
providing implementation notes and examples.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The core of every DRM driver is struct drm_driver. Drivers
|
The core of every DRM driver is struct drm_driver. Drivers
|
||||||
will typically statically initialize a drm_driver structure,
|
typically statically initialize a drm_driver structure,
|
||||||
then pass it to drm_init() at load time.
|
then pass it to drm_init() at load time.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@@ -88,8 +88,8 @@
|
|||||||
</para>
|
</para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
static struct drm_driver driver = {
|
static struct drm_driver driver = {
|
||||||
/* don't use mtrr's here, the Xserver or user space app should
|
/* Don't use MTRRs here; the Xserver or userspace app should
|
||||||
* deal with them for intel hardware.
|
* deal with them for Intel hardware.
|
||||||
*/
|
*/
|
||||||
.driver_features =
|
.driver_features =
|
||||||
DRIVER_USE_AGP | DRIVER_REQUIRE_AGP |
|
DRIVER_USE_AGP | DRIVER_REQUIRE_AGP |
|
||||||
@@ -154,8 +154,8 @@
|
|||||||
</programlisting>
|
</programlisting>
|
||||||
<para>
|
<para>
|
||||||
In the example above, taken from the i915 DRM driver, the driver
|
In the example above, taken from the i915 DRM driver, the driver
|
||||||
sets several flags indicating what core features it supports.
|
sets several flags indicating what core features it supports;
|
||||||
We'll go over the individual callbacks in later sections. Since
|
we go over the individual callbacks in later sections. Since
|
||||||
flags indicate which features your driver supports to the DRM
|
flags indicate which features your driver supports to the DRM
|
||||||
core, you need to set most of them prior to calling drm_init(). Some,
|
core, you need to set most of them prior to calling drm_init(). Some,
|
||||||
like DRIVER_MODESET can be set later based on user supplied parameters,
|
like DRIVER_MODESET can be set later based on user supplied parameters,
|
||||||
@@ -203,8 +203,8 @@
|
|||||||
<term>DRIVER_HAVE_IRQ</term><term>DRIVER_IRQ_SHARED</term>
|
<term>DRIVER_HAVE_IRQ</term><term>DRIVER_IRQ_SHARED</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
DRIVER_HAVE_IRQ indicates whether the driver has a IRQ
|
DRIVER_HAVE_IRQ indicates whether the driver has an IRQ
|
||||||
handler, DRIVER_IRQ_SHARED indicates whether the device &
|
handler. DRIVER_IRQ_SHARED indicates whether the device &
|
||||||
handler support shared IRQs (note that this is required of
|
handler support shared IRQs (note that this is required of
|
||||||
PCI drivers).
|
PCI drivers).
|
||||||
</para>
|
</para>
|
||||||
@@ -214,8 +214,8 @@
|
|||||||
<term>DRIVER_DMA_QUEUE</term>
|
<term>DRIVER_DMA_QUEUE</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
If the driver queues DMA requests and completes them
|
Should be set if the driver queues DMA requests and completes them
|
||||||
asynchronously, this flag should be set. Deprecated.
|
asynchronously. Deprecated.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@@ -238,7 +238,7 @@
|
|||||||
</variablelist>
|
</variablelist>
|
||||||
<para>
|
<para>
|
||||||
In this specific case, the driver requires AGP and supports
|
In this specific case, the driver requires AGP and supports
|
||||||
IRQs. DMA, as we'll see, is handled by device specific ioctls
|
IRQs. DMA, as discussed later, is handled by device-specific ioctls
|
||||||
in this case. It also supports the kernel mode setting APIs, though
|
in this case. It also supports the kernel mode setting APIs, though
|
||||||
unlike in the actual i915 driver source, this example unconditionally
|
unlike in the actual i915 driver source, this example unconditionally
|
||||||
exports KMS capability.
|
exports KMS capability.
|
||||||
@@ -269,36 +269,34 @@
|
|||||||
initial output configuration.
|
initial output configuration.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Note that the tasks performed at driver load time must not
|
If compatibility is a concern (e.g. with drivers converted over
|
||||||
conflict with DRM client requirements. For instance, if user
|
to the new interfaces from the old ones), care must be taken to
|
||||||
|
prevent device initialization and control that is incompatible with
|
||||||
|
currently active userspace drivers. For instance, if user
|
||||||
level mode setting drivers are in use, it would be problematic
|
level mode setting drivers are in use, it would be problematic
|
||||||
to perform output discovery & configuration at load time.
|
to perform output discovery & configuration at load time.
|
||||||
Likewise, if pre-memory management aware user level drivers are
|
Likewise, if user-level drivers unaware of memory management are
|
||||||
in use, memory management and command buffer setup may need to
|
in use, memory management and command buffer setup may need to
|
||||||
be omitted. These requirements are driver specific, and care
|
be omitted. These requirements are driver-specific, and care
|
||||||
needs to be taken to keep both old and new applications and
|
needs to be taken to keep both old and new applications and
|
||||||
libraries working. The i915 driver supports the "modeset"
|
libraries working. The i915 driver supports the "modeset"
|
||||||
module parameter to control whether advanced features are
|
module parameter to control whether advanced features are
|
||||||
enabled at load time or in legacy fashion. If compatibility is
|
enabled at load time or in legacy fashion.
|
||||||
a concern (e.g. with drivers converted over to the new interfaces
|
|
||||||
from the old ones), care must be taken to prevent incompatible
|
|
||||||
device initialization and control with the currently active
|
|
||||||
userspace drivers.
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
<title>Driver private & performance counters</title>
|
<title>Driver private & performance counters</title>
|
||||||
<para>
|
<para>
|
||||||
The driver private hangs off the main drm_device structure and
|
The driver private hangs off the main drm_device structure and
|
||||||
can be used for tracking various device specific bits of
|
can be used for tracking various device-specific bits of
|
||||||
information, like register offsets, command buffer status,
|
information, like register offsets, command buffer status,
|
||||||
register state for suspend/resume, etc. At load time, a
|
register state for suspend/resume, etc. At load time, a
|
||||||
driver can simply allocate one and set drm_device.dev_priv
|
driver may simply allocate one and set drm_device.dev_priv
|
||||||
appropriately; at unload the driver can free it and set
|
appropriately; it should be freed and drm_device.dev_priv set
|
||||||
drm_device.dev_priv to NULL.
|
to NULL when the driver is unloaded.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The DRM supports several counters which can be used for rough
|
The DRM supports several counters which may be used for rough
|
||||||
performance characterization. Note that the DRM stat counter
|
performance characterization. Note that the DRM stat counter
|
||||||
system is not often used by applications, and supporting
|
system is not often used by applications, and supporting
|
||||||
additional counters is completely optional.
|
additional counters is completely optional.
|
||||||
@@ -307,15 +305,15 @@
|
|||||||
These interfaces are deprecated and should not be used. If performance
|
These interfaces are deprecated and should not be used. If performance
|
||||||
monitoring is desired, the developer should investigate and
|
monitoring is desired, the developer should investigate and
|
||||||
potentially enhance the kernel perf and tracing infrastructure to export
|
potentially enhance the kernel perf and tracing infrastructure to export
|
||||||
GPU related performance information to performance monitoring
|
GPU related performance information for consumption by performance
|
||||||
tools and applications.
|
monitoring tools and applications.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
<title>Configuring the device</title>
|
<title>Configuring the device</title>
|
||||||
<para>
|
<para>
|
||||||
Obviously, device configuration will be device specific.
|
Obviously, device configuration is device-specific.
|
||||||
However, there are several common operations: finding a
|
However, there are several common operations: finding a
|
||||||
device's PCI resources, mapping them, and potentially setting
|
device's PCI resources, mapping them, and potentially setting
|
||||||
up an IRQ handler.
|
up an IRQ handler.
|
||||||
@@ -323,10 +321,10 @@
|
|||||||
<para>
|
<para>
|
||||||
Finding & mapping resources is fairly straightforward. The
|
Finding & mapping resources is fairly straightforward. The
|
||||||
DRM wrapper functions, drm_get_resource_start() and
|
DRM wrapper functions, drm_get_resource_start() and
|
||||||
drm_get_resource_len() can be used to find BARs on the given
|
drm_get_resource_len(), may be used to find BARs on the given
|
||||||
drm_device struct. Once those values have been retrieved, the
|
drm_device struct. Once those values have been retrieved, the
|
||||||
driver load function can call drm_addmap() to create a new
|
driver load function can call drm_addmap() to create a new
|
||||||
mapping for the BAR in question. Note you'll probably want a
|
mapping for the BAR in question. Note that you probably want a
|
||||||
drm_local_map_t in your driver private structure to track any
|
drm_local_map_t in your driver private structure to track any
|
||||||
mappings you create.
|
mappings you create.
|
||||||
<!-- !Fdrivers/gpu/drm/drm_bufs.c drm_get_resource_* -->
|
<!-- !Fdrivers/gpu/drm/drm_bufs.c drm_get_resource_* -->
|
||||||
@@ -335,20 +333,20 @@
|
|||||||
<para>
|
<para>
|
||||||
if compatibility with other operating systems isn't a concern
|
if compatibility with other operating systems isn't a concern
|
||||||
(DRM drivers can run under various BSD variants and OpenSolaris),
|
(DRM drivers can run under various BSD variants and OpenSolaris),
|
||||||
native Linux calls can be used for the above, e.g. pci_resource_*
|
native Linux calls may be used for the above, e.g. pci_resource_*
|
||||||
and iomap*/iounmap. See the Linux device driver book for more
|
and iomap*/iounmap. See the Linux device driver book for more
|
||||||
info.
|
info.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Once you have a register map, you can use the DRM_READn() and
|
Once you have a register map, you may use the DRM_READn() and
|
||||||
DRM_WRITEn() macros to access the registers on your device, or
|
DRM_WRITEn() macros to access the registers on your device, or
|
||||||
use driver specific versions to offset into your MMIO space
|
use driver-specific versions to offset into your MMIO space
|
||||||
relative to a driver specific base pointer (see I915_READ for
|
relative to a driver-specific base pointer (see I915_READ for
|
||||||
example).
|
an example).
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
If your device supports interrupt generation, you may want to
|
If your device supports interrupt generation, you may want to
|
||||||
setup an interrupt handler at driver load time as well. This
|
set up an interrupt handler when the driver is loaded. This
|
||||||
is done using the drm_irq_install() function. If your device
|
is done using the drm_irq_install() function. If your device
|
||||||
supports vertical blank interrupts, it should call
|
supports vertical blank interrupts, it should call
|
||||||
drm_vblank_init() to initialize the core vblank handling code before
|
drm_vblank_init() to initialize the core vblank handling code before
|
||||||
@@ -357,7 +355,7 @@
|
|||||||
</para>
|
</para>
|
||||||
<!--!Fdrivers/char/drm/drm_irq.c drm_irq_install-->
|
<!--!Fdrivers/char/drm/drm_irq.c drm_irq_install-->
|
||||||
<para>
|
<para>
|
||||||
Once your interrupt handler is registered (it'll use your
|
Once your interrupt handler is registered (it uses your
|
||||||
drm_driver.irq_handler as the actual interrupt handling
|
drm_driver.irq_handler as the actual interrupt handling
|
||||||
function), you can safely enable interrupts on your device,
|
function), you can safely enable interrupts on your device,
|
||||||
assuming any other state your interrupt handler uses is also
|
assuming any other state your interrupt handler uses is also
|
||||||
@@ -371,10 +369,10 @@
|
|||||||
using the pci_map_rom() call, a convenience function that
|
using the pci_map_rom() call, a convenience function that
|
||||||
takes care of mapping the actual ROM, whether it has been
|
takes care of mapping the actual ROM, whether it has been
|
||||||
shadowed into memory (typically at address 0xc0000) or exists
|
shadowed into memory (typically at address 0xc0000) or exists
|
||||||
on the PCI device in the ROM BAR. Note that once you've
|
on the PCI device in the ROM BAR. Note that after the ROM
|
||||||
mapped the ROM and extracted any necessary information, be
|
has been mapped and any necessary information has been extracted,
|
||||||
sure to unmap it; on many devices the ROM address decoder is
|
it should be unmapped; on many devices, the ROM address decoder is
|
||||||
shared with other BARs, so leaving it mapped can cause
|
shared with other BARs, so leaving it mapped could cause
|
||||||
undesired behavior like hangs or memory corruption.
|
undesired behavior like hangs or memory corruption.
|
||||||
<!--!Fdrivers/pci/rom.c pci_map_rom-->
|
<!--!Fdrivers/pci/rom.c pci_map_rom-->
|
||||||
</para>
|
</para>
|
||||||
@@ -389,9 +387,9 @@
|
|||||||
should support a memory manager.
|
should support a memory manager.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
If your driver supports memory management (it should!), you'll
|
If your driver supports memory management (it should!), you
|
||||||
need to set that up at load time as well. How you initialize
|
need to set that up at load time as well. How you initialize
|
||||||
it depends on which memory manager you're using, TTM or GEM.
|
it depends on which memory manager you're using: TTM or GEM.
|
||||||
</para>
|
</para>
|
||||||
<sect3>
|
<sect3>
|
||||||
<title>TTM initialization</title>
|
<title>TTM initialization</title>
|
||||||
@@ -401,7 +399,7 @@
|
|||||||
and devices with dedicated video RAM (VRAM), i.e. most discrete
|
and devices with dedicated video RAM (VRAM), i.e. most discrete
|
||||||
graphics devices. If your device has dedicated RAM, supporting
|
graphics devices. If your device has dedicated RAM, supporting
|
||||||
TTM is desirable. TTM also integrates tightly with your
|
TTM is desirable. TTM also integrates tightly with your
|
||||||
driver specific buffer execution function. See the radeon
|
driver-specific buffer execution function. See the radeon
|
||||||
driver for examples.
|
driver for examples.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@@ -429,21 +427,21 @@
|
|||||||
created by the memory manager at runtime. Your global TTM should
|
created by the memory manager at runtime. Your global TTM should
|
||||||
have a type of TTM_GLOBAL_TTM_MEM. The size field for the global
|
have a type of TTM_GLOBAL_TTM_MEM. The size field for the global
|
||||||
object should be sizeof(struct ttm_mem_global), and the init and
|
object should be sizeof(struct ttm_mem_global), and the init and
|
||||||
release hooks should point at your driver specific init and
|
release hooks should point at your driver-specific init and
|
||||||
release routines, which will probably eventually call
|
release routines, which probably eventually call
|
||||||
ttm_mem_global_init and ttm_mem_global_release respectively.
|
ttm_mem_global_init and ttm_mem_global_release, respectively.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Once your global TTM accounting structure is set up and initialized
|
Once your global TTM accounting structure is set up and initialized
|
||||||
(done by calling ttm_global_item_ref on the global object you
|
by calling ttm_global_item_ref() on it,
|
||||||
just created), you'll need to create a buffer object TTM to
|
you need to create a buffer object TTM to
|
||||||
provide a pool for buffer object allocation by clients and the
|
provide a pool for buffer object allocation by clients and the
|
||||||
kernel itself. The type of this object should be TTM_GLOBAL_TTM_BO,
|
kernel itself. The type of this object should be TTM_GLOBAL_TTM_BO,
|
||||||
and its size should be sizeof(struct ttm_bo_global). Again,
|
and its size should be sizeof(struct ttm_bo_global). Again,
|
||||||
driver specific init and release functions can be provided,
|
driver-specific init and release functions may be provided,
|
||||||
likely eventually calling ttm_bo_global_init and
|
likely eventually calling ttm_bo_global_init() and
|
||||||
ttm_bo_global_release, respectively. Also like the previous
|
ttm_bo_global_release(), respectively. Also, like the previous
|
||||||
object, ttm_global_item_ref is used to create an initial reference
|
object, ttm_global_item_ref() is used to create an initial reference
|
||||||
count for the TTM, which will call your initialization function.
|
count for the TTM, which will call your initialization function.
|
||||||
</para>
|
</para>
|
||||||
</sect3>
|
</sect3>
|
||||||
@@ -453,27 +451,26 @@
|
|||||||
GEM is an alternative to TTM, designed specifically for UMA
|
GEM is an alternative to TTM, designed specifically for UMA
|
||||||
devices. It has simpler initialization and execution requirements
|
devices. It has simpler initialization and execution requirements
|
||||||
than TTM, but has no VRAM management capability. Core GEM
|
than TTM, but has no VRAM management capability. Core GEM
|
||||||
initialization is comprised of a basic drm_mm_init call to create
|
is initialized by calling drm_mm_init() to create
|
||||||
a GTT DRM MM object, which provides an address space pool for
|
a GTT DRM MM object, which provides an address space pool for
|
||||||
object allocation. In a KMS configuration, the driver will
|
object allocation. In a KMS configuration, the driver
|
||||||
need to allocate and initialize a command ring buffer following
|
needs to allocate and initialize a command ring buffer following
|
||||||
basic GEM initialization. Most UMA devices have a so-called
|
core GEM initialization. A UMA device usually has what is called a
|
||||||
"stolen" memory region, which provides space for the initial
|
"stolen" memory region, which provides space for the initial
|
||||||
framebuffer and large, contiguous memory regions required by the
|
framebuffer and large, contiguous memory regions required by the
|
||||||
device. This space is not typically managed by GEM, and must
|
device. This space is not typically managed by GEM, and it must
|
||||||
be initialized separately into its own DRM MM object.
|
be initialized separately into its own DRM MM object.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Initialization will be driver specific, and will depend on
|
Initialization is driver-specific. In the case of Intel
|
||||||
the architecture of the device. In the case of Intel
|
|
||||||
integrated graphics chips like 965GM, GEM initialization can
|
integrated graphics chips like 965GM, GEM initialization can
|
||||||
be done by calling the internal GEM init function,
|
be done by calling the internal GEM init function,
|
||||||
i915_gem_do_init(). Since the 965GM is a UMA device
|
i915_gem_do_init(). Since the 965GM is a UMA device
|
||||||
(i.e. it doesn't have dedicated VRAM), GEM will manage
|
(i.e. it doesn't have dedicated VRAM), GEM manages
|
||||||
making regular RAM available for GPU operations. Memory set
|
making regular RAM available for GPU operations. Memory set
|
||||||
aside by the BIOS (called "stolen" memory by the i915
|
aside by the BIOS (called "stolen" memory by the i915
|
||||||
driver) will be managed by the DRM memrange allocator; the
|
driver) is managed by the DRM memrange allocator; the
|
||||||
rest of the aperture will be managed by GEM.
|
rest of the aperture is managed by GEM.
|
||||||
<programlisting>
|
<programlisting>
|
||||||
/* Basic memrange allocator for stolen space (aka vram) */
|
/* Basic memrange allocator for stolen space (aka vram) */
|
||||||
drm_memrange_init(&dev_priv->vram, 0, prealloc_size);
|
drm_memrange_init(&dev_priv->vram, 0, prealloc_size);
|
||||||
@@ -483,7 +480,7 @@
|
|||||||
<!--!Edrivers/char/drm/drm_memrange.c-->
|
<!--!Edrivers/char/drm/drm_memrange.c-->
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Once the memory manager has been set up, we can allocate the
|
Once the memory manager has been set up, we may allocate the
|
||||||
command buffer. In the i915 case, this is also done with a
|
command buffer. In the i915 case, this is also done with a
|
||||||
GEM function, i915_gem_init_ringbuffer().
|
GEM function, i915_gem_init_ringbuffer().
|
||||||
</para>
|
</para>
|
||||||
@@ -493,16 +490,25 @@
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Output configuration</title>
|
<title>Output configuration</title>
|
||||||
<para>
|
<para>
|
||||||
The final initialization task is output configuration. This involves
|
The final initialization task is output configuration. This involves:
|
||||||
finding and initializing the CRTCs, encoders and connectors
|
<itemizedlist>
|
||||||
for your device, creating an initial configuration and
|
<listitem>
|
||||||
registering a framebuffer console driver.
|
Finding and initializing the CRTCs, encoders, and connectors
|
||||||
|
for the device.
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
Creating an initial configuration.
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
Registering a framebuffer console driver.
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
</para>
|
</para>
|
||||||
<sect3>
|
<sect3>
|
||||||
<title>Output discovery and initialization</title>
|
<title>Output discovery and initialization</title>
|
||||||
<para>
|
<para>
|
||||||
Several core functions exist to create CRTCs, encoders and
|
Several core functions exist to create CRTCs, encoders, and
|
||||||
connectors, namely drm_crtc_init(), drm_connector_init() and
|
connectors, namely: drm_crtc_init(), drm_connector_init(), and
|
||||||
drm_encoder_init(), along with several "helper" functions to
|
drm_encoder_init(), along with several "helper" functions to
|
||||||
perform common tasks.
|
perform common tasks.
|
||||||
</para>
|
</para>
|
||||||
@@ -555,10 +561,10 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
</programlisting>
|
</programlisting>
|
||||||
<para>
|
<para>
|
||||||
In the example above (again, taken from the i915 driver), a
|
In the example above (again, taken from the i915 driver), a
|
||||||
CRT connector and encoder combination is created. A device
|
CRT connector and encoder combination is created. A device-specific
|
||||||
specific i2c bus is also created, for fetching EDID data and
|
i2c bus is also created for fetching EDID data and
|
||||||
performing monitor detection. Once the process is complete,
|
performing monitor detection. Once the process is complete,
|
||||||
the new connector is registered with sysfs, to make its
|
the new connector is registered with sysfs to make its
|
||||||
properties available to applications.
|
properties available to applications.
|
||||||
</para>
|
</para>
|
||||||
<sect4>
|
<sect4>
|
||||||
@@ -567,12 +573,12 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
Since many PC-class graphics devices have similar display output
|
Since many PC-class graphics devices have similar display output
|
||||||
designs, the DRM provides a set of helper functions to make
|
designs, the DRM provides a set of helper functions to make
|
||||||
output management easier. The core helper routines handle
|
output management easier. The core helper routines handle
|
||||||
encoder re-routing and disabling of unused functions following
|
encoder re-routing and the disabling of unused functions following
|
||||||
mode set. Using the helpers is optional, but recommended for
|
mode setting. Using the helpers is optional, but recommended for
|
||||||
devices with PC-style architectures (i.e. a set of display planes
|
devices with PC-style architectures (i.e. a set of display planes
|
||||||
for feeding pixels to encoders which are in turn routed to
|
for feeding pixels to encoders which are in turn routed to
|
||||||
connectors). Devices with more complex requirements needing
|
connectors). Devices with more complex requirements needing
|
||||||
finer grained management can opt to use the core callbacks
|
finer grained management may opt to use the core callbacks
|
||||||
directly.
|
directly.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@@ -580,17 +586,25 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
</para>
|
</para>
|
||||||
</sect4>
|
</sect4>
|
||||||
<para>
|
<para>
|
||||||
For each encoder, CRTC and connector, several functions must
|
Each encoder object needs to provide:
|
||||||
be provided, depending on the object type. Encoder objects
|
<itemizedlist>
|
||||||
need to provide a DPMS (basically on/off) function, mode fixup
|
<listitem>
|
||||||
(for converting requested modes into native hardware timings),
|
A DPMS (basically on/off) function.
|
||||||
and prepare, set and commit functions for use by the core DRM
|
</listitem>
|
||||||
helper functions. Connector helpers need to provide mode fetch and
|
<listitem>
|
||||||
validity functions as well as an encoder matching function for
|
A mode-fixup function (for converting requested modes into
|
||||||
returning an ideal encoder for a given connector. The core
|
native hardware timings).
|
||||||
connector functions include a DPMS callback, (deprecated)
|
</listitem>
|
||||||
save/restore routines, detection, mode probing, property handling,
|
<listitem>
|
||||||
and cleanup functions.
|
Functions (prepare, set, and commit) for use by the core DRM
|
||||||
|
helper functions.
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
Connector helpers need to provide functions (mode-fetch, validity,
|
||||||
|
and encoder-matching) for returning an ideal encoder for a given
|
||||||
|
connector. The core connector functions include a DPMS callback,
|
||||||
|
save/restore routines (deprecated), detection, mode probing,
|
||||||
|
property handling, and cleanup functions.
|
||||||
</para>
|
</para>
|
||||||
<!--!Edrivers/char/drm/drm_crtc.h-->
|
<!--!Edrivers/char/drm/drm_crtc.h-->
|
||||||
<!--!Edrivers/char/drm/drm_crtc.c-->
|
<!--!Edrivers/char/drm/drm_crtc.c-->
|
||||||
@@ -605,22 +619,33 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<title>VBlank event handling</title>
|
<title>VBlank event handling</title>
|
||||||
<para>
|
<para>
|
||||||
The DRM core exposes two vertical blank related ioctls:
|
The DRM core exposes two vertical blank related ioctls:
|
||||||
DRM_IOCTL_WAIT_VBLANK and DRM_IOCTL_MODESET_CTL.
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>DRM_IOCTL_WAIT_VBLANK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This takes a struct drm_wait_vblank structure as its argument,
|
||||||
|
and it is used to block or request a signal when a specified
|
||||||
|
vblank event occurs.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>DRM_IOCTL_MODESET_CTL</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This should be called by application level drivers before and
|
||||||
|
after mode setting, since on many devices the vertical blank
|
||||||
|
counter is reset at that time. Internally, the DRM snapshots
|
||||||
|
the last vblank count when the ioctl is called with the
|
||||||
|
_DRM_PRE_MODESET command, so that the counter won't go backwards
|
||||||
|
(which is dealt with when _DRM_POST_MODESET is used).
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
<!--!Edrivers/char/drm/drm_irq.c-->
|
<!--!Edrivers/char/drm/drm_irq.c-->
|
||||||
</para>
|
</para>
|
||||||
<para>
|
|
||||||
DRM_IOCTL_WAIT_VBLANK takes a struct drm_wait_vblank structure
|
|
||||||
as its argument, and is used to block or request a signal when a
|
|
||||||
specified vblank event occurs.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
DRM_IOCTL_MODESET_CTL should be called by application level
|
|
||||||
drivers before and after mode setting, since on many devices the
|
|
||||||
vertical blank counter will be reset at that time. Internally,
|
|
||||||
the DRM snapshots the last vblank count when the ioctl is called
|
|
||||||
with the _DRM_PRE_MODESET command so that the counter won't go
|
|
||||||
backwards (which is dealt with when _DRM_POST_MODESET is used).
|
|
||||||
</para>
|
|
||||||
<para>
|
<para>
|
||||||
To support the functions above, the DRM core provides several
|
To support the functions above, the DRM core provides several
|
||||||
helper functions for tracking vertical blank counters, and
|
helper functions for tracking vertical blank counters, and
|
||||||
@@ -632,24 +657,24 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
register. The enable and disable vblank callbacks should enable
|
register. The enable and disable vblank callbacks should enable
|
||||||
and disable vertical blank interrupts, respectively. In the
|
and disable vertical blank interrupts, respectively. In the
|
||||||
absence of DRM clients waiting on vblank events, the core DRM
|
absence of DRM clients waiting on vblank events, the core DRM
|
||||||
code will use the disable_vblank() function to disable
|
code uses the disable_vblank() function to disable
|
||||||
interrupts, which saves power. They'll be re-enabled again when
|
interrupts, which saves power. They are re-enabled again when
|
||||||
a client calls the vblank wait ioctl above.
|
a client calls the vblank wait ioctl above.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Devices that don't provide a count register can simply use an
|
A device that doesn't provide a count register may simply use an
|
||||||
internal atomic counter incremented on every vertical blank
|
internal atomic counter incremented on every vertical blank
|
||||||
interrupt, and can make their enable and disable vblank
|
interrupt (and then treat the enable_vblank() and disable_vblank()
|
||||||
functions into no-ops.
|
callbacks as no-ops).
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Memory management</title>
|
<title>Memory management</title>
|
||||||
<para>
|
<para>
|
||||||
The memory manager lies at the heart of many DRM operations, and
|
The memory manager lies at the heart of many DRM operations; it
|
||||||
is also required to support advanced client features like OpenGL
|
is required to support advanced client features like OpenGL
|
||||||
pbuffers. The DRM currently contains two memory managers, TTM
|
pbuffers. The DRM currently contains two memory managers: TTM
|
||||||
and GEM.
|
and GEM.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@@ -679,41 +704,46 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<para>
|
<para>
|
||||||
GEM-enabled drivers must provide gem_init_object() and
|
GEM-enabled drivers must provide gem_init_object() and
|
||||||
gem_free_object() callbacks to support the core memory
|
gem_free_object() callbacks to support the core memory
|
||||||
allocation routines. They should also provide several driver
|
allocation routines. They should also provide several driver-specific
|
||||||
specific ioctls to support command execution, pinning, buffer
|
ioctls to support command execution, pinning, buffer
|
||||||
read & write, mapping, and domain ownership transfers.
|
read & write, mapping, and domain ownership transfers.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
On a fundamental level, GEM involves several operations: memory
|
On a fundamental level, GEM involves several operations:
|
||||||
allocation and freeing, command execution, and aperture management
|
<itemizedlist>
|
||||||
at command execution time. Buffer object allocation is relatively
|
<listitem>Memory allocation and freeing</listitem>
|
||||||
|
<listitem>Command execution</listitem>
|
||||||
|
<listitem>Aperture management at command execution time</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
Buffer object allocation is relatively
|
||||||
straightforward and largely provided by Linux's shmem layer, which
|
straightforward and largely provided by Linux's shmem layer, which
|
||||||
provides memory to back each object. When mapped into the GTT
|
provides memory to back each object. When mapped into the GTT
|
||||||
or used in a command buffer, the backing pages for an object are
|
or used in a command buffer, the backing pages for an object are
|
||||||
flushed to memory and marked write combined so as to be coherent
|
flushed to memory and marked write combined so as to be coherent
|
||||||
with the GPU. Likewise, when the GPU finishes rendering to an object,
|
with the GPU. Likewise, if the CPU accesses an object after the GPU
|
||||||
if the CPU accesses it, it must be made coherent with the CPU's view
|
has finished rendering to the object, then the object must be made
|
||||||
|
coherent with the CPU's view
|
||||||
of memory, usually involving GPU cache flushing of various kinds.
|
of memory, usually involving GPU cache flushing of various kinds.
|
||||||
This core CPU<->GPU coherency management is provided by the GEM
|
This core CPU<->GPU coherency management is provided by a
|
||||||
set domain function, which evaluates an object's current domain and
|
device-specific ioctl, which evaluates an object's current domain and
|
||||||
performs any necessary flushing or synchronization to put the object
|
performs any necessary flushing or synchronization to put the object
|
||||||
into the desired coherency domain (note that the object may be busy,
|
into the desired coherency domain (note that the object may be busy,
|
||||||
i.e. an active render target; in that case the set domain function
|
i.e. an active render target; in that case, setting the domain
|
||||||
will block the client and wait for rendering to complete before
|
blocks the client and waits for rendering to complete before
|
||||||
performing any necessary flushing operations).
|
performing any necessary flushing operations).
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Perhaps the most important GEM function is providing a command
|
Perhaps the most important GEM function is providing a command
|
||||||
execution interface to clients. Client programs construct command
|
execution interface to clients. Client programs construct command
|
||||||
buffers containing references to previously allocated memory objects
|
buffers containing references to previously allocated memory objects,
|
||||||
and submit them to GEM. At that point, GEM will take care to bind
|
and then submit them to GEM. At that point, GEM takes care to bind
|
||||||
all the objects into the GTT, execute the buffer, and provide
|
all the objects into the GTT, execute the buffer, and provide
|
||||||
necessary synchronization between clients accessing the same buffers.
|
necessary synchronization between clients accessing the same buffers.
|
||||||
This often involves evicting some objects from the GTT and re-binding
|
This often involves evicting some objects from the GTT and re-binding
|
||||||
others (a fairly expensive operation), and providing relocation
|
others (a fairly expensive operation), and providing relocation
|
||||||
support which hides fixed GTT offsets from clients. Clients must
|
support which hides fixed GTT offsets from clients. Clients must
|
||||||
take care not to submit command buffers that reference more objects
|
take care not to submit command buffers that reference more objects
|
||||||
than can fit in the GTT or GEM will reject them and no rendering
|
than can fit in the GTT; otherwise, GEM will reject them and no rendering
|
||||||
will occur. Similarly, if several objects in the buffer require
|
will occur. Similarly, if several objects in the buffer require
|
||||||
fence registers to be allocated for correct rendering (e.g. 2D blits
|
fence registers to be allocated for correct rendering (e.g. 2D blits
|
||||||
on pre-965 chips), care must be taken not to require more fence
|
on pre-965 chips), care must be taken not to require more fence
|
||||||
@@ -729,7 +759,7 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<title>Output management</title>
|
<title>Output management</title>
|
||||||
<para>
|
<para>
|
||||||
At the core of the DRM output management code is a set of
|
At the core of the DRM output management code is a set of
|
||||||
structures representing CRTCs, encoders and connectors.
|
structures representing CRTCs, encoders, and connectors.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
A CRTC is an abstraction representing a part of the chip that
|
A CRTC is an abstraction representing a part of the chip that
|
||||||
@@ -765,21 +795,19 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<sect1>
|
<sect1>
|
||||||
<title>Framebuffer management</title>
|
<title>Framebuffer management</title>
|
||||||
<para>
|
<para>
|
||||||
In order to set a mode on a given CRTC, encoder and connector
|
Clients need to provide a framebuffer object which provides a source
|
||||||
configuration, clients need to provide a framebuffer object which
|
of pixels for a CRTC to deliver to the encoder(s) and ultimately the
|
||||||
will provide a source of pixels for the CRTC to deliver to the encoder(s)
|
connector(s). A framebuffer is fundamentally a driver-specific memory
|
||||||
and ultimately the connector(s) in the configuration. A framebuffer
|
object, made into an opaque handle by the DRM's addfb() function.
|
||||||
is fundamentally a driver specific memory object, made into an opaque
|
Once a framebuffer has been created this way, it may be passed to the
|
||||||
handle by the DRM addfb function. Once an fb has been created this
|
KMS mode setting routines for use in a completed configuration.
|
||||||
way it can be passed to the KMS mode setting routines for use in
|
|
||||||
a configuration.
|
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Command submission & fencing</title>
|
<title>Command submission & fencing</title>
|
||||||
<para>
|
<para>
|
||||||
This should cover a few device specific command submission
|
This should cover a few device-specific command submission
|
||||||
implementations.
|
implementations.
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
@@ -789,7 +817,7 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<para>
|
<para>
|
||||||
The DRM core provides some suspend/resume code, but drivers
|
The DRM core provides some suspend/resume code, but drivers
|
||||||
wanting full suspend/resume support should provide save() and
|
wanting full suspend/resume support should provide save() and
|
||||||
restore() functions. These will be called at suspend,
|
restore() functions. These are called at suspend,
|
||||||
hibernate, or resume time, and should perform any state save or
|
hibernate, or resume time, and should perform any state save or
|
||||||
restore required by your device across suspend or hibernate
|
restore required by your device across suspend or hibernate
|
||||||
states.
|
states.
|
||||||
@@ -812,8 +840,8 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<para>
|
<para>
|
||||||
The DRM core exports several interfaces to applications,
|
The DRM core exports several interfaces to applications,
|
||||||
generally intended to be used through corresponding libdrm
|
generally intended to be used through corresponding libdrm
|
||||||
wrapper functions. In addition, drivers export device specific
|
wrapper functions. In addition, drivers export device-specific
|
||||||
interfaces for use by userspace drivers & device aware
|
interfaces for use by userspace drivers & device-aware
|
||||||
applications through ioctls and sysfs files.
|
applications through ioctls and sysfs files.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@@ -822,8 +850,8 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
management, memory management, and output management.
|
management, memory management, and output management.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Cover generic ioctls and sysfs layout here. Only need high
|
Cover generic ioctls and sysfs layout here. We only need high-level
|
||||||
level info, since man pages will cover the rest.
|
info, since man pages should cover the rest.
|
||||||
</para>
|
</para>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
@@ -2486,6 +2486,9 @@ ioctls.</para>
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>Flash API. <xref linkend="flash-controls" /></para>
|
<para>Flash API. <xref linkend="flash-controls" /></para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>&VIDIOC-CREATE-BUFS; and &VIDIOC-PREPARE-BUF; ioctls.</para>
|
||||||
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@@ -232,8 +232,9 @@ control is deprecated. New drivers and applications should use the
|
|||||||
<entry>Enables a power line frequency filter to avoid
|
<entry>Enables a power line frequency filter to avoid
|
||||||
flicker. Possible values for <constant>enum v4l2_power_line_frequency</constant> are:
|
flicker. Possible values for <constant>enum v4l2_power_line_frequency</constant> are:
|
||||||
<constant>V4L2_CID_POWER_LINE_FREQUENCY_DISABLED</constant> (0),
|
<constant>V4L2_CID_POWER_LINE_FREQUENCY_DISABLED</constant> (0),
|
||||||
<constant>V4L2_CID_POWER_LINE_FREQUENCY_50HZ</constant> (1) and
|
<constant>V4L2_CID_POWER_LINE_FREQUENCY_50HZ</constant> (1),
|
||||||
<constant>V4L2_CID_POWER_LINE_FREQUENCY_60HZ</constant> (2).</entry>
|
<constant>V4L2_CID_POWER_LINE_FREQUENCY_60HZ</constant> (2) and
|
||||||
|
<constant>V4L2_CID_POWER_LINE_FREQUENCY_AUTO</constant> (3).</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry><constant>V4L2_CID_HUE_AUTO</constant></entry>
|
<entry><constant>V4L2_CID_HUE_AUTO</constant></entry>
|
||||||
|
@@ -927,6 +927,33 @@ ioctl is called.</entry>
|
|||||||
Applications set or clear this flag before calling the
|
Applications set or clear this flag before calling the
|
||||||
<constant>VIDIOC_QBUF</constant> ioctl.</entry>
|
<constant>VIDIOC_QBUF</constant> ioctl.</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_BUF_FLAG_PREPARED</constant></entry>
|
||||||
|
<entry>0x0400</entry>
|
||||||
|
<entry>The buffer has been prepared for I/O and can be queued by the
|
||||||
|
application. Drivers set or clear this flag when the
|
||||||
|
<link linkend="vidioc-querybuf">VIDIOC_QUERYBUF</link>, <link
|
||||||
|
linkend="vidioc-qbuf">VIDIOC_PREPARE_BUF</link>, <link
|
||||||
|
linkend="vidioc-qbuf">VIDIOC_QBUF</link> or <link
|
||||||
|
linkend="vidioc-qbuf">VIDIOC_DQBUF</link> ioctl is called.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_BUF_FLAG_NO_CACHE_INVALIDATE</constant></entry>
|
||||||
|
<entry>0x0400</entry>
|
||||||
|
<entry>Caches do not have to be invalidated for this buffer.
|
||||||
|
Typically applications shall use this flag if the data captured in the buffer
|
||||||
|
is not going to be touched by the CPU, instead the buffer will, probably, be
|
||||||
|
passed on to a DMA-capable hardware unit for further processing or output.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><constant>V4L2_BUF_FLAG_NO_CACHE_CLEAN</constant></entry>
|
||||||
|
<entry>0x0800</entry>
|
||||||
|
<entry>Caches do not have to be cleaned for this buffer.
|
||||||
|
Typically applications shall use this flag for output buffers if the data
|
||||||
|
in this buffer has not been created by the CPU but by some DMA-capable unit,
|
||||||
|
in which case caches have not been used.</entry>
|
||||||
|
</row>
|
||||||
</tbody>
|
</tbody>
|
||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -469,6 +469,7 @@ and discussions on the V4L mailing list.</revremark>
|
|||||||
&sub-close;
|
&sub-close;
|
||||||
&sub-ioctl;
|
&sub-ioctl;
|
||||||
<!-- All ioctls go here. -->
|
<!-- All ioctls go here. -->
|
||||||
|
&sub-create-bufs;
|
||||||
&sub-cropcap;
|
&sub-cropcap;
|
||||||
&sub-dbg-g-chip-ident;
|
&sub-dbg-g-chip-ident;
|
||||||
&sub-dbg-g-register;
|
&sub-dbg-g-register;
|
||||||
@@ -511,6 +512,7 @@ and discussions on the V4L mailing list.</revremark>
|
|||||||
&sub-queryctrl;
|
&sub-queryctrl;
|
||||||
&sub-query-dv-preset;
|
&sub-query-dv-preset;
|
||||||
&sub-querystd;
|
&sub-querystd;
|
||||||
|
&sub-prepare-buf;
|
||||||
&sub-reqbufs;
|
&sub-reqbufs;
|
||||||
&sub-s-hw-freq-seek;
|
&sub-s-hw-freq-seek;
|
||||||
&sub-streamon;
|
&sub-streamon;
|
||||||
|
139
Documentation/DocBook/media/v4l/vidioc-create-bufs.xml
Normal file
139
Documentation/DocBook/media/v4l/vidioc-create-bufs.xml
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
<refentry id="vidioc-create-bufs">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl VIDIOC_CREATE_BUFS</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>VIDIOC_CREATE_BUFS</refname>
|
||||||
|
<refpurpose>Create buffers for Memory Mapped or User Pointer I/O</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct v4l2_create_buffers *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>VIDIOC_CREATE_BUFS</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>This ioctl is used to create buffers for <link linkend="mmap">memory
|
||||||
|
mapped</link> or <link linkend="userp">user pointer</link>
|
||||||
|
I/O. It can be used as an alternative or in addition to the
|
||||||
|
<constant>VIDIOC_REQBUFS</constant> ioctl, when a tighter control over buffers
|
||||||
|
is required. This ioctl can be called multiple times to create buffers of
|
||||||
|
different sizes.</para>
|
||||||
|
|
||||||
|
<para>To allocate device buffers applications initialize relevant fields of
|
||||||
|
the <structname>v4l2_create_buffers</structname> structure. They set the
|
||||||
|
<structfield>type</structfield> field in the
|
||||||
|
<structname>v4l2_format</structname> structure, embedded in this
|
||||||
|
structure, to the respective stream or buffer type.
|
||||||
|
<structfield>count</structfield> must be set to the number of required buffers.
|
||||||
|
<structfield>memory</structfield> specifies the required I/O method. The
|
||||||
|
<structfield>format</structfield> field shall typically be filled in using
|
||||||
|
either the <constant>VIDIOC_TRY_FMT</constant> or
|
||||||
|
<constant>VIDIOC_G_FMT</constant> ioctl(). Additionally, applications can adjust
|
||||||
|
<structfield>sizeimage</structfield> fields to fit their specific needs. The
|
||||||
|
<structfield>reserved</structfield> array must be zeroed.</para>
|
||||||
|
|
||||||
|
<para>When the ioctl is called with a pointer to this structure the driver
|
||||||
|
will attempt to allocate up to the requested number of buffers and store the
|
||||||
|
actual number allocated and the starting index in the
|
||||||
|
<structfield>count</structfield> and the <structfield>index</structfield> fields
|
||||||
|
respectively. On return <structfield>count</structfield> can be smaller than
|
||||||
|
the number requested. The driver may also increase buffer sizes if required,
|
||||||
|
however, it will not update <structfield>sizeimage</structfield> field values.
|
||||||
|
The user has to use <constant>VIDIOC_QUERYBUF</constant> to retrieve that
|
||||||
|
information.</para>
|
||||||
|
|
||||||
|
<table pgwide="1" frame="none" id="v4l2-create-buffers">
|
||||||
|
<title>struct <structname>v4l2_create_buffers</structname></title>
|
||||||
|
<tgroup cols="3">
|
||||||
|
&cs-str;
|
||||||
|
<tbody valign="top">
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>index</structfield></entry>
|
||||||
|
<entry>The starting buffer index, returned by the driver.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>count</structfield></entry>
|
||||||
|
<entry>The number of buffers requested or granted.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-memory;</entry>
|
||||||
|
<entry><structfield>memory</structfield></entry>
|
||||||
|
<entry>Applications set this field to
|
||||||
|
<constant>V4L2_MEMORY_MMAP</constant> or
|
||||||
|
<constant>V4L2_MEMORY_USERPTR</constant>.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>&v4l2-format;</entry>
|
||||||
|
<entry><structfield>format</structfield></entry>
|
||||||
|
<entry>Filled in by the application, preserved by the driver.</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>__u32</entry>
|
||||||
|
<entry><structfield>reserved</structfield>[8]</entry>
|
||||||
|
<entry>A place holder for future extensions.</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>ENOMEM</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>No memory to allocate buffers for <link linkend="mmap">memory
|
||||||
|
mapped</link> I/O.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The buffer type (<structfield>type</structfield> field) or the
|
||||||
|
requested I/O method (<structfield>memory</structfield>) is not
|
||||||
|
supported.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
88
Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml
Normal file
88
Documentation/DocBook/media/v4l/vidioc-prepare-buf.xml
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
<refentry id="vidioc-prepare-buf">
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>ioctl VIDIOC_PREPARE_BUF</refentrytitle>
|
||||||
|
&manvol;
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>VIDIOC_PREPARE_BUF</refname>
|
||||||
|
<refpurpose>Prepare a buffer for I/O</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<funcsynopsis>
|
||||||
|
<funcprototype>
|
||||||
|
<funcdef>int <function>ioctl</function></funcdef>
|
||||||
|
<paramdef>int <parameter>fd</parameter></paramdef>
|
||||||
|
<paramdef>int <parameter>request</parameter></paramdef>
|
||||||
|
<paramdef>struct v4l2_buffer *<parameter>argp</parameter></paramdef>
|
||||||
|
</funcprototype>
|
||||||
|
</funcsynopsis>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Arguments</title>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>fd</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>&fd;</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>request</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para>VIDIOC_PREPARE_BUF</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><parameter>argp</parameter></term>
|
||||||
|
<listitem>
|
||||||
|
<para></para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para>Applications can optionally call the
|
||||||
|
<constant>VIDIOC_PREPARE_BUF</constant> ioctl to pass ownership of the buffer
|
||||||
|
to the driver before actually enqueuing it, using the
|
||||||
|
<constant>VIDIOC_QBUF</constant> ioctl, and to prepare it for future I/O.
|
||||||
|
Such preparations may include cache invalidation or cleaning. Performing them
|
||||||
|
in advance saves time during the actual I/O. In case such cache operations are
|
||||||
|
not required, the application can use one of
|
||||||
|
<constant>V4L2_BUF_FLAG_NO_CACHE_INVALIDATE</constant> and
|
||||||
|
<constant>V4L2_BUF_FLAG_NO_CACHE_CLEAN</constant> flags to skip the respective
|
||||||
|
step.</para>
|
||||||
|
|
||||||
|
<para>The <structname>v4l2_buffer</structname> structure is
|
||||||
|
specified in <xref linkend="buffer" />.</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
&return-value;
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EBUSY</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>File I/O is in progress.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><errorcode>EINVAL</errorcode></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The buffer <structfield>type</structfield> is not
|
||||||
|
supported, or the <structfield>index</structfield> is out of bounds,
|
||||||
|
or no buffers have been allocated yet, or the
|
||||||
|
<structfield>userptr</structfield> or
|
||||||
|
<structfield>length</structfield> are invalid.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
</refentry>
|
@@ -572,7 +572,7 @@ static void board_select_chip (struct mtd_info *mtd, int chip)
|
|||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The simplest way to activate the FLASH based bad block table support
|
The simplest way to activate the FLASH based bad block table support
|
||||||
is to set the option NAND_USE_FLASH_BBT in the option field of
|
is to set the option NAND_BBT_USE_FLASH in the bbt_option field of
|
||||||
the nand chip structure before calling nand_scan(). For AG-AND
|
the nand chip structure before calling nand_scan(). For AG-AND
|
||||||
chips is this done by default.
|
chips is this done by default.
|
||||||
This activates the default FLASH based bad block table functionality
|
This activates the default FLASH based bad block table functionality
|
||||||
@@ -773,20 +773,6 @@ struct nand_oobinfo {
|
|||||||
done according to the default builtin scheme.
|
done according to the default builtin scheme.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
<sect2 id="User_space_placement_selection">
|
|
||||||
<title>User space placement selection</title>
|
|
||||||
<para>
|
|
||||||
All non ecc functions like mtd->read and mtd->write use an internal
|
|
||||||
structure, which can be set by an ioctl. This structure is preset
|
|
||||||
to the autoplacement default.
|
|
||||||
<programlisting>
|
|
||||||
ioctl (fd, MEMSETOOBSEL, oobsel);
|
|
||||||
</programlisting>
|
|
||||||
oobsel is a pointer to a user supplied structure of type
|
|
||||||
nand_oobconfig. The contents of this structure must match the
|
|
||||||
criteria of the filesystem, which will be used. See an example in utils/nandwrite.c.
|
|
||||||
</para>
|
|
||||||
</sect2>
|
|
||||||
</sect1>
|
</sect1>
|
||||||
<sect1 id="Spare_area_autoplacement_default">
|
<sect1 id="Spare_area_autoplacement_default">
|
||||||
<title>Spare area autoplacement default schemes</title>
|
<title>Spare area autoplacement default schemes</title>
|
||||||
@@ -1158,9 +1144,6 @@ in this page</entry>
|
|||||||
These constants are defined in nand.h. They are ored together to describe
|
These constants are defined in nand.h. They are ored together to describe
|
||||||
the functionality.
|
the functionality.
|
||||||
<programlisting>
|
<programlisting>
|
||||||
/* Use a flash based bad block table. This option is parsed by the
|
|
||||||
* default bad block table function (nand_default_bbt). */
|
|
||||||
#define NAND_USE_FLASH_BBT 0x00010000
|
|
||||||
/* The hw ecc generator provides a syndrome instead a ecc value on read
|
/* The hw ecc generator provides a syndrome instead a ecc value on read
|
||||||
* This can only work if we have the ecc bytes directly behind the
|
* This can only work if we have the ecc bytes directly behind the
|
||||||
* data bytes. Applies for DOC and AG-AND Renesas HW Reed Solomon generators */
|
* data bytes. Applies for DOC and AG-AND Renesas HW Reed Solomon generators */
|
||||||
|
@@ -520,6 +520,11 @@ Here's a description of the fields of <varname>struct uio_mem</varname>:
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
|
<listitem><para>
|
||||||
|
<varname>const char *name</varname>: Optional. Set this to help identify
|
||||||
|
the memory region, it will show up in the corresponding sysfs node.
|
||||||
|
</para></listitem>
|
||||||
|
|
||||||
<listitem><para>
|
<listitem><para>
|
||||||
<varname>int memtype</varname>: Required if the mapping is used. Set this to
|
<varname>int memtype</varname>: Required if the mapping is used. Set this to
|
||||||
<varname>UIO_MEM_PHYS</varname> if you you have physical memory on your
|
<varname>UIO_MEM_PHYS</varname> if you you have physical memory on your
|
||||||
@@ -553,7 +558,7 @@ instead to remember such an address.
|
|||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Please do not touch the <varname>kobj</varname> element of
|
Please do not touch the <varname>map</varname> element of
|
||||||
<varname>struct uio_mem</varname>! It is used by the UIO framework
|
<varname>struct uio_mem</varname>! It is used by the UIO framework
|
||||||
to set up sysfs files for this mapping. Simply leave it alone.
|
to set up sysfs files for this mapping. Simply leave it alone.
|
||||||
</para>
|
</para>
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
To choose IO schedulers at boot time, use the argument 'elevator=deadline'.
|
To choose IO schedulers at boot time, use the argument 'elevator=deadline'.
|
||||||
'noop', 'as' and 'cfq' (the default) are also available. IO schedulers are
|
'noop' and 'cfq' (the default) are also available. IO schedulers are assigned
|
||||||
assigned globally at boot time only presently.
|
globally at boot time only presently.
|
||||||
|
|
||||||
Each io queue has a set of io scheduler tunables associated with it. These
|
Each io queue has a set of io scheduler tunables associated with it. These
|
||||||
tunables control how the io scheduler works. You can find these entries
|
tunables control how the io scheduler works. You can find these entries
|
||||||
|
@@ -78,6 +78,16 @@ The device naming scheme is:
|
|||||||
/dev/cciss/c1d1p2 Controller 1, disk 1, partition 2
|
/dev/cciss/c1d1p2 Controller 1, disk 1, partition 2
|
||||||
/dev/cciss/c1d1p3 Controller 1, disk 1, partition 3
|
/dev/cciss/c1d1p3 Controller 1, disk 1, partition 3
|
||||||
|
|
||||||
|
CCISS simple mode support
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
The "cciss_simple_mode=1" boot parameter may be used to prevent the driver
|
||||||
|
from putting the controller into "performant" mode. The difference is that
|
||||||
|
with simple mode, each command completion requires an interrupt, while with
|
||||||
|
"performant mode" (the default, and ordinarily better performing) it is
|
||||||
|
possible to have multiple command completions indicated by a single
|
||||||
|
interrupt.
|
||||||
|
|
||||||
SCSI tape drive and medium changer support
|
SCSI tape drive and medium changer support
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|
||||||
@@ -88,14 +98,12 @@ You must enable "SCSI tape drive support for Smart Array 5xxx" and
|
|||||||
"SCSI support" in your kernel configuration to be able to use SCSI
|
"SCSI support" in your kernel configuration to be able to use SCSI
|
||||||
tape drives with your Smart Array 5xxx controller.
|
tape drives with your Smart Array 5xxx controller.
|
||||||
|
|
||||||
Additionally, note that the driver will not engage the SCSI core at init
|
Additionally, note that the driver will engage the SCSI core at init
|
||||||
time. The driver must be directed to dynamically engage the SCSI core via
|
time if any tape drives or medium changers are detected. The driver may
|
||||||
the /proc filesystem entry which the "block" side of the driver creates as
|
also be directed to dynamically engage the SCSI core via the /proc filesystem
|
||||||
/proc/driver/cciss/cciss* at runtime. This is because at driver init time,
|
entry which the "block" side of the driver creates as
|
||||||
the SCSI core may not yet be initialized (because the driver is a block
|
/proc/driver/cciss/cciss* at runtime. This is best done via a script.
|
||||||
driver) and attempting to register it with the SCSI core in such a case
|
|
||||||
would cause a hang. This is best done via an initialization script
|
|
||||||
(typically in /etc/init.d, but could vary depending on distribution).
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
for x in /proc/driver/cciss/cciss[0-9]*
|
for x in /proc/driver/cciss/cciss[0-9]*
|
||||||
|
@@ -454,8 +454,8 @@ mounted hierarchy, to remove a task from its current cgroup you must
|
|||||||
move it into a new cgroup (possibly the root cgroup) by writing to the
|
move it into a new cgroup (possibly the root cgroup) by writing to the
|
||||||
new cgroup's tasks file.
|
new cgroup's tasks file.
|
||||||
|
|
||||||
Note: If the ns cgroup is active, moving a process to another cgroup can
|
Note: Due to some restrictions enforced by some cgroup subsystems, moving
|
||||||
fail.
|
a process to another cgroup can fail.
|
||||||
|
|
||||||
2.3 Mounting hierarchies by name
|
2.3 Mounting hierarchies by name
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
@@ -33,9 +33,9 @@ demonstrate this problem using nested bash shells:
|
|||||||
|
|
||||||
From a second, unrelated bash shell:
|
From a second, unrelated bash shell:
|
||||||
$ kill -SIGSTOP 16690
|
$ kill -SIGSTOP 16690
|
||||||
$ kill -SIGCONT 16990
|
$ kill -SIGCONT 16690
|
||||||
|
|
||||||
<at this point 16990 exits and causes 16644 to exit too>
|
<at this point 16690 exits and causes 16644 to exit too>
|
||||||
|
|
||||||
This happens because bash can observe both signals and choose how it
|
This happens because bash can observe both signals and choose how it
|
||||||
responds to them.
|
responds to them.
|
||||||
|
17
Documentation/devicetree/bindings/ata/calxeda-sata.txt
Normal file
17
Documentation/devicetree/bindings/ata/calxeda-sata.txt
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
* Calxeda SATA Controller
|
||||||
|
|
||||||
|
SATA nodes are defined to describe on-chip Serial ATA controllers.
|
||||||
|
Each SATA controller should have its own node.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : compatible list, contains "calxeda,hb-ahci"
|
||||||
|
- interrupts : <interrupt mapping for SATA IRQ>
|
||||||
|
- reg : <registers mapping>
|
||||||
|
|
||||||
|
Example:
|
||||||
|
sata@ffe08000 {
|
||||||
|
compatible = "calxeda,hb-ahci";
|
||||||
|
reg = <0xffe08000 0x1000>;
|
||||||
|
interrupts = <115>;
|
||||||
|
};
|
||||||
|
|
14
Documentation/devicetree/bindings/mtd/atmel-dataflash.txt
Normal file
14
Documentation/devicetree/bindings/mtd/atmel-dataflash.txt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
* Atmel Data Flash
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : "atmel,<model>", "atmel,<series>", "atmel,dataflash".
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
flash@1 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "atmel,at45db321d", "atmel,at45", "atmel,dataflash";
|
||||||
|
spi-max-frequency = <25000000>;
|
||||||
|
reg = <1>;
|
||||||
|
};
|
@@ -1,3 +1,8 @@
|
|||||||
|
Freescale Reference Board Bindings
|
||||||
|
|
||||||
|
This document describes device tree bindings for various devices that
|
||||||
|
exist on some Freescale reference boards.
|
||||||
|
|
||||||
* Board Control and Status (BCSR)
|
* Board Control and Status (BCSR)
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
@@ -12,24 +17,25 @@ Example:
|
|||||||
reg = <f8000000 8000>;
|
reg = <f8000000 8000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
* Freescale on board FPGA
|
* Freescale on-board FPGA
|
||||||
|
|
||||||
This is the memory-mapped registers for on board FPGA.
|
This is the memory-mapped registers for on board FPGA.
|
||||||
|
|
||||||
Required properities:
|
Required properities:
|
||||||
- compatible : should be "fsl,fpga-pixis".
|
- compatible: should be a board-specific string followed by a string
|
||||||
- reg : should contain the address and the length of the FPPGA register
|
indicating the type of FPGA. Example:
|
||||||
set.
|
"fsl,<board>-fpga", "fsl,fpga-pixis"
|
||||||
|
- reg: should contain the address and the length of the FPGA register set.
|
||||||
- interrupt-parent: should specify phandle for the interrupt controller.
|
- interrupt-parent: should specify phandle for the interrupt controller.
|
||||||
- interrupts : should specify event (wakeup) IRQ.
|
- interrupts: should specify event (wakeup) IRQ.
|
||||||
|
|
||||||
Example (MPC8610HPCD):
|
Example (P1022DS):
|
||||||
|
|
||||||
board-control@e8000000 {
|
board-control@3,0 {
|
||||||
compatible = "fsl,fpga-pixis";
|
compatible = "fsl,p1022ds-fpga", "fsl,fpga-ngpixis";
|
||||||
reg = <0xe8000000 32>;
|
reg = <3 0 0x30>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
interrupts = <8 8>;
|
interrupts = <8 8 0 0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
* Freescale BCSR GPIO banks
|
* Freescale BCSR GPIO banks
|
||||||
|
395
Documentation/devicetree/bindings/powerpc/fsl/dcsr.txt
Normal file
395
Documentation/devicetree/bindings/powerpc/fsl/dcsr.txt
Normal file
@@ -0,0 +1,395 @@
|
|||||||
|
===================================================================
|
||||||
|
Debug Control and Status Register (DCSR) Binding
|
||||||
|
Copyright 2011 Freescale Semiconductor Inc.
|
||||||
|
|
||||||
|
NOTE: The bindings described in this document are preliminary and subject
|
||||||
|
to change. Some of the compatible strings that contain only generic names
|
||||||
|
may turn out to be inappropriate, or need additional properties to describe
|
||||||
|
the integration of the block with the rest of the chip.
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
Debug Control and Status Register Memory Map
|
||||||
|
|
||||||
|
Description
|
||||||
|
|
||||||
|
This node defines the base address and range for the
|
||||||
|
defined DCSR Memory Map. Child nodes will describe the individual
|
||||||
|
debug blocks defined within this memory space.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr" and "simple-bus".
|
||||||
|
The DCSR space exists in the memory-mapped bus.
|
||||||
|
|
||||||
|
- #address-cells
|
||||||
|
Usage: required
|
||||||
|
Value type: <u32>
|
||||||
|
Definition: A standard property. Defines the number of cells
|
||||||
|
or representing physical addresses in child nodes.
|
||||||
|
|
||||||
|
- #size-cells
|
||||||
|
Usage: required
|
||||||
|
Value type: <u32>
|
||||||
|
Definition: A standard property. Defines the number of cells
|
||||||
|
or representing the size of physical addresses in
|
||||||
|
child nodes.
|
||||||
|
|
||||||
|
- ranges
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
range of the DCSR space.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr: dcsr@f00000000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "fsl,dcsr", "simple-bus";
|
||||||
|
ranges = <0x00000000 0xf 0x00000000 0x01008000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=====================================================================
|
||||||
|
Event Processing Unit
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to the EPU
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr-epu"
|
||||||
|
|
||||||
|
- interrupts
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop_encoded-array>
|
||||||
|
Definition: Specifies the interrupts generated by the EPU.
|
||||||
|
The value of the interrupts property consists of three
|
||||||
|
interrupt specifiers. The format of the specifier is defined
|
||||||
|
by the binding document describing the node's interrupt parent.
|
||||||
|
|
||||||
|
The EPU counters can be configured to assert the performance
|
||||||
|
monitor interrupt signal based on either counter overflow or value
|
||||||
|
match. Which counter asserted the interrupt is captured in an EPU
|
||||||
|
Counter Interrupt Status Register (EPCPUISR).
|
||||||
|
|
||||||
|
The EPU unit can also be configured to assert either or both of
|
||||||
|
two interrupt signals based on debug event sources within the SoC.
|
||||||
|
The interrupt signals are epu_xt_int0 and epu_xt_int1.
|
||||||
|
Which event source asserted the interrupt is captured in an EPU
|
||||||
|
Interrupt Status Register (EPISR0,EPISR1).
|
||||||
|
|
||||||
|
Interrupt numbers are lised in order (perfmon, event0, event1).
|
||||||
|
|
||||||
|
- interrupt-parent
|
||||||
|
Usage: required
|
||||||
|
Value type: <phandle>
|
||||||
|
Definition: A single <phandle> value that points
|
||||||
|
to the interrupt parent to which the child domain
|
||||||
|
is being mapped. Value must be "&mpic"
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-epu@0 {
|
||||||
|
compatible = "fsl,dcsr-epu";
|
||||||
|
interrupts = <52 2 0 0
|
||||||
|
84 2 0 0
|
||||||
|
85 2 0 0>;
|
||||||
|
interrupt-parent = <&mpic>;
|
||||||
|
reg = <0x0 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Nexus Port Controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to the NPC
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr-npc"
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
The Nexus Port controller occupies two regions in the DCSR space
|
||||||
|
with distinct functionality.
|
||||||
|
|
||||||
|
The first register range describes the Nexus Port Controller
|
||||||
|
control and status registers.
|
||||||
|
|
||||||
|
The second register range describes the Nexus Port Controller
|
||||||
|
internal trace buffer. The NPC trace buffer is a small memory buffer
|
||||||
|
which stages the nexus trace data for transmission via the Aurora port
|
||||||
|
or to a DDR based trace buffer. In some configurations the NPC trace
|
||||||
|
buffer can be the only trace buffer used.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-npc {
|
||||||
|
compatible = "fsl,dcsr-npc";
|
||||||
|
reg = <0x1000 0x1000 0x1000000 0x8000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Nexus Concentrator
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to the NXC
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr-nxc"
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-nxc@2000 {
|
||||||
|
compatible = "fsl,dcsr-nxc";
|
||||||
|
reg = <0x2000 0x1000>;
|
||||||
|
};
|
||||||
|
=======================================================================
|
||||||
|
CoreNet Debug Controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the CoreNet Debug controller.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr-corenet"
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
The CoreNet Debug controller occupies two regions in the DCSR space
|
||||||
|
with distinct functionality.
|
||||||
|
|
||||||
|
The first register range describes the CoreNet Debug Controller
|
||||||
|
functionalty to perform transaction and transaction attribute matches.
|
||||||
|
|
||||||
|
The second register range describes the CoreNet Debug Controller
|
||||||
|
functionalty to trigger event notifications and debug traces.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-corenet {
|
||||||
|
compatible = "fsl,dcsr-corenet";
|
||||||
|
reg = <0x8000 0x1000 0xB0000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Data Path Debug controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the DPAA Debug Controller. This controller controls debug configuration
|
||||||
|
for the QMAN and FMAN blocks.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include both an identifier specific to the SoC
|
||||||
|
or Debug IP of the form "fsl,<soc>-dcsr-dpaa" in addition to the
|
||||||
|
generic compatible string "fsl,dcsr-dpaa".
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-dpaa@9000 {
|
||||||
|
compatible = "fsl,p4080-dcsr-dpaa", "fsl,dcsr-dpaa";
|
||||||
|
reg = <0x9000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
OCeaN Debug controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the OCN Debug Controller.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include both an identifier specific to the SoC
|
||||||
|
or Debug IP of the form "fsl,<soc>-dcsr-ocn" in addition to the
|
||||||
|
generic compatible string "fsl,dcsr-ocn".
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-ocn@11000 {
|
||||||
|
compatible = "fsl,p4080-dcsr-ocn", "fsl,dcsr-ocn";
|
||||||
|
reg = <0x11000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
DDR Controller Debug controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the OCN Debug Controller.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include "fsl,dcsr-ddr"
|
||||||
|
|
||||||
|
- dev-handle
|
||||||
|
Usage: required
|
||||||
|
Definition: A phandle to associate this debug node with its
|
||||||
|
component controller.
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-ddr@12000 {
|
||||||
|
compatible = "fsl,dcsr-ddr";
|
||||||
|
dev-handle = <&ddr1>;
|
||||||
|
reg = <0x12000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Nexus Aurora Link Controller
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the NAL Controller.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include both an identifier specific to the SoC
|
||||||
|
or Debug IP of the form "fsl,<soc>-dcsr-nal" in addition to the
|
||||||
|
generic compatible string "fsl,dcsr-nal".
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-nal@18000 {
|
||||||
|
compatible = "fsl,p4080-dcsr-nal", "fsl,dcsr-nal";
|
||||||
|
reg = <0x18000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Run Control and Power Management
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the RCPM Debug Controller. This functionlity is limited to the
|
||||||
|
control the debug operations of the SoC and cores.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include both an identifier specific to the SoC
|
||||||
|
or Debug IP of the form "fsl,<soc>-dcsr-rcpm" in addition to the
|
||||||
|
generic compatible string "fsl,dcsr-rcpm".
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-rcpm@22000 {
|
||||||
|
compatible = "fsl,p4080-dcsr-rcpm", "fsl,dcsr-rcpm";
|
||||||
|
reg = <0x22000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Core Service Bridge Proxy
|
||||||
|
|
||||||
|
This node represents the region of DCSR space allocated to
|
||||||
|
the Core Service Bridge Proxies.
|
||||||
|
There is one Core Service Bridge Proxy device for each CPU in the system.
|
||||||
|
This functionlity provides access to the debug operations of the CPU.
|
||||||
|
|
||||||
|
PROPERTIES
|
||||||
|
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: Must include both an identifier specific to the cpu
|
||||||
|
of the form "fsl,dcsr-<cpu>-sb-proxy" in addition to the
|
||||||
|
generic compatible string "fsl,dcsr-cpu-sb-proxy".
|
||||||
|
|
||||||
|
- cpu-handle
|
||||||
|
Usage: required
|
||||||
|
Definition: A phandle to associate this debug node with its cpu.
|
||||||
|
|
||||||
|
- reg
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>
|
||||||
|
Definition: A standard property. Specifies the physical address
|
||||||
|
offset and length of the DCSR space registers of the device
|
||||||
|
configuration block.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
dcsr-cpu-sb-proxy@40000 {
|
||||||
|
compatible = "fsl,dcsr-e500mc-sb-proxy",
|
||||||
|
"fsl,dcsr-cpu-sb-proxy";
|
||||||
|
cpu-handle = <&cpu0>;
|
||||||
|
reg = <0x40000 0x1000>;
|
||||||
|
};
|
||||||
|
dcsr-cpu-sb-proxy@41000 {
|
||||||
|
compatible = "fsl,dcsr-e500mc-sb-proxy",
|
||||||
|
"fsl,dcsr-cpu-sb-proxy";
|
||||||
|
cpu-handle = <&cpu1>;
|
||||||
|
reg = <0x41000 0x1000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
=======================================================================
|
@@ -25,6 +25,16 @@ Required properties:
|
|||||||
are routed to IPIC, and for 85xx/86xx cpu the interrupts are routed
|
are routed to IPIC, and for 85xx/86xx cpu the interrupts are routed
|
||||||
to MPIC.
|
to MPIC.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- msi-address-64: 64-bit PCI address of the MSIIR register. The MSIIR register
|
||||||
|
is used for MSI messaging. The address of MSIIR in PCI address space is
|
||||||
|
the MSI message address.
|
||||||
|
|
||||||
|
This property may be used in virtualized environments where the hypervisor
|
||||||
|
has created an alternate mapping for the MSIR block. See below for an
|
||||||
|
explanation.
|
||||||
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
msi@41600 {
|
msi@41600 {
|
||||||
compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
|
compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
|
||||||
@@ -41,3 +51,35 @@ Example:
|
|||||||
0xe7 0>;
|
0xe7 0>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
The Freescale hypervisor and msi-address-64
|
||||||
|
-------------------------------------------
|
||||||
|
Normally, PCI devices have access to all of CCSR via an ATMU mapping. The
|
||||||
|
Freescale MSI driver calculates the address of MSIIR (in the MSI register
|
||||||
|
block) and sets that address as the MSI message address.
|
||||||
|
|
||||||
|
In a virtualized environment, the hypervisor may need to create an IOMMU
|
||||||
|
mapping for MSIIR. The Freescale ePAPR hypervisor has this requirement
|
||||||
|
because of hardware limitations of the Peripheral Access Management Unit
|
||||||
|
(PAMU), which is currently the only IOMMU that the hypervisor supports.
|
||||||
|
The ATMU is programmed with the guest physical address, and the PAMU
|
||||||
|
intercepts transactions and reroutes them to the true physical address.
|
||||||
|
|
||||||
|
In the PAMU, each PCI controller is given only one primary window. The
|
||||||
|
PAMU restricts DMA operations so that they can only occur within a window.
|
||||||
|
Because PCI devices must be able to DMA to memory, the primary window must
|
||||||
|
be used to cover all of the guest's memory space.
|
||||||
|
|
||||||
|
PAMU primary windows can be divided into 256 subwindows, and each
|
||||||
|
subwindow can have its own address mapping ("guest physical" to "true
|
||||||
|
physical"). However, each subwindow has to have the same alignment, which
|
||||||
|
means they cannot be located at just any address. Because of these
|
||||||
|
restrictions, it is usually impossible to create a 4KB subwindow that
|
||||||
|
covers MSIIR where it's normally located.
|
||||||
|
|
||||||
|
Therefore, the hypervisor has to create a subwindow inside the same
|
||||||
|
primary window used for memory, but mapped to the MSIR block (where MSIIR
|
||||||
|
lives). The first subwindow after the end of guest memory is used for
|
||||||
|
this. The address specified in the msi-address-64 property is the PCI
|
||||||
|
address of MSIIR. The hypervisor configures the PAMU to map that address to
|
||||||
|
the true physical address of MSIIR.
|
||||||
|
@@ -33,6 +33,7 @@ qcom Qualcomm, Inc.
|
|||||||
ramtron Ramtron International
|
ramtron Ramtron International
|
||||||
samsung Samsung Semiconductor
|
samsung Samsung Semiconductor
|
||||||
schindler Schindler
|
schindler Schindler
|
||||||
|
sil Silicon Image
|
||||||
simtek
|
simtek
|
||||||
sirf SiRF Technology, Inc.
|
sirf SiRF Technology, Inc.
|
||||||
stericsson ST-Ericsson
|
stericsson ST-Ericsson
|
||||||
|
@@ -63,8 +63,8 @@ IRC network.
|
|||||||
Userspace tools for creating and manipulating Btrfs file systems are
|
Userspace tools for creating and manipulating Btrfs file systems are
|
||||||
available from the git repository at the following location:
|
available from the git repository at the following location:
|
||||||
|
|
||||||
http://git.kernel.org/?p=linux/kernel/git/mason/btrfs-progs-unstable.git
|
http://git.kernel.org/?p=linux/kernel/git/mason/btrfs-progs.git
|
||||||
git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs-unstable.git
|
git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs.git
|
||||||
|
|
||||||
These include the following tools:
|
These include the following tools:
|
||||||
|
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
Note: This filesystem doesn't have a maintainer.
|
||||||
|
|
||||||
Macintosh HFS Filesystem for Linux
|
Macintosh HFS Filesystem for Linux
|
||||||
==================================
|
==================================
|
||||||
@@ -76,8 +77,6 @@ hformat that can be used to create HFS filesystem. See
|
|||||||
Credits
|
Credits
|
||||||
=======
|
=======
|
||||||
|
|
||||||
The HFS drivers was written by Paul H. Hargrovea (hargrove@sccm.Stanford.EDU)
|
The HFS drivers was written by Paul H. Hargrovea (hargrove@sccm.Stanford.EDU).
|
||||||
and is now maintained by Roman Zippel (roman@ardistech.com) at Ardis
|
Roman Zippel (roman@ardistech.com) rewrote large parts of the code and brought
|
||||||
Technologies.
|
in btree routines derived from Brad Boyer's hfsplus driver.
|
||||||
Roman rewrote large parts of the code and brought in btree routines derived
|
|
||||||
from Brad Boyer's hfsplus driver (also maintained by Roman now).
|
|
||||||
|
@@ -194,7 +194,8 @@ associated with the inotify_handle, and on which events are queued.
|
|||||||
Each watch is associated with an inotify_watch structure. Watches are chained
|
Each watch is associated with an inotify_watch structure. Watches are chained
|
||||||
off of each associated inotify_handle and each associated inode.
|
off of each associated inotify_handle and each associated inode.
|
||||||
|
|
||||||
See fs/inotify.c and fs/inotify_user.c for the locking and lifetime rules.
|
See fs/notify/inotify/inotify_fsnotify.c and fs/notify/inotify/inotify_user.c
|
||||||
|
for the locking and lifetime rules.
|
||||||
|
|
||||||
|
|
||||||
(vi) Rationale
|
(vi) Rationale
|
||||||
|
@@ -14,6 +14,10 @@ Supported chips:
|
|||||||
Prefix: 'w83627dhg'
|
Prefix: 'w83627dhg'
|
||||||
Addresses scanned: ISA address retrieved from Super I/O registers
|
Addresses scanned: ISA address retrieved from Super I/O registers
|
||||||
Datasheet: not available
|
Datasheet: not available
|
||||||
|
* Winbond W83627UHG
|
||||||
|
Prefix: 'w83627uhg'
|
||||||
|
Addresses scanned: ISA address retrieved from Super I/O registers
|
||||||
|
Datasheet: available from www.nuvoton.com
|
||||||
* Winbond W83667HG
|
* Winbond W83667HG
|
||||||
Prefix: 'w83667hg'
|
Prefix: 'w83667hg'
|
||||||
Addresses scanned: ISA address retrieved from Super I/O registers
|
Addresses scanned: ISA address retrieved from Super I/O registers
|
||||||
@@ -42,14 +46,13 @@ Description
|
|||||||
-----------
|
-----------
|
||||||
|
|
||||||
This driver implements support for the Winbond W83627EHF, W83627EHG,
|
This driver implements support for the Winbond W83627EHF, W83627EHG,
|
||||||
W83627DHG, W83627DHG-P, W83667HG, W83667HG-B, W83667HG-I (NCT6775F),
|
W83627DHG, W83627DHG-P, W83627UHG, W83667HG, W83667HG-B, W83667HG-I
|
||||||
and NCT6776F super I/O chips. We will refer to them collectively as
|
(NCT6775F), and NCT6776F super I/O chips. We will refer to them collectively
|
||||||
Winbond chips.
|
as Winbond chips.
|
||||||
|
|
||||||
The chips implement three temperature sensors (up to four for 667HG-B, and nine
|
The chips implement 2 to 4 temperature sensors (9 for NCT6775F and NCT6776F),
|
||||||
for NCT6775F and NCT6776F), five fan rotation speed sensors, ten analog voltage
|
2 to 5 fan rotation speed sensors, 8 to 10 analog voltage sensors, one VID
|
||||||
sensors (only nine for the 627DHG), one VID (6 pins for the 627EHF/EHG, 8 pins
|
(except for 627UHG), alarms with beep warnings (control unimplemented),
|
||||||
for the 627DHG and 667HG), alarms with beep warnings (control unimplemented),
|
|
||||||
and some automatic fan regulation strategies (plus manual fan control mode).
|
and some automatic fan regulation strategies (plus manual fan control mode).
|
||||||
|
|
||||||
The temperature sensor sources on W82677HG-B, NCT6775F, and NCT6776F are
|
The temperature sensor sources on W82677HG-B, NCT6775F, and NCT6776F are
|
||||||
@@ -86,17 +89,16 @@ follows:
|
|||||||
|
|
||||||
temp1 -> pwm1
|
temp1 -> pwm1
|
||||||
temp2 -> pwm2
|
temp2 -> pwm2
|
||||||
temp3 -> pwm3
|
temp3 -> pwm3 (not on 627UHG)
|
||||||
prog -> pwm4 (not on 667HG and 667HG-B; the programmable setting is not
|
prog -> pwm4 (not on 667HG and 667HG-B; the programmable setting is not
|
||||||
supported by the driver)
|
supported by the driver)
|
||||||
|
|
||||||
/sys files
|
/sys files
|
||||||
----------
|
----------
|
||||||
|
|
||||||
name - this is a standard hwmon device entry. For the W83627EHF and W83627EHG,
|
name - this is a standard hwmon device entry, it contains the name of
|
||||||
it is set to "w83627ehf", for the W83627DHG it is set to "w83627dhg",
|
the device (see the prefix in the list of supported devices at
|
||||||
for the W83667HG and W83667HG-B it is set to "w83667hg", for NCT6775F it
|
the top of this file)
|
||||||
is set to "nct6775", and for NCT6776F it is set to "nct6776".
|
|
||||||
|
|
||||||
pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range:
|
pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range:
|
||||||
0 (stop) to 255 (full)
|
0 (stop) to 255 (full)
|
||||||
|
@@ -39,23 +39,20 @@ independent, drivers.
|
|||||||
in case an unused hwspinlock isn't available. Users of this
|
in case an unused hwspinlock isn't available. Users of this
|
||||||
API will usually want to communicate the lock's id to the remote core
|
API will usually want to communicate the lock's id to the remote core
|
||||||
before it can be used to achieve synchronization.
|
before it can be used to achieve synchronization.
|
||||||
Can be called from an atomic context (this function will not sleep) but
|
Should be called from a process context (might sleep).
|
||||||
not from within interrupt context.
|
|
||||||
|
|
||||||
struct hwspinlock *hwspin_lock_request_specific(unsigned int id);
|
struct hwspinlock *hwspin_lock_request_specific(unsigned int id);
|
||||||
- assign a specific hwspinlock id and return its address, or NULL
|
- assign a specific hwspinlock id and return its address, or NULL
|
||||||
if that hwspinlock is already in use. Usually board code will
|
if that hwspinlock is already in use. Usually board code will
|
||||||
be calling this function in order to reserve specific hwspinlock
|
be calling this function in order to reserve specific hwspinlock
|
||||||
ids for predefined purposes.
|
ids for predefined purposes.
|
||||||
Can be called from an atomic context (this function will not sleep) but
|
Should be called from a process context (might sleep).
|
||||||
not from within interrupt context.
|
|
||||||
|
|
||||||
int hwspin_lock_free(struct hwspinlock *hwlock);
|
int hwspin_lock_free(struct hwspinlock *hwlock);
|
||||||
- free a previously-assigned hwspinlock; returns 0 on success, or an
|
- free a previously-assigned hwspinlock; returns 0 on success, or an
|
||||||
appropriate error code on failure (e.g. -EINVAL if the hwspinlock
|
appropriate error code on failure (e.g. -EINVAL if the hwspinlock
|
||||||
is already free).
|
is already free).
|
||||||
Can be called from an atomic context (this function will not sleep) but
|
Should be called from a process context (might sleep).
|
||||||
not from within interrupt context.
|
|
||||||
|
|
||||||
int hwspin_lock_timeout(struct hwspinlock *hwlock, unsigned int timeout);
|
int hwspin_lock_timeout(struct hwspinlock *hwlock, unsigned int timeout);
|
||||||
- lock a previously-assigned hwspinlock with a timeout limit (specified in
|
- lock a previously-assigned hwspinlock with a timeout limit (specified in
|
||||||
@@ -230,45 +227,62 @@ int hwspinlock_example2(void)
|
|||||||
|
|
||||||
4. API for implementors
|
4. API for implementors
|
||||||
|
|
||||||
int hwspin_lock_register(struct hwspinlock *hwlock);
|
int hwspin_lock_register(struct hwspinlock_device *bank, struct device *dev,
|
||||||
|
const struct hwspinlock_ops *ops, int base_id, int num_locks);
|
||||||
- to be called from the underlying platform-specific implementation, in
|
- to be called from the underlying platform-specific implementation, in
|
||||||
order to register a new hwspinlock instance. Can be called from an atomic
|
order to register a new hwspinlock device (which is usually a bank of
|
||||||
context (this function will not sleep) but not from within interrupt
|
numerous locks). Should be called from a process context (this function
|
||||||
context. Returns 0 on success, or appropriate error code on failure.
|
might sleep).
|
||||||
|
Returns 0 on success, or appropriate error code on failure.
|
||||||
|
|
||||||
struct hwspinlock *hwspin_lock_unregister(unsigned int id);
|
int hwspin_lock_unregister(struct hwspinlock_device *bank);
|
||||||
- to be called from the underlying vendor-specific implementation, in order
|
- to be called from the underlying vendor-specific implementation, in order
|
||||||
to unregister an existing (and unused) hwspinlock instance.
|
to unregister an hwspinlock device (which is usually a bank of numerous
|
||||||
Can be called from an atomic context (will not sleep) but not from
|
locks).
|
||||||
within interrupt context.
|
Should be called from a process context (this function might sleep).
|
||||||
Returns the address of hwspinlock on success, or NULL on error (e.g.
|
Returns the address of hwspinlock on success, or NULL on error (e.g.
|
||||||
if the hwspinlock is sill in use).
|
if the hwspinlock is sill in use).
|
||||||
|
|
||||||
5. struct hwspinlock
|
5. Important structs
|
||||||
|
|
||||||
This struct represents an hwspinlock instance. It is registered by the
|
struct hwspinlock_device is a device which usually contains a bank
|
||||||
underlying hwspinlock implementation using the hwspin_lock_register() API.
|
of hardware locks. It is registered by the underlying hwspinlock
|
||||||
|
implementation using the hwspin_lock_register() API.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct hwspinlock - vendor-specific hwspinlock implementation
|
* struct hwspinlock_device - a device which usually spans numerous hwspinlocks
|
||||||
*
|
* @dev: underlying device, will be used to invoke runtime PM api
|
||||||
* @dev: underlying device, will be used with runtime PM api
|
* @ops: platform-specific hwspinlock handlers
|
||||||
* @ops: vendor-specific hwspinlock handlers
|
* @base_id: id index of the first lock in this device
|
||||||
* @id: a global, unique, system-wide, index of the lock.
|
* @num_locks: number of locks in this device
|
||||||
* @lock: initialized and used by hwspinlock core
|
* @lock: dynamically allocated array of 'struct hwspinlock'
|
||||||
* @owner: underlying implementation module, used to maintain module ref count
|
|
||||||
*/
|
*/
|
||||||
struct hwspinlock {
|
struct hwspinlock_device {
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
const struct hwspinlock_ops *ops;
|
const struct hwspinlock_ops *ops;
|
||||||
int id;
|
int base_id;
|
||||||
spinlock_t lock;
|
int num_locks;
|
||||||
struct module *owner;
|
struct hwspinlock lock[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
The underlying implementation is responsible to assign the dev, ops, id and
|
struct hwspinlock_device contains an array of hwspinlock structs, each
|
||||||
owner members. The lock member, OTOH, is initialized and used by the hwspinlock
|
of which represents a single hardware lock:
|
||||||
core.
|
|
||||||
|
/**
|
||||||
|
* struct hwspinlock - this struct represents a single hwspinlock instance
|
||||||
|
* @bank: the hwspinlock_device structure which owns this lock
|
||||||
|
* @lock: initialized and used by hwspinlock core
|
||||||
|
* @priv: private data, owned by the underlying platform-specific hwspinlock drv
|
||||||
|
*/
|
||||||
|
struct hwspinlock {
|
||||||
|
struct hwspinlock_device *bank;
|
||||||
|
spinlock_t lock;
|
||||||
|
void *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
When registering a bank of locks, the hwspinlock driver only needs to
|
||||||
|
set the priv members of the locks. The rest of the members are set and
|
||||||
|
initialized by the hwspinlock core itself.
|
||||||
|
|
||||||
6. Implementation callbacks
|
6. Implementation callbacks
|
||||||
|
|
||||||
|
@@ -1,22 +1,24 @@
|
|||||||
The I2C protocol knows about two kinds of device addresses: normal 7 bit
|
The I2C protocol knows about two kinds of device addresses: normal 7 bit
|
||||||
addresses, and an extended set of 10 bit addresses. The sets of addresses
|
addresses, and an extended set of 10 bit addresses. The sets of addresses
|
||||||
do not intersect: the 7 bit address 0x10 is not the same as the 10 bit
|
do not intersect: the 7 bit address 0x10 is not the same as the 10 bit
|
||||||
address 0x10 (though a single device could respond to both of them). You
|
address 0x10 (though a single device could respond to both of them).
|
||||||
select a 10 bit address by adding an extra byte after the address
|
|
||||||
byte:
|
|
||||||
S Addr7 Rd/Wr ....
|
|
||||||
becomes
|
|
||||||
S 11110 Addr10 Rd/Wr
|
|
||||||
S is the start bit, Rd/Wr the read/write bit, and if you count the number
|
|
||||||
of bits, you will see the there are 8 after the S bit for 7 bit addresses,
|
|
||||||
and 16 after the S bit for 10 bit addresses.
|
|
||||||
|
|
||||||
WARNING! The current 10 bit address support is EXPERIMENTAL. There are
|
I2C messages to and from 10-bit address devices have a different format.
|
||||||
several places in the code that will cause SEVERE PROBLEMS with 10 bit
|
See the I2C specification for the details.
|
||||||
addresses, even though there is some basic handling and hooks. Also,
|
|
||||||
almost no supported adapter handles the 10 bit addresses correctly.
|
|
||||||
|
|
||||||
As soon as a real 10 bit address device is spotted 'in the wild', we
|
The current 10 bit address support is minimal. It should work, however
|
||||||
can and will add proper support. Right now, 10 bit address devices
|
you can expect some problems along the way:
|
||||||
are defined by the I2C protocol, but we have never seen a single device
|
* Not all bus drivers support 10-bit addresses. Some don't because the
|
||||||
which supports them.
|
hardware doesn't support them (SMBus doesn't require 10-bit address
|
||||||
|
support for example), some don't because nobody bothered adding the
|
||||||
|
code (or it's there but not working properly.) Software implementation
|
||||||
|
(i2c-algo-bit) is known to work.
|
||||||
|
* Some optional features do not support 10-bit addresses. This is the
|
||||||
|
case of automatic detection and instantiation of devices by their,
|
||||||
|
drivers, for example.
|
||||||
|
* Many user-space packages (for example i2c-tools) lack support for
|
||||||
|
10-bit addresses.
|
||||||
|
|
||||||
|
Note that 10-bit address devices are still pretty rare, so the limitations
|
||||||
|
listed above could stay for a long time, maybe even forever if nobody
|
||||||
|
needs them to be fixed.
|
||||||
|
@@ -411,9 +411,9 @@ event code Key Notes
|
|||||||
|
|
||||||
0x1004 0x03 FN+F4 Sleep button (ACPI sleep button
|
0x1004 0x03 FN+F4 Sleep button (ACPI sleep button
|
||||||
semantics, i.e. sleep-to-RAM).
|
semantics, i.e. sleep-to-RAM).
|
||||||
It is always generate some kind
|
It always generates some kind
|
||||||
of event, either the hot key
|
of event, either the hot key
|
||||||
event or a ACPI sleep button
|
event or an ACPI sleep button
|
||||||
event. The firmware may
|
event. The firmware may
|
||||||
refuse to generate further FN+F4
|
refuse to generate further FN+F4
|
||||||
key presses until a S3 or S4 ACPI
|
key presses until a S3 or S4 ACPI
|
||||||
|
@@ -61,8 +61,8 @@ Hardware accelerated blink of LEDs
|
|||||||
Some LEDs can be programmed to blink without any CPU interaction. To
|
Some LEDs can be programmed to blink without any CPU interaction. To
|
||||||
support this feature, a LED driver can optionally implement the
|
support this feature, a LED driver can optionally implement the
|
||||||
blink_set() function (see <linux/leds.h>). To set an LED to blinking,
|
blink_set() function (see <linux/leds.h>). To set an LED to blinking,
|
||||||
however, it is better to use use the API function led_blink_set(),
|
however, it is better to use the API function led_blink_set(), as it
|
||||||
as it will check and implement software fallback if necessary.
|
will check and implement software fallback if necessary.
|
||||||
|
|
||||||
To turn off blinking again, use the API function led_brightness_set()
|
To turn off blinking again, use the API function led_brightness_set()
|
||||||
as that will not just set the LED brightness but also stop any software
|
as that will not just set the LED brightness but also stop any software
|
||||||
|
@@ -20,7 +20,7 @@ ip_no_pmtu_disc - BOOLEAN
|
|||||||
default FALSE
|
default FALSE
|
||||||
|
|
||||||
min_pmtu - INTEGER
|
min_pmtu - INTEGER
|
||||||
default 562 - minimum discovered Path MTU
|
default 552 - minimum discovered Path MTU
|
||||||
|
|
||||||
route/max_size - INTEGER
|
route/max_size - INTEGER
|
||||||
Maximum number of routes allowed in the kernel. Increase
|
Maximum number of routes allowed in the kernel. Increase
|
||||||
|
@@ -15,6 +15,23 @@ amemthresh - INTEGER
|
|||||||
enabled and the variable is automatically set to 2, otherwise
|
enabled and the variable is automatically set to 2, otherwise
|
||||||
the strategy is disabled and the variable is set to 1.
|
the strategy is disabled and the variable is set to 1.
|
||||||
|
|
||||||
|
conntrack - BOOLEAN
|
||||||
|
0 - disabled (default)
|
||||||
|
not 0 - enabled
|
||||||
|
|
||||||
|
If set, maintain connection tracking entries for
|
||||||
|
connections handled by IPVS.
|
||||||
|
|
||||||
|
This should be enabled if connections handled by IPVS are to be
|
||||||
|
also handled by stateful firewall rules. That is, iptables rules
|
||||||
|
that make use of connection tracking. It is a performance
|
||||||
|
optimisation to disable this setting otherwise.
|
||||||
|
|
||||||
|
Connections handled by the IPVS FTP application module
|
||||||
|
will have connection tracking entries regardless of this setting.
|
||||||
|
|
||||||
|
Only available when IPVS is compiled with CONFIG_IP_VS_NFCT enabled.
|
||||||
|
|
||||||
cache_bypass - BOOLEAN
|
cache_bypass - BOOLEAN
|
||||||
0 - disabled (default)
|
0 - disabled (default)
|
||||||
not 0 - enabled
|
not 0 - enabled
|
||||||
@@ -39,7 +56,7 @@ debug_level - INTEGER
|
|||||||
11 - IPVS packet handling (ip_vs_in/ip_vs_out)
|
11 - IPVS packet handling (ip_vs_in/ip_vs_out)
|
||||||
12 or more - packet traversal
|
12 or more - packet traversal
|
||||||
|
|
||||||
Only available when IPVS is compiled with the CONFIG_IPVS_DEBUG
|
Only available when IPVS is compiled with CONFIG_IP_VS_DEBUG enabled.
|
||||||
|
|
||||||
Higher debugging levels include the messages for lower debugging
|
Higher debugging levels include the messages for lower debugging
|
||||||
levels, so setting debug level 2, includes level 0, 1 and 2
|
levels, so setting debug level 2, includes level 0, 1 and 2
|
||||||
@@ -123,13 +140,11 @@ nat_icmp_send - BOOLEAN
|
|||||||
secure_tcp - INTEGER
|
secure_tcp - INTEGER
|
||||||
0 - disabled (default)
|
0 - disabled (default)
|
||||||
|
|
||||||
The secure_tcp defense is to use a more complicated state
|
The secure_tcp defense is to use a more complicated TCP state
|
||||||
transition table and some possible short timeouts of each
|
transition table. For VS/NAT, it also delays entering the
|
||||||
state. In the VS/NAT, it delays the entering the ESTABLISHED
|
TCP ESTABLISHED state until the three way handshake is completed.
|
||||||
until the real server starts to send data and ACK packet
|
|
||||||
(after 3-way handshake).
|
|
||||||
|
|
||||||
The value definition is the same as that of drop_entry or
|
The value definition is the same as that of drop_entry and
|
||||||
drop_packet.
|
drop_packet.
|
||||||
|
|
||||||
sync_threshold - INTEGER
|
sync_threshold - INTEGER
|
||||||
@@ -141,3 +156,36 @@ sync_threshold - INTEGER
|
|||||||
synchronized, every time the number of its incoming packets
|
synchronized, every time the number of its incoming packets
|
||||||
modulus 50 equals the threshold. The range of the threshold is
|
modulus 50 equals the threshold. The range of the threshold is
|
||||||
from 0 to 49.
|
from 0 to 49.
|
||||||
|
|
||||||
|
snat_reroute - BOOLEAN
|
||||||
|
0 - disabled
|
||||||
|
not 0 - enabled (default)
|
||||||
|
|
||||||
|
If enabled, recalculate the route of SNATed packets from
|
||||||
|
realservers so that they are routed as if they originate from the
|
||||||
|
director. Otherwise they are routed as if they are forwarded by the
|
||||||
|
director.
|
||||||
|
|
||||||
|
If policy routing is in effect then it is possible that the route
|
||||||
|
of a packet originating from a director is routed differently to a
|
||||||
|
packet being forwarded by the director.
|
||||||
|
|
||||||
|
If policy routing is not in effect then the recalculated route will
|
||||||
|
always be the same as the original route so it is an optimisation
|
||||||
|
to disable snat_reroute and avoid the recalculation.
|
||||||
|
|
||||||
|
sync_version - INTEGER
|
||||||
|
default 1
|
||||||
|
|
||||||
|
The version of the synchronisation protocol used when sending
|
||||||
|
synchronisation messages.
|
||||||
|
|
||||||
|
0 selects the original synchronisation protocol (version 0). This
|
||||||
|
should be used when sending synchronisation messages to a legacy
|
||||||
|
system that only understands the original synchronisation protocol.
|
||||||
|
|
||||||
|
1 selects the current synchronisation protocol (version 1). This
|
||||||
|
should be used where possible.
|
||||||
|
|
||||||
|
Kernels with this sync_version entry are able to receive messages
|
||||||
|
of both version 1 and version 2 of the synchronisation protocol.
|
||||||
|
@@ -263,6 +263,8 @@ characters, each representing a particular tainted value.
|
|||||||
12: 'I' if the kernel is working around a severe bug in the platform
|
12: 'I' if the kernel is working around a severe bug in the platform
|
||||||
firmware (BIOS or similar).
|
firmware (BIOS or similar).
|
||||||
|
|
||||||
|
13: 'O' if an externally-built ("out-of-tree") module has been loaded.
|
||||||
|
|
||||||
The primary reason for the 'Tainted: ' string is to tell kernel
|
The primary reason for the 'Tainted: ' string is to tell kernel
|
||||||
debuggers if this is a clean kernel or if anything unusual has
|
debuggers if this is a clean kernel or if anything unusual has
|
||||||
occurred. Tainting is permanent: even if an offending module is
|
occurred. Tainting is permanent: even if an offending module is
|
||||||
|
@@ -123,9 +123,10 @@ please refer directly to the source code for more information about it.
|
|||||||
Subsystem-Level Methods
|
Subsystem-Level Methods
|
||||||
-----------------------
|
-----------------------
|
||||||
The core methods to suspend and resume devices reside in struct dev_pm_ops
|
The core methods to suspend and resume devices reside in struct dev_pm_ops
|
||||||
pointed to by the pm member of struct bus_type, struct device_type and
|
pointed to by the ops member of struct dev_pm_domain, or by the pm member of
|
||||||
struct class. They are mostly of interest to the people writing infrastructure
|
struct bus_type, struct device_type and struct class. They are mostly of
|
||||||
for buses, like PCI or USB, or device type and device class drivers.
|
interest to the people writing infrastructure for platforms and buses, like PCI
|
||||||
|
or USB, or device type and device class drivers.
|
||||||
|
|
||||||
Bus drivers implement these methods as appropriate for the hardware and the
|
Bus drivers implement these methods as appropriate for the hardware and the
|
||||||
drivers using it; PCI works differently from USB, and so on. Not many people
|
drivers using it; PCI works differently from USB, and so on. Not many people
|
||||||
@@ -139,41 +140,57 @@ sequencing in the driver model tree.
|
|||||||
|
|
||||||
/sys/devices/.../power/wakeup files
|
/sys/devices/.../power/wakeup files
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
All devices in the driver model have two flags to control handling of wakeup
|
All device objects in the driver model contain fields that control the handling
|
||||||
events (hardware signals that can force the device and/or system out of a low
|
of system wakeup events (hardware signals that can force the system out of a
|
||||||
power state). These flags are initialized by bus or device driver code using
|
sleep state). These fields are initialized by bus or device driver code using
|
||||||
device_set_wakeup_capable() and device_set_wakeup_enable(), defined in
|
device_set_wakeup_capable() and device_set_wakeup_enable(), defined in
|
||||||
include/linux/pm_wakeup.h.
|
include/linux/pm_wakeup.h.
|
||||||
|
|
||||||
The "can_wakeup" flag just records whether the device (and its driver) can
|
The "power.can_wakeup" flag just records whether the device (and its driver) can
|
||||||
physically support wakeup events. The device_set_wakeup_capable() routine
|
physically support wakeup events. The device_set_wakeup_capable() routine
|
||||||
affects this flag. The "should_wakeup" flag controls whether the device should
|
affects this flag. The "power.wakeup" field is a pointer to an object of type
|
||||||
try to use its wakeup mechanism. device_set_wakeup_enable() affects this flag;
|
struct wakeup_source used for controlling whether or not the device should use
|
||||||
for the most part drivers should not change its value. The initial value of
|
its system wakeup mechanism and for notifying the PM core of system wakeup
|
||||||
should_wakeup is supposed to be false for the majority of devices; the major
|
events signaled by the device. This object is only present for wakeup-capable
|
||||||
exceptions are power buttons, keyboards, and Ethernet adapters whose WoL
|
devices (i.e. devices whose "can_wakeup" flags are set) and is created (or
|
||||||
(wake-on-LAN) feature has been set up with ethtool. It should also default
|
removed) by device_set_wakeup_capable().
|
||||||
to true for devices that don't generate wakeup requests on their own but merely
|
|
||||||
forward wakeup requests from one bus to another (like PCI bridges).
|
|
||||||
|
|
||||||
Whether or not a device is capable of issuing wakeup events is a hardware
|
Whether or not a device is capable of issuing wakeup events is a hardware
|
||||||
matter, and the kernel is responsible for keeping track of it. By contrast,
|
matter, and the kernel is responsible for keeping track of it. By contrast,
|
||||||
whether or not a wakeup-capable device should issue wakeup events is a policy
|
whether or not a wakeup-capable device should issue wakeup events is a policy
|
||||||
decision, and it is managed by user space through a sysfs attribute: the
|
decision, and it is managed by user space through a sysfs attribute: the
|
||||||
power/wakeup file. User space can write the strings "enabled" or "disabled" to
|
"power/wakeup" file. User space can write the strings "enabled" or "disabled"
|
||||||
set or clear the "should_wakeup" flag, respectively. This file is only present
|
to it to indicate whether or not, respectively, the device is supposed to signal
|
||||||
for wakeup-capable devices (i.e. devices whose "can_wakeup" flags are set)
|
system wakeup. This file is only present if the "power.wakeup" object exists
|
||||||
and is created (or removed) by device_set_wakeup_capable(). Reads from the
|
for the given device and is created (or removed) along with that object, by
|
||||||
file will return the corresponding string.
|
device_set_wakeup_capable(). Reads from the file will return the corresponding
|
||||||
|
string.
|
||||||
|
|
||||||
The device_may_wakeup() routine returns true only if both flags are set.
|
The "power/wakeup" file is supposed to contain the "disabled" string initially
|
||||||
|
for the majority of devices; the major exceptions are power buttons, keyboards,
|
||||||
|
and Ethernet adapters whose WoL (wake-on-LAN) feature has been set up with
|
||||||
|
ethtool. It should also default to "enabled" for devices that don't generate
|
||||||
|
wakeup requests on their own but merely forward wakeup requests from one bus to
|
||||||
|
another (like PCI Express ports).
|
||||||
|
|
||||||
|
The device_may_wakeup() routine returns true only if the "power.wakeup" object
|
||||||
|
exists and the corresponding "power/wakeup" file contains the string "enabled".
|
||||||
This information is used by subsystems, like the PCI bus type code, to see
|
This information is used by subsystems, like the PCI bus type code, to see
|
||||||
whether or not to enable the devices' wakeup mechanisms. If device wakeup
|
whether or not to enable the devices' wakeup mechanisms. If device wakeup
|
||||||
mechanisms are enabled or disabled directly by drivers, they also should use
|
mechanisms are enabled or disabled directly by drivers, they also should use
|
||||||
device_may_wakeup() to decide what to do during a system sleep transition.
|
device_may_wakeup() to decide what to do during a system sleep transition.
|
||||||
However for runtime power management, wakeup events should be enabled whenever
|
Device drivers, however, are not supposed to call device_set_wakeup_enable()
|
||||||
the device and driver both support them, regardless of the should_wakeup flag.
|
directly in any case.
|
||||||
|
|
||||||
|
It ought to be noted that system wakeup is conceptually different from "remote
|
||||||
|
wakeup" used by runtime power management, although it may be supported by the
|
||||||
|
same physical mechanism. Remote wakeup is a feature allowing devices in
|
||||||
|
low-power states to trigger specific interrupts to signal conditions in which
|
||||||
|
they should be put into the full-power state. Those interrupts may or may not
|
||||||
|
be used to signal system wakeup events, depending on the hardware design. On
|
||||||
|
some systems it is impossible to trigger them from system sleep states. In any
|
||||||
|
case, remote wakeup should always be enabled for runtime power management for
|
||||||
|
all devices and drivers that support it.
|
||||||
|
|
||||||
/sys/devices/.../power/control files
|
/sys/devices/.../power/control files
|
||||||
------------------------------------
|
------------------------------------
|
||||||
@@ -249,20 +266,31 @@ for every device before the next phase begins. Not all busses or classes
|
|||||||
support all these callbacks and not all drivers use all the callbacks. The
|
support all these callbacks and not all drivers use all the callbacks. The
|
||||||
various phases always run after tasks have been frozen and before they are
|
various phases always run after tasks have been frozen and before they are
|
||||||
unfrozen. Furthermore, the *_noirq phases run at a time when IRQ handlers have
|
unfrozen. Furthermore, the *_noirq phases run at a time when IRQ handlers have
|
||||||
been disabled (except for those marked with the IRQ_WAKEUP flag).
|
been disabled (except for those marked with the IRQF_NO_SUSPEND flag).
|
||||||
|
|
||||||
All phases use bus, type, or class callbacks (that is, methods defined in
|
All phases use PM domain, bus, type, or class callbacks (that is, methods
|
||||||
dev->bus->pm, dev->type->pm, or dev->class->pm). These callbacks are mutually
|
defined in dev->pm_domain->ops, dev->bus->pm, dev->type->pm, or dev->class->pm).
|
||||||
exclusive, so if the device type provides a struct dev_pm_ops object pointed to
|
These callbacks are regarded by the PM core as mutually exclusive. Moreover,
|
||||||
by its pm field (i.e. both dev->type and dev->type->pm are defined), the
|
PM domain callbacks always take precedence over bus, type and class callbacks,
|
||||||
callbacks included in that object (i.e. dev->type->pm) will be used. Otherwise,
|
while type callbacks take precedence over bus and class callbacks, and class
|
||||||
if the class provides a struct dev_pm_ops object pointed to by its pm field
|
callbacks take precedence over bus callbacks. To be precise, the following
|
||||||
(i.e. both dev->class and dev->class->pm are defined), the PM core will use the
|
rules are used to determine which callback to execute in the given phase:
|
||||||
callbacks from that object (i.e. dev->class->pm). Finally, if the pm fields of
|
|
||||||
both the device type and class objects are NULL (or those objects do not exist),
|
1. If dev->pm_domain is present, the PM core will attempt to execute the
|
||||||
the callbacks provided by the bus (that is, the callbacks from dev->bus->pm)
|
callback included in dev->pm_domain->ops. If that callback is not
|
||||||
will be used (this allows device types to override callbacks provided by bus
|
present, no action will be carried out for the given device.
|
||||||
types or classes if necessary).
|
|
||||||
|
2. Otherwise, if both dev->type and dev->type->pm are present, the callback
|
||||||
|
included in dev->type->pm will be executed.
|
||||||
|
|
||||||
|
3. Otherwise, if both dev->class and dev->class->pm are present, the
|
||||||
|
callback included in dev->class->pm will be executed.
|
||||||
|
|
||||||
|
4. Otherwise, if both dev->bus and dev->bus->pm are present, the callback
|
||||||
|
included in dev->bus->pm will be executed.
|
||||||
|
|
||||||
|
This allows PM domains and device types to override callbacks provided by bus
|
||||||
|
types or device classes if necessary.
|
||||||
|
|
||||||
These callbacks may in turn invoke device- or driver-specific methods stored in
|
These callbacks may in turn invoke device- or driver-specific methods stored in
|
||||||
dev->driver->pm, but they don't have to.
|
dev->driver->pm, but they don't have to.
|
||||||
@@ -283,9 +311,8 @@ When the system goes into the standby or memory sleep state, the phases are:
|
|||||||
|
|
||||||
After the prepare callback method returns, no new children may be
|
After the prepare callback method returns, no new children may be
|
||||||
registered below the device. The method may also prepare the device or
|
registered below the device. The method may also prepare the device or
|
||||||
driver in some way for the upcoming system power transition (for
|
driver in some way for the upcoming system power transition, but it
|
||||||
example, by allocating additional memory required for this purpose), but
|
should not put the device into a low-power state.
|
||||||
it should not put the device into a low-power state.
|
|
||||||
|
|
||||||
2. The suspend methods should quiesce the device to stop it from performing
|
2. The suspend methods should quiesce the device to stop it from performing
|
||||||
I/O. They also may save the device registers and put it into the
|
I/O. They also may save the device registers and put it into the
|
||||||
|
@@ -22,12 +22,12 @@ try_to_freeze_tasks() that sets TIF_FREEZE for all of the freezable tasks and
|
|||||||
either wakes them up, if they are kernel threads, or sends fake signals to them,
|
either wakes them up, if they are kernel threads, or sends fake signals to them,
|
||||||
if they are user space processes. A task that has TIF_FREEZE set, should react
|
if they are user space processes. A task that has TIF_FREEZE set, should react
|
||||||
to it by calling the function called refrigerator() (defined in
|
to it by calling the function called refrigerator() (defined in
|
||||||
kernel/power/process.c), which sets the task's PF_FROZEN flag, changes its state
|
kernel/freezer.c), which sets the task's PF_FROZEN flag, changes its state
|
||||||
to TASK_UNINTERRUPTIBLE and makes it loop until PF_FROZEN is cleared for it.
|
to TASK_UNINTERRUPTIBLE and makes it loop until PF_FROZEN is cleared for it.
|
||||||
Then, we say that the task is 'frozen' and therefore the set of functions
|
Then, we say that the task is 'frozen' and therefore the set of functions
|
||||||
handling this mechanism is referred to as 'the freezer' (these functions are
|
handling this mechanism is referred to as 'the freezer' (these functions are
|
||||||
defined in kernel/power/process.c and include/linux/freezer.h). User space
|
defined in kernel/power/process.c, kernel/freezer.c & include/linux/freezer.h).
|
||||||
processes are generally frozen before kernel threads.
|
User space processes are generally frozen before kernel threads.
|
||||||
|
|
||||||
It is not recommended to call refrigerator() directly. Instead, it is
|
It is not recommended to call refrigerator() directly. Instead, it is
|
||||||
recommended to use the try_to_freeze() function (defined in
|
recommended to use the try_to_freeze() function (defined in
|
||||||
@@ -95,7 +95,7 @@ after the memory for the image has been freed, we don't want tasks to allocate
|
|||||||
additional memory and we prevent them from doing that by freezing them earlier.
|
additional memory and we prevent them from doing that by freezing them earlier.
|
||||||
[Of course, this also means that device drivers should not allocate substantial
|
[Of course, this also means that device drivers should not allocate substantial
|
||||||
amounts of memory from their .suspend() callbacks before hibernation, but this
|
amounts of memory from their .suspend() callbacks before hibernation, but this
|
||||||
is e separate issue.]
|
is a separate issue.]
|
||||||
|
|
||||||
3. The third reason is to prevent user space processes and some kernel threads
|
3. The third reason is to prevent user space processes and some kernel threads
|
||||||
from interfering with the suspending and resuming of devices. A user space
|
from interfering with the suspending and resuming of devices. A user space
|
||||||
|
@@ -44,25 +44,33 @@ struct dev_pm_ops {
|
|||||||
};
|
};
|
||||||
|
|
||||||
The ->runtime_suspend(), ->runtime_resume() and ->runtime_idle() callbacks
|
The ->runtime_suspend(), ->runtime_resume() and ->runtime_idle() callbacks
|
||||||
are executed by the PM core for either the power domain, or the device type
|
are executed by the PM core for the device's subsystem that may be either of
|
||||||
(if the device power domain's struct dev_pm_ops does not exist), or the class
|
the following:
|
||||||
(if the device power domain's and type's struct dev_pm_ops object does not
|
|
||||||
exist), or the bus type (if the device power domain's, type's and class'
|
1. PM domain of the device, if the device's PM domain object, dev->pm_domain,
|
||||||
struct dev_pm_ops objects do not exist) of the given device, so the priority
|
is present.
|
||||||
order of callbacks from high to low is that power domain callbacks, device
|
|
||||||
type callbacks, class callbacks and bus type callbacks, and the high priority
|
2. Device type of the device, if both dev->type and dev->type->pm are present.
|
||||||
one will take precedence over low priority one. The bus type, device type and
|
|
||||||
class callbacks are referred to as subsystem-level callbacks in what follows,
|
3. Device class of the device, if both dev->class and dev->class->pm are
|
||||||
and generally speaking, the power domain callbacks are used for representing
|
present.
|
||||||
power domains within a SoC.
|
|
||||||
|
4. Bus type of the device, if both dev->bus and dev->bus->pm are present.
|
||||||
|
|
||||||
|
The PM core always checks which callback to use in the order given above, so the
|
||||||
|
priority order of callbacks from high to low is: PM domain, device type, class
|
||||||
|
and bus type. Moreover, the high-priority one will always take precedence over
|
||||||
|
a low-priority one. The PM domain, bus type, device type and class callbacks
|
||||||
|
are 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 their ->runtime_suspend(), ->runtime_resume() and
|
||||||
callbacks should be invoked in atomic context with interrupts disabled.
|
->runtime_idle() callbacks may be invoked in atomic context with interrupts
|
||||||
This implies that these callback routines must not block or sleep, but it also
|
disabled for a given device. This implies that the callback routines in
|
||||||
means that the synchronous helper functions listed at the end of Section 4 can
|
question must not block or sleep, but it also means that the synchronous helper
|
||||||
be used within an interrupt handler or in an atomic context.
|
functions listed at the end of Section 4 may be used for that device within an
|
||||||
|
interrupt handler or generally 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
|
||||||
@@ -789,6 +797,16 @@ will behave normally, not taking the autosuspend delay into account.
|
|||||||
Similarly, if the power.use_autosuspend field isn't set then the autosuspend
|
Similarly, if the power.use_autosuspend field isn't set then the autosuspend
|
||||||
helper functions will behave just like the non-autosuspend counterparts.
|
helper functions will behave just like the non-autosuspend counterparts.
|
||||||
|
|
||||||
|
Under some circumstances a driver or subsystem may want to prevent a device
|
||||||
|
from autosuspending immediately, even though the usage counter is zero and the
|
||||||
|
autosuspend delay time has expired. If the ->runtime_suspend() callback
|
||||||
|
returns -EAGAIN or -EBUSY, and if the next autosuspend delay expiration time is
|
||||||
|
in the future (as it normally would be if the callback invoked
|
||||||
|
pm_runtime_mark_last_busy()), the PM core will automatically reschedule the
|
||||||
|
autosuspend. The ->runtime_suspend() callback can't do this rescheduling
|
||||||
|
itself because no suspend requests of any kind are accepted while the device is
|
||||||
|
suspending (i.e., while the callback is running).
|
||||||
|
|
||||||
The implementation is well suited for asynchronous use in interrupt contexts.
|
The implementation is well suited for asynchronous use in interrupt contexts.
|
||||||
However such use inevitably involves races, because the PM core can't
|
However such use inevitably involves races, because the PM core can't
|
||||||
synchronize ->runtime_suspend() callbacks with the arrival of I/O requests.
|
synchronize ->runtime_suspend() callbacks with the arrival of I/O requests.
|
||||||
|
@@ -20,8 +20,6 @@ Version: 1.2.14
|
|||||||
Date: 11/01/2001
|
Date: 11/01/2001
|
||||||
Historical Author: Andrew Manison <amanison@america.net>
|
Historical Author: Andrew Manison <amanison@america.net>
|
||||||
Primary Author: Doug McNash
|
Primary Author: Doug McNash
|
||||||
Support: support@computone.com
|
|
||||||
Fixes and Updates: Mike Warfield <mhw@wittsend.com>
|
|
||||||
|
|
||||||
This file assumes that you are using the Computone drivers which are
|
This file assumes that you are using the Computone drivers which are
|
||||||
integrated into the kernel sources. For updating the drivers or installing
|
integrated into the kernel sources. For updating the drivers or installing
|
||||||
|
@@ -97,15 +97,23 @@
|
|||||||
|
|
||||||
struct serial_rs485 rs485conf;
|
struct serial_rs485 rs485conf;
|
||||||
|
|
||||||
/* Set RS485 mode: */
|
/* Enable RS485 mode: */
|
||||||
rs485conf.flags |= SER_RS485_ENABLED;
|
rs485conf.flags |= SER_RS485_ENABLED;
|
||||||
|
|
||||||
|
/* Set logical level for RTS pin equal to 1 when sending: */
|
||||||
|
rs485conf.flags |= SER_RS485_RTS_ON_SEND;
|
||||||
|
/* or, set logical level for RTS pin equal to 0 when sending: */
|
||||||
|
rs485conf.flags &= ~(SER_RS485_RTS_ON_SEND);
|
||||||
|
|
||||||
|
/* Set logical level for RTS pin equal to 1 after sending: */
|
||||||
|
rs485conf.flags |= SER_RS485_RTS_AFTER_SEND;
|
||||||
|
/* or, set logical level for RTS pin equal to 0 after sending: */
|
||||||
|
rs485conf.flags &= ~(SER_RS485_RTS_AFTER_SEND);
|
||||||
|
|
||||||
/* Set rts delay before send, if needed: */
|
/* Set rts delay before send, if needed: */
|
||||||
rs485conf.flags |= SER_RS485_RTS_BEFORE_SEND;
|
|
||||||
rs485conf.delay_rts_before_send = ...;
|
rs485conf.delay_rts_before_send = ...;
|
||||||
|
|
||||||
/* Set rts delay after send, if needed: */
|
/* Set rts delay after send, if needed: */
|
||||||
rs485conf.flags |= SER_RS485_RTS_AFTER_SEND;
|
|
||||||
rs485conf.delay_rts_after_send = ...;
|
rs485conf.delay_rts_after_send = ...;
|
||||||
|
|
||||||
/* Set this flag if you want to receive data even whilst sending data */
|
/* Set this flag if you want to receive data even whilst sending data */
|
||||||
|
@@ -349,6 +349,7 @@ STAC92HD83*
|
|||||||
ref Reference board
|
ref Reference board
|
||||||
mic-ref Reference board with power management for ports
|
mic-ref Reference board with power management for ports
|
||||||
dell-s14 Dell laptop
|
dell-s14 Dell laptop
|
||||||
|
dell-vostro-3500 Dell Vostro 3500 laptop
|
||||||
hp HP laptops with (inverted) mute-LED
|
hp HP laptops with (inverted) mute-LED
|
||||||
hp-dv7-4000 HP dv-7 4000
|
hp-dv7-4000 HP dv-7 4000
|
||||||
auto BIOS setup (default)
|
auto BIOS setup (default)
|
||||||
|
@@ -579,7 +579,7 @@ Development Tree
|
|||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
The latest development codes for HD-audio are found on sound git tree:
|
The latest development codes for HD-audio are found on sound git tree:
|
||||||
|
|
||||||
- git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git
|
- git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
|
||||||
|
|
||||||
The master branch or for-next branches can be used as the main
|
The master branch or for-next branches can be used as the main
|
||||||
development branches in general while the HD-audio specific patches
|
development branches in general while the HD-audio specific patches
|
||||||
@@ -594,7 +594,7 @@ is, installed via the usual spells: configure, make and make
|
|||||||
install(-modules). See INSTALL in the package. The snapshot tarballs
|
install(-modules). See INSTALL in the package. The snapshot tarballs
|
||||||
are found at:
|
are found at:
|
||||||
|
|
||||||
- ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/snapshot/
|
- ftp://ftp.suse.com/pub/people/tiwai/snapshot/
|
||||||
|
|
||||||
|
|
||||||
Sending a Bug Report
|
Sending a Bug Report
|
||||||
@@ -696,7 +696,7 @@ via hda-verb won't change the mixer value.
|
|||||||
|
|
||||||
The hda-verb program is found in the ftp directory:
|
The hda-verb program is found in the ftp directory:
|
||||||
|
|
||||||
- ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/misc/
|
- ftp://ftp.suse.com/pub/people/tiwai/misc/
|
||||||
|
|
||||||
Also a git repository is available:
|
Also a git repository is available:
|
||||||
|
|
||||||
@@ -764,7 +764,7 @@ operation, the jack plugging simulation, etc.
|
|||||||
|
|
||||||
The package is found in:
|
The package is found in:
|
||||||
|
|
||||||
- ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/misc/
|
- ftp://ftp.suse.com/pub/people/tiwai/misc/
|
||||||
|
|
||||||
A git repository is available:
|
A git repository is available:
|
||||||
|
|
||||||
|
@@ -90,10 +90,10 @@ ServiceBinary=%12%\USBSER.sys
|
|||||||
[SourceDisksFiles]
|
[SourceDisksFiles]
|
||||||
[SourceDisksNames]
|
[SourceDisksNames]
|
||||||
[DeviceList]
|
[DeviceList]
|
||||||
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_1D6B&PID_0104&MI_02
|
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_1D6B&PID_0104&MI_02, USB\VID_1D6B&PID_0106&MI_00
|
||||||
|
|
||||||
[DeviceList.NTamd64]
|
[DeviceList.NTamd64]
|
||||||
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_1D6B&PID_0104&MI_02
|
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_1D6B&PID_0104&MI_02, USB\VID_1D6B&PID_0106&MI_00
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------------------------------------------------
|
;------------------------------------------------------------------------------
|
||||||
|
195
Documentation/watchdog/convert_drivers_to_kernel_api.txt
Normal file
195
Documentation/watchdog/convert_drivers_to_kernel_api.txt
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
Converting old watchdog drivers to the watchdog framework
|
||||||
|
by Wolfram Sang <w.sang@pengutronix.de>
|
||||||
|
=========================================================
|
||||||
|
|
||||||
|
Before the watchdog framework came into the kernel, every driver had to
|
||||||
|
implement the API on its own. Now, as the framework factored out the common
|
||||||
|
components, those drivers can be lightened making it a user of the framework.
|
||||||
|
This document shall guide you for this task. The necessary steps are described
|
||||||
|
as well as things to look out for.
|
||||||
|
|
||||||
|
|
||||||
|
Remove the file_operations struct
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
Old drivers define their own file_operations for actions like open(), write(),
|
||||||
|
etc... These are now handled by the framework and just call the driver when
|
||||||
|
needed. So, in general, the 'file_operations' struct and assorted functions can
|
||||||
|
go. Only very few driver-specific details have to be moved to other functions.
|
||||||
|
Here is a overview of the functions and probably needed actions:
|
||||||
|
|
||||||
|
- open: Everything dealing with resource management (file-open checks, magic
|
||||||
|
close preparations) can simply go. Device specific stuff needs to go to the
|
||||||
|
driver specific start-function. Note that for some drivers, the start-function
|
||||||
|
also serves as the ping-function. If that is the case and you need start/stop
|
||||||
|
to be balanced (clocks!), you are better off refactoring a separate start-function.
|
||||||
|
|
||||||
|
- close: Same hints as for open apply.
|
||||||
|
|
||||||
|
- write: Can simply go, all defined behaviour is taken care of by the framework,
|
||||||
|
i.e. ping on write and magic char ('V') handling.
|
||||||
|
|
||||||
|
- ioctl: While the driver is allowed to have extensions to the IOCTL interface,
|
||||||
|
the most common ones are handled by the framework, supported by some assistance
|
||||||
|
from the driver:
|
||||||
|
|
||||||
|
WDIOC_GETSUPPORT:
|
||||||
|
Returns the mandatory watchdog_info struct from the driver
|
||||||
|
|
||||||
|
WDIOC_GETSTATUS:
|
||||||
|
Needs the status-callback defined, otherwise returns 0
|
||||||
|
|
||||||
|
WDIOC_GETBOOTSTATUS:
|
||||||
|
Needs the bootstatus member properly set. Make sure it is 0 if you
|
||||||
|
don't have further support!
|
||||||
|
|
||||||
|
WDIOC_SETOPTIONS:
|
||||||
|
No preparations needed
|
||||||
|
|
||||||
|
WDIOC_KEEPALIVE:
|
||||||
|
If wanted, options in watchdog_info need to have WDIOF_KEEPALIVEPING
|
||||||
|
set
|
||||||
|
|
||||||
|
WDIOC_SETTIMEOUT:
|
||||||
|
Options in watchdog_info need to have WDIOF_SETTIMEOUT set
|
||||||
|
and a set_timeout-callback has to be defined. The core will also
|
||||||
|
do limit-checking, if min_timeout and max_timeout in the watchdog
|
||||||
|
device are set. All is optional.
|
||||||
|
|
||||||
|
WDIOC_GETTIMEOUT:
|
||||||
|
No preparations needed
|
||||||
|
|
||||||
|
Other IOCTLs can be served using the ioctl-callback. Note that this is mainly
|
||||||
|
intended for porting old drivers; new drivers should not invent private IOCTLs.
|
||||||
|
Private IOCTLs are processed first. When the callback returns with
|
||||||
|
-ENOIOCTLCMD, the IOCTLs of the framework will be tried, too. Any other error
|
||||||
|
is directly given to the user.
|
||||||
|
|
||||||
|
Example conversion:
|
||||||
|
|
||||||
|
-static const struct file_operations s3c2410wdt_fops = {
|
||||||
|
- .owner = THIS_MODULE,
|
||||||
|
- .llseek = no_llseek,
|
||||||
|
- .write = s3c2410wdt_write,
|
||||||
|
- .unlocked_ioctl = s3c2410wdt_ioctl,
|
||||||
|
- .open = s3c2410wdt_open,
|
||||||
|
- .release = s3c2410wdt_release,
|
||||||
|
-};
|
||||||
|
|
||||||
|
Check the functions for device-specific stuff and keep it for later
|
||||||
|
refactoring. The rest can go.
|
||||||
|
|
||||||
|
|
||||||
|
Remove the miscdevice
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Since the file_operations are gone now, you can also remove the 'struct
|
||||||
|
miscdevice'. The framework will create it on watchdog_dev_register() called by
|
||||||
|
watchdog_register_device().
|
||||||
|
|
||||||
|
-static struct miscdevice s3c2410wdt_miscdev = {
|
||||||
|
- .minor = WATCHDOG_MINOR,
|
||||||
|
- .name = "watchdog",
|
||||||
|
- .fops = &s3c2410wdt_fops,
|
||||||
|
-};
|
||||||
|
|
||||||
|
|
||||||
|
Remove obsolete includes and defines
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Because of the simplifications, a few defines are probably unused now. Remove
|
||||||
|
them. Includes can be removed, too. For example:
|
||||||
|
|
||||||
|
- #include <linux/fs.h>
|
||||||
|
- #include <linux/miscdevice.h> (if MODULE_ALIAS_MISCDEV is not used)
|
||||||
|
- #include <linux/uaccess.h> (if no custom IOCTLs are used)
|
||||||
|
|
||||||
|
|
||||||
|
Add the watchdog operations
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
All possible callbacks are defined in 'struct watchdog_ops'. You can find it
|
||||||
|
explained in 'watchdog-kernel-api.txt' in this directory. start(), stop() and
|
||||||
|
owner must be set, the rest are optional. You will easily find corresponding
|
||||||
|
functions in the old driver. Note that you will now get a pointer to the
|
||||||
|
watchdog_device as a parameter to these functions, so you probably have to
|
||||||
|
change the function header. Other changes are most likely not needed, because
|
||||||
|
here simply happens the direct hardware access. If you have device-specific
|
||||||
|
code left from the above steps, it should be refactored into these callbacks.
|
||||||
|
|
||||||
|
Here is a simple example:
|
||||||
|
|
||||||
|
+static struct watchdog_ops s3c2410wdt_ops = {
|
||||||
|
+ .owner = THIS_MODULE,
|
||||||
|
+ .start = s3c2410wdt_start,
|
||||||
|
+ .stop = s3c2410wdt_stop,
|
||||||
|
+ .ping = s3c2410wdt_keepalive,
|
||||||
|
+ .set_timeout = s3c2410wdt_set_heartbeat,
|
||||||
|
+};
|
||||||
|
|
||||||
|
A typical function-header change looks like:
|
||||||
|
|
||||||
|
-static void s3c2410wdt_keepalive(void)
|
||||||
|
+static int s3c2410wdt_keepalive(struct watchdog_device *wdd)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
- s3c2410wdt_keepalive();
|
||||||
|
+ s3c2410wdt_keepalive(&s3c2410_wdd);
|
||||||
|
|
||||||
|
|
||||||
|
Add the watchdog device
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Now we need to create a 'struct watchdog_device' and populate it with the
|
||||||
|
necessary information for the framework. The struct is also explained in detail
|
||||||
|
in 'watchdog-kernel-api.txt' in this directory. We pass it the mandatory
|
||||||
|
watchdog_info struct and the newly created watchdog_ops. Often, old drivers
|
||||||
|
have their own record-keeping for things like bootstatus and timeout using
|
||||||
|
static variables. Those have to be converted to use the members in
|
||||||
|
watchdog_device. Note that the timeout values are unsigned int. Some drivers
|
||||||
|
use signed int, so this has to be converted, too.
|
||||||
|
|
||||||
|
Here is a simple example for a watchdog device:
|
||||||
|
|
||||||
|
+static struct watchdog_device s3c2410_wdd = {
|
||||||
|
+ .info = &s3c2410_wdt_ident,
|
||||||
|
+ .ops = &s3c2410wdt_ops,
|
||||||
|
+};
|
||||||
|
|
||||||
|
|
||||||
|
Register the watchdog device
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
Replace misc_register(&miscdev) with watchdog_register_device(&watchdog_dev).
|
||||||
|
Make sure the return value gets checked and the error message, if present,
|
||||||
|
still fits. Also convert the unregister case.
|
||||||
|
|
||||||
|
- ret = misc_register(&s3c2410wdt_miscdev);
|
||||||
|
+ ret = watchdog_register_device(&s3c2410_wdd);
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
- misc_deregister(&s3c2410wdt_miscdev);
|
||||||
|
+ watchdog_unregister_device(&s3c2410_wdd);
|
||||||
|
|
||||||
|
|
||||||
|
Update the Kconfig-entry
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
The entry for the driver now needs to select WATCHDOG_CORE:
|
||||||
|
|
||||||
|
+ select WATCHDOG_CORE
|
||||||
|
|
||||||
|
|
||||||
|
Create a patch and send it to upstream
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
Make sure you understood Documentation/SubmittingPatches and send your patch to
|
||||||
|
linux-watchdog@vger.kernel.org. We are looking forward to it :)
|
||||||
|
|
10
Kbuild
10
Kbuild
@@ -88,11 +88,13 @@ $(obj)/$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s Kbuild
|
|||||||
# 3) Check for missing system calls
|
# 3) Check for missing system calls
|
||||||
#
|
#
|
||||||
|
|
||||||
quiet_cmd_syscalls = CALL $<
|
always += missing-syscalls
|
||||||
cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags)
|
targets += missing-syscalls
|
||||||
|
|
||||||
PHONY += missing-syscalls
|
quiet_cmd_syscalls = CALL $<
|
||||||
missing-syscalls: scripts/checksyscalls.sh FORCE
|
cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags)
|
||||||
|
|
||||||
|
missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE
|
||||||
$(call cmd,syscalls)
|
$(call cmd,syscalls)
|
||||||
|
|
||||||
# Keep these two files during make clean
|
# Keep these two files during make clean
|
||||||
|
75
MAINTAINERS
75
MAINTAINERS
@@ -789,6 +789,7 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.pengutronix.de/git/imx/linux-2.6.git
|
T: git git://git.pengutronix.de/git/imx/linux-2.6.git
|
||||||
F: arch/arm/mach-mx*/
|
F: arch/arm/mach-mx*/
|
||||||
|
F: arch/arm/mach-imx/
|
||||||
F: arch/arm/plat-mxc/
|
F: arch/arm/plat-mxc/
|
||||||
|
|
||||||
ARM/FREESCALE IMX51
|
ARM/FREESCALE IMX51
|
||||||
@@ -804,6 +805,13 @@ S: Maintained
|
|||||||
T: git git://git.linaro.org/people/shawnguo/linux-2.6.git
|
T: git git://git.linaro.org/people/shawnguo/linux-2.6.git
|
||||||
F: arch/arm/mach-imx/*imx6*
|
F: arch/arm/mach-imx/*imx6*
|
||||||
|
|
||||||
|
ARM/FREESCALE MXS ARM ARCHITECTURE
|
||||||
|
M: Shawn Guo <shawn.guo@linaro.org>
|
||||||
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
S: Maintained
|
||||||
|
T: git git://git.linaro.org/people/shawnguo/linux-2.6.git
|
||||||
|
F: arch/arm/mach-mxs/
|
||||||
|
|
||||||
ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
|
ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
|
||||||
M: Lennert Buytenhek <kernel@wantstofly.org>
|
M: Lennert Buytenhek <kernel@wantstofly.org>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
@@ -1032,6 +1040,7 @@ F: arch/arm/include/asm/hardware/ioc.h
|
|||||||
F: arch/arm/include/asm/hardware/iomd.h
|
F: arch/arm/include/asm/hardware/iomd.h
|
||||||
F: arch/arm/include/asm/hardware/memc.h
|
F: arch/arm/include/asm/hardware/memc.h
|
||||||
F: arch/arm/mach-rpc/
|
F: arch/arm/mach-rpc/
|
||||||
|
F: drivers/net/ethernet/8390/etherh.c
|
||||||
F: drivers/net/ethernet/i825xx/ether1*
|
F: drivers/net/ethernet/i825xx/ether1*
|
||||||
F: drivers/net/ethernet/seeq/ether3*
|
F: drivers/net/ethernet/seeq/ether3*
|
||||||
F: drivers/scsi/arm/
|
F: drivers/scsi/arm/
|
||||||
@@ -1105,6 +1114,7 @@ F: drivers/media/video/s5p-fimc/
|
|||||||
ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
|
ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
|
||||||
M: Kyungmin Park <kyungmin.park@samsung.com>
|
M: Kyungmin Park <kyungmin.park@samsung.com>
|
||||||
M: Kamil Debski <k.debski@samsung.com>
|
M: Kamil Debski <k.debski@samsung.com>
|
||||||
|
M: Jeongtae Park <jtp.park@samsung.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org
|
L: linux-arm-kernel@lists.infradead.org
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@@ -1716,6 +1726,7 @@ F: include/linux/can.h
|
|||||||
F: include/linux/can/core.h
|
F: include/linux/can/core.h
|
||||||
F: include/linux/can/bcm.h
|
F: include/linux/can/bcm.h
|
||||||
F: include/linux/can/raw.h
|
F: include/linux/can/raw.h
|
||||||
|
F: include/linux/can/gw.h
|
||||||
|
|
||||||
CAN NETWORK DRIVERS
|
CAN NETWORK DRIVERS
|
||||||
M: Wolfgang Grandegger <wg@grandegger.com>
|
M: Wolfgang Grandegger <wg@grandegger.com>
|
||||||
@@ -1786,6 +1797,14 @@ F: include/net/cfg80211.h
|
|||||||
F: net/wireless/*
|
F: net/wireless/*
|
||||||
X: net/wireless/wext*
|
X: net/wireless/wext*
|
||||||
|
|
||||||
|
CHAR and MISC DRIVERS
|
||||||
|
M: Arnd Bergmann <arnd@arndb.de>
|
||||||
|
M: Greg Kroah-Hartman <greg@kroah.com>
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/char/*
|
||||||
|
F: drivers/misc/*
|
||||||
|
|
||||||
CHECKPATCH
|
CHECKPATCH
|
||||||
M: Andy Whitcroft <apw@canonical.com>
|
M: Andy Whitcroft <apw@canonical.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
@@ -1924,9 +1943,11 @@ S: Maintained
|
|||||||
F: drivers/connector/
|
F: drivers/connector/
|
||||||
|
|
||||||
CONTROL GROUPS (CGROUPS)
|
CONTROL GROUPS (CGROUPS)
|
||||||
M: Paul Menage <paul@paulmenage.org>
|
M: Tejun Heo <tj@kernel.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
|
||||||
|
L: cgroups@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: include/linux/cgroup*
|
F: include/linux/cgroup*
|
||||||
F: kernel/cgroup*
|
F: kernel/cgroup*
|
||||||
@@ -2340,6 +2361,13 @@ S: Supported
|
|||||||
F: drivers/gpu/drm/i915
|
F: drivers/gpu/drm/i915
|
||||||
F: include/drm/i915*
|
F: include/drm/i915*
|
||||||
|
|
||||||
|
DRM DRIVERS FOR EXYNOS
|
||||||
|
M: Inki Dae <inki.dae@samsung.com>
|
||||||
|
L: dri-devel@lists.freedesktop.org
|
||||||
|
S: Supported
|
||||||
|
F: drivers/gpu/drm/exynos
|
||||||
|
F: include/drm/exynos*
|
||||||
|
|
||||||
DSCC4 DRIVER
|
DSCC4 DRIVER
|
||||||
M: Francois Romieu <romieu@fr.zoreil.com>
|
M: Francois Romieu <romieu@fr.zoreil.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
@@ -2386,7 +2414,7 @@ F: include/linux/netfilter_bridge/ebt_*.h
|
|||||||
F: net/bridge/netfilter/ebt*.c
|
F: net/bridge/netfilter/ebt*.c
|
||||||
|
|
||||||
ECRYPT FILE SYSTEM
|
ECRYPT FILE SYSTEM
|
||||||
M: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
|
M: Tyler Hicks <tyhicks@canonical.com>
|
||||||
M: Dustin Kirkland <kirkland@canonical.com>
|
M: Dustin Kirkland <kirkland@canonical.com>
|
||||||
L: ecryptfs@vger.kernel.org
|
L: ecryptfs@vger.kernel.org
|
||||||
W: https://launchpad.net/ecryptfs
|
W: https://launchpad.net/ecryptfs
|
||||||
@@ -2574,7 +2602,7 @@ S: Maintained
|
|||||||
F: drivers/net/ethernet/i825xx/eexpress.*
|
F: drivers/net/ethernet/i825xx/eexpress.*
|
||||||
|
|
||||||
ETHERNET BRIDGE
|
ETHERNET BRIDGE
|
||||||
M: Stephen Hemminger <shemminger@linux-foundation.org>
|
M: Stephen Hemminger <shemminger@vyatta.com>
|
||||||
L: bridge@lists.linux-foundation.org
|
L: bridge@lists.linux-foundation.org
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
W: http://www.linuxfoundation.org/en/Net:Bridge
|
W: http://www.linuxfoundation.org/en/Net:Bridge
|
||||||
@@ -3018,6 +3046,13 @@ F: Documentation/hw_random.txt
|
|||||||
F: drivers/char/hw_random/
|
F: drivers/char/hw_random/
|
||||||
F: include/linux/hw_random.h
|
F: include/linux/hw_random.h
|
||||||
|
|
||||||
|
HARDWARE SPINLOCK CORE
|
||||||
|
M: Ohad Ben-Cohen <ohad@wizery.com>
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/hwspinlock.txt
|
||||||
|
F: drivers/hwspinlock/hwspinlock_*
|
||||||
|
F: include/linux/hwspinlock.h
|
||||||
|
|
||||||
HARMONY SOUND DRIVER
|
HARMONY SOUND DRIVER
|
||||||
M: Kyle McMartin <kyle@mcmartin.ca>
|
M: Kyle McMartin <kyle@mcmartin.ca>
|
||||||
L: linux-parisc@vger.kernel.org
|
L: linux-parisc@vger.kernel.org
|
||||||
@@ -3701,7 +3736,7 @@ F: fs/jbd2/
|
|||||||
F: include/linux/jbd2.h
|
F: include/linux/jbd2.h
|
||||||
|
|
||||||
JSM Neo PCI based serial card
|
JSM Neo PCI based serial card
|
||||||
M: Breno Leitao <leitao@linux.vnet.ibm.com>
|
M: Lucas Tavares <lucaskt@linux.vnet.ibm.com>
|
||||||
L: linux-serial@vger.kernel.org
|
L: linux-serial@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/tty/serial/jsm/
|
F: drivers/tty/serial/jsm/
|
||||||
@@ -4287,6 +4322,7 @@ MEMORY RESOURCE CONTROLLER
|
|||||||
M: Balbir Singh <bsingharora@gmail.com>
|
M: Balbir Singh <bsingharora@gmail.com>
|
||||||
M: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
|
M: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
|
||||||
M: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
|
M: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
|
||||||
|
L: cgroups@vger.kernel.org
|
||||||
L: linux-mm@kvack.org
|
L: linux-mm@kvack.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: mm/memcontrol.c
|
F: mm/memcontrol.c
|
||||||
@@ -4320,7 +4356,7 @@ MIPS
|
|||||||
M: Ralf Baechle <ralf@linux-mips.org>
|
M: Ralf Baechle <ralf@linux-mips.org>
|
||||||
L: linux-mips@linux-mips.org
|
L: linux-mips@linux-mips.org
|
||||||
W: http://www.linux-mips.org/
|
W: http://www.linux-mips.org/
|
||||||
T: git git://git.linux-mips.org/pub/scm/linux.git
|
T: git git://git.linux-mips.org/pub/scm/ralf/linux.git
|
||||||
Q: http://patchwork.linux-mips.org/project/linux-mips/list/
|
Q: http://patchwork.linux-mips.org/project/linux-mips/list/
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/mips/
|
F: Documentation/mips/
|
||||||
@@ -4453,7 +4489,7 @@ S: Supported
|
|||||||
F: drivers/infiniband/hw/nes/
|
F: drivers/infiniband/hw/nes/
|
||||||
|
|
||||||
NETEM NETWORK EMULATOR
|
NETEM NETWORK EMULATOR
|
||||||
M: Stephen Hemminger <shemminger@linux-foundation.org>
|
M: Stephen Hemminger <shemminger@vyatta.com>
|
||||||
L: netem@lists.linux-foundation.org
|
L: netem@lists.linux-foundation.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: net/sched/sch_netem.c
|
F: net/sched/sch_netem.c
|
||||||
@@ -4469,11 +4505,9 @@ F: Documentation/networking/vxge.txt
|
|||||||
F: drivers/net/ethernet/neterion/
|
F: drivers/net/ethernet/neterion/
|
||||||
|
|
||||||
NETFILTER/IPTABLES/IPCHAINS
|
NETFILTER/IPTABLES/IPCHAINS
|
||||||
P: Rusty Russell
|
|
||||||
P: Marc Boucher
|
|
||||||
P: James Morris
|
|
||||||
P: Harald Welte
|
P: Harald Welte
|
||||||
P: Jozsef Kadlecsik
|
P: Jozsef Kadlecsik
|
||||||
|
M: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
M: Patrick McHardy <kaber@trash.net>
|
M: Patrick McHardy <kaber@trash.net>
|
||||||
L: netfilter-devel@vger.kernel.org
|
L: netfilter-devel@vger.kernel.org
|
||||||
L: netfilter@vger.kernel.org
|
L: netfilter@vger.kernel.org
|
||||||
@@ -4666,7 +4700,7 @@ L: linux-omap@vger.kernel.org
|
|||||||
W: http://www.muru.com/linux/omap/
|
W: http://www.muru.com/linux/omap/
|
||||||
W: http://linux.omap.com/
|
W: http://linux.omap.com/
|
||||||
Q: http://patchwork.kernel.org/project/linux-omap/list/
|
Q: http://patchwork.kernel.org/project/linux-omap/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/*omap*/
|
F: arch/arm/*omap*/
|
||||||
|
|
||||||
@@ -4714,6 +4748,13 @@ S: Maintained
|
|||||||
F: drivers/video/omap2/
|
F: drivers/video/omap2/
|
||||||
F: Documentation/arm/OMAP/DSS
|
F: Documentation/arm/OMAP/DSS
|
||||||
|
|
||||||
|
OMAP HARDWARE SPINLOCK SUPPORT
|
||||||
|
M: Ohad Ben-Cohen <ohad@wizery.com>
|
||||||
|
L: linux-omap@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/hwspinlock/omap_hwspinlock.c
|
||||||
|
F: arch/arm/mach-omap2/hwspinlock.c
|
||||||
|
|
||||||
OMAP MMC SUPPORT
|
OMAP MMC SUPPORT
|
||||||
M: Jarkko Lavinen <jarkko.lavinen@nokia.com>
|
M: Jarkko Lavinen <jarkko.lavinen@nokia.com>
|
||||||
L: linux-omap@vger.kernel.org
|
L: linux-omap@vger.kernel.org
|
||||||
@@ -4925,7 +4966,7 @@ F: drivers/char/ppdev.c
|
|||||||
F: include/linux/ppdev.h
|
F: include/linux/ppdev.h
|
||||||
|
|
||||||
PARAVIRT_OPS INTERFACE
|
PARAVIRT_OPS INTERFACE
|
||||||
M: Jeremy Fitzhardinge <jeremy@xensource.com>
|
M: Jeremy Fitzhardinge <jeremy@goop.org>
|
||||||
M: Chris Wright <chrisw@sous-sol.org>
|
M: Chris Wright <chrisw@sous-sol.org>
|
||||||
M: Alok Kataria <akataria@vmware.com>
|
M: Alok Kataria <akataria@vmware.com>
|
||||||
M: Rusty Russell <rusty@rustcorp.com.au>
|
M: Rusty Russell <rusty@rustcorp.com.au>
|
||||||
@@ -5457,7 +5498,7 @@ S: Maintained
|
|||||||
F: drivers/net/ethernet/rdc/r6040.c
|
F: drivers/net/ethernet/rdc/r6040.c
|
||||||
|
|
||||||
RDS - RELIABLE DATAGRAM SOCKETS
|
RDS - RELIABLE DATAGRAM SOCKETS
|
||||||
M: Andy Grover <andy.grover@oracle.com>
|
M: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>
|
||||||
L: rds-devel@oss.oracle.com (moderated for non-subscribers)
|
L: rds-devel@oss.oracle.com (moderated for non-subscribers)
|
||||||
S: Supported
|
S: Supported
|
||||||
F: net/rds/
|
F: net/rds/
|
||||||
@@ -5634,7 +5675,6 @@ F: drivers/media/video/*7146*
|
|||||||
F: include/media/*7146*
|
F: include/media/*7146*
|
||||||
|
|
||||||
SAMSUNG AUDIO (ASoC) DRIVERS
|
SAMSUNG AUDIO (ASoC) DRIVERS
|
||||||
M: Jassi Brar <jassisinghbrar@gmail.com>
|
|
||||||
M: Sangbeom Kim <sbkim73@samsung.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
|
||||||
@@ -5963,7 +6003,7 @@ S: Maintained
|
|||||||
F: drivers/usb/misc/sisusbvga/
|
F: drivers/usb/misc/sisusbvga/
|
||||||
|
|
||||||
SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
|
SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
|
||||||
M: Stephen Hemminger <shemminger@linux-foundation.org>
|
M: Stephen Hemminger <shemminger@vyatta.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/ethernet/marvell/sk*
|
F: drivers/net/ethernet/marvell/sk*
|
||||||
@@ -6108,7 +6148,7 @@ F: sound/
|
|||||||
SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
|
SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
|
||||||
M: Liam Girdwood <lrg@ti.com>
|
M: Liam Girdwood <lrg@ti.com>
|
||||||
M: Mark Brown <broonie@opensource.wolfsonmicro.com>
|
M: Mark Brown <broonie@opensource.wolfsonmicro.com>
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
|
||||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
W: http://alsa-project.org/main/index.php/ASoC
|
W: http://alsa-project.org/main/index.php/ASoC
|
||||||
S: Supported
|
S: Supported
|
||||||
@@ -7377,8 +7417,8 @@ S: Maintained
|
|||||||
F: arch/x86/kernel/cpu/mcheck/*
|
F: arch/x86/kernel/cpu/mcheck/*
|
||||||
|
|
||||||
XEN HYPERVISOR INTERFACE
|
XEN HYPERVISOR INTERFACE
|
||||||
M: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
|
||||||
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||||
|
M: Jeremy Fitzhardinge <jeremy@goop.org>
|
||||||
L: xen-devel@lists.xensource.com (moderated for non-subscribers)
|
L: xen-devel@lists.xensource.com (moderated for non-subscribers)
|
||||||
L: virtualization@lists.linux-foundation.org
|
L: virtualization@lists.linux-foundation.org
|
||||||
S: Supported
|
S: Supported
|
||||||
@@ -7411,7 +7451,8 @@ F: drivers/xen/*swiotlb*
|
|||||||
|
|
||||||
XFS FILESYSTEM
|
XFS FILESYSTEM
|
||||||
P: Silicon Graphics Inc
|
P: Silicon Graphics Inc
|
||||||
M: Alex Elder <aelder@sgi.com>
|
M: Ben Myers <bpm@sgi.com>
|
||||||
|
M: Alex Elder <elder@kernel.org>
|
||||||
M: xfs-masters@oss.sgi.com
|
M: xfs-masters@oss.sgi.com
|
||||||
L: xfs@oss.sgi.com
|
L: xfs@oss.sgi.com
|
||||||
W: http://oss.sgi.com/projects/xfs
|
W: http://oss.sgi.com/projects/xfs
|
||||||
|
10
Makefile
10
Makefile
@@ -1,8 +1,8 @@
|
|||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 1
|
PATCHLEVEL = 2
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION =
|
EXTRAVERSION = -rc4
|
||||||
NAME = "Divemaster Edition"
|
NAME = Saber-toothed Squirrel
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
# To see a list of typical targets execute "make help"
|
# To see a list of typical targets execute "make help"
|
||||||
@@ -983,7 +983,6 @@ archprepare: prepare1 scripts_basic
|
|||||||
|
|
||||||
prepare0: archprepare FORCE
|
prepare0: archprepare FORCE
|
||||||
$(Q)$(MAKE) $(build)=.
|
$(Q)$(MAKE) $(build)=.
|
||||||
$(Q)$(MAKE) $(build)=. missing-syscalls
|
|
||||||
|
|
||||||
# All the preparing..
|
# All the preparing..
|
||||||
prepare: prepare0
|
prepare: prepare0
|
||||||
@@ -1198,7 +1197,7 @@ distclean: mrproper
|
|||||||
@find $(srctree) $(RCS_FIND_IGNORE) \
|
@find $(srctree) $(RCS_FIND_IGNORE) \
|
||||||
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
|
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
|
||||||
-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
|
-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
|
||||||
-o -name '.*.rej' -o -size 0 \
|
-o -name '.*.rej' \
|
||||||
-o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
|
-o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
|
||||||
-type f -print | xargs rm -f
|
-type f -print | xargs rm -f
|
||||||
|
|
||||||
@@ -1296,7 +1295,6 @@ help:
|
|||||||
@echo ' 2: warnings which occur quite often but may still be relevant'
|
@echo ' 2: warnings which occur quite often but may still be relevant'
|
||||||
@echo ' 3: more obscure warnings, can most likely be ignored'
|
@echo ' 3: more obscure warnings, can most likely be ignored'
|
||||||
@echo ' Multiple levels can be combined with W=12 or W=123'
|
@echo ' Multiple levels can be combined with W=12 or W=123'
|
||||||
@echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
|
|
||||||
@echo ''
|
@echo ''
|
||||||
@echo 'Execute "make" or "make all" to build all targets marked with [*] '
|
@echo 'Execute "make" or "make all" to build all targets marked with [*] '
|
||||||
@echo 'For further info see the ./README file'
|
@echo 'For further info see the ./README file'
|
||||||
|
@@ -445,11 +445,6 @@ config ALPHA_EV67
|
|||||||
Is this a machine based on the EV67 core? If in doubt, select N here
|
Is this a machine based on the EV67 core? If in doubt, select N here
|
||||||
and the machine will be treated as an EV6.
|
and the machine will be treated as an EV6.
|
||||||
|
|
||||||
config ALPHA_EV7
|
|
||||||
bool
|
|
||||||
depends on ALPHA_MARVEL
|
|
||||||
default y
|
|
||||||
|
|
||||||
config ALPHA_MCPCIA
|
config ALPHA_MCPCIA
|
||||||
bool
|
bool
|
||||||
depends on ALPHA_RAWHIDE
|
depends on ALPHA_RAWHIDE
|
||||||
|
@@ -303,6 +303,7 @@ irongate_init_arch(void)
|
|||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
#include <linux/agp_backend.h>
|
#include <linux/agp_backend.h>
|
||||||
#include <linux/agpgart.h>
|
#include <linux/agpgart.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
|
|
||||||
#define GET_PAGE_DIR_OFF(addr) (addr >> 22)
|
#define GET_PAGE_DIR_OFF(addr) (addr >> 22)
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/stat.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/scatterlist.h>
|
#include <linux/scatterlist.h>
|
||||||
#include <linux/log2.h>
|
#include <linux/log2.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
@@ -43,6 +43,7 @@
|
|||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <linux/log2.h>
|
#include <linux/log2.h>
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
extern struct atomic_notifier_head panic_notifier_list;
|
extern struct atomic_notifier_head panic_notifier_list;
|
||||||
static int alpha_panic_event(struct notifier_block *, unsigned long, void *);
|
static int alpha_panic_event(struct notifier_block *, unsigned long, void *);
|
||||||
|
@@ -595,6 +595,7 @@ config ARCH_MMP
|
|||||||
select TICK_ONESHOT
|
select TICK_ONESHOT
|
||||||
select PLAT_PXA
|
select PLAT_PXA
|
||||||
select SPARSE_IRQ
|
select SPARSE_IRQ
|
||||||
|
select GENERIC_ALLOCATOR
|
||||||
help
|
help
|
||||||
Support for Marvell's PXA168/PXA910(MMP) and MMP2 processor line.
|
Support for Marvell's PXA168/PXA910(MMP) and MMP2 processor line.
|
||||||
|
|
||||||
@@ -769,6 +770,7 @@ config ARCH_S3C64XX
|
|||||||
select CPU_V6
|
select CPU_V6
|
||||||
select ARM_VIC
|
select ARM_VIC
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
|
select HAVE_TCM
|
||||||
select CLKDEV_LOOKUP
|
select CLKDEV_LOOKUP
|
||||||
select NO_IOPORT
|
select NO_IOPORT
|
||||||
select ARCH_USES_GETTIMEOFFSET
|
select ARCH_USES_GETTIMEOFFSET
|
||||||
@@ -777,9 +779,6 @@ config ARCH_S3C64XX
|
|||||||
select SAMSUNG_CLKSRC
|
select SAMSUNG_CLKSRC
|
||||||
select SAMSUNG_IRQ_VIC_TIMER
|
select SAMSUNG_IRQ_VIC_TIMER
|
||||||
select S3C_GPIO_TRACK
|
select S3C_GPIO_TRACK
|
||||||
select S3C_GPIO_PULL_UPDOWN
|
|
||||||
select S3C_GPIO_CFG_S3C24XX
|
|
||||||
select S3C_GPIO_CFG_S3C64XX
|
|
||||||
select S3C_DEV_NAND
|
select S3C_DEV_NAND
|
||||||
select USB_ARCH_HAS_OHCI
|
select USB_ARCH_HAS_OHCI
|
||||||
select SAMSUNG_GPIOLIB_4BIT
|
select SAMSUNG_GPIOLIB_4BIT
|
||||||
@@ -838,8 +837,8 @@ config ARCH_S5PV210
|
|||||||
help
|
help
|
||||||
Samsung S5PV210/S5PC110 series based systems
|
Samsung S5PV210/S5PC110 series based systems
|
||||||
|
|
||||||
config ARCH_EXYNOS4
|
config ARCH_EXYNOS
|
||||||
bool "Samsung EXYNOS4"
|
bool "SAMSUNG EXYNOS"
|
||||||
select CPU_V7
|
select CPU_V7
|
||||||
select ARCH_SPARSEMEM_ENABLE
|
select ARCH_SPARSEMEM_ENABLE
|
||||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||||
@@ -853,7 +852,7 @@ config ARCH_EXYNOS4
|
|||||||
select HAVE_S3C2410_WATCHDOG if WATCHDOG
|
select HAVE_S3C2410_WATCHDOG if WATCHDOG
|
||||||
select NEED_MACH_MEMORY_H
|
select NEED_MACH_MEMORY_H
|
||||||
help
|
help
|
||||||
Samsung EXYNOS4 series based systems
|
Support for SAMSUNG's EXYNOS SoCs (EXYNOS4/5)
|
||||||
|
|
||||||
config ARCH_SHARK
|
config ARCH_SHARK
|
||||||
bool "Shark"
|
bool "Shark"
|
||||||
@@ -1080,7 +1079,7 @@ source "arch/arm/mach-s5pc100/Kconfig"
|
|||||||
|
|
||||||
source "arch/arm/mach-s5pv210/Kconfig"
|
source "arch/arm/mach-s5pv210/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-exynos4/Kconfig"
|
source "arch/arm/mach-exynos/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-shmobile/Kconfig"
|
source "arch/arm/mach-shmobile/Kconfig"
|
||||||
|
|
||||||
@@ -1232,7 +1231,7 @@ config ARM_ERRATA_742231
|
|||||||
capabilities of the processor.
|
capabilities of the processor.
|
||||||
|
|
||||||
config PL310_ERRATA_588369
|
config PL310_ERRATA_588369
|
||||||
bool "Clean & Invalidate maintenance operations do not invalidate clean lines"
|
bool "PL310 errata: Clean & Invalidate maintenance operations do not invalidate clean lines"
|
||||||
depends on CACHE_L2X0
|
depends on CACHE_L2X0
|
||||||
help
|
help
|
||||||
The PL310 L2 cache controller implements three types of Clean &
|
The PL310 L2 cache controller implements three types of Clean &
|
||||||
@@ -1257,7 +1256,7 @@ config ARM_ERRATA_720789
|
|||||||
entries regardless of the ASID.
|
entries regardless of the ASID.
|
||||||
|
|
||||||
config PL310_ERRATA_727915
|
config PL310_ERRATA_727915
|
||||||
bool "Background Clean & Invalidate by Way operation can cause data corruption"
|
bool "PL310 errata: Background Clean & Invalidate by Way operation can cause data corruption"
|
||||||
depends on CACHE_L2X0
|
depends on CACHE_L2X0
|
||||||
help
|
help
|
||||||
PL310 implements the Clean & Invalidate by Way L2 cache maintenance
|
PL310 implements the Clean & Invalidate by Way L2 cache maintenance
|
||||||
@@ -1290,8 +1289,8 @@ config ARM_ERRATA_751472
|
|||||||
operation is received by a CPU before the ICIALLUIS has completed,
|
operation is received by a CPU before the ICIALLUIS has completed,
|
||||||
potentially leading to corrupted entries in the cache or TLB.
|
potentially leading to corrupted entries in the cache or TLB.
|
||||||
|
|
||||||
config ARM_ERRATA_753970
|
config PL310_ERRATA_753970
|
||||||
bool "ARM errata: cache sync operation may be faulty"
|
bool "PL310 errata: cache sync operation may be faulty"
|
||||||
depends on CACHE_PL310
|
depends on CACHE_PL310
|
||||||
help
|
help
|
||||||
This option enables the workaround for the 753970 PL310 (r3p0) erratum.
|
This option enables the workaround for the 753970 PL310 (r3p0) erratum.
|
||||||
@@ -1353,6 +1352,18 @@ config ARM_ERRATA_764369
|
|||||||
relevant cache maintenance functions and sets a specific bit
|
relevant cache maintenance functions and sets a specific bit
|
||||||
in the diagnostic control register of the SCU.
|
in the diagnostic control register of the SCU.
|
||||||
|
|
||||||
|
config PL310_ERRATA_769419
|
||||||
|
bool "PL310 errata: no automatic Store Buffer drain"
|
||||||
|
depends on CACHE_L2X0
|
||||||
|
help
|
||||||
|
On revisions of the PL310 prior to r3p2, the Store Buffer does
|
||||||
|
not automatically drain. This can cause normal, non-cacheable
|
||||||
|
writes to be retained when the memory system is idle, leading
|
||||||
|
to suboptimal I/O performance for drivers using coherent DMA.
|
||||||
|
This option adds a write barrier to the cpu_idle loop so that,
|
||||||
|
on systems with an outer cache, the store buffer is drained
|
||||||
|
explicitly.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
source "arch/arm/common/Kconfig"
|
source "arch/arm/common/Kconfig"
|
||||||
@@ -2212,7 +2223,7 @@ menu "Power management options"
|
|||||||
source "kernel/power/Kconfig"
|
source "kernel/power/Kconfig"
|
||||||
|
|
||||||
config ARCH_SUSPEND_POSSIBLE
|
config ARCH_SUSPEND_POSSIBLE
|
||||||
depends on !ARCH_S5P64X0 && !ARCH_S5PC100
|
depends on !ARCH_S5PC100
|
||||||
depends on CPU_ARM920T || CPU_ARM926T || CPU_SA1100 || \
|
depends on CPU_ARM920T || CPU_ARM926T || CPU_SA1100 || \
|
||||||
CPU_V6 || CPU_V6K || CPU_V7 || CPU_XSC3 || CPU_XSCALE
|
CPU_V6 || CPU_V6K || CPU_V7 || CPU_XSC3 || CPU_XSCALE
|
||||||
def_bool y
|
def_bool y
|
||||||
|
@@ -180,7 +180,7 @@ machine-$(CONFIG_ARCH_S3C64XX) := s3c64xx
|
|||||||
machine-$(CONFIG_ARCH_S5P64X0) := s5p64x0
|
machine-$(CONFIG_ARCH_S5P64X0) := s5p64x0
|
||||||
machine-$(CONFIG_ARCH_S5PC100) := s5pc100
|
machine-$(CONFIG_ARCH_S5PC100) := s5pc100
|
||||||
machine-$(CONFIG_ARCH_S5PV210) := s5pv210
|
machine-$(CONFIG_ARCH_S5PV210) := s5pv210
|
||||||
machine-$(CONFIG_ARCH_EXYNOS4) := exynos4
|
machine-$(CONFIG_ARCH_EXYNOS4) := exynos
|
||||||
machine-$(CONFIG_ARCH_SA1100) := sa1100
|
machine-$(CONFIG_ARCH_SA1100) := sa1100
|
||||||
machine-$(CONFIG_ARCH_SHARK) := shark
|
machine-$(CONFIG_ARCH_SHARK) := shark
|
||||||
machine-$(CONFIG_ARCH_SHMOBILE) := shmobile
|
machine-$(CONFIG_ARCH_SHMOBILE) := shmobile
|
||||||
|
@@ -65,6 +65,8 @@ $(obj)/%.dtb: $(src)/dts/%.dts
|
|||||||
|
|
||||||
$(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y))
|
$(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y))
|
||||||
|
|
||||||
|
clean-files := *.dtb
|
||||||
|
|
||||||
quiet_cmd_uimage = UIMAGE $@
|
quiet_cmd_uimage = UIMAGE $@
|
||||||
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
|
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
|
||||||
-C none -a $(LOADADDR) -e $(STARTADDR) \
|
-C none -a $(LOADADDR) -e $(STARTADDR) \
|
||||||
|
@@ -22,11 +22,10 @@
|
|||||||
sdhci@c8000400 {
|
sdhci@c8000400 {
|
||||||
cd-gpios = <&gpio 69 0>; /* gpio PI5 */
|
cd-gpios = <&gpio 69 0>; /* gpio PI5 */
|
||||||
wp-gpios = <&gpio 57 0>; /* gpio PH1 */
|
wp-gpios = <&gpio 57 0>; /* gpio PH1 */
|
||||||
power-gpios = <&gpio 155 0>; /* gpio PT3 */
|
power-gpios = <&gpio 70 0>; /* gpio PI6 */
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhci@c8000600 {
|
sdhci@c8000600 {
|
||||||
power-gpios = <&gpio 70 0>; /* gpio PI6 */
|
|
||||||
support-8bit;
|
support-8bit;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@@ -526,6 +526,7 @@ static void __init gic_pm_init(struct gic_chip_data *gic)
|
|||||||
sizeof(u32));
|
sizeof(u32));
|
||||||
BUG_ON(!gic->saved_ppi_conf);
|
BUG_ON(!gic->saved_ppi_conf);
|
||||||
|
|
||||||
|
if (gic == &gic_data[0])
|
||||||
cpu_pm_register_notifier(&gic_notifier_block);
|
cpu_pm_register_notifier(&gic_notifier_block);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@@ -581,13 +582,16 @@ void __init gic_init(unsigned int gic_nr, int irq_start,
|
|||||||
* For primary GICs, skip over SGIs.
|
* For primary GICs, skip over SGIs.
|
||||||
* For secondary GICs, skip over PPIs, too.
|
* For secondary GICs, skip over PPIs, too.
|
||||||
*/
|
*/
|
||||||
|
domain->hwirq_base = 32;
|
||||||
if (gic_nr == 0) {
|
if (gic_nr == 0) {
|
||||||
gic_cpu_base_addr = cpu_base;
|
gic_cpu_base_addr = cpu_base;
|
||||||
|
|
||||||
|
if ((irq_start & 31) > 0) {
|
||||||
domain->hwirq_base = 16;
|
domain->hwirq_base = 16;
|
||||||
if (irq_start > 0)
|
if (irq_start != -1)
|
||||||
irq_start = (irq_start & ~31) + 16;
|
irq_start = (irq_start & ~31) + 16;
|
||||||
} else
|
}
|
||||||
domain->hwirq_base = 32;
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find out how many interrupts are supported.
|
* Find out how many interrupts are supported.
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
#include <asm/mach/pci.h>
|
#include <asm/mach/pci.h>
|
||||||
#include <asm/hardware/it8152.h>
|
#include <asm/hardware/it8152.h>
|
||||||
|
@@ -1211,8 +1211,8 @@ static inline u32 _prepare_ccr(const struct pl330_reqcfg *rqc)
|
|||||||
ccr |= (rqc->brst_size << CC_SRCBRSTSIZE_SHFT);
|
ccr |= (rqc->brst_size << CC_SRCBRSTSIZE_SHFT);
|
||||||
ccr |= (rqc->brst_size << CC_DSTBRSTSIZE_SHFT);
|
ccr |= (rqc->brst_size << CC_DSTBRSTSIZE_SHFT);
|
||||||
|
|
||||||
ccr |= (rqc->dcctl << CC_SRCCCTRL_SHFT);
|
ccr |= (rqc->scctl << CC_SRCCCTRL_SHFT);
|
||||||
ccr |= (rqc->scctl << CC_DSTCCTRL_SHFT);
|
ccr |= (rqc->dcctl << CC_DSTCCTRL_SHFT);
|
||||||
|
|
||||||
ccr |= (rqc->swap << CC_SWAP_SHFT);
|
ccr |= (rqc->swap << CC_SWAP_SHFT);
|
||||||
|
|
||||||
@@ -1623,6 +1623,11 @@ static inline int _alloc_event(struct pl330_thread *thrd)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool _chan_ns(const struct pl330_info *pi, int i)
|
||||||
|
{
|
||||||
|
return pi->pcfg.irq_ns & (1 << i);
|
||||||
|
}
|
||||||
|
|
||||||
/* Upon success, returns IdentityToken for the
|
/* Upon success, returns IdentityToken for the
|
||||||
* allocated channel, NULL otherwise.
|
* allocated channel, NULL otherwise.
|
||||||
*/
|
*/
|
||||||
@@ -1647,7 +1652,8 @@ void *pl330_request_channel(const struct pl330_info *pi)
|
|||||||
|
|
||||||
for (i = 0; i < chans; i++) {
|
for (i = 0; i < chans; i++) {
|
||||||
thrd = &pl330->channels[i];
|
thrd = &pl330->channels[i];
|
||||||
if (thrd->free) {
|
if ((thrd->free) && (!_manager_ns(thrd) ||
|
||||||
|
_chan_ns(pi, i))) {
|
||||||
thrd->ev = _alloc_event(thrd);
|
thrd->ev = _alloc_event(thrd);
|
||||||
if (thrd->ev >= 0) {
|
if (thrd->ev >= 0) {
|
||||||
thrd->free = false;
|
thrd->free = false;
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <asm/hardware/scoop.h>
|
#include <asm/hardware/scoop.h>
|
||||||
|
|
||||||
|
@@ -38,7 +38,6 @@ CONFIG_IP_PNP_RARP=y
|
|||||||
# CONFIG_IPV6 is not set
|
# CONFIG_IPV6 is not set
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
@@ -52,16 +51,12 @@ CONFIG_MTD_NAND_ATMEL=y
|
|||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||||
CONFIG_ATMEL_SSC=y
|
|
||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_SCSI_MULTI_LUN=y
|
CONFIG_SCSI_MULTI_LUN=y
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_MII=y
|
CONFIG_MII=y
|
||||||
CONFIG_MACB=y
|
CONFIG_MACB=y
|
||||||
# CONFIG_NETDEV_1000 is not set
|
|
||||||
# CONFIG_NETDEV_10000 is not set
|
|
||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||||
CONFIG_INPUT_EVDEV=y
|
CONFIG_INPUT_EVDEV=y
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
# CONFIG_INPUT_KEYBOARD is not set
|
||||||
@@ -81,7 +76,6 @@ CONFIG_WATCHDOG=y
|
|||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FB_ATMEL=y
|
CONFIG_FB_ATMEL=y
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
# CONFIG_LOGO_LINUX_MONO is not set
|
# CONFIG_LOGO_LINUX_MONO is not set
|
||||||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||||
@@ -99,7 +93,6 @@ CONFIG_MMC_AT91=m
|
|||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_AT91SAM9=y
|
CONFIG_RTC_DRV_AT91SAM9=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_VFAT_FS=y
|
CONFIG_VFAT_FS=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
CONFIG_JFFS2_FS=y
|
CONFIG_JFFS2_FS=y
|
@@ -5,7 +5,6 @@ CONFIG_SYSVIPC=y
|
|||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
CONFIG_LOG_BUF_SHIFT=14
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
CONFIG_MODULE_FORCE_LOAD=y
|
CONFIG_MODULE_FORCE_LOAD=y
|
||||||
@@ -56,7 +55,6 @@ CONFIG_IP_PNP=y
|
|||||||
CONFIG_IP_PNP_DHCP=y
|
CONFIG_IP_PNP_DHCP=y
|
||||||
CONFIG_IP_PNP_BOOTP=y
|
CONFIG_IP_PNP_BOOTP=y
|
||||||
CONFIG_NET_IPIP=m
|
CONFIG_NET_IPIP=m
|
||||||
CONFIG_NET_IPGRE=m
|
|
||||||
CONFIG_INET_AH=m
|
CONFIG_INET_AH=m
|
||||||
CONFIG_INET_ESP=m
|
CONFIG_INET_ESP=m
|
||||||
CONFIG_INET_IPCOMP=m
|
CONFIG_INET_IPCOMP=m
|
||||||
@@ -75,18 +73,8 @@ CONFIG_IPV6_TUNNEL=m
|
|||||||
CONFIG_BRIDGE=m
|
CONFIG_BRIDGE=m
|
||||||
CONFIG_VLAN_8021Q=m
|
CONFIG_VLAN_8021Q=m
|
||||||
CONFIG_BT=m
|
CONFIG_BT=m
|
||||||
CONFIG_BT_L2CAP=m
|
|
||||||
CONFIG_BT_SCO=m
|
|
||||||
CONFIG_BT_RFCOMM=m
|
|
||||||
CONFIG_BT_RFCOMM_TTY=y
|
|
||||||
CONFIG_BT_BNEP=m
|
|
||||||
CONFIG_BT_BNEP_MC_FILTER=y
|
|
||||||
CONFIG_BT_BNEP_PROTO_FILTER=y
|
|
||||||
CONFIG_BT_HIDP=m
|
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_CONCAT=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_AFS_PARTS=y
|
CONFIG_MTD_AFS_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
@@ -108,8 +96,6 @@ CONFIG_BLK_DEV_LOOP=y
|
|||||||
CONFIG_BLK_DEV_NBD=y
|
CONFIG_BLK_DEV_NBD=y
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||||
CONFIG_ATMEL_TCLIB=y
|
|
||||||
CONFIG_EEPROM_LEGACY=m
|
|
||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_BLK_DEV_SR=m
|
CONFIG_BLK_DEV_SR=m
|
||||||
@@ -119,14 +105,23 @@ CONFIG_SCSI_MULTI_LUN=y
|
|||||||
# CONFIG_SCSI_LOWLEVEL is not set
|
# CONFIG_SCSI_LOWLEVEL is not set
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_TUN=m
|
CONFIG_TUN=m
|
||||||
|
CONFIG_ARM_AT91_ETHER=y
|
||||||
CONFIG_PHYLIB=y
|
CONFIG_PHYLIB=y
|
||||||
CONFIG_DAVICOM_PHY=y
|
CONFIG_DAVICOM_PHY=y
|
||||||
CONFIG_SMSC_PHY=y
|
CONFIG_SMSC_PHY=y
|
||||||
CONFIG_MICREL_PHY=y
|
CONFIG_MICREL_PHY=y
|
||||||
CONFIG_NET_ETHERNET=y
|
CONFIG_PPP=y
|
||||||
CONFIG_ARM_AT91_ETHER=y
|
CONFIG_PPP_BSDCOMP=y
|
||||||
# CONFIG_NETDEV_1000 is not set
|
CONFIG_PPP_DEFLATE=y
|
||||||
# CONFIG_NETDEV_10000 is not set
|
CONFIG_PPP_FILTER=y
|
||||||
|
CONFIG_PPP_MPPE=m
|
||||||
|
CONFIG_PPP_MULTILINK=y
|
||||||
|
CONFIG_PPPOE=m
|
||||||
|
CONFIG_PPP_ASYNC=y
|
||||||
|
CONFIG_SLIP=m
|
||||||
|
CONFIG_SLIP_COMPRESSED=y
|
||||||
|
CONFIG_SLIP_SMART=y
|
||||||
|
CONFIG_SLIP_MODE_SLIP6=y
|
||||||
CONFIG_USB_CATC=m
|
CONFIG_USB_CATC=m
|
||||||
CONFIG_USB_KAWETH=m
|
CONFIG_USB_KAWETH=m
|
||||||
CONFIG_USB_PEGASUS=m
|
CONFIG_USB_PEGASUS=m
|
||||||
@@ -139,18 +134,6 @@ CONFIG_USB_NET_RNDIS_HOST=m
|
|||||||
CONFIG_USB_ALI_M5632=y
|
CONFIG_USB_ALI_M5632=y
|
||||||
CONFIG_USB_AN2720=y
|
CONFIG_USB_AN2720=y
|
||||||
CONFIG_USB_EPSON2888=y
|
CONFIG_USB_EPSON2888=y
|
||||||
CONFIG_PPP=y
|
|
||||||
CONFIG_PPP_MULTILINK=y
|
|
||||||
CONFIG_PPP_FILTER=y
|
|
||||||
CONFIG_PPP_ASYNC=y
|
|
||||||
CONFIG_PPP_DEFLATE=y
|
|
||||||
CONFIG_PPP_BSDCOMP=y
|
|
||||||
CONFIG_PPP_MPPE=m
|
|
||||||
CONFIG_PPPOE=m
|
|
||||||
CONFIG_SLIP=m
|
|
||||||
CONFIG_SLIP_COMPRESSED=y
|
|
||||||
CONFIG_SLIP_SMART=y
|
|
||||||
CONFIG_SLIP_MODE_SLIP6=y
|
|
||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
|
CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
|
||||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
|
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
|
||||||
@@ -158,9 +141,9 @@ CONFIG_INPUT_EVDEV=y
|
|||||||
CONFIG_KEYBOARD_GPIO=y
|
CONFIG_KEYBOARD_GPIO=y
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
CONFIG_INPUT_TOUCHSCREEN=y
|
CONFIG_INPUT_TOUCHSCREEN=y
|
||||||
|
CONFIG_LEGACY_PTY_COUNT=32
|
||||||
CONFIG_SERIAL_ATMEL=y
|
CONFIG_SERIAL_ATMEL=y
|
||||||
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=32
|
|
||||||
CONFIG_HW_RANDOM=y
|
CONFIG_HW_RANDOM=y
|
||||||
CONFIG_I2C=y
|
CONFIG_I2C=y
|
||||||
CONFIG_I2C_CHARDEV=y
|
CONFIG_I2C_CHARDEV=y
|
||||||
@@ -290,7 +273,6 @@ CONFIG_NFS_V3_ACL=y
|
|||||||
CONFIG_NFS_V4=y
|
CONFIG_NFS_V4=y
|
||||||
CONFIG_ROOT_NFS=y
|
CONFIG_ROOT_NFS=y
|
||||||
CONFIG_NFSD=y
|
CONFIG_NFSD=y
|
||||||
CONFIG_SMB_FS=m
|
|
||||||
CONFIG_CIFS=m
|
CONFIG_CIFS=m
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
CONFIG_MAC_PARTITION=y
|
CONFIG_MAC_PARTITION=y
|
||||||
@@ -335,7 +317,6 @@ CONFIG_NLS_UTF8=y
|
|||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
CONFIG_DEBUG_FS=y
|
CONFIG_DEBUG_FS=y
|
||||||
CONFIG_DEBUG_KERNEL=y
|
CONFIG_DEBUG_KERNEL=y
|
||||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
|
||||||
# CONFIG_FTRACE is not set
|
# CONFIG_FTRACE is not set
|
||||||
CONFIG_CRYPTO_PCBC=y
|
CONFIG_CRYPTO_PCBC=y
|
||||||
CONFIG_CRYPTO_SHA1=y
|
CONFIG_CRYPTO_SHA1=y
|
||||||
|
@@ -12,11 +12,23 @@ CONFIG_MODULE_UNLOAD=y
|
|||||||
# CONFIG_IOSCHED_CFQ is not set
|
# CONFIG_IOSCHED_CFQ is not set
|
||||||
CONFIG_ARCH_AT91=y
|
CONFIG_ARCH_AT91=y
|
||||||
CONFIG_ARCH_AT91SAM9260=y
|
CONFIG_ARCH_AT91SAM9260=y
|
||||||
|
CONFIG_ARCH_AT91SAM9260_SAM9XE=y
|
||||||
CONFIG_MACH_AT91SAM9260EK=y
|
CONFIG_MACH_AT91SAM9260EK=y
|
||||||
|
CONFIG_MACH_CAM60=y
|
||||||
|
CONFIG_MACH_SAM9_L9260=y
|
||||||
|
CONFIG_MACH_AFEB9260=y
|
||||||
|
CONFIG_MACH_USB_A9260=y
|
||||||
|
CONFIG_MACH_QIL_A9260=y
|
||||||
|
CONFIG_MACH_CPU9260=y
|
||||||
|
CONFIG_MACH_FLEXIBITY=y
|
||||||
|
CONFIG_MACH_SNAPPER_9260=y
|
||||||
|
CONFIG_MACH_AT91SAM_DT=y
|
||||||
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
||||||
# CONFIG_ARM_THUMB is not set
|
# CONFIG_ARM_THUMB is not set
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
|
CONFIG_ARM_APPENDED_DTB=y
|
||||||
|
CONFIG_ARM_ATAG_DTB_COMPAT=y
|
||||||
CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
|
CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
|
||||||
CONFIG_FPE_NWFPE=y
|
CONFIG_FPE_NWFPE=y
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
@@ -33,12 +45,10 @@ CONFIG_IP_PNP_BOOTP=y
|
|||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||||
CONFIG_ATMEL_SSC=y
|
|
||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_SCSI_MULTI_LUN=y
|
CONFIG_SCSI_MULTI_LUN=y
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_MII=y
|
CONFIG_MII=y
|
||||||
CONFIG_MACB=y
|
CONFIG_MACB=y
|
||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||||
@@ -55,7 +65,6 @@ CONFIG_I2C_GPIO=y
|
|||||||
CONFIG_WATCHDOG=y
|
CONFIG_WATCHDOG=y
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||||
CONFIG_AT91SAM9X_WATCHDOG=y
|
CONFIG_AT91SAM9X_WATCHDOG=y
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
# CONFIG_USB_HID is not set
|
# CONFIG_USB_HID is not set
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_DEVICEFS=y
|
CONFIG_USB_DEVICEFS=y
|
||||||
@@ -71,7 +80,6 @@ CONFIG_USB_G_SERIAL=m
|
|||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_AT91SAM9=y
|
CONFIG_RTC_DRV_AT91SAM9=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_VFAT_FS=y
|
CONFIG_VFAT_FS=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
CONFIG_CRAMFS=y
|
CONFIG_CRAMFS=y
|
@@ -14,6 +14,15 @@ CONFIG_ARCH_AT91=y
|
|||||||
CONFIG_ARCH_AT91SAM9G20=y
|
CONFIG_ARCH_AT91SAM9G20=y
|
||||||
CONFIG_MACH_AT91SAM9G20EK=y
|
CONFIG_MACH_AT91SAM9G20EK=y
|
||||||
CONFIG_MACH_AT91SAM9G20EK_2MMC=y
|
CONFIG_MACH_AT91SAM9G20EK_2MMC=y
|
||||||
|
CONFIG_MACH_CPU9G20=y
|
||||||
|
CONFIG_MACH_ACMENETUSFOXG20=y
|
||||||
|
CONFIG_MACH_PORTUXG20=y
|
||||||
|
CONFIG_MACH_STAMP9G20=y
|
||||||
|
CONFIG_MACH_PCONTROL_G20=y
|
||||||
|
CONFIG_MACH_GSIA18S=y
|
||||||
|
CONFIG_MACH_USB_A9G20=y
|
||||||
|
CONFIG_MACH_SNAPPER_9260=y
|
||||||
|
CONFIG_MACH_AT91SAM_DT=y
|
||||||
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
||||||
# CONFIG_ARM_THUMB is not set
|
# CONFIG_ARM_THUMB is not set
|
||||||
CONFIG_AEABI=y
|
CONFIG_AEABI=y
|
||||||
@@ -21,9 +30,10 @@ CONFIG_LEDS=y
|
|||||||
CONFIG_LEDS_CPU=y
|
CONFIG_LEDS_CPU=y
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
|
CONFIG_ARM_APPENDED_DTB=y
|
||||||
|
CONFIG_ARM_ATAG_DTB_COMPAT=y
|
||||||
CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
|
CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
|
||||||
CONFIG_FPE_NWFPE=y
|
CONFIG_FPE_NWFPE=y
|
||||||
CONFIG_PM=y
|
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
@@ -37,8 +47,6 @@ CONFIG_IP_PNP_BOOTP=y
|
|||||||
# CONFIG_IPV6 is not set
|
# CONFIG_IPV6 is not set
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_CONCAT=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
@@ -48,17 +56,13 @@ CONFIG_MTD_NAND_ATMEL=y
|
|||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||||
CONFIG_ATMEL_SSC=y
|
|
||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_SCSI_MULTI_LUN=y
|
CONFIG_SCSI_MULTI_LUN=y
|
||||||
# CONFIG_SCSI_LOWLEVEL is not set
|
# CONFIG_SCSI_LOWLEVEL is not set
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_MII=y
|
CONFIG_MII=y
|
||||||
CONFIG_MACB=y
|
CONFIG_MACB=y
|
||||||
# CONFIG_NETDEV_1000 is not set
|
|
||||||
# CONFIG_NETDEV_10000 is not set
|
|
||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
|
CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
|
||||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
|
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
|
||||||
@@ -66,15 +70,14 @@ CONFIG_INPUT_EVDEV=y
|
|||||||
# CONFIG_KEYBOARD_ATKBD is not set
|
# CONFIG_KEYBOARD_ATKBD is not set
|
||||||
CONFIG_KEYBOARD_GPIO=y
|
CONFIG_KEYBOARD_GPIO=y
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
|
CONFIG_LEGACY_PTY_COUNT=16
|
||||||
CONFIG_SERIAL_ATMEL=y
|
CONFIG_SERIAL_ATMEL=y
|
||||||
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
CONFIG_SERIAL_ATMEL_CONSOLE=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=16
|
|
||||||
CONFIG_HW_RANDOM=y
|
CONFIG_HW_RANDOM=y
|
||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
CONFIG_SPI_ATMEL=y
|
CONFIG_SPI_ATMEL=y
|
||||||
CONFIG_SPI_SPIDEV=y
|
CONFIG_SPI_SPIDEV=y
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
CONFIG_SOUND=y
|
CONFIG_SOUND=y
|
||||||
CONFIG_SND=y
|
CONFIG_SND=y
|
||||||
CONFIG_SND_SEQUENCER=y
|
CONFIG_SND_SEQUENCER=y
|
||||||
@@ -82,7 +85,6 @@ CONFIG_SND_MIXER_OSS=y
|
|||||||
CONFIG_SND_PCM_OSS=y
|
CONFIG_SND_PCM_OSS=y
|
||||||
CONFIG_SND_SEQUENCER_OSS=y
|
CONFIG_SND_SEQUENCER_OSS=y
|
||||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||||
CONFIG_SND_AT73C213=y
|
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_DEVICEFS=y
|
CONFIG_USB_DEVICEFS=y
|
||||||
# CONFIG_USB_DEVICE_CLASS is not set
|
# CONFIG_USB_DEVICE_CLASS is not set
|
||||||
@@ -105,7 +107,6 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
|||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_AT91SAM9=y
|
CONFIG_RTC_DRV_AT91SAM9=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_MSDOS_FS=y
|
CONFIG_MSDOS_FS=y
|
||||||
CONFIG_VFAT_FS=y
|
CONFIG_VFAT_FS=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
@@ -18,6 +18,7 @@ CONFIG_MODULE_UNLOAD=y
|
|||||||
CONFIG_ARCH_AT91=y
|
CONFIG_ARCH_AT91=y
|
||||||
CONFIG_ARCH_AT91SAM9G45=y
|
CONFIG_ARCH_AT91SAM9G45=y
|
||||||
CONFIG_MACH_AT91SAM9M10G45EK=y
|
CONFIG_MACH_AT91SAM9M10G45EK=y
|
||||||
|
CONFIG_MACH_AT91SAM_DT=y
|
||||||
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
||||||
CONFIG_AT91_SLOW_CLOCK=y
|
CONFIG_AT91_SLOW_CLOCK=y
|
||||||
CONFIG_AEABI=y
|
CONFIG_AEABI=y
|
||||||
@@ -73,11 +74,8 @@ CONFIG_SCSI_MULTI_LUN=y
|
|||||||
# CONFIG_SCSI_LOWLEVEL is not set
|
# CONFIG_SCSI_LOWLEVEL is not set
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_MII=y
|
CONFIG_MII=y
|
||||||
CONFIG_DAVICOM_PHY=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_MACB=y
|
CONFIG_MACB=y
|
||||||
# CONFIG_NETDEV_1000 is not set
|
CONFIG_DAVICOM_PHY=y
|
||||||
# CONFIG_NETDEV_10000 is not set
|
|
||||||
CONFIG_LIBERTAS_THINFIRM=m
|
CONFIG_LIBERTAS_THINFIRM=m
|
||||||
CONFIG_LIBERTAS_THINFIRM_USB=m
|
CONFIG_LIBERTAS_THINFIRM_USB=m
|
||||||
CONFIG_AT76C50X_USB=m
|
CONFIG_AT76C50X_USB=m
|
||||||
@@ -131,7 +129,6 @@ CONFIG_I2C_GPIO=y
|
|||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
CONFIG_SPI_ATMEL=y
|
CONFIG_SPI_ATMEL=y
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
# CONFIG_MFD_SUPPORT is not set
|
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FB_ATMEL=y
|
CONFIG_FB_ATMEL=y
|
||||||
CONFIG_FB_UDL=m
|
CONFIG_FB_UDL=m
|
||||||
|
@@ -23,8 +23,6 @@ CONFIG_NET=y
|
|||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_CONCAT=y
|
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
@@ -35,7 +33,6 @@ CONFIG_BLK_DEV_LOOP=y
|
|||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_COUNT=4
|
CONFIG_BLK_DEV_RAM_COUNT=4
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=24576
|
CONFIG_BLK_DEV_RAM_SIZE=24576
|
||||||
CONFIG_ATMEL_SSC=y
|
|
||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_SCSI_MULTI_LUN=y
|
CONFIG_SCSI_MULTI_LUN=y
|
||||||
@@ -62,13 +59,11 @@ CONFIG_WATCHDOG_NOWAYOUT=y
|
|||||||
CONFIG_AT91SAM9X_WATCHDOG=y
|
CONFIG_AT91SAM9X_WATCHDOG=y
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FB_ATMEL=y
|
CONFIG_FB_ATMEL=y
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
CONFIG_MMC_AT91=m
|
CONFIG_MMC_AT91=m
|
||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_AT91SAM9=y
|
CONFIG_RTC_DRV_AT91SAM9=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_INOTIFY=y
|
|
||||||
CONFIG_MSDOS_FS=y
|
CONFIG_MSDOS_FS=y
|
||||||
CONFIG_VFAT_FS=y
|
CONFIG_VFAT_FS=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
@@ -4,19 +4,18 @@ CONFIG_KALLSYMS_ALL=y
|
|||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
CONFIG_MODULE_UNLOAD=y
|
CONFIG_MODULE_UNLOAD=y
|
||||||
# CONFIG_BLK_DEV_BSG is not set
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
CONFIG_ARCH_EXYNOS4=y
|
CONFIG_ARCH_EXYNOS=y
|
||||||
CONFIG_S3C_LOWLEVEL_UART_PORT=1
|
CONFIG_S3C_LOWLEVEL_UART_PORT=1
|
||||||
CONFIG_MACH_SMDKC210=y
|
CONFIG_MACH_SMDKC210=y
|
||||||
CONFIG_MACH_SMDKV310=y
|
|
||||||
CONFIG_MACH_ARMLEX4210=y
|
CONFIG_MACH_ARMLEX4210=y
|
||||||
CONFIG_MACH_UNIVERSAL_C210=y
|
CONFIG_MACH_UNIVERSAL_C210=y
|
||||||
CONFIG_MACH_NURI=y
|
CONFIG_MACH_NURI=y
|
||||||
CONFIG_MACH_ORIGEN=y
|
CONFIG_MACH_ORIGEN=y
|
||||||
|
CONFIG_MACH_SMDK4412=y
|
||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
CONFIG_SMP=y
|
CONFIG_SMP=y
|
||||||
CONFIG_NR_CPUS=2
|
CONFIG_NR_CPUS=2
|
||||||
CONFIG_HOTPLUG_CPU=y
|
|
||||||
CONFIG_PREEMPT=y
|
CONFIG_PREEMPT=y
|
||||||
CONFIG_AEABI=y
|
CONFIG_AEABI=y
|
||||||
CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC1,115200 init=/linuxrc mem=256M"
|
CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC1,115200 init=/linuxrc mem=256M"
|
||||||
@@ -61,13 +60,9 @@ CONFIG_DETECT_HUNG_TASK=y
|
|||||||
CONFIG_DEBUG_RT_MUTEXES=y
|
CONFIG_DEBUG_RT_MUTEXES=y
|
||||||
CONFIG_DEBUG_SPINLOCK=y
|
CONFIG_DEBUG_SPINLOCK=y
|
||||||
CONFIG_DEBUG_MUTEXES=y
|
CONFIG_DEBUG_MUTEXES=y
|
||||||
CONFIG_DEBUG_SPINLOCK_SLEEP=y
|
|
||||||
CONFIG_DEBUG_INFO=y
|
CONFIG_DEBUG_INFO=y
|
||||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
|
||||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||||
CONFIG_DEBUG_USER=y
|
CONFIG_DEBUG_USER=y
|
||||||
CONFIG_DEBUG_ERRORS=y
|
|
||||||
CONFIG_DEBUG_LL=y
|
CONFIG_DEBUG_LL=y
|
||||||
CONFIG_EARLY_PRINTK=y
|
CONFIG_EARLY_PRINTK=y
|
||||||
CONFIG_DEBUG_S3C_UART=1
|
|
||||||
CONFIG_CRC_CCITT=y
|
CONFIG_CRC_CCITT=y
|
||||||
|
@@ -287,7 +287,7 @@ CONFIG_USB=y
|
|||||||
# CONFIG_USB_DEVICE_CLASS is not set
|
# CONFIG_USB_DEVICE_CLASS is not set
|
||||||
CONFIG_USB_OHCI_HCD=y
|
CONFIG_USB_OHCI_HCD=y
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_USB_GADGET_PXA27X=y
|
CONFIG_USB_PXA27X=y
|
||||||
CONFIG_USB_ETH=m
|
CONFIG_USB_ETH=m
|
||||||
# CONFIG_USB_ETH_RNDIS is not set
|
# CONFIG_USB_ETH_RNDIS is not set
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
|
@@ -263,7 +263,7 @@ CONFIG_USB=y
|
|||||||
# CONFIG_USB_DEVICE_CLASS is not set
|
# CONFIG_USB_DEVICE_CLASS is not set
|
||||||
CONFIG_USB_OHCI_HCD=y
|
CONFIG_USB_OHCI_HCD=y
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_USB_GADGET_PXA27X=y
|
CONFIG_USB_PXA27X=y
|
||||||
CONFIG_USB_ETH=m
|
CONFIG_USB_ETH=m
|
||||||
# CONFIG_USB_ETH_RNDIS is not set
|
# CONFIG_USB_ETH_RNDIS is not set
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
|
@@ -132,7 +132,7 @@ CONFIG_USB_MON=m
|
|||||||
CONFIG_USB_OHCI_HCD=y
|
CONFIG_USB_OHCI_HCD=y
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_USB_GADGET_VBUS_DRAW=500
|
CONFIG_USB_GADGET_VBUS_DRAW=500
|
||||||
CONFIG_USB_GADGET_PXA27X=y
|
CONFIG_USB_PXA27X=y
|
||||||
CONFIG_USB_ETH=m
|
CONFIG_USB_ETH=m
|
||||||
# CONFIG_USB_ETH_RNDIS is not set
|
# CONFIG_USB_ETH_RNDIS is not set
|
||||||
CONFIG_USB_GADGETFS=m
|
CONFIG_USB_GADGETFS=m
|
||||||
|
@@ -48,7 +48,6 @@ CONFIG_MACH_SX1=y
|
|||||||
CONFIG_MACH_NOKIA770=y
|
CONFIG_MACH_NOKIA770=y
|
||||||
CONFIG_MACH_AMS_DELTA=y
|
CONFIG_MACH_AMS_DELTA=y
|
||||||
CONFIG_MACH_OMAP_GENERIC=y
|
CONFIG_MACH_OMAP_GENERIC=y
|
||||||
CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
|
|
||||||
CONFIG_OMAP_ARM_216MHZ=y
|
CONFIG_OMAP_ARM_216MHZ=y
|
||||||
CONFIG_OMAP_ARM_195MHZ=y
|
CONFIG_OMAP_ARM_195MHZ=y
|
||||||
CONFIG_OMAP_ARM_192MHZ=y
|
CONFIG_OMAP_ARM_192MHZ=y
|
||||||
|
@@ -14,8 +14,6 @@ CONFIG_MODULE_UNLOAD=y
|
|||||||
CONFIG_ARCH_U300=y
|
CONFIG_ARCH_U300=y
|
||||||
CONFIG_MACH_U300=y
|
CONFIG_MACH_U300=y
|
||||||
CONFIG_MACH_U300_BS335=y
|
CONFIG_MACH_U300_BS335=y
|
||||||
CONFIG_MACH_U300_DUAL_RAM=y
|
|
||||||
CONFIG_U300_DEBUG=y
|
|
||||||
CONFIG_MACH_U300_SPIDUMMY=y
|
CONFIG_MACH_U300_SPIDUMMY=y
|
||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
@@ -26,19 +24,21 @@ CONFIG_ZBOOT_ROM_BSS=0x0
|
|||||||
CONFIG_CMDLINE="root=/dev/ram0 rw rootfstype=rootfs console=ttyAMA0,115200n8 lpj=515072"
|
CONFIG_CMDLINE="root=/dev/ram0 rw rootfstype=rootfs console=ttyAMA0,115200n8 lpj=515072"
|
||||||
CONFIG_CPU_IDLE=y
|
CONFIG_CPU_IDLE=y
|
||||||
CONFIG_FPE_NWFPE=y
|
CONFIG_FPE_NWFPE=y
|
||||||
CONFIG_PM=y
|
|
||||||
# CONFIG_SUSPEND is not set
|
# CONFIG_SUSPEND is not set
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_MISC_DEVICES is not set
|
CONFIG_MTD=y
|
||||||
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
|
CONFIG_MTD_NAND=y
|
||||||
|
CONFIG_MTD_NAND_FSMC=y
|
||||||
# CONFIG_INPUT_MOUSEDEV is not set
|
# CONFIG_INPUT_MOUSEDEV is not set
|
||||||
CONFIG_INPUT_EVDEV=y
|
CONFIG_INPUT_EVDEV=y
|
||||||
# CONFIG_KEYBOARD_ATKBD is not set
|
# CONFIG_KEYBOARD_ATKBD is not set
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
# CONFIG_SERIO is not set
|
# CONFIG_SERIO is not set
|
||||||
|
CONFIG_LEGACY_PTY_COUNT=16
|
||||||
CONFIG_SERIAL_AMBA_PL011=y
|
CONFIG_SERIAL_AMBA_PL011=y
|
||||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=16
|
|
||||||
# CONFIG_HW_RANDOM is not set
|
# CONFIG_HW_RANDOM is not set
|
||||||
CONFIG_I2C=y
|
CONFIG_I2C=y
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
@@ -51,6 +51,7 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
|||||||
# CONFIG_HID_SUPPORT is not set
|
# CONFIG_HID_SUPPORT is not set
|
||||||
# CONFIG_USB_SUPPORT is not set
|
# CONFIG_USB_SUPPORT is not set
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
|
CONFIG_MMC_CLKGATE=y
|
||||||
CONFIG_MMC_ARMMMCI=y
|
CONFIG_MMC_ARMMMCI=y
|
||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
# CONFIG_RTC_HCTOSYS is not set
|
# CONFIG_RTC_HCTOSYS is not set
|
||||||
@@ -65,10 +66,8 @@ CONFIG_NLS_CODEPAGE_437=y
|
|||||||
CONFIG_NLS_ISO8859_1=y
|
CONFIG_NLS_ISO8859_1=y
|
||||||
CONFIG_PRINTK_TIME=y
|
CONFIG_PRINTK_TIME=y
|
||||||
CONFIG_DEBUG_FS=y
|
CONFIG_DEBUG_FS=y
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
# CONFIG_SCHED_DEBUG is not set
|
# CONFIG_SCHED_DEBUG is not set
|
||||||
CONFIG_TIMER_STATS=y
|
CONFIG_TIMER_STATS=y
|
||||||
# CONFIG_DEBUG_PREEMPT is not set
|
# CONFIG_DEBUG_PREEMPT is not set
|
||||||
CONFIG_DEBUG_INFO=y
|
CONFIG_DEBUG_INFO=y
|
||||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
|
||||||
# CONFIG_CRC32 is not set
|
# CONFIG_CRC32 is not set
|
||||||
|
@@ -10,7 +10,7 @@ CONFIG_MODULE_UNLOAD=y
|
|||||||
CONFIG_ARCH_U8500=y
|
CONFIG_ARCH_U8500=y
|
||||||
CONFIG_UX500_SOC_DB5500=y
|
CONFIG_UX500_SOC_DB5500=y
|
||||||
CONFIG_UX500_SOC_DB8500=y
|
CONFIG_UX500_SOC_DB8500=y
|
||||||
CONFIG_MACH_U8500=y
|
CONFIG_MACH_HREFV60=y
|
||||||
CONFIG_MACH_SNOWBALL=y
|
CONFIG_MACH_SNOWBALL=y
|
||||||
CONFIG_MACH_U5500=y
|
CONFIG_MACH_U5500=y
|
||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
@@ -24,6 +24,7 @@ CONFIG_CPU_FREQ=y
|
|||||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||||
CONFIG_VFP=y
|
CONFIG_VFP=y
|
||||||
CONFIG_NEON=y
|
CONFIG_NEON=y
|
||||||
|
CONFIG_PM_RUNTIME=y
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
@@ -41,11 +42,8 @@ CONFIG_MISC_DEVICES=y
|
|||||||
CONFIG_AB8500_PWM=y
|
CONFIG_AB8500_PWM=y
|
||||||
CONFIG_SENSORS_BH1780=y
|
CONFIG_SENSORS_BH1780=y
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_SMSC_PHY=y
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_SMSC911X=y
|
CONFIG_SMSC911X=y
|
||||||
# CONFIG_NETDEV_1000 is not set
|
CONFIG_SMSC_PHY=y
|
||||||
# CONFIG_NETDEV_10000 is not set
|
|
||||||
# CONFIG_WLAN is not set
|
# CONFIG_WLAN is not set
|
||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||||
CONFIG_INPUT_EVDEV=y
|
CONFIG_INPUT_EVDEV=y
|
||||||
@@ -72,15 +70,12 @@ CONFIG_SPI=y
|
|||||||
CONFIG_SPI_PL022=y
|
CONFIG_SPI_PL022=y
|
||||||
CONFIG_GPIO_STMPE=y
|
CONFIG_GPIO_STMPE=y
|
||||||
CONFIG_GPIO_TC3589X=y
|
CONFIG_GPIO_TC3589X=y
|
||||||
# CONFIG_HWMON is not set
|
|
||||||
CONFIG_MFD_STMPE=y
|
CONFIG_MFD_STMPE=y
|
||||||
CONFIG_MFD_TC3589X=y
|
CONFIG_MFD_TC3589X=y
|
||||||
|
CONFIG_AB5500_CORE=y
|
||||||
CONFIG_AB8500_CORE=y
|
CONFIG_AB8500_CORE=y
|
||||||
CONFIG_REGULATOR_AB8500=y
|
CONFIG_REGULATOR_AB8500=y
|
||||||
# CONFIG_HID_SUPPORT is not set
|
# CONFIG_HID_SUPPORT is not set
|
||||||
CONFIG_USB_MUSB_HDRC=y
|
|
||||||
CONFIG_USB_GADGET_MUSB_HDRC=y
|
|
||||||
CONFIG_MUSB_PIO_ONLY=y
|
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
CONFIG_AB8500_USB=y
|
CONFIG_AB8500_USB=y
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
@@ -97,6 +92,7 @@ CONFIG_DMADEVICES=y
|
|||||||
CONFIG_STE_DMA40=y
|
CONFIG_STE_DMA40=y
|
||||||
CONFIG_STAGING=y
|
CONFIG_STAGING=y
|
||||||
CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=y
|
CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=y
|
||||||
|
CONFIG_HSEM_U8500=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_EXT2_FS_XATTR=y
|
CONFIG_EXT2_FS_XATTR=y
|
||||||
CONFIG_EXT2_FS_POSIX_ACL=y
|
CONFIG_EXT2_FS_POSIX_ACL=y
|
||||||
|
@@ -140,7 +140,7 @@ CONFIG_USB_SERIAL=m
|
|||||||
CONFIG_USB_SERIAL_GENERIC=y
|
CONFIG_USB_SERIAL_GENERIC=y
|
||||||
CONFIG_USB_SERIAL_MCT_U232=m
|
CONFIG_USB_SERIAL_MCT_U232=m
|
||||||
CONFIG_USB_GADGET=m
|
CONFIG_USB_GADGET=m
|
||||||
CONFIG_USB_GADGET_PXA27X=y
|
CONFIG_USB_PXA27X=y
|
||||||
CONFIG_USB_ETH=m
|
CONFIG_USB_ETH=m
|
||||||
CONFIG_USB_GADGETFS=m
|
CONFIG_USB_GADGETFS=m
|
||||||
CONFIG_USB_FILE_STORAGE=m
|
CONFIG_USB_FILE_STORAGE=m
|
||||||
|
@@ -20,6 +20,8 @@
|
|||||||
#ifndef __ASM_ARM_HARDWARE_L2X0_H
|
#ifndef __ASM_ARM_HARDWARE_L2X0_H
|
||||||
#define __ASM_ARM_HARDWARE_L2X0_H
|
#define __ASM_ARM_HARDWARE_L2X0_H
|
||||||
|
|
||||||
|
#include <linux/errno.h>
|
||||||
|
|
||||||
#define L2X0_CACHE_ID 0x000
|
#define L2X0_CACHE_ID 0x000
|
||||||
#define L2X0_CACHE_TYPE 0x004
|
#define L2X0_CACHE_TYPE 0x004
|
||||||
#define L2X0_CTRL 0x100
|
#define L2X0_CTRL 0x100
|
||||||
|
@@ -21,6 +21,9 @@
|
|||||||
* OneNAND features.
|
* OneNAND features.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef ASM_PL080_H
|
||||||
|
#define ASM_PL080_H
|
||||||
|
|
||||||
#define PL080_INT_STATUS (0x00)
|
#define PL080_INT_STATUS (0x00)
|
||||||
#define PL080_TC_STATUS (0x04)
|
#define PL080_TC_STATUS (0x04)
|
||||||
#define PL080_TC_CLEAR (0x08)
|
#define PL080_TC_CLEAR (0x08)
|
||||||
@@ -138,3 +141,4 @@ struct pl080s_lli {
|
|||||||
u32 control1;
|
u32 control1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif /* ASM_PL080_H */
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
struct tag;
|
struct tag;
|
||||||
struct meminfo;
|
struct meminfo;
|
||||||
struct sys_timer;
|
struct sys_timer;
|
||||||
|
struct pt_regs;
|
||||||
|
|
||||||
struct machine_desc {
|
struct machine_desc {
|
||||||
unsigned int nr; /* architecture number */
|
unsigned int nr; /* architecture number */
|
||||||
|
@@ -55,16 +55,6 @@ reserve_pmu(enum arm_pmu_type type);
|
|||||||
extern void
|
extern void
|
||||||
release_pmu(enum arm_pmu_type type);
|
release_pmu(enum arm_pmu_type type);
|
||||||
|
|
||||||
/**
|
|
||||||
* init_pmu() - Initialise the PMU.
|
|
||||||
*
|
|
||||||
* Initialise the system ready for PMU enabling. This should typically set the
|
|
||||||
* IRQ affinity and nothing else. The users (oprofile/perf events etc) will do
|
|
||||||
* the actual hardware initialisation.
|
|
||||||
*/
|
|
||||||
extern int
|
|
||||||
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>
|
||||||
|
@@ -25,7 +25,7 @@ extern struct cputopo_arm cpu_topology[NR_CPUS];
|
|||||||
|
|
||||||
void init_cpu_topology(void);
|
void init_cpu_topology(void);
|
||||||
void store_cpu_topology(unsigned int cpuid);
|
void store_cpu_topology(unsigned int cpuid);
|
||||||
const struct cpumask *cpu_coregroup_mask(unsigned int cpu);
|
const struct cpumask *cpu_coregroup_mask(int cpu);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@@ -402,6 +402,8 @@
|
|||||||
#define __NR_syncfs (__NR_SYSCALL_BASE+373)
|
#define __NR_syncfs (__NR_SYSCALL_BASE+373)
|
||||||
#define __NR_sendmmsg (__NR_SYSCALL_BASE+374)
|
#define __NR_sendmmsg (__NR_SYSCALL_BASE+374)
|
||||||
#define __NR_setns (__NR_SYSCALL_BASE+375)
|
#define __NR_setns (__NR_SYSCALL_BASE+375)
|
||||||
|
#define __NR_process_vm_readv (__NR_SYSCALL_BASE+376)
|
||||||
|
#define __NR_process_vm_writev (__NR_SYSCALL_BASE+377)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following SWIs are ARM private.
|
* The following SWIs are ARM private.
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/cryptohash.h>
|
#include <linux/cryptohash.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
*
|
*
|
||||||
* Bits taken from various places.
|
* Bits taken from various places.
|
||||||
*/
|
*/
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
@@ -385,6 +385,8 @@
|
|||||||
CALL(sys_syncfs)
|
CALL(sys_syncfs)
|
||||||
CALL(sys_sendmmsg)
|
CALL(sys_sendmmsg)
|
||||||
/* 375 */ CALL(sys_setns)
|
/* 375 */ CALL(sys_setns)
|
||||||
|
CALL(sys_process_vm_readv)
|
||||||
|
CALL(sys_process_vm_writev)
|
||||||
#ifndef syscalls_counted
|
#ifndef syscalls_counted
|
||||||
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
||||||
#define syscalls_counted
|
#define syscalls_counted
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/personality.h>
|
#include <linux/personality.h>
|
||||||
#include <linux/binfmts.h>
|
#include <linux/binfmts.h>
|
||||||
|
@@ -497,7 +497,7 @@ ENDPROC(__und_usr)
|
|||||||
.popsection
|
.popsection
|
||||||
.pushsection __ex_table,"a"
|
.pushsection __ex_table,"a"
|
||||||
.long 1b, 4b
|
.long 1b, 4b
|
||||||
#if __LINUX_ARM_ARCH__ >= 7
|
#if CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7
|
||||||
.long 2b, 4b
|
.long 2b, 4b
|
||||||
.long 3b, 4b
|
.long 3b, 4b
|
||||||
#endif
|
#endif
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
#include <linux/miscdevice.h>
|
#include <linux/miscdevice.h>
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
|
#include <linux/module.h>
|
||||||
#include <asm/hardware/coresight.h>
|
#include <asm/hardware/coresight.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
|
|
||||||
|
@@ -360,7 +360,7 @@ __secondary_data:
|
|||||||
* r13 = *virtual* address to jump to upon completion
|
* r13 = *virtual* address to jump to upon completion
|
||||||
*/
|
*/
|
||||||
__enable_mmu:
|
__enable_mmu:
|
||||||
#ifdef CONFIG_ALIGNMENT_TRAP
|
#if defined(CONFIG_ALIGNMENT_TRAP) && __LINUX_ARM_ARCH__ < 6
|
||||||
orr r0, r0, #CR_A
|
orr r0, r0, #CR_A
|
||||||
#else
|
#else
|
||||||
bic r0, r0, #CR_A
|
bic r0, r0, #CR_A
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
|
@@ -22,7 +22,6 @@
|
|||||||
* Naturally it's not a 1:1 relation, but there are similarities.
|
* Naturally it's not a 1:1 relation, but there are similarities.
|
||||||
*/
|
*/
|
||||||
#include <linux/kernel_stat.h>
|
#include <linux/kernel_stat.h>
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/signal.h>
|
#include <linux/signal.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
@@ -519,10 +519,12 @@ static const union decode_item arm_cccc_0000_____1001_table[] = {
|
|||||||
static const union decode_item arm_cccc_0001_____1001_table[] = {
|
static const union decode_item arm_cccc_0001_____1001_table[] = {
|
||||||
/* Synchronization primitives */
|
/* Synchronization primitives */
|
||||||
|
|
||||||
|
#if __LINUX_ARM_ARCH__ < 6
|
||||||
|
/* Deprecated on ARMv6 and may be UNDEFINED on v7 */
|
||||||
/* SMP/SWPB cccc 0001 0x00 xxxx xxxx xxxx 1001 xxxx */
|
/* SMP/SWPB cccc 0001 0x00 xxxx xxxx xxxx 1001 xxxx */
|
||||||
DECODE_EMULATEX (0x0fb000f0, 0x01000090, emulate_rd12rn16rm0_rwflags_nopc,
|
DECODE_EMULATEX (0x0fb000f0, 0x01000090, emulate_rd12rn16rm0_rwflags_nopc,
|
||||||
REGS(NOPC, NOPC, 0, 0, NOPC)),
|
REGS(NOPC, NOPC, 0, 0, NOPC)),
|
||||||
|
#endif
|
||||||
/* LDREX/STREX{,D,B,H} cccc 0001 1xxx xxxx xxxx xxxx 1001 xxxx */
|
/* LDREX/STREX{,D,B,H} cccc 0001 1xxx xxxx xxxx xxxx 1001 xxxx */
|
||||||
/* And unallocated instructions... */
|
/* And unallocated instructions... */
|
||||||
DECODE_END
|
DECODE_END
|
||||||
|
@@ -427,18 +427,25 @@ void kprobe_arm_test_cases(void)
|
|||||||
|
|
||||||
TEST_GROUP("Synchronization primitives")
|
TEST_GROUP("Synchronization primitives")
|
||||||
|
|
||||||
/*
|
#if __LINUX_ARM_ARCH__ < 6
|
||||||
* Use hard coded constants for SWP instructions to avoid warnings
|
TEST_RP("swp lr, r",7,VAL2,", [r",8,0,"]")
|
||||||
* about deprecated instructions.
|
TEST_R( "swpvs r0, r",1,VAL1,", [sp]")
|
||||||
*/
|
TEST_RP("swp sp, r",14,VAL2,", [r",12,13*4,"]")
|
||||||
TEST_RP( ".word 0xe108e097 @ swp lr, r",7,VAL2,", [r",8,0,"]")
|
#else
|
||||||
TEST_R( ".word 0x610d0091 @ swpvs r0, r",1,VAL1,", [sp]")
|
TEST_UNSUPPORTED(".word 0xe108e097 @ swp lr, r7, [r8]")
|
||||||
TEST_RP( ".word 0xe10cd09e @ swp sp, r",14,VAL2,", [r",12,13*4,"]")
|
TEST_UNSUPPORTED(".word 0x610d0091 @ swpvs r0, r1, [sp]")
|
||||||
|
TEST_UNSUPPORTED(".word 0xe10cd09e @ swp sp, r14 [r12]")
|
||||||
|
#endif
|
||||||
TEST_UNSUPPORTED(".word 0xe102f091 @ swp pc, r1, [r2]")
|
TEST_UNSUPPORTED(".word 0xe102f091 @ swp pc, r1, [r2]")
|
||||||
TEST_UNSUPPORTED(".word 0xe102009f @ swp r0, pc, [r2]")
|
TEST_UNSUPPORTED(".word 0xe102009f @ swp r0, pc, [r2]")
|
||||||
TEST_UNSUPPORTED(".word 0xe10f0091 @ swp r0, r1, [pc]")
|
TEST_UNSUPPORTED(".word 0xe10f0091 @ swp r0, r1, [pc]")
|
||||||
TEST_RP( ".word 0xe148e097 @ swpb lr, r",7,VAL2,", [r",8,0,"]")
|
#if __LINUX_ARM_ARCH__ < 6
|
||||||
TEST_R( ".word 0x614d0091 @ swpvsb r0, r",1,VAL1,", [sp]")
|
TEST_RP("swpb lr, r",7,VAL2,", [r",8,0,"]")
|
||||||
|
TEST_R( "swpvsb r0, r",1,VAL1,", [sp]")
|
||||||
|
#else
|
||||||
|
TEST_UNSUPPORTED(".word 0xe148e097 @ swpb lr, r7, [r8]")
|
||||||
|
TEST_UNSUPPORTED(".word 0x614d0091 @ swpvsb r0, r1, [sp]")
|
||||||
|
#endif
|
||||||
TEST_UNSUPPORTED(".word 0xe142f091 @ swpb pc, r1, [r2]")
|
TEST_UNSUPPORTED(".word 0xe142f091 @ swpb pc, r1, [r2]")
|
||||||
|
|
||||||
TEST_UNSUPPORTED(".word 0xe1100090") /* Unallocated space */
|
TEST_UNSUPPORTED(".word 0xe1100090") /* Unallocated space */
|
||||||
@@ -550,7 +557,7 @@ void kprobe_arm_test_cases(void)
|
|||||||
TEST_RPR( "strccd r",8, VAL2,", [r",13,0, ", r",12,48,"]")
|
TEST_RPR( "strccd r",8, VAL2,", [r",13,0, ", r",12,48,"]")
|
||||||
TEST_RPR( "strd r",4, VAL1,", [r",2, 24,", r",3, 48,"]!")
|
TEST_RPR( "strd r",4, VAL1,", [r",2, 24,", r",3, 48,"]!")
|
||||||
TEST_RPR( "strcsd r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
|
TEST_RPR( "strcsd r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
|
||||||
TEST_RPR( "strd r",2, VAL1,", [r",3, 24,"], r",4,48,"")
|
TEST_RPR( "strd r",2, VAL1,", [r",5, 24,"], r",4,48,"")
|
||||||
TEST_RPR( "strd r",10,VAL2,", [r",9, 48,"], -r",7,24,"")
|
TEST_RPR( "strd r",10,VAL2,", [r",9, 48,"], -r",7,24,"")
|
||||||
TEST_UNSUPPORTED(".word 0xe1afc0fa @ strd r12, [pc, r10]!")
|
TEST_UNSUPPORTED(".word 0xe1afc0fa @ strd r12, [pc, r10]!")
|
||||||
|
|
||||||
|
@@ -222,8 +222,8 @@ void kprobe_thumb16_test_cases(void)
|
|||||||
DONT_TEST_IN_ITBLOCK(
|
DONT_TEST_IN_ITBLOCK(
|
||||||
TEST_BF_R( "cbnz r",0,0, ", 2f")
|
TEST_BF_R( "cbnz r",0,0, ", 2f")
|
||||||
TEST_BF_R( "cbz r",2,-1,", 2f")
|
TEST_BF_R( "cbz r",2,-1,", 2f")
|
||||||
TEST_BF_RX( "cbnz r",4,1, ", 2f",0x20)
|
TEST_BF_RX( "cbnz r",4,1, ", 2f", SPACE_0x20)
|
||||||
TEST_BF_RX( "cbz r",7,0, ", 2f",0x40)
|
TEST_BF_RX( "cbz r",7,0, ", 2f", SPACE_0x40)
|
||||||
)
|
)
|
||||||
TEST_R("sxth r0, r",7, HH1,"")
|
TEST_R("sxth r0, r",7, HH1,"")
|
||||||
TEST_R("sxth r7, r",0, HH2,"")
|
TEST_R("sxth r7, r",0, HH2,"")
|
||||||
@@ -246,7 +246,7 @@ DONT_TEST_IN_ITBLOCK(
|
|||||||
TESTCASE_START(code) \
|
TESTCASE_START(code) \
|
||||||
TEST_ARG_PTR(13, offset) \
|
TEST_ARG_PTR(13, offset) \
|
||||||
TEST_ARG_END("") \
|
TEST_ARG_END("") \
|
||||||
TEST_BRANCH_F(code,0) \
|
TEST_BRANCH_F(code) \
|
||||||
TESTCASE_END
|
TESTCASE_END
|
||||||
|
|
||||||
TEST("push {r0}")
|
TEST("push {r0}")
|
||||||
@@ -319,8 +319,8 @@ CONDITION_INSTRUCTIONS(8,
|
|||||||
|
|
||||||
TEST_BF( "b 2f")
|
TEST_BF( "b 2f")
|
||||||
TEST_BB( "b 2b")
|
TEST_BB( "b 2b")
|
||||||
TEST_BF_X("b 2f", 0x400)
|
TEST_BF_X("b 2f", SPACE_0x400)
|
||||||
TEST_BB_X("b 2b", 0x400)
|
TEST_BB_X("b 2b", SPACE_0x400)
|
||||||
|
|
||||||
TEST_GROUP("Testing instructions in IT blocks")
|
TEST_GROUP("Testing instructions in IT blocks")
|
||||||
|
|
||||||
@@ -746,7 +746,7 @@ CONDITION_INSTRUCTIONS(22,
|
|||||||
TEST_BB("bne.w 2b")
|
TEST_BB("bne.w 2b")
|
||||||
TEST_BF("bgt.w 2f")
|
TEST_BF("bgt.w 2f")
|
||||||
TEST_BB("blt.w 2b")
|
TEST_BB("blt.w 2b")
|
||||||
TEST_BF_X("bpl.w 2f",0x1000)
|
TEST_BF_X("bpl.w 2f", SPACE_0x1000)
|
||||||
)
|
)
|
||||||
|
|
||||||
TEST_UNSUPPORTED("msr cpsr, r0")
|
TEST_UNSUPPORTED("msr cpsr, r0")
|
||||||
@@ -786,11 +786,11 @@ CONDITION_INSTRUCTIONS(22,
|
|||||||
|
|
||||||
TEST_BF( "b.w 2f")
|
TEST_BF( "b.w 2f")
|
||||||
TEST_BB( "b.w 2b")
|
TEST_BB( "b.w 2b")
|
||||||
TEST_BF_X("b.w 2f", 0x1000)
|
TEST_BF_X("b.w 2f", SPACE_0x1000)
|
||||||
|
|
||||||
TEST_BF( "bl.w 2f")
|
TEST_BF( "bl.w 2f")
|
||||||
TEST_BB( "bl.w 2b")
|
TEST_BB( "bl.w 2b")
|
||||||
TEST_BB_X("bl.w 2b", 0x1000)
|
TEST_BB_X("bl.w 2b", SPACE_0x1000)
|
||||||
|
|
||||||
TEST_X( "blx __dummy_arm_subroutine",
|
TEST_X( "blx __dummy_arm_subroutine",
|
||||||
".arm \n\t"
|
".arm \n\t"
|
||||||
|
@@ -149,23 +149,31 @@ struct test_arg_end {
|
|||||||
"1: "instruction" \n\t" \
|
"1: "instruction" \n\t" \
|
||||||
" nop \n\t"
|
" nop \n\t"
|
||||||
|
|
||||||
#define TEST_BRANCH_F(instruction, xtra_dist) \
|
#define TEST_BRANCH_F(instruction) \
|
||||||
TEST_INSTRUCTION(instruction) \
|
TEST_INSTRUCTION(instruction) \
|
||||||
".if "#xtra_dist" \n\t" \
|
|
||||||
" b 99f \n\t" \
|
|
||||||
".space "#xtra_dist" \n\t" \
|
|
||||||
".endif \n\t" \
|
|
||||||
" b 99f \n\t" \
|
" b 99f \n\t" \
|
||||||
"2: nop \n\t"
|
"2: nop \n\t"
|
||||||
|
|
||||||
#define TEST_BRANCH_B(instruction, xtra_dist) \
|
#define TEST_BRANCH_B(instruction) \
|
||||||
" b 50f \n\t" \
|
" b 50f \n\t" \
|
||||||
" b 99f \n\t" \
|
" b 99f \n\t" \
|
||||||
"2: nop \n\t" \
|
"2: nop \n\t" \
|
||||||
" b 99f \n\t" \
|
" b 99f \n\t" \
|
||||||
".if "#xtra_dist" \n\t" \
|
TEST_INSTRUCTION(instruction)
|
||||||
".space "#xtra_dist" \n\t" \
|
|
||||||
".endif \n\t" \
|
#define TEST_BRANCH_FX(instruction, codex) \
|
||||||
|
TEST_INSTRUCTION(instruction) \
|
||||||
|
" b 99f \n\t" \
|
||||||
|
codex" \n\t" \
|
||||||
|
" b 99f \n\t" \
|
||||||
|
"2: nop \n\t"
|
||||||
|
|
||||||
|
#define TEST_BRANCH_BX(instruction, codex) \
|
||||||
|
" b 50f \n\t" \
|
||||||
|
" b 99f \n\t" \
|
||||||
|
"2: nop \n\t" \
|
||||||
|
" b 99f \n\t" \
|
||||||
|
codex" \n\t" \
|
||||||
TEST_INSTRUCTION(instruction)
|
TEST_INSTRUCTION(instruction)
|
||||||
|
|
||||||
#define TESTCASE_END \
|
#define TESTCASE_END \
|
||||||
@@ -301,47 +309,60 @@ struct test_arg_end {
|
|||||||
TESTCASE_START(code1 #reg1 code2) \
|
TESTCASE_START(code1 #reg1 code2) \
|
||||||
TEST_ARG_PTR(reg1, val1) \
|
TEST_ARG_PTR(reg1, val1) \
|
||||||
TEST_ARG_END("") \
|
TEST_ARG_END("") \
|
||||||
TEST_BRANCH_F(code1 #reg1 code2, 0) \
|
TEST_BRANCH_F(code1 #reg1 code2) \
|
||||||
TESTCASE_END
|
TESTCASE_END
|
||||||
|
|
||||||
#define TEST_BF_X(code, xtra_dist) \
|
#define TEST_BF(code) \
|
||||||
TESTCASE_START(code) \
|
TESTCASE_START(code) \
|
||||||
TEST_ARG_END("") \
|
TEST_ARG_END("") \
|
||||||
TEST_BRANCH_F(code, xtra_dist) \
|
TEST_BRANCH_F(code) \
|
||||||
TESTCASE_END
|
TESTCASE_END
|
||||||
|
|
||||||
#define TEST_BB_X(code, xtra_dist) \
|
#define TEST_BB(code) \
|
||||||
TESTCASE_START(code) \
|
TESTCASE_START(code) \
|
||||||
TEST_ARG_END("") \
|
TEST_ARG_END("") \
|
||||||
TEST_BRANCH_B(code, xtra_dist) \
|
TEST_BRANCH_B(code) \
|
||||||
TESTCASE_END
|
TESTCASE_END
|
||||||
|
|
||||||
#define TEST_BF_RX(code1, reg, val, code2, xtra_dist) \
|
#define TEST_BF_R(code1, reg, val, code2) \
|
||||||
TESTCASE_START(code1 #reg code2) \
|
TESTCASE_START(code1 #reg code2) \
|
||||||
TEST_ARG_REG(reg, val) \
|
TEST_ARG_REG(reg, val) \
|
||||||
TEST_ARG_END("") \
|
TEST_ARG_END("") \
|
||||||
TEST_BRANCH_F(code1 #reg code2, xtra_dist) \
|
TEST_BRANCH_F(code1 #reg code2) \
|
||||||
TESTCASE_END
|
TESTCASE_END
|
||||||
|
|
||||||
#define TEST_BB_RX(code1, reg, val, code2, xtra_dist) \
|
#define TEST_BB_R(code1, reg, val, code2) \
|
||||||
TESTCASE_START(code1 #reg code2) \
|
TESTCASE_START(code1 #reg code2) \
|
||||||
TEST_ARG_REG(reg, val) \
|
TEST_ARG_REG(reg, val) \
|
||||||
TEST_ARG_END("") \
|
TEST_ARG_END("") \
|
||||||
TEST_BRANCH_B(code1 #reg code2, xtra_dist) \
|
TEST_BRANCH_B(code1 #reg code2) \
|
||||||
TESTCASE_END
|
TESTCASE_END
|
||||||
|
|
||||||
#define TEST_BF(code) TEST_BF_X(code, 0)
|
|
||||||
#define TEST_BB(code) TEST_BB_X(code, 0)
|
|
||||||
|
|
||||||
#define TEST_BF_R(code1, reg, val, code2) TEST_BF_RX(code1, reg, val, code2, 0)
|
|
||||||
#define TEST_BB_R(code1, reg, val, code2) TEST_BB_RX(code1, reg, val, code2, 0)
|
|
||||||
|
|
||||||
#define TEST_BF_RR(code1, reg1, val1, code2, reg2, val2, code3) \
|
#define TEST_BF_RR(code1, reg1, val1, code2, reg2, val2, code3) \
|
||||||
TESTCASE_START(code1 #reg1 code2 #reg2 code3) \
|
TESTCASE_START(code1 #reg1 code2 #reg2 code3) \
|
||||||
TEST_ARG_REG(reg1, val1) \
|
TEST_ARG_REG(reg1, val1) \
|
||||||
TEST_ARG_REG(reg2, val2) \
|
TEST_ARG_REG(reg2, val2) \
|
||||||
TEST_ARG_END("") \
|
TEST_ARG_END("") \
|
||||||
TEST_BRANCH_F(code1 #reg1 code2 #reg2 code3, 0) \
|
TEST_BRANCH_F(code1 #reg1 code2 #reg2 code3) \
|
||||||
|
TESTCASE_END
|
||||||
|
|
||||||
|
#define TEST_BF_X(code, codex) \
|
||||||
|
TESTCASE_START(code) \
|
||||||
|
TEST_ARG_END("") \
|
||||||
|
TEST_BRANCH_FX(code, codex) \
|
||||||
|
TESTCASE_END
|
||||||
|
|
||||||
|
#define TEST_BB_X(code, codex) \
|
||||||
|
TESTCASE_START(code) \
|
||||||
|
TEST_ARG_END("") \
|
||||||
|
TEST_BRANCH_BX(code, codex) \
|
||||||
|
TESTCASE_END
|
||||||
|
|
||||||
|
#define TEST_BF_RX(code1, reg, val, code2, codex) \
|
||||||
|
TESTCASE_START(code1 #reg code2) \
|
||||||
|
TEST_ARG_REG(reg, val) \
|
||||||
|
TEST_ARG_END("") \
|
||||||
|
TEST_BRANCH_FX(code1 #reg code2, codex) \
|
||||||
TESTCASE_END
|
TESTCASE_END
|
||||||
|
|
||||||
#define TEST_X(code, codex) \
|
#define TEST_X(code, codex) \
|
||||||
@@ -372,6 +393,25 @@ struct test_arg_end {
|
|||||||
TESTCASE_END
|
TESTCASE_END
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macros for defining space directives spread over multiple lines.
|
||||||
|
* These are required so the compiler guesses better the length of inline asm
|
||||||
|
* code and will spill the literal pool early enough to avoid generating PC
|
||||||
|
* relative loads with out of range offsets.
|
||||||
|
*/
|
||||||
|
#define TWICE(x) x x
|
||||||
|
#define SPACE_0x8 TWICE(".space 4\n\t")
|
||||||
|
#define SPACE_0x10 TWICE(SPACE_0x8)
|
||||||
|
#define SPACE_0x20 TWICE(SPACE_0x10)
|
||||||
|
#define SPACE_0x40 TWICE(SPACE_0x20)
|
||||||
|
#define SPACE_0x80 TWICE(SPACE_0x40)
|
||||||
|
#define SPACE_0x100 TWICE(SPACE_0x80)
|
||||||
|
#define SPACE_0x200 TWICE(SPACE_0x100)
|
||||||
|
#define SPACE_0x400 TWICE(SPACE_0x200)
|
||||||
|
#define SPACE_0x800 TWICE(SPACE_0x400)
|
||||||
|
#define SPACE_0x1000 TWICE(SPACE_0x800)
|
||||||
|
|
||||||
|
|
||||||
/* Various values used in test cases... */
|
/* Various values used in test cases... */
|
||||||
#define N(val) (val ^ 0xffffffff)
|
#define N(val) (val ^ 0xffffffff)
|
||||||
#define VAL1 0x12345678
|
#define VAL1 0x12345678
|
||||||
|
@@ -7,10 +7,11 @@
|
|||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/sysdev.h>
|
#include <linux/sysdev.h>
|
||||||
#include <linux/syscore_ops.h>
|
#include <linux/syscore_ops.h>
|
||||||
|
#include <linux/string.h>
|
||||||
|
|
||||||
#include <asm/leds.h>
|
#include <asm/leds.h>
|
||||||
|
|
||||||
|
@@ -32,24 +32,6 @@ static atomic_t waiting_for_crash_ipi;
|
|||||||
|
|
||||||
int machine_kexec_prepare(struct kimage *image)
|
int machine_kexec_prepare(struct kimage *image)
|
||||||
{
|
{
|
||||||
unsigned long page_list;
|
|
||||||
void *reboot_code_buffer;
|
|
||||||
page_list = image->head & PAGE_MASK;
|
|
||||||
|
|
||||||
reboot_code_buffer = page_address(image->control_code_page);
|
|
||||||
|
|
||||||
/* Prepare parameters for reboot_code_buffer*/
|
|
||||||
kexec_start_address = image->start;
|
|
||||||
kexec_indirection_page = page_list;
|
|
||||||
kexec_mach_type = machine_arch_type;
|
|
||||||
kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
|
|
||||||
|
|
||||||
/* copy our kernel relocation code to the control code page */
|
|
||||||
memcpy(reboot_code_buffer,
|
|
||||||
relocate_new_kernel, relocate_new_kernel_size);
|
|
||||||
|
|
||||||
flush_icache_range((unsigned long) reboot_code_buffer,
|
|
||||||
(unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,14 +82,31 @@ void (*kexec_reinit)(void);
|
|||||||
|
|
||||||
void machine_kexec(struct kimage *image)
|
void machine_kexec(struct kimage *image)
|
||||||
{
|
{
|
||||||
|
unsigned long page_list;
|
||||||
unsigned long reboot_code_buffer_phys;
|
unsigned long reboot_code_buffer_phys;
|
||||||
void *reboot_code_buffer;
|
void *reboot_code_buffer;
|
||||||
|
|
||||||
|
|
||||||
|
page_list = image->head & PAGE_MASK;
|
||||||
|
|
||||||
/* we need both effective and real address here */
|
/* we need both effective and real address here */
|
||||||
reboot_code_buffer_phys =
|
reboot_code_buffer_phys =
|
||||||
page_to_pfn(image->control_code_page) << PAGE_SHIFT;
|
page_to_pfn(image->control_code_page) << PAGE_SHIFT;
|
||||||
reboot_code_buffer = page_address(image->control_code_page);
|
reboot_code_buffer = page_address(image->control_code_page);
|
||||||
|
|
||||||
|
/* Prepare parameters for reboot_code_buffer*/
|
||||||
|
kexec_start_address = image->start;
|
||||||
|
kexec_indirection_page = page_list;
|
||||||
|
kexec_mach_type = machine_arch_type;
|
||||||
|
kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
|
||||||
|
|
||||||
|
/* copy our kernel relocation code to the control code page */
|
||||||
|
memcpy(reboot_code_buffer,
|
||||||
|
relocate_new_kernel, relocate_new_kernel_size);
|
||||||
|
|
||||||
|
|
||||||
|
flush_icache_range((unsigned long) reboot_code_buffer,
|
||||||
|
(unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);
|
||||||
printk(KERN_INFO "Bye!\n");
|
printk(KERN_INFO "Bye!\n");
|
||||||
|
|
||||||
if (kexec_reinit)
|
if (kexec_reinit)
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
#include <linux/bitmap.h>
|
#include <linux/bitmap.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/perf_event.h>
|
#include <linux/perf_event.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
@@ -343,8 +343,14 @@ validate_group(struct perf_event *event)
|
|||||||
{
|
{
|
||||||
struct perf_event *sibling, *leader = event->group_leader;
|
struct perf_event *sibling, *leader = event->group_leader;
|
||||||
struct pmu_hw_events fake_pmu;
|
struct pmu_hw_events fake_pmu;
|
||||||
|
DECLARE_BITMAP(fake_used_mask, ARMPMU_MAX_HWEVENTS);
|
||||||
|
|
||||||
memset(&fake_pmu, 0, sizeof(fake_pmu));
|
/*
|
||||||
|
* Initialise the fake PMU. We only need to populate the
|
||||||
|
* used_mask for the purposes of validation.
|
||||||
|
*/
|
||||||
|
memset(fake_used_mask, 0, sizeof(fake_used_mask));
|
||||||
|
fake_pmu.used_mask = fake_used_mask;
|
||||||
|
|
||||||
if (!validate_event(&fake_pmu, leader))
|
if (!validate_event(&fake_pmu, leader))
|
||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
@@ -396,6 +402,9 @@ armpmu_reserve_hardware(struct arm_pmu *armpmu)
|
|||||||
int i, err, irq, irqs;
|
int i, err, irq, irqs;
|
||||||
struct platform_device *pmu_device = armpmu->plat_device;
|
struct platform_device *pmu_device = armpmu->plat_device;
|
||||||
|
|
||||||
|
if (!pmu_device)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
err = reserve_pmu(armpmu->type);
|
err = reserve_pmu(armpmu->type);
|
||||||
if (err) {
|
if (err) {
|
||||||
pr_warning("unable to reserve pmu\n");
|
pr_warning("unable to reserve pmu\n");
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user