Merge branch 'next' into for-linus
First round of input updates for 3.14.
This commit is contained in:
commit
55df811f20
5
CREDITS
5
CREDITS
|
@ -655,6 +655,11 @@ S: Stanford University
|
||||||
S: Stanford, California 94305
|
S: Stanford, California 94305
|
||||||
S: USA
|
S: USA
|
||||||
|
|
||||||
|
N: Carlos Chinea
|
||||||
|
E: carlos.chinea@nokia.com
|
||||||
|
E: cch.devel@gmail.com
|
||||||
|
D: Author of HSI Subsystem
|
||||||
|
|
||||||
N: Randolph Chung
|
N: Randolph Chung
|
||||||
E: tausq@debian.org
|
E: tausq@debian.org
|
||||||
D: Linux/PA-RISC hacker
|
D: Linux/PA-RISC hacker
|
||||||
|
|
|
@ -73,7 +73,8 @@ range from zero to the maximal number of valid planes for the currently active
|
||||||
format. For the single-planar API, applications must set <structfield> plane
|
format. For the single-planar API, applications must set <structfield> plane
|
||||||
</structfield> to zero. Additional flags may be posted in the <structfield>
|
</structfield> to zero. Additional flags may be posted in the <structfield>
|
||||||
flags </structfield> field. Refer to a manual for open() for details.
|
flags </structfield> field. Refer to a manual for open() for details.
|
||||||
Currently only O_CLOEXEC is supported. All other fields must be set to zero.
|
Currently only O_CLOEXEC, O_RDONLY, O_WRONLY, and O_RDWR are supported. All
|
||||||
|
other fields must be set to zero.
|
||||||
In the case of multi-planar API, every plane is exported separately using
|
In the case of multi-planar API, every plane is exported separately using
|
||||||
multiple <constant> VIDIOC_EXPBUF </constant> calls. </para>
|
multiple <constant> VIDIOC_EXPBUF </constant> calls. </para>
|
||||||
|
|
||||||
|
@ -170,8 +171,9 @@ multi-planar API. Otherwise this value must be set to zero. </entry>
|
||||||
<entry>__u32</entry>
|
<entry>__u32</entry>
|
||||||
<entry><structfield>flags</structfield></entry>
|
<entry><structfield>flags</structfield></entry>
|
||||||
<entry>Flags for the newly created file, currently only <constant>
|
<entry>Flags for the newly created file, currently only <constant>
|
||||||
O_CLOEXEC </constant> is supported, refer to the manual of open() for more
|
O_CLOEXEC </constant>, <constant>O_RDONLY</constant>, <constant>O_WRONLY
|
||||||
details.</entry>
|
</constant>, and <constant>O_RDWR</constant> are supported, refer to the manual
|
||||||
|
of open() for more details.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>__s32</entry>
|
<entry>__s32</entry>
|
||||||
|
|
|
@ -164,10 +164,10 @@ This points to a number of methods, all of which need to be provided:
|
||||||
|
|
||||||
(4) Diff the index keys of two objects.
|
(4) Diff the index keys of two objects.
|
||||||
|
|
||||||
int (*diff_objects)(const void *a, const void *b);
|
int (*diff_objects)(const void *object, const void *index_key);
|
||||||
|
|
||||||
Return the bit position at which the index keys of two objects differ or
|
Return the bit position at which the index key of the specified object
|
||||||
-1 if they are the same.
|
differs from the given index key or -1 if they are the same.
|
||||||
|
|
||||||
|
|
||||||
(5) Free an object.
|
(5) Free an object.
|
||||||
|
|
|
@ -266,10 +266,12 @@ E.g.
|
||||||
Invalidation is removing an entry from the cache without writing it
|
Invalidation is removing an entry from the cache without writing it
|
||||||
back. Cache blocks can be invalidated via the invalidate_cblocks
|
back. Cache blocks can be invalidated via the invalidate_cblocks
|
||||||
message, which takes an arbitrary number of cblock ranges. Each cblock
|
message, which takes an arbitrary number of cblock ranges. Each cblock
|
||||||
must be expressed as a decimal value, in the future a variant message
|
range's end value is "one past the end", meaning 5-10 expresses a range
|
||||||
that takes cblock ranges expressed in hexidecimal may be needed to
|
of values from 5 to 9. Each cblock must be expressed as a decimal
|
||||||
better support efficient invalidation of larger caches. The cache must
|
value, in the future a variant message that takes cblock ranges
|
||||||
be in passthrough mode when invalidate_cblocks is used.
|
expressed in hexidecimal may be needed to better support efficient
|
||||||
|
invalidation of larger caches. The cache must be in passthrough mode
|
||||||
|
when invalidate_cblocks is used.
|
||||||
|
|
||||||
invalidate_cblocks [<cblock>|<cblock begin>-<cblock end>]*
|
invalidate_cblocks [<cblock>|<cblock begin>-<cblock end>]*
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
* GPIO beeper device tree bindings
|
||||||
|
|
||||||
|
Register a beeper connected to GPIO pin.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: Should be "gpio-beeper".
|
||||||
|
- gpios: From common gpio binding; gpio connection to beeper enable pin.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
beeper: beeper {
|
||||||
|
compatible = "gpio-beeper";
|
||||||
|
gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>;
|
||||||
|
};
|
|
@ -0,0 +1,41 @@
|
||||||
|
* Texas Instruments tsc2007 touchscreen controller
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: must be "ti,tsc2007".
|
||||||
|
- reg: I2C address of the chip.
|
||||||
|
- ti,x-plate-ohms: X-plate resistance in ohms.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- gpios: the interrupt gpio the chip is connected to (trough the penirq pin).
|
||||||
|
The penirq pin goes to low when the panel is touched.
|
||||||
|
(see GPIO binding[1] for more details).
|
||||||
|
- interrupt-parent: the phandle for the gpio controller
|
||||||
|
(see interrupt binding[0]).
|
||||||
|
- interrupts: (gpio) interrupt to which the chip is connected
|
||||||
|
(see interrupt binding[0]).
|
||||||
|
- ti,max-rt: maximum pressure.
|
||||||
|
- ti,fuzzx: specifies the absolute input fuzz x value.
|
||||||
|
If set, it will permit noise in the data up to +- the value given to the fuzz
|
||||||
|
parameter, that is used to filter noise from the event stream.
|
||||||
|
- ti,fuzzy: specifies the absolute input fuzz y value.
|
||||||
|
- ti,fuzzz: specifies the absolute input fuzz z value.
|
||||||
|
- ti,poll-period: how much time to wait (in milliseconds) before reading again the
|
||||||
|
values from the tsc2007.
|
||||||
|
|
||||||
|
[0]: Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
|
||||||
|
[1]: Documentation/devicetree/bindings/gpio/gpio.txt
|
||||||
|
|
||||||
|
Example:
|
||||||
|
&i2c1 {
|
||||||
|
/* ... */
|
||||||
|
tsc2007@49 {
|
||||||
|
compatible = "ti,tsc2007";
|
||||||
|
reg = <0x49>;
|
||||||
|
interrupt-parent = <&gpio4>;
|
||||||
|
interrupts = <0x0 0x8>;
|
||||||
|
gpios = <&gpio4 0 0>;
|
||||||
|
ti,x-plate-ohms = <180>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* ... */
|
||||||
|
};
|
|
@ -0,0 +1,27 @@
|
||||||
|
* TWL4030's Keypad Controller device tree bindings
|
||||||
|
|
||||||
|
TWL4030's Keypad controller is used to interface a SoC with a matrix-type
|
||||||
|
keypad device. The keypad controller supports multiple row and column lines.
|
||||||
|
A key can be placed at each intersection of a unique row and a unique column.
|
||||||
|
The keypad controller can sense a key-press and key-release and report the
|
||||||
|
event using a interrupt to the cpu.
|
||||||
|
|
||||||
|
This binding is based on the matrix-keymap binding with the following
|
||||||
|
changes:
|
||||||
|
|
||||||
|
* keypad,num-rows and keypad,num-columns are required.
|
||||||
|
|
||||||
|
Required SoC Specific Properties:
|
||||||
|
- compatible: should be one of the following
|
||||||
|
- "ti,twl4030-keypad": For controllers compatible with twl4030 keypad
|
||||||
|
controller.
|
||||||
|
- interrupt: should be one of the following
|
||||||
|
- <1>: For controllers compatible with twl4030 keypad controller.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
twl_keypad: keypad {
|
||||||
|
compatible = "ti,twl4030-keypad";
|
||||||
|
interrupts = <1>;
|
||||||
|
keypad,num-rows = <8>;
|
||||||
|
keypad,num-columns = <8>;
|
||||||
|
};
|
|
@ -0,0 +1,21 @@
|
||||||
|
Texas Instruments TWL family (twl4030) pwrbutton module
|
||||||
|
|
||||||
|
This module is part of the TWL4030. For more details about the whole
|
||||||
|
chip see Documentation/devicetree/bindings/mfd/twl-familly.txt.
|
||||||
|
|
||||||
|
This module provides a simple power button event via an Interrupt.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: should be one of the following
|
||||||
|
- "ti,twl4030-pwrbutton": For controllers compatible with twl4030
|
||||||
|
- interrupts: should be one of the following
|
||||||
|
- <8>: For controllers compatible with twl4030
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
&twl {
|
||||||
|
twl_pwrbutton: pwrbutton {
|
||||||
|
compatible = "ti,twl4030-pwrbutton";
|
||||||
|
interrupts = <8>;
|
||||||
|
};
|
||||||
|
};
|
|
@ -4,7 +4,7 @@ This file provides information, what the device node
|
||||||
for the davinci_emac interface contains.
|
for the davinci_emac interface contains.
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible: "ti,davinci-dm6467-emac";
|
- compatible: "ti,davinci-dm6467-emac" or "ti,am3517-emac"
|
||||||
- reg: Offset and length of the register set for the device
|
- reg: Offset and length of the register set for the device
|
||||||
- ti,davinci-ctrl-reg-offset: offset to control register
|
- ti,davinci-ctrl-reg-offset: offset to control register
|
||||||
- ti,davinci-ctrl-mod-reg-offset: offset to control module register
|
- ti,davinci-ctrl-mod-reg-offset: offset to control module register
|
||||||
|
|
|
@ -8,3 +8,7 @@ Required properties:
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- phy-device : phandle to Ethernet phy
|
- phy-device : phandle to Ethernet phy
|
||||||
- local-mac-address : Ethernet mac address to use
|
- local-mac-address : Ethernet mac address to use
|
||||||
|
- reg-io-width : Mask of sizes (in bytes) of the IO accesses that
|
||||||
|
are supported on the device. Valid value for SMSC LAN91c111 are
|
||||||
|
1, 2 or 4. If it's omitted or invalid, the size would be 2 meaning
|
||||||
|
16-bit access only.
|
||||||
|
|
|
@ -68,7 +68,7 @@ features that you need, first. How each feature is mapped is described below.
|
||||||
Legacy drivers often don't comply to these rules. As we cannot change them
|
Legacy drivers often don't comply to these rules. As we cannot change them
|
||||||
for backwards-compatibility reasons, you need to provide fixup mappings in
|
for backwards-compatibility reasons, you need to provide fixup mappings in
|
||||||
user-space yourself. Some of them might also provide module-options that
|
user-space yourself. Some of them might also provide module-options that
|
||||||
change the mappings so you can adivce users to set these.
|
change the mappings so you can advise users to set these.
|
||||||
|
|
||||||
All new gamepads are supposed to comply with this mapping. Please report any
|
All new gamepads are supposed to comply with this mapping. Please report any
|
||||||
bugs, if they don't.
|
bugs, if they don't.
|
||||||
|
@ -150,10 +150,10 @@ Menu-Pad:
|
||||||
BTN_START
|
BTN_START
|
||||||
Many pads also have a third button which is branded or has a special symbol
|
Many pads also have a third button which is branded or has a special symbol
|
||||||
and meaning. Such buttons are mapped as BTN_MODE. Examples are the Nintendo
|
and meaning. Such buttons are mapped as BTN_MODE. Examples are the Nintendo
|
||||||
"HOME" button, the XBox "X"-button or Sony "P" button.
|
"HOME" button, the XBox "X"-button or Sony "PS" button.
|
||||||
|
|
||||||
Rumble:
|
Rumble:
|
||||||
Rumble is adverticed as FF_RUMBLE.
|
Rumble is advertised as FF_RUMBLE.
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
Written 2013 by David Herrmann <dh.herrmann@gmail.com>
|
Written 2013 by David Herrmann <dh.herrmann@gmail.com>
|
||||||
|
|
|
@ -16,14 +16,14 @@ joystick.
|
||||||
|
|
||||||
By default, the device is opened in blocking mode.
|
By default, the device is opened in blocking mode.
|
||||||
|
|
||||||
int fd = open ("/dev/js0", O_RDONLY);
|
int fd = open ("/dev/input/js0", O_RDONLY);
|
||||||
|
|
||||||
|
|
||||||
2. Event Reading
|
2. Event Reading
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
struct js_event e;
|
struct js_event e;
|
||||||
read (fd, &e, sizeof(struct js_event));
|
read (fd, &e, sizeof(e));
|
||||||
|
|
||||||
where js_event is defined as
|
where js_event is defined as
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@ where js_event is defined as
|
||||||
__u8 number; /* axis/button number */
|
__u8 number; /* axis/button number */
|
||||||
};
|
};
|
||||||
|
|
||||||
If the read is successful, it will return sizeof(struct js_event), unless
|
If the read is successful, it will return sizeof(e), unless you wanted to read
|
||||||
you wanted to read more than one event per read as described in section 3.1.
|
more than one event per read as described in section 3.1.
|
||||||
|
|
||||||
|
|
||||||
2.1 js_event.type
|
2.1 js_event.type
|
||||||
|
@ -99,9 +99,9 @@ may work well if you handle JS_EVENT_INIT events separately,
|
||||||
|
|
||||||
if ((js_event.type & ~JS_EVENT_INIT) == JS_EVENT_BUTTON) {
|
if ((js_event.type & ~JS_EVENT_INIT) == JS_EVENT_BUTTON) {
|
||||||
if (js_event.value)
|
if (js_event.value)
|
||||||
buttons_state |= (1 << js_event.number);
|
buttons_state |= (1 << js_event.number);
|
||||||
else
|
else
|
||||||
buttons_state &= ~(1 << js_event.number);
|
buttons_state &= ~(1 << js_event.number);
|
||||||
}
|
}
|
||||||
|
|
||||||
is much safer since it can't lose sync with the driver. As you would
|
is much safer since it can't lose sync with the driver. As you would
|
||||||
|
@ -144,14 +144,14 @@ all events on the queue (that is, until you get a -1).
|
||||||
For example,
|
For example,
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
while (read (fd, &e, sizeof(struct js_event)) > 0) {
|
while (read (fd, &e, sizeof(e)) > 0) {
|
||||||
process_event (e);
|
process_event (e);
|
||||||
}
|
}
|
||||||
/* EAGAIN is returned when the queue is empty */
|
/* EAGAIN is returned when the queue is empty */
|
||||||
if (errno != EAGAIN) {
|
if (errno != EAGAIN) {
|
||||||
/* error */
|
/* error */
|
||||||
}
|
}
|
||||||
/* do something interesting with processed events */
|
/* do something interesting with processed events */
|
||||||
}
|
}
|
||||||
|
|
||||||
One reason for emptying the queue is that if it gets full you'll start
|
One reason for emptying the queue is that if it gets full you'll start
|
||||||
|
@ -181,7 +181,7 @@ at a time using the typical read(2) functionality. For that, you would
|
||||||
replace the read above with something like
|
replace the read above with something like
|
||||||
|
|
||||||
struct js_event mybuffer[0xff];
|
struct js_event mybuffer[0xff];
|
||||||
int i = read (fd, mybuffer, sizeof(struct mybuffer));
|
int i = read (fd, mybuffer, sizeof(mybuffer));
|
||||||
|
|
||||||
In this case, read would return -1 if the queue was empty, or some
|
In this case, read would return -1 if the queue was empty, or some
|
||||||
other value in which the number of events read would be i /
|
other value in which the number of events read would be i /
|
||||||
|
@ -269,9 +269,9 @@ The driver offers backward compatibility, though. Here's a quick summary:
|
||||||
struct JS_DATA_TYPE js;
|
struct JS_DATA_TYPE js;
|
||||||
while (1) {
|
while (1) {
|
||||||
if (read (fd, &js, JS_RETURN) != JS_RETURN) {
|
if (read (fd, &js, JS_RETURN) != JS_RETURN) {
|
||||||
/* error */
|
/* error */
|
||||||
}
|
}
|
||||||
usleep (1000);
|
usleep (1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
As you can figure out from the example, the read returns immediately,
|
As you can figure out from the example, the read returns immediately,
|
||||||
|
|
|
@ -116,7 +116,7 @@ your needs:
|
||||||
For testing the joystick driver functionality, there is the jstest
|
For testing the joystick driver functionality, there is the jstest
|
||||||
program in the utilities package. You run it by typing:
|
program in the utilities package. You run it by typing:
|
||||||
|
|
||||||
jstest /dev/js0
|
jstest /dev/input/js0
|
||||||
|
|
||||||
And it should show a line with the joystick values, which update as you
|
And it should show a line with the joystick values, which update as you
|
||||||
move the stick, and press its buttons. The axes should all be zero when the
|
move the stick, and press its buttons. The axes should all be zero when the
|
||||||
|
@ -136,7 +136,7 @@ joystick should be autocalibrated by the driver automagically. However, with
|
||||||
some analog joysticks, that either do not use linear resistors, or if you
|
some analog joysticks, that either do not use linear resistors, or if you
|
||||||
want better precision, you can use the jscal program
|
want better precision, you can use the jscal program
|
||||||
|
|
||||||
jscal -c /dev/js0
|
jscal -c /dev/input/js0
|
||||||
|
|
||||||
included in the joystick package to set better correction coefficients than
|
included in the joystick package to set better correction coefficients than
|
||||||
what the driver would choose itself.
|
what the driver would choose itself.
|
||||||
|
@ -145,7 +145,7 @@ what the driver would choose itself.
|
||||||
calibration using the jstest command, and if you do, you then can save the
|
calibration using the jstest command, and if you do, you then can save the
|
||||||
correction coefficients into a file
|
correction coefficients into a file
|
||||||
|
|
||||||
jscal -p /dev/js0 > /etc/joystick.cal
|
jscal -p /dev/input/js0 > /etc/joystick.cal
|
||||||
|
|
||||||
And add a line to your rc script executing that file
|
And add a line to your rc script executing that file
|
||||||
|
|
||||||
|
@ -556,7 +556,7 @@ interface, and "old" for the "0.x" interface. You run it by typing:
|
||||||
|
|
||||||
5. FAQ
|
5. FAQ
|
||||||
~~~~~~
|
~~~~~~
|
||||||
Q: Running 'jstest /dev/js0' results in "File not found" error. What's the
|
Q: Running 'jstest /dev/input/js0' results in "File not found" error. What's the
|
||||||
cause?
|
cause?
|
||||||
A: The device files don't exist. Create them (see section 2.2).
|
A: The device files don't exist. Create them (see section 2.2).
|
||||||
|
|
||||||
|
|
|
@ -313,7 +313,7 @@ static struct mic_device_desc *get_device_desc(struct mic_info *mic, int type)
|
||||||
int i;
|
int i;
|
||||||
void *dp = get_dp(mic, type);
|
void *dp = get_dp(mic, type);
|
||||||
|
|
||||||
for (i = mic_aligned_size(struct mic_bootparam); i < PAGE_SIZE;
|
for (i = sizeof(struct mic_bootparam); i < PAGE_SIZE;
|
||||||
i += mic_total_desc_size(d)) {
|
i += mic_total_desc_size(d)) {
|
||||||
d = dp + i;
|
d = dp + i;
|
||||||
|
|
||||||
|
@ -445,8 +445,8 @@ init_vr(struct mic_info *mic, int fd, int type,
|
||||||
__func__, mic->name, vr0->va, vr0->info, vr_size,
|
__func__, mic->name, vr0->va, vr0->info, vr_size,
|
||||||
vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN));
|
vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN));
|
||||||
mpsslog("magic 0x%x expected 0x%x\n",
|
mpsslog("magic 0x%x expected 0x%x\n",
|
||||||
vr0->info->magic, MIC_MAGIC + type);
|
le32toh(vr0->info->magic), MIC_MAGIC + type);
|
||||||
assert(vr0->info->magic == MIC_MAGIC + type);
|
assert(le32toh(vr0->info->magic) == MIC_MAGIC + type);
|
||||||
if (vr1) {
|
if (vr1) {
|
||||||
vr1->va = (struct mic_vring *)
|
vr1->va = (struct mic_vring *)
|
||||||
&va[MIC_DEVICE_PAGE_END + vr_size];
|
&va[MIC_DEVICE_PAGE_END + vr_size];
|
||||||
|
@ -458,8 +458,8 @@ init_vr(struct mic_info *mic, int fd, int type,
|
||||||
__func__, mic->name, vr1->va, vr1->info, vr_size,
|
__func__, mic->name, vr1->va, vr1->info, vr_size,
|
||||||
vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN));
|
vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN));
|
||||||
mpsslog("magic 0x%x expected 0x%x\n",
|
mpsslog("magic 0x%x expected 0x%x\n",
|
||||||
vr1->info->magic, MIC_MAGIC + type + 1);
|
le32toh(vr1->info->magic), MIC_MAGIC + type + 1);
|
||||||
assert(vr1->info->magic == MIC_MAGIC + type + 1);
|
assert(le32toh(vr1->info->magic) == MIC_MAGIC + type + 1);
|
||||||
}
|
}
|
||||||
done:
|
done:
|
||||||
return va;
|
return va;
|
||||||
|
@ -520,7 +520,7 @@ static void *
|
||||||
virtio_net(void *arg)
|
virtio_net(void *arg)
|
||||||
{
|
{
|
||||||
static __u8 vnet_hdr[2][sizeof(struct virtio_net_hdr)];
|
static __u8 vnet_hdr[2][sizeof(struct virtio_net_hdr)];
|
||||||
static __u8 vnet_buf[2][MAX_NET_PKT_SIZE] __aligned(64);
|
static __u8 vnet_buf[2][MAX_NET_PKT_SIZE] __attribute__ ((aligned(64)));
|
||||||
struct iovec vnet_iov[2][2] = {
|
struct iovec vnet_iov[2][2] = {
|
||||||
{ { .iov_base = vnet_hdr[0], .iov_len = sizeof(vnet_hdr[0]) },
|
{ { .iov_base = vnet_hdr[0], .iov_len = sizeof(vnet_hdr[0]) },
|
||||||
{ .iov_base = vnet_buf[0], .iov_len = sizeof(vnet_buf[0]) } },
|
{ .iov_base = vnet_buf[0], .iov_len = sizeof(vnet_buf[0]) } },
|
||||||
|
@ -1412,6 +1412,12 @@ mic_config(void *arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
ret = lseek(fd, 0, SEEK_SET);
|
||||||
|
if (ret < 0) {
|
||||||
|
mpsslog("%s: Failed to seek to file start '%s': %s\n",
|
||||||
|
mic->name, pathname, strerror(errno));
|
||||||
|
goto close_error1;
|
||||||
|
}
|
||||||
ret = read(fd, value, sizeof(value));
|
ret = read(fd, value, sizeof(value));
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
mpsslog("%s: Failed to read sysfs entry '%s': %s\n",
|
mpsslog("%s: Failed to read sysfs entry '%s': %s\n",
|
||||||
|
|
|
@ -123,6 +123,16 @@ Transmission process is similar to capture as shown below.
|
||||||
[shutdown] close() --------> destruction of the transmission socket and
|
[shutdown] close() --------> destruction of the transmission socket and
|
||||||
deallocation of all associated resources.
|
deallocation of all associated resources.
|
||||||
|
|
||||||
|
Socket creation and destruction is also straight forward, and is done
|
||||||
|
the same way as in capturing described in the previous paragraph:
|
||||||
|
|
||||||
|
int fd = socket(PF_PACKET, mode, 0);
|
||||||
|
|
||||||
|
The protocol can optionally be 0 in case we only want to transmit
|
||||||
|
via this socket, which avoids an expensive call to packet_rcv().
|
||||||
|
In this case, you also need to bind(2) the TX_RING with sll_protocol = 0
|
||||||
|
set. Otherwise, htons(ETH_P_ALL) or any other protocol, for example.
|
||||||
|
|
||||||
Binding the socket to your network interface is mandatory (with zero copy) to
|
Binding the socket to your network interface is mandatory (with zero copy) to
|
||||||
know the header size of frames used in the circular buffer.
|
know the header size of frames used in the circular buffer.
|
||||||
|
|
||||||
|
|
59
MAINTAINERS
59
MAINTAINERS
|
@ -893,19 +893,14 @@ F: arch/arm/include/asm/hardware/dec21285.h
|
||||||
F: arch/arm/mach-footbridge/
|
F: arch/arm/mach-footbridge/
|
||||||
|
|
||||||
ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
|
ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
|
||||||
|
M: Shawn Guo <shawn.guo@linaro.org>
|
||||||
M: Sascha Hauer <kernel@pengutronix.de>
|
M: Sascha Hauer <kernel@pengutronix.de>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.pengutronix.de/git/imx/linux-2.6.git
|
|
||||||
F: arch/arm/mach-imx/
|
|
||||||
F: arch/arm/configs/imx*_defconfig
|
|
||||||
|
|
||||||
ARM/FREESCALE IMX6
|
|
||||||
M: Shawn Guo <shawn.guo@linaro.org>
|
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
|
||||||
S: Maintained
|
|
||||||
T: git git://git.linaro.org/people/shawnguo/linux-2.6.git
|
T: git git://git.linaro.org/people/shawnguo/linux-2.6.git
|
||||||
F: arch/arm/mach-imx/*imx6*
|
F: arch/arm/mach-imx/
|
||||||
|
F: arch/arm/boot/dts/imx*
|
||||||
|
F: arch/arm/configs/imx*_defconfig
|
||||||
|
|
||||||
ARM/FREESCALE MXS ARM ARCHITECTURE
|
ARM/FREESCALE MXS ARM ARCHITECTURE
|
||||||
M: Shawn Guo <shawn.guo@linaro.org>
|
M: Shawn Guo <shawn.guo@linaro.org>
|
||||||
|
@ -2138,7 +2133,8 @@ S: Maintained
|
||||||
F: Documentation/zh_CN/
|
F: Documentation/zh_CN/
|
||||||
|
|
||||||
CHIPIDEA USB HIGH SPEED DUAL ROLE CONTROLLER
|
CHIPIDEA USB HIGH SPEED DUAL ROLE CONTROLLER
|
||||||
M: Alexander Shishkin <alexander.shishkin@linux.intel.com>
|
M: Peter Chen <Peter.Chen@freescale.com>
|
||||||
|
T: git://github.com/hzpeterchen/linux-usb.git
|
||||||
L: linux-usb@vger.kernel.org
|
L: linux-usb@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/usb/chipidea/
|
F: drivers/usb/chipidea/
|
||||||
|
@ -4044,6 +4040,14 @@ W: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: fs/hpfs/
|
F: fs/hpfs/
|
||||||
|
|
||||||
|
HSI SUBSYSTEM
|
||||||
|
M: Sebastian Reichel <sre@debian.org>
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/ABI/testing/sysfs-bus-hsi
|
||||||
|
F: drivers/hsi/
|
||||||
|
F: include/linux/hsi/
|
||||||
|
F: include/uapi/linux/hsi/
|
||||||
|
|
||||||
HSO 3G MODEM DRIVER
|
HSO 3G MODEM DRIVER
|
||||||
M: Jan Dumon <j.dumon@option.com>
|
M: Jan Dumon <j.dumon@option.com>
|
||||||
W: http://www.pharscape.org
|
W: http://www.pharscape.org
|
||||||
|
@ -4462,10 +4466,8 @@ M: Bruce Allan <bruce.w.allan@intel.com>
|
||||||
M: Carolyn Wyborny <carolyn.wyborny@intel.com>
|
M: Carolyn Wyborny <carolyn.wyborny@intel.com>
|
||||||
M: Don Skidmore <donald.c.skidmore@intel.com>
|
M: Don Skidmore <donald.c.skidmore@intel.com>
|
||||||
M: Greg Rose <gregory.v.rose@intel.com>
|
M: Greg Rose <gregory.v.rose@intel.com>
|
||||||
M: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
|
|
||||||
M: Alex Duyck <alexander.h.duyck@intel.com>
|
M: Alex Duyck <alexander.h.duyck@intel.com>
|
||||||
M: John Ronciak <john.ronciak@intel.com>
|
M: John Ronciak <john.ronciak@intel.com>
|
||||||
M: Tushar Dave <tushar.n.dave@intel.com>
|
|
||||||
L: e1000-devel@lists.sourceforge.net
|
L: e1000-devel@lists.sourceforge.net
|
||||||
W: http://www.intel.com/support/feedback.htm
|
W: http://www.intel.com/support/feedback.htm
|
||||||
W: http://e1000.sourceforge.net/
|
W: http://e1000.sourceforge.net/
|
||||||
|
@ -6461,19 +6463,52 @@ F: drivers/pci/
|
||||||
F: include/linux/pci*
|
F: include/linux/pci*
|
||||||
F: arch/x86/pci/
|
F: arch/x86/pci/
|
||||||
|
|
||||||
|
PCI DRIVER FOR IMX6
|
||||||
|
M: Richard Zhu <r65037@freescale.com>
|
||||||
|
M: Shawn Guo <shawn.guo@linaro.org>
|
||||||
|
L: linux-pci@vger.kernel.org
|
||||||
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/pci/host/*imx6*
|
||||||
|
|
||||||
|
PCI DRIVER FOR MVEBU (Marvell Armada 370 and Armada XP SOC support)
|
||||||
|
M: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||||
|
M: Jason Cooper <jason@lakedaemon.net>
|
||||||
|
L: linux-pci@vger.kernel.org
|
||||||
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/pci/host/*mvebu*
|
||||||
|
|
||||||
PCI DRIVER FOR NVIDIA TEGRA
|
PCI DRIVER FOR NVIDIA TEGRA
|
||||||
M: Thierry Reding <thierry.reding@gmail.com>
|
M: Thierry Reding <thierry.reding@gmail.com>
|
||||||
L: linux-tegra@vger.kernel.org
|
L: linux-tegra@vger.kernel.org
|
||||||
|
L: linux-pci@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt
|
F: Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt
|
||||||
F: drivers/pci/host/pci-tegra.c
|
F: drivers/pci/host/pci-tegra.c
|
||||||
|
|
||||||
|
PCI DRIVER FOR RENESAS R-CAR
|
||||||
|
M: Simon Horman <horms@verge.net.au>
|
||||||
|
L: linux-pci@vger.kernel.org
|
||||||
|
L: linux-sh@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/pci/host/*rcar*
|
||||||
|
|
||||||
PCI DRIVER FOR SAMSUNG EXYNOS
|
PCI DRIVER FOR SAMSUNG EXYNOS
|
||||||
M: Jingoo Han <jg1.han@samsung.com>
|
M: Jingoo Han <jg1.han@samsung.com>
|
||||||
L: linux-pci@vger.kernel.org
|
L: linux-pci@vger.kernel.org
|
||||||
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/pci/host/pci-exynos.c
|
F: drivers/pci/host/pci-exynos.c
|
||||||
|
|
||||||
|
PCI DRIVER FOR SYNOPSIS DESIGNWARE
|
||||||
|
M: Mohit Kumar <mohit.kumar@st.com>
|
||||||
|
M: Jingoo Han <jg1.han@samsung.com>
|
||||||
|
L: linux-pci@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/pci/host/*designware*
|
||||||
|
|
||||||
PCMCIA SUBSYSTEM
|
PCMCIA SUBSYSTEM
|
||||||
P: Linux PCMCIA Team
|
P: Linux PCMCIA Team
|
||||||
L: linux-pcmcia@lists.infradead.org
|
L: linux-pcmcia@lists.infradead.org
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 13
|
PATCHLEVEL = 13
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc3
|
EXTRAVERSION = -rc4
|
||||||
NAME = One Giant Leap for Frogkind
|
NAME = One Giant Leap for Frogkind
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -2,6 +2,7 @@ config ALPHA
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
select ARCH_MIGHT_HAVE_PC_PARPORT
|
select ARCH_MIGHT_HAVE_PC_PARPORT
|
||||||
|
select ARCH_MIGHT_HAVE_PC_SERIO
|
||||||
select HAVE_AOUT
|
select HAVE_AOUT
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select HAVE_OPROFILE
|
select HAVE_OPROFILE
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
config ARC
|
config ARC
|
||||||
def_bool y
|
def_bool y
|
||||||
|
select BUILDTIME_EXTABLE_SORT
|
||||||
select CLONE_BACKWARDS
|
select CLONE_BACKWARDS
|
||||||
# ARC Busybox based initramfs absolutely relies on DEVTMPFS for /dev
|
# ARC Busybox based initramfs absolutely relies on DEVTMPFS for /dev
|
||||||
select DEVTMPFS if !INITRAMFS_SOURCE=""
|
select DEVTMPFS if !INITRAMFS_SOURCE=""
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
|
|
||||||
/******** no-legacy-syscalls-ABI *******/
|
/******** no-legacy-syscalls-ABI *******/
|
||||||
|
|
||||||
|
#ifndef _UAPI_ASM_ARC_UNISTD_H
|
||||||
|
#define _UAPI_ASM_ARC_UNISTD_H
|
||||||
|
|
||||||
#define __ARCH_WANT_SYS_EXECVE
|
#define __ARCH_WANT_SYS_EXECVE
|
||||||
#define __ARCH_WANT_SYS_CLONE
|
#define __ARCH_WANT_SYS_CLONE
|
||||||
#define __ARCH_WANT_SYS_VFORK
|
#define __ARCH_WANT_SYS_VFORK
|
||||||
|
@ -32,3 +35,5 @@ __SYSCALL(__NR_arc_gettls, sys_arc_gettls)
|
||||||
/* Generic syscall (fs/filesystems.c - lost in asm-generic/unistd.h */
|
/* Generic syscall (fs/filesystems.c - lost in asm-generic/unistd.h */
|
||||||
#define __NR_sysfs (__NR_arch_specific_syscall + 3)
|
#define __NR_sysfs (__NR_arch_specific_syscall + 3)
|
||||||
__SYSCALL(__NR_sysfs, sys_sysfs)
|
__SYSCALL(__NR_sysfs, sys_sysfs)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -79,9 +79,9 @@ static int arc_pmu_cache_event(u64 config)
|
||||||
cache_result = (config >> 16) & 0xff;
|
cache_result = (config >> 16) & 0xff;
|
||||||
if (cache_type >= PERF_COUNT_HW_CACHE_MAX)
|
if (cache_type >= PERF_COUNT_HW_CACHE_MAX)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (cache_type >= PERF_COUNT_HW_CACHE_OP_MAX)
|
if (cache_op >= PERF_COUNT_HW_CACHE_OP_MAX)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (cache_type >= PERF_COUNT_HW_CACHE_RESULT_MAX)
|
if (cache_result >= PERF_COUNT_HW_CACHE_RESULT_MAX)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
ret = arc_pmu_cache_map[cache_type][cache_op][cache_result];
|
ret = arc_pmu_cache_map[cache_type][cache_op][cache_result];
|
||||||
|
|
|
@ -7,11 +7,11 @@
|
||||||
*/
|
*/
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
#include "omap34xx.dtsi"
|
#include "am3517.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "TI AM3517 EVM (AM3517/05)";
|
model = "TI AM3517 EVM (AM3517/05 TMDSEVM3517)";
|
||||||
compatible = "ti,am3517-evm", "ti,omap3";
|
compatible = "ti,am3517-evm", "ti,am3517", "ti,omap3";
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
device_type = "memory";
|
device_type = "memory";
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* Device Tree Source for am3517 SoC
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
|
||||||
|
*
|
||||||
|
* This file is licensed under the terms of the GNU General Public License
|
||||||
|
* version 2. This program is licensed "as is" without any warranty of any
|
||||||
|
* kind, whether express or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "omap3.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
aliases {
|
||||||
|
serial3 = &uart4;
|
||||||
|
};
|
||||||
|
|
||||||
|
ocp {
|
||||||
|
am35x_otg_hs: am35x_otg_hs@5c040000 {
|
||||||
|
compatible = "ti,omap3-musb";
|
||||||
|
ti,hwmods = "am35x_otg_hs";
|
||||||
|
status = "disabled";
|
||||||
|
reg = <0x5c040000 0x1000>;
|
||||||
|
interrupts = <71>;
|
||||||
|
interrupt-names = "mc";
|
||||||
|
};
|
||||||
|
|
||||||
|
davinci_emac: ethernet@0x5c000000 {
|
||||||
|
compatible = "ti,am3517-emac";
|
||||||
|
ti,hwmods = "davinci_emac";
|
||||||
|
status = "disabled";
|
||||||
|
reg = <0x5c000000 0x30000>;
|
||||||
|
interrupts = <67 68 69 70>;
|
||||||
|
ti,davinci-ctrl-reg-offset = <0x10000>;
|
||||||
|
ti,davinci-ctrl-mod-reg-offset = <0>;
|
||||||
|
ti,davinci-ctrl-ram-offset = <0x20000>;
|
||||||
|
ti,davinci-ctrl-ram-size = <0x2000>;
|
||||||
|
ti,davinci-rmii-en = /bits/ 8 <1>;
|
||||||
|
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
davinci_mdio: ethernet@0x5c030000 {
|
||||||
|
compatible = "ti,davinci_mdio";
|
||||||
|
ti,hwmods = "davinci_mdio";
|
||||||
|
status = "disabled";
|
||||||
|
reg = <0x5c030000 0x1000>;
|
||||||
|
bus_freq = <1000000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
uart4: serial@4809e000 {
|
||||||
|
compatible = "ti,omap3-uart";
|
||||||
|
ti,hwmods = "uart4";
|
||||||
|
status = "disabled";
|
||||||
|
reg = <0x4809e000 0x400>;
|
||||||
|
interrupts = <84>;
|
||||||
|
dmas = <&sdma 55 &sdma 54>;
|
||||||
|
dma-names = "tx", "rx";
|
||||||
|
clock-frequency = <48000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
#include "omap34xx.dtsi"
|
#include "omap34xx-hs.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Nokia N900";
|
model = "Nokia N900";
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "omap36xx.dtsi"
|
#include "omap36xx-hs.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
cpus {
|
cpus {
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
/* Disabled modules for secure omaps */
|
||||||
|
|
||||||
|
#include "omap34xx.dtsi"
|
||||||
|
|
||||||
|
/* Secure omaps have some devices inaccessible depending on the firmware */
|
||||||
|
&aes {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&sham {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&timer12 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
|
@ -0,0 +1,16 @@
|
||||||
|
/* Disabled modules for secure omaps */
|
||||||
|
|
||||||
|
#include "omap36xx.dtsi"
|
||||||
|
|
||||||
|
/* Secure omaps have some devices inaccessible depending on the firmware */
|
||||||
|
&aes {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&sham {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&timer12 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
|
@ -193,7 +193,10 @@
|
||||||
pio: pinctrl@01c20800 {
|
pio: pinctrl@01c20800 {
|
||||||
compatible = "allwinner,sun6i-a31-pinctrl";
|
compatible = "allwinner,sun6i-a31-pinctrl";
|
||||||
reg = <0x01c20800 0x400>;
|
reg = <0x01c20800 0x400>;
|
||||||
interrupts = <0 11 1>, <0 15 1>, <0 16 1>, <0 17 1>;
|
interrupts = <0 11 4>,
|
||||||
|
<0 15 4>,
|
||||||
|
<0 16 4>,
|
||||||
|
<0 17 4>;
|
||||||
clocks = <&apb1_gates 5>;
|
clocks = <&apb1_gates 5>;
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
|
@ -212,11 +215,11 @@
|
||||||
timer@01c20c00 {
|
timer@01c20c00 {
|
||||||
compatible = "allwinner,sun4i-timer";
|
compatible = "allwinner,sun4i-timer";
|
||||||
reg = <0x01c20c00 0xa0>;
|
reg = <0x01c20c00 0xa0>;
|
||||||
interrupts = <0 18 1>,
|
interrupts = <0 18 4>,
|
||||||
<0 19 1>,
|
<0 19 4>,
|
||||||
<0 20 1>,
|
<0 20 4>,
|
||||||
<0 21 1>,
|
<0 21 4>,
|
||||||
<0 22 1>;
|
<0 22 4>;
|
||||||
clocks = <&osc24M>;
|
clocks = <&osc24M>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -228,7 +231,7 @@
|
||||||
uart0: serial@01c28000 {
|
uart0: serial@01c28000 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c28000 0x400>;
|
reg = <0x01c28000 0x400>;
|
||||||
interrupts = <0 0 1>;
|
interrupts = <0 0 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb2_gates 16>;
|
clocks = <&apb2_gates 16>;
|
||||||
|
@ -238,7 +241,7 @@
|
||||||
uart1: serial@01c28400 {
|
uart1: serial@01c28400 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c28400 0x400>;
|
reg = <0x01c28400 0x400>;
|
||||||
interrupts = <0 1 1>;
|
interrupts = <0 1 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb2_gates 17>;
|
clocks = <&apb2_gates 17>;
|
||||||
|
@ -248,7 +251,7 @@
|
||||||
uart2: serial@01c28800 {
|
uart2: serial@01c28800 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c28800 0x400>;
|
reg = <0x01c28800 0x400>;
|
||||||
interrupts = <0 2 1>;
|
interrupts = <0 2 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb2_gates 18>;
|
clocks = <&apb2_gates 18>;
|
||||||
|
@ -258,7 +261,7 @@
|
||||||
uart3: serial@01c28c00 {
|
uart3: serial@01c28c00 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c28c00 0x400>;
|
reg = <0x01c28c00 0x400>;
|
||||||
interrupts = <0 3 1>;
|
interrupts = <0 3 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb2_gates 19>;
|
clocks = <&apb2_gates 19>;
|
||||||
|
@ -268,7 +271,7 @@
|
||||||
uart4: serial@01c29000 {
|
uart4: serial@01c29000 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c29000 0x400>;
|
reg = <0x01c29000 0x400>;
|
||||||
interrupts = <0 4 1>;
|
interrupts = <0 4 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb2_gates 20>;
|
clocks = <&apb2_gates 20>;
|
||||||
|
@ -278,7 +281,7 @@
|
||||||
uart5: serial@01c29400 {
|
uart5: serial@01c29400 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c29400 0x400>;
|
reg = <0x01c29400 0x400>;
|
||||||
interrupts = <0 5 1>;
|
interrupts = <0 5 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb2_gates 21>;
|
clocks = <&apb2_gates 21>;
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
emac: ethernet@01c0b000 {
|
emac: ethernet@01c0b000 {
|
||||||
compatible = "allwinner,sun4i-emac";
|
compatible = "allwinner,sun4i-emac";
|
||||||
reg = <0x01c0b000 0x1000>;
|
reg = <0x01c0b000 0x1000>;
|
||||||
interrupts = <0 55 1>;
|
interrupts = <0 55 4>;
|
||||||
clocks = <&ahb_gates 17>;
|
clocks = <&ahb_gates 17>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -186,7 +186,7 @@
|
||||||
pio: pinctrl@01c20800 {
|
pio: pinctrl@01c20800 {
|
||||||
compatible = "allwinner,sun7i-a20-pinctrl";
|
compatible = "allwinner,sun7i-a20-pinctrl";
|
||||||
reg = <0x01c20800 0x400>;
|
reg = <0x01c20800 0x400>;
|
||||||
interrupts = <0 28 1>;
|
interrupts = <0 28 4>;
|
||||||
clocks = <&apb0_gates 5>;
|
clocks = <&apb0_gates 5>;
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
|
@ -251,12 +251,12 @@
|
||||||
timer@01c20c00 {
|
timer@01c20c00 {
|
||||||
compatible = "allwinner,sun4i-timer";
|
compatible = "allwinner,sun4i-timer";
|
||||||
reg = <0x01c20c00 0x90>;
|
reg = <0x01c20c00 0x90>;
|
||||||
interrupts = <0 22 1>,
|
interrupts = <0 22 4>,
|
||||||
<0 23 1>,
|
<0 23 4>,
|
||||||
<0 24 1>,
|
<0 24 4>,
|
||||||
<0 25 1>,
|
<0 25 4>,
|
||||||
<0 67 1>,
|
<0 67 4>,
|
||||||
<0 68 1>;
|
<0 68 4>;
|
||||||
clocks = <&osc24M>;
|
clocks = <&osc24M>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -273,7 +273,7 @@
|
||||||
uart0: serial@01c28000 {
|
uart0: serial@01c28000 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c28000 0x400>;
|
reg = <0x01c28000 0x400>;
|
||||||
interrupts = <0 1 1>;
|
interrupts = <0 1 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb1_gates 16>;
|
clocks = <&apb1_gates 16>;
|
||||||
|
@ -283,7 +283,7 @@
|
||||||
uart1: serial@01c28400 {
|
uart1: serial@01c28400 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c28400 0x400>;
|
reg = <0x01c28400 0x400>;
|
||||||
interrupts = <0 2 1>;
|
interrupts = <0 2 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb1_gates 17>;
|
clocks = <&apb1_gates 17>;
|
||||||
|
@ -293,7 +293,7 @@
|
||||||
uart2: serial@01c28800 {
|
uart2: serial@01c28800 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c28800 0x400>;
|
reg = <0x01c28800 0x400>;
|
||||||
interrupts = <0 3 1>;
|
interrupts = <0 3 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb1_gates 18>;
|
clocks = <&apb1_gates 18>;
|
||||||
|
@ -303,7 +303,7 @@
|
||||||
uart3: serial@01c28c00 {
|
uart3: serial@01c28c00 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c28c00 0x400>;
|
reg = <0x01c28c00 0x400>;
|
||||||
interrupts = <0 4 1>;
|
interrupts = <0 4 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb1_gates 19>;
|
clocks = <&apb1_gates 19>;
|
||||||
|
@ -313,7 +313,7 @@
|
||||||
uart4: serial@01c29000 {
|
uart4: serial@01c29000 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c29000 0x400>;
|
reg = <0x01c29000 0x400>;
|
||||||
interrupts = <0 17 1>;
|
interrupts = <0 17 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb1_gates 20>;
|
clocks = <&apb1_gates 20>;
|
||||||
|
@ -323,7 +323,7 @@
|
||||||
uart5: serial@01c29400 {
|
uart5: serial@01c29400 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c29400 0x400>;
|
reg = <0x01c29400 0x400>;
|
||||||
interrupts = <0 18 1>;
|
interrupts = <0 18 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb1_gates 21>;
|
clocks = <&apb1_gates 21>;
|
||||||
|
@ -333,7 +333,7 @@
|
||||||
uart6: serial@01c29800 {
|
uart6: serial@01c29800 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c29800 0x400>;
|
reg = <0x01c29800 0x400>;
|
||||||
interrupts = <0 19 1>;
|
interrupts = <0 19 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb1_gates 22>;
|
clocks = <&apb1_gates 22>;
|
||||||
|
@ -343,7 +343,7 @@
|
||||||
uart7: serial@01c29c00 {
|
uart7: serial@01c29c00 {
|
||||||
compatible = "snps,dw-apb-uart";
|
compatible = "snps,dw-apb-uart";
|
||||||
reg = <0x01c29c00 0x400>;
|
reg = <0x01c29c00 0x400>;
|
||||||
interrupts = <0 20 1>;
|
interrupts = <0 20 4>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
clocks = <&apb1_gates 23>;
|
clocks = <&apb1_gates 23>;
|
||||||
|
@ -353,7 +353,7 @@
|
||||||
i2c0: i2c@01c2ac00 {
|
i2c0: i2c@01c2ac00 {
|
||||||
compatible = "allwinner,sun4i-i2c";
|
compatible = "allwinner,sun4i-i2c";
|
||||||
reg = <0x01c2ac00 0x400>;
|
reg = <0x01c2ac00 0x400>;
|
||||||
interrupts = <0 7 1>;
|
interrupts = <0 7 4>;
|
||||||
clocks = <&apb1_gates 0>;
|
clocks = <&apb1_gates 0>;
|
||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -362,7 +362,7 @@
|
||||||
i2c1: i2c@01c2b000 {
|
i2c1: i2c@01c2b000 {
|
||||||
compatible = "allwinner,sun4i-i2c";
|
compatible = "allwinner,sun4i-i2c";
|
||||||
reg = <0x01c2b000 0x400>;
|
reg = <0x01c2b000 0x400>;
|
||||||
interrupts = <0 8 1>;
|
interrupts = <0 8 4>;
|
||||||
clocks = <&apb1_gates 1>;
|
clocks = <&apb1_gates 1>;
|
||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -371,7 +371,7 @@
|
||||||
i2c2: i2c@01c2b400 {
|
i2c2: i2c@01c2b400 {
|
||||||
compatible = "allwinner,sun4i-i2c";
|
compatible = "allwinner,sun4i-i2c";
|
||||||
reg = <0x01c2b400 0x400>;
|
reg = <0x01c2b400 0x400>;
|
||||||
interrupts = <0 9 1>;
|
interrupts = <0 9 4>;
|
||||||
clocks = <&apb1_gates 2>;
|
clocks = <&apb1_gates 2>;
|
||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -380,7 +380,7 @@
|
||||||
i2c3: i2c@01c2b800 {
|
i2c3: i2c@01c2b800 {
|
||||||
compatible = "allwinner,sun4i-i2c";
|
compatible = "allwinner,sun4i-i2c";
|
||||||
reg = <0x01c2b800 0x400>;
|
reg = <0x01c2b800 0x400>;
|
||||||
interrupts = <0 88 1>;
|
interrupts = <0 88 4>;
|
||||||
clocks = <&apb1_gates 3>;
|
clocks = <&apb1_gates 3>;
|
||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -389,7 +389,7 @@
|
||||||
i2c4: i2c@01c2bc00 {
|
i2c4: i2c@01c2bc00 {
|
||||||
compatible = "allwinner,sun4i-i2c";
|
compatible = "allwinner,sun4i-i2c";
|
||||||
reg = <0x01c2bc00 0x400>;
|
reg = <0x01c2bc00 0x400>;
|
||||||
interrupts = <0 89 1>;
|
interrupts = <0 89 4>;
|
||||||
clocks = <&apb1_gates 15>;
|
clocks = <&apb1_gates 15>;
|
||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
|
@ -100,23 +100,19 @@
|
||||||
#define TASK_UNMAPPED_BASE UL(0x00000000)
|
#define TASK_UNMAPPED_BASE UL(0x00000000)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PHYS_OFFSET
|
|
||||||
#define PHYS_OFFSET UL(CONFIG_DRAM_BASE)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef END_MEM
|
#ifndef END_MEM
|
||||||
#define END_MEM (UL(CONFIG_DRAM_BASE) + CONFIG_DRAM_SIZE)
|
#define END_MEM (UL(CONFIG_DRAM_BASE) + CONFIG_DRAM_SIZE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PAGE_OFFSET
|
#ifndef PAGE_OFFSET
|
||||||
#define PAGE_OFFSET (PHYS_OFFSET)
|
#define PAGE_OFFSET PLAT_PHYS_OFFSET
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The module can be at any place in ram in nommu mode.
|
* The module can be at any place in ram in nommu mode.
|
||||||
*/
|
*/
|
||||||
#define MODULES_END (END_MEM)
|
#define MODULES_END (END_MEM)
|
||||||
#define MODULES_VADDR (PHYS_OFFSET)
|
#define MODULES_VADDR PAGE_OFFSET
|
||||||
|
|
||||||
#define XIP_VIRT_ADDR(physaddr) (physaddr)
|
#define XIP_VIRT_ADDR(physaddr) (physaddr)
|
||||||
|
|
||||||
|
@ -157,6 +153,16 @@
|
||||||
#endif
|
#endif
|
||||||
#define ARCH_PGD_MASK ((1 << ARCH_PGD_SHIFT) - 1)
|
#define ARCH_PGD_MASK ((1 << ARCH_PGD_SHIFT) - 1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PLAT_PHYS_OFFSET is the offset (from zero) of the start of physical
|
||||||
|
* memory. This is used for XIP and NoMMU kernels, or by kernels which
|
||||||
|
* have their own mach/memory.h. Assembly code must always use
|
||||||
|
* PLAT_PHYS_OFFSET and not PHYS_OFFSET.
|
||||||
|
*/
|
||||||
|
#ifndef PLAT_PHYS_OFFSET
|
||||||
|
#define PLAT_PHYS_OFFSET UL(CONFIG_PHYS_OFFSET)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -239,6 +245,8 @@ static inline unsigned long __phys_to_virt(phys_addr_t x)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
#define PHYS_OFFSET PLAT_PHYS_OFFSET
|
||||||
|
|
||||||
static inline phys_addr_t __virt_to_phys(unsigned long x)
|
static inline phys_addr_t __virt_to_phys(unsigned long x)
|
||||||
{
|
{
|
||||||
return (phys_addr_t)x - PAGE_OFFSET + PHYS_OFFSET;
|
return (phys_addr_t)x - PAGE_OFFSET + PHYS_OFFSET;
|
||||||
|
@ -251,17 +259,6 @@ static inline unsigned long __phys_to_virt(phys_addr_t x)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif /* __ASSEMBLY__ */
|
|
||||||
|
|
||||||
#ifndef PHYS_OFFSET
|
|
||||||
#ifdef PLAT_PHYS_OFFSET
|
|
||||||
#define PHYS_OFFSET PLAT_PHYS_OFFSET
|
|
||||||
#else
|
|
||||||
#define PHYS_OFFSET UL(CONFIG_PHYS_OFFSET)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PFNs are used to describe any physical page; this means
|
* PFNs are used to describe any physical page; this means
|
||||||
|
|
|
@ -68,7 +68,7 @@ ENTRY(stext)
|
||||||
|
|
||||||
#ifdef CONFIG_ARM_MPU
|
#ifdef CONFIG_ARM_MPU
|
||||||
/* Calculate the size of a region covering just the kernel */
|
/* Calculate the size of a region covering just the kernel */
|
||||||
ldr r5, =PHYS_OFFSET @ Region start: PHYS_OFFSET
|
ldr r5, =PLAT_PHYS_OFFSET @ Region start: PHYS_OFFSET
|
||||||
ldr r6, =(_end) @ Cover whole kernel
|
ldr r6, =(_end) @ Cover whole kernel
|
||||||
sub r6, r6, r5 @ Minimum size of region to map
|
sub r6, r6, r5 @ Minimum size of region to map
|
||||||
clz r6, r6 @ Region size must be 2^N...
|
clz r6, r6 @ Region size must be 2^N...
|
||||||
|
@ -213,7 +213,7 @@ ENTRY(__setup_mpu)
|
||||||
set_region_nr r0, #MPU_RAM_REGION
|
set_region_nr r0, #MPU_RAM_REGION
|
||||||
isb
|
isb
|
||||||
/* Full access from PL0, PL1, shared for CONFIG_SMP, cacheable */
|
/* Full access from PL0, PL1, shared for CONFIG_SMP, cacheable */
|
||||||
ldr r0, =PHYS_OFFSET @ RAM starts at PHYS_OFFSET
|
ldr r0, =PLAT_PHYS_OFFSET @ RAM starts at PHYS_OFFSET
|
||||||
ldr r5,=(MPU_AP_PL1RW_PL0RW | MPU_RGN_NORMAL)
|
ldr r5,=(MPU_AP_PL1RW_PL0RW | MPU_RGN_NORMAL)
|
||||||
|
|
||||||
setup_region r0, r5, r6, MPU_DATA_SIDE @ PHYS_OFFSET, shared, enabled
|
setup_region r0, r5, r6, MPU_DATA_SIDE @ PHYS_OFFSET, shared, enabled
|
||||||
|
|
|
@ -110,7 +110,7 @@ ENTRY(stext)
|
||||||
sub r4, r3, r4 @ (PHYS_OFFSET - PAGE_OFFSET)
|
sub r4, r3, r4 @ (PHYS_OFFSET - PAGE_OFFSET)
|
||||||
add r8, r8, r4 @ PHYS_OFFSET
|
add r8, r8, r4 @ PHYS_OFFSET
|
||||||
#else
|
#else
|
||||||
ldr r8, =PHYS_OFFSET @ always constant in this case
|
ldr r8, =PLAT_PHYS_OFFSET @ always constant in this case
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -404,6 +404,7 @@ EXPORT_SYMBOL(dump_fpu);
|
||||||
unsigned long get_wchan(struct task_struct *p)
|
unsigned long get_wchan(struct task_struct *p)
|
||||||
{
|
{
|
||||||
struct stackframe frame;
|
struct stackframe frame;
|
||||||
|
unsigned long stack_page;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
if (!p || p == current || p->state == TASK_RUNNING)
|
if (!p || p == current || p->state == TASK_RUNNING)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -412,9 +413,11 @@ unsigned long get_wchan(struct task_struct *p)
|
||||||
frame.sp = thread_saved_sp(p);
|
frame.sp = thread_saved_sp(p);
|
||||||
frame.lr = 0; /* recovered from the stack */
|
frame.lr = 0; /* recovered from the stack */
|
||||||
frame.pc = thread_saved_pc(p);
|
frame.pc = thread_saved_pc(p);
|
||||||
|
stack_page = (unsigned long)task_stack_page(p);
|
||||||
do {
|
do {
|
||||||
int ret = unwind_frame(&frame);
|
if (frame.sp < stack_page ||
|
||||||
if (ret < 0)
|
frame.sp >= stack_page + THREAD_SIZE ||
|
||||||
|
unwind_frame(&frame) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (!in_sched_functions(frame.pc))
|
if (!in_sched_functions(frame.pc))
|
||||||
return frame.pc;
|
return frame.pc;
|
||||||
|
|
|
@ -873,8 +873,6 @@ void __init setup_arch(char **cmdline_p)
|
||||||
machine_desc = mdesc;
|
machine_desc = mdesc;
|
||||||
machine_name = mdesc->name;
|
machine_name = mdesc->name;
|
||||||
|
|
||||||
setup_dma_zone(mdesc);
|
|
||||||
|
|
||||||
if (mdesc->reboot_mode != REBOOT_HARD)
|
if (mdesc->reboot_mode != REBOOT_HARD)
|
||||||
reboot_mode = mdesc->reboot_mode;
|
reboot_mode = mdesc->reboot_mode;
|
||||||
|
|
||||||
|
@ -892,6 +890,7 @@ void __init setup_arch(char **cmdline_p)
|
||||||
sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL);
|
sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL);
|
||||||
|
|
||||||
early_paging_init(mdesc, lookup_processor_type(read_cpuid_id()));
|
early_paging_init(mdesc, lookup_processor_type(read_cpuid_id()));
|
||||||
|
setup_dma_zone(mdesc);
|
||||||
sanity_check_meminfo();
|
sanity_check_meminfo();
|
||||||
arm_memblock_init(&meminfo, mdesc);
|
arm_memblock_init(&meminfo, mdesc);
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ int notrace unwind_frame(struct stackframe *frame)
|
||||||
high = ALIGN(low, THREAD_SIZE);
|
high = ALIGN(low, THREAD_SIZE);
|
||||||
|
|
||||||
/* check current frame pointer is within bounds */
|
/* check current frame pointer is within bounds */
|
||||||
if (fp < (low + 12) || fp + 4 >= high)
|
if (fp < low + 12 || fp > high - 4)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/* restore the registers from the stack frame */
|
/* restore the registers from the stack frame */
|
||||||
|
|
|
@ -509,9 +509,10 @@ static inline int
|
||||||
__do_cache_op(unsigned long start, unsigned long end)
|
__do_cache_op(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
unsigned long chunk = PAGE_SIZE;
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
unsigned long chunk = min(PAGE_SIZE, end - start);
|
||||||
|
|
||||||
if (signal_pending(current)) {
|
if (signal_pending(current)) {
|
||||||
struct thread_info *ti = current_thread_info();
|
struct thread_info *ti = current_thread_info();
|
||||||
|
|
||||||
|
|
|
@ -487,7 +487,7 @@ int __init da8xx_register_emac(void)
|
||||||
|
|
||||||
static struct resource da830_mcasp1_resources[] = {
|
static struct resource da830_mcasp1_resources[] = {
|
||||||
{
|
{
|
||||||
.name = "mcasp1",
|
.name = "mpu",
|
||||||
.start = DAVINCI_DA830_MCASP1_REG_BASE,
|
.start = DAVINCI_DA830_MCASP1_REG_BASE,
|
||||||
.end = DAVINCI_DA830_MCASP1_REG_BASE + (SZ_1K * 12) - 1,
|
.end = DAVINCI_DA830_MCASP1_REG_BASE + (SZ_1K * 12) - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
|
@ -515,7 +515,7 @@ static struct platform_device da830_mcasp1_device = {
|
||||||
|
|
||||||
static struct resource da850_mcasp_resources[] = {
|
static struct resource da850_mcasp_resources[] = {
|
||||||
{
|
{
|
||||||
.name = "mcasp",
|
.name = "mpu",
|
||||||
.start = DAVINCI_DA8XX_MCASP0_REG_BASE,
|
.start = DAVINCI_DA8XX_MCASP0_REG_BASE,
|
||||||
.end = DAVINCI_DA8XX_MCASP0_REG_BASE + (SZ_1K * 12) - 1,
|
.end = DAVINCI_DA8XX_MCASP0_REG_BASE + (SZ_1K * 12) - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
|
|
|
@ -641,6 +641,7 @@ static struct platform_device dm355_edma_device = {
|
||||||
|
|
||||||
static struct resource dm355_asp1_resources[] = {
|
static struct resource dm355_asp1_resources[] = {
|
||||||
{
|
{
|
||||||
|
.name = "mpu",
|
||||||
.start = DAVINCI_ASP1_BASE,
|
.start = DAVINCI_ASP1_BASE,
|
||||||
.end = DAVINCI_ASP1_BASE + SZ_8K - 1,
|
.end = DAVINCI_ASP1_BASE + SZ_8K - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
|
@ -906,7 +907,7 @@ static struct davinci_gpio_platform_data dm355_gpio_platform_data = {
|
||||||
int __init dm355_gpio_register(void)
|
int __init dm355_gpio_register(void)
|
||||||
{
|
{
|
||||||
return davinci_gpio_register(dm355_gpio_resources,
|
return davinci_gpio_register(dm355_gpio_resources,
|
||||||
sizeof(dm355_gpio_resources),
|
ARRAY_SIZE(dm355_gpio_resources),
|
||||||
&dm355_gpio_platform_data);
|
&dm355_gpio_platform_data);
|
||||||
}
|
}
|
||||||
/*----------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
|
@ -720,7 +720,7 @@ static struct davinci_gpio_platform_data dm365_gpio_platform_data = {
|
||||||
int __init dm365_gpio_register(void)
|
int __init dm365_gpio_register(void)
|
||||||
{
|
{
|
||||||
return davinci_gpio_register(dm365_gpio_resources,
|
return davinci_gpio_register(dm365_gpio_resources,
|
||||||
sizeof(dm365_gpio_resources),
|
ARRAY_SIZE(dm365_gpio_resources),
|
||||||
&dm365_gpio_platform_data);
|
&dm365_gpio_platform_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -942,6 +942,7 @@ static struct platform_device dm365_edma_device = {
|
||||||
|
|
||||||
static struct resource dm365_asp_resources[] = {
|
static struct resource dm365_asp_resources[] = {
|
||||||
{
|
{
|
||||||
|
.name = "mpu",
|
||||||
.start = DAVINCI_DM365_ASP0_BASE,
|
.start = DAVINCI_DM365_ASP0_BASE,
|
||||||
.end = DAVINCI_DM365_ASP0_BASE + SZ_8K - 1,
|
.end = DAVINCI_DM365_ASP0_BASE + SZ_8K - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
|
|
|
@ -572,6 +572,7 @@ static struct platform_device dm644x_edma_device = {
|
||||||
/* DM6446 EVM uses ASP0; line-out is a pair of RCA jacks */
|
/* DM6446 EVM uses ASP0; line-out is a pair of RCA jacks */
|
||||||
static struct resource dm644x_asp_resources[] = {
|
static struct resource dm644x_asp_resources[] = {
|
||||||
{
|
{
|
||||||
|
.name = "mpu",
|
||||||
.start = DAVINCI_ASP0_BASE,
|
.start = DAVINCI_ASP0_BASE,
|
||||||
.end = DAVINCI_ASP0_BASE + SZ_8K - 1,
|
.end = DAVINCI_ASP0_BASE + SZ_8K - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
|
@ -792,7 +793,7 @@ static struct davinci_gpio_platform_data dm644_gpio_platform_data = {
|
||||||
int __init dm644x_gpio_register(void)
|
int __init dm644x_gpio_register(void)
|
||||||
{
|
{
|
||||||
return davinci_gpio_register(dm644_gpio_resources,
|
return davinci_gpio_register(dm644_gpio_resources,
|
||||||
sizeof(dm644_gpio_resources),
|
ARRAY_SIZE(dm644_gpio_resources),
|
||||||
&dm644_gpio_platform_data);
|
&dm644_gpio_platform_data);
|
||||||
}
|
}
|
||||||
/*----------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
|
@ -621,7 +621,7 @@ static struct platform_device dm646x_edma_device = {
|
||||||
|
|
||||||
static struct resource dm646x_mcasp0_resources[] = {
|
static struct resource dm646x_mcasp0_resources[] = {
|
||||||
{
|
{
|
||||||
.name = "mcasp0",
|
.name = "mpu",
|
||||||
.start = DAVINCI_DM646X_MCASP0_REG_BASE,
|
.start = DAVINCI_DM646X_MCASP0_REG_BASE,
|
||||||
.end = DAVINCI_DM646X_MCASP0_REG_BASE + (SZ_1K << 1) - 1,
|
.end = DAVINCI_DM646X_MCASP0_REG_BASE + (SZ_1K << 1) - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
|
@ -641,7 +641,7 @@ static struct resource dm646x_mcasp0_resources[] = {
|
||||||
|
|
||||||
static struct resource dm646x_mcasp1_resources[] = {
|
static struct resource dm646x_mcasp1_resources[] = {
|
||||||
{
|
{
|
||||||
.name = "mcasp1",
|
.name = "mpu",
|
||||||
.start = DAVINCI_DM646X_MCASP1_REG_BASE,
|
.start = DAVINCI_DM646X_MCASP1_REG_BASE,
|
||||||
.end = DAVINCI_DM646X_MCASP1_REG_BASE + (SZ_1K << 1) - 1,
|
.end = DAVINCI_DM646X_MCASP1_REG_BASE + (SZ_1K << 1) - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
|
@ -769,7 +769,7 @@ static struct davinci_gpio_platform_data dm646x_gpio_platform_data = {
|
||||||
int __init dm646x_gpio_register(void)
|
int __init dm646x_gpio_register(void)
|
||||||
{
|
{
|
||||||
return davinci_gpio_register(dm646x_gpio_resources,
|
return davinci_gpio_register(dm646x_gpio_resources,
|
||||||
sizeof(dm646x_gpio_resources),
|
ARRAY_SIZE(dm646x_gpio_resources),
|
||||||
&dm646x_gpio_platform_data);
|
&dm646x_gpio_platform_data);
|
||||||
}
|
}
|
||||||
/*----------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
|
@ -85,6 +85,7 @@ config FOOTBRIDGE
|
||||||
# Footbridge in host mode
|
# Footbridge in host mode
|
||||||
config FOOTBRIDGE_HOST
|
config FOOTBRIDGE_HOST
|
||||||
bool
|
bool
|
||||||
|
select ARCH_MIGHT_HAVE_PC_SERIO
|
||||||
|
|
||||||
# Footbridge in addin mode
|
# Footbridge in addin mode
|
||||||
config FOOTBRIDGE_ADDIN
|
config FOOTBRIDGE_ADDIN
|
||||||
|
|
|
@ -17,12 +17,15 @@
|
||||||
#include <linux/clkdev.h>
|
#include <linux/clkdev.h>
|
||||||
#include <linux/clocksource.h>
|
#include <linux/clocksource.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <linux/input.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/irqchip.h>
|
#include <linux/irqchip.h>
|
||||||
|
#include <linux/mailbox.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
#include <linux/of_irq.h>
|
#include <linux/of_irq.h>
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
|
#include <linux/reboot.h>
|
||||||
#include <linux/amba/bus.h>
|
#include <linux/amba/bus.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
|
||||||
|
@ -130,6 +133,24 @@ static struct platform_device highbank_cpuidle_device = {
|
||||||
.name = "cpuidle-calxeda",
|
.name = "cpuidle-calxeda",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int hb_keys_notifier(struct notifier_block *nb, unsigned long event, void *data)
|
||||||
|
{
|
||||||
|
u32 key = *(u32 *)data;
|
||||||
|
|
||||||
|
if (event != 0x1000)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (key == KEY_POWER)
|
||||||
|
orderly_poweroff(false);
|
||||||
|
else if (key == 0xffff)
|
||||||
|
ctrl_alt_del();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
static struct notifier_block hb_keys_nb = {
|
||||||
|
.notifier_call = hb_keys_notifier,
|
||||||
|
};
|
||||||
|
|
||||||
static void __init highbank_init(void)
|
static void __init highbank_init(void)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
|
@ -145,6 +166,8 @@ static void __init highbank_init(void)
|
||||||
bus_register_notifier(&platform_bus_type, &highbank_platform_nb);
|
bus_register_notifier(&platform_bus_type, &highbank_platform_nb);
|
||||||
bus_register_notifier(&amba_bustype, &highbank_amba_nb);
|
bus_register_notifier(&amba_bustype, &highbank_amba_nb);
|
||||||
|
|
||||||
|
pl320_ipc_register_notifier(&hb_keys_nb);
|
||||||
|
|
||||||
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
|
of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
|
||||||
|
|
||||||
if (psci_ops.cpu_suspend)
|
if (psci_ops.cpu_suspend)
|
||||||
|
|
|
@ -53,7 +53,7 @@ static const struct imxi2c_platform_data
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TSC2007_IRQGPIO IMX_GPIO_NR(3, 2)
|
#define TSC2007_IRQGPIO IMX_GPIO_NR(3, 2)
|
||||||
static int tsc2007_get_pendown_state(void)
|
static int tsc2007_get_pendown_state(struct device *dev)
|
||||||
{
|
{
|
||||||
return !gpio_get_value(TSC2007_IRQGPIO);
|
return !gpio_get_value(TSC2007_IRQGPIO);
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,7 +121,7 @@ static const struct imxuart_platform_data uart_pdata __initconst = {
|
||||||
.flags = IMXUART_HAVE_RTSCTS,
|
.flags = IMXUART_HAVE_RTSCTS,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int tsc2007_get_pendown_state(void)
|
static int tsc2007_get_pendown_state(struct device *dev)
|
||||||
{
|
{
|
||||||
if (mx51_revision() < IMX_CHIP_REVISION_3_0)
|
if (mx51_revision() < IMX_CHIP_REVISION_3_0)
|
||||||
return !gpio_get_value(TSC2007_IRQGPIO_REV2);
|
return !gpio_get_value(TSC2007_IRQGPIO_REV2);
|
||||||
|
|
|
@ -131,6 +131,24 @@ DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)")
|
||||||
.dt_compat = omap3_gp_boards_compat,
|
.dt_compat = omap3_gp_boards_compat,
|
||||||
.restart = omap3xxx_restart,
|
.restart = omap3xxx_restart,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
|
||||||
|
static const char *am3517_boards_compat[] __initdata = {
|
||||||
|
"ti,am3517",
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
DT_MACHINE_START(AM3517_DT, "Generic AM3517 (Flattened Device Tree)")
|
||||||
|
.reserve = omap_reserve,
|
||||||
|
.map_io = omap3_map_io,
|
||||||
|
.init_early = am35xx_init_early,
|
||||||
|
.init_irq = omap_intc_of_init,
|
||||||
|
.handle_irq = omap3_intc_handle_irq,
|
||||||
|
.init_machine = omap_generic_init,
|
||||||
|
.init_late = omap3_init_late,
|
||||||
|
.init_time = omap3_gptimer_timer_init,
|
||||||
|
.dt_compat = am3517_boards_compat,
|
||||||
|
.restart = omap3xxx_restart,
|
||||||
|
MACHINE_END
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SOC_AM33XX
|
#ifdef CONFIG_SOC_AM33XX
|
||||||
|
|
|
@ -183,6 +183,10 @@ static int omap_device_build_from_dt(struct platform_device *pdev)
|
||||||
odbfd_exit1:
|
odbfd_exit1:
|
||||||
kfree(hwmods);
|
kfree(hwmods);
|
||||||
odbfd_exit:
|
odbfd_exit:
|
||||||
|
/* if data/we are at fault.. load up a fail handler */
|
||||||
|
if (ret)
|
||||||
|
pdev->dev.pm_domain = &omap_device_fail_pm_domain;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -604,6 +608,19 @@ static int _od_runtime_resume(struct device *dev)
|
||||||
|
|
||||||
return pm_generic_runtime_resume(dev);
|
return pm_generic_runtime_resume(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _od_fail_runtime_suspend(struct device *dev)
|
||||||
|
{
|
||||||
|
dev_warn(dev, "%s: FIXME: missing hwmod/omap_dev info\n", __func__);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _od_fail_runtime_resume(struct device *dev)
|
||||||
|
{
|
||||||
|
dev_warn(dev, "%s: FIXME: missing hwmod/omap_dev info\n", __func__);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SUSPEND
|
#ifdef CONFIG_SUSPEND
|
||||||
|
@ -657,6 +674,13 @@ static int _od_resume_noirq(struct device *dev)
|
||||||
#define _od_resume_noirq NULL
|
#define _od_resume_noirq NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct dev_pm_domain omap_device_fail_pm_domain = {
|
||||||
|
.ops = {
|
||||||
|
SET_RUNTIME_PM_OPS(_od_fail_runtime_suspend,
|
||||||
|
_od_fail_runtime_resume, NULL)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
struct dev_pm_domain omap_device_pm_domain = {
|
struct dev_pm_domain omap_device_pm_domain = {
|
||||||
.ops = {
|
.ops = {
|
||||||
SET_RUNTIME_PM_OPS(_od_runtime_suspend, _od_runtime_resume,
|
SET_RUNTIME_PM_OPS(_od_runtime_suspend, _od_runtime_resume,
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "omap_hwmod.h"
|
#include "omap_hwmod.h"
|
||||||
|
|
||||||
extern struct dev_pm_domain omap_device_pm_domain;
|
extern struct dev_pm_domain omap_device_pm_domain;
|
||||||
|
extern struct dev_pm_domain omap_device_fail_pm_domain;
|
||||||
|
|
||||||
/* omap_device._state values */
|
/* omap_device._state values */
|
||||||
#define OMAP_DEVICE_STATE_UNKNOWN 0
|
#define OMAP_DEVICE_STATE_UNKNOWN 0
|
||||||
|
|
|
@ -399,7 +399,7 @@ static int _set_clockactivity(struct omap_hwmod *oh, u8 clockact, u32 *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _set_softreset: set OCP_SYSCONFIG.CLOCKACTIVITY bits in @v
|
* _set_softreset: set OCP_SYSCONFIG.SOFTRESET bit in @v
|
||||||
* @oh: struct omap_hwmod *
|
* @oh: struct omap_hwmod *
|
||||||
* @v: pointer to register contents to modify
|
* @v: pointer to register contents to modify
|
||||||
*
|
*
|
||||||
|
@ -426,6 +426,36 @@ static int _set_softreset(struct omap_hwmod *oh, u32 *v)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _clear_softreset: clear OCP_SYSCONFIG.SOFTRESET bit in @v
|
||||||
|
* @oh: struct omap_hwmod *
|
||||||
|
* @v: pointer to register contents to modify
|
||||||
|
*
|
||||||
|
* Clear the SOFTRESET bit in @v for hwmod @oh. Returns -EINVAL upon
|
||||||
|
* error or 0 upon success.
|
||||||
|
*/
|
||||||
|
static int _clear_softreset(struct omap_hwmod *oh, u32 *v)
|
||||||
|
{
|
||||||
|
u32 softrst_mask;
|
||||||
|
|
||||||
|
if (!oh->class->sysc ||
|
||||||
|
!(oh->class->sysc->sysc_flags & SYSC_HAS_SOFTRESET))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (!oh->class->sysc->sysc_fields) {
|
||||||
|
WARN(1,
|
||||||
|
"omap_hwmod: %s: sysc_fields absent for sysconfig class\n",
|
||||||
|
oh->name);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
softrst_mask = (0x1 << oh->class->sysc->sysc_fields->srst_shift);
|
||||||
|
|
||||||
|
*v &= ~softrst_mask;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _wait_softreset_complete - wait for an OCP softreset to complete
|
* _wait_softreset_complete - wait for an OCP softreset to complete
|
||||||
* @oh: struct omap_hwmod * to wait on
|
* @oh: struct omap_hwmod * to wait on
|
||||||
|
@ -785,6 +815,7 @@ static int _init_interface_clks(struct omap_hwmod *oh)
|
||||||
pr_warning("omap_hwmod: %s: cannot clk_get interface_clk %s\n",
|
pr_warning("omap_hwmod: %s: cannot clk_get interface_clk %s\n",
|
||||||
oh->name, os->clk);
|
oh->name, os->clk);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
os->_clk = c;
|
os->_clk = c;
|
||||||
/*
|
/*
|
||||||
|
@ -821,6 +852,7 @@ static int _init_opt_clks(struct omap_hwmod *oh)
|
||||||
pr_warning("omap_hwmod: %s: cannot clk_get opt_clk %s\n",
|
pr_warning("omap_hwmod: %s: cannot clk_get opt_clk %s\n",
|
||||||
oh->name, oc->clk);
|
oh->name, oc->clk);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
oc->_clk = c;
|
oc->_clk = c;
|
||||||
/*
|
/*
|
||||||
|
@ -1911,6 +1943,12 @@ static int _ocp_softreset(struct omap_hwmod *oh)
|
||||||
ret = _set_softreset(oh, &v);
|
ret = _set_softreset(oh, &v);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto dis_opt_clks;
|
goto dis_opt_clks;
|
||||||
|
|
||||||
|
_write_sysconfig(v, oh);
|
||||||
|
ret = _clear_softreset(oh, &v);
|
||||||
|
if (ret)
|
||||||
|
goto dis_opt_clks;
|
||||||
|
|
||||||
_write_sysconfig(v, oh);
|
_write_sysconfig(v, oh);
|
||||||
|
|
||||||
if (oh->class->sysc->srst_udelay)
|
if (oh->class->sysc->srst_udelay)
|
||||||
|
@ -2326,38 +2364,80 @@ static int _shutdown(struct omap_hwmod *oh)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int of_dev_find_hwmod(struct device_node *np,
|
||||||
|
struct omap_hwmod *oh)
|
||||||
|
{
|
||||||
|
int count, i, res;
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
count = of_property_count_strings(np, "ti,hwmods");
|
||||||
|
if (count < 1)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
res = of_property_read_string_index(np, "ti,hwmods",
|
||||||
|
i, &p);
|
||||||
|
if (res)
|
||||||
|
continue;
|
||||||
|
if (!strcmp(p, oh->name)) {
|
||||||
|
pr_debug("omap_hwmod: dt %s[%i] uses hwmod %s\n",
|
||||||
|
np->name, i, oh->name);
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_dev_hwmod_lookup - look up needed hwmod from dt blob
|
* of_dev_hwmod_lookup - look up needed hwmod from dt blob
|
||||||
* @np: struct device_node *
|
* @np: struct device_node *
|
||||||
* @oh: struct omap_hwmod *
|
* @oh: struct omap_hwmod *
|
||||||
|
* @index: index of the entry found
|
||||||
|
* @found: struct device_node * found or NULL
|
||||||
*
|
*
|
||||||
* Parse the dt blob and find out needed hwmod. Recursive function is
|
* Parse the dt blob and find out needed hwmod. Recursive function is
|
||||||
* implemented to take care hierarchical dt blob parsing.
|
* implemented to take care hierarchical dt blob parsing.
|
||||||
* Return: The device node on success or NULL on failure.
|
* Return: Returns 0 on success, -ENODEV when not found.
|
||||||
*/
|
*/
|
||||||
static struct device_node *of_dev_hwmod_lookup(struct device_node *np,
|
static int of_dev_hwmod_lookup(struct device_node *np,
|
||||||
struct omap_hwmod *oh)
|
struct omap_hwmod *oh,
|
||||||
|
int *index,
|
||||||
|
struct device_node **found)
|
||||||
{
|
{
|
||||||
struct device_node *np0 = NULL, *np1 = NULL;
|
struct device_node *np0 = NULL;
|
||||||
const char *p;
|
int res;
|
||||||
|
|
||||||
|
res = of_dev_find_hwmod(np, oh);
|
||||||
|
if (res >= 0) {
|
||||||
|
*found = np;
|
||||||
|
*index = res;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
for_each_child_of_node(np, np0) {
|
for_each_child_of_node(np, np0) {
|
||||||
if (of_find_property(np0, "ti,hwmods", NULL)) {
|
struct device_node *fc;
|
||||||
p = of_get_property(np0, "ti,hwmods", NULL);
|
int i;
|
||||||
if (!strcmp(p, oh->name))
|
|
||||||
return np0;
|
res = of_dev_hwmod_lookup(np0, oh, &i, &fc);
|
||||||
np1 = of_dev_hwmod_lookup(np0, oh);
|
if (res == 0) {
|
||||||
if (np1)
|
*found = fc;
|
||||||
return np1;
|
*index = i;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
|
||||||
|
*found = NULL;
|
||||||
|
*index = 0;
|
||||||
|
|
||||||
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _init_mpu_rt_base - populate the virtual address for a hwmod
|
* _init_mpu_rt_base - populate the virtual address for a hwmod
|
||||||
* @oh: struct omap_hwmod * to locate the virtual address
|
* @oh: struct omap_hwmod * to locate the virtual address
|
||||||
* @data: (unused, caller should pass NULL)
|
* @data: (unused, caller should pass NULL)
|
||||||
|
* @index: index of the reg entry iospace in device tree
|
||||||
* @np: struct device_node * of the IP block's device node in the DT data
|
* @np: struct device_node * of the IP block's device node in the DT data
|
||||||
*
|
*
|
||||||
* Cache the virtual address used by the MPU to access this IP block's
|
* Cache the virtual address used by the MPU to access this IP block's
|
||||||
|
@ -2368,7 +2448,7 @@ static struct device_node *of_dev_hwmod_lookup(struct device_node *np,
|
||||||
* -ENXIO on absent or invalid register target address space.
|
* -ENXIO on absent or invalid register target address space.
|
||||||
*/
|
*/
|
||||||
static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data,
|
static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data,
|
||||||
struct device_node *np)
|
int index, struct device_node *np)
|
||||||
{
|
{
|
||||||
struct omap_hwmod_addr_space *mem;
|
struct omap_hwmod_addr_space *mem;
|
||||||
void __iomem *va_start = NULL;
|
void __iomem *va_start = NULL;
|
||||||
|
@ -2390,13 +2470,17 @@ static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data,
|
||||||
if (!np)
|
if (!np)
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
|
||||||
va_start = of_iomap(np, oh->mpu_rt_idx);
|
va_start = of_iomap(np, index + oh->mpu_rt_idx);
|
||||||
} else {
|
} else {
|
||||||
va_start = ioremap(mem->pa_start, mem->pa_end - mem->pa_start);
|
va_start = ioremap(mem->pa_start, mem->pa_end - mem->pa_start);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!va_start) {
|
if (!va_start) {
|
||||||
pr_err("omap_hwmod: %s: Could not ioremap\n", oh->name);
|
if (mem)
|
||||||
|
pr_err("omap_hwmod: %s: Could not ioremap\n", oh->name);
|
||||||
|
else
|
||||||
|
pr_err("omap_hwmod: %s: Missing dt reg%i for %s\n",
|
||||||
|
oh->name, index, np->full_name);
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2422,17 +2506,29 @@ static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data,
|
||||||
*/
|
*/
|
||||||
static int __init _init(struct omap_hwmod *oh, void *data)
|
static int __init _init(struct omap_hwmod *oh, void *data)
|
||||||
{
|
{
|
||||||
int r;
|
int r, index;
|
||||||
struct device_node *np = NULL;
|
struct device_node *np = NULL;
|
||||||
|
|
||||||
if (oh->_state != _HWMOD_STATE_REGISTERED)
|
if (oh->_state != _HWMOD_STATE_REGISTERED)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (of_have_populated_dt())
|
if (of_have_populated_dt()) {
|
||||||
np = of_dev_hwmod_lookup(of_find_node_by_name(NULL, "ocp"), oh);
|
struct device_node *bus;
|
||||||
|
|
||||||
|
bus = of_find_node_by_name(NULL, "ocp");
|
||||||
|
if (!bus)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
r = of_dev_hwmod_lookup(bus, oh, &index, &np);
|
||||||
|
if (r)
|
||||||
|
pr_debug("omap_hwmod: %s missing dt data\n", oh->name);
|
||||||
|
else if (np && index)
|
||||||
|
pr_warn("omap_hwmod: %s using broken dt data from %s\n",
|
||||||
|
oh->name, np->name);
|
||||||
|
}
|
||||||
|
|
||||||
if (oh->class->sysc) {
|
if (oh->class->sysc) {
|
||||||
r = _init_mpu_rt_base(oh, NULL, np);
|
r = _init_mpu_rt_base(oh, NULL, index, np);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
WARN(1, "omap_hwmod: %s: doesn't have mpu register target base\n",
|
WARN(1, "omap_hwmod: %s: doesn't have mpu register target base\n",
|
||||||
oh->name);
|
oh->name);
|
||||||
|
@ -3169,6 +3265,11 @@ int omap_hwmod_softreset(struct omap_hwmod *oh)
|
||||||
goto error;
|
goto error;
|
||||||
_write_sysconfig(v, oh);
|
_write_sysconfig(v, oh);
|
||||||
|
|
||||||
|
ret = _clear_softreset(oh, &v);
|
||||||
|
if (ret)
|
||||||
|
goto error;
|
||||||
|
_write_sysconfig(v, oh);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1943,7 +1943,8 @@ static struct omap_hwmod_class_sysconfig omap3xxx_usb_host_hs_sysc = {
|
||||||
.syss_offs = 0x0014,
|
.syss_offs = 0x0014,
|
||||||
.sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
|
.sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
|
||||||
SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
|
SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
|
||||||
SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
|
SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
|
||||||
|
SYSS_HAS_RESET_STATUS),
|
||||||
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
||||||
MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
|
MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
|
||||||
.sysc_fields = &omap_hwmod_sysc_type1,
|
.sysc_fields = &omap_hwmod_sysc_type1,
|
||||||
|
@ -2021,15 +2022,7 @@ static struct omap_hwmod omap3xxx_usb_host_hs_hwmod = {
|
||||||
* hence HWMOD_SWSUP_MSTANDBY
|
* hence HWMOD_SWSUP_MSTANDBY
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
.flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
|
||||||
* During system boot; If the hwmod framework resets the module
|
|
||||||
* the module will have smart idle settings; which can lead to deadlock
|
|
||||||
* (above Errata Id:i660); so, dont reset the module during boot;
|
|
||||||
* Use HWMOD_INIT_NO_RESET.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY |
|
|
||||||
HWMOD_INIT_NO_RESET,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -2937,7 +2937,7 @@ static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = {
|
||||||
.sysc_offs = 0x0010,
|
.sysc_offs = 0x0010,
|
||||||
.syss_offs = 0x0014,
|
.syss_offs = 0x0014,
|
||||||
.sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
|
.sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
|
||||||
SYSC_HAS_SOFTRESET),
|
SYSC_HAS_SOFTRESET | SYSC_HAS_RESET_STATUS),
|
||||||
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
||||||
SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
|
SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
|
||||||
MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
|
MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
|
||||||
|
@ -3001,15 +3001,7 @@ static struct omap_hwmod omap44xx_usb_host_hs_hwmod = {
|
||||||
* hence HWMOD_SWSUP_MSTANDBY
|
* hence HWMOD_SWSUP_MSTANDBY
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
.flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
|
||||||
* During system boot; If the hwmod framework resets the module
|
|
||||||
* the module will have smart idle settings; which can lead to deadlock
|
|
||||||
* (above Errata Id:i660); so, dont reset the module during boot;
|
|
||||||
* Use HWMOD_INIT_NO_RESET.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY |
|
|
||||||
HWMOD_INIT_NO_RESET,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1544,7 +1544,8 @@ static struct omap_hwmod_class_sysconfig omap54xx_usb_host_hs_sysc = {
|
||||||
.rev_offs = 0x0000,
|
.rev_offs = 0x0000,
|
||||||
.sysc_offs = 0x0010,
|
.sysc_offs = 0x0010,
|
||||||
.sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
|
.sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
|
||||||
SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
|
SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
|
||||||
|
SYSC_HAS_RESET_STATUS),
|
||||||
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
||||||
SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
|
SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
|
||||||
MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
|
MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
|
||||||
|
@ -1598,15 +1599,7 @@ static struct omap_hwmod omap54xx_usb_host_hs_hwmod = {
|
||||||
* hence HWMOD_SWSUP_MSTANDBY
|
* hence HWMOD_SWSUP_MSTANDBY
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
.flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
|
||||||
* During system boot; If the hwmod framework resets the module
|
|
||||||
* the module will have smart idle settings; which can lead to deadlock
|
|
||||||
* (above Errata Id:i660); so, dont reset the module during boot;
|
|
||||||
* Use HWMOD_INIT_NO_RESET.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.flags = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY |
|
|
||||||
HWMOD_INIT_NO_RESET,
|
|
||||||
.main_clk = "l3init_60m_fclk",
|
.main_clk = "l3init_60m_fclk",
|
||||||
.prcm = {
|
.prcm = {
|
||||||
.omap4 = {
|
.omap4 = {
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
#include <mach/regs-ost.h>
|
#include <mach/regs-ost.h>
|
||||||
#include <mach/reset.h>
|
#include <mach/reset.h>
|
||||||
|
#include <mach/smemc.h>
|
||||||
|
|
||||||
unsigned int reset_status;
|
unsigned int reset_status;
|
||||||
EXPORT_SYMBOL(reset_status);
|
EXPORT_SYMBOL(reset_status);
|
||||||
|
@ -81,6 +82,12 @@ static void do_hw_reset(void)
|
||||||
writel_relaxed(OSSR_M3, OSSR);
|
writel_relaxed(OSSR_M3, OSSR);
|
||||||
/* ... in 100 ms */
|
/* ... in 100 ms */
|
||||||
writel_relaxed(readl_relaxed(OSCR) + 368640, OSMR3);
|
writel_relaxed(readl_relaxed(OSCR) + 368640, OSMR3);
|
||||||
|
/*
|
||||||
|
* SDRAM hangs on watchdog reset on Marvell PXA270 (erratum 71)
|
||||||
|
* we put SDRAM into self-refresh to prevent that
|
||||||
|
*/
|
||||||
|
while (1)
|
||||||
|
writel_relaxed(MDREFR_SLFRSH, MDREFR);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pxa_restart(enum reboot_mode mode, const char *cmd)
|
void pxa_restart(enum reboot_mode mode, const char *cmd)
|
||||||
|
@ -104,4 +111,3 @@ void pxa_restart(enum reboot_mode mode, const char *cmd)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -425,57 +425,57 @@ static struct platform_device tosa_power_device = {
|
||||||
* Tosa Keyboard
|
* Tosa Keyboard
|
||||||
*/
|
*/
|
||||||
static const uint32_t tosakbd_keymap[] = {
|
static const uint32_t tosakbd_keymap[] = {
|
||||||
KEY(0, 2, KEY_W),
|
KEY(0, 1, KEY_W),
|
||||||
KEY(0, 6, KEY_K),
|
KEY(0, 5, KEY_K),
|
||||||
KEY(0, 7, KEY_BACKSPACE),
|
KEY(0, 6, KEY_BACKSPACE),
|
||||||
KEY(0, 8, KEY_P),
|
KEY(0, 7, KEY_P),
|
||||||
KEY(1, 1, KEY_Q),
|
KEY(1, 0, KEY_Q),
|
||||||
KEY(1, 2, KEY_E),
|
KEY(1, 1, KEY_E),
|
||||||
KEY(1, 3, KEY_T),
|
KEY(1, 2, KEY_T),
|
||||||
KEY(1, 4, KEY_Y),
|
KEY(1, 3, KEY_Y),
|
||||||
KEY(1, 6, KEY_O),
|
KEY(1, 5, KEY_O),
|
||||||
KEY(1, 7, KEY_I),
|
KEY(1, 6, KEY_I),
|
||||||
KEY(1, 8, KEY_COMMA),
|
KEY(1, 7, KEY_COMMA),
|
||||||
KEY(2, 1, KEY_A),
|
KEY(2, 0, KEY_A),
|
||||||
KEY(2, 2, KEY_D),
|
KEY(2, 1, KEY_D),
|
||||||
KEY(2, 3, KEY_G),
|
KEY(2, 2, KEY_G),
|
||||||
KEY(2, 4, KEY_U),
|
KEY(2, 3, KEY_U),
|
||||||
KEY(2, 6, KEY_L),
|
KEY(2, 5, KEY_L),
|
||||||
KEY(2, 7, KEY_ENTER),
|
KEY(2, 6, KEY_ENTER),
|
||||||
KEY(2, 8, KEY_DOT),
|
KEY(2, 7, KEY_DOT),
|
||||||
KEY(3, 1, KEY_Z),
|
KEY(3, 0, KEY_Z),
|
||||||
KEY(3, 2, KEY_C),
|
KEY(3, 1, KEY_C),
|
||||||
KEY(3, 3, KEY_V),
|
KEY(3, 2, KEY_V),
|
||||||
KEY(3, 4, KEY_J),
|
KEY(3, 3, KEY_J),
|
||||||
KEY(3, 5, TOSA_KEY_ADDRESSBOOK),
|
KEY(3, 4, TOSA_KEY_ADDRESSBOOK),
|
||||||
KEY(3, 6, TOSA_KEY_CANCEL),
|
KEY(3, 5, TOSA_KEY_CANCEL),
|
||||||
KEY(3, 7, TOSA_KEY_CENTER),
|
KEY(3, 6, TOSA_KEY_CENTER),
|
||||||
KEY(3, 8, TOSA_KEY_OK),
|
KEY(3, 7, TOSA_KEY_OK),
|
||||||
KEY(3, 9, KEY_LEFTSHIFT),
|
KEY(3, 8, KEY_LEFTSHIFT),
|
||||||
KEY(4, 1, KEY_S),
|
KEY(4, 0, KEY_S),
|
||||||
KEY(4, 2, KEY_R),
|
KEY(4, 1, KEY_R),
|
||||||
KEY(4, 3, KEY_B),
|
KEY(4, 2, KEY_B),
|
||||||
KEY(4, 4, KEY_N),
|
KEY(4, 3, KEY_N),
|
||||||
KEY(4, 5, TOSA_KEY_CALENDAR),
|
KEY(4, 4, TOSA_KEY_CALENDAR),
|
||||||
KEY(4, 6, TOSA_KEY_HOMEPAGE),
|
KEY(4, 5, TOSA_KEY_HOMEPAGE),
|
||||||
KEY(4, 7, KEY_LEFTCTRL),
|
KEY(4, 6, KEY_LEFTCTRL),
|
||||||
KEY(4, 8, TOSA_KEY_LIGHT),
|
KEY(4, 7, TOSA_KEY_LIGHT),
|
||||||
KEY(4, 10, KEY_RIGHTSHIFT),
|
KEY(4, 9, KEY_RIGHTSHIFT),
|
||||||
KEY(5, 1, KEY_TAB),
|
KEY(5, 0, KEY_TAB),
|
||||||
KEY(5, 2, KEY_SLASH),
|
KEY(5, 1, KEY_SLASH),
|
||||||
KEY(5, 3, KEY_H),
|
KEY(5, 2, KEY_H),
|
||||||
KEY(5, 4, KEY_M),
|
KEY(5, 3, KEY_M),
|
||||||
KEY(5, 5, TOSA_KEY_MENU),
|
KEY(5, 4, TOSA_KEY_MENU),
|
||||||
KEY(5, 7, KEY_UP),
|
KEY(5, 6, KEY_UP),
|
||||||
KEY(5, 11, TOSA_KEY_FN),
|
KEY(5, 10, TOSA_KEY_FN),
|
||||||
KEY(6, 1, KEY_X),
|
KEY(6, 0, KEY_X),
|
||||||
KEY(6, 2, KEY_F),
|
KEY(6, 1, KEY_F),
|
||||||
KEY(6, 3, KEY_SPACE),
|
KEY(6, 2, KEY_SPACE),
|
||||||
KEY(6, 4, KEY_APOSTROPHE),
|
KEY(6, 3, KEY_APOSTROPHE),
|
||||||
KEY(6, 5, TOSA_KEY_MAIL),
|
KEY(6, 4, TOSA_KEY_MAIL),
|
||||||
KEY(6, 6, KEY_LEFT),
|
KEY(6, 5, KEY_LEFT),
|
||||||
KEY(6, 7, KEY_DOWN),
|
KEY(6, 6, KEY_DOWN),
|
||||||
KEY(6, 8, KEY_RIGHT),
|
KEY(6, 7, KEY_RIGHT),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct matrix_keymap_data tosakbd_keymap_data = {
|
static struct matrix_keymap_data tosakbd_keymap_data = {
|
||||||
|
|
|
@ -198,10 +198,12 @@ void __init tegra_init_fuse(void)
|
||||||
switch (tegra_chip_id) {
|
switch (tegra_chip_id) {
|
||||||
case TEGRA20:
|
case TEGRA20:
|
||||||
tegra20_fuse_init_randomness();
|
tegra20_fuse_init_randomness();
|
||||||
|
break;
|
||||||
case TEGRA30:
|
case TEGRA30:
|
||||||
case TEGRA114:
|
case TEGRA114:
|
||||||
default:
|
default:
|
||||||
tegra30_fuse_init_randomness();
|
tegra30_fuse_init_randomness();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_info("Tegra Revision: %s SKU: %d CPU Process: %d Core Process: %d\n",
|
pr_info("Tegra Revision: %s SKU: %d CPU Process: %d Core Process: %d\n",
|
||||||
|
|
|
@ -158,13 +158,49 @@ struct dma_map_ops arm_coherent_dma_ops = {
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL(arm_coherent_dma_ops);
|
EXPORT_SYMBOL(arm_coherent_dma_ops);
|
||||||
|
|
||||||
|
static int __dma_supported(struct device *dev, u64 mask, bool warn)
|
||||||
|
{
|
||||||
|
unsigned long max_dma_pfn;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the mask allows for more memory than we can address,
|
||||||
|
* and we actually have that much memory, then we must
|
||||||
|
* indicate that DMA to this device is not supported.
|
||||||
|
*/
|
||||||
|
if (sizeof(mask) != sizeof(dma_addr_t) &&
|
||||||
|
mask > (dma_addr_t)~0 &&
|
||||||
|
dma_to_pfn(dev, ~0) < max_pfn) {
|
||||||
|
if (warn) {
|
||||||
|
dev_warn(dev, "Coherent DMA mask %#llx is larger than dma_addr_t allows\n",
|
||||||
|
mask);
|
||||||
|
dev_warn(dev, "Driver did not use or check the return value from dma_set_coherent_mask()?\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
max_dma_pfn = min(max_pfn, arm_dma_pfn_limit);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Translate the device's DMA mask to a PFN limit. This
|
||||||
|
* PFN number includes the page which we can DMA to.
|
||||||
|
*/
|
||||||
|
if (dma_to_pfn(dev, mask) < max_dma_pfn) {
|
||||||
|
if (warn)
|
||||||
|
dev_warn(dev, "Coherent DMA mask %#llx (pfn %#lx-%#lx) covers a smaller range of system memory than the DMA zone pfn 0x0-%#lx\n",
|
||||||
|
mask,
|
||||||
|
dma_to_pfn(dev, 0), dma_to_pfn(dev, mask) + 1,
|
||||||
|
max_dma_pfn + 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static u64 get_coherent_dma_mask(struct device *dev)
|
static u64 get_coherent_dma_mask(struct device *dev)
|
||||||
{
|
{
|
||||||
u64 mask = (u64)DMA_BIT_MASK(32);
|
u64 mask = (u64)DMA_BIT_MASK(32);
|
||||||
|
|
||||||
if (dev) {
|
if (dev) {
|
||||||
unsigned long max_dma_pfn;
|
|
||||||
|
|
||||||
mask = dev->coherent_dma_mask;
|
mask = dev->coherent_dma_mask;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -176,34 +212,8 @@ static u64 get_coherent_dma_mask(struct device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
max_dma_pfn = min(max_pfn, arm_dma_pfn_limit);
|
if (!__dma_supported(dev, mask, true))
|
||||||
|
|
||||||
/*
|
|
||||||
* If the mask allows for more memory than we can address,
|
|
||||||
* and we actually have that much memory, then fail the
|
|
||||||
* allocation.
|
|
||||||
*/
|
|
||||||
if (sizeof(mask) != sizeof(dma_addr_t) &&
|
|
||||||
mask > (dma_addr_t)~0 &&
|
|
||||||
dma_to_pfn(dev, ~0) > max_dma_pfn) {
|
|
||||||
dev_warn(dev, "Coherent DMA mask %#llx is larger than dma_addr_t allows\n",
|
|
||||||
mask);
|
|
||||||
dev_warn(dev, "Driver did not use or check the return value from dma_set_coherent_mask()?\n");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now check that the mask, when translated to a PFN,
|
|
||||||
* fits within the allowable addresses which we can
|
|
||||||
* allocate.
|
|
||||||
*/
|
|
||||||
if (dma_to_pfn(dev, mask) < max_dma_pfn) {
|
|
||||||
dev_warn(dev, "Coherent DMA mask %#llx (pfn %#lx-%#lx) covers a smaller range of system memory than the DMA zone pfn 0x0-%#lx\n",
|
|
||||||
mask,
|
|
||||||
dma_to_pfn(dev, 0), dma_to_pfn(dev, mask) + 1,
|
|
||||||
arm_dma_pfn_limit + 1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
|
@ -1032,28 +1042,7 @@ void arm_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
|
||||||
*/
|
*/
|
||||||
int dma_supported(struct device *dev, u64 mask)
|
int dma_supported(struct device *dev, u64 mask)
|
||||||
{
|
{
|
||||||
unsigned long limit;
|
return __dma_supported(dev, mask, false);
|
||||||
|
|
||||||
/*
|
|
||||||
* If the mask allows for more memory than we can address,
|
|
||||||
* and we actually have that much memory, then we must
|
|
||||||
* indicate that DMA to this device is not supported.
|
|
||||||
*/
|
|
||||||
if (sizeof(mask) != sizeof(dma_addr_t) &&
|
|
||||||
mask > (dma_addr_t)~0 &&
|
|
||||||
dma_to_pfn(dev, ~0) > arm_dma_pfn_limit)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translate the device's DMA mask to a PFN limit. This
|
|
||||||
* PFN number includes the page which we can DMA to.
|
|
||||||
*/
|
|
||||||
limit = dma_to_pfn(dev, mask);
|
|
||||||
|
|
||||||
if (limit < arm_dma_pfn_limit)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dma_supported);
|
EXPORT_SYMBOL(dma_supported);
|
||||||
|
|
||||||
|
|
|
@ -229,7 +229,7 @@ void __init setup_dma_zone(const struct machine_desc *mdesc)
|
||||||
#ifdef CONFIG_ZONE_DMA
|
#ifdef CONFIG_ZONE_DMA
|
||||||
if (mdesc->dma_zone_size) {
|
if (mdesc->dma_zone_size) {
|
||||||
arm_dma_zone_size = mdesc->dma_zone_size;
|
arm_dma_zone_size = mdesc->dma_zone_size;
|
||||||
arm_dma_limit = PHYS_OFFSET + arm_dma_zone_size - 1;
|
arm_dma_limit = __pv_phys_offset + arm_dma_zone_size - 1;
|
||||||
} else
|
} else
|
||||||
arm_dma_limit = 0xffffffff;
|
arm_dma_limit = 0xffffffff;
|
||||||
arm_dma_pfn_limit = arm_dma_limit >> PAGE_SHIFT;
|
arm_dma_pfn_limit = arm_dma_limit >> PAGE_SHIFT;
|
||||||
|
|
|
@ -159,8 +159,7 @@ config NR_CPUS
|
||||||
range 2 32
|
range 2 32
|
||||||
depends on SMP
|
depends on SMP
|
||||||
# These have to remain sorted largest to smallest
|
# These have to remain sorted largest to smallest
|
||||||
default "8" if ARCH_XGENE
|
default "8"
|
||||||
default "4"
|
|
||||||
|
|
||||||
config HOTPLUG_CPU
|
config HOTPLUG_CPU
|
||||||
bool "Support for hot-pluggable CPUs"
|
bool "Support for hot-pluggable CPUs"
|
||||||
|
|
|
@ -229,7 +229,7 @@ extern void __iomem *__ioremap(phys_addr_t phys_addr, size_t size, pgprot_t prot
|
||||||
extern void __iounmap(volatile void __iomem *addr);
|
extern void __iounmap(volatile void __iomem *addr);
|
||||||
extern void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size);
|
extern void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size);
|
||||||
|
|
||||||
#define PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_DIRTY)
|
#define PROT_DEFAULT (pgprot_default | PTE_DIRTY)
|
||||||
#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
||||||
#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL_NC))
|
#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL_NC))
|
||||||
#define PROT_NORMAL (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL))
|
#define PROT_NORMAL (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL))
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
* Section
|
* Section
|
||||||
*/
|
*/
|
||||||
#define PMD_SECT_VALID (_AT(pmdval_t, 1) << 0)
|
#define PMD_SECT_VALID (_AT(pmdval_t, 1) << 0)
|
||||||
#define PMD_SECT_PROT_NONE (_AT(pmdval_t, 1) << 2)
|
#define PMD_SECT_PROT_NONE (_AT(pmdval_t, 1) << 58)
|
||||||
#define PMD_SECT_USER (_AT(pmdval_t, 1) << 6) /* AP[1] */
|
#define PMD_SECT_USER (_AT(pmdval_t, 1) << 6) /* AP[1] */
|
||||||
#define PMD_SECT_RDONLY (_AT(pmdval_t, 1) << 7) /* AP[2] */
|
#define PMD_SECT_RDONLY (_AT(pmdval_t, 1) << 7) /* AP[2] */
|
||||||
#define PMD_SECT_S (_AT(pmdval_t, 3) << 8)
|
#define PMD_SECT_S (_AT(pmdval_t, 3) << 8)
|
||||||
|
|
|
@ -282,8 +282,9 @@ ENDPROC(secondary_holding_pen)
|
||||||
* be used where CPUs are brought online dynamically by the kernel.
|
* be used where CPUs are brought online dynamically by the kernel.
|
||||||
*/
|
*/
|
||||||
ENTRY(secondary_entry)
|
ENTRY(secondary_entry)
|
||||||
bl __calc_phys_offset // x2=phys offset
|
|
||||||
bl el2_setup // Drop to EL1
|
bl el2_setup // Drop to EL1
|
||||||
|
bl __calc_phys_offset // x24=PHYS_OFFSET, x28=PHYS_OFFSET-PAGE_OFFSET
|
||||||
|
bl set_cpu_boot_mode_flag
|
||||||
b secondary_startup
|
b secondary_startup
|
||||||
ENDPROC(secondary_entry)
|
ENDPROC(secondary_entry)
|
||||||
|
|
||||||
|
|
|
@ -111,12 +111,12 @@ ENTRY(__cpu_setup)
|
||||||
bl __flush_dcache_all
|
bl __flush_dcache_all
|
||||||
mov lr, x28
|
mov lr, x28
|
||||||
ic iallu // I+BTB cache invalidate
|
ic iallu // I+BTB cache invalidate
|
||||||
|
tlbi vmalle1is // invalidate I + D TLBs
|
||||||
dsb sy
|
dsb sy
|
||||||
|
|
||||||
mov x0, #3 << 20
|
mov x0, #3 << 20
|
||||||
msr cpacr_el1, x0 // Enable FP/ASIMD
|
msr cpacr_el1, x0 // Enable FP/ASIMD
|
||||||
msr mdscr_el1, xzr // Reset mdscr_el1
|
msr mdscr_el1, xzr // Reset mdscr_el1
|
||||||
tlbi vmalle1is // invalidate I + D TLBs
|
|
||||||
/*
|
/*
|
||||||
* Memory region attributes for LPAE:
|
* Memory region attributes for LPAE:
|
||||||
*
|
*
|
||||||
|
|
|
@ -298,8 +298,10 @@ static int __init set_abdac_rate(struct platform_device *pdev)
|
||||||
*/
|
*/
|
||||||
retval = clk_round_rate(pll1,
|
retval = clk_round_rate(pll1,
|
||||||
CONFIG_BOARD_FAVR32_ABDAC_RATE * 256 * 16);
|
CONFIG_BOARD_FAVR32_ABDAC_RATE * 256 * 16);
|
||||||
if (retval < 0)
|
if (retval <= 0) {
|
||||||
|
retval = -EINVAL;
|
||||||
goto out_abdac;
|
goto out_abdac;
|
||||||
|
}
|
||||||
|
|
||||||
retval = clk_set_rate(pll1, retval);
|
retval = clk_set_rate(pll1, retval);
|
||||||
if (retval != 0)
|
if (retval != 0)
|
||||||
|
|
|
@ -59,7 +59,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -61,7 +61,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -60,7 +60,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -48,7 +48,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -59,7 +59,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -62,7 +62,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -61,7 +61,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -53,7 +53,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -42,7 +42,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -42,7 +42,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -54,7 +54,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -58,7 +58,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -58,7 +58,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -46,7 +46,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_CONCAT=y
|
CONFIG_MTD_CONCAT=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
CONFIG_MTD_CFI=y
|
CONFIG_MTD_CFI=y
|
||||||
|
|
|
@ -49,7 +49,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_CHAR=y
|
CONFIG_MTD_CHAR=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
|
|
@ -59,7 +59,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
|
||||||
static struct irqaction timer_irqaction = {
|
static struct irqaction timer_irqaction = {
|
||||||
.handler = timer_interrupt,
|
.handler = timer_interrupt,
|
||||||
/* Oprofile uses the same irq as the timer, so allow it to be shared */
|
/* Oprofile uses the same irq as the timer, so allow it to be shared */
|
||||||
.flags = IRQF_TIMER | IRQF_DISABLED | IRQF_SHARED,
|
.flags = IRQF_TIMER | IRQF_SHARED,
|
||||||
.name = "avr32_comparator",
|
.name = "avr32_comparator",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,7 @@ static const struct platform_suspend_ops avr32_pm_ops = {
|
||||||
.enter = avr32_pm_enter,
|
.enter = avr32_pm_enter,
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned long avr32_pm_offset(void *symbol)
|
static unsigned long __init avr32_pm_offset(void *symbol)
|
||||||
{
|
{
|
||||||
extern u8 pm_exception[];
|
extern u8 pm_exception[];
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ menu "Processor type and features"
|
||||||
config IA64
|
config IA64
|
||||||
bool
|
bool
|
||||||
select ARCH_MIGHT_HAVE_PC_PARPORT
|
select ARCH_MIGHT_HAVE_PC_PARPORT
|
||||||
|
select ARCH_MIGHT_HAVE_PC_SERIO
|
||||||
select PCI if (!IA64_HP_SIM)
|
select PCI if (!IA64_HP_SIM)
|
||||||
select ACPI if (!IA64_HP_SIM)
|
select ACPI if (!IA64_HP_SIM)
|
||||||
select PM if (!IA64_HP_SIM)
|
select PM if (!IA64_HP_SIM)
|
||||||
|
|
|
@ -2,6 +2,7 @@ config MIPS
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
select ARCH_MIGHT_HAVE_PC_PARPORT
|
select ARCH_MIGHT_HAVE_PC_PARPORT
|
||||||
|
select ARCH_MIGHT_HAVE_PC_SERIO
|
||||||
select HAVE_CONTEXT_TRACKING
|
select HAVE_CONTEXT_TRACKING
|
||||||
select HAVE_GENERIC_DMA_COHERENT
|
select HAVE_GENERIC_DMA_COHERENT
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
|
|
|
@ -86,6 +86,7 @@ config PPC
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
select ARCH_MIGHT_HAVE_PC_PARPORT
|
select ARCH_MIGHT_HAVE_PC_PARPORT
|
||||||
|
select ARCH_MIGHT_HAVE_PC_SERIO
|
||||||
select BINFMT_ELF
|
select BINFMT_ELF
|
||||||
select OF
|
select OF
|
||||||
select OF_EARLY_FLATTREE
|
select OF_EARLY_FLATTREE
|
||||||
|
|
|
@ -77,7 +77,6 @@
|
||||||
compatible = "fsl,mpc5121-immr";
|
compatible = "fsl,mpc5121-immr";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
#interrupt-cells = <2>;
|
|
||||||
ranges = <0x0 0x80000000 0x400000>;
|
ranges = <0x0 0x80000000 0x400000>;
|
||||||
reg = <0x80000000 0x400000>;
|
reg = <0x80000000 0x400000>;
|
||||||
bus-frequency = <66000000>; /* 66 MHz ips bus */
|
bus-frequency = <66000000>; /* 66 MHz ips bus */
|
||||||
|
|
|
@ -12,7 +12,6 @@ CONFIG_EXPERT=y
|
||||||
CONFIG_PPC_MPC52xx=y
|
CONFIG_PPC_MPC52xx=y
|
||||||
CONFIG_PPC_MPC5200_SIMPLE=y
|
CONFIG_PPC_MPC5200_SIMPLE=y
|
||||||
# CONFIG_PPC_PMAC is not set
|
# CONFIG_PPC_PMAC is not set
|
||||||
CONFIG_PPC_BESTCOMM=y
|
|
||||||
CONFIG_SPARSE_IRQ=y
|
CONFIG_SPARSE_IRQ=y
|
||||||
CONFIG_PM=y
|
CONFIG_PM=y
|
||||||
# CONFIG_PCI is not set
|
# CONFIG_PCI is not set
|
||||||
|
@ -71,6 +70,8 @@ CONFIG_USB_DEVICEFS=y
|
||||||
CONFIG_USB_OHCI_HCD=y
|
CONFIG_USB_OHCI_HCD=y
|
||||||
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
|
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
|
CONFIG_DMADEVICES=y
|
||||||
|
CONFIG_PPC_BESTCOMM=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_EXT3_FS=y
|
CONFIG_EXT3_FS=y
|
||||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||||
|
|
|
@ -15,7 +15,6 @@ CONFIG_PPC_MPC52xx=y
|
||||||
CONFIG_PPC_MPC5200_SIMPLE=y
|
CONFIG_PPC_MPC5200_SIMPLE=y
|
||||||
CONFIG_PPC_LITE5200=y
|
CONFIG_PPC_LITE5200=y
|
||||||
# CONFIG_PPC_PMAC is not set
|
# CONFIG_PPC_PMAC is not set
|
||||||
CONFIG_PPC_BESTCOMM=y
|
|
||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
CONFIG_SPARSE_IRQ=y
|
CONFIG_SPARSE_IRQ=y
|
||||||
|
@ -59,6 +58,8 @@ CONFIG_I2C_CHARDEV=y
|
||||||
CONFIG_I2C_MPC=y
|
CONFIG_I2C_MPC=y
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
CONFIG_VIDEO_OUTPUT_CONTROL=m
|
||||||
|
CONFIG_DMADEVICES=y
|
||||||
|
CONFIG_PPC_BESTCOMM=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_EXT3_FS=y
|
CONFIG_EXT3_FS=y
|
||||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||||
|
|
|
@ -12,7 +12,6 @@ CONFIG_EXPERT=y
|
||||||
CONFIG_PPC_MPC52xx=y
|
CONFIG_PPC_MPC52xx=y
|
||||||
CONFIG_PPC_MPC5200_SIMPLE=y
|
CONFIG_PPC_MPC5200_SIMPLE=y
|
||||||
# CONFIG_PPC_PMAC is not set
|
# CONFIG_PPC_PMAC is not set
|
||||||
CONFIG_PPC_BESTCOMM=y
|
|
||||||
CONFIG_SPARSE_IRQ=y
|
CONFIG_SPARSE_IRQ=y
|
||||||
CONFIG_PM=y
|
CONFIG_PM=y
|
||||||
# CONFIG_PCI is not set
|
# CONFIG_PCI is not set
|
||||||
|
@ -84,6 +83,8 @@ CONFIG_LEDS_TRIGGERS=y
|
||||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_DS1307=y
|
CONFIG_RTC_DRV_DS1307=y
|
||||||
|
CONFIG_DMADEVICES=y
|
||||||
|
CONFIG_PPC_BESTCOMM=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_EXT3_FS=y
|
CONFIG_EXT3_FS=y
|
||||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||||
|
|
|
@ -21,7 +21,6 @@ CONFIG_MODULE_UNLOAD=y
|
||||||
CONFIG_PPC_MPC52xx=y
|
CONFIG_PPC_MPC52xx=y
|
||||||
CONFIG_PPC_MPC5200_SIMPLE=y
|
CONFIG_PPC_MPC5200_SIMPLE=y
|
||||||
# CONFIG_PPC_PMAC is not set
|
# CONFIG_PPC_PMAC is not set
|
||||||
CONFIG_PPC_BESTCOMM=y
|
|
||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
CONFIG_HZ_100=y
|
CONFIG_HZ_100=y
|
||||||
|
@ -87,6 +86,8 @@ CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
|
||||||
CONFIG_USB_STORAGE=m
|
CONFIG_USB_STORAGE=m
|
||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_PCF8563=m
|
CONFIG_RTC_DRV_PCF8563=m
|
||||||
|
CONFIG_DMADEVICES=y
|
||||||
|
CONFIG_PPC_BESTCOMM=y
|
||||||
CONFIG_EXT2_FS=m
|
CONFIG_EXT2_FS=m
|
||||||
CONFIG_EXT3_FS=m
|
CONFIG_EXT3_FS=m
|
||||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||||
|
|
|
@ -17,7 +17,6 @@ CONFIG_PPC_MPC52xx=y
|
||||||
CONFIG_PPC_MPC5200_SIMPLE=y
|
CONFIG_PPC_MPC5200_SIMPLE=y
|
||||||
CONFIG_PPC_MPC5200_BUGFIX=y
|
CONFIG_PPC_MPC5200_BUGFIX=y
|
||||||
# CONFIG_PPC_PMAC is not set
|
# CONFIG_PPC_PMAC is not set
|
||||||
CONFIG_PPC_BESTCOMM=y
|
|
||||||
CONFIG_PM=y
|
CONFIG_PM=y
|
||||||
# CONFIG_PCI is not set
|
# CONFIG_PCI is not set
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
|
@ -86,6 +85,8 @@ CONFIG_USB_STORAGE=y
|
||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_DS1307=y
|
CONFIG_RTC_DRV_DS1307=y
|
||||||
CONFIG_RTC_DRV_DS1374=y
|
CONFIG_RTC_DRV_DS1374=y
|
||||||
|
CONFIG_DMADEVICES=y
|
||||||
|
CONFIG_PPC_BESTCOMM=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_EXT3_FS=y
|
CONFIG_EXT3_FS=y
|
||||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||||
|
|
|
@ -15,7 +15,6 @@ CONFIG_PPC_MEDIA5200=y
|
||||||
CONFIG_PPC_MPC5200_BUGFIX=y
|
CONFIG_PPC_MPC5200_BUGFIX=y
|
||||||
CONFIG_PPC_MPC5200_LPBFIFO=m
|
CONFIG_PPC_MPC5200_LPBFIFO=m
|
||||||
# CONFIG_PPC_PMAC is not set
|
# CONFIG_PPC_PMAC is not set
|
||||||
CONFIG_PPC_BESTCOMM=y
|
|
||||||
CONFIG_SIMPLE_GPIO=y
|
CONFIG_SIMPLE_GPIO=y
|
||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
@ -125,6 +124,8 @@ CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_DS1307=y
|
CONFIG_RTC_DRV_DS1307=y
|
||||||
CONFIG_RTC_DRV_DS1374=y
|
CONFIG_RTC_DRV_DS1374=y
|
||||||
CONFIG_RTC_DRV_PCF8563=m
|
CONFIG_RTC_DRV_PCF8563=m
|
||||||
|
CONFIG_DMADEVICES=y
|
||||||
|
CONFIG_PPC_BESTCOMM=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_EXT3_FS=y
|
CONFIG_EXT3_FS=y
|
||||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||||
|
|
|
@ -2,7 +2,6 @@ CONFIG_PPC64=y
|
||||||
CONFIG_ALTIVEC=y
|
CONFIG_ALTIVEC=y
|
||||||
CONFIG_SMP=y
|
CONFIG_SMP=y
|
||||||
CONFIG_NR_CPUS=2
|
CONFIG_NR_CPUS=2
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
@ -45,8 +44,9 @@ CONFIG_INET_AH=y
|
||||||
CONFIG_INET_ESP=y
|
CONFIG_INET_ESP=y
|
||||||
# CONFIG_IPV6 is not set
|
# CONFIG_IPV6 is not set
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
CONFIG_DEVTMPFS=y
|
||||||
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_CHAR=y
|
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
CONFIG_MTD_SLRAM=y
|
CONFIG_MTD_SLRAM=y
|
||||||
CONFIG_MTD_PHRAM=y
|
CONFIG_MTD_PHRAM=y
|
||||||
|
@ -88,7 +88,6 @@ CONFIG_BLK_DEV_DM=y
|
||||||
CONFIG_DM_CRYPT=y
|
CONFIG_DM_CRYPT=y
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_DUMMY=y
|
CONFIG_DUMMY=y
|
||||||
CONFIG_MII=y
|
|
||||||
CONFIG_TIGON3=y
|
CONFIG_TIGON3=y
|
||||||
CONFIG_E1000=y
|
CONFIG_E1000=y
|
||||||
CONFIG_PASEMI_MAC=y
|
CONFIG_PASEMI_MAC=y
|
||||||
|
@ -174,8 +173,8 @@ CONFIG_NLS_CODEPAGE_437=y
|
||||||
CONFIG_NLS_ISO8859_1=y
|
CONFIG_NLS_ISO8859_1=y
|
||||||
CONFIG_CRC_CCITT=y
|
CONFIG_CRC_CCITT=y
|
||||||
CONFIG_PRINTK_TIME=y
|
CONFIG_PRINTK_TIME=y
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
|
||||||
CONFIG_DEBUG_FS=y
|
CONFIG_DEBUG_FS=y
|
||||||
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
CONFIG_DEBUG_KERNEL=y
|
CONFIG_DEBUG_KERNEL=y
|
||||||
CONFIG_DETECT_HUNG_TASK=y
|
CONFIG_DETECT_HUNG_TASK=y
|
||||||
# CONFIG_SCHED_DEBUG is not set
|
# CONFIG_SCHED_DEBUG is not set
|
||||||
|
|
|
@ -84,10 +84,8 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb,
|
||||||
static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
|
static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
|
||||||
unsigned long address)
|
unsigned long address)
|
||||||
{
|
{
|
||||||
struct page *page = page_address(table);
|
|
||||||
|
|
||||||
tlb_flush_pgtable(tlb, address);
|
tlb_flush_pgtable(tlb, address);
|
||||||
pgtable_page_dtor(page);
|
pgtable_page_dtor(table);
|
||||||
pgtable_free_tlb(tlb, page, 0);
|
pgtable_free_tlb(tlb, page_address(table), 0);
|
||||||
}
|
}
|
||||||
#endif /* _ASM_POWERPC_PGALLOC_32_H */
|
#endif /* _ASM_POWERPC_PGALLOC_32_H */
|
||||||
|
|
|
@ -148,11 +148,9 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb,
|
||||||
static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
|
static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
|
||||||
unsigned long address)
|
unsigned long address)
|
||||||
{
|
{
|
||||||
struct page *page = page_address(table);
|
|
||||||
|
|
||||||
tlb_flush_pgtable(tlb, address);
|
tlb_flush_pgtable(tlb, address);
|
||||||
pgtable_page_dtor(page);
|
pgtable_page_dtor(table);
|
||||||
pgtable_free_tlb(tlb, page, 0);
|
pgtable_free_tlb(tlb, page_address(table), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* if CONFIG_PPC_64K_PAGES */
|
#else /* if CONFIG_PPC_64K_PAGES */
|
||||||
|
|
|
@ -148,7 +148,7 @@ void __init reserve_crashkernel(void)
|
||||||
* a small SLB (128MB) since the crash kernel needs to place
|
* a small SLB (128MB) since the crash kernel needs to place
|
||||||
* itself and some stacks to be in the first segment.
|
* itself and some stacks to be in the first segment.
|
||||||
*/
|
*/
|
||||||
crashk_res.start = min(0x80000000ULL, (ppc64_rma_size / 2));
|
crashk_res.start = min(0x8000000ULL, (ppc64_rma_size / 2));
|
||||||
#else
|
#else
|
||||||
crashk_res.start = KDUMP_KERNELBASE;
|
crashk_res.start = KDUMP_KERNELBASE;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -246,8 +246,8 @@ _GLOBAL(__bswapdi2)
|
||||||
or r3,r7,r9
|
or r3,r7,r9
|
||||||
blr
|
blr
|
||||||
|
|
||||||
#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE)
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_PPC_EARLY_DEBUG_BOOTX
|
||||||
_GLOBAL(rmci_on)
|
_GLOBAL(rmci_on)
|
||||||
sync
|
sync
|
||||||
isync
|
isync
|
||||||
|
@ -277,6 +277,9 @@ _GLOBAL(rmci_off)
|
||||||
isync
|
isync
|
||||||
sync
|
sync
|
||||||
blr
|
blr
|
||||||
|
#endif /* CONFIG_PPC_EARLY_DEBUG_BOOTX */
|
||||||
|
|
||||||
|
#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do an IO access in real mode
|
* Do an IO access in real mode
|
||||||
|
|
|
@ -720,6 +720,7 @@ static void pnv_pci_ioda2_setup_dma_pe(struct pnv_phb *phb,
|
||||||
tbl->it_type = TCE_PCI_SWINV_CREATE | TCE_PCI_SWINV_FREE;
|
tbl->it_type = TCE_PCI_SWINV_CREATE | TCE_PCI_SWINV_FREE;
|
||||||
}
|
}
|
||||||
iommu_init_table(tbl, phb->hose->node);
|
iommu_init_table(tbl, phb->hose->node);
|
||||||
|
iommu_register_group(tbl, pci_domain_nr(pe->pbus), pe->pe_number);
|
||||||
|
|
||||||
if (pe->pdev)
|
if (pe->pdev)
|
||||||
set_iommu_table_base(&pe->pdev->dev, tbl);
|
set_iommu_table_base(&pe->pdev->dev, tbl);
|
||||||
|
|
|
@ -339,7 +339,7 @@ void *ppc4xx_ocm_alloc(phys_addr_t *phys, int size, int align,
|
||||||
if (IS_ERR_VALUE(offset))
|
if (IS_ERR_VALUE(offset))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ocm_blk = kzalloc(sizeof(struct ocm_block *), GFP_KERNEL);
|
ocm_blk = kzalloc(sizeof(struct ocm_block), GFP_KERNEL);
|
||||||
if (!ocm_blk) {
|
if (!ocm_blk) {
|
||||||
printk(KERN_ERR "PPC4XX OCM: could not allocate ocm block");
|
printk(KERN_ERR "PPC4XX OCM: could not allocate ocm block");
|
||||||
rh_free(ocm_reg->rh, offset);
|
rh_free(ocm_reg->rh, offset);
|
||||||
|
|
|
@ -347,14 +347,14 @@ config SMP
|
||||||
Even if you don't know what to do here, say Y.
|
Even if you don't know what to do here, say Y.
|
||||||
|
|
||||||
config NR_CPUS
|
config NR_CPUS
|
||||||
int "Maximum number of CPUs (2-64)"
|
int "Maximum number of CPUs (2-256)"
|
||||||
range 2 64
|
range 2 256
|
||||||
depends on SMP
|
depends on SMP
|
||||||
default "32" if !64BIT
|
default "32" if !64BIT
|
||||||
default "64" if 64BIT
|
default "64" if 64BIT
|
||||||
help
|
help
|
||||||
This allows you to specify the maximum number of CPUs which this
|
This allows you to specify the maximum number of CPUs which this
|
||||||
kernel will support. The maximum supported value is 64 and the
|
kernel will support. The maximum supported value is 256 and the
|
||||||
minimum value which makes sense is 2.
|
minimum value which makes sense is 2.
|
||||||
|
|
||||||
This is purely to save memory - each supported CPU adds
|
This is purely to save memory - each supported CPU adds
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <asm/chpid.h>
|
#include <asm/chpid.h>
|
||||||
|
#include <asm/cpu.h>
|
||||||
|
|
||||||
#define SCLP_CHP_INFO_MASK_SIZE 32
|
#define SCLP_CHP_INFO_MASK_SIZE 32
|
||||||
|
|
||||||
|
@ -37,7 +38,7 @@ struct sclp_cpu_info {
|
||||||
unsigned int standby;
|
unsigned int standby;
|
||||||
unsigned int combined;
|
unsigned int combined;
|
||||||
int has_cpu_type;
|
int has_cpu_type;
|
||||||
struct sclp_cpu_entry cpu[255];
|
struct sclp_cpu_entry cpu[MAX_CPU_ADDRESS + 1];
|
||||||
};
|
};
|
||||||
|
|
||||||
int sclp_get_cpu_info(struct sclp_cpu_info *info);
|
int sclp_get_cpu_info(struct sclp_cpu_info *info);
|
||||||
|
|
|
@ -72,6 +72,7 @@ int main(void)
|
||||||
/* constants used by the vdso */
|
/* constants used by the vdso */
|
||||||
DEFINE(__CLOCK_REALTIME, CLOCK_REALTIME);
|
DEFINE(__CLOCK_REALTIME, CLOCK_REALTIME);
|
||||||
DEFINE(__CLOCK_MONOTONIC, CLOCK_MONOTONIC);
|
DEFINE(__CLOCK_MONOTONIC, CLOCK_MONOTONIC);
|
||||||
|
DEFINE(__CLOCK_THREAD_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID);
|
||||||
DEFINE(__CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC);
|
DEFINE(__CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC);
|
||||||
BLANK();
|
BLANK();
|
||||||
/* idle data offsets */
|
/* idle data offsets */
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue