提交 143c9054 编写于 作者: D David S. Miller

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

Conflicts:
	drivers/net/ethernet/intel/i40e/i40e_main.c
	drivers/net/macvtap.c

Both minor merge hassles, simple overlapping changes.
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
...@@ -655,6 +655,11 @@ S: Stanford University ...@@ -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 ...@@ -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> ...@@ -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: ...@@ -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. ...@@ -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>]*
......
...@@ -7,10 +7,18 @@ The MPU contain CPUs, GIC, L2 cache and a local PRCM. ...@@ -7,10 +7,18 @@ The MPU contain CPUs, GIC, L2 cache and a local PRCM.
Required properties: Required properties:
- compatible : Should be "ti,omap3-mpu" for OMAP3 - compatible : Should be "ti,omap3-mpu" for OMAP3
Should be "ti,omap4-mpu" for OMAP4 Should be "ti,omap4-mpu" for OMAP4
Should be "ti,omap5-mpu" for OMAP5
- ti,hwmods: "mpu" - ti,hwmods: "mpu"
Examples: Examples:
- For an OMAP5 SMP system:
mpu {
compatible = "ti,omap5-mpu";
ti,hwmods = "mpu"
};
- For an OMAP4 SMP system: - For an OMAP4 SMP system:
mpu { mpu {
......
...@@ -7,6 +7,7 @@ representation in the device tree should be done as under:- ...@@ -7,6 +7,7 @@ representation in the device tree should be done as under:-
Required properties: Required properties:
- compatible : should be one of - compatible : should be one of
"arm,armv8-pmuv3"
"arm,cortex-a15-pmu" "arm,cortex-a15-pmu"
"arm,cortex-a9-pmu" "arm,cortex-a9-pmu"
"arm,cortex-a8-pmu" "arm,cortex-a8-pmu"
......
...@@ -49,7 +49,7 @@ adc@12D10000 { ...@@ -49,7 +49,7 @@ adc@12D10000 {
/* NTC thermistor is a hwmon device */ /* NTC thermistor is a hwmon device */
ncp15wb473@0 { ncp15wb473@0 {
compatible = "ntc,ncp15wb473"; compatible = "ntc,ncp15wb473";
pullup-uV = <1800000>; pullup-uv = <1800000>;
pullup-ohm = <47000>; pullup-ohm = <47000>;
pulldown-ohm = <0>; pulldown-ohm = <0>;
io-channels = <&adc 4>; io-channels = <&adc 4>;
......
...@@ -6,7 +6,7 @@ SoC's in the Exynos4 family. ...@@ -6,7 +6,7 @@ SoC's in the Exynos4 family.
Required Properties: Required Properties:
- comptible: should be one of the following. - compatible: should be one of the following.
- "samsung,exynos4210-clock" - controller compatible with Exynos4210 SoC. - "samsung,exynos4210-clock" - controller compatible with Exynos4210 SoC.
- "samsung,exynos4412-clock" - controller compatible with Exynos4412 SoC. - "samsung,exynos4412-clock" - controller compatible with Exynos4412 SoC.
......
...@@ -5,7 +5,7 @@ controllers within the Exynos5250 SoC. ...@@ -5,7 +5,7 @@ controllers within the Exynos5250 SoC.
Required Properties: Required Properties:
- comptible: should be one of the following. - compatible: should be one of the following.
- "samsung,exynos5250-clock" - controller compatible with Exynos5250 SoC. - "samsung,exynos5250-clock" - controller compatible with Exynos5250 SoC.
- reg: physical base address of the controller and length of memory mapped - reg: physical base address of the controller and length of memory mapped
......
...@@ -5,7 +5,7 @@ controllers within the Exynos5420 SoC. ...@@ -5,7 +5,7 @@ controllers within the Exynos5420 SoC.
Required Properties: Required Properties:
- comptible: should be one of the following. - compatible: should be one of the following.
- "samsung,exynos5420-clock" - controller compatible with Exynos5420 SoC. - "samsung,exynos5420-clock" - controller compatible with Exynos5420 SoC.
- reg: physical base address of the controller and length of memory mapped - reg: physical base address of the controller and length of memory mapped
......
...@@ -5,7 +5,7 @@ controllers within the Exynos5440 SoC. ...@@ -5,7 +5,7 @@ controllers within the Exynos5440 SoC.
Required Properties: Required Properties:
- comptible: should be "samsung,exynos5440-clock". - compatible: should be "samsung,exynos5440-clock".
- reg: physical base address of the controller and length of memory mapped - reg: physical base address of the controller and length of memory mapped
region. region.
......
...@@ -5,16 +5,42 @@ This is for the non-QE/CPM/GUTs GPIO controllers as found on ...@@ -5,16 +5,42 @@ This is for the non-QE/CPM/GUTs GPIO controllers as found on
Every GPIO controller node must have #gpio-cells property defined, Every GPIO controller node must have #gpio-cells property defined,
this information will be used to translate gpio-specifiers. this information will be used to translate gpio-specifiers.
See bindings/gpio/gpio.txt for details of how to specify GPIO
information for devices.
The GPIO module usually is connected to the SoC's internal interrupt
controller, see bindings/interrupt-controller/interrupts.txt (the
interrupt client nodes section) for details how to specify this GPIO
module's interrupt.
The GPIO module may serve as another interrupt controller (cascaded to
the SoC's internal interrupt controller). See the interrupt controller
nodes section in bindings/interrupt-controller/interrupts.txt for
details.
Required properties: Required properties:
- compatible : "fsl,<CHIP>-gpio" followed by "fsl,mpc8349-gpio" for - compatible: "fsl,<chip>-gpio" followed by "fsl,mpc8349-gpio"
83xx, "fsl,mpc8572-gpio" for 85xx and "fsl,mpc8610-gpio" for 86xx. for 83xx, "fsl,mpc8572-gpio" for 85xx, or
- #gpio-cells : Should be two. The first cell is the pin number and the "fsl,mpc8610-gpio" for 86xx.
second cell is used to specify optional parameters (currently unused). - #gpio-cells: Should be two. The first cell is the pin number
- interrupts : Interrupt mapping for GPIO IRQ. and the second cell is used to specify optional
- interrupt-parent : Phandle for the interrupt controller that parameters (currently unused).
services interrupts for this device. - interrupt-parent: Phandle for the interrupt controller that
- gpio-controller : Marks the port as GPIO controller. services interrupts for this device.
- interrupts: Interrupt mapping for GPIO IRQ.
- gpio-controller: Marks the port as GPIO controller.
Optional properties:
- interrupt-controller: Empty boolean property which marks the GPIO
module as an IRQ controller.
- #interrupt-cells: Should be two. Defines the number of integer
cells required to specify an interrupt within
this interrupt controller. The first cell
defines the pin number, the second cell
defines additional flags (trigger type,
trigger polarity). Note that the available
set of trigger conditions supported by the
GPIO module depends on the actual SoC.
Example of gpio-controller nodes for a MPC8347 SoC: Example of gpio-controller nodes for a MPC8347 SoC:
...@@ -22,39 +48,27 @@ Example of gpio-controller nodes for a MPC8347 SoC: ...@@ -22,39 +48,27 @@ Example of gpio-controller nodes for a MPC8347 SoC:
#gpio-cells = <2>; #gpio-cells = <2>;
compatible = "fsl,mpc8347-gpio", "fsl,mpc8349-gpio"; compatible = "fsl,mpc8347-gpio", "fsl,mpc8349-gpio";
reg = <0xc00 0x100>; reg = <0xc00 0x100>;
interrupts = <74 0x8>;
interrupt-parent = <&ipic>; interrupt-parent = <&ipic>;
interrupts = <74 0x8>;
gpio-controller; gpio-controller;
interrupt-controller;
#interrupt-cells = <2>;
}; };
gpio2: gpio-controller@d00 { gpio2: gpio-controller@d00 {
#gpio-cells = <2>; #gpio-cells = <2>;
compatible = "fsl,mpc8347-gpio", "fsl,mpc8349-gpio"; compatible = "fsl,mpc8347-gpio", "fsl,mpc8349-gpio";
reg = <0xd00 0x100>; reg = <0xd00 0x100>;
interrupts = <75 0x8>;
interrupt-parent = <&ipic>; interrupt-parent = <&ipic>;
interrupts = <75 0x8>;
gpio-controller; gpio-controller;
}; };
See booting-without-of.txt for details of how to specify GPIO Example of a peripheral using the GPIO module as an IRQ controller:
information for devices.
To use GPIO pins as interrupt sources for peripherals, specify the
GPIO controller as the interrupt parent and define GPIO number +
trigger mode using the interrupts property, which is defined like
this:
interrupts = <number trigger>, where:
- number: GPIO pin (0..31)
- trigger: trigger mode:
2 = trigger on falling edge
3 = trigger on both edges
Example of device using this is:
funkyfpga@0 { funkyfpga@0 {
compatible = "funky-fpga"; compatible = "funky-fpga";
... ...
interrupts = <4 3>;
interrupt-parent = <&gpio1>; interrupt-parent = <&gpio1>;
interrupts = <4 3>;
}; };
* TI MMC host controller for OMAP1 and 2420
The MMC Host Controller on TI OMAP1 and 2420 family provides
an interface for MMC, SD, and SDIO types of memory cards.
This file documents differences between the core properties described
by mmc.txt and the properties used by the omap mmc driver.
Note that this driver will not work with omap2430 or later omaps,
please see the omap hsmmc driver for the current omaps.
Required properties:
- compatible: Must be "ti,omap2420-mmc", for OMAP2420 controllers
- ti,hwmods: For 2420, must be "msdi<n>", where n is controller
instance starting 1
Examples:
msdi1: mmc@4809c000 {
compatible = "ti,omap2420-mmc";
ti,hwmods = "msdi1";
reg = <0x4809c000 0x80>;
interrupts = <83>;
dmas = <&sdma 61 &sdma 62>;
dma-names = "tx", "rx";
};
* TI MMC host controller for OMAP1 and 2420
The MMC Host Controller on TI OMAP1 and 2420 family provides
an interface for MMC, SD, and SDIO types of memory cards.
This file documents differences between the core properties described
by mmc.txt and the properties used by the omap mmc driver.
Note that this driver will not work with omap2430 or later omaps,
please see the omap hsmmc driver for the current omaps.
Required properties:
- compatible: Must be "ti,omap2420-mmc", for OMAP2420 controllers
- ti,hwmods: For 2420, must be "msdi<n>", where n is controller
instance starting 1
Examples:
msdi1: mmc@4809c000 {
compatible = "ti,omap2420-mmc";
ti,hwmods = "msdi1";
reg = <0x4809c000 0x80>;
interrupts = <83>;
dmas = <&sdma 61 &sdma 62>;
dma-names = "tx", "rx";
};
...@@ -15,6 +15,7 @@ Optional properties: ...@@ -15,6 +15,7 @@ Optional properties:
only if property "phy-reset-gpios" is available. Missing the property only if property "phy-reset-gpios" is available. Missing the property
will have the duration be 1 millisecond. Numbers greater than 1000 are will have the duration be 1 millisecond. Numbers greater than 1000 are
invalid and 1 millisecond will be used instead. invalid and 1 millisecond will be used instead.
- phy-supply: regulator that powers the Ethernet PHY.
Example: Example:
...@@ -25,4 +26,5 @@ ethernet@83fec000 { ...@@ -25,4 +26,5 @@ ethernet@83fec000 {
phy-mode = "mii"; phy-mode = "mii";
phy-reset-gpios = <&gpio2 14 0>; /* GPIO2_14 */ phy-reset-gpios = <&gpio2 14 0>; /* GPIO2_14 */
local-mac-address = [00 04 9F 01 1B B9]; local-mac-address = [00 04 9F 01 1B B9];
phy-supply = <&reg_fec_supply>;
}; };
...@@ -8,3 +8,7 @@ Required properties: ...@@ -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.
NVIDIA Tegra 2 SPI device
Required properties:
- compatible : should be "nvidia,tegra20-spi".
- gpios : should specify GPIOs used for chipselect.
...@@ -32,12 +32,14 @@ est ESTeem Wireless Modems ...@@ -32,12 +32,14 @@ est ESTeem Wireless Modems
fsl Freescale Semiconductor fsl Freescale Semiconductor
GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc. GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc.
gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. gef GE Fanuc Intelligent Platforms Embedded Systems, Inc.
gmt Global Mixed-mode Technology, Inc.
hisilicon Hisilicon Limited. hisilicon Hisilicon Limited.
hp Hewlett Packard hp Hewlett Packard
ibm International Business Machines (IBM) ibm International Business Machines (IBM)
idt Integrated Device Technologies, Inc. idt Integrated Device Technologies, Inc.
img Imagination Technologies Ltd. img Imagination Technologies Ltd.
intercontrol Inter Control Group intercontrol Inter Control Group
lg LG Corporation
linux Linux-specific binding linux Linux-specific binding
lsi LSI Corp. (LSI Logic) lsi LSI Corp. (LSI Logic)
marvell Marvell Technology Group Ltd. marvell Marvell Technology Group Ltd.
......
00-INDEX
- This file
gpio.txt
- Introduction to GPIOs and their kernel interfaces
consumer.txt
- How to obtain and use GPIOs in a driver
driver.txt
- How to write a GPIO driver
board.txt
- How to assign GPIOs to a consumer device and a function
sysfs.txt
- Information about the GPIO sysfs interface
gpio-legacy.txt
- Historical documentation of the deprecated GPIO integer interface
...@@ -313,7 +313,7 @@ static struct mic_device_desc *get_device_desc(struct mic_info *mic, int type) ...@@ -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, ...@@ -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, ...@@ -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 * ...@@ -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) ...@@ -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",
......
...@@ -16,8 +16,12 @@ ip_default_ttl - INTEGER ...@@ -16,8 +16,12 @@ ip_default_ttl - INTEGER
Default: 64 (as recommended by RFC1700) Default: 64 (as recommended by RFC1700)
ip_no_pmtu_disc - BOOLEAN ip_no_pmtu_disc - BOOLEAN
Disable Path MTU Discovery. Disable Path MTU Discovery. If enabled and a
default FALSE fragmentation-required ICMP is received, the PMTU to this
destination will be set to min_pmtu (see below). You will need
to raise min_pmtu to the smallest interface MTU on your system
manually if you want to avoid locally generated fragments.
Default: FALSE
min_pmtu - INTEGER min_pmtu - INTEGER
default 552 - minimum discovered Path MTU default 552 - minimum discovered Path MTU
......
...@@ -893,20 +893,15 @@ F: arch/arm/include/asm/hardware/dec21285.h ...@@ -893,20 +893,15 @@ 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 T: git git://git.linaro.org/people/shawnguo/linux-2.6.git
F: arch/arm/mach-imx/ F: arch/arm/mach-imx/
F: arch/arm/boot/dts/imx*
F: arch/arm/configs/imx*_defconfig 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
F: arch/arm/mach-imx/*imx6*
ARM/FREESCALE MXS ARM ARCHITECTURE ARM/FREESCALE MXS ARM ARCHITECTURE
M: Shawn Guo <shawn.guo@linaro.org> M: Shawn Guo <shawn.guo@linaro.org>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
...@@ -1923,7 +1918,8 @@ S: Maintained ...@@ -1923,7 +1918,8 @@ S: Maintained
F: drivers/gpio/gpio-bt8xx.c F: drivers/gpio/gpio-bt8xx.c
BTRFS FILE SYSTEM BTRFS FILE SYSTEM
M: Chris Mason <chris.mason@fusionio.com> M: Chris Mason <clm@fb.com>
M: Josef Bacik <jbacik@fb.com>
L: linux-btrfs@vger.kernel.org L: linux-btrfs@vger.kernel.org
W: http://btrfs.wiki.kernel.org/ W: http://btrfs.wiki.kernel.org/
Q: http://patchwork.kernel.org/project/linux-btrfs/list/ Q: http://patchwork.kernel.org/project/linux-btrfs/list/
...@@ -2126,7 +2122,8 @@ S: Maintained ...@@ -2126,7 +2122,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/
...@@ -3753,9 +3750,11 @@ F: include/uapi/linux/gigaset_dev.h ...@@ -3753,9 +3750,11 @@ F: include/uapi/linux/gigaset_dev.h
GPIO SUBSYSTEM GPIO SUBSYSTEM
M: Linus Walleij <linus.walleij@linaro.org> M: Linus Walleij <linus.walleij@linaro.org>
S: Maintained M: Alexandre Courbot <gnurou@gmail.com>
L: linux-gpio@vger.kernel.org L: linux-gpio@vger.kernel.org
F: Documentation/gpio.txt T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
S: Maintained
F: Documentation/gpio/
F: drivers/gpio/ F: drivers/gpio/
F: include/linux/gpio* F: include/linux/gpio*
F: include/asm-generic/gpio.h F: include/asm-generic/gpio.h
...@@ -4032,6 +4031,14 @@ W: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi ...@@ -4032,6 +4031,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
...@@ -5895,12 +5902,21 @@ M: Steffen Klassert <steffen.klassert@secunet.com> ...@@ -5895,12 +5902,21 @@ M: Steffen Klassert <steffen.klassert@secunet.com>
M: Herbert Xu <herbert@gondor.apana.org.au> M: Herbert Xu <herbert@gondor.apana.org.au>
M: "David S. Miller" <davem@davemloft.net> M: "David S. Miller" <davem@davemloft.net>
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec.git
T: git git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git
S: Maintained S: Maintained
F: net/xfrm/ F: net/xfrm/
F: net/key/ F: net/key/
F: net/ipv4/xfrm* F: net/ipv4/xfrm*
F: net/ipv4/esp4.c
F: net/ipv4/ah4.c
F: net/ipv4/ipcomp.c
F: net/ipv4/ip_vti.c
F: net/ipv6/xfrm* F: net/ipv6/xfrm*
F: net/ipv6/esp6.c
F: net/ipv6/ah6.c
F: net/ipv6/ipcomp6.c
F: net/ipv6/ip6_vti.c
F: include/uapi/linux/xfrm.h F: include/uapi/linux/xfrm.h
F: include/net/xfrm.h F: include/net/xfrm.h
...@@ -5966,10 +5982,10 @@ F: drivers/nfc/ ...@@ -5966,10 +5982,10 @@ F: drivers/nfc/
F: include/linux/platform_data/pn544.h F: include/linux/platform_data/pn544.h
NFS, SUNRPC, AND LOCKD CLIENTS NFS, SUNRPC, AND LOCKD CLIENTS
M: Trond Myklebust <Trond.Myklebust@netapp.com> M: Trond Myklebust <trond.myklebust@primarydata.com>
L: linux-nfs@vger.kernel.org L: linux-nfs@vger.kernel.org
W: http://client.linux-nfs.org W: http://client.linux-nfs.org
T: git git://git.linux-nfs.org/pub/linux/nfs-2.6.git T: git git://git.linux-nfs.org/projects/trondmy/linux-nfs.git
S: Maintained S: Maintained
F: fs/lockd/ F: fs/lockd/
F: fs/nfs/ F: fs/nfs/
...@@ -6236,8 +6252,8 @@ OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS ...@@ -6236,8 +6252,8 @@ OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
M: Rob Herring <rob.herring@calxeda.com> M: Rob Herring <rob.herring@calxeda.com>
M: Pawel Moll <pawel.moll@arm.com> M: Pawel Moll <pawel.moll@arm.com>
M: Mark Rutland <mark.rutland@arm.com> M: Mark Rutland <mark.rutland@arm.com>
M: Stephen Warren <swarren@wwwdotorg.org>
M: Ian Campbell <ijc+devicetree@hellion.org.uk> M: Ian Campbell <ijc+devicetree@hellion.org.uk>
M: Kumar Gala <galak@codeaurora.org>
L: devicetree@vger.kernel.org L: devicetree@vger.kernel.org
S: Maintained S: Maintained
F: Documentation/devicetree/ F: Documentation/devicetree/
...@@ -6447,19 +6463,52 @@ F: drivers/pci/ ...@@ -6447,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
......
VERSION = 3 VERSION = 3
PATCHLEVEL = 13 PATCHLEVEL = 13
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc2 EXTRAVERSION = -rc4
NAME = One Giant Leap for Frogkind NAME = One Giant Leap for Frogkind
# *DOCUMENTATION* # *DOCUMENTATION*
......
...@@ -8,6 +8,7 @@ ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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];
......
...@@ -13,4 +13,83 @@ ...@@ -13,4 +13,83 @@
/ { / {
model = "IGEP COM AM335x on AQUILA Expansion"; model = "IGEP COM AM335x on AQUILA Expansion";
compatible = "isee,am335x-base0033", "isee,am335x-igep0033", "ti,am33xx"; compatible = "isee,am335x-base0033", "isee,am335x-igep0033", "ti,am33xx";
hdmi {
compatible = "ti,tilcdc,slave";
i2c = <&i2c0>;
pinctrl-names = "default", "off";
pinctrl-0 = <&nxp_hdmi_pins>;
pinctrl-1 = <&nxp_hdmi_off_pins>;
status = "okay";
};
leds_base {
pinctrl-names = "default";
pinctrl-0 = <&leds_base_pins>;
compatible = "gpio-leds";
led@0 {
label = "base:red:user";
gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>; /* gpio1_21 */
default-state = "off";
};
led@1 {
label = "base:green:user";
gpios = <&gpio2 0 GPIO_ACTIVE_HIGH>; /* gpio2_0 */
default-state = "off";
};
};
};
&am33xx_pinmux {
nxp_hdmi_pins: pinmux_nxp_hdmi_pins {
pinctrl-single,pins = <
0x1b0 (PIN_OUTPUT | MUX_MODE3) /* xdma_event_intr0.clkout1 */
0xa0 (PIN_OUTPUT | MUX_MODE0) /* lcd_data0 */
0xa4 (PIN_OUTPUT | MUX_MODE0) /* lcd_data1 */
0xa8 (PIN_OUTPUT | MUX_MODE0) /* lcd_data2 */
0xac (PIN_OUTPUT | MUX_MODE0) /* lcd_data3 */
0xb0 (PIN_OUTPUT | MUX_MODE0) /* lcd_data4 */
0xb4 (PIN_OUTPUT | MUX_MODE0) /* lcd_data5 */
0xb8 (PIN_OUTPUT | MUX_MODE0) /* lcd_data6 */
0xbc (PIN_OUTPUT | MUX_MODE0) /* lcd_data7 */
0xc0 (PIN_OUTPUT | MUX_MODE0) /* lcd_data8 */
0xc4 (PIN_OUTPUT | MUX_MODE0) /* lcd_data9 */
0xc8 (PIN_OUTPUT | MUX_MODE0) /* lcd_data10 */
0xcc (PIN_OUTPUT | MUX_MODE0) /* lcd_data11 */
0xd0 (PIN_OUTPUT | MUX_MODE0) /* lcd_data12 */
0xd4 (PIN_OUTPUT | MUX_MODE0) /* lcd_data13 */
0xd8 (PIN_OUTPUT | MUX_MODE0) /* lcd_data14 */
0xdc (PIN_OUTPUT | MUX_MODE0) /* lcd_data15 */
0xe0 (PIN_OUTPUT | MUX_MODE0) /* lcd_vsync */
0xe4 (PIN_OUTPUT | MUX_MODE0) /* lcd_hsync */
0xe8 (PIN_OUTPUT | MUX_MODE0) /* lcd_pclk */
0xec (PIN_OUTPUT | MUX_MODE0) /* lcd_ac_bias_en */
>;
};
nxp_hdmi_off_pins: pinmux_nxp_hdmi_off_pins {
pinctrl-single,pins = <
0x1b0 (PIN_OUTPUT | MUX_MODE3) /* xdma_event_intr0.clkout1 */
>;
};
leds_base_pins: pinmux_leds_base_pins {
pinctrl-single,pins = <
0x54 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a5.gpio1_21 */
0x88 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_csn3.gpio2_0 */
>;
};
};
&lcdc {
status = "okay";
};
&i2c0 {
eeprom: eeprom@50 {
compatible = "at,24c256";
reg = <0x50>;
};
}; };
...@@ -199,6 +199,35 @@ ...@@ -199,6 +199,35 @@
pinctrl-0 = <&uart0_pins>; pinctrl-0 = <&uart0_pins>;
}; };
&usb {
status = "okay";
control@44e10000 {
status = "okay";
};
usb-phy@47401300 {
status = "okay";
};
usb-phy@47401b00 {
status = "okay";
};
usb@47401000 {
status = "okay";
};
usb@47401800 {
status = "okay";
dr_mode = "host";
};
dma-controller@07402000 {
status = "okay";
};
};
#include "tps65910.dtsi" #include "tps65910.dtsi"
&tps { &tps {
......
...@@ -7,11 +7,11 @@ ...@@ -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";
......
/*
* 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>;
};
};
};
...@@ -99,22 +99,22 @@ ...@@ -99,22 +99,22 @@
spi-max-frequency = <50000000>; spi-max-frequency = <50000000>;
}; };
}; };
};
pcie-controller { pcie-controller {
status = "okay";
/*
* The two PCIe units are accessible through
* both standard PCIe slots and mini-PCIe
* slots on the board.
*/
pcie@1,0 {
/* Port 0, Lane 0 */
status = "okay";
};
pcie@2,0 {
/* Port 1, Lane 0 */
status = "okay"; status = "okay";
/*
* The two PCIe units are accessible through
* both standard PCIe slots and mini-PCIe
* slots on the board.
*/
pcie@1,0 {
/* Port 0, Lane 0 */
status = "okay";
};
pcie@2,0 {
/* Port 1, Lane 0 */
status = "okay";
};
}; };
}; };
}; };
......
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
coherency-fabric@20200 { coherency-fabric@20200 {
compatible = "marvell,coherency-fabric"; compatible = "marvell,coherency-fabric";
reg = <0x20200 0xb0>, <0x21810 0x1c>; reg = <0x20200 0xb0>, <0x21010 0x1c>;
}; };
serial@12000 { serial@12000 {
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
/* /*
* MV78230 has 2 PCIe units Gen2.0: One unit can be * MV78230 has 2 PCIe units Gen2.0: One unit can be
* configured as x4 or quad x1 lanes. One unit is * configured as x4 or quad x1 lanes. One unit is
* x4/x1. * x1 only.
*/ */
pcie-controller { pcie-controller {
compatible = "marvell,armada-xp-pcie"; compatible = "marvell,armada-xp-pcie";
...@@ -62,10 +62,10 @@ ...@@ -62,10 +62,10 @@
ranges = ranges =
<0x82000000 0 0x40000 MBUS_ID(0xf0, 0x01) 0x40000 0 0x00002000 /* Port 0.0 registers */ <0x82000000 0 0x40000 MBUS_ID(0xf0, 0x01) 0x40000 0 0x00002000 /* Port 0.0 registers */
0x82000000 0 0x42000 MBUS_ID(0xf0, 0x01) 0x42000 0 0x00002000 /* Port 2.0 registers */
0x82000000 0 0x44000 MBUS_ID(0xf0, 0x01) 0x44000 0 0x00002000 /* Port 0.1 registers */ 0x82000000 0 0x44000 MBUS_ID(0xf0, 0x01) 0x44000 0 0x00002000 /* Port 0.1 registers */
0x82000000 0 0x48000 MBUS_ID(0xf0, 0x01) 0x48000 0 0x00002000 /* Port 0.2 registers */ 0x82000000 0 0x48000 MBUS_ID(0xf0, 0x01) 0x48000 0 0x00002000 /* Port 0.2 registers */
0x82000000 0 0x4c000 MBUS_ID(0xf0, 0x01) 0x4c000 0 0x00002000 /* Port 0.3 registers */ 0x82000000 0 0x4c000 MBUS_ID(0xf0, 0x01) 0x4c000 0 0x00002000 /* Port 0.3 registers */
0x82000000 0 0x80000 MBUS_ID(0xf0, 0x01) 0x80000 0 0x00002000 /* Port 1.0 registers */
0x82000000 0x1 0 MBUS_ID(0x04, 0xe8) 0 1 0 /* Port 0.0 MEM */ 0x82000000 0x1 0 MBUS_ID(0x04, 0xe8) 0 1 0 /* Port 0.0 MEM */
0x81000000 0x1 0 MBUS_ID(0x04, 0xe0) 0 1 0 /* Port 0.0 IO */ 0x81000000 0x1 0 MBUS_ID(0x04, 0xe0) 0 1 0 /* Port 0.0 IO */
0x82000000 0x2 0 MBUS_ID(0x04, 0xd8) 0 1 0 /* Port 0.1 MEM */ 0x82000000 0x2 0 MBUS_ID(0x04, 0xd8) 0 1 0 /* Port 0.1 MEM */
...@@ -74,8 +74,8 @@ ...@@ -74,8 +74,8 @@
0x81000000 0x3 0 MBUS_ID(0x04, 0xb0) 0 1 0 /* Port 0.2 IO */ 0x81000000 0x3 0 MBUS_ID(0x04, 0xb0) 0 1 0 /* Port 0.2 IO */
0x82000000 0x4 0 MBUS_ID(0x04, 0x78) 0 1 0 /* Port 0.3 MEM */ 0x82000000 0x4 0 MBUS_ID(0x04, 0x78) 0 1 0 /* Port 0.3 MEM */
0x81000000 0x4 0 MBUS_ID(0x04, 0x70) 0 1 0 /* Port 0.3 IO */ 0x81000000 0x4 0 MBUS_ID(0x04, 0x70) 0 1 0 /* Port 0.3 IO */
0x82000000 0x9 0 MBUS_ID(0x04, 0xf8) 0 1 0 /* Port 2.0 MEM */ 0x82000000 0x5 0 MBUS_ID(0x08, 0xe8) 0 1 0 /* Port 1.0 MEM */
0x81000000 0x9 0 MBUS_ID(0x04, 0xf0) 0 1 0 /* Port 2.0 IO */>; 0x81000000 0x5 0 MBUS_ID(0x08, 0xe0) 0 1 0 /* Port 1.0 IO */>;
pcie@1,0 { pcie@1,0 {
device_type = "pci"; device_type = "pci";
...@@ -145,20 +145,20 @@ ...@@ -145,20 +145,20 @@
status = "disabled"; status = "disabled";
}; };
pcie@9,0 { pcie@5,0 {
device_type = "pci"; device_type = "pci";
assigned-addresses = <0x82000800 0 0x42000 0 0x2000>; assigned-addresses = <0x82000800 0 0x80000 0 0x2000>;
reg = <0x4800 0 0 0 0>; reg = <0x2800 0 0 0 0>;
#address-cells = <3>; #address-cells = <3>;
#size-cells = <2>; #size-cells = <2>;
#interrupt-cells = <1>; #interrupt-cells = <1>;
ranges = <0x82000000 0 0 0x82000000 0x9 0 1 0 ranges = <0x82000000 0 0 0x82000000 0x5 0 1 0
0x81000000 0 0 0x81000000 0x9 0 1 0>; 0x81000000 0 0 0x81000000 0x5 0 1 0>;
interrupt-map-mask = <0 0 0 0>; interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &mpic 99>; interrupt-map = <0 0 0 0 &mpic 62>;
marvell,pcie-port = <2>; marvell,pcie-port = <1>;
marvell,pcie-lane = <0>; marvell,pcie-lane = <0>;
clocks = <&gateclk 26>; clocks = <&gateclk 9>;
status = "disabled"; status = "disabled";
}; };
}; };
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
/* /*
* MV78260 has 3 PCIe units Gen2.0: Two units can be * MV78260 has 3 PCIe units Gen2.0: Two units can be
* configured as x4 or quad x1 lanes. One unit is * configured as x4 or quad x1 lanes. One unit is
* x4/x1. * x4 only.
*/ */
pcie-controller { pcie-controller {
compatible = "marvell,armada-xp-pcie"; compatible = "marvell,armada-xp-pcie";
...@@ -68,7 +68,9 @@ ...@@ -68,7 +68,9 @@
0x82000000 0 0x48000 MBUS_ID(0xf0, 0x01) 0x48000 0 0x00002000 /* Port 0.2 registers */ 0x82000000 0 0x48000 MBUS_ID(0xf0, 0x01) 0x48000 0 0x00002000 /* Port 0.2 registers */
0x82000000 0 0x4c000 MBUS_ID(0xf0, 0x01) 0x4c000 0 0x00002000 /* Port 0.3 registers */ 0x82000000 0 0x4c000 MBUS_ID(0xf0, 0x01) 0x4c000 0 0x00002000 /* Port 0.3 registers */
0x82000000 0 0x80000 MBUS_ID(0xf0, 0x01) 0x80000 0 0x00002000 /* Port 1.0 registers */ 0x82000000 0 0x80000 MBUS_ID(0xf0, 0x01) 0x80000 0 0x00002000 /* Port 1.0 registers */
0x82000000 0 0x82000 MBUS_ID(0xf0, 0x01) 0x82000 0 0x00002000 /* Port 3.0 registers */ 0x82000000 0 0x84000 MBUS_ID(0xf0, 0x01) 0x84000 0 0x00002000 /* Port 1.1 registers */
0x82000000 0 0x88000 MBUS_ID(0xf0, 0x01) 0x88000 0 0x00002000 /* Port 1.2 registers */
0x82000000 0 0x8c000 MBUS_ID(0xf0, 0x01) 0x8c000 0 0x00002000 /* Port 1.3 registers */
0x82000000 0x1 0 MBUS_ID(0x04, 0xe8) 0 1 0 /* Port 0.0 MEM */ 0x82000000 0x1 0 MBUS_ID(0x04, 0xe8) 0 1 0 /* Port 0.0 MEM */
0x81000000 0x1 0 MBUS_ID(0x04, 0xe0) 0 1 0 /* Port 0.0 IO */ 0x81000000 0x1 0 MBUS_ID(0x04, 0xe0) 0 1 0 /* Port 0.0 IO */
0x82000000 0x2 0 MBUS_ID(0x04, 0xd8) 0 1 0 /* Port 0.1 MEM */ 0x82000000 0x2 0 MBUS_ID(0x04, 0xd8) 0 1 0 /* Port 0.1 MEM */
...@@ -77,10 +79,18 @@ ...@@ -77,10 +79,18 @@
0x81000000 0x3 0 MBUS_ID(0x04, 0xb0) 0 1 0 /* Port 0.2 IO */ 0x81000000 0x3 0 MBUS_ID(0x04, 0xb0) 0 1 0 /* Port 0.2 IO */
0x82000000 0x4 0 MBUS_ID(0x04, 0x78) 0 1 0 /* Port 0.3 MEM */ 0x82000000 0x4 0 MBUS_ID(0x04, 0x78) 0 1 0 /* Port 0.3 MEM */
0x81000000 0x4 0 MBUS_ID(0x04, 0x70) 0 1 0 /* Port 0.3 IO */ 0x81000000 0x4 0 MBUS_ID(0x04, 0x70) 0 1 0 /* Port 0.3 IO */
0x82000000 0x9 0 MBUS_ID(0x08, 0xe8) 0 1 0 /* Port 1.0 MEM */
0x81000000 0x9 0 MBUS_ID(0x08, 0xe0) 0 1 0 /* Port 1.0 IO */ 0x82000000 0x5 0 MBUS_ID(0x08, 0xe8) 0 1 0 /* Port 1.0 MEM */
0x82000000 0xa 0 MBUS_ID(0x08, 0xf8) 0 1 0 /* Port 3.0 MEM */ 0x81000000 0x5 0 MBUS_ID(0x08, 0xe0) 0 1 0 /* Port 1.0 IO */
0x81000000 0xa 0 MBUS_ID(0x08, 0xf0) 0 1 0 /* Port 3.0 IO */>; 0x82000000 0x6 0 MBUS_ID(0x08, 0xd8) 0 1 0 /* Port 1.1 MEM */
0x81000000 0x6 0 MBUS_ID(0x08, 0xd0) 0 1 0 /* Port 1.1 IO */
0x82000000 0x7 0 MBUS_ID(0x08, 0xb8) 0 1 0 /* Port 1.2 MEM */
0x81000000 0x7 0 MBUS_ID(0x08, 0xb0) 0 1 0 /* Port 1.2 IO */
0x82000000 0x8 0 MBUS_ID(0x08, 0x78) 0 1 0 /* Port 1.3 MEM */
0x81000000 0x8 0 MBUS_ID(0x08, 0x70) 0 1 0 /* Port 1.3 IO */
0x82000000 0x9 0 MBUS_ID(0x04, 0xf8) 0 1 0 /* Port 2.0 MEM */
0x81000000 0x9 0 MBUS_ID(0x04, 0xf0) 0 1 0 /* Port 2.0 IO */>;
pcie@1,0 { pcie@1,0 {
device_type = "pci"; device_type = "pci";
...@@ -106,8 +116,8 @@ ...@@ -106,8 +116,8 @@
#address-cells = <3>; #address-cells = <3>;
#size-cells = <2>; #size-cells = <2>;
#interrupt-cells = <1>; #interrupt-cells = <1>;
ranges = <0x82000000 0 0 0x82000000 0x2 0 1 0 ranges = <0x82000000 0 0 0x82000000 0x2 0 1 0
0x81000000 0 0 0x81000000 0x2 0 1 0>; 0x81000000 0 0 0x81000000 0x2 0 1 0>;
interrupt-map-mask = <0 0 0 0>; interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &mpic 59>; interrupt-map = <0 0 0 0 &mpic 59>;
marvell,pcie-port = <0>; marvell,pcie-port = <0>;
...@@ -150,37 +160,88 @@ ...@@ -150,37 +160,88 @@
status = "disabled"; status = "disabled";
}; };
pcie@9,0 { pcie@5,0 {
device_type = "pci"; device_type = "pci";
assigned-addresses = <0x82000800 0 0x42000 0 0x2000>; assigned-addresses = <0x82000800 0 0x80000 0 0x2000>;
reg = <0x4800 0 0 0 0>; reg = <0x2800 0 0 0 0>;
#address-cells = <3>; #address-cells = <3>;
#size-cells = <2>; #size-cells = <2>;
#interrupt-cells = <1>; #interrupt-cells = <1>;
ranges = <0x82000000 0 0 0x82000000 0x9 0 1 0 ranges = <0x82000000 0 0 0x82000000 0x5 0 1 0
0x81000000 0 0 0x81000000 0x9 0 1 0>; 0x81000000 0 0 0x81000000 0x5 0 1 0>;
interrupt-map-mask = <0 0 0 0>; interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &mpic 99>; interrupt-map = <0 0 0 0 &mpic 62>;
marvell,pcie-port = <2>; marvell,pcie-port = <1>;
marvell,pcie-lane = <0>; marvell,pcie-lane = <0>;
clocks = <&gateclk 26>; clocks = <&gateclk 9>;
status = "disabled"; status = "disabled";
}; };
pcie@10,0 { pcie@6,0 {
device_type = "pci"; device_type = "pci";
assigned-addresses = <0x82000800 0 0x82000 0 0x2000>; assigned-addresses = <0x82000800 0 0x84000 0 0x2000>;
reg = <0x5000 0 0 0 0>; reg = <0x3000 0 0 0 0>;
#address-cells = <3>; #address-cells = <3>;
#size-cells = <2>; #size-cells = <2>;
#interrupt-cells = <1>; #interrupt-cells = <1>;
ranges = <0x82000000 0 0 0x82000000 0xa 0 1 0 ranges = <0x82000000 0 0 0x82000000 0x6 0 1 0
0x81000000 0 0 0x81000000 0xa 0 1 0>; 0x81000000 0 0 0x81000000 0x6 0 1 0>;
interrupt-map-mask = <0 0 0 0>; interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &mpic 103>; interrupt-map = <0 0 0 0 &mpic 63>;
marvell,pcie-port = <3>; marvell,pcie-port = <1>;
marvell,pcie-lane = <1>;
clocks = <&gateclk 10>;
status = "disabled";
};
pcie@7,0 {
device_type = "pci";
assigned-addresses = <0x82000800 0 0x88000 0 0x2000>;
reg = <0x3800 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
#interrupt-cells = <1>;
ranges = <0x82000000 0 0 0x82000000 0x7 0 1 0
0x81000000 0 0 0x81000000 0x7 0 1 0>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &mpic 64>;
marvell,pcie-port = <1>;
marvell,pcie-lane = <2>;
clocks = <&gateclk 11>;
status = "disabled";
};
pcie@8,0 {
device_type = "pci";
assigned-addresses = <0x82000800 0 0x8c000 0 0x2000>;
reg = <0x4000 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
#interrupt-cells = <1>;
ranges = <0x82000000 0 0 0x82000000 0x8 0 1 0
0x81000000 0 0 0x81000000 0x8 0 1 0>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &mpic 65>;
marvell,pcie-port = <1>;
marvell,pcie-lane = <3>;
clocks = <&gateclk 12>;
status = "disabled";
};
pcie@9,0 {
device_type = "pci";
assigned-addresses = <0x82000800 0 0x42000 0 0x2000>;
reg = <0x4800 0 0 0 0>;
#address-cells = <3>;
#size-cells = <2>;
#interrupt-cells = <1>;
ranges = <0x82000000 0 0 0x82000000 0x9 0 1 0
0x81000000 0 0 0x81000000 0x9 0 1 0>;
interrupt-map-mask = <0 0 0 0>;
interrupt-map = <0 0 0 0 &mpic 99>;
marvell,pcie-port = <2>;
marvell,pcie-lane = <0>; marvell,pcie-lane = <0>;
clocks = <&gateclk 27>; clocks = <&gateclk 26>;
status = "disabled"; status = "disabled";
}; };
}; };
......
...@@ -11,6 +11,10 @@ ...@@ -11,6 +11,10 @@
#include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/interrupt-controller/irq.h>
/ { / {
aliases {
serial4 = &usart3;
};
ahb { ahb {
apb { apb {
pinctrl@fffff400 { pinctrl@fffff400 {
......
...@@ -44,8 +44,8 @@ ...@@ -44,8 +44,8 @@
gpmc,wr-access-ns = <186>; gpmc,wr-access-ns = <186>;
gpmc,cycle2cycle-samecsen; gpmc,cycle2cycle-samecsen;
gpmc,cycle2cycle-diffcsen; gpmc,cycle2cycle-diffcsen;
vmmc-supply = <&vddvario>; vddvario-supply = <&vddvario>;
vmmc_aux-supply = <&vdd33a>; vdd33a-supply = <&vdd33a>;
reg-io-width = <4>; reg-io-width = <4>;
smsc,save-mac-address; smsc,save-mac-address;
}; };
......
...@@ -215,3 +215,10 @@ ...@@ -215,3 +215,10 @@
&usbhsehci { &usbhsehci {
phys = <0 &hsusb2_phy>; phys = <0 &hsusb2_phy>;
}; };
&vaux2 {
regulator-name = "usb_1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
...@@ -61,6 +61,14 @@ ...@@ -61,6 +61,14 @@
vcc-supply = <&hsusb2_power>; vcc-supply = <&hsusb2_power>;
}; };
sound {
compatible = "ti,omap-twl4030";
ti,model = "omap3beagle";
ti,mcbsp = <&mcbsp2>;
ti,codec = <&twl_audio>;
};
gpio_keys { gpio_keys {
compatible = "gpio-keys"; compatible = "gpio-keys";
...@@ -120,6 +128,12 @@ ...@@ -120,6 +128,12 @@
reg = <0x48>; reg = <0x48>;
interrupts = <7>; /* SYS_NIRQ cascaded to intc */ interrupts = <7>; /* SYS_NIRQ cascaded to intc */
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
twl_audio: audio {
compatible = "ti,twl4030-audio";
codec {
};
};
}; };
}; };
...@@ -178,3 +192,10 @@ ...@@ -178,3 +192,10 @@
mode = <3>; mode = <3>;
power = <50>; power = <50>;
}; };
&vaux2 {
regulator-name = "vdd_ehci";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
/* /*
* Device Tree Source for IGEP Technology devices * Common device tree for IGEP boards based on AM/DM37x
* *
* Copyright (C) 2012 Javier Martinez Canillas <javier@collabora.co.uk> * Copyright (C) 2012 Javier Martinez Canillas <javier@collabora.co.uk>
* Copyright (C) 2012 Enric Balletbo i Serra <eballetbo@gmail.com> * Copyright (C) 2012 Enric Balletbo i Serra <eballetbo@gmail.com>
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
*/ */
/dts-v1/; /dts-v1/;
#include "omap34xx.dtsi" #include "omap36xx.dtsi"
/ { / {
memory { memory {
...@@ -24,6 +24,25 @@ ...@@ -24,6 +24,25 @@
ti,mcbsp = <&mcbsp2>; ti,mcbsp = <&mcbsp2>;
ti,codec = <&twl_audio>; ti,codec = <&twl_audio>;
}; };
vdd33: regulator-vdd33 {
compatible = "regulator-fixed";
regulator-name = "vdd33";
regulator-always-on;
};
lbee1usjyc_vmmc: lbee1usjyc_vmmc {
pinctrl-names = "default";
pinctrl-0 = <&lbee1usjyc_pins>;
compatible = "regulator-fixed";
regulator-name = "regulator-lbee1usjyc";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&gpio5 10 GPIO_ACTIVE_HIGH>; /* gpio_138 WIFI_PDN */
startup-delay-us = <10000>;
enable-active-high;
vin-supply = <&vdd33>;
};
}; };
&omap3_pmx_core { &omap3_pmx_core {
...@@ -48,6 +67,15 @@ ...@@ -48,6 +67,15 @@
>; >;
}; };
/* WiFi/BT combo */
lbee1usjyc_pins: pinmux_lbee1usjyc_pins {
pinctrl-single,pins = <
0x136 (PIN_OUTPUT | MUX_MODE4) /* sdmmc2_dat5.gpio_137 */
0x138 (PIN_OUTPUT | MUX_MODE4) /* sdmmc2_dat6.gpio_138 */
0x13a (PIN_OUTPUT | MUX_MODE4) /* sdmmc2_dat7.gpio_139 */
>;
};
mcbsp2_pins: pinmux_mcbsp2_pins { mcbsp2_pins: pinmux_mcbsp2_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
0x10c (PIN_INPUT | MUX_MODE0) /* mcbsp2_fsx.mcbsp2_fsx */ 0x10c (PIN_INPUT | MUX_MODE0) /* mcbsp2_fsx.mcbsp2_fsx */
...@@ -65,10 +93,17 @@ ...@@ -65,10 +93,17 @@
0x11a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */ 0x11a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */
0x11c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */ 0x11c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */
0x11e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */ 0x11e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */
0x120 (PIN_INPUT | MUX_MODE0) /* sdmmc1_dat4.sdmmc1_dat4 */ >;
0x122 (PIN_INPUT | MUX_MODE0) /* sdmmc1_dat5.sdmmc1_dat5 */ };
0x124 (PIN_INPUT | MUX_MODE0) /* sdmmc1_dat6.sdmmc1_dat6 */
0x126 (PIN_INPUT | MUX_MODE0) /* sdmmc1_dat7.sdmmc1_dat7 */ mmc2_pins: pinmux_mmc2_pins {
pinctrl-single,pins = <
0x128 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk.sdmmc2_clk */
0x12a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd.sdmmc2_cmd */
0x12c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0.sdmmc2_dat0 */
0x12e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1.sdmmc2_dat1 */
0x130 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2.sdmmc2_dat2 */
0x132 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3.sdmmc2_dat3 */
>; >;
}; };
...@@ -78,10 +113,33 @@ ...@@ -78,10 +113,33 @@
>; >;
}; };
i2c1_pins: pinmux_i2c1_pins {
pinctrl-single,pins = <
0x18a (PIN_INPUT | MUX_MODE0) /* i2c1_scl.i2c1_scl */
0x18c (PIN_INPUT | MUX_MODE0) /* i2c1_sda.i2c1_sda */
>;
};
i2c2_pins: pinmux_i2c2_pins {
pinctrl-single,pins = <
0x18e (PIN_INPUT | MUX_MODE0) /* i2c2_scl.i2c2_scl */
0x190 (PIN_INPUT | MUX_MODE0) /* i2c2_sda.i2c2_sda */
>;
};
i2c3_pins: pinmux_i2c3_pins {
pinctrl-single,pins = <
0x192 (PIN_INPUT | MUX_MODE0) /* i2c3_scl.i2c3_scl */
0x194 (PIN_INPUT | MUX_MODE0) /* i2c3_sda.i2c3_sda */
>;
};
leds_pins: pinmux_leds_pins { }; leds_pins: pinmux_leds_pins { };
}; };
&i2c1 { &i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <2600000>; clock-frequency = <2600000>;
twl: twl@48 { twl: twl@48 {
...@@ -101,9 +159,16 @@ ...@@ -101,9 +159,16 @@
#include "twl4030_omap3.dtsi" #include "twl4030_omap3.dtsi"
&i2c2 { &i2c2 {
pinctrl-names = "default";
pinctrl-0 = <&i2c2_pins>;
clock-frequency = <400000>; clock-frequency = <400000>;
}; };
&i2c3 {
pinctrl-names = "default";
pinctrl-0 = <&i2c3_pins>;
};
&mcbsp2 { &mcbsp2 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&mcbsp2_pins>; pinctrl-0 = <&mcbsp2_pins>;
...@@ -114,11 +179,15 @@ ...@@ -114,11 +179,15 @@
pinctrl-0 = <&mmc1_pins>; pinctrl-0 = <&mmc1_pins>;
vmmc-supply = <&vmmc1>; vmmc-supply = <&vmmc1>;
vmmc_aux-supply = <&vsim>; vmmc_aux-supply = <&vsim>;
bus-width = <8>; bus-width = <4>;
}; };
&mmc2 { &mmc2 {
status = "disabled"; pinctrl-names = "default";
pinctrl-0 = <&mmc2_pins>;
vmmc-supply = <&lbee1usjyc_vmmc>;
bus-width = <4>;
non-removable;
}; };
&mmc3 { &mmc3 {
......
/* /*
* Device Tree Source for IGEPv2 board * Device Tree Source for IGEPv2 Rev. (TI OMAP AM/DM37x)
* *
* Copyright (C) 2012 Javier Martinez Canillas <javier@collabora.co.uk> * Copyright (C) 2012 Javier Martinez Canillas <javier@collabora.co.uk>
* Copyright (C) 2012 Enric Balletbo i Serra <eballetbo@gmail.com> * Copyright (C) 2012 Enric Balletbo i Serra <eballetbo@gmail.com>
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include "omap-gpmc-smsc911x.dtsi" #include "omap-gpmc-smsc911x.dtsi"
/ { / {
model = "IGEPv2"; model = "IGEPv2 (TI OMAP AM/DM37x)";
compatible = "isee,omap3-igep0020", "ti,omap3"; compatible = "isee,omap3-igep0020", "ti,omap3";
leds { leds {
...@@ -67,6 +67,8 @@ ...@@ -67,6 +67,8 @@
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = < pinctrl-0 = <
&hsusbb1_pins &hsusbb1_pins
&tfp410_pins
&dss_pins
>; >;
hsusbb1_pins: pinmux_hsusbb1_pins { hsusbb1_pins: pinmux_hsusbb1_pins {
...@@ -85,6 +87,45 @@ ...@@ -85,6 +87,45 @@
0x5ba (PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d7.hsusb1_data3 */ 0x5ba (PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d7.hsusb1_data3 */
>; >;
}; };
tfp410_pins: tfp410_dvi_pins {
pinctrl-single,pins = <
0x196 (PIN_OUTPUT | MUX_MODE4) /* hdq_sio.gpio_170 */
>;
};
dss_pins: pinmux_dss_dvi_pins {
pinctrl-single,pins = <
0x0a4 (PIN_OUTPUT | MUX_MODE0) /* dss_pclk.dss_pclk */
0x0a6 (PIN_OUTPUT | MUX_MODE0) /* dss_hsync.dss_hsync */
0x0a8 (PIN_OUTPUT | MUX_MODE0) /* dss_vsync.dss_vsync */
0x0aa (PIN_OUTPUT | MUX_MODE0) /* dss_acbias.dss_acbias */
0x0ac (PIN_OUTPUT | MUX_MODE0) /* dss_data0.dss_data0 */
0x0ae (PIN_OUTPUT | MUX_MODE0) /* dss_data1.dss_data1 */
0x0b0 (PIN_OUTPUT | MUX_MODE0) /* dss_data2.dss_data2 */
0x0b2 (PIN_OUTPUT | MUX_MODE0) /* dss_data3.dss_data3 */
0x0b4 (PIN_OUTPUT | MUX_MODE0) /* dss_data4.dss_data4 */
0x0b6 (PIN_OUTPUT | MUX_MODE0) /* dss_data5.dss_data5 */
0x0b8 (PIN_OUTPUT | MUX_MODE0) /* dss_data6.dss_data6 */
0x0ba (PIN_OUTPUT | MUX_MODE0) /* dss_data7.dss_data7 */
0x0bc (PIN_OUTPUT | MUX_MODE0) /* dss_data8.dss_data8 */
0x0be (PIN_OUTPUT | MUX_MODE0) /* dss_data9.dss_data9 */
0x0c0 (PIN_OUTPUT | MUX_MODE0) /* dss_data10.dss_data10 */
0x0c2 (PIN_OUTPUT | MUX_MODE0) /* dss_data11.dss_data11 */
0x0c4 (PIN_OUTPUT | MUX_MODE0) /* dss_data12.dss_data12 */
0x0c6 (PIN_OUTPUT | MUX_MODE0) /* dss_data13.dss_data13 */
0x0c8 (PIN_OUTPUT | MUX_MODE0) /* dss_data14.dss_data14 */
0x0ca (PIN_OUTPUT | MUX_MODE0) /* dss_data15.dss_data15 */
0x0cc (PIN_OUTPUT | MUX_MODE0) /* dss_data16.dss_data16 */
0x0ce (PIN_OUTPUT | MUX_MODE0) /* dss_data17.dss_data17 */
0x0d0 (PIN_OUTPUT | MUX_MODE0) /* dss_data18.dss_data18 */
0x0d2 (PIN_OUTPUT | MUX_MODE0) /* dss_data19.dss_data19 */
0x0d4 (PIN_OUTPUT | MUX_MODE0) /* dss_data20.dss_data20 */
0x0d6 (PIN_OUTPUT | MUX_MODE0) /* dss_data21.dss_data21 */
0x0d8 (PIN_OUTPUT | MUX_MODE0) /* dss_data22.dss_data22 */
0x0da (PIN_OUTPUT | MUX_MODE0) /* dss_data23.dss_data23 */
>;
};
}; };
&leds_pins { &leds_pins {
...@@ -174,3 +215,8 @@ ...@@ -174,3 +215,8 @@
&usbhsehci { &usbhsehci {
phys = <&hsusb1_phy>; phys = <&hsusb1_phy>;
}; };
&vpll2 {
/* Needed for DSS */
regulator-name = "vdds_dsi";
};
/* /*
* Device Tree Source for IGEP COM Module * Device Tree Source for IGEP COM MODULE (TI OMAP AM/DM37x)
* *
* Copyright (C) 2012 Javier Martinez Canillas <javier@collabora.co.uk> * Copyright (C) 2012 Javier Martinez Canillas <javier@collabora.co.uk>
* Copyright (C) 2012 Enric Balletbo i Serra <eballetbo@gmail.com> * Copyright (C) 2012 Enric Balletbo i Serra <eballetbo@gmail.com>
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "omap3-igep.dtsi" #include "omap3-igep.dtsi"
/ { / {
model = "IGEP COM Module"; model = "IGEP COM MODULE (TI OMAP AM/DM37x)";
compatible = "isee,omap3-igep0030", "ti,omap3"; compatible = "isee,omap3-igep0030", "ti,omap3";
leds { leds {
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
/dts-v1/; /dts-v1/;
#include "omap34xx.dtsi" #include "omap34xx-hs.dtsi"
/ { / {
model = "Nokia N900"; model = "Nokia N900";
...@@ -125,6 +125,21 @@ ...@@ -125,6 +125,21 @@
>; >;
}; };
mmc2_pins: pinmux_mmc2_pins {
pinctrl-single,pins = <
0x128 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk */
0x12a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd */
0x12c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0 */
0x12e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1 */
0x130 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2 */
0x132 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3 */
0x134 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat4 */
0x136 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat5 */
0x138 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat6 */
0x13a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat7 */
>;
};
display_pins: pinmux_display_pins { display_pins: pinmux_display_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
0x0d4 (PIN_OUTPUT | MUX_MODE4) /* RX51_LCD_RESET_GPIO */ 0x0d4 (PIN_OUTPUT | MUX_MODE4) /* RX51_LCD_RESET_GPIO */
...@@ -358,8 +373,14 @@ ...@@ -358,8 +373,14 @@
cd-gpios = <&gpio6 0 GPIO_ACTIVE_HIGH>; /* 160 */ cd-gpios = <&gpio6 0 GPIO_ACTIVE_HIGH>; /* 160 */
}; };
/* most boards use vaux3, only some old versions use vmmc2 instead */
&mmc2 { &mmc2 {
status = "disabled"; pinctrl-names = "default";
pinctrl-0 = <&mmc2_pins>;
vmmc-supply = <&vaux3>;
vmmc_aux-supply = <&vsim>;
bus-width = <8>;
non-removable;
}; };
&mmc3 { &mmc3 {
......
...@@ -8,7 +8,7 @@ ...@@ -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 {
......
...@@ -82,6 +82,13 @@ ...@@ -82,6 +82,13 @@
ranges; ranges;
ti,hwmods = "l3_main"; ti,hwmods = "l3_main";
aes: aes@480c5000 {
compatible = "ti,omap3-aes";
ti,hwmods = "aes";
reg = <0x480c5000 0x50>;
interrupts = <0>;
};
counter32k: counter@48320000 { counter32k: counter@48320000 {
compatible = "ti,omap-counter32k"; compatible = "ti,omap-counter32k";
reg = <0x48320000 0x20>; reg = <0x48320000 0x20>;
...@@ -260,6 +267,13 @@ ...@@ -260,6 +267,13 @@
ti,hwmods = "i2c3"; ti,hwmods = "i2c3";
}; };
mailbox: mailbox@48094000 {
compatible = "ti,omap3-mailbox";
ti,hwmods = "mailbox";
reg = <0x48094000 0x200>;
interrupts = <26>;
};
mcspi1: spi@48098000 { mcspi1: spi@48098000 {
compatible = "ti,omap2-mcspi"; compatible = "ti,omap2-mcspi";
reg = <0x48098000 0x100>; reg = <0x48098000 0x100>;
...@@ -357,6 +371,13 @@ ...@@ -357,6 +371,13 @@
dma-names = "tx", "rx"; dma-names = "tx", "rx";
}; };
mmu_isp: mmu@480bd400 {
compatible = "ti,omap3-mmu-isp";
ti,hwmods = "mmu_isp";
reg = <0x480bd400 0x80>;
interrupts = <8>;
};
wdt2: wdt@48314000 { wdt2: wdt@48314000 {
compatible = "ti,omap3-wdt"; compatible = "ti,omap3-wdt";
reg = <0x48314000 0x80>; reg = <0x48314000 0x80>;
...@@ -442,6 +463,27 @@ ...@@ -442,6 +463,27 @@
dma-names = "tx", "rx"; dma-names = "tx", "rx";
}; };
sham: sham@480c3000 {
compatible = "ti,omap3-sham";
ti,hwmods = "sham";
reg = <0x480c3000 0x64>;
interrupts = <49>;
};
smartreflex_core: smartreflex@480cb000 {
compatible = "ti,omap3-smartreflex-core";
ti,hwmods = "smartreflex_core";
reg = <0x480cb000 0x400>;
interrupts = <19>;
};
smartreflex_mpu_iva: smartreflex@480c9000 {
compatible = "ti,omap3-smartreflex-iva";
ti,hwmods = "smartreflex_mpu_iva";
reg = <0x480c9000 0x400>;
interrupts = <18>;
};
timer1: timer@48318000 { timer1: timer@48318000 {
compatible = "ti,omap3430-timer"; compatible = "ti,omap3430-timer";
reg = <0x48318000 0x400>; reg = <0x48318000 0x400>;
......
/* 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";
};
/* 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";
};
...@@ -246,15 +246,6 @@ ...@@ -246,15 +246,6 @@
0xf0 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c4_sda */ 0xf0 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c4_sda */
>; >;
}; };
};
&omap4_pmx_wkup {
led_wkgpio_pins: pinmux_leds_wkpins {
pinctrl-single,pins = <
0x1a (PIN_OUTPUT | MUX_MODE3) /* gpio_wk7 */
0x1c (PIN_OUTPUT | MUX_MODE3) /* gpio_wk8 */
>;
};
/* /*
* wl12xx GPIO outputs for WLAN_EN, BT_EN, FM_EN, BT_WAKEUP * wl12xx GPIO outputs for WLAN_EN, BT_EN, FM_EN, BT_WAKEUP
...@@ -274,7 +265,7 @@ ...@@ -274,7 +265,7 @@
pinctrl-single,pins = < pinctrl-single,pins = <
0x38 (PIN_INPUT | MUX_MODE3) /* gpmc_ncs2.gpio_52 */ 0x38 (PIN_INPUT | MUX_MODE3) /* gpmc_ncs2.gpio_52 */
0x3a (PIN_INPUT | MUX_MODE3) /* gpmc_ncs3.gpio_53 */ 0x3a (PIN_INPUT | MUX_MODE3) /* gpmc_ncs3.gpio_53 */
0x108 (PIN_OUTPUT | MUX_MODE0) /* sdmmc5_clk.sdmmc5_clk */ 0x108 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_clk.sdmmc5_clk */
0x10a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_cmd.sdmmc5_cmd */ 0x10a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_cmd.sdmmc5_cmd */
0x10c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat0.sdmmc5_dat0 */ 0x10c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat0.sdmmc5_dat0 */
0x10e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat1.sdmmc5_dat1 */ 0x10e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat1.sdmmc5_dat1 */
...@@ -284,6 +275,15 @@ ...@@ -284,6 +275,15 @@
}; };
}; };
&omap4_pmx_wkup {
led_wkgpio_pins: pinmux_leds_wkpins {
pinctrl-single,pins = <
0x1a (PIN_OUTPUT | MUX_MODE3) /* gpio_wk7 */
0x1c (PIN_OUTPUT | MUX_MODE3) /* gpio_wk8 */
>;
};
};
&i2c1 { &i2c1 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>; pinctrl-0 = <&i2c1_pins>;
......
...@@ -300,12 +300,12 @@ ...@@ -300,12 +300,12 @@
wl12xx_pins: pinmux_wl12xx_pins { wl12xx_pins: pinmux_wl12xx_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
0x3a (PIN_INPUT | MUX_MODE3) /* gpmc_ncs3.gpio_53 */ 0x3a (PIN_INPUT | MUX_MODE3) /* gpmc_ncs3.gpio_53 */
0x108 (PIN_OUTPUT | MUX_MODE3) /* sdmmc5_clk.sdmmc5_clk */ 0x108 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_clk.sdmmc5_clk */
0x10a (PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc5_cmd.sdmmc5_cmd */ 0x10a (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_cmd.sdmmc5_cmd */
0x10c (PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc5_dat0.sdmmc5_dat0 */ 0x10c (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat0.sdmmc5_dat0 */
0x10e (PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc5_dat1.sdmmc5_dat1 */ 0x10e (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat1.sdmmc5_dat1 */
0x110 (PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc5_dat2.sdmmc5_dat2 */ 0x110 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat2.sdmmc5_dat2 */
0x112 (PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc5_dat3.sdmmc5_dat3 */ 0x112 (PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc5_dat3.sdmmc5_dat3 */
>; >;
}; };
}; };
......
...@@ -245,14 +245,14 @@ ...@@ -245,14 +245,14 @@
mpu_periph_clk: mpu_periph_clk { mpu_periph_clk: mpu_periph_clk {
#clock-cells = <0>; #clock-cells = <0>;
compatible = "altr,socfpga-gate-clk"; compatible = "altr,socfpga-perip-clk";
clocks = <&mpuclk>; clocks = <&mpuclk>;
fixed-divider = <4>; fixed-divider = <4>;
}; };
mpu_l2_ram_clk: mpu_l2_ram_clk { mpu_l2_ram_clk: mpu_l2_ram_clk {
#clock-cells = <0>; #clock-cells = <0>;
compatible = "altr,socfpga-gate-clk"; compatible = "altr,socfpga-perip-clk";
clocks = <&mpuclk>; clocks = <&mpuclk>;
fixed-divider = <2>; fixed-divider = <2>;
}; };
...@@ -266,8 +266,9 @@ ...@@ -266,8 +266,9 @@
l3_main_clk: l3_main_clk { l3_main_clk: l3_main_clk {
#clock-cells = <0>; #clock-cells = <0>;
compatible = "altr,socfpga-gate-clk"; compatible = "altr,socfpga-perip-clk";
clocks = <&mainclk>; clocks = <&mainclk>;
fixed-divider = <1>;
}; };
l3_mp_clk: l3_mp_clk { l3_mp_clk: l3_mp_clk {
......
...@@ -193,7 +193,10 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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";
......
...@@ -69,6 +69,7 @@ CONFIG_KS8851=y ...@@ -69,6 +69,7 @@ CONFIG_KS8851=y
CONFIG_SMSC911X=y CONFIG_SMSC911X=y
CONFIG_STMMAC_ETH=y CONFIG_STMMAC_ETH=y
CONFIG_MDIO_SUN4I=y CONFIG_MDIO_SUN4I=y
CONFIG_TI_CPSW=y
CONFIG_KEYBOARD_SPEAR=y CONFIG_KEYBOARD_SPEAR=y
CONFIG_SERIO_AMBAKMI=y CONFIG_SERIO_AMBAKMI=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
...@@ -133,12 +134,14 @@ CONFIG_USB_GPIO_VBUS=y ...@@ -133,12 +134,14 @@ CONFIG_USB_GPIO_VBUS=y
CONFIG_USB_ISP1301=y CONFIG_USB_ISP1301=y
CONFIG_USB_MXS_PHY=y CONFIG_USB_MXS_PHY=y
CONFIG_MMC=y CONFIG_MMC=y
CONFIG_MMC_BLOCK_MINORS=16
CONFIG_MMC_ARMMMCI=y CONFIG_MMC_ARMMMCI=y
CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_ESDHC_IMX=y CONFIG_MMC_SDHCI_ESDHC_IMX=y
CONFIG_MMC_SDHCI_TEGRA=y CONFIG_MMC_SDHCI_TEGRA=y
CONFIG_MMC_SDHCI_SPEAR=y CONFIG_MMC_SDHCI_SPEAR=y
CONFIG_MMC_SDHCI_BCM_KONA=y
CONFIG_MMC_OMAP=y CONFIG_MMC_OMAP=y
CONFIG_MMC_OMAP_HS=y CONFIG_MMC_OMAP_HS=y
CONFIG_EDAC=y CONFIG_EDAC=y
......
...@@ -173,6 +173,7 @@ CONFIG_MFD_PALMAS=y ...@@ -173,6 +173,7 @@ CONFIG_MFD_PALMAS=y
CONFIG_MFD_TPS65217=y CONFIG_MFD_TPS65217=y
CONFIG_MFD_TPS65910=y CONFIG_MFD_TPS65910=y
CONFIG_TWL6040_CORE=y CONFIG_TWL6040_CORE=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_REGULATOR_PALMAS=y CONFIG_REGULATOR_PALMAS=y
CONFIG_REGULATOR_TPS65023=y CONFIG_REGULATOR_TPS65023=y
CONFIG_REGULATOR_TPS6507X=y CONFIG_REGULATOR_TPS6507X=y
......
...@@ -12,6 +12,9 @@ CONFIG_NET=y ...@@ -12,6 +12,9 @@ CONFIG_NET=y
CONFIG_PACKET=y CONFIG_PACKET=y
CONFIG_UNIX=y CONFIG_UNIX=y
CONFIG_INET=y CONFIG_INET=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set # CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set # CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set # CONFIG_INET_XFRM_MODE_BEET is not set
...@@ -58,4 +61,8 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=y ...@@ -58,4 +61,8 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=y
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
CONFIG_COMMON_CLK_DEBUG=y CONFIG_COMMON_CLK_DEBUG=y
# CONFIG_IOMMU_SUPPORT is not set # CONFIG_IOMMU_SUPPORT is not set
CONFIG_TMPFS=y
CONFIG_NFS_FS=y
CONFIG_ROOT_NFS=y
CONFIG_NLS=y CONFIG_NLS=y
CONFIG_PRINTK_TIME=y
...@@ -22,6 +22,7 @@ CONFIG_CMDLINE="root=/dev/ram0 console=ttyAMA2,115200n8" ...@@ -22,6 +22,7 @@ CONFIG_CMDLINE="root=/dev/ram0 console=ttyAMA2,115200n8"
CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
CONFIG_CPU_IDLE=y CONFIG_CPU_IDLE=y
CONFIG_ARM_U8500_CPUIDLE=y
CONFIG_VFP=y CONFIG_VFP=y
CONFIG_NEON=y CONFIG_NEON=y
CONFIG_PM_RUNTIME=y CONFIG_PM_RUNTIME=y
...@@ -109,6 +110,8 @@ CONFIG_EXT2_FS_SECURITY=y ...@@ -109,6 +110,8 @@ CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
CONFIG_EXT4_FS=y CONFIG_EXT4_FS=y
CONFIG_VFAT_FS=y CONFIG_VFAT_FS=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_TMPFS=y CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y CONFIG_TMPFS_POSIX_ACL=y
# CONFIG_MISC_FILESYSTEMS is not set # CONFIG_MISC_FILESYSTEMS is not set
......
...@@ -100,23 +100,19 @@ ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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); ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 ...@@ -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();
......
...@@ -174,7 +174,6 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev) ...@@ -174,7 +174,6 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev)
static struct clock_event_device clkevt = { static struct clock_event_device clkevt = {
.name = "at91_tick", .name = "at91_tick",
.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
.shift = 32,
.rating = 150, .rating = 150,
.set_next_event = clkevt32k_next_event, .set_next_event = clkevt32k_next_event,
.set_mode = clkevt32k_mode, .set_mode = clkevt32k_mode,
...@@ -265,11 +264,9 @@ void __init at91rm9200_timer_init(void) ...@@ -265,11 +264,9 @@ void __init at91rm9200_timer_init(void)
at91_st_write(AT91_ST_RTMR, 1); at91_st_write(AT91_ST_RTMR, 1);
/* Setup timer clockevent, with minimum of two ticks (important!!) */ /* Setup timer clockevent, with minimum of two ticks (important!!) */
clkevt.mult = div_sc(AT91_SLOW_CLOCK, NSEC_PER_SEC, clkevt.shift);
clkevt.max_delta_ns = clockevent_delta2ns(AT91_ST_ALMV, &clkevt);
clkevt.min_delta_ns = clockevent_delta2ns(2, &clkevt) + 1;
clkevt.cpumask = cpumask_of(0); clkevt.cpumask = cpumask_of(0);
clockevents_register_device(&clkevt); clockevents_config_and_register(&clkevt, AT91_SLOW_CLOCK,
2, AT91_ST_ALMV);
/* register clocksource */ /* register clocksource */
clocksource_register_hz(&clk32k, AT91_SLOW_CLOCK); clocksource_register_hz(&clk32k, AT91_SLOW_CLOCK);
......
...@@ -16,7 +16,11 @@ ...@@ -16,7 +16,11 @@
#include <mach/at91_ramc.h> #include <mach/at91_ramc.h>
#include <mach/at91rm9200_sdramc.h> #include <mach/at91rm9200_sdramc.h>
#ifdef CONFIG_PM
extern void at91_pm_set_standby(void (*at91_standby)(void)); extern void at91_pm_set_standby(void (*at91_standby)(void));
#else
static inline void at91_pm_set_standby(void (*at91_standby)(void)) { }
#endif
/* /*
* The AT91RM9200 goes into self-refresh mode with this command, and will * The AT91RM9200 goes into self-refresh mode with this command, and will
......
...@@ -95,19 +95,19 @@ static struct clk twi0_clk = { ...@@ -95,19 +95,19 @@ static struct clk twi0_clk = {
.name = "twi0_clk", .name = "twi0_clk",
.pid = SAMA5D3_ID_TWI0, .pid = SAMA5D3_ID_TWI0,
.type = CLK_TYPE_PERIPHERAL, .type = CLK_TYPE_PERIPHERAL,
.div = AT91_PMC_PCR_DIV2, .div = AT91_PMC_PCR_DIV8,
}; };
static struct clk twi1_clk = { static struct clk twi1_clk = {
.name = "twi1_clk", .name = "twi1_clk",
.pid = SAMA5D3_ID_TWI1, .pid = SAMA5D3_ID_TWI1,
.type = CLK_TYPE_PERIPHERAL, .type = CLK_TYPE_PERIPHERAL,
.div = AT91_PMC_PCR_DIV2, .div = AT91_PMC_PCR_DIV8,
}; };
static struct clk twi2_clk = { static struct clk twi2_clk = {
.name = "twi2_clk", .name = "twi2_clk",
.pid = SAMA5D3_ID_TWI2, .pid = SAMA5D3_ID_TWI2,
.type = CLK_TYPE_PERIPHERAL, .type = CLK_TYPE_PERIPHERAL,
.div = AT91_PMC_PCR_DIV2, .div = AT91_PMC_PCR_DIV8,
}; };
static struct clk mmc0_clk = { static struct clk mmc0_clk = {
.name = "mci0_clk", .name = "mci0_clk",
......
...@@ -487,7 +487,7 @@ int __init da8xx_register_emac(void) ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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[] = { ...@@ -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 = { ...@@ -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);
} }
/*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/
......
...@@ -17,12 +17,15 @@ ...@@ -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 = { ...@@ -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) ...@@ -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)
......
...@@ -131,6 +131,24 @@ DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)") ...@@ -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
......
...@@ -223,7 +223,7 @@ void __init omap_4430sdp_display_init_of(void) ...@@ -223,7 +223,7 @@ void __init omap_4430sdp_display_init_of(void)
static struct connector_dvi_platform_data omap3_igep2_dvi_connector_pdata = { static struct connector_dvi_platform_data omap3_igep2_dvi_connector_pdata = {
.name = "dvi", .name = "dvi",
.source = "tfp410.0", .source = "tfp410.0",
.i2c_bus_num = 3, .i2c_bus_num = 2,
}; };
static struct platform_device omap3_igep2_dvi_connector_device = { static struct platform_device omap3_igep2_dvi_connector_device = {
......
...@@ -183,6 +183,10 @@ static int omap_device_build_from_dt(struct platform_device *pdev) ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = {
......
...@@ -139,6 +139,7 @@ struct of_dev_auxdata omap_auxdata_lookup[] __initdata = { ...@@ -139,6 +139,7 @@ struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
static struct pdata_init pdata_quirks[] __initdata = { static struct pdata_init pdata_quirks[] __initdata = {
#ifdef CONFIG_ARCH_OMAP3 #ifdef CONFIG_ARCH_OMAP3
{ "nokia,omap3-n900", hsmmc2_internal_input_clk, },
{ "nokia,omap3-n9", hsmmc2_internal_input_clk, }, { "nokia,omap3-n9", hsmmc2_internal_input_clk, },
{ "nokia,omap3-n950", hsmmc2_internal_input_clk, }, { "nokia,omap3-n950", hsmmc2_internal_input_clk, },
{ "isee,omap3-igep0020", omap3_igep0020_legacy_init, }, { "isee,omap3-igep0020", omap3_igep0020_legacy_init, },
......
...@@ -128,7 +128,8 @@ static int _pwrdm_register(struct powerdomain *pwrdm) ...@@ -128,7 +128,8 @@ static int _pwrdm_register(struct powerdomain *pwrdm)
for (i = 0; i < pwrdm->banks; i++) for (i = 0; i < pwrdm->banks; i++)
pwrdm->ret_mem_off_counter[i] = 0; pwrdm->ret_mem_off_counter[i] = 0;
arch_pwrdm->pwrdm_wait_transition(pwrdm); if (arch_pwrdm && arch_pwrdm->pwrdm_wait_transition)
arch_pwrdm->pwrdm_wait_transition(pwrdm);
pwrdm->state = pwrdm_read_pwrst(pwrdm); pwrdm->state = pwrdm_read_pwrst(pwrdm);
pwrdm->state_counter[pwrdm->state] = 1; pwrdm->state_counter[pwrdm->state] = 1;
......
...@@ -13,6 +13,7 @@ ...@@ -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) ...@@ -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) ...@@ -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 = { ...@@ -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 = {
......
...@@ -10,6 +10,7 @@ config ARCH_SOCFPGA ...@@ -10,6 +10,7 @@ config ARCH_SOCFPGA
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select GPIO_PL061 if GPIOLIB select GPIO_PL061 if GPIOLIB
select HAVE_ARM_SCU select HAVE_ARM_SCU
select HAVE_ARM_TWD if SMP
select HAVE_SMP select HAVE_SMP
select MFD_SYSCON select MFD_SYSCON
select SPARSE_IRQ select SPARSE_IRQ
......
...@@ -198,10 +198,12 @@ void __init tegra_init_fuse(void) ...@@ -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",
......
...@@ -140,6 +140,10 @@ static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = { ...@@ -140,6 +140,10 @@ static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
/* Requires call-back bindings. */ /* Requires call-back bindings. */
OF_DEV_AUXDATA("arm,cortex-a9-pmu", 0, "arm-pmu", &db8500_pmu_platdata), OF_DEV_AUXDATA("arm,cortex-a9-pmu", 0, "arm-pmu", &db8500_pmu_platdata),
/* Requires DMA bindings. */ /* Requires DMA bindings. */
OF_DEV_AUXDATA("arm,pl18x", 0x80126000, "sdi0", &mop500_sdi0_data),
OF_DEV_AUXDATA("arm,pl18x", 0x80118000, "sdi1", &mop500_sdi1_data),
OF_DEV_AUXDATA("arm,pl18x", 0x80005000, "sdi2", &mop500_sdi2_data),
OF_DEV_AUXDATA("arm,pl18x", 0x80114000, "sdi4", &mop500_sdi4_data),
OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80123000, OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80123000,
"ux500-msp-i2s.0", &msp0_platform_data), "ux500-msp-i2s.0", &msp0_platform_data),
OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80124000, OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80124000,
......
...@@ -158,13 +158,49 @@ struct dma_map_ops arm_coherent_dma_ops = { ...@@ -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) ...@@ -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;
}
/*
* 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 0;
}
} }
return mask; return mask;
...@@ -1032,28 +1042,7 @@ void arm_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, ...@@ -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) ...@@ -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;
......
...@@ -336,8 +336,11 @@ static inline void __omap_dm_timer_enable_posted(struct omap_dm_timer *timer) ...@@ -336,8 +336,11 @@ static inline void __omap_dm_timer_enable_posted(struct omap_dm_timer *timer)
if (timer->posted) if (timer->posted)
return; return;
if (timer->errata & OMAP_TIMER_ERRATA_I103_I767) if (timer->errata & OMAP_TIMER_ERRATA_I103_I767) {
timer->posted = OMAP_TIMER_NONPOSTED;
__omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG, 0, 0);
return; return;
}
__omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG, __omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG,
OMAP_TIMER_CTRL_POSTED, 0); OMAP_TIMER_CTRL_POSTED, 0);
......
...@@ -159,8 +159,7 @@ config NR_CPUS ...@@ -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 ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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" ...@@ -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" ...@@ -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" ...@@ -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" ...@@ -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" ...@@ -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" ...@@ -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
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册