mirror of
https://github.com/adulau/aha.git
synced 2024-12-26 18:56:14 +00:00
Merge branch 'sh/g3-prep' into sh/for-2.6.33
This commit is contained in:
commit
f34548cb73
1059 changed files with 45946 additions and 17724 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -22,6 +22,7 @@
|
|||
*.lst
|
||||
*.symtypes
|
||||
*.order
|
||||
modules.builtin
|
||||
*.elf
|
||||
*.bin
|
||||
*.gz
|
||||
|
@ -45,14 +46,8 @@ Module.symvers
|
|||
#
|
||||
# Generated include files
|
||||
#
|
||||
include/asm
|
||||
include/asm-*/asm-offsets.h
|
||||
include/config
|
||||
include/linux/autoconf.h
|
||||
include/linux/compile.h
|
||||
include/linux/version.h
|
||||
include/linux/utsrelease.h
|
||||
include/linux/bounds.h
|
||||
include/generated
|
||||
|
||||
# stgit generated dirs
|
||||
|
|
|
@ -21,25 +21,27 @@ Contact: Alan Stern <stern@rowland.harvard.edu>
|
|||
Description:
|
||||
Each USB device directory will contain a file named
|
||||
power/level. This file holds a power-level setting for
|
||||
the device, one of "on", "auto", or "suspend".
|
||||
the device, either "on" or "auto".
|
||||
|
||||
"on" means that the device is not allowed to autosuspend,
|
||||
although normal suspends for system sleep will still
|
||||
be honored. "auto" means the device will autosuspend
|
||||
and autoresume in the usual manner, according to the
|
||||
capabilities of its driver. "suspend" means the device
|
||||
is forced into a suspended state and it will not autoresume
|
||||
in response to I/O requests. However remote-wakeup requests
|
||||
from the device may still be enabled (the remote-wakeup
|
||||
setting is controlled separately by the power/wakeup
|
||||
attribute).
|
||||
capabilities of its driver.
|
||||
|
||||
During normal use, devices should be left in the "auto"
|
||||
level. The other levels are meant for administrative uses.
|
||||
level. The "on" level is meant for administrative uses.
|
||||
If you want to suspend a device immediately but leave it
|
||||
free to wake up in response to I/O requests, you should
|
||||
write "0" to power/autosuspend.
|
||||
|
||||
Device not capable of proper suspend and resume should be
|
||||
left in the "on" level. Although the USB spec requires
|
||||
devices to support suspend/resume, many of them do not.
|
||||
In fact so many don't that by default, the USB core
|
||||
initializes all non-hub devices in the "on" level. Some
|
||||
drivers may change this setting when they are bound.
|
||||
|
||||
What: /sys/bus/usb/devices/.../power/persist
|
||||
Date: May 2007
|
||||
KernelVersion: 2.6.23
|
||||
|
|
|
@ -315,41 +315,26 @@ A: The following are what is required for CPU hotplug infrastructure to work
|
|||
|
||||
Q: I need to ensure that a particular cpu is not removed when there is some
|
||||
work specific to this cpu is in progress.
|
||||
A: First switch the current thread context to preferred cpu
|
||||
A: There are two ways. If your code can be run in interrupt context, use
|
||||
smp_call_function_single(), otherwise use work_on_cpu(). Note that
|
||||
work_on_cpu() is slow, and can fail due to out of memory:
|
||||
|
||||
int my_func_on_cpu(int cpu)
|
||||
{
|
||||
cpumask_t saved_mask, new_mask = CPU_MASK_NONE;
|
||||
int curr_cpu, err = 0;
|
||||
|
||||
saved_mask = current->cpus_allowed;
|
||||
cpu_set(cpu, new_mask);
|
||||
err = set_cpus_allowed(current, new_mask);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/*
|
||||
* If we got scheduled out just after the return from
|
||||
* set_cpus_allowed() before running the work, this ensures
|
||||
* we stay locked.
|
||||
*/
|
||||
curr_cpu = get_cpu();
|
||||
|
||||
if (curr_cpu != cpu) {
|
||||
err = -EAGAIN;
|
||||
goto ret;
|
||||
} else {
|
||||
/*
|
||||
* Do work : But cant sleep, since get_cpu() disables preempt
|
||||
*/
|
||||
}
|
||||
ret:
|
||||
put_cpu();
|
||||
set_cpus_allowed(current, saved_mask);
|
||||
return err;
|
||||
}
|
||||
|
||||
int err;
|
||||
get_online_cpus();
|
||||
if (!cpu_online(cpu))
|
||||
err = -EINVAL;
|
||||
else
|
||||
#if NEEDS_BLOCKING
|
||||
err = work_on_cpu(cpu, __my_func_on_cpu, NULL);
|
||||
#else
|
||||
smp_call_function_single(cpu, __my_func_on_cpu, &err,
|
||||
true);
|
||||
#endif
|
||||
put_online_cpus();
|
||||
return err;
|
||||
}
|
||||
|
||||
Q: How do we determine how many CPUs are available for hotplug.
|
||||
A: There is no clear spec defined way from ACPI that can give us that
|
||||
|
|
|
@ -103,6 +103,7 @@ gconf
|
|||
gen-devlist
|
||||
gen_crc32table
|
||||
gen_init_cpio
|
||||
generated
|
||||
genheaders
|
||||
genksyms
|
||||
*_gray256.c
|
||||
|
|
|
@ -226,5 +226,5 @@ struct driver_attribute driver_attr_debug;
|
|||
This can then be used to add and remove the attribute from the
|
||||
driver's directory using:
|
||||
|
||||
int driver_create_file(struct device_driver *, struct driver_attribute *);
|
||||
void driver_remove_file(struct device_driver *, struct driver_attribute *);
|
||||
int driver_create_file(struct device_driver *, const struct driver_attribute *);
|
||||
void driver_remove_file(struct device_driver *, const struct driver_attribute *);
|
||||
|
|
|
@ -91,8 +91,8 @@ struct device_attribute {
|
|||
const char *buf, size_t count);
|
||||
};
|
||||
|
||||
int device_create_file(struct device *, struct device_attribute *);
|
||||
void device_remove_file(struct device *, struct device_attribute *);
|
||||
int device_create_file(struct device *, const struct device_attribute *);
|
||||
void device_remove_file(struct device *, const struct device_attribute *);
|
||||
|
||||
It also defines this helper for defining device attributes:
|
||||
|
||||
|
@ -316,8 +316,8 @@ DEVICE_ATTR(_name, _mode, _show, _store);
|
|||
|
||||
Creation/Removal:
|
||||
|
||||
int device_create_file(struct device *device, struct device_attribute * attr);
|
||||
void device_remove_file(struct device * dev, struct device_attribute * attr);
|
||||
int device_create_file(struct device *dev, const struct device_attribute * attr);
|
||||
void device_remove_file(struct device *dev, const struct device_attribute * attr);
|
||||
|
||||
|
||||
- bus drivers (include/linux/device.h)
|
||||
|
@ -358,7 +358,7 @@ DRIVER_ATTR(_name, _mode, _show, _store)
|
|||
|
||||
Creation/Removal:
|
||||
|
||||
int driver_create_file(struct device_driver *, struct driver_attribute *);
|
||||
void driver_remove_file(struct device_driver *, struct driver_attribute *);
|
||||
int driver_create_file(struct device_driver *, const struct driver_attribute *);
|
||||
void driver_remove_file(struct device_driver *, const struct driver_attribute *);
|
||||
|
||||
|
||||
|
|
60
Documentation/hwmon/k10temp
Normal file
60
Documentation/hwmon/k10temp
Normal file
|
@ -0,0 +1,60 @@
|
|||
Kernel driver k10temp
|
||||
=====================
|
||||
|
||||
Supported chips:
|
||||
* AMD Family 10h processors:
|
||||
Socket F: Quad-Core/Six-Core/Embedded Opteron
|
||||
Socket AM2+: Opteron, Phenom (II) X3/X4
|
||||
Socket AM3: Quad-Core Opteron, Athlon/Phenom II X2/X3/X4, Sempron II
|
||||
Socket S1G3: Athlon II, Sempron, Turion II
|
||||
* AMD Family 11h processors:
|
||||
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
|
||||
|
||||
Prefix: 'k10temp'
|
||||
Addresses scanned: PCI space
|
||||
Datasheets:
|
||||
BIOS and Kernel Developer's Guide (BKDG) For AMD Family 10h Processors:
|
||||
http://support.amd.com/us/Processor_TechDocs/31116.pdf
|
||||
BIOS and Kernel Developer's Guide (BKDG) for AMD Family 11h Processors:
|
||||
http://support.amd.com/us/Processor_TechDocs/41256.pdf
|
||||
Revision Guide for AMD Family 10h Processors:
|
||||
http://support.amd.com/us/Processor_TechDocs/41322.pdf
|
||||
Revision Guide for AMD Family 11h Processors:
|
||||
http://support.amd.com/us/Processor_TechDocs/41788.pdf
|
||||
AMD Family 11h Processor Power and Thermal Data Sheet for Notebooks:
|
||||
http://support.amd.com/us/Processor_TechDocs/43373.pdf
|
||||
AMD Family 10h Server and Workstation Processor Power and Thermal Data Sheet:
|
||||
http://support.amd.com/us/Processor_TechDocs/43374.pdf
|
||||
AMD Family 10h Desktop Processor Power and Thermal Data Sheet:
|
||||
http://support.amd.com/us/Processor_TechDocs/43375.pdf
|
||||
|
||||
Author: Clemens Ladisch <clemens@ladisch.de>
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This driver permits reading of the internal temperature sensor of AMD
|
||||
Family 10h and 11h processors.
|
||||
|
||||
All these processors have a sensor, but on older revisions of Family 10h
|
||||
processors, the sensor may return inconsistent values (erratum 319). The
|
||||
driver will refuse to load on these revisions unless you specify the
|
||||
"force=1" module parameter.
|
||||
|
||||
There is one temperature measurement value, available as temp1_input in
|
||||
sysfs. It is measured in degrees Celsius with a resolution of 1/8th degree.
|
||||
Please note that it is defined as a relative value; to quote the AMD manual:
|
||||
|
||||
Tctl is the processor temperature control value, used by the platform to
|
||||
control cooling systems. Tctl is a non-physical temperature on an
|
||||
arbitrary scale measured in degrees. It does _not_ represent an actual
|
||||
physical temperature like die or case temperature. Instead, it specifies
|
||||
the processor temperature relative to the point at which the system must
|
||||
supply the maximum cooling for the processor's specified maximum case
|
||||
temperature and maximum thermal power dissipation.
|
||||
|
||||
The maximum value for Tctl is available in the file temp1_max.
|
||||
|
||||
If the BIOS has enabled hardware temperature control, the threshold at
|
||||
which the processor will throttle itself to avoid damage is available in
|
||||
temp1_crit and temp1_crit_hyst.
|
|
@ -1,3 +1,17 @@
|
|||
Output files
|
||||
|
||||
modules.order
|
||||
--------------------------------------------------
|
||||
This file records the order in which modules appear in Makefiles. This
|
||||
is used by modprobe to deterministically resolve aliases that match
|
||||
multiple modules.
|
||||
|
||||
modules.builtin
|
||||
--------------------------------------------------
|
||||
This file lists all modules that are built into the kernel. This is used
|
||||
by modprobe to not fail when trying to load something builtin.
|
||||
|
||||
|
||||
Environment variables
|
||||
|
||||
KCPPFLAGS
|
||||
|
|
|
@ -103,10 +103,16 @@ KCONFIG_AUTOCONFIG
|
|||
This environment variable can be set to specify the path & name of the
|
||||
"auto.conf" file. Its default value is "include/config/auto.conf".
|
||||
|
||||
KCONFIG_TRISTATE
|
||||
--------------------------------------------------
|
||||
This environment variable can be set to specify the path & name of the
|
||||
"tristate.conf" file. Its default value is "include/config/tristate.conf".
|
||||
|
||||
KCONFIG_AUTOHEADER
|
||||
--------------------------------------------------
|
||||
This environment variable can be set to specify the path & name of the
|
||||
"autoconf.h" (header) file. Its default value is "include/linux/autoconf.h".
|
||||
"autoconf.h" (header) file.
|
||||
Its default value is "include/generated/autoconf.h".
|
||||
|
||||
|
||||
======================================================================
|
||||
|
|
|
@ -42,80 +42,81 @@ struct dev_pm_ops {
|
|||
...
|
||||
};
|
||||
|
||||
The ->runtime_suspend() callback is executed by the PM core for the bus type of
|
||||
the device being suspended. The bus type's callback is then _entirely_
|
||||
_responsible_ for handling the device as appropriate, which may, but need not
|
||||
include executing the device driver's own ->runtime_suspend() callback (from the
|
||||
PM core's point of view it is not necessary to implement a ->runtime_suspend()
|
||||
callback in a device driver as long as the bus type's ->runtime_suspend() knows
|
||||
what to do to handle the device).
|
||||
The ->runtime_suspend(), ->runtime_resume() and ->runtime_idle() callbacks are
|
||||
executed by the PM core for either the bus type, or device type (if the bus
|
||||
type's callback is not defined), or device class (if the bus type's and device
|
||||
type's callbacks are not defined) of given device. The bus type, device type
|
||||
and device class callbacks are referred to as subsystem-level callbacks in what
|
||||
follows.
|
||||
|
||||
* Once the bus type's ->runtime_suspend() callback has completed successfully
|
||||
The subsystem-level suspend callback is _entirely_ _responsible_ for handling
|
||||
the suspend of the device as appropriate, which may, but need not include
|
||||
executing the device driver's own ->runtime_suspend() callback (from the
|
||||
PM core's point of view it is not necessary to implement a ->runtime_suspend()
|
||||
callback in a device driver as long as the subsystem-level suspend callback
|
||||
knows what to do to handle the device).
|
||||
|
||||
* Once the subsystem-level suspend callback has completed successfully
|
||||
for given device, the PM core regards the device as suspended, which need
|
||||
not mean that the device has been put into a low power state. It is
|
||||
supposed to mean, however, that the device will not process data and will
|
||||
not communicate with the CPU(s) and RAM until its bus type's
|
||||
->runtime_resume() callback is executed for it. The run-time PM status of
|
||||
a device after successful execution of its bus type's ->runtime_suspend()
|
||||
callback is 'suspended'.
|
||||
not communicate with the CPU(s) and RAM until the subsystem-level resume
|
||||
callback is executed for it. The run-time PM status of a device after
|
||||
successful execution of the subsystem-level suspend callback is 'suspended'.
|
||||
|
||||
* If the bus type's ->runtime_suspend() callback returns -EBUSY or -EAGAIN,
|
||||
the device's run-time PM status is supposed to be 'active', which means that
|
||||
the device _must_ be fully operational afterwards.
|
||||
* If the subsystem-level suspend callback returns -EBUSY or -EAGAIN,
|
||||
the device's run-time PM status is 'active', which means that the device
|
||||
_must_ be fully operational afterwards.
|
||||
|
||||
* If the bus type's ->runtime_suspend() callback returns an error code
|
||||
different from -EBUSY or -EAGAIN, the PM core regards this as a fatal
|
||||
error and will refuse to run the helper functions described in Section 4
|
||||
for the device, until the status of it is directly set either to 'active'
|
||||
or to 'suspended' (the PM core provides special helper functions for this
|
||||
purpose).
|
||||
* If the subsystem-level suspend callback returns an error code different
|
||||
from -EBUSY or -EAGAIN, the PM core regards this as a fatal error and will
|
||||
refuse to run the helper functions described in Section 4 for the device,
|
||||
until the status of it is directly set either to 'active', or to 'suspended'
|
||||
(the PM core provides special helper functions for this purpose).
|
||||
|
||||
In particular, if the driver requires remote wakeup capability for proper
|
||||
functioning and device_run_wake() returns 'false' for the device, then
|
||||
->runtime_suspend() should return -EBUSY. On the other hand, if
|
||||
device_run_wake() returns 'true' for the device and the device is put
|
||||
into a low power state during the execution of its bus type's
|
||||
->runtime_suspend(), it is expected that remote wake-up (i.e. hardware mechanism
|
||||
allowing the device to request a change of its power state, such as PCI PME)
|
||||
will be enabled for the device. Generally, remote wake-up should be enabled
|
||||
for all input devices put into a low power state at run time.
|
||||
In particular, if the driver requires remote wake-up capability (i.e. hardware
|
||||
mechanism allowing the device to request a change of its power state, such as
|
||||
PCI PME) for proper functioning and device_run_wake() returns 'false' for the
|
||||
device, then ->runtime_suspend() should return -EBUSY. On the other hand, if
|
||||
device_run_wake() returns 'true' for the device and the device is put into a low
|
||||
power state during the execution of the subsystem-level suspend callback, it is
|
||||
expected that remote wake-up will be enabled for the device. Generally, remote
|
||||
wake-up should be enabled for all input devices put into a low power state at
|
||||
run time.
|
||||
|
||||
The ->runtime_resume() callback is executed by the PM core for the bus type of
|
||||
the device being woken up. The bus type's callback is then _entirely_
|
||||
_responsible_ for handling the device as appropriate, which may, but need not
|
||||
include executing the device driver's own ->runtime_resume() callback (from the
|
||||
PM core's point of view it is not necessary to implement a ->runtime_resume()
|
||||
callback in a device driver as long as the bus type's ->runtime_resume() knows
|
||||
what to do to handle the device).
|
||||
The subsystem-level resume callback is _entirely_ _responsible_ for handling the
|
||||
resume of the device as appropriate, which may, but need not include executing
|
||||
the device driver's own ->runtime_resume() callback (from the PM core's point of
|
||||
view it is not necessary to implement a ->runtime_resume() callback in a device
|
||||
driver as long as the subsystem-level resume callback knows what to do to handle
|
||||
the device).
|
||||
|
||||
* Once the bus type's ->runtime_resume() callback has completed successfully,
|
||||
the PM core regards the device as fully operational, which means that the
|
||||
device _must_ be able to complete I/O operations as needed. The run-time
|
||||
PM status of the device is then 'active'.
|
||||
* Once the subsystem-level resume callback has completed successfully, the PM
|
||||
core regards the device as fully operational, which means that the device
|
||||
_must_ be able to complete I/O operations as needed. The run-time PM status
|
||||
of the device is then 'active'.
|
||||
|
||||
* If the bus type's ->runtime_resume() callback returns an error code, the PM
|
||||
core regards this as a fatal error and will refuse to run the helper
|
||||
functions described in Section 4 for the device, until its status is
|
||||
directly set either to 'active' or to 'suspended' (the PM core provides
|
||||
special helper functions for this purpose).
|
||||
* If the subsystem-level resume callback returns an error code, the PM core
|
||||
regards this as a fatal error and will refuse to run the helper functions
|
||||
described in Section 4 for the device, until its status is directly set
|
||||
either to 'active' or to 'suspended' (the PM core provides special helper
|
||||
functions for this purpose).
|
||||
|
||||
The ->runtime_idle() callback is executed by the PM core for the bus type of
|
||||
given device whenever the device appears to be idle, which is indicated to the
|
||||
PM core by two counters, the device's usage counter and the counter of 'active'
|
||||
children of the device.
|
||||
The subsystem-level idle callback is executed by the PM core whenever the device
|
||||
appears to be idle, which is indicated to the PM core by two counters, the
|
||||
device's usage counter and the counter of 'active' children of the device.
|
||||
|
||||
* If any of these counters is decreased using a helper function provided by
|
||||
the PM core and it turns out to be equal to zero, the other counter is
|
||||
checked. If that counter also is equal to zero, the PM core executes the
|
||||
device bus type's ->runtime_idle() callback (with the device as an
|
||||
argument).
|
||||
subsystem-level idle callback with the device as an argument.
|
||||
|
||||
The action performed by a bus type's ->runtime_idle() callback is totally
|
||||
dependent on the bus type in question, but the expected and recommended action
|
||||
is to check if the device can be suspended (i.e. if all of the conditions
|
||||
necessary for suspending the device are satisfied) and to queue up a suspend
|
||||
request for the device in that case. The value returned by this callback is
|
||||
ignored by the PM core.
|
||||
The action performed by a subsystem-level idle callback is totally dependent on
|
||||
the subsystem in question, but the expected and recommended action is to check
|
||||
if the device can be suspended (i.e. if all of the conditions necessary for
|
||||
suspending the device are satisfied) and to queue up a suspend request for the
|
||||
device in that case. The value returned by this callback is ignored by the PM
|
||||
core.
|
||||
|
||||
The helper functions provided by the PM core, described in Section 4, guarantee
|
||||
that the following constraints are met with respect to the bus type's run-time
|
||||
|
@ -238,41 +239,41 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
|||
removing the device from device hierarchy
|
||||
|
||||
int pm_runtime_idle(struct device *dev);
|
||||
- execute ->runtime_idle() for the device's bus type; returns 0 on success
|
||||
or error code on failure, where -EINPROGRESS means that ->runtime_idle()
|
||||
is already being executed
|
||||
- execute the subsystem-level idle callback for the device; returns 0 on
|
||||
success or error code on failure, where -EINPROGRESS means that
|
||||
->runtime_idle() is already being executed
|
||||
|
||||
int pm_runtime_suspend(struct device *dev);
|
||||
- execute ->runtime_suspend() for the device's bus type; returns 0 on
|
||||
- execute the subsystem-level suspend callback for the device; returns 0 on
|
||||
success, 1 if the device's run-time PM status was already 'suspended', or
|
||||
error code on failure, where -EAGAIN or -EBUSY means it is safe to attempt
|
||||
to suspend the device again in future
|
||||
|
||||
int pm_runtime_resume(struct device *dev);
|
||||
- execute ->runtime_resume() for the device's bus type; returns 0 on
|
||||
- execute the subsystem-leve resume callback for the device; returns 0 on
|
||||
success, 1 if the device's run-time PM status was already 'active' or
|
||||
error code on failure, where -EAGAIN means it may be safe to attempt to
|
||||
resume the device again in future, but 'power.runtime_error' should be
|
||||
checked additionally
|
||||
|
||||
int pm_request_idle(struct device *dev);
|
||||
- submit a request to execute ->runtime_idle() for the device's bus type
|
||||
(the request is represented by a work item in pm_wq); returns 0 on success
|
||||
or error code if the request has not been queued up
|
||||
- submit a request to execute the subsystem-level idle callback for the
|
||||
device (the request is represented by a work item in pm_wq); returns 0 on
|
||||
success or error code if the request has not been queued up
|
||||
|
||||
int pm_schedule_suspend(struct device *dev, unsigned int delay);
|
||||
- schedule the execution of ->runtime_suspend() for the device's bus type
|
||||
in future, where 'delay' is the time to wait before queuing up a suspend
|
||||
work item in pm_wq, in milliseconds (if 'delay' is zero, the work item is
|
||||
queued up immediately); returns 0 on success, 1 if the device's PM
|
||||
- schedule the execution of the subsystem-level suspend callback for the
|
||||
device in future, where 'delay' is the time to wait before queuing up a
|
||||
suspend work item in pm_wq, in milliseconds (if 'delay' is zero, the work
|
||||
item is queued up immediately); returns 0 on success, 1 if the device's PM
|
||||
run-time status was already 'suspended', or error code if the request
|
||||
hasn't been scheduled (or queued up if 'delay' is 0); if the execution of
|
||||
->runtime_suspend() is already scheduled and not yet expired, the new
|
||||
value of 'delay' will be used as the time to wait
|
||||
|
||||
int pm_request_resume(struct device *dev);
|
||||
- submit a request to execute ->runtime_resume() for the device's bus type
|
||||
(the request is represented by a work item in pm_wq); returns 0 on
|
||||
- submit a request to execute the subsystem-level resume callback for the
|
||||
device (the request is represented by a work item in pm_wq); returns 0 on
|
||||
success, 1 if the device's run-time PM status was already 'active', or
|
||||
error code if the request hasn't been queued up
|
||||
|
||||
|
@ -303,12 +304,12 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
|||
run-time PM callbacks described in Section 2
|
||||
|
||||
int pm_runtime_disable(struct device *dev);
|
||||
- prevent the run-time PM helper functions from running the device bus
|
||||
type's run-time PM callbacks, make sure that all of the pending run-time
|
||||
PM operations on the device are either completed or canceled; returns
|
||||
1 if there was a resume request pending and it was necessary to execute
|
||||
->runtime_resume() for the device's bus type to satisfy that request,
|
||||
otherwise 0 is returned
|
||||
- prevent the run-time PM helper functions from running subsystem-level
|
||||
run-time PM callbacks for the device, make sure that all of the pending
|
||||
run-time PM operations on the device are either completed or canceled;
|
||||
returns 1 if there was a resume request pending and it was necessary to
|
||||
execute the subsystem-level resume callback for the device to satisfy that
|
||||
request, otherwise 0 is returned
|
||||
|
||||
void pm_suspend_ignore_children(struct device *dev, bool enable);
|
||||
- set/unset the power.ignore_children flag of the device
|
||||
|
@ -378,5 +379,55 @@ pm_runtime_suspend() or pm_runtime_idle() or their asynchronous counterparts,
|
|||
they will fail returning -EAGAIN, because the device's usage counter is
|
||||
incremented by the core before executing ->probe() and ->remove(). Still, it
|
||||
may be desirable to suspend the device as soon as ->probe() or ->remove() has
|
||||
finished, so the PM core uses pm_runtime_idle_sync() to invoke the device bus
|
||||
type's ->runtime_idle() callback at that time.
|
||||
finished, so the PM core uses pm_runtime_idle_sync() to invoke the
|
||||
subsystem-level idle callback for the device at that time.
|
||||
|
||||
6. Run-time PM and System Sleep
|
||||
|
||||
Run-time PM and system sleep (i.e., system suspend and hibernation, also known
|
||||
as suspend-to-RAM and suspend-to-disk) interact with each other in a couple of
|
||||
ways. If a device is active when a system sleep starts, everything is
|
||||
straightforward. But what should happen if the device is already suspended?
|
||||
|
||||
The device may have different wake-up settings for run-time PM and system sleep.
|
||||
For example, remote wake-up may be enabled for run-time suspend but disallowed
|
||||
for system sleep (device_may_wakeup(dev) returns 'false'). When this happens,
|
||||
the subsystem-level system suspend callback is responsible for changing the
|
||||
device's wake-up setting (it may leave that to the device driver's system
|
||||
suspend routine). It may be necessary to resume the device and suspend it again
|
||||
in order to do so. The same is true if the driver uses different power levels
|
||||
or other settings for run-time suspend and system sleep.
|
||||
|
||||
During system resume, devices generally should be brought back to full power,
|
||||
even if they were suspended before the system sleep began. There are several
|
||||
reasons for this, including:
|
||||
|
||||
* The device might need to switch power levels, wake-up settings, etc.
|
||||
|
||||
* Remote wake-up events might have been lost by the firmware.
|
||||
|
||||
* The device's children may need the device to be at full power in order
|
||||
to resume themselves.
|
||||
|
||||
* The driver's idea of the device state may not agree with the device's
|
||||
physical state. This can happen during resume from hibernation.
|
||||
|
||||
* The device might need to be reset.
|
||||
|
||||
* Even though the device was suspended, if its usage counter was > 0 then most
|
||||
likely it would need a run-time resume in the near future anyway.
|
||||
|
||||
* Always going back to full power is simplest.
|
||||
|
||||
If the device was suspended before the sleep began, then its run-time PM status
|
||||
will have to be updated to reflect the actual post-system sleep status. The way
|
||||
to do this is:
|
||||
|
||||
pm_runtime_disable(dev);
|
||||
pm_runtime_set_active(dev);
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
The PM core always increments the run-time usage counter before calling the
|
||||
->prepare() callback and decrements it after calling the ->complete() callback.
|
||||
Hence disabling run-time PM temporarily like this will not cause any run-time
|
||||
suspend callbacks to be lost.
|
||||
|
|
42
Documentation/powerpc/dts-bindings/fsl/mpic.txt
Normal file
42
Documentation/powerpc/dts-bindings/fsl/mpic.txt
Normal file
|
@ -0,0 +1,42 @@
|
|||
* OpenPIC and its interrupt numbers on Freescale's e500/e600 cores
|
||||
|
||||
The OpenPIC specification does not specify which interrupt source has to
|
||||
become which interrupt number. This is up to the software implementation
|
||||
of the interrupt controller. The only requirement is that every
|
||||
interrupt source has to have an unique interrupt number / vector number.
|
||||
To accomplish this the current implementation assigns the number zero to
|
||||
the first source, the number one to the second source and so on until
|
||||
all interrupt sources have their unique number.
|
||||
Usually the assigned vector number equals the interrupt number mentioned
|
||||
in the documentation for a given core / CPU. This is however not true
|
||||
for the e500 cores (MPC85XX CPUs) where the documentation distinguishes
|
||||
between internal and external interrupt sources and starts counting at
|
||||
zero for both of them.
|
||||
|
||||
So what to write for external interrupt source X or internal interrupt
|
||||
source Y into the device tree? Here is an example:
|
||||
|
||||
The memory map for the interrupt controller in the MPC8544[0] shows,
|
||||
that the first interrupt source starts at 0x5_0000 (PIC Register Address
|
||||
Map-Interrupt Source Configuration Registers). This source becomes the
|
||||
number zero therefore:
|
||||
External interrupt 0 = interrupt number 0
|
||||
External interrupt 1 = interrupt number 1
|
||||
External interrupt 2 = interrupt number 2
|
||||
...
|
||||
Every interrupt number allocates 0x20 bytes register space. So to get
|
||||
its number it is sufficient to shift the lower 16bits to right by five.
|
||||
So for the external interrupt 10 we have:
|
||||
0x0140 >> 5 = 10
|
||||
|
||||
After the external sources, the internal sources follow. The in core I2C
|
||||
controller on the MPC8544 for instance has the internal source number
|
||||
27. Oo obtain its interrupt number we take the lower 16bits of its memory
|
||||
address (0x5_0560) and shift it right:
|
||||
0x0560 >> 5 = 43
|
||||
|
||||
Therefore the I2C device node for the MPC8544 CPU has to have the
|
||||
interrupt number 43 specified in the device tree.
|
||||
|
||||
[0] MPC8544E PowerQUICCTM III, Integrated Host Processor Family Reference Manual
|
||||
MPC8544ERM Rev. 1 10/2007
|
|
@ -403,4 +403,5 @@ STAC9872
|
|||
Cirrus Logic CS4206/4207
|
||||
========================
|
||||
mbp55 MacBook Pro 5,5
|
||||
imac27 IMac 27 Inch
|
||||
auto BIOS setup (default)
|
||||
|
|
|
@ -26,13 +26,33 @@ Procedure for submitting patches to the -stable tree:
|
|||
|
||||
- Send the patch, after verifying that it follows the above rules, to
|
||||
stable@kernel.org.
|
||||
- To have the patch automatically included in the stable tree, add the
|
||||
the tag
|
||||
Cc: stable@kernel.org
|
||||
in the sign-off area. Once the patch is merged it will be applied to
|
||||
the stable tree without anything else needing to be done by the author
|
||||
or subsystem maintainer.
|
||||
- If the patch requires other patches as prerequisites which can be
|
||||
cherry-picked than this can be specified in the following format in
|
||||
the sign-off area:
|
||||
|
||||
Cc: <stable@kernel.org> # .32.x: a1f84a3: sched: Check for idle
|
||||
Cc: <stable@kernel.org> # .32.x: 1b9508f: sched: Rate-limit newidle
|
||||
Cc: <stable@kernel.org> # .32.x: fd21073: sched: Fix affinity logic
|
||||
Cc: <stable@kernel.org> # .32.x
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
|
||||
The tag sequence has the meaning of:
|
||||
git cherry-pick a1f84a3
|
||||
git cherry-pick 1b9508f
|
||||
git cherry-pick fd21073
|
||||
git cherry-pick <this commit>
|
||||
|
||||
- The sender will receive an ACK when the patch has been accepted into the
|
||||
queue, or a NAK if the patch is rejected. This response might take a few
|
||||
days, according to the developer's schedules.
|
||||
- If accepted, the patch will be added to the -stable queue, for review by
|
||||
other developers and by the relevant subsystem maintainer.
|
||||
- If the stable@kernel.org address is added to a patch, when it goes into
|
||||
Linus's tree it will automatically be emailed to the stable team.
|
||||
- Security patches should not be sent to this alias, but instead to the
|
||||
documented security@kernel.org address.
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Subsystem Trace Points: kmem
|
||||
|
||||
The tracing system kmem captures events related to object and page allocation
|
||||
within the kernel. Broadly speaking there are four major subheadings.
|
||||
The kmem tracing system captures events related to object and page allocation
|
||||
within the kernel. Broadly speaking there are five major subheadings.
|
||||
|
||||
o Slab allocation of small objects of unknown type (kmalloc)
|
||||
o Slab allocation of small objects of known type
|
||||
|
@ -9,7 +9,7 @@ within the kernel. Broadly speaking there are four major subheadings.
|
|||
o Per-CPU Allocator Activity
|
||||
o External Fragmentation
|
||||
|
||||
This document will describe what each of the tracepoints are and why they
|
||||
This document describes what each of the tracepoints is and why they
|
||||
might be useful.
|
||||
|
||||
1. Slab allocation of small objects of unknown type
|
||||
|
@ -34,7 +34,7 @@ kmem_cache_free call_site=%lx ptr=%p
|
|||
These events are similar in usage to the kmalloc-related events except that
|
||||
it is likely easier to pin the event down to a specific cache. At the time
|
||||
of writing, no information is available on what slab is being allocated from,
|
||||
but the call_site can usually be used to extrapolate that information
|
||||
but the call_site can usually be used to extrapolate that information.
|
||||
|
||||
3. Page allocation
|
||||
==================
|
||||
|
@ -80,9 +80,9 @@ event indicating whether it is for a percpu_refill or not.
|
|||
When the per-CPU list is too full, a number of pages are freed, each one
|
||||
which triggers a mm_page_pcpu_drain event.
|
||||
|
||||
The individual nature of the events are so that pages can be tracked
|
||||
The individual nature of the events is so that pages can be tracked
|
||||
between allocation and freeing. A number of drain or refill pages that occur
|
||||
consecutively imply the zone->lock being taken once. Large amounts of PCP
|
||||
consecutively imply the zone->lock being taken once. Large amounts of per-CPU
|
||||
refills and drains could imply an imbalance between CPUs where too much work
|
||||
is being concentrated in one place. It could also indicate that the per-CPU
|
||||
lists should be a larger size. Finally, large amounts of refills on one CPU
|
||||
|
@ -102,6 +102,6 @@ is important.
|
|||
|
||||
Large numbers of this event implies that memory is fragmenting and
|
||||
high-order allocations will start failing at some time in the future. One
|
||||
means of reducing the occurange of this event is to increase the size of
|
||||
means of reducing the occurrence of this event is to increase the size of
|
||||
min_free_kbytes in increments of 3*pageblock_size*nr_online_nodes where
|
||||
pageblock_size is usually the size of the default hugepage size.
|
||||
|
|
|
@ -71,12 +71,10 @@ being accessed through sysfs, then it definitely is idle.
|
|||
Forms of dynamic PM
|
||||
-------------------
|
||||
|
||||
Dynamic suspends can occur in two ways: manual and automatic.
|
||||
"Manual" means that the user has told the kernel to suspend a device,
|
||||
whereas "automatic" means that the kernel has decided all by itself to
|
||||
suspend a device. Automatic suspend is called "autosuspend" for
|
||||
short. In general, a device won't be autosuspended unless it has been
|
||||
idle for some minimum period of time, the so-called idle-delay time.
|
||||
Dynamic suspends occur when the kernel decides to suspend an idle
|
||||
device. This is called "autosuspend" for short. In general, a device
|
||||
won't be autosuspended unless it has been idle for some minimum period
|
||||
of time, the so-called idle-delay time.
|
||||
|
||||
Of course, nothing the kernel does on its own initiative should
|
||||
prevent the computer or its devices from working properly. If a
|
||||
|
@ -96,10 +94,11 @@ idle.
|
|||
We can categorize power management events in two broad classes:
|
||||
external and internal. External events are those triggered by some
|
||||
agent outside the USB stack: system suspend/resume (triggered by
|
||||
userspace), manual dynamic suspend/resume (also triggered by
|
||||
userspace), and remote wakeup (triggered by the device). Internal
|
||||
events are those triggered within the USB stack: autosuspend and
|
||||
autoresume.
|
||||
userspace), manual dynamic resume (also triggered by userspace), and
|
||||
remote wakeup (triggered by the device). Internal events are those
|
||||
triggered within the USB stack: autosuspend and autoresume. Note that
|
||||
all dynamic suspend events are internal; external agents are not
|
||||
allowed to issue dynamic suspends.
|
||||
|
||||
|
||||
The user interface for dynamic PM
|
||||
|
@ -145,9 +144,9 @@ relevant attribute files are: wakeup, level, and autosuspend.
|
|||
number of seconds the device should remain idle before
|
||||
the kernel will autosuspend it (the idle-delay time).
|
||||
The default is 2. 0 means to autosuspend as soon as
|
||||
the device becomes idle, and -1 means never to
|
||||
autosuspend. You can write a number to the file to
|
||||
change the autosuspend idle-delay time.
|
||||
the device becomes idle, and negative values mean
|
||||
never to autosuspend. You can write a number to the
|
||||
file to change the autosuspend idle-delay time.
|
||||
|
||||
Writing "-1" to power/autosuspend and writing "on" to power/level do
|
||||
essentially the same thing -- they both prevent the device from being
|
||||
|
@ -377,9 +376,9 @@ the device hasn't been idle for long enough, a delayed workqueue
|
|||
routine is automatically set up to carry out the operation when the
|
||||
autosuspend idle-delay has expired.
|
||||
|
||||
Autoresume attempts also can fail. This will happen if power/level is
|
||||
set to "suspend" or if the device doesn't manage to resume properly.
|
||||
Unlike autosuspend, there's no delay for an autoresume.
|
||||
Autoresume attempts also can fail, although failure would mean that
|
||||
the device is no longer present or operating properly. Unlike
|
||||
autosuspend, there's no delay for an autoresume.
|
||||
|
||||
|
||||
Other parts of the driver interface
|
||||
|
@ -527,13 +526,3 @@ succeed, it may still remain active and thus cause the system to
|
|||
resume as soon as the system suspend is complete. Or the remote
|
||||
wakeup may fail and get lost. Which outcome occurs depends on timing
|
||||
and on the hardware and firmware design.
|
||||
|
||||
More interestingly, a device might undergo a manual resume or
|
||||
autoresume during system suspend. With current kernels this shouldn't
|
||||
happen, because manual resumes must be initiated by userspace and
|
||||
autoresumes happen in response to I/O requests, but all user processes
|
||||
and I/O should be quiescent during a system suspend -- thanks to the
|
||||
freezer. However there are plans to do away with the freezer, which
|
||||
would mean these things would become possible. If and when this comes
|
||||
about, the USB core will carefully arrange matters so that either type
|
||||
of resume will block until the entire system has resumed.
|
||||
|
|
4
Kbuild
4
Kbuild
|
@ -8,7 +8,7 @@
|
|||
#####
|
||||
# 1) Generate bounds.h
|
||||
|
||||
bounds-file := include/linux/bounds.h
|
||||
bounds-file := include/generated/bounds.h
|
||||
|
||||
always := $(bounds-file)
|
||||
targets := $(bounds-file) kernel/bounds.s
|
||||
|
@ -43,7 +43,7 @@ $(obj)/$(bounds-file): kernel/bounds.s Kbuild
|
|||
# 2) Generate asm-offsets.h
|
||||
#
|
||||
|
||||
offsets-file := include/asm/asm-offsets.h
|
||||
offsets-file := include/generated/asm-offsets.h
|
||||
|
||||
always += $(offsets-file)
|
||||
targets += $(offsets-file)
|
||||
|
|
18
MAINTAINERS
18
MAINTAINERS
|
@ -1402,6 +1402,8 @@ L: linux-usb@vger.kernel.org
|
|||
S: Supported
|
||||
F: Documentation/usb/WUSB-Design-overview.txt
|
||||
F: Documentation/usb/wusb-cbaf
|
||||
F: drivers/usb/host/hwa-hc.c
|
||||
F: drivers/usb/host/whci/
|
||||
F: drivers/usb/wusbcore/
|
||||
F: include/linux/usb/wusb*
|
||||
|
||||
|
@ -3677,7 +3679,7 @@ F: include/linux/isicom.h
|
|||
MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
|
||||
M: Felipe Balbi <felipe.balbi@nokia.com>
|
||||
L: linux-usb@vger.kernel.org
|
||||
T: git git://gitorious.org/musb/mainline.git
|
||||
T: git git://gitorious.org/usb/usb.git
|
||||
S: Maintained
|
||||
F: drivers/usb/musb/
|
||||
|
||||
|
@ -5430,10 +5432,19 @@ ULTRA-WIDEBAND (UWB) SUBSYSTEM:
|
|||
M: David Vrabel <david.vrabel@csr.com>
|
||||
L: linux-usb@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/uwb/*
|
||||
F: drivers/uwb/
|
||||
X: drivers/uwb/wlp/
|
||||
X: drivers/uwb/i1480/i1480u-wlp/
|
||||
X: drivers/uwb/i1480/i1480-wlp.h
|
||||
F: include/linux/uwb.h
|
||||
F: include/linux/uwb/
|
||||
|
||||
UNIFDEF
|
||||
M: Tony Finch <dot@dotat.at>
|
||||
W: http://dotat.at/prog/unifdef
|
||||
S: Maintained
|
||||
F: scripts/unifdef.c
|
||||
|
||||
UNIFORM CDROM DRIVER
|
||||
M: Jens Axboe <axboe@kernel.dk>
|
||||
W: http://www.kernel.dk
|
||||
|
@ -5937,9 +5948,12 @@ W: http://linuxwimax.org
|
|||
|
||||
WIMEDIA LLC PROTOCOL (WLP) SUBSYSTEM
|
||||
M: David Vrabel <david.vrabel@csr.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: include/linux/wlp.h
|
||||
F: drivers/uwb/wlp/
|
||||
F: drivers/uwb/i1480/i1480u-wlp/
|
||||
F: drivers/uwb/i1480/i1480-wlp.h
|
||||
|
||||
WISTRON LAPTOP BUTTON DRIVER
|
||||
M: Miloslav Trmac <mitr@volny.cz>
|
||||
|
|
107
Makefile
107
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 32
|
||||
EXTRAVERSION =
|
||||
SUBLEVEL = 33
|
||||
EXTRAVERSION = -rc1
|
||||
NAME = Man-Eating Seals of Antiquity
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -16,6 +16,13 @@ NAME = Man-Eating Seals of Antiquity
|
|||
# o print "Entering directory ...";
|
||||
MAKEFLAGS += -rR --no-print-directory
|
||||
|
||||
# Avoid funny character set dependencies
|
||||
unexport LC_ALL
|
||||
LC_CTYPE=C
|
||||
LC_COLLATE=C
|
||||
LC_NUMERIC=C
|
||||
export LC_CTYPE LC_COLLATE LC_NUMERIC
|
||||
|
||||
# We are using a recursive build, so we need to do a little thinking
|
||||
# to get the ordering right.
|
||||
#
|
||||
|
@ -334,10 +341,9 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
|
|||
|
||||
# Use LINUXINCLUDE when you must reference the include/ directory.
|
||||
# Needed to be compatible with the O= option
|
||||
LINUXINCLUDE := -Iinclude \
|
||||
$(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) \
|
||||
-I$(srctree)/arch/$(hdr-arch)/include \
|
||||
-include include/linux/autoconf.h
|
||||
LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include -Iinclude \
|
||||
$(if $(KBUILD_SRC), -I$(srctree)/include) \
|
||||
-include include/generated/autoconf.h
|
||||
|
||||
KBUILD_CPPFLAGS := -D__KERNEL__
|
||||
|
||||
|
@ -465,7 +471,7 @@ ifeq ($(KBUILD_EXTMOD),)
|
|||
# Carefully list dependencies so we do not try to build scripts twice
|
||||
# in parallel
|
||||
PHONY += scripts
|
||||
scripts: scripts_basic include/config/auto.conf
|
||||
scripts: scripts_basic include/config/auto.conf include/config/tristate.conf
|
||||
$(Q)$(MAKE) $(build)=$(@)
|
||||
|
||||
# Objects we will link into vmlinux / subdirs we need to visit
|
||||
|
@ -492,18 +498,18 @@ $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
|
|||
# with it and forgot to run make oldconfig.
|
||||
# if auto.conf.cmd is missing then we are probably in a cleaned tree so
|
||||
# we execute the config step to be sure to catch updated Kconfig files
|
||||
include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
|
||||
include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
|
||||
$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
|
||||
else
|
||||
# external modules needs include/linux/autoconf.h and include/config/auto.conf
|
||||
# external modules needs include/generated/autoconf.h and include/config/auto.conf
|
||||
# but do not care if they are up-to-date. Use auto.conf to trigger the test
|
||||
PHONY += include/config/auto.conf
|
||||
|
||||
include/config/auto.conf:
|
||||
$(Q)test -e include/linux/autoconf.h -a -e $@ || ( \
|
||||
$(Q)test -e include/generated/autoconf.h -a -e $@ || ( \
|
||||
echo; \
|
||||
echo " ERROR: Kernel configuration is invalid."; \
|
||||
echo " include/linux/autoconf.h or $@ are missing."; \
|
||||
echo " include/generated/autoconf.h or $@ are missing.";\
|
||||
echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
|
||||
echo; \
|
||||
/bin/false)
|
||||
|
@ -877,6 +883,9 @@ $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;
|
|||
PHONY += $(vmlinux-dirs)
|
||||
$(vmlinux-dirs): prepare scripts
|
||||
$(Q)$(MAKE) $(build)=$@
|
||||
ifdef CONFIG_MODULES
|
||||
$(Q)$(MAKE) $(modbuiltin)=$@
|
||||
endif
|
||||
|
||||
# Build the kernel release string
|
||||
#
|
||||
|
@ -955,7 +964,6 @@ PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
|
|||
# prepare3 is used to check if we are building in a separate output directory,
|
||||
# and if so do:
|
||||
# 1) Check that make has not been executed in the kernel src $(srctree)
|
||||
# 2) Create the include2 directory, used for the second asm symlink
|
||||
prepare3: include/config/kernel.release
|
||||
ifneq ($(KBUILD_SRC),)
|
||||
@$(kecho) ' Using $(srctree) as source for kernel'
|
||||
|
@ -964,17 +972,13 @@ ifneq ($(KBUILD_SRC),)
|
|||
echo " in the '$(srctree)' directory.";\
|
||||
/bin/false; \
|
||||
fi;
|
||||
$(Q)if [ ! -d include2 ]; then \
|
||||
mkdir -p include2; \
|
||||
ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm; \
|
||||
fi
|
||||
endif
|
||||
|
||||
# prepare2 creates a makefile if using a separate output directory
|
||||
prepare2: prepare3 outputmakefile
|
||||
|
||||
prepare1: prepare2 include/linux/version.h include/linux/utsrelease.h \
|
||||
include/asm include/config/auto.conf
|
||||
prepare1: prepare2 include/linux/version.h include/generated/utsrelease.h \
|
||||
include/config/auto.conf
|
||||
$(cmd_crmodverdir)
|
||||
|
||||
archprepare: prepare1 scripts_basic
|
||||
|
@ -986,42 +990,6 @@ prepare0: archprepare FORCE
|
|||
# All the preparing..
|
||||
prepare: prepare0
|
||||
|
||||
# The asm symlink changes when $(ARCH) changes.
|
||||
# Detect this and ask user to run make mrproper
|
||||
# If asm is a stale symlink (point to dir that does not exist) remove it
|
||||
define check-symlink
|
||||
set -e; \
|
||||
if [ -L include/asm ]; then \
|
||||
asmlink=`readlink include/asm | cut -d '-' -f 2`; \
|
||||
if [ "$$asmlink" != "$(SRCARCH)" ]; then \
|
||||
echo "ERROR: the symlink $@ points to asm-$$asmlink but asm-$(SRCARCH) was expected"; \
|
||||
echo " set ARCH or save .config and run 'make mrproper' to fix it"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
test -e $$asmlink || rm include/asm; \
|
||||
elif [ -d include/asm ]; then \
|
||||
echo "ERROR: $@ is a directory but a symlink was expected";\
|
||||
exit 1; \
|
||||
fi
|
||||
endef
|
||||
|
||||
# We create the target directory of the symlink if it does
|
||||
# not exist so the test in check-symlink works and we have a
|
||||
# directory for generated filesas used by some architectures.
|
||||
define create-symlink
|
||||
if [ ! -L include/asm ]; then \
|
||||
$(kecho) ' SYMLINK $@ -> include/asm-$(SRCARCH)'; \
|
||||
if [ ! -d include/asm-$(SRCARCH) ]; then \
|
||||
mkdir -p include/asm-$(SRCARCH); \
|
||||
fi; \
|
||||
ln -fsn asm-$(SRCARCH) $@; \
|
||||
fi
|
||||
endef
|
||||
|
||||
include/asm: FORCE
|
||||
$(Q)$(check-symlink)
|
||||
$(Q)$(create-symlink)
|
||||
|
||||
# Generate some files
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
@ -1046,7 +1014,7 @@ endef
|
|||
include/linux/version.h: $(srctree)/Makefile FORCE
|
||||
$(call filechk,version.h)
|
||||
|
||||
include/linux/utsrelease.h: include/config/kernel.release FORCE
|
||||
include/generated/utsrelease.h: include/config/kernel.release FORCE
|
||||
$(call filechk,utsrelease.h)
|
||||
|
||||
PHONY += headerdep
|
||||
|
@ -1076,11 +1044,6 @@ firmware_install: FORCE
|
|||
export INSTALL_HDR_PATH = $(objtree)/usr
|
||||
|
||||
hdr-inst := -rR -f $(srctree)/scripts/Makefile.headersinst obj
|
||||
# Find out where the Kbuild file is located to support
|
||||
# arch/$(ARCH)/include/asm
|
||||
hdr-dir = $(strip \
|
||||
$(if $(wildcard $(srctree)/arch/$(hdr-arch)/include/asm/Kbuild), \
|
||||
arch/$(hdr-arch)/include/asm, include/asm-$(hdr-arch)))
|
||||
|
||||
# If we do an all arch process set dst to asm-$(hdr-arch)
|
||||
hdr-dst = $(if $(KBUILD_HEADERS), dst=include/asm-$(hdr-arch), dst=include/asm)
|
||||
|
@ -1095,10 +1058,10 @@ headers_install_all:
|
|||
|
||||
PHONY += headers_install
|
||||
headers_install: __headers
|
||||
$(if $(wildcard $(srctree)/$(hdr-dir)/Kbuild),, \
|
||||
$(if $(wildcard $(srctree)/arch/$(hdr-arch)/include/asm/Kbuild),, \
|
||||
$(error Headers not exportable for the $(SRCARCH) architecture))
|
||||
$(Q)$(MAKE) $(hdr-inst)=include
|
||||
$(Q)$(MAKE) $(hdr-inst)=$(hdr-dir) $(hdr-dst)
|
||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/asm $(hdr-dst)
|
||||
|
||||
PHONY += headers_check_all
|
||||
headers_check_all: headers_install_all
|
||||
|
@ -1107,7 +1070,7 @@ headers_check_all: headers_install_all
|
|||
PHONY += headers_check
|
||||
headers_check: headers_install
|
||||
$(Q)$(MAKE) $(hdr-inst)=include HDRCHECK=1
|
||||
$(Q)$(MAKE) $(hdr-inst)=$(hdr-dir) $(hdr-dst) HDRCHECK=1
|
||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/asm $(hdr-dst) HDRCHECK=1
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Modules
|
||||
|
@ -1127,6 +1090,7 @@ all: modules
|
|||
PHONY += modules
|
||||
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
|
||||
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
|
||||
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.builtin) > $(objtree)/modules.builtin
|
||||
@$(kecho) ' Building modules, stage 2.';
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
|
||||
|
@ -1156,6 +1120,7 @@ _modinst_:
|
|||
ln -s $(objtree) $(MODLIB)/build ; \
|
||||
fi
|
||||
@cp -f $(objtree)/modules.order $(MODLIB)/
|
||||
@cp -f $(objtree)/modules.builtin $(MODLIB)/
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
|
||||
|
||||
# This depmod is only for convenience to give the initial
|
||||
|
@ -1194,12 +1159,10 @@ CLEAN_FILES += vmlinux System.map \
|
|||
.tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map
|
||||
|
||||
# Directories & files removed with 'make mrproper'
|
||||
MRPROPER_DIRS += include/config include2 usr/include include/generated
|
||||
MRPROPER_FILES += .config .config.old include/asm .version .old_version \
|
||||
include/linux/autoconf.h include/linux/version.h \
|
||||
include/linux/utsrelease.h \
|
||||
include/linux/bounds.h include/asm*/asm-offsets.h \
|
||||
Module.symvers Module.markers tags TAGS cscope*
|
||||
MRPROPER_DIRS += include/config usr/include include/generated
|
||||
MRPROPER_FILES += .config .config.old .version .old_version \
|
||||
include/linux/version.h \
|
||||
Module.symvers tags TAGS cscope*
|
||||
|
||||
# clean - Delete most, but leave enough to build external modules
|
||||
#
|
||||
|
@ -1218,7 +1181,7 @@ clean: archclean $(clean-dirs)
|
|||
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
|
||||
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
|
||||
-o -name '*.symtypes' -o -name 'modules.order' \
|
||||
-o -name 'Module.markers' -o -name '.tmp_*.o.*' \
|
||||
-o -name modules.builtin -o -name '.tmp_*.o.*' \
|
||||
-o -name '*.gcno' \) -type f -print | xargs rm -f
|
||||
|
||||
# mrproper - Delete all generated files, including .config
|
||||
|
@ -1416,8 +1379,8 @@ $(clean-dirs):
|
|||
|
||||
clean: rm-dirs := $(MODVERDIR)
|
||||
clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers \
|
||||
$(KBUILD_EXTMOD)/Module.markers \
|
||||
$(KBUILD_EXTMOD)/modules.order
|
||||
$(KBUILD_EXTMOD)/modules.order \
|
||||
$(KBUILD_EXTMOD)/modules.builtin
|
||||
clean: $(clean-dirs)
|
||||
$(call cmd,rmdirs)
|
||||
$(call cmd,rmfiles)
|
||||
|
|
|
@ -135,9 +135,7 @@ config HAVE_DEFAULT_NO_SPIN_MUTEXES
|
|||
|
||||
config HAVE_HW_BREAKPOINT
|
||||
bool
|
||||
depends on HAVE_PERF_EVENTS
|
||||
select ANON_INODES
|
||||
select PERF_EVENTS
|
||||
depends on PERF_EVENTS
|
||||
|
||||
config HAVE_USER_RETURN_NOTIFIER
|
||||
bool
|
||||
|
|
|
@ -9,6 +9,7 @@ config ALPHA
|
|||
select HAVE_IDE
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_SYSCALL_WRAPPERS
|
||||
select HAVE_PERF_EVENTS
|
||||
help
|
||||
The Alpha is a 64-bit general-purpose processor designed and
|
||||
marketed by the Digital Equipment Corporation of blessed memory,
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/utsrelease.h>
|
||||
#include <generated/utsrelease.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#include <asm/system.h>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/utsrelease.h>
|
||||
#include <generated/utsrelease.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#include <asm/system.h>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/utsrelease.h>
|
||||
#include <generated/utsrelease.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#include <asm/system.h>
|
||||
|
|
1
arch/alpha/include/asm/asm-offsets.h
Normal file
1
arch/alpha/include/asm/asm-offsets.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
|
@ -13,7 +13,8 @@
|
|||
"call_pal %0 # bugchk\n\t" \
|
||||
".long %1\n\t.8byte %2" \
|
||||
: : "i"(PAL_bugchk), "i"(__LINE__), "i"(__FILE__)); \
|
||||
for ( ; ; ); } while (0)
|
||||
unreachable(); \
|
||||
} while (0)
|
||||
|
||||
#define HAVE_ARCH_BUG
|
||||
#endif
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#define O_NOATIME 04000000
|
||||
#define O_CLOEXEC 010000000 /* set close_on_exec */
|
||||
/*
|
||||
* Before Linux 2.6.32 only O_DSYNC semantics were implemented, but using
|
||||
* Before Linux 2.6.33 only O_DSYNC semantics were implemented, but using
|
||||
* the O_SYNC flag. We continue to use the existing numerical value
|
||||
* for O_DSYNC semantics now, but using the correct symbolic name for it.
|
||||
* This new value is used to request true Posix O_SYNC semantics. It is
|
||||
|
|
9
arch/alpha/include/asm/perf_event.h
Normal file
9
arch/alpha/include/asm/perf_event.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#ifndef __ASM_ALPHA_PERF_EVENT_H
|
||||
#define __ASM_ALPHA_PERF_EVENT_H
|
||||
|
||||
/* Alpha only supports software events through this interface. */
|
||||
static inline void set_perf_event_pending(void) { }
|
||||
|
||||
#define PERF_EVENT_INDEX_OFFSET 0
|
||||
|
||||
#endif /* __ASM_ALPHA_PERF_EVENT_H */
|
|
@ -247,6 +247,7 @@
|
|||
#define __IGNORE_pause
|
||||
#define __IGNORE_time
|
||||
#define __IGNORE_utime
|
||||
#define __IGNORE_umount2
|
||||
|
||||
/*
|
||||
* Linux-specific system calls begin at 300
|
||||
|
@ -434,10 +435,24 @@
|
|||
#define __NR_timerfd 477
|
||||
#define __NR_eventfd 478
|
||||
#define __NR_recvmmsg 479
|
||||
#define __NR_fallocate 480
|
||||
#define __NR_timerfd_create 481
|
||||
#define __NR_timerfd_settime 482
|
||||
#define __NR_timerfd_gettime 483
|
||||
#define __NR_signalfd4 484
|
||||
#define __NR_eventfd2 485
|
||||
#define __NR_epoll_create1 486
|
||||
#define __NR_dup3 487
|
||||
#define __NR_pipe2 488
|
||||
#define __NR_inotify_init1 489
|
||||
#define __NR_preadv 490
|
||||
#define __NR_pwritev 491
|
||||
#define __NR_rt_tgsigqueueinfo 492
|
||||
#define __NR_perf_event_open 493
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define NR_SYSCALLS 480
|
||||
#define NR_SYSCALLS 494
|
||||
|
||||
#define __ARCH_WANT_IPC_PARSE_VERSION
|
||||
#define __ARCH_WANT_OLD_READDIR
|
||||
|
|
|
@ -495,9 +495,23 @@ sys_call_table:
|
|||
.quad sys_epoll_pwait
|
||||
.quad sys_utimensat /* 475 */
|
||||
.quad sys_signalfd
|
||||
.quad sys_ni_syscall
|
||||
.quad sys_ni_syscall /* sys_timerfd */
|
||||
.quad sys_eventfd
|
||||
.quad sys_recvmmsg
|
||||
.quad sys_fallocate /* 480 */
|
||||
.quad sys_timerfd_create
|
||||
.quad sys_timerfd_settime
|
||||
.quad sys_timerfd_gettime
|
||||
.quad sys_signalfd4
|
||||
.quad sys_eventfd2 /* 485 */
|
||||
.quad sys_epoll_create1
|
||||
.quad sys_dup3
|
||||
.quad sys_pipe2
|
||||
.quad sys_inotify_init1
|
||||
.quad sys_preadv /* 490 */
|
||||
.quad sys_pwritev
|
||||
.quad sys_rt_tgsigqueueinfo
|
||||
.quad sys_perf_event_open
|
||||
|
||||
.size sys_call_table, . - sys_call_table
|
||||
.type sys_call_table, @object
|
||||
|
|
|
@ -242,15 +242,8 @@ all: $(KBUILD_IMAGE)
|
|||
|
||||
boot := arch/arm/boot
|
||||
|
||||
# Update machine arch and proc symlinks if something which affects
|
||||
# them changed. We use .arch to indicate when they were updated
|
||||
# last, otherwise make uses the target directory mtime.
|
||||
|
||||
archprepare: maketools
|
||||
|
||||
PHONY += maketools FORCE
|
||||
maketools: include/linux/version.h FORCE
|
||||
$(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h
|
||||
archprepare:
|
||||
$(Q)$(MAKE) $(build)=arch/arm/tools include/generated/mach-types.h
|
||||
|
||||
# Convert bzImage to zImage
|
||||
bzImage: zImage
|
||||
|
@ -261,9 +254,6 @@ zImage Image xipImage bootpImage uImage: vmlinux
|
|||
zinstall install: vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
|
||||
|
||||
CLEAN_FILES += include/asm-arm/mach-types.h \
|
||||
include/asm-arm/arch include/asm-arm/.arch
|
||||
|
||||
# We use MRPROPER_FILES and CLEAN_FILES now
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
|
|
@ -308,15 +308,11 @@ static inline void unmap_single(struct device *dev, dma_addr_t dma_addr,
|
|||
memcpy(ptr, buf->safe, size);
|
||||
|
||||
/*
|
||||
* DMA buffers must have the same cache properties
|
||||
* as if they were really used for DMA - which means
|
||||
* data must be written back to RAM. Note that
|
||||
* we don't use dmac_flush_range() here for the
|
||||
* bidirectional case because we know the cache
|
||||
* lines will be coherent with the data written.
|
||||
* Since we may have written to a page cache page,
|
||||
* we need to ensure that the data will be coherent
|
||||
* with user mappings.
|
||||
*/
|
||||
dmac_clean_range(ptr, ptr + size);
|
||||
outer_clean_range(__pa(ptr), __pa(ptr) + size);
|
||||
__cpuc_flush_kernel_dcache_area(ptr, size);
|
||||
}
|
||||
free_safe_buffer(dev->archdata.dmabounce, buf);
|
||||
}
|
||||
|
|
1
arch/arm/include/asm/asm-offsets.h
Normal file
1
arch/arm/include/asm/asm-offsets.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
|
@ -211,7 +211,7 @@ struct cpu_cache_fns {
|
|||
|
||||
void (*coherent_kern_range)(unsigned long, unsigned long);
|
||||
void (*coherent_user_range)(unsigned long, unsigned long);
|
||||
void (*flush_kern_dcache_page)(void *);
|
||||
void (*flush_kern_dcache_area)(void *, size_t);
|
||||
|
||||
void (*dma_inv_range)(const void *, const void *);
|
||||
void (*dma_clean_range)(const void *, const void *);
|
||||
|
@ -236,7 +236,7 @@ extern struct cpu_cache_fns cpu_cache;
|
|||
#define __cpuc_flush_user_range cpu_cache.flush_user_range
|
||||
#define __cpuc_coherent_kern_range cpu_cache.coherent_kern_range
|
||||
#define __cpuc_coherent_user_range cpu_cache.coherent_user_range
|
||||
#define __cpuc_flush_dcache_page cpu_cache.flush_kern_dcache_page
|
||||
#define __cpuc_flush_dcache_area cpu_cache.flush_kern_dcache_area
|
||||
|
||||
/*
|
||||
* These are private to the dma-mapping API. Do not use directly.
|
||||
|
@ -255,14 +255,14 @@ extern struct cpu_cache_fns cpu_cache;
|
|||
#define __cpuc_flush_user_range __glue(_CACHE,_flush_user_cache_range)
|
||||
#define __cpuc_coherent_kern_range __glue(_CACHE,_coherent_kern_range)
|
||||
#define __cpuc_coherent_user_range __glue(_CACHE,_coherent_user_range)
|
||||
#define __cpuc_flush_dcache_page __glue(_CACHE,_flush_kern_dcache_page)
|
||||
#define __cpuc_flush_dcache_area __glue(_CACHE,_flush_kern_dcache_area)
|
||||
|
||||
extern void __cpuc_flush_kern_all(void);
|
||||
extern void __cpuc_flush_user_all(void);
|
||||
extern void __cpuc_flush_user_range(unsigned long, unsigned long, unsigned int);
|
||||
extern void __cpuc_coherent_kern_range(unsigned long, unsigned long);
|
||||
extern void __cpuc_coherent_user_range(unsigned long, unsigned long);
|
||||
extern void __cpuc_flush_dcache_page(void *);
|
||||
extern void __cpuc_flush_dcache_area(void *, size_t);
|
||||
|
||||
/*
|
||||
* These are private to the dma-mapping API. Do not use directly.
|
||||
|
@ -448,7 +448,7 @@ static inline void flush_kernel_dcache_page(struct page *page)
|
|||
{
|
||||
/* highmem pages are always flushed upon kunmap already */
|
||||
if ((cache_is_vivt() || cache_is_vipt_aliasing()) && !PageHighMem(page))
|
||||
__cpuc_flush_dcache_page(page_address(page));
|
||||
__cpuc_flush_dcache_area(page_address(page), PAGE_SIZE);
|
||||
}
|
||||
|
||||
#define flush_dcache_mmap_lock(mapping) \
|
||||
|
@ -465,13 +465,6 @@ static inline void flush_kernel_dcache_page(struct page *page)
|
|||
*/
|
||||
#define flush_icache_page(vma,page) do { } while (0)
|
||||
|
||||
static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt,
|
||||
unsigned offset, size_t size)
|
||||
{
|
||||
const void *start = (void __force *)virt + offset;
|
||||
dmac_inv_range(start, start + size);
|
||||
}
|
||||
|
||||
/*
|
||||
* flush_cache_vmap() is used when creating mappings (eg, via vmap,
|
||||
* vmalloc, ioremap etc) in kernel space for pages. On non-VIPT
|
||||
|
|
1
arch/arm/include/asm/mach-types.h
Normal file
1
arch/arm/include/asm/mach-types.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/mach-types.h>
|
|
@ -52,6 +52,12 @@ config MACH_OPENRD_BASE
|
|||
Say 'Y' here if you want your kernel to support the
|
||||
Marvell OpenRD Base Board.
|
||||
|
||||
config MACH_NETSPACE_V2
|
||||
bool "LaCie Network Space v2 NAS Board"
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support the
|
||||
LaCie Network Space v2 NAS.
|
||||
|
||||
endmenu
|
||||
|
||||
endif
|
||||
|
|
|
@ -8,5 +8,6 @@ obj-$(CONFIG_MACH_SHEEVAPLUG) += sheevaplug-setup.o
|
|||
obj-$(CONFIG_MACH_TS219) += ts219-setup.o tsx1x-common.o
|
||||
obj-$(CONFIG_MACH_TS41X) += ts41x-setup.o tsx1x-common.o
|
||||
obj-$(CONFIG_MACH_OPENRD_BASE) += openrd_base-setup.o
|
||||
obj-$(CONFIG_MACH_NETSPACE_V2) += netspace_v2-setup.o
|
||||
|
||||
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
||||
|
|
325
arch/arm/mach-kirkwood/netspace_v2-setup.c
Normal file
325
arch/arm/mach-kirkwood/netspace_v2-setup.c
Normal file
|
@ -0,0 +1,325 @@
|
|||
/*
|
||||
* arch/arm/mach-kirkwood/netspace_v2-setup.c
|
||||
*
|
||||
* LaCie Network Space v2 board setup
|
||||
*
|
||||
* Copyright (C) 2009 Simon Guinot <sguinot@lacie.com>
|
||||
* Copyright (C) 2009 Benoît Canet <benoit.canet@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/spi/flash.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/ata_platform.h>
|
||||
#include <linux/mv643xx_eth.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c/at24.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
#include <linux/leds.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <mach/kirkwood.h>
|
||||
#include <plat/time.h>
|
||||
#include "common.h"
|
||||
#include "mpp.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* 512KB SPI Flash on Boot Device (MACRONIX MX25L4005)
|
||||
****************************************************************************/
|
||||
|
||||
static struct mtd_partition netspace_v2_flash_parts[] = {
|
||||
{
|
||||
.name = "u-boot",
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.offset = 0,
|
||||
.mask_flags = MTD_WRITEABLE, /* force read-only */
|
||||
},
|
||||
};
|
||||
|
||||
static const struct flash_platform_data netspace_v2_flash = {
|
||||
.type = "mx25l4005a",
|
||||
.name = "spi_flash",
|
||||
.parts = netspace_v2_flash_parts,
|
||||
.nr_parts = ARRAY_SIZE(netspace_v2_flash_parts),
|
||||
};
|
||||
|
||||
static struct spi_board_info __initdata netspace_v2_spi_slave_info[] = {
|
||||
{
|
||||
.modalias = "m25p80",
|
||||
.platform_data = &netspace_v2_flash,
|
||||
.irq = -1,
|
||||
.max_speed_hz = 20000000,
|
||||
.bus_num = 0,
|
||||
.chip_select = 0,
|
||||
},
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* Ethernet
|
||||
****************************************************************************/
|
||||
|
||||
static struct mv643xx_eth_platform_data netspace_v2_ge00_data = {
|
||||
.phy_addr = MV643XX_ETH_PHY_ADDR(8),
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* I2C devices
|
||||
****************************************************************************/
|
||||
|
||||
static struct at24_platform_data at24c04 = {
|
||||
.byte_len = SZ_4K / 8,
|
||||
.page_size = 16,
|
||||
};
|
||||
|
||||
/*
|
||||
* i2c addr | chip | description
|
||||
* 0x50 | HT24LC04 | eeprom (512B)
|
||||
*/
|
||||
|
||||
static struct i2c_board_info __initdata netspace_v2_i2c_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("24c04", 0x50),
|
||||
.platform_data = &at24c04,
|
||||
}
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* SATA
|
||||
****************************************************************************/
|
||||
|
||||
static struct mv_sata_platform_data netspace_v2_sata_data = {
|
||||
.n_ports = 2,
|
||||
};
|
||||
|
||||
#define NETSPACE_V2_GPIO_SATA0_POWER 16
|
||||
#define NETSPACE_V2_GPIO_SATA1_POWER 17
|
||||
|
||||
static void __init netspace_v2_sata_power_init(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = gpio_request(NETSPACE_V2_GPIO_SATA0_POWER, "SATA0 power");
|
||||
if (err == 0) {
|
||||
err = gpio_direction_output(NETSPACE_V2_GPIO_SATA0_POWER, 1);
|
||||
if (err)
|
||||
gpio_free(NETSPACE_V2_GPIO_SATA0_POWER);
|
||||
}
|
||||
if (err)
|
||||
pr_err("netspace_v2: failed to setup SATA0 power\n");
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* GPIO keys
|
||||
****************************************************************************/
|
||||
|
||||
#define NETSPACE_V2_PUSH_BUTTON 32
|
||||
|
||||
static struct gpio_keys_button netspace_v2_buttons[] = {
|
||||
[0] = {
|
||||
.code = KEY_POWER,
|
||||
.gpio = NETSPACE_V2_PUSH_BUTTON,
|
||||
.desc = "Power push button",
|
||||
.active_low = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_keys_platform_data netspace_v2_button_data = {
|
||||
.buttons = netspace_v2_buttons,
|
||||
.nbuttons = ARRAY_SIZE(netspace_v2_buttons),
|
||||
};
|
||||
|
||||
static struct platform_device netspace_v2_gpio_buttons = {
|
||||
.name = "gpio-keys",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &netspace_v2_button_data,
|
||||
},
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* GPIO LEDs
|
||||
****************************************************************************/
|
||||
|
||||
/*
|
||||
* The blue front LED is wired to a CPLD and can blink in relation with the
|
||||
* SATA activity.
|
||||
*
|
||||
* The following array detail the different LED registers and the combination
|
||||
* of their possible values:
|
||||
*
|
||||
* cmd_led | slow_led | /SATA active | LED state
|
||||
* | | |
|
||||
* 1 | 0 | x | off
|
||||
* - | 1 | x | on
|
||||
* 0 | 0 | 1 | on
|
||||
* 0 | 0 | 0 | blink (rate 300ms)
|
||||
*/
|
||||
|
||||
#define NETSPACE_V2_GPIO_RED_LED 12
|
||||
#define NETSPACE_V2_GPIO_BLUE_LED_SLOW 29
|
||||
#define NETSPACE_V2_GPIO_BLUE_LED_CMD 30
|
||||
|
||||
|
||||
static struct gpio_led netspace_v2_gpio_led_pins[] = {
|
||||
{
|
||||
.name = "ns_v2:red:fail",
|
||||
.gpio = NETSPACE_V2_GPIO_RED_LED,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data netspace_v2_gpio_leds_data = {
|
||||
.num_leds = ARRAY_SIZE(netspace_v2_gpio_led_pins),
|
||||
.leds = netspace_v2_gpio_led_pins,
|
||||
};
|
||||
|
||||
static struct platform_device netspace_v2_gpio_leds = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &netspace_v2_gpio_leds_data,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init netspace_v2_gpio_leds_init(void)
|
||||
{
|
||||
platform_device_register(&netspace_v2_gpio_leds);
|
||||
|
||||
/*
|
||||
* Configure the front blue LED to blink in relation with the SATA
|
||||
* activity.
|
||||
*/
|
||||
if (gpio_request(NETSPACE_V2_GPIO_BLUE_LED_SLOW,
|
||||
"SATA blue LED slow") != 0)
|
||||
return;
|
||||
if (gpio_direction_output(NETSPACE_V2_GPIO_BLUE_LED_SLOW, 0) != 0)
|
||||
goto err_free_1;
|
||||
if (gpio_request(NETSPACE_V2_GPIO_BLUE_LED_CMD,
|
||||
"SATA blue LED command") != 0)
|
||||
goto err_free_1;
|
||||
if (gpio_direction_output(NETSPACE_V2_GPIO_BLUE_LED_CMD, 0) != 0)
|
||||
goto err_free_2;
|
||||
|
||||
return;
|
||||
|
||||
err_free_2:
|
||||
gpio_free(NETSPACE_V2_GPIO_BLUE_LED_CMD);
|
||||
err_free_1:
|
||||
gpio_free(NETSPACE_V2_GPIO_BLUE_LED_SLOW);
|
||||
pr_err("netspace_v2: failed to configure SATA blue LED\n");
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Timer
|
||||
****************************************************************************/
|
||||
|
||||
static void netspace_v2_timer_init(void)
|
||||
{
|
||||
kirkwood_tclk = 166666667;
|
||||
orion_time_init(IRQ_KIRKWOOD_BRIDGE, kirkwood_tclk);
|
||||
}
|
||||
|
||||
struct sys_timer netspace_v2_timer = {
|
||||
.init = netspace_v2_timer_init,
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* General Setup
|
||||
****************************************************************************/
|
||||
|
||||
static unsigned int netspace_v2_mpp_config[] __initdata = {
|
||||
MPP0_SPI_SCn,
|
||||
MPP1_SPI_MOSI,
|
||||
MPP2_SPI_SCK,
|
||||
MPP3_SPI_MISO,
|
||||
MPP4_NF_IO6,
|
||||
MPP5_NF_IO7,
|
||||
MPP6_SYSRST_OUTn,
|
||||
MPP8_TW_SDA,
|
||||
MPP9_TW_SCK,
|
||||
MPP10_UART0_TXD,
|
||||
MPP11_UART0_RXD,
|
||||
MPP12_GPO, /* Red led */
|
||||
MPP14_GPIO, /* USB fuse */
|
||||
MPP16_GPIO, /* SATA 0 power */
|
||||
MPP18_NF_IO0,
|
||||
MPP19_NF_IO1,
|
||||
MPP20_SATA1_ACTn,
|
||||
MPP21_SATA0_ACTn,
|
||||
MPP24_GPIO, /* USB mode select */
|
||||
MPP25_GPIO, /* Fan rotation fail */
|
||||
MPP26_GPIO, /* USB device vbus */
|
||||
MPP28_GPIO, /* USB enable host vbus */
|
||||
MPP29_GPIO, /* Blue led (slow register) */
|
||||
MPP30_GPIO, /* Blue led (command register) */
|
||||
MPP31_GPIO, /* Board power off */
|
||||
MPP32_GPIO, /* Power button (0 = Released, 1 = Pushed) */
|
||||
0
|
||||
};
|
||||
|
||||
#define NETSPACE_V2_GPIO_POWER_OFF 31
|
||||
|
||||
static void netspace_v2_power_off(void)
|
||||
{
|
||||
gpio_set_value(NETSPACE_V2_GPIO_POWER_OFF, 1);
|
||||
}
|
||||
|
||||
static void __init netspace_v2_init(void)
|
||||
{
|
||||
/*
|
||||
* Basic setup. Needs to be called early.
|
||||
*/
|
||||
kirkwood_init();
|
||||
kirkwood_mpp_conf(netspace_v2_mpp_config);
|
||||
|
||||
netspace_v2_sata_power_init();
|
||||
|
||||
kirkwood_ehci_init();
|
||||
kirkwood_ge00_init(&netspace_v2_ge00_data);
|
||||
kirkwood_sata_init(&netspace_v2_sata_data);
|
||||
kirkwood_uart0_init();
|
||||
spi_register_board_info(netspace_v2_spi_slave_info,
|
||||
ARRAY_SIZE(netspace_v2_spi_slave_info));
|
||||
kirkwood_spi_init();
|
||||
kirkwood_i2c_init();
|
||||
i2c_register_board_info(0, netspace_v2_i2c_info,
|
||||
ARRAY_SIZE(netspace_v2_i2c_info));
|
||||
|
||||
netspace_v2_gpio_leds_init();
|
||||
platform_device_register(&netspace_v2_gpio_buttons);
|
||||
|
||||
if (gpio_request(NETSPACE_V2_GPIO_POWER_OFF, "power-off") == 0 &&
|
||||
gpio_direction_output(NETSPACE_V2_GPIO_POWER_OFF, 0) == 0)
|
||||
pm_power_off = netspace_v2_power_off;
|
||||
else
|
||||
pr_err("netspace_v2: failed to configure power-off GPIO\n");
|
||||
}
|
||||
|
||||
MACHINE_START(NETSPACE_V2, "LaCie Network Space v2")
|
||||
.phys_io = KIRKWOOD_REGS_PHYS_BASE,
|
||||
.io_pg_offst = ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc,
|
||||
.boot_params = 0x00000100,
|
||||
.init_machine = netspace_v2_init,
|
||||
.map_io = kirkwood_map_io,
|
||||
.init_irq = kirkwood_init_irq,
|
||||
.timer = &netspace_v2_timer,
|
||||
MACHINE_END
|
|
@ -18,6 +18,7 @@ config ARCH_OMAP2430
|
|||
config ARCH_OMAP34XX
|
||||
bool "OMAP34xx Based System"
|
||||
depends on ARCH_OMAP3
|
||||
select USB_ARCH_HAS_EHCI
|
||||
|
||||
config ARCH_OMAP3430
|
||||
bool "OMAP3430 support"
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include <linux/gpio.h>
|
||||
|
||||
#include <linux/i2c/at24.h>
|
||||
#include <linux/i2c/twl4030.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/i2c/twl4030.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/ads7846.h>
|
||||
#include <linux/i2c/twl4030.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/smsc911x.h>
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include <linux/spi/ads7846.h>
|
||||
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/i2c/twl4030.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/wl12xx.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c/twl4030.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <linux/input.h>
|
||||
#include <linux/input/matrix_keypad.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/i2c/twl4030.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
|
|
@ -640,12 +640,9 @@ void __init omap_serial_early_init(void)
|
|||
uart->num = i;
|
||||
p->private_data = uart;
|
||||
uart->p = p;
|
||||
list_add_tail(&uart->node, &uart_list);
|
||||
|
||||
if (cpu_is_omap44xx())
|
||||
p->irq += 32;
|
||||
|
||||
omap_uart_enable_clocks(uart);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -673,9 +670,13 @@ void __init omap_serial_init_port(int port)
|
|||
pdev = &uart->pdev;
|
||||
dev = &pdev->dev;
|
||||
|
||||
omap_uart_enable_clocks(uart);
|
||||
|
||||
omap_uart_reset(uart);
|
||||
omap_uart_idle_init(uart);
|
||||
|
||||
list_add_tail(&uart->node, &uart_list);
|
||||
|
||||
if (WARN_ON(platform_device_register(pdev)))
|
||||
return;
|
||||
|
||||
|
|
|
@ -110,6 +110,8 @@ config MACH_CM_X300
|
|||
bool "CompuLab CM-X300 modules"
|
||||
select PXA3xx
|
||||
select CPU_PXA300
|
||||
select CPU_PXA310
|
||||
select HAVE_PWM
|
||||
|
||||
config ARCH_GUMSTIX
|
||||
bool "Gumstix XScale 255 boards"
|
||||
|
@ -240,7 +242,6 @@ config MACH_COLIBRI300
|
|||
select PXA3xx
|
||||
select CPU_PXA300
|
||||
select CPU_PXA310
|
||||
select HAVE_PWM
|
||||
|
||||
config MACH_COLIBRI320
|
||||
bool "Toradex Colibri PXA320"
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/pxafb.h>
|
||||
#include <mach/mmc.h>
|
||||
|
@ -14,6 +13,7 @@
|
|||
#include <mach/pxa2xx_spi.h>
|
||||
#include <mach/camera.h>
|
||||
#include <mach/audio.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <plat/i2c.h>
|
||||
#include <plat/pxa3xx_nand.h>
|
||||
|
||||
|
|
|
@ -18,6 +18,8 @@ struct s3c2410_spi_info {
|
|||
unsigned int num_cs; /* total chipselects */
|
||||
int bus_num; /* bus number to use. */
|
||||
|
||||
unsigned int use_fiq:1; /* use fiq */
|
||||
|
||||
void (*gpio_setup)(struct s3c2410_spi_info *spi, int enable);
|
||||
void (*set_cs)(struct s3c2410_spi_info *spi, int cs, int pol);
|
||||
};
|
||||
|
|
|
@ -127,15 +127,16 @@ ENTRY(fa_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(kaddr)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure that the data held in the page kaddr is written back
|
||||
* to the page in question.
|
||||
*
|
||||
* - kaddr - kernel address (guaranteed to be page aligned)
|
||||
* - addr - kernel address
|
||||
* - size - size of region
|
||||
*/
|
||||
ENTRY(fa_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(fa_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -213,7 +214,7 @@ ENTRY(fa_cache_fns)
|
|||
.long fa_flush_user_cache_range
|
||||
.long fa_coherent_kern_range
|
||||
.long fa_coherent_user_range
|
||||
.long fa_flush_kern_dcache_page
|
||||
.long fa_flush_kern_dcache_area
|
||||
.long fa_dma_inv_range
|
||||
.long fa_dma_clean_range
|
||||
.long fa_dma_flush_range
|
||||
|
|
|
@ -28,69 +28,120 @@
|
|||
static void __iomem *l2x0_base;
|
||||
static DEFINE_SPINLOCK(l2x0_lock);
|
||||
|
||||
static inline void sync_writel(unsigned long val, unsigned long reg,
|
||||
unsigned long complete_mask)
|
||||
static inline void cache_wait(void __iomem *reg, unsigned long mask)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&l2x0_lock, flags);
|
||||
writel(val, l2x0_base + reg);
|
||||
/* wait for the operation to complete */
|
||||
while (readl(l2x0_base + reg) & complete_mask)
|
||||
while (readl(reg) & mask)
|
||||
;
|
||||
spin_unlock_irqrestore(&l2x0_lock, flags);
|
||||
}
|
||||
|
||||
static inline void cache_sync(void)
|
||||
{
|
||||
sync_writel(0, L2X0_CACHE_SYNC, 1);
|
||||
void __iomem *base = l2x0_base;
|
||||
writel(0, base + L2X0_CACHE_SYNC);
|
||||
cache_wait(base + L2X0_CACHE_SYNC, 1);
|
||||
}
|
||||
|
||||
static inline void l2x0_inv_all(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
/* invalidate all ways */
|
||||
sync_writel(0xff, L2X0_INV_WAY, 0xff);
|
||||
spin_lock_irqsave(&l2x0_lock, flags);
|
||||
writel(0xff, l2x0_base + L2X0_INV_WAY);
|
||||
cache_wait(l2x0_base + L2X0_INV_WAY, 0xff);
|
||||
cache_sync();
|
||||
spin_unlock_irqrestore(&l2x0_lock, flags);
|
||||
}
|
||||
|
||||
static void l2x0_inv_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
unsigned long addr;
|
||||
void __iomem *base = l2x0_base;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&l2x0_lock, flags);
|
||||
if (start & (CACHE_LINE_SIZE - 1)) {
|
||||
start &= ~(CACHE_LINE_SIZE - 1);
|
||||
sync_writel(start, L2X0_CLEAN_INV_LINE_PA, 1);
|
||||
cache_wait(base + L2X0_CLEAN_INV_LINE_PA, 1);
|
||||
writel(start, base + L2X0_CLEAN_INV_LINE_PA);
|
||||
start += CACHE_LINE_SIZE;
|
||||
}
|
||||
|
||||
if (end & (CACHE_LINE_SIZE - 1)) {
|
||||
end &= ~(CACHE_LINE_SIZE - 1);
|
||||
sync_writel(end, L2X0_CLEAN_INV_LINE_PA, 1);
|
||||
cache_wait(base + L2X0_CLEAN_INV_LINE_PA, 1);
|
||||
writel(end, base + L2X0_CLEAN_INV_LINE_PA);
|
||||
}
|
||||
|
||||
for (addr = start; addr < end; addr += CACHE_LINE_SIZE)
|
||||
sync_writel(addr, L2X0_INV_LINE_PA, 1);
|
||||
while (start < end) {
|
||||
unsigned long blk_end = start + min(end - start, 4096UL);
|
||||
|
||||
while (start < blk_end) {
|
||||
cache_wait(base + L2X0_INV_LINE_PA, 1);
|
||||
writel(start, base + L2X0_INV_LINE_PA);
|
||||
start += CACHE_LINE_SIZE;
|
||||
}
|
||||
|
||||
if (blk_end < end) {
|
||||
spin_unlock_irqrestore(&l2x0_lock, flags);
|
||||
spin_lock_irqsave(&l2x0_lock, flags);
|
||||
}
|
||||
}
|
||||
cache_wait(base + L2X0_INV_LINE_PA, 1);
|
||||
cache_sync();
|
||||
spin_unlock_irqrestore(&l2x0_lock, flags);
|
||||
}
|
||||
|
||||
static void l2x0_clean_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
unsigned long addr;
|
||||
void __iomem *base = l2x0_base;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&l2x0_lock, flags);
|
||||
start &= ~(CACHE_LINE_SIZE - 1);
|
||||
for (addr = start; addr < end; addr += CACHE_LINE_SIZE)
|
||||
sync_writel(addr, L2X0_CLEAN_LINE_PA, 1);
|
||||
while (start < end) {
|
||||
unsigned long blk_end = start + min(end - start, 4096UL);
|
||||
|
||||
while (start < blk_end) {
|
||||
cache_wait(base + L2X0_CLEAN_LINE_PA, 1);
|
||||
writel(start, base + L2X0_CLEAN_LINE_PA);
|
||||
start += CACHE_LINE_SIZE;
|
||||
}
|
||||
|
||||
if (blk_end < end) {
|
||||
spin_unlock_irqrestore(&l2x0_lock, flags);
|
||||
spin_lock_irqsave(&l2x0_lock, flags);
|
||||
}
|
||||
}
|
||||
cache_wait(base + L2X0_CLEAN_LINE_PA, 1);
|
||||
cache_sync();
|
||||
spin_unlock_irqrestore(&l2x0_lock, flags);
|
||||
}
|
||||
|
||||
static void l2x0_flush_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
unsigned long addr;
|
||||
void __iomem *base = l2x0_base;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&l2x0_lock, flags);
|
||||
start &= ~(CACHE_LINE_SIZE - 1);
|
||||
for (addr = start; addr < end; addr += CACHE_LINE_SIZE)
|
||||
sync_writel(addr, L2X0_CLEAN_INV_LINE_PA, 1);
|
||||
while (start < end) {
|
||||
unsigned long blk_end = start + min(end - start, 4096UL);
|
||||
|
||||
while (start < blk_end) {
|
||||
cache_wait(base + L2X0_CLEAN_INV_LINE_PA, 1);
|
||||
writel(start, base + L2X0_CLEAN_INV_LINE_PA);
|
||||
start += CACHE_LINE_SIZE;
|
||||
}
|
||||
|
||||
if (blk_end < end) {
|
||||
spin_unlock_irqrestore(&l2x0_lock, flags);
|
||||
spin_lock_irqsave(&l2x0_lock, flags);
|
||||
}
|
||||
}
|
||||
cache_wait(base + L2X0_CLEAN_INV_LINE_PA, 1);
|
||||
cache_sync();
|
||||
spin_unlock_irqrestore(&l2x0_lock, flags);
|
||||
}
|
||||
|
||||
void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask)
|
||||
|
|
|
@ -72,14 +72,15 @@ ENTRY(v3_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *page, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(v3_flush_kern_dcache_page)
|
||||
ENTRY(v3_flush_kern_dcache_area)
|
||||
/* FALLTHROUGH */
|
||||
|
||||
/*
|
||||
|
@ -129,7 +130,7 @@ ENTRY(v3_cache_fns)
|
|||
.long v3_flush_user_cache_range
|
||||
.long v3_coherent_kern_range
|
||||
.long v3_coherent_user_range
|
||||
.long v3_flush_kern_dcache_page
|
||||
.long v3_flush_kern_dcache_area
|
||||
.long v3_dma_inv_range
|
||||
.long v3_dma_clean_range
|
||||
.long v3_dma_flush_range
|
||||
|
|
|
@ -82,14 +82,15 @@ ENTRY(v4_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(v4_flush_kern_dcache_page)
|
||||
ENTRY(v4_flush_kern_dcache_area)
|
||||
/* FALLTHROUGH */
|
||||
|
||||
/*
|
||||
|
@ -141,7 +142,7 @@ ENTRY(v4_cache_fns)
|
|||
.long v4_flush_user_cache_range
|
||||
.long v4_coherent_kern_range
|
||||
.long v4_coherent_user_range
|
||||
.long v4_flush_kern_dcache_page
|
||||
.long v4_flush_kern_dcache_area
|
||||
.long v4_dma_inv_range
|
||||
.long v4_dma_clean_range
|
||||
.long v4_dma_flush_range
|
||||
|
|
|
@ -114,15 +114,16 @@ ENTRY(v4wb_flush_user_cache_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(v4wb_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(v4wb_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
/* fall through */
|
||||
|
||||
/*
|
||||
|
@ -224,7 +225,7 @@ ENTRY(v4wb_cache_fns)
|
|||
.long v4wb_flush_user_cache_range
|
||||
.long v4wb_coherent_kern_range
|
||||
.long v4wb_coherent_user_range
|
||||
.long v4wb_flush_kern_dcache_page
|
||||
.long v4wb_flush_kern_dcache_area
|
||||
.long v4wb_dma_inv_range
|
||||
.long v4wb_dma_clean_range
|
||||
.long v4wb_dma_flush_range
|
||||
|
|
|
@ -117,17 +117,18 @@ ENTRY(v4wt_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(v4wt_flush_kern_dcache_page)
|
||||
ENTRY(v4wt_flush_kern_dcache_area)
|
||||
mov r2, #0
|
||||
mcr p15, 0, r2, c7, c5, 0 @ invalidate I cache
|
||||
add r1, r0, #PAGE_SZ
|
||||
add r1, r0, r1
|
||||
/* fallthrough */
|
||||
|
||||
/*
|
||||
|
@ -180,7 +181,7 @@ ENTRY(v4wt_cache_fns)
|
|||
.long v4wt_flush_user_cache_range
|
||||
.long v4wt_coherent_kern_range
|
||||
.long v4wt_coherent_user_range
|
||||
.long v4wt_flush_kern_dcache_page
|
||||
.long v4wt_flush_kern_dcache_area
|
||||
.long v4wt_dma_inv_range
|
||||
.long v4wt_dma_clean_range
|
||||
.long v4wt_dma_flush_range
|
||||
|
|
|
@ -159,15 +159,16 @@ ENDPROC(v6_coherent_user_range)
|
|||
ENDPROC(v6_coherent_kern_range)
|
||||
|
||||
/*
|
||||
* v6_flush_kern_dcache_page(kaddr)
|
||||
* v6_flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure that the data held in the page kaddr is written back
|
||||
* to the page in question.
|
||||
*
|
||||
* - kaddr - kernel address (guaranteed to be page aligned)
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(v6_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(v6_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1:
|
||||
#ifdef HARVARD_CACHE
|
||||
mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line
|
||||
|
@ -271,7 +272,7 @@ ENTRY(v6_cache_fns)
|
|||
.long v6_flush_user_cache_range
|
||||
.long v6_coherent_kern_range
|
||||
.long v6_coherent_user_range
|
||||
.long v6_flush_kern_dcache_page
|
||||
.long v6_flush_kern_dcache_area
|
||||
.long v6_dma_inv_range
|
||||
.long v6_dma_clean_range
|
||||
.long v6_dma_flush_range
|
||||
|
|
|
@ -186,16 +186,17 @@ ENDPROC(v7_coherent_kern_range)
|
|||
ENDPROC(v7_coherent_user_range)
|
||||
|
||||
/*
|
||||
* v7_flush_kern_dcache_page(kaddr)
|
||||
* v7_flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure that the data held in the page kaddr is written back
|
||||
* to the page in question.
|
||||
*
|
||||
* - kaddr - kernel address (guaranteed to be page aligned)
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(v7_flush_kern_dcache_page)
|
||||
ENTRY(v7_flush_kern_dcache_area)
|
||||
dcache_line_size r2, r3
|
||||
add r1, r0, #PAGE_SZ
|
||||
add r1, r0, r1
|
||||
1:
|
||||
mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line / unified line
|
||||
add r0, r0, r2
|
||||
|
@ -203,7 +204,7 @@ ENTRY(v7_flush_kern_dcache_page)
|
|||
blo 1b
|
||||
dsb
|
||||
mov pc, lr
|
||||
ENDPROC(v7_flush_kern_dcache_page)
|
||||
ENDPROC(v7_flush_kern_dcache_area)
|
||||
|
||||
/*
|
||||
* v7_dma_inv_range(start,end)
|
||||
|
@ -279,7 +280,7 @@ ENTRY(v7_cache_fns)
|
|||
.long v7_flush_user_cache_range
|
||||
.long v7_coherent_kern_range
|
||||
.long v7_coherent_user_range
|
||||
.long v7_flush_kern_dcache_page
|
||||
.long v7_flush_kern_dcache_area
|
||||
.long v7_dma_inv_range
|
||||
.long v7_dma_clean_range
|
||||
.long v7_dma_flush_range
|
||||
|
|
|
@ -131,7 +131,7 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page)
|
|||
*/
|
||||
if (addr)
|
||||
#endif
|
||||
__cpuc_flush_dcache_page(addr);
|
||||
__cpuc_flush_dcache_area(addr, PAGE_SIZE);
|
||||
|
||||
/*
|
||||
* If this is a page cache page, and we have an aliasing VIPT cache,
|
||||
|
@ -258,5 +258,5 @@ void __flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned l
|
|||
* in this mapping of the page. FIXME: this is overkill
|
||||
* since we actually ask for a write-back and invalidate.
|
||||
*/
|
||||
__cpuc_flush_dcache_page(page_address(page));
|
||||
__cpuc_flush_dcache_area(page_address(page), PAGE_SIZE);
|
||||
}
|
||||
|
|
|
@ -79,7 +79,7 @@ void kunmap_atomic(void *kvaddr, enum km_type type)
|
|||
unsigned int idx = type + KM_TYPE_NR * smp_processor_id();
|
||||
|
||||
if (kvaddr >= (void *)FIXADDR_START) {
|
||||
__cpuc_flush_dcache_page((void *)vaddr);
|
||||
__cpuc_flush_dcache_area((void *)vaddr, PAGE_SIZE);
|
||||
#ifdef CONFIG_DEBUG_HIGHMEM
|
||||
BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx));
|
||||
set_pte_ext(TOP_PTE(vaddr), __pte(0), 0);
|
||||
|
|
|
@ -61,7 +61,7 @@ void setup_mm_for_reboot(char mode)
|
|||
|
||||
void flush_dcache_page(struct page *page)
|
||||
{
|
||||
__cpuc_flush_dcache_page(page_address(page));
|
||||
__cpuc_flush_dcache_area(page_address(page), PAGE_SIZE);
|
||||
}
|
||||
EXPORT_SYMBOL(flush_dcache_page);
|
||||
|
||||
|
|
|
@ -231,17 +231,18 @@ ENTRY(arm1020_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - page - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(arm1020_flush_kern_dcache_page)
|
||||
ENTRY(arm1020_flush_kern_dcache_area)
|
||||
mov ip, #0
|
||||
#ifndef CONFIG_CPU_DCACHE_DISABLE
|
||||
add r1, r0, #PAGE_SZ
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
mcr p15, 0, ip, c7, c10, 4 @ drain WB
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
|
@ -335,7 +336,7 @@ ENTRY(arm1020_cache_fns)
|
|||
.long arm1020_flush_user_cache_range
|
||||
.long arm1020_coherent_kern_range
|
||||
.long arm1020_coherent_user_range
|
||||
.long arm1020_flush_kern_dcache_page
|
||||
.long arm1020_flush_kern_dcache_area
|
||||
.long arm1020_dma_inv_range
|
||||
.long arm1020_dma_clean_range
|
||||
.long arm1020_dma_flush_range
|
||||
|
|
|
@ -225,17 +225,18 @@ ENTRY(arm1020e_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - page - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(arm1020e_flush_kern_dcache_page)
|
||||
ENTRY(arm1020e_flush_kern_dcache_area)
|
||||
mov ip, #0
|
||||
#ifndef CONFIG_CPU_DCACHE_DISABLE
|
||||
add r1, r0, #PAGE_SZ
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -321,7 +322,7 @@ ENTRY(arm1020e_cache_fns)
|
|||
.long arm1020e_flush_user_cache_range
|
||||
.long arm1020e_coherent_kern_range
|
||||
.long arm1020e_coherent_user_range
|
||||
.long arm1020e_flush_kern_dcache_page
|
||||
.long arm1020e_flush_kern_dcache_area
|
||||
.long arm1020e_dma_inv_range
|
||||
.long arm1020e_dma_clean_range
|
||||
.long arm1020e_dma_flush_range
|
||||
|
|
|
@ -214,17 +214,18 @@ ENTRY(arm1022_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - page - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(arm1022_flush_kern_dcache_page)
|
||||
ENTRY(arm1022_flush_kern_dcache_area)
|
||||
mov ip, #0
|
||||
#ifndef CONFIG_CPU_DCACHE_DISABLE
|
||||
add r1, r0, #PAGE_SZ
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -310,7 +311,7 @@ ENTRY(arm1022_cache_fns)
|
|||
.long arm1022_flush_user_cache_range
|
||||
.long arm1022_coherent_kern_range
|
||||
.long arm1022_coherent_user_range
|
||||
.long arm1022_flush_kern_dcache_page
|
||||
.long arm1022_flush_kern_dcache_area
|
||||
.long arm1022_dma_inv_range
|
||||
.long arm1022_dma_clean_range
|
||||
.long arm1022_dma_flush_range
|
||||
|
|
|
@ -208,17 +208,18 @@ ENTRY(arm1026_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - page - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(arm1026_flush_kern_dcache_page)
|
||||
ENTRY(arm1026_flush_kern_dcache_area)
|
||||
mov ip, #0
|
||||
#ifndef CONFIG_CPU_DCACHE_DISABLE
|
||||
add r1, r0, #PAGE_SZ
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -304,7 +305,7 @@ ENTRY(arm1026_cache_fns)
|
|||
.long arm1026_flush_user_cache_range
|
||||
.long arm1026_coherent_kern_range
|
||||
.long arm1026_coherent_user_range
|
||||
.long arm1026_flush_kern_dcache_page
|
||||
.long arm1026_flush_kern_dcache_area
|
||||
.long arm1026_dma_inv_range
|
||||
.long arm1026_dma_clean_range
|
||||
.long arm1026_dma_flush_range
|
||||
|
|
|
@ -207,15 +207,16 @@ ENTRY(arm920_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(arm920_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(arm920_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -293,7 +294,7 @@ ENTRY(arm920_cache_fns)
|
|||
.long arm920_flush_user_cache_range
|
||||
.long arm920_coherent_kern_range
|
||||
.long arm920_coherent_user_range
|
||||
.long arm920_flush_kern_dcache_page
|
||||
.long arm920_flush_kern_dcache_area
|
||||
.long arm920_dma_inv_range
|
||||
.long arm920_dma_clean_range
|
||||
.long arm920_dma_flush_range
|
||||
|
|
|
@ -209,15 +209,16 @@ ENTRY(arm922_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(arm922_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(arm922_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -295,7 +296,7 @@ ENTRY(arm922_cache_fns)
|
|||
.long arm922_flush_user_cache_range
|
||||
.long arm922_coherent_kern_range
|
||||
.long arm922_coherent_user_range
|
||||
.long arm922_flush_kern_dcache_page
|
||||
.long arm922_flush_kern_dcache_area
|
||||
.long arm922_dma_inv_range
|
||||
.long arm922_dma_clean_range
|
||||
.long arm922_dma_flush_range
|
||||
|
|
|
@ -251,15 +251,16 @@ ENTRY(arm925_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(arm925_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(arm925_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -346,7 +347,7 @@ ENTRY(arm925_cache_fns)
|
|||
.long arm925_flush_user_cache_range
|
||||
.long arm925_coherent_kern_range
|
||||
.long arm925_coherent_user_range
|
||||
.long arm925_flush_kern_dcache_page
|
||||
.long arm925_flush_kern_dcache_area
|
||||
.long arm925_dma_inv_range
|
||||
.long arm925_dma_clean_range
|
||||
.long arm925_dma_flush_range
|
||||
|
|
|
@ -214,15 +214,16 @@ ENTRY(arm926_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(arm926_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(arm926_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -309,7 +310,7 @@ ENTRY(arm926_cache_fns)
|
|||
.long arm926_flush_user_cache_range
|
||||
.long arm926_coherent_kern_range
|
||||
.long arm926_coherent_user_range
|
||||
.long arm926_flush_kern_dcache_page
|
||||
.long arm926_flush_kern_dcache_area
|
||||
.long arm926_dma_inv_range
|
||||
.long arm926_dma_clean_range
|
||||
.long arm926_dma_flush_range
|
||||
|
|
|
@ -141,14 +141,15 @@ ENTRY(arm940_coherent_user_range)
|
|||
/* FALLTHROUGH */
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(arm940_flush_kern_dcache_page)
|
||||
ENTRY(arm940_flush_kern_dcache_area)
|
||||
mov ip, #0
|
||||
mov r1, #(CACHE_DSEGMENTS - 1) << 4 @ 4 segments
|
||||
1: orr r3, r1, #(CACHE_DENTRIES - 1) << 26 @ 64 entries
|
||||
|
@ -238,7 +239,7 @@ ENTRY(arm940_cache_fns)
|
|||
.long arm940_flush_user_cache_range
|
||||
.long arm940_coherent_kern_range
|
||||
.long arm940_coherent_user_range
|
||||
.long arm940_flush_kern_dcache_page
|
||||
.long arm940_flush_kern_dcache_area
|
||||
.long arm940_dma_inv_range
|
||||
.long arm940_dma_clean_range
|
||||
.long arm940_dma_flush_range
|
||||
|
|
|
@ -183,16 +183,17 @@ ENTRY(arm946_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
* (same as arm926)
|
||||
*/
|
||||
ENTRY(arm946_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(arm946_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -280,7 +281,7 @@ ENTRY(arm946_cache_fns)
|
|||
.long arm946_flush_user_cache_range
|
||||
.long arm946_coherent_kern_range
|
||||
.long arm946_coherent_user_range
|
||||
.long arm946_flush_kern_dcache_page
|
||||
.long arm946_flush_kern_dcache_area
|
||||
.long arm946_dma_inv_range
|
||||
.long arm946_dma_clean_range
|
||||
.long arm946_dma_flush_range
|
||||
|
|
|
@ -226,16 +226,17 @@ ENTRY(feroceon_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
.align 5
|
||||
ENTRY(feroceon_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(feroceon_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -246,7 +247,7 @@ ENTRY(feroceon_flush_kern_dcache_page)
|
|||
mov pc, lr
|
||||
|
||||
.align 5
|
||||
ENTRY(feroceon_range_flush_kern_dcache_page)
|
||||
ENTRY(feroceon_range_flush_kern_dcache_area)
|
||||
mrs r2, cpsr
|
||||
add r1, r0, #PAGE_SZ - CACHE_DLINESIZE @ top addr is inclusive
|
||||
orr r3, r2, #PSR_I_BIT
|
||||
|
@ -372,7 +373,7 @@ ENTRY(feroceon_cache_fns)
|
|||
.long feroceon_flush_user_cache_range
|
||||
.long feroceon_coherent_kern_range
|
||||
.long feroceon_coherent_user_range
|
||||
.long feroceon_flush_kern_dcache_page
|
||||
.long feroceon_flush_kern_dcache_area
|
||||
.long feroceon_dma_inv_range
|
||||
.long feroceon_dma_clean_range
|
||||
.long feroceon_dma_flush_range
|
||||
|
@ -383,7 +384,7 @@ ENTRY(feroceon_range_cache_fns)
|
|||
.long feroceon_flush_user_cache_range
|
||||
.long feroceon_coherent_kern_range
|
||||
.long feroceon_coherent_user_range
|
||||
.long feroceon_range_flush_kern_dcache_page
|
||||
.long feroceon_range_flush_kern_dcache_area
|
||||
.long feroceon_range_dma_inv_range
|
||||
.long feroceon_range_dma_clean_range
|
||||
.long feroceon_range_dma_flush_range
|
||||
|
|
|
@ -186,15 +186,16 @@ ENTRY(mohawk_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(mohawk_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(mohawk_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry
|
||||
add r0, r0, #CACHE_DLINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -273,7 +274,7 @@ ENTRY(mohawk_cache_fns)
|
|||
.long mohawk_flush_user_cache_range
|
||||
.long mohawk_coherent_kern_range
|
||||
.long mohawk_coherent_user_range
|
||||
.long mohawk_flush_kern_dcache_page
|
||||
.long mohawk_flush_kern_dcache_area
|
||||
.long mohawk_dma_inv_range
|
||||
.long mohawk_dma_clean_range
|
||||
.long mohawk_dma_flush_range
|
||||
|
|
|
@ -27,8 +27,7 @@ EXPORT_SYMBOL(__cpuc_flush_kern_all);
|
|||
EXPORT_SYMBOL(__cpuc_flush_user_all);
|
||||
EXPORT_SYMBOL(__cpuc_flush_user_range);
|
||||
EXPORT_SYMBOL(__cpuc_coherent_kern_range);
|
||||
EXPORT_SYMBOL(__cpuc_flush_dcache_page);
|
||||
EXPORT_SYMBOL(dmac_inv_range); /* because of flush_ioremap_region() */
|
||||
EXPORT_SYMBOL(__cpuc_flush_dcache_area);
|
||||
#else
|
||||
EXPORT_SYMBOL(cpu_cache);
|
||||
#endif
|
||||
|
|
|
@ -254,10 +254,9 @@ __pj4_v6_proc_info:
|
|||
.long 0x560f5810
|
||||
.long 0xff0ffff0
|
||||
.long PMD_TYPE_SECT | \
|
||||
PMD_SECT_BUFFERABLE | \
|
||||
PMD_SECT_CACHEABLE | \
|
||||
PMD_SECT_AP_WRITE | \
|
||||
PMD_SECT_AP_READ
|
||||
PMD_SECT_AP_READ | \
|
||||
PMD_FLAGS
|
||||
.long PMD_TYPE_SECT | \
|
||||
PMD_SECT_XN | \
|
||||
PMD_SECT_AP_WRITE | \
|
||||
|
|
|
@ -226,15 +226,16 @@ ENTRY(xsc3_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache.
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(xsc3_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(xsc3_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c14, 1 @ clean/invalidate L1 D line
|
||||
add r0, r0, #CACHELINESIZE
|
||||
cmp r0, r1
|
||||
|
@ -309,7 +310,7 @@ ENTRY(xsc3_cache_fns)
|
|||
.long xsc3_flush_user_cache_range
|
||||
.long xsc3_coherent_kern_range
|
||||
.long xsc3_coherent_user_range
|
||||
.long xsc3_flush_kern_dcache_page
|
||||
.long xsc3_flush_kern_dcache_area
|
||||
.long xsc3_dma_inv_range
|
||||
.long xsc3_dma_clean_range
|
||||
.long xsc3_dma_flush_range
|
||||
|
|
|
@ -284,15 +284,16 @@ ENTRY(xscale_coherent_user_range)
|
|||
mov pc, lr
|
||||
|
||||
/*
|
||||
* flush_kern_dcache_page(void *page)
|
||||
* flush_kern_dcache_area(void *addr, size_t size)
|
||||
*
|
||||
* Ensure no D cache aliasing occurs, either with itself or
|
||||
* the I cache
|
||||
*
|
||||
* - addr - page aligned address
|
||||
* - addr - kernel address
|
||||
* - size - region size
|
||||
*/
|
||||
ENTRY(xscale_flush_kern_dcache_page)
|
||||
add r1, r0, #PAGE_SZ
|
||||
ENTRY(xscale_flush_kern_dcache_area)
|
||||
add r1, r0, r1
|
||||
1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry
|
||||
mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry
|
||||
add r0, r0, #CACHELINESIZE
|
||||
|
@ -368,7 +369,7 @@ ENTRY(xscale_cache_fns)
|
|||
.long xscale_flush_user_cache_range
|
||||
.long xscale_coherent_kern_range
|
||||
.long xscale_coherent_user_range
|
||||
.long xscale_flush_kern_dcache_page
|
||||
.long xscale_flush_kern_dcache_area
|
||||
.long xscale_dma_inv_range
|
||||
.long xscale_dma_clean_range
|
||||
.long xscale_dma_flush_range
|
||||
|
@ -392,7 +393,7 @@ ENTRY(xscale_80200_A0_A1_cache_fns)
|
|||
.long xscale_flush_user_cache_range
|
||||
.long xscale_coherent_kern_range
|
||||
.long xscale_coherent_user_range
|
||||
.long xscale_flush_kern_dcache_page
|
||||
.long xscale_flush_kern_dcache_area
|
||||
.long xscale_dma_flush_range
|
||||
.long xscale_dma_clean_range
|
||||
.long xscale_dma_flush_range
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# Copyright (C) 2001 Russell King
|
||||
#
|
||||
|
||||
include/asm-arm/mach-types.h: $(src)/gen-mach-types $(src)/mach-types
|
||||
include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types
|
||||
@echo ' Generating $@'
|
||||
@mkdir -p $(dir $@)
|
||||
$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/awk
|
||||
#
|
||||
# Awk script to generate include/asm-arm/mach-types.h
|
||||
# Awk script to generate include/generated/mach-types.h
|
||||
#
|
||||
BEGIN { nr = 0 }
|
||||
/^#/ { next }
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#
|
||||
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
||||
#
|
||||
# Last update: Wed Nov 25 22:14:58 2009
|
||||
# Last update: Wed Dec 16 20:06:34 2009
|
||||
#
|
||||
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
||||
#
|
||||
|
@ -1776,6 +1776,7 @@ cybook3 MACH_CYBOOK3 CYBOOK3 1784
|
|||
wdg002 MACH_WDG002 WDG002 1785
|
||||
sg560adsl MACH_SG560ADSL SG560ADSL 1786
|
||||
nextio_n2800_ica MACH_NEXTIO_N2800_ICA NEXTIO_N2800_ICA 1787
|
||||
dove_db MACH_DOVE_DB DOVE_DB 1788
|
||||
marvell_newdb MACH_MARVELL_NEWDB MARVELL_NEWDB 1789
|
||||
vandihud MACH_VANDIHUD VANDIHUD 1790
|
||||
magx_e8 MACH_MAGX_E8 MAGX_E8 1791
|
||||
|
@ -2536,3 +2537,44 @@ c3ax03 MACH_C3AX03 C3AX03 2549
|
|||
mxt_td60 MACH_MXT_TD60 MXT_TD60 2550
|
||||
esyx MACH_ESYX ESYX 2551
|
||||
bulldog MACH_BULLDOG BULLDOG 2553
|
||||
derell_me2000 MACH_DERELL_ME2000 DERELL_ME2000 2554
|
||||
bcmring_base MACH_BCMRING_BASE BCMRING_BASE 2555
|
||||
bcmring_evm MACH_BCMRING_EVM BCMRING_EVM 2556
|
||||
bcmring_evm_jazz MACH_BCMRING_EVM_JAZZ BCMRING_EVM_JAZZ 2557
|
||||
bcmring_sp MACH_BCMRING_SP BCMRING_SP 2558
|
||||
bcmring_sv MACH_BCMRING_SV BCMRING_SV 2559
|
||||
bcmring_sv_jazz MACH_BCMRING_SV_JAZZ BCMRING_SV_JAZZ 2560
|
||||
bcmring_tablet MACH_BCMRING_TABLET BCMRING_TABLET 2561
|
||||
bcmring_vp MACH_BCMRING_VP BCMRING_VP 2562
|
||||
bcmring_evm_seikor MACH_BCMRING_EVM_SEIKOR BCMRING_EVM_SEIKOR 2563
|
||||
bcmring_sp_wqvga MACH_BCMRING_SP_WQVGA BCMRING_SP_WQVGA 2564
|
||||
bcmring_custom MACH_BCMRING_CUSTOM BCMRING_CUSTOM 2565
|
||||
acer_s200 MACH_ACER_S200 ACER_S200 2566
|
||||
bt270 MACH_BT270 BT270 2567
|
||||
iseo MACH_ISEO ISEO 2568
|
||||
cezanne MACH_CEZANNE CEZANNE 2569
|
||||
lucca MACH_LUCCA LUCCA 2570
|
||||
supersmart MACH_SUPERSMART SUPERSMART 2571
|
||||
magnolia2 MACH_MAGNOLIA2 MAGNOLIA2 2573
|
||||
emxx MACH_EMXX EMXX 2574
|
||||
outlaw MACH_OUTLAW OUTLAW 2575
|
||||
riot_bei2 MACH_RIOT_BEI2 RIOT_BEI2 2576
|
||||
riot_vox MACH_RIOT_VOX RIOT_VOX 2577
|
||||
riot_x37 MACH_RIOT_X37 RIOT_X37 2578
|
||||
mega25mx MACH_MEGA25MX MEGA25MX 2579
|
||||
benzina2 MACH_BENZINA2 BENZINA2 2580
|
||||
ignite MACH_IGNITE IGNITE 2581
|
||||
foggia MACH_FOGGIA FOGGIA 2582
|
||||
arezzo MACH_AREZZO AREZZO 2583
|
||||
leica_skywalker MACH_LEICA_SKYWALKER LEICA_SKYWALKER 2584
|
||||
jacinto2_jamr MACH_JACINTO2_JAMR JACINTO2_JAMR 2585
|
||||
gts_nova MACH_GTS_NOVA GTS_NOVA 2586
|
||||
p3600 MACH_P3600 P3600 2587
|
||||
dlt2 MACH_DLT2 DLT2 2588
|
||||
df3120 MACH_DF3120 DF3120 2589
|
||||
ecucore_9g20 MACH_ECUCORE_9G20 ECUCORE_9G20 2590
|
||||
nautel_lpc3240 MACH_NAUTEL_LPC3240 NAUTEL_LPC3240 2591
|
||||
glacier MACH_GLACIER GLACIER 2592
|
||||
phrazer_bulldog MACH_PHRAZER_BULLDOG PHRAZER_BULLDOG 2593
|
||||
omap3_bulldog MACH_OMAP3_BULLDOG OMAP3_BULLDOG 2594
|
||||
pca101 MACH_PCA101 PCA101 2595
|
||||
|
|
1
arch/avr32/include/asm/asm-offsets.h
Normal file
1
arch/avr32/include/asm/asm-offsets.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
1
arch/blackfin/include/asm/asm-offsets.h
Normal file
1
arch/blackfin/include/asm/asm-offsets.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
|
@ -10,7 +10,6 @@
|
|||
* The macros found in mmu_defs_asm.h uses the ## concatenation operator, so
|
||||
* -traditional must not be used when assembling this file.
|
||||
*/
|
||||
#include <linux/autoconf.h>
|
||||
#include <arch/memmap.h>
|
||||
#include <hwregs/reg_rdwr.h>
|
||||
#include <hwregs/intr_vect.h>
|
||||
|
|
1
arch/cris/include/asm/asm-offsets.h
Normal file
1
arch/cris/include/asm/asm-offsets.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
|
@ -1,6 +1,5 @@
|
|||
#include <linux/sched.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <linux/autoconf.h>
|
||||
|
||||
/*
|
||||
* Generate definitions needed by assembly language modules.
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
* the kernel has booted.
|
||||
*/
|
||||
|
||||
#include <linux/autoconf.h>
|
||||
#include <asm-generic/vmlinux.lds.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
|
|
1
arch/frv/include/asm/asm-offsets.h
Normal file
1
arch/frv/include/asm/asm-offsets.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
|
@ -10,7 +10,7 @@
|
|||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/utsrelease.h>
|
||||
#include <generated/utsrelease.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/delay.h>
|
||||
|
|
1
arch/h8300/include/asm/asm-offsets.h
Normal file
1
arch/h8300/include/asm/asm-offsets.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
|
@ -103,4 +103,4 @@ archprepare: make_nr_irqs_h FORCE
|
|||
PHONY += make_nr_irqs_h FORCE
|
||||
|
||||
make_nr_irqs_h: FORCE
|
||||
$(Q)$(MAKE) $(build)=arch/ia64/kernel include/asm-ia64/nr-irqs.h
|
||||
$(Q)$(MAKE) $(build)=arch/ia64/kernel include/generated/nr-irqs.h
|
||||
|
|
1
arch/ia64/include/asm/asm-offsets.h
Normal file
1
arch/ia64/include/asm/asm-offsets.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <asm-ia64/nr-irqs.h>
|
||||
#include <generated/nr-irqs.h>
|
||||
|
||||
static __inline__ int
|
||||
irq_canonicalize (int irq)
|
||||
|
|
|
@ -81,17 +81,14 @@ define cmd_nr_irqs
|
|||
endef
|
||||
|
||||
# We use internal kbuild rules to avoid the "is up to date" message from make
|
||||
arch/$(SRCARCH)/kernel/nr-irqs.s: $(srctree)/arch/$(SRCARCH)/kernel/nr-irqs.c \
|
||||
$(wildcard $(srctree)/include/asm-ia64/*/irq.h)
|
||||
arch/$(SRCARCH)/kernel/nr-irqs.s: arch/$(SRCARCH)/kernel/nr-irqs.c
|
||||
$(Q)mkdir -p $(dir $@)
|
||||
$(call if_changed_dep,cc_s_c)
|
||||
|
||||
include/asm-ia64/nr-irqs.h: arch/$(SRCARCH)/kernel/nr-irqs.s
|
||||
include/generated/nr-irqs.h: arch/$(SRCARCH)/kernel/nr-irqs.s
|
||||
$(Q)mkdir -p $(dir $@)
|
||||
$(call cmd,nr_irqs)
|
||||
|
||||
clean-files += $(objtree)/include/asm-ia64/nr-irqs.h
|
||||
|
||||
#
|
||||
# native ivt.S, entry.S and fsys.S
|
||||
#
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/autoconf.h>
|
||||
#include <linux/kvm_host.h>
|
||||
#include <linux/kbuild.h>
|
||||
|
||||
|
|
1
arch/m68k/include/asm/asm-offsets.h
Normal file
1
arch/m68k/include/asm/asm-offsets.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
|
@ -196,7 +196,7 @@
|
|||
* for them and trying to understand what they mean.
|
||||
*
|
||||
* CONFIG_xxx: These are the obvious machine configuration defines created
|
||||
* during configuration. These are defined in include/linux/autoconf.h.
|
||||
* during configuration. These are defined in autoconf.h.
|
||||
*
|
||||
* CONSOLE: There is support for head.S console in this file. This
|
||||
* console can talk to a Mac frame buffer, but could easily be extrapolated
|
||||
|
|
1
arch/microblaze/include/asm/asm-offsets.h
Normal file
1
arch/microblaze/include/asm/asm-offsets.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <generated/asm-offsets.h>
|
|
@ -5,9 +5,12 @@ config MIPS
|
|||
select HAVE_IDE
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_ARCH_KGDB
|
||||
# Horrible source of confusion. Die, die, die ...
|
||||
select EMBEDDED
|
||||
select RTC_LIB if !LEMOTE_FULOONG2E
|
||||
select HAVE_FUNCTION_TRACER
|
||||
select HAVE_FUNCTION_TRACE_MCOUNT_TEST
|
||||
select HAVE_DYNAMIC_FTRACE
|
||||
select HAVE_FTRACE_MCOUNT_RECORD
|
||||
select HAVE_FUNCTION_GRAPH_TRACER
|
||||
select RTC_LIB if !MACH_LOONGSON
|
||||
|
||||
mainmenu "Linux/MIPS Kernel Configuration"
|
||||
|
||||
|
@ -22,6 +25,7 @@ choice
|
|||
|
||||
config MACH_ALCHEMY
|
||||
bool "Alchemy processor based machines"
|
||||
select SYS_SUPPORTS_ZBOOT
|
||||
|
||||
config AR7
|
||||
bool "Texas Instruments AR7"
|
||||
|
@ -36,6 +40,7 @@ config AR7
|
|||
select SYS_HAS_EARLY_PRINTK
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||
select SYS_SUPPORTS_ZBOOT_UART16550
|
||||
select GENERIC_GPIO
|
||||
select GCD
|
||||
select VLYNQ
|
||||
|
@ -43,23 +48,6 @@ config AR7
|
|||
Support for the Texas Instruments AR7 System-on-a-Chip
|
||||
family: TNETD7100, 7200 and 7300.
|
||||
|
||||
config BASLER_EXCITE
|
||||
bool "Basler eXcite smart camera"
|
||||
select CEVT_R4K
|
||||
select CSRC_R4K
|
||||
select DMA_COHERENT
|
||||
select HW_HAS_PCI
|
||||
select IRQ_CPU
|
||||
select IRQ_CPU_RM7K
|
||||
select IRQ_CPU_RM9K
|
||||
select MIPS_RM9122
|
||||
select SYS_HAS_CPU_RM9000
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
help
|
||||
The eXcite is a smart camera platform manufactured by
|
||||
Basler Vision Technologies AG.
|
||||
|
||||
config BCM47XX
|
||||
bool "BCM47XX based boards"
|
||||
select CEVT_R4K
|
||||
|
@ -192,6 +180,7 @@ config LASAT
|
|||
|
||||
config MACH_LOONGSON
|
||||
bool "Loongson family of machines"
|
||||
select SYS_SUPPORTS_ZBOOT_UART16550
|
||||
help
|
||||
This enables the support of Loongson family of machines.
|
||||
|
||||
|
@ -233,6 +222,7 @@ config MIPS_MALTA
|
|||
select SYS_SUPPORTS_MIPS_CMP
|
||||
select SYS_SUPPORTS_MULTITHREADING
|
||||
select SYS_SUPPORTS_SMARTMIPS
|
||||
select SYS_SUPPORTS_ZBOOT
|
||||
help
|
||||
This enables support for the MIPS Technologies Malta evaluation
|
||||
board.
|
||||
|
@ -334,6 +324,24 @@ config PMC_YOSEMITE
|
|||
Yosemite is an evaluation board for the RM9000x2 processor
|
||||
manufactured by PMC-Sierra.
|
||||
|
||||
config POWERTV
|
||||
bool "Cisco PowerTV"
|
||||
select BOOT_ELF32
|
||||
select CEVT_R4K
|
||||
select CPU_MIPSR2_IRQ_VI
|
||||
select CPU_MIPSR2_IRQ_EI
|
||||
select CSRC_POWERTV
|
||||
select DMA_NONCOHERENT
|
||||
select HW_HAS_PCI
|
||||
select SYS_HAS_EARLY_PRINTK
|
||||
select SYS_HAS_CPU_MIPS32_R2
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
select SYS_SUPPORTS_HIGHMEM
|
||||
select USB_OHCI_LITTLE_ENDIAN
|
||||
help
|
||||
This enables support for the Cisco PowerTV Platform.
|
||||
|
||||
config SGI_IP22
|
||||
bool "SGI IP22 (Indy/Indigo2)"
|
||||
select ARC
|
||||
|
@ -674,11 +682,11 @@ config CAVIUM_OCTEON_REFERENCE_BOARD
|
|||
endchoice
|
||||
|
||||
source "arch/mips/alchemy/Kconfig"
|
||||
source "arch/mips/basler/excite/Kconfig"
|
||||
source "arch/mips/bcm63xx/Kconfig"
|
||||
source "arch/mips/jazz/Kconfig"
|
||||
source "arch/mips/lasat/Kconfig"
|
||||
source "arch/mips/pmc-sierra/Kconfig"
|
||||
source "arch/mips/powertv/Kconfig"
|
||||
source "arch/mips/sgi-ip27/Kconfig"
|
||||
source "arch/mips/sibyte/Kconfig"
|
||||
source "arch/mips/txx9/Kconfig"
|
||||
|
@ -778,6 +786,9 @@ config CSRC_BCM1480
|
|||
config CSRC_IOASIC
|
||||
bool
|
||||
|
||||
config CSRC_POWERTV
|
||||
bool
|
||||
|
||||
config CSRC_R4K_LIB
|
||||
bool
|
||||
|
||||
|
@ -806,20 +817,6 @@ config DMA_NONCOHERENT
|
|||
config DMA_NEED_PCI_MAP_STATE
|
||||
bool
|
||||
|
||||
config EARLY_PRINTK
|
||||
bool "Early printk" if EMBEDDED && DEBUG_KERNEL
|
||||
depends on SYS_HAS_EARLY_PRINTK
|
||||
default y
|
||||
help
|
||||
This option enables special console drivers which allow the kernel
|
||||
to print messages very early in the bootup process.
|
||||
|
||||
This is useful for kernel debugging when your machine crashes very
|
||||
early before the console code is initialized. For normal operation,
|
||||
it is not recommended because it looks ugly on some machines and
|
||||
doesn't cooperate with an X server. You should normally say N here,
|
||||
unless you want to debug such a crash.
|
||||
|
||||
config SYS_HAS_EARLY_PRINTK
|
||||
bool
|
||||
|
||||
|
@ -1069,6 +1066,21 @@ config CPU_LOONGSON2E
|
|||
The Loongson 2E processor implements the MIPS III instruction set
|
||||
with many extensions.
|
||||
|
||||
It has an internal FPGA northbridge, which is compatiable to
|
||||
bonito64.
|
||||
|
||||
config CPU_LOONGSON2F
|
||||
bool "Loongson 2F"
|
||||
depends on SYS_HAS_CPU_LOONGSON2F
|
||||
select CPU_LOONGSON2
|
||||
help
|
||||
The Loongson 2F processor implements the MIPS III instruction set
|
||||
with many extensions.
|
||||
|
||||
Loongson2F have built-in DDR2 and PCIX controller. The PCIX controller
|
||||
have a similar programming interface with FPGA northbridge used in
|
||||
Loongson2E.
|
||||
|
||||
config CPU_MIPS32_R1
|
||||
bool "MIPS32 Release 1"
|
||||
depends on SYS_HAS_CPU_MIPS32_R1
|
||||
|
@ -1294,6 +1306,16 @@ config CPU_CAVIUM_OCTEON
|
|||
|
||||
endchoice
|
||||
|
||||
config SYS_SUPPORTS_ZBOOT
|
||||
bool
|
||||
select HAVE_KERNEL_GZIP
|
||||
select HAVE_KERNEL_BZIP2
|
||||
select HAVE_KERNEL_LZMA
|
||||
|
||||
config SYS_SUPPORTS_ZBOOT_UART16550
|
||||
bool
|
||||
select SYS_SUPPORTS_ZBOOT
|
||||
|
||||
config CPU_LOONGSON2
|
||||
bool
|
||||
select CPU_SUPPORTS_32BIT_KERNEL
|
||||
|
@ -1303,6 +1325,12 @@ config CPU_LOONGSON2
|
|||
config SYS_HAS_CPU_LOONGSON2E
|
||||
bool
|
||||
|
||||
config SYS_HAS_CPU_LOONGSON2F
|
||||
bool
|
||||
select CPU_SUPPORTS_CPUFREQ
|
||||
select CPU_SUPPORTS_ADDRWINCFG if 64BIT
|
||||
select CPU_SUPPORTS_UNCACHED_ACCELERATED
|
||||
|
||||
config SYS_HAS_CPU_MIPS32_R1
|
||||
bool
|
||||
|
||||
|
@ -1411,8 +1439,17 @@ config CPU_SUPPORTS_32BIT_KERNEL
|
|||
bool
|
||||
config CPU_SUPPORTS_64BIT_KERNEL
|
||||
bool
|
||||
config CPU_SUPPORTS_CPUFREQ
|
||||
bool
|
||||
config CPU_SUPPORTS_ADDRWINCFG
|
||||
bool
|
||||
config CPU_SUPPORTS_HUGEPAGES
|
||||
bool
|
||||
config CPU_SUPPORTS_UNCACHED_ACCELERATED
|
||||
bool
|
||||
config MIPS_PGD_C0_CONTEXT
|
||||
bool
|
||||
default y if 64BIT && CPU_MIPSR2
|
||||
|
||||
#
|
||||
# Set to y for ptrace access to watch registers.
|
||||
|
@ -2024,15 +2061,6 @@ config STACKTRACE_SUPPORT
|
|||
|
||||
source "init/Kconfig"
|
||||
|
||||
config PROBE_INITRD_HEADER
|
||||
bool "Probe initrd header created by addinitrd"
|
||||
depends on BLK_DEV_INITRD
|
||||
help
|
||||
Probe initrd header at the last page of kernel image.
|
||||
Say Y here if you are using arch/mips/boot/addinitrd.c to
|
||||
add initrd or initramfs image to the kernel image.
|
||||
Otherwise, say N.
|
||||
|
||||
source "kernel/Kconfig.freezer"
|
||||
|
||||
menu "Bus options (PCI, PCMCIA, EISA, ISA, TC)"
|
||||
|
@ -2104,6 +2132,7 @@ config MMU
|
|||
|
||||
config I8253
|
||||
bool
|
||||
select MIPS_EXTERNAL_TIMER
|
||||
|
||||
config ZONE_DMA32
|
||||
bool
|
||||
|
@ -2180,6 +2209,8 @@ source "kernel/power/Kconfig"
|
|||
|
||||
endmenu
|
||||
|
||||
source "arch/mips/kernel/cpufreq/Kconfig"
|
||||
|
||||
source "net/Kconfig"
|
||||
|
||||
source "drivers/Kconfig"
|
||||
|
|
|
@ -6,15 +6,66 @@ config TRACE_IRQFLAGS_SUPPORT
|
|||
|
||||
source "lib/Kconfig.debug"
|
||||
|
||||
config EARLY_PRINTK
|
||||
bool "Early printk" if EMBEDDED
|
||||
depends on SYS_HAS_EARLY_PRINTK
|
||||
default y
|
||||
help
|
||||
This option enables special console drivers which allow the kernel
|
||||
to print messages very early in the bootup process.
|
||||
|
||||
This is useful for kernel debugging when your machine crashes very
|
||||
early before the console code is initialized. For normal operation,
|
||||
it is not recommended because it looks ugly on some machines and
|
||||
doesn't cooperate with an X server. You should normally say N here,
|
||||
unless you want to debug such a crash.
|
||||
|
||||
config CMDLINE_BOOL
|
||||
bool "Built-in kernel command line"
|
||||
default n
|
||||
help
|
||||
For most systems, it is firmware or second stage bootloader that
|
||||
by default specifies the kernel command line options. However,
|
||||
it might be necessary or advantageous to either override the
|
||||
default kernel command line or add a few extra options to it.
|
||||
For such cases, this option allows you to hardcode your own
|
||||
command line options directly into the kernel. For that, you
|
||||
should choose 'Y' here, and fill in the extra boot arguments
|
||||
in CONFIG_CMDLINE.
|
||||
|
||||
The built-in options will be concatenated to the default command
|
||||
line if CMDLINE_OVERRIDE is set to 'N'. Otherwise, the default
|
||||
command line will be ignored and replaced by the built-in string.
|
||||
|
||||
Most MIPS systems will normally expect 'N' here and rely upon
|
||||
the command line from the firmware or the second-stage bootloader.
|
||||
|
||||
config CMDLINE
|
||||
string "Default kernel command string"
|
||||
depends on CMDLINE_BOOL
|
||||
default ""
|
||||
help
|
||||
On some platforms, there is currently no way for the boot loader to
|
||||
pass arguments to the kernel. For these platforms, you can supply
|
||||
some command-line options at build time by entering them here. In
|
||||
other cases you can specify kernel args so that you don't have
|
||||
to set them up in board prom initialization routines.
|
||||
pass arguments to the kernel. For these platforms, and for the cases
|
||||
when you want to add some extra options to the command line or ignore
|
||||
the default command line, you can supply some command-line options at
|
||||
build time by entering them here. In other cases you can specify
|
||||
kernel args so that you don't have to set them up in board prom
|
||||
initialization routines.
|
||||
|
||||
For more information, see the CMDLINE_BOOL and CMDLINE_OVERRIDE
|
||||
options.
|
||||
|
||||
config CMDLINE_OVERRIDE
|
||||
bool "Built-in command line overrides firware arguments"
|
||||
default n
|
||||
depends on CMDLINE_BOOL
|
||||
help
|
||||
By setting this option to 'Y' you will have your kernel ignore
|
||||
command line arguments from firmware or second stage bootloader.
|
||||
Instead, the built-in command line will be used exclusively.
|
||||
|
||||
Normally, you will choose 'N' here.
|
||||
|
||||
config DEBUG_STACK_USAGE
|
||||
bool "Enable stack utilization instrumentation"
|
||||
|
|
|
@ -48,7 +48,16 @@ ifneq ($(SUBARCH),$(ARCH))
|
|||
endif
|
||||
endif
|
||||
|
||||
ifndef CONFIG_FUNCTION_TRACER
|
||||
cflags-y := -ffunction-sections
|
||||
endif
|
||||
ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
ifndef KBUILD_MCOUNT_RA_ADDRESS
|
||||
ifeq ($(call cc-option-yn,-mmcount-ra-address), y)
|
||||
cflags-y += -mmcount-ra-address -DKBUILD_MCOUNT_RA_ADDRESS
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
cflags-y += $(call cc-option, -mno-check-zero-division)
|
||||
|
||||
ifdef CONFIG_32BIT
|
||||
|
@ -69,6 +78,7 @@ endif
|
|||
|
||||
all-$(CONFIG_BOOT_ELF32) := $(vmlinux-32)
|
||||
all-$(CONFIG_BOOT_ELF64) := $(vmlinux-64)
|
||||
all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlinuz
|
||||
|
||||
#
|
||||
# GCC uses -G 0 -mabicalls -fpic as default. We don't want PIC in the kernel
|
||||
|
@ -124,6 +134,8 @@ cflags-$(CONFIG_CPU_TX49XX) += -march=r4600 -Wa,--trap
|
|||
cflags-$(CONFIG_CPU_LOONGSON2) += -Wa,--trap
|
||||
cflags-$(CONFIG_CPU_LOONGSON2E) += \
|
||||
$(call cc-option,-march=loongson2e,-march=r4600)
|
||||
cflags-$(CONFIG_CPU_LOONGSON2F) += \
|
||||
$(call cc-option,-march=loongson2f,-march=r4600)
|
||||
|
||||
cflags-$(CONFIG_CPU_MIPS32_R1) += $(call cc-option,-march=mips32,-mips32 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \
|
||||
-Wa,-mips32 -Wa,--trap
|
||||
|
@ -324,6 +336,7 @@ core-$(CONFIG_MACH_LOONGSON) +=arch/mips/loongson/
|
|||
cflags-$(CONFIG_MACH_LOONGSON) += -I$(srctree)/arch/mips/include/asm/mach-loongson \
|
||||
-mno-branch-likely
|
||||
load-$(CONFIG_LEMOTE_FULOONG2E) +=0xffffffff80100000
|
||||
load-$(CONFIG_LEMOTE_MACH2F) +=0xffffffff80200000
|
||||
|
||||
#
|
||||
# MIPS Malta board
|
||||
|
@ -331,7 +344,7 @@ load-$(CONFIG_LEMOTE_FULOONG2E) +=0xffffffff80100000
|
|||
core-$(CONFIG_MIPS_MALTA) += arch/mips/mti-malta/
|
||||
cflags-$(CONFIG_MIPS_MALTA) += -I$(srctree)/arch/mips/include/asm/mach-malta
|
||||
load-$(CONFIG_MIPS_MALTA) += 0xffffffff80100000
|
||||
all-$(CONFIG_MIPS_MALTA) := vmlinux.bin
|
||||
all-$(CONFIG_MIPS_MALTA) := vmlinuz.bin
|
||||
|
||||
#
|
||||
# MIPS SIM
|
||||
|
@ -355,13 +368,6 @@ core-$(CONFIG_PMC_YOSEMITE) += arch/mips/pmc-sierra/yosemite/
|
|||
cflags-$(CONFIG_PMC_YOSEMITE) += -I$(srctree)/arch/mips/include/asm/mach-yosemite
|
||||
load-$(CONFIG_PMC_YOSEMITE) += 0xffffffff80100000
|
||||
|
||||
#
|
||||
# Basler eXcite
|
||||
#
|
||||
core-$(CONFIG_BASLER_EXCITE) += arch/mips/basler/excite/
|
||||
cflags-$(CONFIG_BASLER_EXCITE) += -I$(srctree)/arch/mips/include/asm/mach-excite
|
||||
load-$(CONFIG_BASLER_EXCITE) += 0x80100000
|
||||
|
||||
#
|
||||
# LASAT platforms
|
||||
#
|
||||
|
@ -440,6 +446,13 @@ cflags-$(CONFIG_SOC_EMMA2RH) += -I$(srctree)/arch/mips/include/asm/mach-emma2rh
|
|||
core-$(CONFIG_NEC_MARKEINS) += arch/mips/emma/markeins/
|
||||
load-$(CONFIG_NEC_MARKEINS) += 0xffffffff88100000
|
||||
|
||||
#
|
||||
# Cisco PowerTV Platform
|
||||
#
|
||||
core-$(CONFIG_POWERTV) += arch/mips/powertv/
|
||||
cflags-$(CONFIG_POWERTV) += -I$(srctree)/arch/mips/include/asm/mach-powertv
|
||||
load-$(CONFIG_POWERTV) += 0xffffffff90800000
|
||||
|
||||
#
|
||||
# SGI IP22 (Indy/Indigo2)
|
||||
#
|
||||
|
@ -581,7 +594,7 @@ load-$(CONFIG_SNI_RM) += 0xffffffff80600000
|
|||
else
|
||||
load-$(CONFIG_SNI_RM) += 0xffffffff80030000
|
||||
endif
|
||||
all-$(CONFIG_SNI_RM) := vmlinux.ecoff
|
||||
all-$(CONFIG_SNI_RM) := vmlinuz.ecoff
|
||||
|
||||
#
|
||||
# Common TXx9
|
||||
|
@ -699,9 +712,23 @@ vmlinux.64: vmlinux
|
|||
$(OBJCOPY) -O $(64bit-bfd) $(OBJCOPYFLAGS) $< $@
|
||||
|
||||
makeboot =$(Q)$(MAKE) $(build)=arch/mips/boot VMLINUX=$(vmlinux-32) $(1)
|
||||
makezboot =$(Q)$(MAKE) $(build)=arch/mips/boot/compressed \
|
||||
VMLINUX_LOAD_ADDRESS=$(load-y) 32bit-bfd=$(32bit-bfd) $(1)
|
||||
|
||||
all: $(all-y)
|
||||
|
||||
vmlinuz: vmlinux FORCE
|
||||
+@$(call makezboot,$@)
|
||||
|
||||
vmlinuz.bin: vmlinux
|
||||
+@$(call makezboot,$@)
|
||||
|
||||
vmlinuz.ecoff: vmlinux
|
||||
+@$(call makezboot,$@)
|
||||
|
||||
vmlinuz.srec: vmlinux
|
||||
+@$(call makezboot,$@)
|
||||
|
||||
vmlinux.bin: $(vmlinux-32)
|
||||
+@$(call makeboot,$@)
|
||||
|
||||
|
@ -726,11 +753,13 @@ endif
|
|||
|
||||
install:
|
||||
$(Q)install -D -m 755 vmlinux $(INSTALL_PATH)/vmlinux-$(KERNELRELEASE)
|
||||
$(Q)install -D -m 755 vmlinuz $(INSTALL_PATH)/vmlinuz-$(KERNELRELEASE)
|
||||
$(Q)install -D -m 644 .config $(INSTALL_PATH)/config-$(KERNELRELEASE)
|
||||
$(Q)install -D -m 644 System.map $(INSTALL_PATH)/System.map-$(KERNELRELEASE)
|
||||
|
||||
archclean:
|
||||
@$(MAKE) $(clean)=arch/mips/boot
|
||||
@$(MAKE) $(clean)=arch/mips/boot/compressed
|
||||
@$(MAKE) $(clean)=arch/mips/lasat
|
||||
|
||||
define archhelp
|
||||
|
@ -738,10 +767,18 @@ define archhelp
|
|||
echo ' vmlinux.ecoff - ECOFF boot image'
|
||||
echo ' vmlinux.bin - Raw binary boot image'
|
||||
echo ' vmlinux.srec - SREC boot image'
|
||||
echo ' vmlinuz - Compressed boot(zboot) image'
|
||||
echo ' vmlinuz.ecoff - ECOFF zboot image'
|
||||
echo ' vmlinuz.bin - Raw binary zboot image'
|
||||
echo ' vmlinuz.srec - SREC zboot image'
|
||||
echo
|
||||
echo ' These will be default as apropriate for a configured platform.'
|
||||
endef
|
||||
|
||||
CLEAN_FILES += vmlinux.32 \
|
||||
vmlinux.64 \
|
||||
vmlinux.ecoff
|
||||
vmlinux.ecoff \
|
||||
vmlinuz \
|
||||
vmlinuz.ecoff \
|
||||
vmlinuz.bin \
|
||||
vmlinuz.srec
|
||||
|
|
|
@ -505,7 +505,7 @@ static int __init ar7_register_devices(void)
|
|||
int res;
|
||||
u32 *bootcr, val;
|
||||
#ifdef CONFIG_SERIAL_8250
|
||||
static struct uart_port uart_port[2];
|
||||
static struct uart_port uart_port[2] __initdata;
|
||||
|
||||
memset(uart_port, 0, sizeof(struct uart_port) * 2);
|
||||
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
config BASLER_EXCITE_PROTOTYPE
|
||||
bool "Support for pre-release units"
|
||||
depends on BASLER_EXCITE
|
||||
default n
|
||||
help
|
||||
Pre-series (prototype) units are different from later ones in
|
||||
some ways. Select this option if you have one of these. Please
|
||||
note that a kernel built with this option selected will not be
|
||||
able to run on normal units.
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue