mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
Merge branches 'sh/pm-runtime' and 'common/clkfwk' into sh-fixes-for-linus
This commit is contained in:
commit
37bef8f989
3472 changed files with 65432 additions and 35740 deletions
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
|
|
@ -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".
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -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,25 +17,26 @@ 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.
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -789,6 +789,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
|
||||||
|
|
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 :)
|
||||||
|
|
6
Kbuild
6
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
|
||||||
#
|
#
|
||||||
|
|
||||||
|
always += missing-syscalls
|
||||||
|
targets += missing-syscalls
|
||||||
|
|
||||||
quiet_cmd_syscalls = CALL $<
|
quiet_cmd_syscalls = CALL $<
|
||||||
cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags)
|
cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags)
|
||||||
|
|
||||||
PHONY += missing-syscalls
|
missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE
|
||||||
missing-syscalls: scripts/checksyscalls.sh FORCE
|
|
||||||
$(call cmd,syscalls)
|
$(call cmd,syscalls)
|
||||||
|
|
||||||
# Keep these two files during make clean
|
# Keep these two files during make clean
|
||||||
|
|
|
@ -1032,6 +1032,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/
|
||||||
|
@ -2387,7 +2388,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
|
||||||
|
@ -4672,7 +4673,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*/
|
||||||
|
|
||||||
|
@ -5470,7 +5471,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/
|
||||||
|
|
10
Makefile
10
Makefile
|
@ -1,8 +1,8 @@
|
||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 1
|
PATCHLEVEL = 2
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION =
|
EXTRAVERSION = -rc1
|
||||||
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"
|
||||||
|
|
||||||
|
@ -2212,7 +2211,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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/signal.h>
|
#include <linux/signal.h>
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
*/
|
*/
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
#include <linux/elf.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/user.h>
|
#include <linux/user.h>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* under the terms of the GNU General Public License version 2 as published by
|
* under the terms of the GNU General Public License version 2 as published by
|
||||||
* the Free Software Foundation.
|
* the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/ftrace.h>
|
#include <linux/ftrace.h>
|
||||||
|
|
||||||
#if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
|
#if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
|
||||||
|
|
|
@ -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/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/stddef.h>
|
#include <linux/stddef.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/stacktrace.h>
|
#include <linux/stacktrace.h>
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
* have a non-standard calling sequence on the Linux/arm
|
* have a non-standard calling sequence on the Linux/arm
|
||||||
* platform.
|
* platform.
|
||||||
*/
|
*/
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
* This file contains the ARM-specific time handling details:
|
* This file contains the ARM-specific time handling details:
|
||||||
* reading the RTC at bootup, etc...
|
* reading the RTC at bootup, etc...
|
||||||
*/
|
*/
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/time.h>
|
#include <linux/time.h>
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/module.h>
|
#include <linux/export.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/signal.h>
|
#include <linux/signal.h>
|
||||||
|
|
|
@ -195,12 +195,6 @@ if ARCH_AT91SAM9260
|
||||||
|
|
||||||
comment "AT91SAM9260 Variants"
|
comment "AT91SAM9260 Variants"
|
||||||
|
|
||||||
config ARCH_AT91SAM9260_SAM9XE
|
|
||||||
bool "AT91SAM9XE"
|
|
||||||
help
|
|
||||||
Select this if you are using Atmel's AT91SAM9XE System-on-Chip.
|
|
||||||
They are basically AT91SAM9260s with various sizes of embedded Flash.
|
|
||||||
|
|
||||||
comment "AT91SAM9260 / AT91SAM9XE Board Type"
|
comment "AT91SAM9260 / AT91SAM9XE Board Type"
|
||||||
|
|
||||||
config MACH_AT91SAM9260EK
|
config MACH_AT91SAM9260EK
|
||||||
|
|
|
@ -130,19 +130,14 @@ static struct mtd_partition __initdata afeb9260_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(afeb9260_nand_partition);
|
|
||||||
return afeb9260_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata afeb9260_nand_data = {
|
static struct atmel_nand_data __initdata afeb9260_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
.rdy_pin = AT91_PIN_PC13,
|
.rdy_pin = AT91_PIN_PC13,
|
||||||
.enable_pin = AT91_PIN_PC14,
|
.enable_pin = AT91_PIN_PC14,
|
||||||
.partition_info = nand_partitions,
|
|
||||||
.bus_width_16 = 0,
|
.bus_width_16 = 0,
|
||||||
|
.parts = afeb9260_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(afeb9260_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -132,19 +132,14 @@ static struct mtd_partition __initdata cam60_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(cam60_nand_partition);
|
|
||||||
return cam60_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata cam60_nand_data = {
|
static struct atmel_nand_data __initdata cam60_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
// .det_pin = ... not there
|
// .det_pin = ... not there
|
||||||
.rdy_pin = AT91_PIN_PA9,
|
.rdy_pin = AT91_PIN_PA9,
|
||||||
.enable_pin = AT91_PIN_PA7,
|
.enable_pin = AT91_PIN_PA7,
|
||||||
.partition_info = nand_partitions,
|
.parts = cam60_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(cam60_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata cam60_nand_smc_config = {
|
static struct sam9_smc_config __initdata cam60_nand_smc_config = {
|
||||||
|
|
|
@ -169,19 +169,14 @@ static struct mtd_partition __initdata cap9adk_nand_partitions[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(cap9adk_nand_partitions);
|
|
||||||
return cap9adk_nand_partitions;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata cap9adk_nand_data = {
|
static struct atmel_nand_data __initdata cap9adk_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
// .det_pin = ... not connected
|
// .det_pin = ... not connected
|
||||||
// .rdy_pin = ... not connected
|
// .rdy_pin = ... not connected
|
||||||
.enable_pin = AT91_PIN_PD15,
|
.enable_pin = AT91_PIN_PD15,
|
||||||
.partition_info = nand_partitions,
|
.parts = cap9adk_nand_partitions,
|
||||||
|
.num_parts = ARRAY_SIZE(cap9adk_nand_partitions),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata cap9adk_nand_smc_config = {
|
static struct sam9_smc_config __initdata cap9adk_nand_smc_config = {
|
||||||
|
|
|
@ -97,19 +97,14 @@ static struct mtd_partition __initdata kb9202_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(kb9202_nand_partition);
|
|
||||||
return kb9202_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata kb9202_nand_data = {
|
static struct atmel_nand_data __initdata kb9202_nand_data = {
|
||||||
.ale = 22,
|
.ale = 22,
|
||||||
.cle = 21,
|
.cle = 21,
|
||||||
// .det_pin = ... not there
|
// .det_pin = ... not there
|
||||||
.rdy_pin = AT91_PIN_PC29,
|
.rdy_pin = AT91_PIN_PC29,
|
||||||
.enable_pin = AT91_PIN_PC28,
|
.enable_pin = AT91_PIN_PC28,
|
||||||
.partition_info = nand_partitions,
|
.parts = kb9202_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(kb9202_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __init kb9202_board_init(void)
|
static void __init kb9202_board_init(void)
|
||||||
|
|
|
@ -182,19 +182,14 @@ static struct mtd_partition __initdata neocore926_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(neocore926_nand_partition);
|
|
||||||
return neocore926_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata neocore926_nand_data = {
|
static struct atmel_nand_data __initdata neocore926_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
.rdy_pin = AT91_PIN_PB19,
|
.rdy_pin = AT91_PIN_PB19,
|
||||||
.rdy_pin_active_low = 1,
|
.rdy_pin_active_low = 1,
|
||||||
.enable_pin = AT91_PIN_PD15,
|
.enable_pin = AT91_PIN_PD15,
|
||||||
.partition_info = nand_partitions,
|
.parts = neocore926_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(neocore926_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata neocore926_nand_smc_config = {
|
static struct sam9_smc_config __initdata neocore926_nand_smc_config = {
|
||||||
|
|
|
@ -130,19 +130,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(ek_nand_partition);
|
|
||||||
return ek_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata ek_nand_data = {
|
static struct atmel_nand_data __initdata ek_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
// .det_pin = ... not connected
|
// .det_pin = ... not connected
|
||||||
.rdy_pin = AT91_PIN_PC13,
|
.rdy_pin = AT91_PIN_PC13,
|
||||||
.enable_pin = AT91_PIN_PC14,
|
.enable_pin = AT91_PIN_PC14,
|
||||||
.partition_info = nand_partitions,
|
.parts = ek_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(ek_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
||||||
|
|
|
@ -138,19 +138,14 @@ static struct mtd_partition __initdata dk_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(dk_nand_partition);
|
|
||||||
return dk_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata dk_nand_data = {
|
static struct atmel_nand_data __initdata dk_nand_data = {
|
||||||
.ale = 22,
|
.ale = 22,
|
||||||
.cle = 21,
|
.cle = 21,
|
||||||
.det_pin = AT91_PIN_PB1,
|
.det_pin = AT91_PIN_PB1,
|
||||||
.rdy_pin = AT91_PIN_PC2,
|
.rdy_pin = AT91_PIN_PC2,
|
||||||
// .enable_pin = ... not there
|
// .enable_pin = ... not there
|
||||||
.partition_info = nand_partitions,
|
.parts = dk_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(dk_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DK_FLASH_BASE AT91_CHIPSELECT_0
|
#define DK_FLASH_BASE AT91_CHIPSELECT_0
|
||||||
|
|
|
@ -131,19 +131,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(ek_nand_partition);
|
|
||||||
return ek_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata ek_nand_data = {
|
static struct atmel_nand_data __initdata ek_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
// .det_pin = ... not connected
|
// .det_pin = ... not connected
|
||||||
.rdy_pin = AT91_PIN_PC13,
|
.rdy_pin = AT91_PIN_PC13,
|
||||||
.enable_pin = AT91_PIN_PC14,
|
.enable_pin = AT91_PIN_PC14,
|
||||||
.partition_info = nand_partitions,
|
.parts = ek_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(ek_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
||||||
|
|
|
@ -173,19 +173,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(ek_nand_partition);
|
|
||||||
return ek_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata ek_nand_data = {
|
static struct atmel_nand_data __initdata ek_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
// .det_pin = ... not connected
|
// .det_pin = ... not connected
|
||||||
.rdy_pin = AT91_PIN_PC13,
|
.rdy_pin = AT91_PIN_PC13,
|
||||||
.enable_pin = AT91_PIN_PC14,
|
.enable_pin = AT91_PIN_PC14,
|
||||||
.partition_info = nand_partitions,
|
.parts = ek_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(ek_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
||||||
|
|
|
@ -179,19 +179,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(ek_nand_partition);
|
|
||||||
return ek_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata ek_nand_data = {
|
static struct atmel_nand_data __initdata ek_nand_data = {
|
||||||
.ale = 22,
|
.ale = 22,
|
||||||
.cle = 21,
|
.cle = 21,
|
||||||
// .det_pin = ... not connected
|
// .det_pin = ... not connected
|
||||||
.rdy_pin = AT91_PIN_PC15,
|
.rdy_pin = AT91_PIN_PC15,
|
||||||
.enable_pin = AT91_PIN_PC14,
|
.enable_pin = AT91_PIN_PC14,
|
||||||
.partition_info = nand_partitions,
|
.parts = ek_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(ek_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
||||||
|
|
|
@ -180,19 +180,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(ek_nand_partition);
|
|
||||||
return ek_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata ek_nand_data = {
|
static struct atmel_nand_data __initdata ek_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
// .det_pin = ... not connected
|
// .det_pin = ... not connected
|
||||||
.rdy_pin = AT91_PIN_PA22,
|
.rdy_pin = AT91_PIN_PA22,
|
||||||
.enable_pin = AT91_PIN_PD15,
|
.enable_pin = AT91_PIN_PD15,
|
||||||
.partition_info = nand_partitions,
|
.parts = ek_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(ek_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
||||||
|
|
|
@ -157,19 +157,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(ek_nand_partition);
|
|
||||||
return ek_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* det_pin is not connected */
|
/* det_pin is not connected */
|
||||||
static struct atmel_nand_data __initdata ek_nand_data = {
|
static struct atmel_nand_data __initdata ek_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
.rdy_pin = AT91_PIN_PC13,
|
.rdy_pin = AT91_PIN_PC13,
|
||||||
.enable_pin = AT91_PIN_PC14,
|
.enable_pin = AT91_PIN_PC14,
|
||||||
.partition_info = nand_partitions,
|
.parts = ek_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(ek_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
||||||
|
|
|
@ -137,19 +137,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(ek_nand_partition);
|
|
||||||
return ek_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* det_pin is not connected */
|
/* det_pin is not connected */
|
||||||
static struct atmel_nand_data __initdata ek_nand_data = {
|
static struct atmel_nand_data __initdata ek_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
.rdy_pin = AT91_PIN_PC8,
|
.rdy_pin = AT91_PIN_PC8,
|
||||||
.enable_pin = AT91_PIN_PC14,
|
.enable_pin = AT91_PIN_PC14,
|
||||||
.partition_info = nand_partitions,
|
.parts = ek_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(ek_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
||||||
|
|
|
@ -88,19 +88,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(ek_nand_partition);
|
|
||||||
return ek_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata ek_nand_data = {
|
static struct atmel_nand_data __initdata ek_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
// .det_pin = ... not connected
|
// .det_pin = ... not connected
|
||||||
.rdy_pin = AT91_PIN_PD17,
|
.rdy_pin = AT91_PIN_PD17,
|
||||||
.enable_pin = AT91_PIN_PB6,
|
.enable_pin = AT91_PIN_PB6,
|
||||||
.partition_info = nand_partitions,
|
.parts = ek_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(ek_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
static struct sam9_smc_config __initdata ek_nand_smc_config = {
|
||||||
|
|
|
@ -97,18 +97,12 @@ static struct mtd_partition __initdata snapper9260_nand_partitions[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init
|
|
||||||
snapper9260_nand_partition_info(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(snapper9260_nand_partitions);
|
|
||||||
return snapper9260_nand_partitions;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata snapper9260_nand_data = {
|
static struct atmel_nand_data __initdata snapper9260_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
.rdy_pin = AT91_PIN_PC13,
|
.rdy_pin = AT91_PIN_PC13,
|
||||||
.partition_info = snapper9260_nand_partition_info,
|
.parts = snapper9260_nand_partitions,
|
||||||
|
.num_parts = ARRAY_SIZE(snapper9260_nand_partitions),
|
||||||
.bus_width_16 = 0,
|
.bus_width_16 = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -190,19 +190,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(ek_nand_partition);
|
|
||||||
return ek_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata ek_nand_data = {
|
static struct atmel_nand_data __initdata ek_nand_data = {
|
||||||
.ale = 21,
|
.ale = 21,
|
||||||
.cle = 22,
|
.cle = 22,
|
||||||
// .det_pin = ... not connected
|
// .det_pin = ... not connected
|
||||||
.rdy_pin = AT91_PIN_PA22,
|
.rdy_pin = AT91_PIN_PA22,
|
||||||
.enable_pin = AT91_PIN_PD15,
|
.enable_pin = AT91_PIN_PD15,
|
||||||
.partition_info = nand_partitions,
|
.parts = ek_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(ek_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata usb_a9260_nand_smc_config = {
|
static struct sam9_smc_config __initdata usb_a9260_nand_smc_config = {
|
||||||
|
|
|
@ -172,19 +172,14 @@ static struct mtd_partition __initdata yl9200_nand_partition[] = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
|
|
||||||
{
|
|
||||||
*num_partitions = ARRAY_SIZE(yl9200_nand_partition);
|
|
||||||
return yl9200_nand_partition;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct atmel_nand_data __initdata yl9200_nand_data = {
|
static struct atmel_nand_data __initdata yl9200_nand_data = {
|
||||||
.ale = 6,
|
.ale = 6,
|
||||||
.cle = 7,
|
.cle = 7,
|
||||||
// .det_pin = ... not connected
|
// .det_pin = ... not connected
|
||||||
.rdy_pin = AT91_PIN_PC14, /* R/!B (Sheet10) */
|
.rdy_pin = AT91_PIN_PC14, /* R/!B (Sheet10) */
|
||||||
.enable_pin = AT91_PIN_PC15, /* !CE (Sheet10) */
|
.enable_pin = AT91_PIN_PC15, /* !CE (Sheet10) */
|
||||||
.partition_info = nand_partitions,
|
.parts = yl9200_nand_partition,
|
||||||
|
.num_parts = ARRAY_SIZE(yl9200_nand_partition),
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <linux/cpuidle.h>
|
#include <linux/cpuidle.h>
|
||||||
#include <asm/proc-fns.h>
|
#include <asm/proc-fns.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
#include "pm.h"
|
#include "pm.h"
|
||||||
|
|
||||||
|
@ -33,7 +34,8 @@ static struct cpuidle_driver at91_idle_driver = {
|
||||||
|
|
||||||
/* Actual code that puts the SoC in different idle states */
|
/* Actual code that puts the SoC in different idle states */
|
||||||
static int at91_enter_idle(struct cpuidle_device *dev,
|
static int at91_enter_idle(struct cpuidle_device *dev,
|
||||||
struct cpuidle_state *state)
|
struct cpuidle_driver *drv,
|
||||||
|
int index)
|
||||||
{
|
{
|
||||||
struct timeval before, after;
|
struct timeval before, after;
|
||||||
int idle_time;
|
int idle_time;
|
||||||
|
@ -41,10 +43,10 @@ static int at91_enter_idle(struct cpuidle_device *dev,
|
||||||
|
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
do_gettimeofday(&before);
|
do_gettimeofday(&before);
|
||||||
if (state == &dev->states[0])
|
if (index == 0)
|
||||||
/* Wait for interrupt state */
|
/* Wait for interrupt state */
|
||||||
cpu_do_idle();
|
cpu_do_idle();
|
||||||
else if (state == &dev->states[1]) {
|
else if (index == 1) {
|
||||||
asm("b 1f; .align 5; 1:");
|
asm("b 1f; .align 5; 1:");
|
||||||
asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */
|
asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */
|
||||||
saved_lpr = sdram_selfrefresh_enable();
|
saved_lpr = sdram_selfrefresh_enable();
|
||||||
|
@ -55,34 +57,38 @@ static int at91_enter_idle(struct cpuidle_device *dev,
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
|
idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
|
||||||
(after.tv_usec - before.tv_usec);
|
(after.tv_usec - before.tv_usec);
|
||||||
return idle_time;
|
|
||||||
|
dev->last_residency = idle_time;
|
||||||
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize CPU idle by registering the idle states */
|
/* Initialize CPU idle by registering the idle states */
|
||||||
static int at91_init_cpuidle(void)
|
static int at91_init_cpuidle(void)
|
||||||
{
|
{
|
||||||
struct cpuidle_device *device;
|
struct cpuidle_device *device;
|
||||||
|
struct cpuidle_driver *driver = &at91_idle_driver;
|
||||||
cpuidle_register_driver(&at91_idle_driver);
|
|
||||||
|
|
||||||
device = &per_cpu(at91_cpuidle_device, smp_processor_id());
|
device = &per_cpu(at91_cpuidle_device, smp_processor_id());
|
||||||
device->state_count = AT91_MAX_STATES;
|
device->state_count = AT91_MAX_STATES;
|
||||||
|
driver->state_count = AT91_MAX_STATES;
|
||||||
|
|
||||||
/* Wait for interrupt state */
|
/* Wait for interrupt state */
|
||||||
device->states[0].enter = at91_enter_idle;
|
driver->states[0].enter = at91_enter_idle;
|
||||||
device->states[0].exit_latency = 1;
|
driver->states[0].exit_latency = 1;
|
||||||
device->states[0].target_residency = 10000;
|
driver->states[0].target_residency = 10000;
|
||||||
device->states[0].flags = CPUIDLE_FLAG_TIME_VALID;
|
driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID;
|
||||||
strcpy(device->states[0].name, "WFI");
|
strcpy(driver->states[0].name, "WFI");
|
||||||
strcpy(device->states[0].desc, "Wait for interrupt");
|
strcpy(driver->states[0].desc, "Wait for interrupt");
|
||||||
|
|
||||||
/* Wait for interrupt and RAM self refresh state */
|
/* Wait for interrupt and RAM self refresh state */
|
||||||
device->states[1].enter = at91_enter_idle;
|
driver->states[1].enter = at91_enter_idle;
|
||||||
device->states[1].exit_latency = 10;
|
driver->states[1].exit_latency = 10;
|
||||||
device->states[1].target_residency = 10000;
|
driver->states[1].target_residency = 10000;
|
||||||
device->states[1].flags = CPUIDLE_FLAG_TIME_VALID;
|
driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID;
|
||||||
strcpy(device->states[1].name, "RAM_SR");
|
strcpy(driver->states[1].name, "RAM_SR");
|
||||||
strcpy(device->states[1].desc, "WFI and RAM Self Refresh");
|
strcpy(driver->states[1].desc, "WFI and RAM Self Refresh");
|
||||||
|
|
||||||
|
cpuidle_register_driver(&at91_idle_driver);
|
||||||
|
|
||||||
if (cpuidle_register_device(device)) {
|
if (cpuidle_register_device(device)) {
|
||||||
printk(KERN_ERR "at91_init_cpuidle: Failed registering\n");
|
printk(KERN_ERR "at91_init_cpuidle: Failed registering\n");
|
||||||
|
|
|
@ -117,7 +117,8 @@ struct atmel_nand_data {
|
||||||
u8 ale; /* address line number connected to ALE */
|
u8 ale; /* address line number connected to ALE */
|
||||||
u8 cle; /* address line number connected to CLE */
|
u8 cle; /* address line number connected to CLE */
|
||||||
u8 bus_width_16; /* buswidth is 16 bit */
|
u8 bus_width_16; /* buswidth is 16 bit */
|
||||||
struct mtd_partition* (*partition_info)(int, int*);
|
struct mtd_partition *parts;
|
||||||
|
unsigned int num_parts;
|
||||||
};
|
};
|
||||||
extern void __init at91_add_device_nand(struct atmel_nand_data *data);
|
extern void __init at91_add_device_nand(struct atmel_nand_data *data);
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
#include <linux/irqreturn.h>
|
#include <linux/irqreturn.h>
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <asm/page.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
|
@ -377,7 +377,7 @@ static struct davinci_nand_pdata da830_evm_nand_pdata = {
|
||||||
.nr_parts = ARRAY_SIZE(da830_evm_nand_partitions),
|
.nr_parts = ARRAY_SIZE(da830_evm_nand_partitions),
|
||||||
.ecc_mode = NAND_ECC_HW,
|
.ecc_mode = NAND_ECC_HW,
|
||||||
.ecc_bits = 4,
|
.ecc_bits = 4,
|
||||||
.options = NAND_USE_FLASH_BBT,
|
.bbt_options = NAND_BBT_USE_FLASH,
|
||||||
.bbt_td = &da830_evm_nand_bbt_main_descr,
|
.bbt_td = &da830_evm_nand_bbt_main_descr,
|
||||||
.bbt_md = &da830_evm_nand_bbt_mirror_descr,
|
.bbt_md = &da830_evm_nand_bbt_mirror_descr,
|
||||||
.timing = &da830_evm_nandflash_timing,
|
.timing = &da830_evm_nandflash_timing,
|
||||||
|
|
|
@ -256,7 +256,7 @@ static struct davinci_nand_pdata da850_evm_nandflash_data = {
|
||||||
.nr_parts = ARRAY_SIZE(da850_evm_nandflash_partition),
|
.nr_parts = ARRAY_SIZE(da850_evm_nandflash_partition),
|
||||||
.ecc_mode = NAND_ECC_HW,
|
.ecc_mode = NAND_ECC_HW,
|
||||||
.ecc_bits = 4,
|
.ecc_bits = 4,
|
||||||
.options = NAND_USE_FLASH_BBT,
|
.bbt_options = NAND_BBT_USE_FLASH,
|
||||||
.timing = &da850_evm_nandflash_timing,
|
.timing = &da850_evm_nandflash_timing,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ static struct davinci_nand_pdata davinci_nand_data = {
|
||||||
.parts = davinci_nand_partitions,
|
.parts = davinci_nand_partitions,
|
||||||
.nr_parts = ARRAY_SIZE(davinci_nand_partitions),
|
.nr_parts = ARRAY_SIZE(davinci_nand_partitions),
|
||||||
.ecc_mode = NAND_ECC_HW,
|
.ecc_mode = NAND_ECC_HW,
|
||||||
.options = NAND_USE_FLASH_BBT,
|
.bbt_options = NAND_BBT_USE_FLASH,
|
||||||
.ecc_bits = 4,
|
.ecc_bits = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ static struct davinci_nand_pdata davinci_nand_data = {
|
||||||
.parts = davinci_nand_partitions,
|
.parts = davinci_nand_partitions,
|
||||||
.nr_parts = ARRAY_SIZE(davinci_nand_partitions),
|
.nr_parts = ARRAY_SIZE(davinci_nand_partitions),
|
||||||
.ecc_mode = NAND_ECC_HW_SYNDROME,
|
.ecc_mode = NAND_ECC_HW_SYNDROME,
|
||||||
.options = NAND_USE_FLASH_BBT,
|
.bbt_options = NAND_BBT_USE_FLASH,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource davinci_nand_resources[] = {
|
static struct resource davinci_nand_resources[] = {
|
||||||
|
|
|
@ -139,7 +139,7 @@ static struct davinci_nand_pdata davinci_nand_data = {
|
||||||
.parts = davinci_nand_partitions,
|
.parts = davinci_nand_partitions,
|
||||||
.nr_parts = ARRAY_SIZE(davinci_nand_partitions),
|
.nr_parts = ARRAY_SIZE(davinci_nand_partitions),
|
||||||
.ecc_mode = NAND_ECC_HW,
|
.ecc_mode = NAND_ECC_HW,
|
||||||
.options = NAND_USE_FLASH_BBT,
|
.bbt_options = NAND_BBT_USE_FLASH,
|
||||||
.ecc_bits = 4,
|
.ecc_bits = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <linux/phy.h>
|
#include <linux/phy.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
#include <media/tvp514x.h>
|
#include <media/tvp514x.h>
|
||||||
|
|
||||||
|
@ -150,7 +151,7 @@ static struct davinci_nand_pdata davinci_evm_nandflash_data = {
|
||||||
.parts = davinci_evm_nandflash_partition,
|
.parts = davinci_evm_nandflash_partition,
|
||||||
.nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition),
|
.nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition),
|
||||||
.ecc_mode = NAND_ECC_HW,
|
.ecc_mode = NAND_ECC_HW,
|
||||||
.options = NAND_USE_FLASH_BBT,
|
.bbt_options = NAND_BBT_USE_FLASH,
|
||||||
.timing = &davinci_evm_nandflash_timing,
|
.timing = &davinci_evm_nandflash_timing,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/nand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
|
|
@ -396,7 +396,8 @@ static struct davinci_nand_pdata mityomapl138_nandflash_data = {
|
||||||
.parts = mityomapl138_nandflash_partition,
|
.parts = mityomapl138_nandflash_partition,
|
||||||
.nr_parts = ARRAY_SIZE(mityomapl138_nandflash_partition),
|
.nr_parts = ARRAY_SIZE(mityomapl138_nandflash_partition),
|
||||||
.ecc_mode = NAND_ECC_HW,
|
.ecc_mode = NAND_ECC_HW,
|
||||||
.options = NAND_USE_FLASH_BBT | NAND_BUSWIDTH_16,
|
.bbt_options = NAND_BBT_USE_FLASH,
|
||||||
|
.options = NAND_BUSWIDTH_16,
|
||||||
.ecc_bits = 1, /* 4 bit mode is not supported with 16 bit NAND */
|
.ecc_bits = 1, /* 4 bit mode is not supported with 16 bit NAND */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ static struct davinci_nand_pdata davinci_ntosd2_nandflash_data = {
|
||||||
.parts = davinci_ntosd2_nandflash_partition,
|
.parts = davinci_ntosd2_nandflash_partition,
|
||||||
.nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition),
|
.nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition),
|
||||||
.ecc_mode = NAND_ECC_HW,
|
.ecc_mode = NAND_ECC_HW,
|
||||||
.options = NAND_USE_FLASH_BBT,
|
.bbt_options = NAND_BBT_USE_FLASH,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource davinci_ntosd2_nandflash_resource[] = {
|
static struct resource davinci_ntosd2_nandflash_resource[] = {
|
||||||
|
|
|
@ -144,7 +144,7 @@ static struct davinci_nand_pdata nand_config = {
|
||||||
.parts = nand_partitions,
|
.parts = nand_partitions,
|
||||||
.nr_parts = ARRAY_SIZE(nand_partitions),
|
.nr_parts = ARRAY_SIZE(nand_partitions),
|
||||||
.ecc_mode = NAND_ECC_HW,
|
.ecc_mode = NAND_ECC_HW,
|
||||||
.options = NAND_USE_FLASH_BBT,
|
.bbt_options = NAND_BBT_USE_FLASH,
|
||||||
.ecc_bits = 1,
|
.ecc_bits = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
#include <mach/clock.h>
|
#include <mach/clock.h>
|
||||||
#include <mach/cdce949.h>
|
#include <mach/cdce949.h>
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/cpufreq.h>
|
#include <mach/cpufreq.h>
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/cpuidle.h>
|
#include <linux/cpuidle.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <asm/proc-fns.h>
|
#include <asm/proc-fns.h>
|
||||||
|
|
||||||
#include <mach/cpuidle.h>
|
#include <mach/cpuidle.h>
|
||||||
|
@ -78,9 +79,11 @@ static struct davinci_ops davinci_states[DAVINCI_CPUIDLE_MAX_STATES] = {
|
||||||
|
|
||||||
/* Actual code that puts the SoC in different idle states */
|
/* Actual code that puts the SoC in different idle states */
|
||||||
static int davinci_enter_idle(struct cpuidle_device *dev,
|
static int davinci_enter_idle(struct cpuidle_device *dev,
|
||||||
struct cpuidle_state *state)
|
struct cpuidle_driver *drv,
|
||||||
|
int index)
|
||||||
{
|
{
|
||||||
struct davinci_ops *ops = cpuidle_get_statedata(state);
|
struct cpuidle_state_usage *state_usage = &dev->states_usage[index];
|
||||||
|
struct davinci_ops *ops = cpuidle_get_statedata(state_usage);
|
||||||
struct timeval before, after;
|
struct timeval before, after;
|
||||||
int idle_time;
|
int idle_time;
|
||||||
|
|
||||||
|
@ -98,13 +101,17 @@ static int davinci_enter_idle(struct cpuidle_device *dev,
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
|
idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
|
||||||
(after.tv_usec - before.tv_usec);
|
(after.tv_usec - before.tv_usec);
|
||||||
return idle_time;
|
|
||||||
|
dev->last_residency = idle_time;
|
||||||
|
|
||||||
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init davinci_cpuidle_probe(struct platform_device *pdev)
|
static int __init davinci_cpuidle_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct cpuidle_device *device;
|
struct cpuidle_device *device;
|
||||||
|
struct cpuidle_driver *driver = &davinci_idle_driver;
|
||||||
struct davinci_cpuidle_config *pdata = pdev->dev.platform_data;
|
struct davinci_cpuidle_config *pdata = pdev->dev.platform_data;
|
||||||
|
|
||||||
device = &per_cpu(davinci_cpuidle_device, smp_processor_id());
|
device = &per_cpu(davinci_cpuidle_device, smp_processor_id());
|
||||||
|
@ -116,33 +123,34 @@ static int __init davinci_cpuidle_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
ddr2_reg_base = pdata->ddr2_ctlr_base;
|
ddr2_reg_base = pdata->ddr2_ctlr_base;
|
||||||
|
|
||||||
|
/* Wait for interrupt state */
|
||||||
|
driver->states[0].enter = davinci_enter_idle;
|
||||||
|
driver->states[0].exit_latency = 1;
|
||||||
|
driver->states[0].target_residency = 10000;
|
||||||
|
driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID;
|
||||||
|
strcpy(driver->states[0].name, "WFI");
|
||||||
|
strcpy(driver->states[0].desc, "Wait for interrupt");
|
||||||
|
|
||||||
|
/* Wait for interrupt and DDR self refresh state */
|
||||||
|
driver->states[1].enter = davinci_enter_idle;
|
||||||
|
driver->states[1].exit_latency = 10;
|
||||||
|
driver->states[1].target_residency = 10000;
|
||||||
|
driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID;
|
||||||
|
strcpy(driver->states[1].name, "DDR SR");
|
||||||
|
strcpy(driver->states[1].desc, "WFI and DDR Self Refresh");
|
||||||
|
if (pdata->ddr2_pdown)
|
||||||
|
davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN;
|
||||||
|
cpuidle_set_statedata(&device->states_usage[1], &davinci_states[1]);
|
||||||
|
|
||||||
|
device->state_count = DAVINCI_CPUIDLE_MAX_STATES;
|
||||||
|
driver->state_count = DAVINCI_CPUIDLE_MAX_STATES;
|
||||||
|
|
||||||
ret = cpuidle_register_driver(&davinci_idle_driver);
|
ret = cpuidle_register_driver(&davinci_idle_driver);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&pdev->dev, "failed to register driver\n");
|
dev_err(&pdev->dev, "failed to register driver\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wait for interrupt state */
|
|
||||||
device->states[0].enter = davinci_enter_idle;
|
|
||||||
device->states[0].exit_latency = 1;
|
|
||||||
device->states[0].target_residency = 10000;
|
|
||||||
device->states[0].flags = CPUIDLE_FLAG_TIME_VALID;
|
|
||||||
strcpy(device->states[0].name, "WFI");
|
|
||||||
strcpy(device->states[0].desc, "Wait for interrupt");
|
|
||||||
|
|
||||||
/* Wait for interrupt and DDR self refresh state */
|
|
||||||
device->states[1].enter = davinci_enter_idle;
|
|
||||||
device->states[1].exit_latency = 10;
|
|
||||||
device->states[1].target_residency = 10000;
|
|
||||||
device->states[1].flags = CPUIDLE_FLAG_TIME_VALID;
|
|
||||||
strcpy(device->states[1].name, "DDR SR");
|
|
||||||
strcpy(device->states[1].desc, "WFI and DDR Self Refresh");
|
|
||||||
if (pdata->ddr2_pdown)
|
|
||||||
davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN;
|
|
||||||
cpuidle_set_statedata(&device->states[1], &davinci_states[1]);
|
|
||||||
|
|
||||||
device->state_count = DAVINCI_CPUIDLE_MAX_STATES;
|
|
||||||
|
|
||||||
ret = cpuidle_register_device(device);
|
ret = cpuidle_register_device(device);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&pdev->dev, "failed to register device\n");
|
dev_err(&pdev->dev, "failed to register device\n");
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
|
|
||||||
#include <asm-generic/gpio.h>
|
#include <asm-generic/gpio.h>
|
||||||
|
|
||||||
|
#define __ARM_GPIOLIB_COMPLEX
|
||||||
|
|
||||||
/* The inline versions use the static inlines in the driver header */
|
/* The inline versions use the static inlines in the driver header */
|
||||||
#include "gpio-davinci.h"
|
#include "gpio-davinci.h"
|
||||||
|
|
||||||
|
|
|
@ -74,8 +74,10 @@ struct davinci_nand_pdata { /* platform_data */
|
||||||
nand_ecc_modes_t ecc_mode;
|
nand_ecc_modes_t ecc_mode;
|
||||||
u8 ecc_bits;
|
u8 ecc_bits;
|
||||||
|
|
||||||
/* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */
|
/* e.g. NAND_BUSWIDTH_16 */
|
||||||
unsigned options;
|
unsigned options;
|
||||||
|
/* e.g. NAND_BBT_USE_FLASH */
|
||||||
|
unsigned bbt_options;
|
||||||
|
|
||||||
/* Main and mirror bbt descriptor overrides */
|
/* Main and mirror bbt descriptor overrides */
|
||||||
struct nand_bbt_descr *bbt_td;
|
struct nand_bbt_descr *bbt_td;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue