arm-soc: device tree conversions, part 1
The spear3xx, lpc32xx, shmobile and mmp platforms are joining the game of booting using device trees, which is a great step forward for them. at91 and spear have pretty much completed this process with a huge amount of work being put into at91. The other platforms are continuing the process. We finally start to see the payback on this investment, as new machines are getting supported purely by adding a .dts source file that can be completely independent of the kernel source. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJPueqRAAoJEIwa5zzehBx3AYkP/ibDGGd0qp1gxnxPYowliXcp lrWP8KB2PVcX/041jwpvsWeHzWT+Gm39ryBfz2L3pq/RiuU0jPPwChKgy1iglE8X 6Rq6sPWkXoDRtyeCuoiaxf1AYuzzAVdzZ0HlPO93tSKgo5eeyZRC5OeebAnrLDCE SDi8gZx2mm9+j2Dz46gq8QluyswMMbke3fHHHaHUlcP9fKIvFWvEfsn5j+YQ9bSw DrSIqGOzv6Emn7F6yhFQqxmk86KLnaXDVpAWgjVDhzaPv0rcTzloN6D2Ie2e5Vev BiRM1zvWn2d9kDk7gpm0t67nguYxsCBl1GNCP1brrncGwt15S10JimYlRhYW+B7u qgJqMPko3OnONvyl6e8qgIa2M5N4K/mo1i/jfOwFw3+KfUjXqLeio53Ysr4a6tsM Ev3bEsofNJKA0dlMcVzr7ntL087B6Y8mY3oJsVZji5M0KVfx1Jfn+X1W+l/2KD1H XWhJrCGa1HlbtSnrD+E91VHGC3M4sEXbbTljMAjHImlU9dGXmmbRMNsqNwkF6qFj EO2HnFvdN1oK+zEmeAttR1JHxfMdPFnTfmpUf3AiVSjGO//Wltelqx8ibA2Smn7S xXmzqX/HMhIOYCh81FdvzsK4qRYU5QyOsEJB4G0UjBZ66M1A3T/+vPpWuKsw5bUb qbnxaaXNsaZjWbbSSrZ4 =7DYv -----END PGP SIGNATURE----- Merge tag 'dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc Pull device tree conversions for arm-soc, part 1, from Olof Johansson: "The spear3xx, lpc32xx, shmobile and mmp platforms are joining the game of booting using device trees, which is a great step forward for them. at91 and spear have pretty much completed this process with a huge amount of work being put into at91. The other platforms are continuing the process. We finally start to see the payback on this investment, as new machines are getting supported purely by adding a .dts source file that can be completely independent of the kernel source." Fix up trivial conflict in arch/arm/Kconfig * tag 'dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (83 commits) ARM: at91: Add ADC driver to at91sam9260/at91sam9g20 dtsi files arm/dts: omap4-panda: Add LEDs support arm/dts: omap4-sdp: Add LEDs support arm/dts: twl4030: Add twl4030-gpio node OMAP4: devices: Do not create mcpdm device if the dtb has been provided OMAP4: devices: Do not create dmic device if the dtb has been provided Documentation: update docs for mmp dt ARM: dts: refresh dts file for arch mmp ARM: mmp: support pxa910 with device tree ARM: mmp: support mmp2 with device tree gpio: pxa: parse gpio from DTS file ARM: mmp: support DT in timer ARM: mmp: support DT in irq ARM: mmp: append CONFIG_MACH_MMP2_DT ARM: mmp: fix build issue on mmp with device tree ARM: ux500: Enable PRCMU Timer 4 (clocksource) for Device Tree ARM: ux500: Disable SMSC911x platform code registration when DT is enabled ARM: ux500: Fork cpu-db8500 platform_devs for sequential DT enablement ARM: ux500: Do not attempt to register non-existent i2c devices on Snowball ARM: SPEAr3xx: Correct keyboard data passed from DT ...
This commit is contained in:
commit
b324c67d48
@ -17,14 +17,14 @@ Introduction
|
||||
SPEAr (Platform)
|
||||
- SPEAr3XX (3XX SOC series, based on ARM9)
|
||||
- SPEAr300 (SOC)
|
||||
- SPEAr300_EVB (Evaluation Board)
|
||||
- SPEAr300 Evaluation Board
|
||||
- SPEAr310 (SOC)
|
||||
- SPEAr310_EVB (Evaluation Board)
|
||||
- SPEAr310 Evaluation Board
|
||||
- SPEAr320 (SOC)
|
||||
- SPEAr320_EVB (Evaluation Board)
|
||||
- SPEAr320 Evaluation Board
|
||||
- SPEAr6XX (6XX SOC series, based on ARM9)
|
||||
- SPEAr600 (SOC)
|
||||
- SPEAr600_EVB (Evaluation Board)
|
||||
- SPEAr600 Evaluation Board
|
||||
- SPEAr13XX (13XX SOC series, based on ARM CORTEXA9)
|
||||
- SPEAr1300 (SOC)
|
||||
|
||||
@ -51,10 +51,11 @@ Introduction
|
||||
Common file for machines of spear3xx family is mach-spear3xx/spear3xx.c and for
|
||||
spear6xx is mach-spear6xx/spear6xx.c. mach-spear* also contain soc/machine
|
||||
specific files, like spear300.c, spear310.c, spear320.c and spear600.c.
|
||||
mach-spear* also contains board specific files for each machine type.
|
||||
mach-spear* doesn't contains board specific files as they fully support
|
||||
Flattened Device Tree.
|
||||
|
||||
|
||||
Document Author
|
||||
---------------
|
||||
|
||||
Viresh Kumar, (c) 2010 ST Microelectronics
|
||||
Viresh Kumar <viresh.kumar@st.com>, (c) 2010-2012 ST Microelectronics
|
||||
|
38
Documentation/devicetree/bindings/arm/lpc32xx-mic.txt
Normal file
38
Documentation/devicetree/bindings/arm/lpc32xx-mic.txt
Normal file
@ -0,0 +1,38 @@
|
||||
* NXP LPC32xx Main Interrupt Controller
|
||||
(MIC, including SIC1 and SIC2 secondary controllers)
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "nxp,lpc3220-mic"
|
||||
- interrupt-controller: Identifies the node as an interrupt controller.
|
||||
- interrupt-parent: Empty for the interrupt controller itself
|
||||
- #interrupt-cells: The number of cells to define the interrupts. Should be 2.
|
||||
The first cell is the IRQ number
|
||||
The second cell is used to specify mode:
|
||||
1 = low-to-high edge triggered
|
||||
2 = high-to-low edge triggered
|
||||
4 = active high level-sensitive
|
||||
8 = active low level-sensitive
|
||||
Default for internal sources should be set to 4 (active high).
|
||||
- reg: Should contain MIC registers location and length
|
||||
|
||||
Examples:
|
||||
/*
|
||||
* MIC
|
||||
*/
|
||||
mic: interrupt-controller@40008000 {
|
||||
compatible = "nxp,lpc3220-mic";
|
||||
interrupt-controller;
|
||||
interrupt-parent;
|
||||
#interrupt-cells = <2>;
|
||||
reg = <0x40008000 0xC000>;
|
||||
};
|
||||
|
||||
/*
|
||||
* ADC
|
||||
*/
|
||||
adc@40048000 {
|
||||
compatible = "nxp,lpc3220-adc";
|
||||
reg = <0x40048000 0x1000>;
|
||||
interrupt-parent = <&mic>;
|
||||
interrupts = <39 4>;
|
||||
};
|
8
Documentation/devicetree/bindings/arm/lpc32xx.txt
Normal file
8
Documentation/devicetree/bindings/arm/lpc32xx.txt
Normal file
@ -0,0 +1,8 @@
|
||||
NXP LPC32xx Platforms Device Tree Bindings
|
||||
------------------------------------------
|
||||
|
||||
Boards with the NXP LPC32xx SoC shall have the following properties:
|
||||
|
||||
Required root node property:
|
||||
|
||||
compatible: must be "nxp,lpc3220", "nxp,lpc3230", "nxp,lpc3240" or "nxp,lpc3250"
|
40
Documentation/devicetree/bindings/arm/mrvl/intc.txt
Normal file
40
Documentation/devicetree/bindings/arm/mrvl/intc.txt
Normal file
@ -0,0 +1,40 @@
|
||||
* Marvell MMP Interrupt controller
|
||||
|
||||
Required properties:
|
||||
- compatible : Should be "mrvl,mmp-intc", "mrvl,mmp2-intc" or
|
||||
"mrvl,mmp2-mux-intc"
|
||||
- reg : Address and length of the register set of the interrupt controller.
|
||||
If the interrupt controller is intc, address and length means the range
|
||||
of the whold interrupt controller. If the interrupt controller is mux-intc,
|
||||
address and length means one register. Since address of mux-intc is in the
|
||||
range of intc. mux-intc is secondary interrupt controller.
|
||||
- reg-names : Name of the register set of the interrupt controller. It's
|
||||
only required in mux-intc interrupt controller.
|
||||
- interrupts : Should be the port interrupt shared by mux interrupts. It's
|
||||
only required in mux-intc interrupt controller.
|
||||
- interrupt-controller : Identifies the node as an interrupt controller.
|
||||
- #interrupt-cells : Specifies the number of cells needed to encode an
|
||||
interrupt source.
|
||||
- mrvl,intc-nr-irqs : Specifies the number of interrupts in the interrupt
|
||||
controller.
|
||||
- mrvl,clr-mfp-irq : Specifies the interrupt that needs to clear MFP edge
|
||||
detection first.
|
||||
|
||||
Example:
|
||||
intc: interrupt-controller@d4282000 {
|
||||
compatible = "mrvl,mmp2-intc";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0xd4282000 0x1000>;
|
||||
mrvl,intc-nr-irqs = <64>;
|
||||
};
|
||||
|
||||
intcmux4@d4282150 {
|
||||
compatible = "mrvl,mmp2-mux-intc";
|
||||
interrupts = <4>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0x150 0x4>, <0x168 0x4>;
|
||||
reg-names = "mux status", "mux mask";
|
||||
mrvl,intc-nr-irqs = <2>;
|
||||
};
|
@ -4,3 +4,11 @@ Marvell Platforms Device Tree Bindings
|
||||
PXA168 Aspenite Board
|
||||
Required root node properties:
|
||||
- compatible = "mrvl,pxa168-aspenite", "mrvl,pxa168";
|
||||
|
||||
PXA910 DKB Board
|
||||
Required root node properties:
|
||||
- compatible = "mrvl,pxa910-dkb";
|
||||
|
||||
MMP2 Brownstone Board
|
||||
Required root node properties:
|
||||
- compatible = "mrvl,mmp2-brownstone";
|
13
Documentation/devicetree/bindings/arm/mrvl/timer.txt
Normal file
13
Documentation/devicetree/bindings/arm/mrvl/timer.txt
Normal file
@ -0,0 +1,13 @@
|
||||
* Marvell MMP Timer controller
|
||||
|
||||
Required properties:
|
||||
- compatible : Should be "mrvl,mmp-timer".
|
||||
- reg : Address and length of the register set of timer controller.
|
||||
- interrupts : Should be the interrupt number.
|
||||
|
||||
Example:
|
||||
timer0: timer@d4014000 {
|
||||
compatible = "mrvl,mmp-timer";
|
||||
reg = <0xd4014000 0x100>;
|
||||
interrupts = <13>;
|
||||
};
|
@ -6,3 +6,21 @@ Boards with the ST SPEAr600 SoC shall have the following properties:
|
||||
Required root node property:
|
||||
|
||||
compatible = "st,spear600";
|
||||
|
||||
Boards with the ST SPEAr300 SoC shall have the following properties:
|
||||
|
||||
Required root node property:
|
||||
|
||||
compatible = "st,spear300";
|
||||
|
||||
Boards with the ST SPEAr310 SoC shall have the following properties:
|
||||
|
||||
Required root node property:
|
||||
|
||||
compatible = "st,spear310";
|
||||
|
||||
Boards with the ST SPEAr320 SoC shall have the following properties:
|
||||
|
||||
Required root node property:
|
||||
|
||||
compatible = "st,spear320";
|
||||
|
31
Documentation/devicetree/bindings/gpio/gpio-nmk.txt
Normal file
31
Documentation/devicetree/bindings/gpio/gpio-nmk.txt
Normal file
@ -0,0 +1,31 @@
|
||||
Nomadik GPIO controller
|
||||
|
||||
Required properties:
|
||||
- compatible : Should be "st,nomadik-gpio".
|
||||
- reg : Physical base address and length of the controller's registers.
|
||||
- interrupts : The interrupt outputs from the controller.
|
||||
- #gpio-cells : Should be two:
|
||||
The first cell is the pin number.
|
||||
The second cell is used to specify optional parameters:
|
||||
- bits[3:0] trigger type and level flags:
|
||||
1 = low-to-high edge triggered.
|
||||
2 = high-to-low edge triggered.
|
||||
4 = active high level-sensitive.
|
||||
8 = active low level-sensitive.
|
||||
- gpio-controller : Marks the device node as a GPIO controller.
|
||||
- interrupt-controller : Marks the device node as an interrupt controller.
|
||||
- gpio-bank : Specifies which bank a controller owns.
|
||||
- st,supports-sleepmode : Specifies whether controller can sleep or not
|
||||
|
||||
Example:
|
||||
|
||||
gpio1: gpio@8012e080 {
|
||||
compatible = "st,nomadik-gpio";
|
||||
reg = <0x8012e080 0x80>;
|
||||
interrupts = <0 120 0x4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
supports-sleepmode;
|
||||
gpio-bank = <1>;
|
||||
};
|
@ -3,19 +3,25 @@
|
||||
Required properties:
|
||||
- compatible : Should be "mrvl,pxa-gpio" or "mrvl,mmp-gpio"
|
||||
- reg : Address and length of the register set for the device
|
||||
- interrupts : Should be the port interrupt shared by all gpio pins, if
|
||||
- interrupt-name : Should be the name of irq resource.
|
||||
one number.
|
||||
- interrupts : Should be the port interrupt shared by all gpio pins.
|
||||
There're three gpio interrupts in arch-pxa, and they're gpio0,
|
||||
gpio1 and gpio_mux. There're only one gpio interrupt in arch-mmp,
|
||||
gpio_mux.
|
||||
- interrupt-name : Should be the name of irq resource. Each interrupt
|
||||
binds its interrupt-name.
|
||||
- interrupt-controller : Identifies the node as an interrupt controller.
|
||||
- #interrupt-cells: Specifies the number of cells needed to encode an
|
||||
interrupt source.
|
||||
- gpio-controller : Marks the device node as a gpio controller.
|
||||
- #gpio-cells : Should be one. It is the pin number.
|
||||
|
||||
Example:
|
||||
|
||||
gpio: gpio@d4019000 {
|
||||
compatible = "mrvl,mmp-gpio", "mrvl,pxa-gpio";
|
||||
compatible = "mrvl,mmp-gpio";
|
||||
reg = <0xd4019000 0x1000>;
|
||||
interrupts = <49>, <17>, <18>;
|
||||
interrupt-name = "gpio_mux", "gpio0", "gpio1";
|
||||
interrupts = <49>;
|
||||
interrupt-name = "gpio_mux";
|
||||
gpio-controller;
|
||||
#gpio-cells = <1>;
|
||||
interrupt-controller;
|
||||
|
@ -3,34 +3,31 @@
|
||||
Required properties :
|
||||
|
||||
- reg : Offset and length of the register set for the device
|
||||
- compatible : should be "mrvl,mmp-twsi" where CHIP is the name of a
|
||||
- compatible : should be "mrvl,mmp-twsi" where mmp is the name of a
|
||||
compatible processor, e.g. pxa168, pxa910, mmp2, mmp3.
|
||||
For the pxa2xx/pxa3xx, an additional node "mrvl,pxa-i2c" is required
|
||||
as shown in the example below.
|
||||
|
||||
Recommended properties :
|
||||
|
||||
- interrupts : <a b> where a is the interrupt number and b is a
|
||||
field that represents an encoding of the sense and level
|
||||
information for the interrupt. This should be encoded based on
|
||||
the information in section 2) depending on the type of interrupt
|
||||
controller you have.
|
||||
- interrupts : the interrupt number
|
||||
- interrupt-parent : the phandle for the interrupt controller that
|
||||
services interrupts for this device.
|
||||
services interrupts for this device. If the parent is the default
|
||||
interrupt controller in device tree, it could be ignored.
|
||||
- mrvl,i2c-polling : Disable interrupt of i2c controller. Polling
|
||||
status register of i2c controller instead.
|
||||
- mrvl,i2c-fast-mode : Enable fast mode of i2c controller.
|
||||
|
||||
Examples:
|
||||
twsi1: i2c@d4011000 {
|
||||
compatible = "mrvl,mmp-twsi", "mrvl,pxa-i2c";
|
||||
compatible = "mrvl,mmp-twsi";
|
||||
reg = <0xd4011000 0x1000>;
|
||||
interrupts = <7>;
|
||||
mrvl,i2c-fast-mode;
|
||||
};
|
||||
|
||||
twsi2: i2c@d4025000 {
|
||||
compatible = "mrvl,mmp-twsi", "mrvl,pxa-i2c";
|
||||
compatible = "mrvl,mmp-twsi";
|
||||
reg = <0xd4025000 0x1000>;
|
||||
interrupts = <58>;
|
||||
};
|
||||
|
36
Documentation/devicetree/bindings/i2c/pnx.txt
Normal file
36
Documentation/devicetree/bindings/i2c/pnx.txt
Normal file
@ -0,0 +1,36 @@
|
||||
* NXP PNX I2C Controller
|
||||
|
||||
Required properties:
|
||||
|
||||
- reg: Offset and length of the register set for the device
|
||||
- compatible: should be "nxp,pnx-i2c"
|
||||
- interrupts: configure one interrupt line
|
||||
- #address-cells: always 1 (for i2c addresses)
|
||||
- #size-cells: always 0
|
||||
- interrupt-parent: the phandle for the interrupt controller that
|
||||
services interrupts for this device.
|
||||
|
||||
Optional properties:
|
||||
|
||||
- clock-frequency: desired I2C bus clock frequency in Hz, Default: 100000 Hz
|
||||
|
||||
Examples:
|
||||
|
||||
i2c1: i2c@400a0000 {
|
||||
compatible = "nxp,pnx-i2c";
|
||||
reg = <0x400a0000 0x100>;
|
||||
interrupt-parent = <&mic>;
|
||||
interrupts = <51 0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
i2c2: i2c@400a8000 {
|
||||
compatible = "nxp,pnx-i2c";
|
||||
reg = <0x400a8000 0x100>;
|
||||
interrupt-parent = <&mic>;
|
||||
interrupts = <50 0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clock-frequency = <100000>;
|
||||
};
|
24
Documentation/devicetree/bindings/net/lpc-eth.txt
Normal file
24
Documentation/devicetree/bindings/net/lpc-eth.txt
Normal file
@ -0,0 +1,24 @@
|
||||
* NXP LPC32xx SoC Ethernet Controller
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be "nxp,lpc-eth"
|
||||
- reg: Address and length of the register set for the device
|
||||
- interrupts: Should contain ethernet controller interrupt
|
||||
|
||||
Optional properties:
|
||||
- phy-mode: String, operation mode of the PHY interface.
|
||||
Supported values are: "mii", "rmii" (default)
|
||||
- use-iram: Use LPC32xx internal SRAM (IRAM) for DMA buffering
|
||||
- local-mac-address : 6 bytes, mac address
|
||||
|
||||
Example:
|
||||
|
||||
mac: ethernet@31060000 {
|
||||
compatible = "nxp,lpc-eth";
|
||||
reg = <0x31060000 0x1000>;
|
||||
interrupt-parent = <&mic>;
|
||||
interrupts = <29 0>;
|
||||
|
||||
phy-mode = "rmii";
|
||||
use-iram;
|
||||
};
|
@ -571,6 +571,7 @@ config ARCH_LPC32XX
|
||||
select USB_ARCH_HAS_OHCI
|
||||
select CLKDEV_LOOKUP
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select USE_OF
|
||||
help
|
||||
Support for the NXP LPC32XX family of processors
|
||||
|
||||
@ -606,6 +607,7 @@ config ARCH_MMP
|
||||
select CLKDEV_LOOKUP
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select GPIO_PXA
|
||||
select IRQ_DOMAIN
|
||||
select PLAT_PXA
|
||||
select SPARSE_IRQ
|
||||
select GENERIC_ALLOCATOR
|
||||
|
273
arch/arm/boot/dts/at91sam9260.dtsi
Normal file
273
arch/arm/boot/dts/at91sam9260.dtsi
Normal file
@ -0,0 +1,273 @@
|
||||
/*
|
||||
* at91sam9260.dtsi - Device Tree Include file for AT91SAM9260 family SoC
|
||||
*
|
||||
* Copyright (C) 2011 Atmel,
|
||||
* 2011 Nicolas Ferre <nicolas.ferre@atmel.com>,
|
||||
* 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2 or later.
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Atmel AT91SAM9260 family SoC";
|
||||
compatible = "atmel,at91sam9260";
|
||||
interrupt-parent = <&aic>;
|
||||
|
||||
aliases {
|
||||
serial0 = &dbgu;
|
||||
serial1 = &usart0;
|
||||
serial2 = &usart1;
|
||||
serial3 = &usart2;
|
||||
serial4 = &usart3;
|
||||
serial5 = &usart4;
|
||||
serial6 = &usart5;
|
||||
gpio0 = &pioA;
|
||||
gpio1 = &pioB;
|
||||
gpio2 = &pioC;
|
||||
tcb0 = &tcb0;
|
||||
tcb1 = &tcb1;
|
||||
};
|
||||
cpus {
|
||||
cpu@0 {
|
||||
compatible = "arm,arm926ejs";
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x04000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
apb {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
aic: interrupt-controller@fffff000 {
|
||||
#interrupt-cells = <2>;
|
||||
compatible = "atmel,at91rm9200-aic";
|
||||
interrupt-controller;
|
||||
reg = <0xfffff000 0x200>;
|
||||
};
|
||||
|
||||
ramc0: ramc@ffffea00 {
|
||||
compatible = "atmel,at91sam9260-sdramc";
|
||||
reg = <0xffffea00 0x200>;
|
||||
};
|
||||
|
||||
pmc: pmc@fffffc00 {
|
||||
compatible = "atmel,at91rm9200-pmc";
|
||||
reg = <0xfffffc00 0x100>;
|
||||
};
|
||||
|
||||
rstc@fffffd00 {
|
||||
compatible = "atmel,at91sam9260-rstc";
|
||||
reg = <0xfffffd00 0x10>;
|
||||
};
|
||||
|
||||
shdwc@fffffd10 {
|
||||
compatible = "atmel,at91sam9260-shdwc";
|
||||
reg = <0xfffffd10 0x10>;
|
||||
};
|
||||
|
||||
pit: timer@fffffd30 {
|
||||
compatible = "atmel,at91sam9260-pit";
|
||||
reg = <0xfffffd30 0xf>;
|
||||
interrupts = <1 4>;
|
||||
};
|
||||
|
||||
tcb0: timer@fffa0000 {
|
||||
compatible = "atmel,at91rm9200-tcb";
|
||||
reg = <0xfffa0000 0x100>;
|
||||
interrupts = <17 4 18 4 19 4>;
|
||||
};
|
||||
|
||||
tcb1: timer@fffdc000 {
|
||||
compatible = "atmel,at91rm9200-tcb";
|
||||
reg = <0xfffdc000 0x100>;
|
||||
interrupts = <26 4 27 4 28 4>;
|
||||
};
|
||||
|
||||
pioA: gpio@fffff400 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff400 0x100>;
|
||||
interrupts = <2 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
pioB: gpio@fffff600 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff600 0x100>;
|
||||
interrupts = <3 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
pioC: gpio@fffff800 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff800 0x100>;
|
||||
interrupts = <4 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
dbgu: serial@fffff200 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffff200 0x200>;
|
||||
interrupts = <1 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart0: serial@fffb0000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffb0000 0x200>;
|
||||
interrupts = <6 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart1: serial@fffb4000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffb4000 0x200>;
|
||||
interrupts = <7 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart2: serial@fffb8000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffb8000 0x200>;
|
||||
interrupts = <8 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart3: serial@fffd0000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffd0000 0x200>;
|
||||
interrupts = <23 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart4: serial@fffd4000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffd4000 0x200>;
|
||||
interrupts = <24 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart5: serial@fffd8000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffd8000 0x200>;
|
||||
interrupts = <25 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffc4000 {
|
||||
compatible = "cdns,at32ap7000-macb", "cdns,macb";
|
||||
reg = <0xfffc4000 0x100>;
|
||||
interrupts = <21 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb1: gadget@fffa4000 {
|
||||
compatible = "atmel,at91rm9200-udc";
|
||||
reg = <0xfffa4000 0x4000>;
|
||||
interrupts = <10 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
adc0: adc@fffe0000 {
|
||||
compatible = "atmel,at91sam9260-adc";
|
||||
reg = <0xfffe0000 0x100>;
|
||||
interrupts = <5 4>;
|
||||
atmel,adc-use-external-triggers;
|
||||
atmel,adc-channels-used = <0xf>;
|
||||
atmel,adc-vref = <3300>;
|
||||
atmel,adc-num-channels = <4>;
|
||||
atmel,adc-startup-time = <15>;
|
||||
atmel,adc-channel-base = <0x30>;
|
||||
atmel,adc-drdy-mask = <0x10000>;
|
||||
atmel,adc-status-register = <0x1c>;
|
||||
atmel,adc-trigger-register = <0x04>;
|
||||
|
||||
trigger@0 {
|
||||
trigger-name = "timer-counter-0";
|
||||
trigger-value = <0x1>;
|
||||
};
|
||||
trigger@1 {
|
||||
trigger-name = "timer-counter-1";
|
||||
trigger-value = <0x3>;
|
||||
};
|
||||
|
||||
trigger@2 {
|
||||
trigger-name = "timer-counter-2";
|
||||
trigger-value = <0x5>;
|
||||
};
|
||||
|
||||
trigger@3 {
|
||||
trigger-name = "external";
|
||||
trigger-value = <0x13>;
|
||||
trigger-external;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
compatible = "atmel,at91rm9200-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x40000000 0x10000000
|
||||
0xffffe800 0x200
|
||||
>;
|
||||
atmel,nand-addr-offset = <21>;
|
||||
atmel,nand-cmd-offset = <22>;
|
||||
gpios = <&pioC 13 0
|
||||
&pioC 14 0
|
||||
0
|
||||
>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb0: ohci@00500000 {
|
||||
compatible = "atmel,at91rm9200-ohci", "usb-ohci";
|
||||
reg = <0x00500000 0x100000>;
|
||||
interrupts = <20 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
compatible = "i2c-gpio";
|
||||
gpios = <&pioA 23 0 /* sda */
|
||||
&pioA 24 0 /* scl */
|
||||
>;
|
||||
i2c-gpio,sda-open-drain;
|
||||
i2c-gpio,scl-open-drain;
|
||||
i2c-gpio,delay-us = <2>; /* ~100 kHz */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
220
arch/arm/boot/dts/at91sam9263.dtsi
Normal file
220
arch/arm/boot/dts/at91sam9263.dtsi
Normal file
@ -0,0 +1,220 @@
|
||||
/*
|
||||
* at91sam9263.dtsi - Device Tree Include file for AT91SAM9263 family SoC
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2 only.
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Atmel AT91SAM9263 family SoC";
|
||||
compatible = "atmel,at91sam9263";
|
||||
interrupt-parent = <&aic>;
|
||||
|
||||
aliases {
|
||||
serial0 = &dbgu;
|
||||
serial1 = &usart0;
|
||||
serial2 = &usart1;
|
||||
serial3 = &usart2;
|
||||
gpio0 = &pioA;
|
||||
gpio1 = &pioB;
|
||||
gpio2 = &pioC;
|
||||
gpio3 = &pioD;
|
||||
gpio4 = &pioE;
|
||||
tcb0 = &tcb0;
|
||||
};
|
||||
cpus {
|
||||
cpu@0 {
|
||||
compatible = "arm,arm926ejs";
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x08000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
apb {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
aic: interrupt-controller@fffff000 {
|
||||
#interrupt-cells = <2>;
|
||||
compatible = "atmel,at91rm9200-aic";
|
||||
interrupt-controller;
|
||||
reg = <0xfffff000 0x200>;
|
||||
};
|
||||
|
||||
pmc: pmc@fffffc00 {
|
||||
compatible = "atmel,at91rm9200-pmc";
|
||||
reg = <0xfffffc00 0x100>;
|
||||
};
|
||||
|
||||
ramc: ramc@ffffe200 {
|
||||
compatible = "atmel,at91sam9260-sdramc";
|
||||
reg = <0xffffe200 0x200
|
||||
0xffffe800 0x200>;
|
||||
};
|
||||
|
||||
pit: timer@fffffd30 {
|
||||
compatible = "atmel,at91sam9260-pit";
|
||||
reg = <0xfffffd30 0xf>;
|
||||
interrupts = <1 4>;
|
||||
};
|
||||
|
||||
tcb0: timer@fff7c000 {
|
||||
compatible = "atmel,at91rm9200-tcb";
|
||||
reg = <0xfff7c000 0x100>;
|
||||
interrupts = <19 4>;
|
||||
};
|
||||
|
||||
rstc@fffffd00 {
|
||||
compatible = "atmel,at91sam9260-rstc";
|
||||
reg = <0xfffffd00 0x10>;
|
||||
};
|
||||
|
||||
shdwc@fffffd10 {
|
||||
compatible = "atmel,at91sam9260-shdwc";
|
||||
reg = <0xfffffd10 0x10>;
|
||||
};
|
||||
|
||||
pioA: gpio@fffff200 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff200 0x100>;
|
||||
interrupts = <2 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
pioB: gpio@fffff400 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff400 0x100>;
|
||||
interrupts = <3 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
pioC: gpio@fffff600 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff600 0x100>;
|
||||
interrupts = <4 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
pioD: gpio@fffff800 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff800 0x100>;
|
||||
interrupts = <4 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
pioE: gpio@fffffa00 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffffa00 0x100>;
|
||||
interrupts = <4 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
dbgu: serial@ffffee00 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xffffee00 0x200>;
|
||||
interrupts = <1 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart0: serial@fff8c000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfff8c000 0x200>;
|
||||
interrupts = <7 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart1: serial@fff90000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfff90000 0x200>;
|
||||
interrupts = <8 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart2: serial@fff94000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfff94000 0x200>;
|
||||
interrupts = <9 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffbc000 {
|
||||
compatible = "cdns,at32ap7000-macb", "cdns,macb";
|
||||
reg = <0xfffbc000 0x100>;
|
||||
interrupts = <21 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb1: gadget@fff78000 {
|
||||
compatible = "atmel,at91rm9200-udc";
|
||||
reg = <0xfff78000 0x4000>;
|
||||
interrupts = <24 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
compatible = "atmel,at91rm9200-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x40000000 0x10000000
|
||||
0xffffe000 0x200
|
||||
>;
|
||||
atmel,nand-addr-offset = <21>;
|
||||
atmel,nand-cmd-offset = <22>;
|
||||
gpios = <&pioA 22 0
|
||||
&pioD 15 0
|
||||
0
|
||||
>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb0: ohci@00a00000 {
|
||||
compatible = "atmel,at91rm9200-ohci", "usb-ohci";
|
||||
reg = <0x00a00000 0x100000>;
|
||||
interrupts = <29 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
compatible = "i2c-gpio";
|
||||
gpios = <&pioB 4 0 /* sda */
|
||||
&pioB 5 0 /* scl */
|
||||
>;
|
||||
i2c-gpio,sda-open-drain;
|
||||
i2c-gpio,scl-open-drain;
|
||||
i2c-gpio,delay-us = <2>; /* ~100 kHz */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
156
arch/arm/boot/dts/at91sam9263ek.dts
Normal file
156
arch/arm/boot/dts/at91sam9263ek.dts
Normal file
@ -0,0 +1,156 @@
|
||||
/*
|
||||
* at91sam9263ek.dts - Device Tree file for Atmel at91sam9263 reference board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2 only
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9263.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Atmel at91sam9263ek";
|
||||
compatible = "atmel,at91sam9263ek", "atmel,at91sam9263", "atmel,at91sam9";
|
||||
|
||||
chosen {
|
||||
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x4000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
main_clock: clock@0 {
|
||||
compatible = "atmel,osc", "fixed-clock";
|
||||
clock-frequency = <16367660>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
dbgu: serial@ffffee00 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart0: serial@fff8c000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffbc000 {
|
||||
phy-mode = "rmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb1: gadget@fff78000 {
|
||||
atmel,vbus-gpio = <&pioA 25 0>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt = <1>;
|
||||
status = "okay";
|
||||
|
||||
at91bootstrap@0 {
|
||||
label = "at91bootstrap";
|
||||
reg = <0x0 0x20000>;
|
||||
};
|
||||
|
||||
barebox@20000 {
|
||||
label = "barebox";
|
||||
reg = <0x20000 0x40000>;
|
||||
};
|
||||
|
||||
bareboxenv@60000 {
|
||||
label = "bareboxenv";
|
||||
reg = <0x60000 0x20000>;
|
||||
};
|
||||
|
||||
bareboxenv2@80000 {
|
||||
label = "bareboxenv2";
|
||||
reg = <0x80000 0x20000>;
|
||||
};
|
||||
|
||||
oftree@80000 {
|
||||
label = "oftree";
|
||||
reg = <0xa0000 0x20000>;
|
||||
};
|
||||
|
||||
kernel@a0000 {
|
||||
label = "kernel";
|
||||
reg = <0xc0000 0x400000>;
|
||||
};
|
||||
|
||||
rootfs@4a0000 {
|
||||
label = "rootfs";
|
||||
reg = <0x4c0000 0x7800000>;
|
||||
};
|
||||
|
||||
data@7ca0000 {
|
||||
label = "data";
|
||||
reg = <0x7cc0000 0x8340000>;
|
||||
};
|
||||
};
|
||||
|
||||
usb0: ohci@00a00000 {
|
||||
num-ports = <2>;
|
||||
status = "okay";
|
||||
atmel,vbus-gpio = <&pioA 24 0
|
||||
&pioA 21 0
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
d3 {
|
||||
label = "d3";
|
||||
gpios = <&pioB 7 0>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
|
||||
d2 {
|
||||
label = "d2";
|
||||
gpios = <&pioC 29 1>;
|
||||
linux,default-trigger = "nand-disk";
|
||||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
left_click {
|
||||
label = "left_click";
|
||||
gpios = <&pioC 5 1>;
|
||||
linux,code = <272>;
|
||||
gpio-key,wakeup;
|
||||
};
|
||||
|
||||
right_click {
|
||||
label = "right_click";
|
||||
gpios = <&pioC 4 1>;
|
||||
linux,code = <273>;
|
||||
gpio-key,wakeup;
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
status = "okay";
|
||||
|
||||
24c512@50 {
|
||||
compatible = "24c512";
|
||||
reg = <0x50>;
|
||||
pagesize = <128>;
|
||||
};
|
||||
};
|
||||
};
|
@ -1,238 +1,26 @@
|
||||
/*
|
||||
* at91sam9g20.dtsi - Device Tree Include file for AT91SAM9G20 family SoC
|
||||
*
|
||||
* Copyright (C) 2011 Atmel,
|
||||
* 2011 Nicolas Ferre <nicolas.ferre@atmel.com>,
|
||||
* 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2 or later.
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
/include/ "at91sam9260.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Atmel AT91SAM9G20 family SoC";
|
||||
compatible = "atmel,at91sam9g20";
|
||||
interrupt-parent = <&aic>;
|
||||
|
||||
aliases {
|
||||
serial0 = &dbgu;
|
||||
serial1 = &usart0;
|
||||
serial2 = &usart1;
|
||||
serial3 = &usart2;
|
||||
serial4 = &usart3;
|
||||
serial5 = &usart4;
|
||||
serial6 = &usart5;
|
||||
gpio0 = &pioA;
|
||||
gpio1 = &pioB;
|
||||
gpio2 = &pioC;
|
||||
tcb0 = &tcb0;
|
||||
tcb1 = &tcb1;
|
||||
};
|
||||
cpus {
|
||||
cpu@0 {
|
||||
compatible = "arm,arm926ejs";
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x08000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
apb {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
aic: interrupt-controller@fffff000 {
|
||||
#interrupt-cells = <2>;
|
||||
compatible = "atmel,at91rm9200-aic";
|
||||
interrupt-controller;
|
||||
reg = <0xfffff000 0x200>;
|
||||
};
|
||||
|
||||
ramc0: ramc@ffffea00 {
|
||||
compatible = "atmel,at91sam9260-sdramc";
|
||||
reg = <0xffffea00 0x200>;
|
||||
};
|
||||
|
||||
pmc: pmc@fffffc00 {
|
||||
compatible = "atmel,at91rm9200-pmc";
|
||||
reg = <0xfffffc00 0x100>;
|
||||
};
|
||||
|
||||
rstc@fffffd00 {
|
||||
compatible = "atmel,at91sam9260-rstc";
|
||||
reg = <0xfffffd00 0x10>;
|
||||
};
|
||||
|
||||
shdwc@fffffd10 {
|
||||
compatible = "atmel,at91sam9260-shdwc";
|
||||
reg = <0xfffffd10 0x10>;
|
||||
};
|
||||
|
||||
pit: timer@fffffd30 {
|
||||
compatible = "atmel,at91sam9260-pit";
|
||||
reg = <0xfffffd30 0xf>;
|
||||
interrupts = <1 4>;
|
||||
};
|
||||
|
||||
tcb0: timer@fffa0000 {
|
||||
compatible = "atmel,at91rm9200-tcb";
|
||||
reg = <0xfffa0000 0x100>;
|
||||
interrupts = <17 4 18 4 19 4>;
|
||||
};
|
||||
|
||||
tcb1: timer@fffdc000 {
|
||||
compatible = "atmel,at91rm9200-tcb";
|
||||
reg = <0xfffdc000 0x100>;
|
||||
interrupts = <26 4 27 4 28 4>;
|
||||
};
|
||||
|
||||
pioA: gpio@fffff400 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff400 0x100>;
|
||||
interrupts = <2 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
pioB: gpio@fffff600 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff600 0x100>;
|
||||
interrupts = <3 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
pioC: gpio@fffff800 {
|
||||
compatible = "atmel,at91rm9200-gpio";
|
||||
reg = <0xfffff800 0x100>;
|
||||
interrupts = <4 4>;
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
dbgu: serial@fffff200 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffff200 0x200>;
|
||||
interrupts = <1 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart0: serial@fffb0000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffb0000 0x200>;
|
||||
interrupts = <6 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart1: serial@fffb4000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffb4000 0x200>;
|
||||
interrupts = <7 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart2: serial@fffb8000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffb8000 0x200>;
|
||||
interrupts = <8 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart3: serial@fffd0000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffd0000 0x200>;
|
||||
interrupts = <23 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart4: serial@fffd4000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffd4000 0x200>;
|
||||
interrupts = <24 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usart5: serial@fffd8000 {
|
||||
compatible = "atmel,at91sam9260-usart";
|
||||
reg = <0xfffd8000 0x200>;
|
||||
interrupts = <25 4>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffc4000 {
|
||||
compatible = "cdns,at32ap7000-macb", "cdns,macb";
|
||||
reg = <0xfffc4000 0x100>;
|
||||
interrupts = <21 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb1: gadget@fffa4000 {
|
||||
compatible = "atmel,at91rm9200-udc";
|
||||
reg = <0xfffa4000 0x4000>;
|
||||
interrupts = <10 4>;
|
||||
status = "disabled";
|
||||
adc0: adc@fffe0000 {
|
||||
atmel,adc-startup-time = <40>;
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
compatible = "atmel,at91rm9200-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x40000000 0x10000000
|
||||
0xffffe800 0x200
|
||||
>;
|
||||
atmel,nand-addr-offset = <21>;
|
||||
atmel,nand-cmd-offset = <22>;
|
||||
gpios = <&pioC 13 0
|
||||
&pioC 14 0
|
||||
0
|
||||
>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb0: ohci@00500000 {
|
||||
compatible = "atmel,at91rm9200-ohci", "usb-ohci";
|
||||
reg = <0x00500000 0x100000>;
|
||||
interrupts = <20 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
compatible = "i2c-gpio";
|
||||
gpios = <&pioA 23 0 /* sda */
|
||||
&pioA 24 0 /* scl */
|
||||
>;
|
||||
i2c-gpio,sda-open-drain;
|
||||
i2c-gpio,scl-open-drain;
|
||||
i2c-gpio,delay-us = <2>; /* ~100 kHz */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
29
arch/arm/boot/dts/at91sam9g20ek.dts
Normal file
29
arch/arm/boot/dts/at91sam9g20ek.dts
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* at91sam9g20ek.dts - Device Tree file for Atmel at91sam9g20ek board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9g20ek_common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Atmel at91sam9g20ek";
|
||||
compatible = "atmel,at91sam9g20ek", "atmel,at91sam9g20", "atmel,at91sam9";
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
ds1 {
|
||||
label = "ds1";
|
||||
gpios = <&pioA 9 0>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
|
||||
ds5 {
|
||||
label = "ds5";
|
||||
gpios = <&pioA 6 1>;
|
||||
};
|
||||
};
|
||||
};
|
29
arch/arm/boot/dts/at91sam9g20ek_2mmc.dts
Normal file
29
arch/arm/boot/dts/at91sam9g20ek_2mmc.dts
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* at91sam9g20ek_2mmc.dts - Device Tree file for Atmel at91sam9g20ek 2 MMC board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9g20ek_common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Atmel at91sam9g20ek 2 mmc";
|
||||
compatible = "atmel,at91sam9g20ek_2mmc", "atmel,at91sam9g20", "atmel,at91sam9";
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
ds1 {
|
||||
label = "ds1";
|
||||
gpios = <&pioB 9 0>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
|
||||
ds5 {
|
||||
label = "ds5";
|
||||
gpios = <&pioB 8 1>;
|
||||
};
|
||||
};
|
||||
};
|
142
arch/arm/boot/dts/at91sam9g20ek_common.dtsi
Normal file
142
arch/arm/boot/dts/at91sam9g20ek_common.dtsi
Normal file
@ -0,0 +1,142 @@
|
||||
/*
|
||||
* at91sam9g20ek_common.dtsi - Device Tree file for Atmel at91sam9g20ek board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
/include/ "at91sam9g20.dtsi"
|
||||
|
||||
/ {
|
||||
|
||||
chosen {
|
||||
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x4000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
main_clock: clock@0 {
|
||||
compatible = "atmel,osc", "fixed-clock";
|
||||
clock-frequency = <18432000>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
dbgu: serial@fffff200 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart0: serial@fffb0000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart1: serial@fffb4000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffc4000 {
|
||||
phy-mode = "rmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb1: gadget@fffa4000 {
|
||||
atmel,vbus-gpio = <&pioC 5 0>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
|
||||
at91bootstrap@0 {
|
||||
label = "at91bootstrap";
|
||||
reg = <0x0 0x20000>;
|
||||
};
|
||||
|
||||
barebox@20000 {
|
||||
label = "barebox";
|
||||
reg = <0x20000 0x40000>;
|
||||
};
|
||||
|
||||
bareboxenv@60000 {
|
||||
label = "bareboxenv";
|
||||
reg = <0x60000 0x20000>;
|
||||
};
|
||||
|
||||
bareboxenv2@80000 {
|
||||
label = "bareboxenv2";
|
||||
reg = <0x80000 0x20000>;
|
||||
};
|
||||
|
||||
oftree@80000 {
|
||||
label = "oftree";
|
||||
reg = <0xa0000 0x20000>;
|
||||
};
|
||||
|
||||
kernel@a0000 {
|
||||
label = "kernel";
|
||||
reg = <0xc0000 0x400000>;
|
||||
};
|
||||
|
||||
rootfs@4a0000 {
|
||||
label = "rootfs";
|
||||
reg = <0x4c0000 0x7800000>;
|
||||
};
|
||||
|
||||
data@7ca0000 {
|
||||
label = "data";
|
||||
reg = <0x7cc0000 0x8340000>;
|
||||
};
|
||||
};
|
||||
|
||||
usb0: ohci@00500000 {
|
||||
num-ports = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
status = "okay";
|
||||
|
||||
24c512@50 {
|
||||
compatible = "24c512";
|
||||
reg = <0x50>;
|
||||
};
|
||||
|
||||
wm8731@1b {
|
||||
compatible = "wm8731";
|
||||
reg = <0x1b>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
btn3 {
|
||||
label = "Buttin 3";
|
||||
gpios = <&pioA 30 1>;
|
||||
linux,code = <0x103>;
|
||||
gpio-key,wakeup;
|
||||
};
|
||||
|
||||
btn4 {
|
||||
label = "Buttin 4";
|
||||
gpios = <&pioA 31 1>;
|
||||
linux,code = <0x104>;
|
||||
gpio-key,wakeup;
|
||||
};
|
||||
};
|
||||
};
|
@ -55,83 +55,101 @@
|
||||
|
||||
gpio0: gpio@8012e000 {
|
||||
compatible = "stericsson,db8500-gpio",
|
||||
"stmicroelectronics,nomadik-gpio";
|
||||
"st,nomadik-gpio";
|
||||
reg = <0x8012e000 0x80>;
|
||||
interrupts = <0 119 0x4>;
|
||||
supports-sleepmode;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-bank = <0>;
|
||||
};
|
||||
|
||||
gpio1: gpio@8012e080 {
|
||||
compatible = "stericsson,db8500-gpio",
|
||||
"stmicroelectronics,nomadik-gpio";
|
||||
"st,nomadik-gpio";
|
||||
reg = <0x8012e080 0x80>;
|
||||
interrupts = <0 120 0x4>;
|
||||
supports-sleepmode;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-bank = <1>;
|
||||
};
|
||||
|
||||
gpio2: gpio@8000e000 {
|
||||
compatible = "stericsson,db8500-gpio",
|
||||
"stmicroelectronics,nomadik-gpio";
|
||||
"st,nomadik-gpio";
|
||||
reg = <0x8000e000 0x80>;
|
||||
interrupts = <0 121 0x4>;
|
||||
supports-sleepmode;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-bank = <2>;
|
||||
};
|
||||
|
||||
gpio3: gpio@8000e080 {
|
||||
compatible = "stericsson,db8500-gpio",
|
||||
"stmicroelectronics,nomadik-gpio";
|
||||
"st,nomadik-gpio";
|
||||
reg = <0x8000e080 0x80>;
|
||||
interrupts = <0 122 0x4>;
|
||||
supports-sleepmode;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-bank = <3>;
|
||||
};
|
||||
|
||||
gpio4: gpio@8000e100 {
|
||||
compatible = "stericsson,db8500-gpio",
|
||||
"stmicroelectronics,nomadik-gpio";
|
||||
"st,nomadik-gpio";
|
||||
reg = <0x8000e100 0x80>;
|
||||
interrupts = <0 123 0x4>;
|
||||
supports-sleepmode;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-bank = <4>;
|
||||
};
|
||||
|
||||
gpio5: gpio@8000e180 {
|
||||
compatible = "stericsson,db8500-gpio",
|
||||
"stmicroelectronics,nomadik-gpio";
|
||||
"st,nomadik-gpio";
|
||||
reg = <0x8000e180 0x80>;
|
||||
interrupts = <0 124 0x4>;
|
||||
supports-sleepmode;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-bank = <5>;
|
||||
};
|
||||
|
||||
gpio6: gpio@8011e000 {
|
||||
compatible = "stericsson,db8500-gpio",
|
||||
"stmicroelectronics,nomadik-gpio";
|
||||
"st,nomadik-gpio";
|
||||
reg = <0x8011e000 0x80>;
|
||||
interrupts = <0 125 0x4>;
|
||||
supports-sleepmode;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-bank = <6>;
|
||||
};
|
||||
|
||||
gpio7: gpio@8011e080 {
|
||||
compatible = "stericsson,db8500-gpio",
|
||||
"stmicroelectronics,nomadik-gpio";
|
||||
"st,nomadik-gpio";
|
||||
reg = <0x8011e080 0x80>;
|
||||
interrupts = <0 126 0x4>;
|
||||
supports-sleepmode;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-bank = <7>;
|
||||
};
|
||||
|
||||
gpio8: gpio@a03fe000 {
|
||||
compatible = "stericsson,db8500-gpio",
|
||||
"stmicroelectronics,nomadik-gpio";
|
||||
"st,nomadik-gpio";
|
||||
reg = <0xa03fe000 0x80>;
|
||||
interrupts = <0 127 0x4>;
|
||||
supports-sleepmode;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-bank = <8>;
|
||||
};
|
||||
|
||||
usb@a03e0000 {
|
||||
@ -153,7 +171,13 @@
|
||||
reg = <0x80157000 0x1000>;
|
||||
interrupts = <46 47>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
prcmu-timer-4@80157450 {
|
||||
compatible = "stericsson,db8500-prcmu-timer-4";
|
||||
reg = <0x80157450 0xC>;
|
||||
};
|
||||
|
||||
ab8500@5 {
|
||||
compatible = "stericsson,ab8500";
|
||||
@ -163,7 +187,7 @@
|
||||
};
|
||||
|
||||
i2c@80004000 {
|
||||
compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c";
|
||||
compatible = "stericsson,db8500-i2c", "st,nomadik-i2c";
|
||||
reg = <0x80004000 0x1000>;
|
||||
interrupts = <0 21 0x4>;
|
||||
#address-cells = <1>;
|
||||
@ -171,7 +195,7 @@
|
||||
};
|
||||
|
||||
i2c@80122000 {
|
||||
compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c";
|
||||
compatible = "stericsson,db8500-i2c", "st,nomadik-i2c";
|
||||
reg = <0x80122000 0x1000>;
|
||||
interrupts = <0 22 0x4>;
|
||||
#address-cells = <1>;
|
||||
@ -179,7 +203,7 @@
|
||||
};
|
||||
|
||||
i2c@80128000 {
|
||||
compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c";
|
||||
compatible = "stericsson,db8500-i2c", "st,nomadik-i2c";
|
||||
reg = <0x80128000 0x1000>;
|
||||
interrupts = <0 55 0x4>;
|
||||
#address-cells = <1>;
|
||||
@ -187,7 +211,7 @@
|
||||
};
|
||||
|
||||
i2c@80110000 {
|
||||
compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c";
|
||||
compatible = "stericsson,db8500-i2c", "st,nomadik-i2c";
|
||||
reg = <0x80110000 0x1000>;
|
||||
interrupts = <0 12 0x4>;
|
||||
#address-cells = <1>;
|
||||
@ -195,7 +219,7 @@
|
||||
};
|
||||
|
||||
i2c@8012a000 {
|
||||
compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c";
|
||||
compatible = "stericsson,db8500-i2c", "st,nomadik-i2c";
|
||||
reg = <0x8012a000 0x1000>;
|
||||
interrupts = <0 51 0x4>;
|
||||
#address-cells = <1>;
|
||||
@ -270,5 +294,14 @@
|
||||
interrupts = <0 100 0x4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
external-bus@50000000 {
|
||||
compatible = "simple-bus";
|
||||
reg = <0x50000000 0x4000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x50000000 0x4000000>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
84
arch/arm/boot/dts/ethernut5.dts
Normal file
84
arch/arm/boot/dts/ethernut5.dts
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* ethernut5.dts - Device Tree file for Ethernut 5 board
|
||||
*
|
||||
* Copyright (C) 2012 egnite GmbH <info@egnite.de>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9260.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Ethernut 5";
|
||||
compatible = "egnite,ethernut5", "atmel,at91sam9260", "atmel,at91sam9";
|
||||
|
||||
chosen {
|
||||
bootargs = "console=ttyS0,115200 root=/dev/mtdblock0 rw rootfstype=jffs2";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x08000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
dbgu: serial@fffff200 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart0: serial@fffb0000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart1: serial@fffb4000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffc4000 {
|
||||
phy-mode = "rmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb1: gadget@fffa4000 {
|
||||
atmel,vbus-gpio = <&pioC 5 0>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
|
||||
gpios = <0
|
||||
&pioC 14 0
|
||||
0
|
||||
>;
|
||||
|
||||
root@0 {
|
||||
label = "root";
|
||||
reg = <0x0 0x08000000>;
|
||||
};
|
||||
|
||||
data@20000 {
|
||||
label = "data";
|
||||
reg = <0x08000000 0x38000000>;
|
||||
};
|
||||
};
|
||||
|
||||
usb0: ohci@00500000 {
|
||||
num-ports = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
status = "okay";
|
||||
|
||||
pcf8563@50 {
|
||||
compatible = "nxp,pcf8563";
|
||||
reg = <0x51>;
|
||||
};
|
||||
};
|
||||
};
|
138
arch/arm/boot/dts/kizbox.dts
Normal file
138
arch/arm/boot/dts/kizbox.dts
Normal file
@ -0,0 +1,138 @@
|
||||
/*
|
||||
* kizbox.dts - Device Tree file for Overkiz Kizbox board
|
||||
*
|
||||
* Copyright (C) 2012 Boris BREZILLON <linux-arm@overkiz.com>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9g20.dtsi"
|
||||
|
||||
/ {
|
||||
|
||||
model = "Overkiz kizbox";
|
||||
compatible = "overkiz,kizbox", "atmel,at91sam9g20", "atmel,at91sam9";
|
||||
|
||||
chosen {
|
||||
bootargs = "panic=5 ubi.mtd=1 rootfstype=ubifs root=ubi0:root";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x2000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
main_clock: clock@0 {
|
||||
compatible = "atmel,osc", "fixed-clock";
|
||||
clock-frequency = <18432000>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
dbgu: serial@fffff200 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart0: serial@fffb0000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usart1: serial@fffb4000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffc4000 {
|
||||
phy-mode = "mii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
status = "okay";
|
||||
|
||||
bootloaderkernel@0 {
|
||||
label = "bootloader-kernel";
|
||||
reg = <0x0 0xc0000>;
|
||||
};
|
||||
|
||||
ubi@c0000 {
|
||||
label = "ubi";
|
||||
reg = <0xc0000 0x7f40000>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
usb0: ohci@00500000 {
|
||||
num-ports = <1>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
status = "okay";
|
||||
|
||||
pcf8563@51 {
|
||||
/* nxp pcf8563 rtc */
|
||||
compatible = "nxp,pcf8563";
|
||||
reg = <0x51>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led1g {
|
||||
label = "led1:green";
|
||||
gpios = <&pioB 0 1>;
|
||||
linux,default-trigger = "none";
|
||||
};
|
||||
|
||||
led1r {
|
||||
label = "led1:red";
|
||||
gpios = <&pioB 1 1>;
|
||||
linux,default-trigger = "none";
|
||||
};
|
||||
|
||||
led2g {
|
||||
label = "led2:green";
|
||||
gpios = <&pioB 2 1>;
|
||||
linux,default-trigger = "none";
|
||||
default-state = "on";
|
||||
};
|
||||
|
||||
led2r {
|
||||
label = "led2:red";
|
||||
gpios = <&pioB 3 1>;
|
||||
linux,default-trigger = "none";
|
||||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
reset {
|
||||
label = "reset";
|
||||
gpios = <&pioB 30 1>;
|
||||
linux,code = <0x100>;
|
||||
gpio-key,wakeup;
|
||||
};
|
||||
|
||||
mode {
|
||||
label = "mode";
|
||||
gpios = <&pioB 31 1>;
|
||||
linux,code = <0x101>;
|
||||
gpio-key,wakeup;
|
||||
};
|
||||
};
|
||||
};
|
292
arch/arm/boot/dts/lpc32xx.dtsi
Normal file
292
arch/arm/boot/dts/lpc32xx.dtsi
Normal file
@ -0,0 +1,292 @@
|
||||
/*
|
||||
* NXP LPC32xx SoC
|
||||
*
|
||||
* Copyright 2012 Roland Stigge <stigge@antcom.de>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "nxp,lpc3220";
|
||||
interrupt-parent = <&mic>;
|
||||
|
||||
cpus {
|
||||
cpu@0 {
|
||||
compatible = "arm,arm926ejs";
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x20000000 0x20000000 0x30000000>;
|
||||
|
||||
/*
|
||||
* Enable either SLC or MLC
|
||||
*/
|
||||
slc: flash@20020000 {
|
||||
compatible = "nxp,lpc3220-slc";
|
||||
reg = <0x20020000 0x1000>;
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
mlc: flash@200B0000 {
|
||||
compatible = "nxp,lpc3220-mlc";
|
||||
reg = <0x200B0000 0x1000>;
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
dma@31000000 {
|
||||
compatible = "arm,pl080", "arm,primecell";
|
||||
reg = <0x31000000 0x1000>;
|
||||
interrupts = <0x1c 0>;
|
||||
};
|
||||
|
||||
/*
|
||||
* Enable either ohci or usbd (gadget)!
|
||||
*/
|
||||
ohci@31020000 {
|
||||
compatible = "nxp,ohci-nxp", "usb-ohci";
|
||||
reg = <0x31020000 0x300>;
|
||||
interrupts = <0x3b 0>;
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
usbd@31020000 {
|
||||
compatible = "nxp,lpc3220-udc";
|
||||
reg = <0x31020000 0x300>;
|
||||
interrupts = <0x3d 0>, <0x3e 0>, <0x3c 0>, <0x3a 0>;
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
clcd@31040000 {
|
||||
compatible = "arm,pl110", "arm,primecell";
|
||||
reg = <0x31040000 0x1000>;
|
||||
interrupts = <0x0e 0>;
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
mac: ethernet@31060000 {
|
||||
compatible = "nxp,lpc-eth";
|
||||
reg = <0x31060000 0x1000>;
|
||||
interrupts = <0x1d 0>;
|
||||
};
|
||||
|
||||
apb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x20000000 0x20000000 0x30000000>;
|
||||
|
||||
ssp0: ssp@20084000 {
|
||||
compatible = "arm,pl022", "arm,primecell";
|
||||
reg = <0x20084000 0x1000>;
|
||||
interrupts = <0x14 0>;
|
||||
};
|
||||
|
||||
spi1: spi@20088000 {
|
||||
compatible = "nxp,lpc3220-spi";
|
||||
reg = <0x20088000 0x1000>;
|
||||
};
|
||||
|
||||
ssp1: ssp@2008c000 {
|
||||
compatible = "arm,pl022", "arm,primecell";
|
||||
reg = <0x2008c000 0x1000>;
|
||||
interrupts = <0x15 0>;
|
||||
};
|
||||
|
||||
spi2: spi@20090000 {
|
||||
compatible = "nxp,lpc3220-spi";
|
||||
reg = <0x20090000 0x1000>;
|
||||
};
|
||||
|
||||
i2s0: i2s@20094000 {
|
||||
compatible = "nxp,lpc3220-i2s";
|
||||
reg = <0x20094000 0x1000>;
|
||||
};
|
||||
|
||||
sd@20098000 {
|
||||
compatible = "arm,pl180", "arm,primecell";
|
||||
reg = <0x20098000 0x1000>;
|
||||
interrupts = <0x0f 0>, <0x0d 0>;
|
||||
};
|
||||
|
||||
i2s1: i2s@2009C000 {
|
||||
compatible = "nxp,lpc3220-i2s";
|
||||
reg = <0x2009C000 0x1000>;
|
||||
};
|
||||
|
||||
uart3: serial@40080000 {
|
||||
compatible = "nxp,serial";
|
||||
reg = <0x40080000 0x1000>;
|
||||
};
|
||||
|
||||
uart4: serial@40088000 {
|
||||
compatible = "nxp,serial";
|
||||
reg = <0x40088000 0x1000>;
|
||||
};
|
||||
|
||||
uart5: serial@40090000 {
|
||||
compatible = "nxp,serial";
|
||||
reg = <0x40090000 0x1000>;
|
||||
};
|
||||
|
||||
uart6: serial@40098000 {
|
||||
compatible = "nxp,serial";
|
||||
reg = <0x40098000 0x1000>;
|
||||
};
|
||||
|
||||
i2c1: i2c@400A0000 {
|
||||
compatible = "nxp,pnx-i2c";
|
||||
reg = <0x400A0000 0x100>;
|
||||
interrupts = <0x33 0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
pnx,timeout = <0x64>;
|
||||
};
|
||||
|
||||
i2c2: i2c@400A8000 {
|
||||
compatible = "nxp,pnx-i2c";
|
||||
reg = <0x400A8000 0x100>;
|
||||
interrupts = <0x32 0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
pnx,timeout = <0x64>;
|
||||
};
|
||||
|
||||
i2cusb: i2c@31020300 {
|
||||
compatible = "nxp,pnx-i2c";
|
||||
reg = <0x31020300 0x100>;
|
||||
interrupts = <0x3f 0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
pnx,timeout = <0x64>;
|
||||
};
|
||||
};
|
||||
|
||||
fab {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x20000000 0x20000000 0x30000000>;
|
||||
|
||||
/*
|
||||
* MIC Interrupt controller includes:
|
||||
* MIC @40008000
|
||||
* SIC1 @4000C000
|
||||
* SIC2 @40010000
|
||||
*/
|
||||
mic: interrupt-controller@40008000 {
|
||||
compatible = "nxp,lpc3220-mic";
|
||||
interrupt-controller;
|
||||
reg = <0x40008000 0xC000>;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
|
||||
uart1: serial@40014000 {
|
||||
compatible = "nxp,serial";
|
||||
reg = <0x40014000 0x1000>;
|
||||
};
|
||||
|
||||
uart2: serial@40018000 {
|
||||
compatible = "nxp,serial";
|
||||
reg = <0x40018000 0x1000>;
|
||||
};
|
||||
|
||||
uart7: serial@4001C000 {
|
||||
compatible = "nxp,serial";
|
||||
reg = <0x4001C000 0x1000>;
|
||||
};
|
||||
|
||||
rtc@40024000 {
|
||||
compatible = "nxp,lpc3220-rtc";
|
||||
reg = <0x40024000 0x1000>;
|
||||
interrupts = <0x34 0>;
|
||||
};
|
||||
|
||||
gpio: gpio@40028000 {
|
||||
compatible = "nxp,lpc3220-gpio";
|
||||
reg = <0x40028000 0x1000>;
|
||||
/* create a private address space for enumeration */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
gpio_p0: gpio-bank@0 {
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
reg = <0>;
|
||||
};
|
||||
|
||||
gpio_p1: gpio-bank@1 {
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
reg = <1>;
|
||||
};
|
||||
|
||||
gpio_p2: gpio-bank@2 {
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
reg = <2>;
|
||||
};
|
||||
|
||||
gpio_p3: gpio-bank@3 {
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
reg = <3>;
|
||||
};
|
||||
|
||||
gpi_p3: gpio-bank@4 {
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
reg = <4>;
|
||||
};
|
||||
|
||||
gpo_p3: gpio-bank@5 {
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
reg = <5>;
|
||||
};
|
||||
};
|
||||
|
||||
watchdog@4003C000 {
|
||||
compatible = "nxp,pnx4008-wdt";
|
||||
reg = <0x4003C000 0x1000>;
|
||||
};
|
||||
|
||||
/*
|
||||
* TSC vs. ADC: Since those two share the same
|
||||
* hardware, you need to choose from one of the
|
||||
* following two and do 'status = "okay";' for one of
|
||||
* them
|
||||
*/
|
||||
|
||||
adc@40048000 {
|
||||
compatible = "nxp,lpc3220-adc";
|
||||
reg = <0x40048000 0x1000>;
|
||||
interrupts = <0x27 0>;
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
tsc@40048000 {
|
||||
compatible = "nxp,lpc3220-tsc";
|
||||
reg = <0x40048000 0x1000>;
|
||||
interrupts = <0x27 0>;
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
key@40050000 {
|
||||
compatible = "nxp,lpc3220-key";
|
||||
reg = <0x40050000 0x1000>;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
38
arch/arm/boot/dts/mmp2-brownstone.dts
Normal file
38
arch/arm/boot/dts/mmp2-brownstone.dts
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Marvell Technology Group Ltd.
|
||||
* Author: Haojian Zhuang <haojian.zhuang@marvell.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* publishhed by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "mmp2.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Marvell MMP2 Aspenite Development Board";
|
||||
compatible = "mrvl,mmp2-brownstone", "mrvl,mmp2";
|
||||
|
||||
chosen {
|
||||
bootargs = "console=ttyS2,38400 root=/dev/nfs nfsroot=192.168.1.100:/nfsroot/ ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x00000000 0x04000000>;
|
||||
};
|
||||
|
||||
soc {
|
||||
apb@d4000000 {
|
||||
uart3: uart@d4018000 {
|
||||
status = "okay";
|
||||
};
|
||||
twsi1: i2c@d4011000 {
|
||||
status = "okay";
|
||||
};
|
||||
rtc: rtc@d4010000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
220
arch/arm/boot/dts/mmp2.dtsi
Normal file
220
arch/arm/boot/dts/mmp2.dtsi
Normal file
@ -0,0 +1,220 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Marvell Technology Group Ltd.
|
||||
* Author: Haojian Zhuang <haojian.zhuang@marvell.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* publishhed by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
serial0 = &uart1;
|
||||
serial1 = &uart2;
|
||||
serial2 = &uart3;
|
||||
serial3 = &uart4;
|
||||
i2c0 = &twsi1;
|
||||
i2c1 = &twsi2;
|
||||
};
|
||||
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
interrupt-parent = <&intc>;
|
||||
ranges;
|
||||
|
||||
axi@d4200000 { /* AXI */
|
||||
compatible = "mrvl,axi-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xd4200000 0x00200000>;
|
||||
ranges;
|
||||
|
||||
intc: interrupt-controller@d4282000 {
|
||||
compatible = "mrvl,mmp2-intc";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0xd4282000 0x1000>;
|
||||
mrvl,intc-nr-irqs = <64>;
|
||||
};
|
||||
|
||||
intcmux4@d4282150 {
|
||||
compatible = "mrvl,mmp2-mux-intc";
|
||||
interrupts = <4>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0x150 0x4>, <0x168 0x4>;
|
||||
reg-names = "mux status", "mux mask";
|
||||
mrvl,intc-nr-irqs = <2>;
|
||||
};
|
||||
|
||||
intcmux5: interrupt-controller@d4282154 {
|
||||
compatible = "mrvl,mmp2-mux-intc";
|
||||
interrupts = <5>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0x154 0x4>, <0x16c 0x4>;
|
||||
reg-names = "mux status", "mux mask";
|
||||
mrvl,intc-nr-irqs = <2>;
|
||||
mrvl,clr-mfp-irq = <1>;
|
||||
};
|
||||
|
||||
intcmux9: interrupt-controller@d4282180 {
|
||||
compatible = "mrvl,mmp2-mux-intc";
|
||||
interrupts = <9>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0x180 0x4>, <0x17c 0x4>;
|
||||
reg-names = "mux status", "mux mask";
|
||||
mrvl,intc-nr-irqs = <3>;
|
||||
};
|
||||
|
||||
intcmux17: interrupt-controller@d4282158 {
|
||||
compatible = "mrvl,mmp2-mux-intc";
|
||||
interrupts = <17>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0x158 0x4>, <0x170 0x4>;
|
||||
reg-names = "mux status", "mux mask";
|
||||
mrvl,intc-nr-irqs = <5>;
|
||||
};
|
||||
|
||||
intcmux35: interrupt-controller@d428215c {
|
||||
compatible = "mrvl,mmp2-mux-intc";
|
||||
interrupts = <35>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0x15c 0x4>, <0x174 0x4>;
|
||||
reg-names = "mux status", "mux mask";
|
||||
mrvl,intc-nr-irqs = <15>;
|
||||
};
|
||||
|
||||
intcmux51: interrupt-controller@d4282160 {
|
||||
compatible = "mrvl,mmp2-mux-intc";
|
||||
interrupts = <51>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0x160 0x4>, <0x178 0x4>;
|
||||
reg-names = "mux status", "mux mask";
|
||||
mrvl,intc-nr-irqs = <2>;
|
||||
};
|
||||
|
||||
intcmux55: interrupt-controller@d4282188 {
|
||||
compatible = "mrvl,mmp2-mux-intc";
|
||||
interrupts = <55>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0x188 0x4>, <0x184 0x4>;
|
||||
reg-names = "mux status", "mux mask";
|
||||
mrvl,intc-nr-irqs = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
apb@d4000000 { /* APB */
|
||||
compatible = "mrvl,apb-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xd4000000 0x00200000>;
|
||||
ranges;
|
||||
|
||||
timer0: timer@d4014000 {
|
||||
compatible = "mrvl,mmp-timer";
|
||||
reg = <0xd4014000 0x100>;
|
||||
interrupts = <13>;
|
||||
};
|
||||
|
||||
uart1: uart@d4030000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
reg = <0xd4030000 0x1000>;
|
||||
interrupts = <27>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: uart@d4017000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
reg = <0xd4017000 0x1000>;
|
||||
interrupts = <28>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: uart@d4018000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
reg = <0xd4018000 0x1000>;
|
||||
interrupts = <24>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart4: uart@d4016000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
reg = <0xd4016000 0x1000>;
|
||||
interrupts = <46>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gpio@d4019000 {
|
||||
compatible = "mrvl,mmp-gpio";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xd4019000 0x1000>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupts = <49>;
|
||||
interrupt-names = "gpio_mux";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
|
||||
gcb0: gpio@d4019000 {
|
||||
reg = <0xd4019000 0x4>;
|
||||
};
|
||||
|
||||
gcb1: gpio@d4019004 {
|
||||
reg = <0xd4019004 0x4>;
|
||||
};
|
||||
|
||||
gcb2: gpio@d4019008 {
|
||||
reg = <0xd4019008 0x4>;
|
||||
};
|
||||
|
||||
gcb3: gpio@d4019100 {
|
||||
reg = <0xd4019100 0x4>;
|
||||
};
|
||||
|
||||
gcb4: gpio@d4019104 {
|
||||
reg = <0xd4019104 0x4>;
|
||||
};
|
||||
|
||||
gcb5: gpio@d4019108 {
|
||||
reg = <0xd4019108 0x4>;
|
||||
};
|
||||
};
|
||||
|
||||
twsi1: i2c@d4011000 {
|
||||
compatible = "mrvl,mmp-twsi";
|
||||
reg = <0xd4011000 0x1000>;
|
||||
interrupts = <7>;
|
||||
mrvl,i2c-fast-mode;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
twsi2: i2c@d4025000 {
|
||||
compatible = "mrvl,mmp-twsi";
|
||||
reg = <0xd4025000 0x1000>;
|
||||
interrupts = <58>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
rtc: rtc@d4010000 {
|
||||
compatible = "mrvl,mmp-rtc";
|
||||
reg = <0xd4010000 0x1000>;
|
||||
interrupts = <1 0>;
|
||||
interrupt-names = "rtc 1Hz", "rtc alarm";
|
||||
interrupt-parent = <&intcmux5>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -18,3 +18,52 @@
|
||||
reg = <0x80000000 0x20000000>; /* 512 MB */
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
clock-frequency = <2600000>;
|
||||
|
||||
twl: twl@48 {
|
||||
reg = <0x48>;
|
||||
interrupts = <7>; /* SYS_NIRQ cascaded to intc */
|
||||
interrupt-parent = <&intc>;
|
||||
|
||||
vsim: regulator@10 {
|
||||
compatible = "ti,twl4030-vsim";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/include/ "twl4030.dtsi"
|
||||
|
||||
&i2c2 {
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
clock-frequency = <100000>;
|
||||
|
||||
/*
|
||||
* Display monitor features are burnt in the EEPROM
|
||||
* as EDID data.
|
||||
*/
|
||||
eeprom@50 {
|
||||
compatible = "ti,eeprom";
|
||||
reg = <0x50>;
|
||||
};
|
||||
};
|
||||
|
||||
&mmc1 {
|
||||
vmmc-supply = <&vmmc1>;
|
||||
vmmc_aux-supply = <&vsim>;
|
||||
ti,bus-width = <8>;
|
||||
};
|
||||
|
||||
&mmc2 {
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
&mmc3 {
|
||||
status = "disable";
|
||||
};
|
||||
|
@ -69,6 +69,60 @@
|
||||
reg = <0x48200000 0x1000>;
|
||||
};
|
||||
|
||||
gpio1: gpio@48310000 {
|
||||
compatible = "ti,omap3-gpio";
|
||||
ti,hwmods = "gpio1";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
gpio2: gpio@49050000 {
|
||||
compatible = "ti,omap3-gpio";
|
||||
ti,hwmods = "gpio2";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
gpio3: gpio@49052000 {
|
||||
compatible = "ti,omap3-gpio";
|
||||
ti,hwmods = "gpio3";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
gpio4: gpio@49054000 {
|
||||
compatible = "ti,omap3-gpio";
|
||||
ti,hwmods = "gpio4";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
gpio5: gpio@49056000 {
|
||||
compatible = "ti,omap3-gpio";
|
||||
ti,hwmods = "gpio5";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
gpio6: gpio@49058000 {
|
||||
compatible = "ti,omap3-gpio";
|
||||
ti,hwmods = "gpio6";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
uart1: serial@4806a000 {
|
||||
compatible = "ti,omap3-uart";
|
||||
ti,hwmods = "uart1";
|
||||
@ -113,5 +167,53 @@
|
||||
#size-cells = <0>;
|
||||
ti,hwmods = "i2c3";
|
||||
};
|
||||
|
||||
mcspi1: spi@48098000 {
|
||||
compatible = "ti,omap2-mcspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
ti,hwmods = "mcspi1";
|
||||
ti,spi-num-cs = <4>;
|
||||
};
|
||||
|
||||
mcspi2: spi@4809a000 {
|
||||
compatible = "ti,omap2-mcspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
ti,hwmods = "mcspi2";
|
||||
ti,spi-num-cs = <2>;
|
||||
};
|
||||
|
||||
mcspi3: spi@480b8000 {
|
||||
compatible = "ti,omap2-mcspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
ti,hwmods = "mcspi3";
|
||||
ti,spi-num-cs = <2>;
|
||||
};
|
||||
|
||||
mcspi4: spi@480ba000 {
|
||||
compatible = "ti,omap2-mcspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
ti,hwmods = "mcspi4";
|
||||
ti,spi-num-cs = <1>;
|
||||
};
|
||||
|
||||
mmc1: mmc@4809c000 {
|
||||
compatible = "ti,omap3-hsmmc";
|
||||
ti,hwmods = "mmc1";
|
||||
ti,dual-volt;
|
||||
};
|
||||
|
||||
mmc2: mmc@480b4000 {
|
||||
compatible = "ti,omap3-hsmmc";
|
||||
ti,hwmods = "mmc2";
|
||||
};
|
||||
|
||||
mmc3: mmc@480ad000 {
|
||||
compatible = "ti,omap3-hsmmc";
|
||||
ti,hwmods = "mmc3";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -17,4 +17,75 @@
|
||||
device_type = "memory";
|
||||
reg = <0x80000000 0x40000000>; /* 1 GB */
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
heartbeat {
|
||||
label = "pandaboard::status1";
|
||||
gpios = <&gpio1 7 0>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
|
||||
mmc {
|
||||
label = "pandaboard::status2";
|
||||
gpios = <&gpio1 8 0>;
|
||||
linux,default-trigger = "mmc0";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
clock-frequency = <400000>;
|
||||
|
||||
twl: twl@48 {
|
||||
reg = <0x48>;
|
||||
/* SPI = 0, IRQ# = 7, 4 = active high level-sensitive */
|
||||
interrupts = <0 7 4>; /* IRQ_SYS_1N cascaded to gic */
|
||||
interrupt-parent = <&gic>;
|
||||
};
|
||||
};
|
||||
|
||||
/include/ "twl6030.dtsi"
|
||||
|
||||
&i2c2 {
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
clock-frequency = <100000>;
|
||||
|
||||
/*
|
||||
* Display monitor features are burnt in their EEPROM as EDID data.
|
||||
* The EEPROM is connected as I2C slave device.
|
||||
*/
|
||||
eeprom@50 {
|
||||
compatible = "ti,eeprom";
|
||||
reg = <0x50>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
&mmc1 {
|
||||
vmmc-supply = <&vmmc>;
|
||||
ti,bus-width = <8>;
|
||||
};
|
||||
|
||||
&mmc2 {
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
&mmc3 {
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
&mmc4 {
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
&mmc5 {
|
||||
ti,non-removable;
|
||||
ti,bus-width = <4>;
|
||||
};
|
||||
|
@ -17,4 +17,144 @@
|
||||
device_type = "memory";
|
||||
reg = <0x80000000 0x40000000>; /* 1 GB */
|
||||
};
|
||||
|
||||
vdd_eth: fixedregulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "VDD_ETH";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
gpio = <&gpio2 16 0>; /* gpio line 48 */
|
||||
enable-active-high;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
debug0 {
|
||||
label = "omap4:green:debug0";
|
||||
gpios = <&gpio2 29 0>; /* 61 */
|
||||
};
|
||||
|
||||
debug1 {
|
||||
label = "omap4:green:debug1";
|
||||
gpios = <&gpio1 30 0>; /* 30 */
|
||||
};
|
||||
|
||||
debug2 {
|
||||
label = "omap4:green:debug2";
|
||||
gpios = <&gpio1 7 0>; /* 7 */
|
||||
};
|
||||
|
||||
debug3 {
|
||||
label = "omap4:green:debug3";
|
||||
gpios = <&gpio1 8 0>; /* 8 */
|
||||
};
|
||||
|
||||
debug4 {
|
||||
label = "omap4:green:debug4";
|
||||
gpios = <&gpio2 18 0>; /* 50 */
|
||||
};
|
||||
|
||||
user1 {
|
||||
label = "omap4:blue:user";
|
||||
gpios = <&gpio6 9 0>; /* 169 */
|
||||
};
|
||||
|
||||
user2 {
|
||||
label = "omap4:red:user";
|
||||
gpios = <&gpio6 10 0>; /* 170 */
|
||||
};
|
||||
|
||||
user3 {
|
||||
label = "omap4:green:user";
|
||||
gpios = <&gpio5 11 0>; /* 139 */
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
clock-frequency = <400000>;
|
||||
|
||||
twl: twl@48 {
|
||||
reg = <0x48>;
|
||||
/* SPI = 0, IRQ# = 7, 4 = active high level-sensitive */
|
||||
interrupts = <0 7 4>; /* IRQ_SYS_1N cascaded to gic */
|
||||
interrupt-parent = <&gic>;
|
||||
};
|
||||
};
|
||||
|
||||
/include/ "twl6030.dtsi"
|
||||
|
||||
&i2c2 {
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
clock-frequency = <400000>;
|
||||
|
||||
/*
|
||||
* Temperature Sensor
|
||||
* http://www.ti.com/lit/ds/symlink/tmp105.pdf
|
||||
*/
|
||||
tmp105@48 {
|
||||
compatible = "ti,tmp105";
|
||||
reg = <0x48>;
|
||||
};
|
||||
|
||||
/*
|
||||
* Ambient Light Sensor
|
||||
* http://www.rohm.com/products/databook/sensor/pdf/bh1780gli-e.pdf
|
||||
*/
|
||||
bh1780@29 {
|
||||
compatible = "rohm,bh1780";
|
||||
reg = <0x29>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
clock-frequency = <400000>;
|
||||
|
||||
/*
|
||||
* 3-Axis Digital Compass
|
||||
* http://www.sparkfun.com/datasheets/Sensors/Magneto/HMC5843.pdf
|
||||
*/
|
||||
hmc5843@1e {
|
||||
compatible = "honeywell,hmc5843";
|
||||
reg = <0x1e>;
|
||||
};
|
||||
};
|
||||
|
||||
&mcspi1 {
|
||||
eth@0 {
|
||||
compatible = "ks8851";
|
||||
spi-max-frequency = <24000000>;
|
||||
reg = <0>;
|
||||
interrupt-parent = <&gpio2>;
|
||||
interrupts = <2>; /* gpio line 34 */
|
||||
vdd-supply = <&vdd_eth>;
|
||||
};
|
||||
};
|
||||
|
||||
&mmc1 {
|
||||
vmmc-supply = <&vmmc>;
|
||||
ti,bus-width = <8>;
|
||||
};
|
||||
|
||||
&mmc2 {
|
||||
vmmc-supply = <&vaux1>;
|
||||
ti,bus-width = <8>;
|
||||
ti,non-removable;
|
||||
};
|
||||
|
||||
&mmc3 {
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
&mmc4 {
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
&mmc5 {
|
||||
ti,bus-width = <4>;
|
||||
ti,non-removable;
|
||||
};
|
||||
|
@ -104,6 +104,60 @@
|
||||
<0x48240100 0x0100>;
|
||||
};
|
||||
|
||||
gpio1: gpio@4a310000 {
|
||||
compatible = "ti,omap4-gpio";
|
||||
ti,hwmods = "gpio1";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
gpio2: gpio@48055000 {
|
||||
compatible = "ti,omap4-gpio";
|
||||
ti,hwmods = "gpio2";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
gpio3: gpio@48057000 {
|
||||
compatible = "ti,omap4-gpio";
|
||||
ti,hwmods = "gpio3";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
gpio4: gpio@48059000 {
|
||||
compatible = "ti,omap4-gpio";
|
||||
ti,hwmods = "gpio4";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
gpio5: gpio@4805b000 {
|
||||
compatible = "ti,omap4-gpio";
|
||||
ti,hwmods = "gpio5";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
gpio6: gpio@4805d000 {
|
||||
compatible = "ti,omap4-gpio";
|
||||
ti,hwmods = "gpio6";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
uart1: serial@4806a000 {
|
||||
compatible = "ti,omap4-uart";
|
||||
ti,hwmods = "uart1";
|
||||
@ -155,5 +209,68 @@
|
||||
#size-cells = <0>;
|
||||
ti,hwmods = "i2c4";
|
||||
};
|
||||
|
||||
mcspi1: spi@48098000 {
|
||||
compatible = "ti,omap4-mcspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
ti,hwmods = "mcspi1";
|
||||
ti,spi-num-cs = <4>;
|
||||
};
|
||||
|
||||
mcspi2: spi@4809a000 {
|
||||
compatible = "ti,omap4-mcspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
ti,hwmods = "mcspi2";
|
||||
ti,spi-num-cs = <2>;
|
||||
};
|
||||
|
||||
mcspi3: spi@480b8000 {
|
||||
compatible = "ti,omap4-mcspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
ti,hwmods = "mcspi3";
|
||||
ti,spi-num-cs = <2>;
|
||||
};
|
||||
|
||||
mcspi4: spi@480ba000 {
|
||||
compatible = "ti,omap4-mcspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
ti,hwmods = "mcspi4";
|
||||
ti,spi-num-cs = <1>;
|
||||
};
|
||||
|
||||
mmc1: mmc@4809c000 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
ti,hwmods = "mmc1";
|
||||
ti,dual-volt;
|
||||
ti,needs-special-reset;
|
||||
};
|
||||
|
||||
mmc2: mmc@480b4000 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
ti,hwmods = "mmc2";
|
||||
ti,needs-special-reset;
|
||||
};
|
||||
|
||||
mmc3: mmc@480ad000 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
ti,hwmods = "mmc3";
|
||||
ti,needs-special-reset;
|
||||
};
|
||||
|
||||
mmc4: mmc@480d1000 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
ti,hwmods = "mmc4";
|
||||
ti,needs-special-reset;
|
||||
};
|
||||
|
||||
mmc5: mmc@480d5000 {
|
||||
compatible = "ti,omap4-hsmmc";
|
||||
ti,hwmods = "mmc5";
|
||||
ti,needs-special-reset;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
145
arch/arm/boot/dts/phy3250.dts
Normal file
145
arch/arm/boot/dts/phy3250.dts
Normal file
@ -0,0 +1,145 @@
|
||||
/*
|
||||
* PHYTEC phyCORE-LPC3250 board
|
||||
*
|
||||
* Copyright 2012 Roland Stigge <stigge@antcom.de>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "lpc32xx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "PHYTEC phyCORE-LPC3250 board based on NXP LPC3250";
|
||||
compatible = "phytec,phy3250", "nxp,lpc3250";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0 0x4000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
mac: ethernet@31060000 {
|
||||
phy-mode = "rmii";
|
||||
use-iram;
|
||||
};
|
||||
|
||||
/* Here, choose exactly one from: ohci, usbd */
|
||||
ohci@31020000 {
|
||||
transceiver = <&isp1301>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/*
|
||||
usbd@31020000 {
|
||||
transceiver = <&isp1301>;
|
||||
status = "okay";
|
||||
};
|
||||
*/
|
||||
|
||||
clcd@31040000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* 64MB Flash via SLC NAND controller */
|
||||
slc: flash@20020000 {
|
||||
status = "okay";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
mtd0@00000000 {
|
||||
label = "phy3250-boot";
|
||||
reg = <0x00000000 0x00064000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
mtd1@00064000 {
|
||||
label = "phy3250-uboot";
|
||||
reg = <0x00064000 0x00190000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
mtd2@001f4000 {
|
||||
label = "phy3250-ubt-prms";
|
||||
reg = <0x001f4000 0x00010000>;
|
||||
};
|
||||
|
||||
mtd3@00204000 {
|
||||
label = "phy3250-kernel";
|
||||
reg = <0x00204000 0x00400000>;
|
||||
};
|
||||
|
||||
mtd4@00604000 {
|
||||
label = "phy3250-rootfs";
|
||||
reg = <0x00604000 0x039fc000>;
|
||||
};
|
||||
};
|
||||
|
||||
apb {
|
||||
i2c1: i2c@400A0000 {
|
||||
clock-frequency = <100000>;
|
||||
|
||||
pcf8563: rtc@51 {
|
||||
compatible = "nxp,pcf8563";
|
||||
reg = <0x51>;
|
||||
};
|
||||
|
||||
uda1380: uda1380@18 {
|
||||
compatible = "nxp,uda1380";
|
||||
reg = <0x18>;
|
||||
power-gpio = <&gpio 0x59 0>;
|
||||
reset-gpio = <&gpio 0x51 0>;
|
||||
dac-clk = "wspll";
|
||||
};
|
||||
};
|
||||
|
||||
i2c2: i2c@400A8000 {
|
||||
clock-frequency = <100000>;
|
||||
};
|
||||
|
||||
i2cusb: i2c@31020300 {
|
||||
clock-frequency = <100000>;
|
||||
|
||||
isp1301: usb-transceiver@2c {
|
||||
compatible = "nxp,isp1301";
|
||||
reg = <0x2c>;
|
||||
};
|
||||
};
|
||||
|
||||
ssp0: ssp@20084000 {
|
||||
eeprom: at25@0 {
|
||||
compatible = "atmel,at25";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
fab {
|
||||
tsc@40048000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led0 {
|
||||
gpios = <&gpo_p3 1 1>; /* GPO_P3 1, GPIO 80, active low */
|
||||
linux,default-trigger = "heartbeat";
|
||||
default-state = "off";
|
||||
};
|
||||
|
||||
led1 {
|
||||
gpios = <&gpo_p3 14 1>; /* GPO_P3 14, GPIO 93, active low */
|
||||
linux,default-trigger = "timer";
|
||||
default-state = "off";
|
||||
};
|
||||
};
|
||||
};
|
@ -18,13 +18,6 @@
|
||||
i2c1 = &twsi2;
|
||||
};
|
||||
|
||||
intc: intc-interrupt-controller@d4282000 {
|
||||
compatible = "mrvl,mmp-intc", "mrvl,intc";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0xd4282000 0x1000>;
|
||||
};
|
||||
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
@ -32,6 +25,23 @@
|
||||
interrupt-parent = <&intc>;
|
||||
ranges;
|
||||
|
||||
axi@d4200000 { /* AXI */
|
||||
compatible = "mrvl,axi-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xd4200000 0x00200000>;
|
||||
ranges;
|
||||
|
||||
intc: interrupt-controller@d4282000 {
|
||||
compatible = "mrvl,mmp-intc";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0xd4282000 0x1000>;
|
||||
mrvl,intc-nr-irqs = <64>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
apb@d4000000 { /* APB */
|
||||
compatible = "mrvl,apb-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
@ -39,40 +49,65 @@
|
||||
reg = <0xd4000000 0x00200000>;
|
||||
ranges;
|
||||
|
||||
timer0: timer@d4014000 {
|
||||
compatible = "mrvl,mmp-timer";
|
||||
reg = <0xd4014000 0x100>;
|
||||
interrupts = <13>;
|
||||
};
|
||||
|
||||
uart1: uart@d4017000 {
|
||||
compatible = "mrvl,mmp-uart", "mrvl,pxa-uart";
|
||||
compatible = "mrvl,mmp-uart";
|
||||
reg = <0xd4017000 0x1000>;
|
||||
interrupts = <27>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: uart@d4018000 {
|
||||
compatible = "mrvl,mmp-uart", "mrvl,pxa-uart";
|
||||
compatible = "mrvl,mmp-uart";
|
||||
reg = <0xd4018000 0x1000>;
|
||||
interrupts = <28>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: uart@d4026000 {
|
||||
compatible = "mrvl,mmp-uart", "mrvl,pxa-uart";
|
||||
compatible = "mrvl,mmp-uart";
|
||||
reg = <0xd4026000 0x1000>;
|
||||
interrupts = <29>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gpio: gpio@d4019000 {
|
||||
compatible = "mrvl,mmp-gpio", "mrvl,pxa-gpio";
|
||||
gpio@d4019000 {
|
||||
compatible = "mrvl,mmp-gpio";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xd4019000 0x1000>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupts = <49>;
|
||||
interrupt-names = "gpio_mux";
|
||||
gpio-controller;
|
||||
#gpio-cells = <1>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
|
||||
gcb0: gpio@d4019000 {
|
||||
reg = <0xd4019000 0x4>;
|
||||
};
|
||||
|
||||
gcb1: gpio@d4019004 {
|
||||
reg = <0xd4019004 0x4>;
|
||||
};
|
||||
|
||||
gcb2: gpio@d4019008 {
|
||||
reg = <0xd4019008 0x4>;
|
||||
};
|
||||
|
||||
gcb3: gpio@d4019100 {
|
||||
reg = <0xd4019100 0x4>;
|
||||
};
|
||||
};
|
||||
|
||||
twsi1: i2c@d4011000 {
|
||||
compatible = "mrvl,mmp-twsi", "mrvl,pxa-i2c";
|
||||
compatible = "mrvl,mmp-twsi";
|
||||
reg = <0xd4011000 0x1000>;
|
||||
interrupts = <7>;
|
||||
mrvl,i2c-fast-mode;
|
||||
@ -80,7 +115,7 @@
|
||||
};
|
||||
|
||||
twsi2: i2c@d4025000 {
|
||||
compatible = "mrvl,mmp-twsi", "mrvl,pxa-i2c";
|
||||
compatible = "mrvl,mmp-twsi";
|
||||
reg = <0xd4025000 0x1000>;
|
||||
interrupts = <58>;
|
||||
status = "disabled";
|
||||
|
38
arch/arm/boot/dts/pxa910-dkb.dts
Normal file
38
arch/arm/boot/dts/pxa910-dkb.dts
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Marvell Technology Group Ltd.
|
||||
* Author: Haojian Zhuang <haojian.zhuang@marvell.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* publishhed by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "pxa910.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Marvell PXA910 DKB Development Board";
|
||||
compatible = "mrvl,pxa910-dkb", "mrvl,pxa910";
|
||||
|
||||
chosen {
|
||||
bootargs = "console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.1.100:/nfsroot/ ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x00000000 0x10000000>;
|
||||
};
|
||||
|
||||
soc {
|
||||
apb@d4000000 {
|
||||
uart1: uart@d4017000 {
|
||||
status = "okay";
|
||||
};
|
||||
twsi1: i2c@d4011000 {
|
||||
status = "okay";
|
||||
};
|
||||
rtc: rtc@d4010000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
140
arch/arm/boot/dts/pxa910.dtsi
Normal file
140
arch/arm/boot/dts/pxa910.dtsi
Normal file
@ -0,0 +1,140 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Marvell Technology Group Ltd.
|
||||
* Author: Haojian Zhuang <haojian.zhuang@marvell.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* publishhed by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
serial0 = &uart1;
|
||||
serial1 = &uart2;
|
||||
serial2 = &uart3;
|
||||
i2c0 = &twsi1;
|
||||
i2c1 = &twsi2;
|
||||
};
|
||||
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
interrupt-parent = <&intc>;
|
||||
ranges;
|
||||
|
||||
axi@d4200000 { /* AXI */
|
||||
compatible = "mrvl,axi-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xd4200000 0x00200000>;
|
||||
ranges;
|
||||
|
||||
intc: interrupt-controller@d4282000 {
|
||||
compatible = "mrvl,mmp-intc";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0xd4282000 0x1000>;
|
||||
mrvl,intc-nr-irqs = <64>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
apb@d4000000 { /* APB */
|
||||
compatible = "mrvl,apb-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xd4000000 0x00200000>;
|
||||
ranges;
|
||||
|
||||
timer0: timer@d4014000 {
|
||||
compatible = "mrvl,mmp-timer";
|
||||
reg = <0xd4014000 0x100>;
|
||||
interrupts = <13>;
|
||||
};
|
||||
|
||||
timer1: timer@d4016000 {
|
||||
compatible = "mrvl,mmp-timer";
|
||||
reg = <0xd4016000 0x100>;
|
||||
interrupts = <29>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart1: uart@d4017000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
reg = <0xd4017000 0x1000>;
|
||||
interrupts = <27>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: uart@d4018000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
reg = <0xd4018000 0x1000>;
|
||||
interrupts = <28>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: uart@d4036000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
reg = <0xd4036000 0x1000>;
|
||||
interrupts = <59>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gpio@d4019000 {
|
||||
compatible = "mrvl,mmp-gpio";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xd4019000 0x1000>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupts = <49>;
|
||||
interrupt-names = "gpio_mux";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
ranges;
|
||||
|
||||
gcb0: gpio@d4019000 {
|
||||
reg = <0xd4019000 0x4>;
|
||||
};
|
||||
|
||||
gcb1: gpio@d4019004 {
|
||||
reg = <0xd4019004 0x4>;
|
||||
};
|
||||
|
||||
gcb2: gpio@d4019008 {
|
||||
reg = <0xd4019008 0x4>;
|
||||
};
|
||||
|
||||
gcb3: gpio@d4019100 {
|
||||
reg = <0xd4019100 0x4>;
|
||||
};
|
||||
};
|
||||
|
||||
twsi1: i2c@d4011000 {
|
||||
compatible = "mrvl,mmp-twsi";
|
||||
reg = <0xd4011000 0x1000>;
|
||||
interrupts = <7>;
|
||||
mrvl,i2c-fast-mode;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
twsi2: i2c@d4037000 {
|
||||
compatible = "mrvl,mmp-twsi";
|
||||
reg = <0xd4037000 0x1000>;
|
||||
interrupts = <54>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
rtc: rtc@d4010000 {
|
||||
compatible = "mrvl,mmp-rtc";
|
||||
reg = <0xd4010000 0x1000>;
|
||||
interrupts = <5 6>;
|
||||
interrupt-names = "rtc 1Hz", "rtc alarm";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
21
arch/arm/boot/dts/sh7372.dtsi
Normal file
21
arch/arm/boot/dts/sh7372.dtsi
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Device Tree Source for the sh7372 SoC
|
||||
*
|
||||
* Copyright (C) 2012 Renesas Solutions Corp.
|
||||
*
|
||||
* 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/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "renesas,sh7372";
|
||||
|
||||
cpus {
|
||||
cpu@0 {
|
||||
compatible = "arm,cortex-a8";
|
||||
};
|
||||
};
|
||||
};
|
@ -30,35 +30,35 @@
|
||||
wakeup = <1>;
|
||||
linux,code = <2>;
|
||||
label = "userpb";
|
||||
gpios = <&gpio1 0>;
|
||||
gpios = <&gpio1 0 0>;
|
||||
};
|
||||
button@2 {
|
||||
debounce_interval = <50>;
|
||||
wakeup = <1>;
|
||||
linux,code = <3>;
|
||||
label = "userpb";
|
||||
gpios = <&gpio4 23>;
|
||||
label = "extkb1";
|
||||
gpios = <&gpio4 23 0>;
|
||||
};
|
||||
button@3 {
|
||||
debounce_interval = <50>;
|
||||
wakeup = <1>;
|
||||
linux,code = <4>;
|
||||
label = "userpb";
|
||||
gpios = <&gpio4 23>;
|
||||
label = "extkb2";
|
||||
gpios = <&gpio4 24 0>;
|
||||
};
|
||||
button@4 {
|
||||
debounce_interval = <50>;
|
||||
wakeup = <1>;
|
||||
linux,code = <5>;
|
||||
label = "userpb";
|
||||
gpios = <&gpio5 1>;
|
||||
label = "extkb3";
|
||||
gpios = <&gpio5 1 0>;
|
||||
};
|
||||
button@5 {
|
||||
debounce_interval = <50>;
|
||||
wakeup = <1>;
|
||||
linux,code = <6>;
|
||||
label = "userpb";
|
||||
gpios = <&gpio5 2>;
|
||||
label = "extkb4";
|
||||
gpios = <&gpio5 2 0>;
|
||||
};
|
||||
};
|
||||
|
||||
@ -73,17 +73,19 @@
|
||||
soc-u9500 {
|
||||
|
||||
external-bus@50000000 {
|
||||
compatible = "simple-bus";
|
||||
reg = <0x50000000 0x10000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
status = "okay";
|
||||
|
||||
ethernet@50000000 {
|
||||
compatible = "smsc,9111";
|
||||
reg = <0x50000000 0x10000>;
|
||||
interrupts = <12>;
|
||||
ethernet@0 {
|
||||
compatible = "smsc,lan9115";
|
||||
reg = <0 0x10000>;
|
||||
interrupts = <12 0x1>;
|
||||
interrupt-parent = <&gpio4>;
|
||||
|
||||
reg-shift = <1>;
|
||||
reg-io-width = <2>;
|
||||
smsc,force-internal-phy;
|
||||
smsc,irq-active-high;
|
||||
smsc,irq-push-pull;
|
||||
};
|
||||
};
|
||||
|
||||
|
183
arch/arm/boot/dts/spear300-evb.dts
Normal file
183
arch/arm/boot/dts/spear300-evb.dts
Normal file
@ -0,0 +1,183 @@
|
||||
/*
|
||||
* DTS file for SPEAr300 Evaluation Baord
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "spear300.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ST SPEAr300 Evaluation Board";
|
||||
compatible = "st,spear300-evb", "st,spear300";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
memory {
|
||||
reg = <0 0x40000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
clcd@60000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
dma@fc400000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
fsmc: flash@94000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gmac: eth@e0800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
sdhci@70000000 {
|
||||
int-gpio = <&gpio1 0 0>;
|
||||
power-gpio = <&gpio1 2 1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
smi: flash@fc000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi0: spi@d0100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ehci@e1800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e1900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e2100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
apb {
|
||||
gpio0: gpio@fc980000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gpio1: gpio@a9000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
i2c0: i2c@d0180000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
kbd@a0000000 {
|
||||
linux,keymap = < 0x00000001
|
||||
0x00010002
|
||||
0x00020003
|
||||
0x00030004
|
||||
0x00040005
|
||||
0x00050006
|
||||
0x00060007
|
||||
0x00070008
|
||||
0x00080009
|
||||
0x0100000a
|
||||
0x0101000c
|
||||
0x0102000d
|
||||
0x0103000e
|
||||
0x0104000f
|
||||
0x01050010
|
||||
0x01060011
|
||||
0x01070012
|
||||
0x01080013
|
||||
0x02000014
|
||||
0x02010015
|
||||
0x02020016
|
||||
0x02030017
|
||||
0x02040018
|
||||
0x02050019
|
||||
0x0206001a
|
||||
0x0207001b
|
||||
0x0208001c
|
||||
0x0300001d
|
||||
0x0301001e
|
||||
0x0302001f
|
||||
0x03030020
|
||||
0x03040021
|
||||
0x03050022
|
||||
0x03060023
|
||||
0x03070024
|
||||
0x03080025
|
||||
0x04000026
|
||||
0x04010027
|
||||
0x04020028
|
||||
0x04030029
|
||||
0x0404002a
|
||||
0x0405002b
|
||||
0x0406002c
|
||||
0x0407002d
|
||||
0x0408002e
|
||||
0x0500002f
|
||||
0x05010030
|
||||
0x05020031
|
||||
0x05030032
|
||||
0x05040033
|
||||
0x05050034
|
||||
0x05060035
|
||||
0x05070036
|
||||
0x05080037
|
||||
0x06000038
|
||||
0x06010039
|
||||
0x0602003a
|
||||
0x0603003b
|
||||
0x0604003c
|
||||
0x0605003d
|
||||
0x0606003e
|
||||
0x0607003f
|
||||
0x06080040
|
||||
0x07000041
|
||||
0x07010042
|
||||
0x07020043
|
||||
0x07030044
|
||||
0x07040045
|
||||
0x07050046
|
||||
0x07060047
|
||||
0x07070048
|
||||
0x07080049
|
||||
0x0800004a
|
||||
0x0801004b
|
||||
0x0802004c
|
||||
0x0803004d
|
||||
0x0804004e
|
||||
0x0805004f
|
||||
0x08060050
|
||||
0x08070051
|
||||
0x08080052 >;
|
||||
autorepeat;
|
||||
st,mode = <0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
rtc@fc900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@d0000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
wdt@fc880000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
72
arch/arm/boot/dts/spear300.dtsi
Normal file
72
arch/arm/boot/dts/spear300.dtsi
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* DTS file for SPEAr300 SoC
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/include/ "spear3xx.dtsi"
|
||||
|
||||
/ {
|
||||
ahb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x60000000 0x60000000 0x50000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
clcd@60000000 {
|
||||
compatible = "arm,clcd-pl110", "arm,primecell";
|
||||
reg = <0x60000000 0x1000>;
|
||||
interrupts = <30>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fsmc: flash@94000000 {
|
||||
compatible = "st,spear600-fsmc-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x94000000 0x1000 /* FSMC Register */
|
||||
0x80000000 0x0010>; /* NAND Base */
|
||||
reg-names = "fsmc_regs", "nand_data";
|
||||
st,ale-off = <0x20000>;
|
||||
st,cle-off = <0x10000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@70000000 {
|
||||
compatible = "st,sdhci-spear";
|
||||
reg = <0x70000000 0x100>;
|
||||
interrupts = <1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
apb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0xa0000000 0xa0000000 0x10000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
gpio1: gpio@a9000000 {
|
||||
#gpio-cells = <2>;
|
||||
compatible = "arm,pl061", "arm,primecell";
|
||||
gpio-controller;
|
||||
reg = <0xa9000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
kbd@a0000000 {
|
||||
compatible = "st,spear300-kbd";
|
||||
reg = <0xa0000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
111
arch/arm/boot/dts/spear310-evb.dts
Normal file
111
arch/arm/boot/dts/spear310-evb.dts
Normal file
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* DTS file for SPEAr310 Evaluation Baord
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "spear310.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ST SPEAr310 Evaluation Board";
|
||||
compatible = "st,spear310-evb", "st,spear310";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
memory {
|
||||
reg = <0 0x40000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
dma@fc400000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
fsmc: flash@44000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gmac: eth@e0800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
smi: flash@fc000000 {
|
||||
status = "okay";
|
||||
clock-rate=<50000000>;
|
||||
|
||||
flash@f8000000 {
|
||||
label = "m25p64";
|
||||
reg = <0xf8000000 0x800000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
st,smi-fast-mode;
|
||||
};
|
||||
};
|
||||
|
||||
spi0: spi@d0100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ehci@e1800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e1900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e2100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
apb {
|
||||
gpio0: gpio@fc980000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
i2c0: i2c@d0180000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
rtc@fc900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@d0000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@b2000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@b2080000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@b2100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@b2180000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@b2200000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
wdt@fc880000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
75
arch/arm/boot/dts/spear310.dtsi
Normal file
75
arch/arm/boot/dts/spear310.dtsi
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* DTS file for SPEAr310 SoC
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/include/ "spear3xx.dtsi"
|
||||
|
||||
/ {
|
||||
ahb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x40000000 0x40000000 0x10000000
|
||||
0xb0000000 0xb0000000 0x10000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
fsmc: flash@44000000 {
|
||||
compatible = "st,spear600-fsmc-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x44000000 0x1000 /* FSMC Register */
|
||||
0x40000000 0x0010>; /* NAND Base */
|
||||
reg-names = "fsmc_regs", "nand_data";
|
||||
st,ale-off = <0x10000>;
|
||||
st,cle-off = <0x20000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
apb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0xb0000000 0xb0000000 0x10000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
serial@b2000000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xb2000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@b2080000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xb2080000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@b2100000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xb2100000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@b2180000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xb2180000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@b2200000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xb2200000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
112
arch/arm/boot/dts/spear320-evb.dts
Normal file
112
arch/arm/boot/dts/spear320-evb.dts
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* DTS file for SPEAr320 Evaluation Baord
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "spear320.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ST SPEAr300 Evaluation Board";
|
||||
compatible = "st,spear300-evb", "st,spear300";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
memory {
|
||||
reg = <0 0x40000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
clcd@90000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
dma@fc400000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
fsmc: flash@4c000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gmac: eth@e0800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
sdhci@70000000 {
|
||||
power-gpio = <&gpio0 2 1>;
|
||||
power_always_enb;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
smi: flash@fc000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi0: spi@d0100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi1: spi@a5000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
spi2: spi@a6000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ehci@e1800000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e1900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ohci@e2100000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
apb {
|
||||
gpio0: gpio@fc980000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
i2c0: i2c@d0180000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
i2c1: i2c@a7000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
rtc@fc900000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@d0000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@a3000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
serial@a4000000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
wdt@fc880000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
90
arch/arm/boot/dts/spear320.dtsi
Normal file
90
arch/arm/boot/dts/spear320.dtsi
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* DTS file for SPEAr320 SoC
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/include/ "spear3xx.dtsi"
|
||||
|
||||
/ {
|
||||
ahb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0x40000000 0x40000000 0x70000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
clcd@90000000 {
|
||||
compatible = "arm,clcd-pl110", "arm,primecell";
|
||||
reg = <0x90000000 0x1000>;
|
||||
interrupts = <33>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fsmc: flash@4c000000 {
|
||||
compatible = "st,spear600-fsmc-nand";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0x4c000000 0x1000 /* FSMC Register */
|
||||
0x50000000 0x0010>; /* NAND Base */
|
||||
reg-names = "fsmc_regs", "nand_data";
|
||||
st,ale-off = <0x20000>;
|
||||
st,cle-off = <0x10000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@70000000 {
|
||||
compatible = "st,sdhci-spear";
|
||||
reg = <0x70000000 0x100>;
|
||||
interrupts = <29>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi1: spi@a5000000 {
|
||||
compatible = "arm,pl022", "arm,primecell";
|
||||
reg = <0xa5000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi2: spi@a6000000 {
|
||||
compatible = "arm,pl022", "arm,primecell";
|
||||
reg = <0xa6000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
apb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0xa0000000 0xa0000000 0x10000000
|
||||
0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
i2c1: i2c@a7000000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "snps,designware-i2c";
|
||||
reg = <0xa7000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@a3000000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xa3000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@a4000000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xa4000000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
144
arch/arm/boot/dts/spear3xx.dtsi
Normal file
144
arch/arm/boot/dts/spear3xx.dtsi
Normal file
@ -0,0 +1,144 @@
|
||||
/*
|
||||
* DTS file for all SPEAr3xx SoCs
|
||||
*
|
||||
* Copyright 2012 Viresh Kumar <viresh.kumar@st.com>
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
* Version 2 or later at the following locations:
|
||||
*
|
||||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
interrupt-parent = <&vic>;
|
||||
|
||||
cpus {
|
||||
cpu@0 {
|
||||
compatible = "arm,arm926ejs";
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0 0x40000000>;
|
||||
};
|
||||
|
||||
ahb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
vic: interrupt-controller@f1100000 {
|
||||
compatible = "arm,pl190-vic";
|
||||
interrupt-controller;
|
||||
reg = <0xf1100000 0x1000>;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
dma@fc400000 {
|
||||
compatible = "arm,pl080", "arm,primecell";
|
||||
reg = <0xfc400000 0x1000>;
|
||||
interrupt-parent = <&vic>;
|
||||
interrupts = <8>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gmac: eth@e0800000 {
|
||||
compatible = "st,spear600-gmac";
|
||||
reg = <0xe0800000 0x8000>;
|
||||
interrupts = <23 22>;
|
||||
interrupt-names = "macirq", "eth_wake_irq";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
smi: flash@fc000000 {
|
||||
compatible = "st,spear600-smi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
reg = <0xfc000000 0x1000>;
|
||||
interrupts = <9>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi0: spi@d0100000 {
|
||||
compatible = "arm,pl022", "arm,primecell";
|
||||
reg = <0xd0100000 0x1000>;
|
||||
interrupts = <20>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ehci@e1800000 {
|
||||
compatible = "st,spear600-ehci", "usb-ehci";
|
||||
reg = <0xe1800000 0x1000>;
|
||||
interrupts = <26>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ohci@e1900000 {
|
||||
compatible = "st,spear600-ohci", "usb-ohci";
|
||||
reg = <0xe1900000 0x1000>;
|
||||
interrupts = <25>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ohci@e2100000 {
|
||||
compatible = "st,spear600-ohci", "usb-ohci";
|
||||
reg = <0xe2100000 0x1000>;
|
||||
interrupts = <27>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
apb {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "simple-bus";
|
||||
ranges = <0xd0000000 0xd0000000 0x30000000>;
|
||||
|
||||
gpio0: gpio@fc980000 {
|
||||
compatible = "arm,pl061", "arm,primecell";
|
||||
reg = <0xfc980000 0x1000>;
|
||||
interrupts = <11>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c0: i2c@d0180000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "snps,designware-i2c";
|
||||
reg = <0xd0180000 0x1000>;
|
||||
interrupts = <21>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
rtc@fc900000 {
|
||||
compatible = "st,spear-rtc";
|
||||
reg = <0xfc900000 0x1000>;
|
||||
interrupts = <10>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial@d0000000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xd0000000 0x1000>;
|
||||
interrupts = <19>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
wdt@fc880000 {
|
||||
compatible = "arm,sp805", "arm,primecell";
|
||||
reg = <0xfc880000 0x1000>;
|
||||
interrupts = <12>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -24,6 +24,10 @@
|
||||
};
|
||||
|
||||
ahb {
|
||||
dma@fc400000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
gmac: ethernet@e0800000 {
|
||||
phy-mode = "gmii";
|
||||
status = "okay";
|
||||
|
@ -45,6 +45,14 @@
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
|
||||
dma@fc400000 {
|
||||
compatible = "arm,pl080", "arm,primecell";
|
||||
reg = <0xfc400000 0x1000>;
|
||||
interrupt-parent = <&vic1>;
|
||||
interrupts = <10>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gmac: ethernet@e0800000 {
|
||||
compatible = "st,spear600-gmac";
|
||||
reg = <0xe0800000 0x8000>;
|
||||
|
15
arch/arm/boot/dts/tny_a9260.dts
Normal file
15
arch/arm/boot/dts/tny_a9260.dts
Normal file
@ -0,0 +1,15 @@
|
||||
/*
|
||||
* tny_a9260.dts - Device Tree file for Caloa TNY A9260 board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9260.dtsi"
|
||||
/include/ "tny_a9260_common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Calao TNY A9260";
|
||||
compatible = "calao,tny-a9260", "atmel,at91sam9260", "atmel,at91sam9";
|
||||
};
|
83
arch/arm/boot/dts/tny_a9260_common.dtsi
Normal file
83
arch/arm/boot/dts/tny_a9260_common.dtsi
Normal file
@ -0,0 +1,83 @@
|
||||
/*
|
||||
* tny_a9260_common.dtsi - Device Tree file for Caloa TNY A926x board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock6 rw rootfstype=ubifs";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x4000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
main_clock: clock@0 {
|
||||
compatible = "atmel,osc", "fixed-clock";
|
||||
clock-frequency = <12000000>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
dbgu: serial@fffff200 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
|
||||
at91bootstrap@0 {
|
||||
label = "at91bootstrap";
|
||||
reg = <0x0 0x20000>;
|
||||
};
|
||||
|
||||
barebox@20000 {
|
||||
label = "barebox";
|
||||
reg = <0x20000 0x40000>;
|
||||
};
|
||||
|
||||
bareboxenv@60000 {
|
||||
label = "bareboxenv";
|
||||
reg = <0x60000 0x20000>;
|
||||
};
|
||||
|
||||
bareboxenv2@80000 {
|
||||
label = "bareboxenv2";
|
||||
reg = <0x80000 0x20000>;
|
||||
};
|
||||
|
||||
oftree@80000 {
|
||||
label = "oftree";
|
||||
reg = <0xa0000 0x20000>;
|
||||
};
|
||||
|
||||
kernel@a0000 {
|
||||
label = "kernel";
|
||||
reg = <0xc0000 0x400000>;
|
||||
};
|
||||
|
||||
rootfs@4a0000 {
|
||||
label = "rootfs";
|
||||
reg = <0x4c0000 0x7800000>;
|
||||
};
|
||||
|
||||
data@7ca0000 {
|
||||
label = "data";
|
||||
reg = <0x7cc0000 0x8340000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
97
arch/arm/boot/dts/tny_a9263.dts
Normal file
97
arch/arm/boot/dts/tny_a9263.dts
Normal file
@ -0,0 +1,97 @@
|
||||
/*
|
||||
* usb_a9263.dts - Device Tree file for Caloa USB A9293 board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2 only
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9263.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Calao TNY A9263";
|
||||
compatible = "atmel,tny-a9263", "atmel,at91sam9263", "atmel,at91sam9";
|
||||
|
||||
chosen {
|
||||
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x4000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
main_clock: clock@0 {
|
||||
compatible = "atmel,osc", "fixed-clock";
|
||||
clock-frequency = <12000000>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
dbgu: serial@ffffee00 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb1: gadget@fff78000 {
|
||||
atmel,vbus-gpio = <&pioB 11 0>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
|
||||
at91bootstrap@0 {
|
||||
label = "at91bootstrap";
|
||||
reg = <0x0 0x20000>;
|
||||
};
|
||||
|
||||
barebox@20000 {
|
||||
label = "barebox";
|
||||
reg = <0x20000 0x40000>;
|
||||
};
|
||||
|
||||
bareboxenv@60000 {
|
||||
label = "bareboxenv";
|
||||
reg = <0x60000 0x20000>;
|
||||
};
|
||||
|
||||
bareboxenv2@80000 {
|
||||
label = "bareboxenv2";
|
||||
reg = <0x80000 0x20000>;
|
||||
};
|
||||
|
||||
oftree@80000 {
|
||||
label = "oftree";
|
||||
reg = <0xa0000 0x20000>;
|
||||
};
|
||||
|
||||
kernel@a0000 {
|
||||
label = "kernel";
|
||||
reg = <0xc0000 0x400000>;
|
||||
};
|
||||
|
||||
rootfs@4a0000 {
|
||||
label = "rootfs";
|
||||
reg = <0x4c0000 0x7800000>;
|
||||
};
|
||||
|
||||
data@7ca0000 {
|
||||
label = "data";
|
||||
reg = <0x7cc0000 0x8340000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
15
arch/arm/boot/dts/tny_a9g20.dts
Normal file
15
arch/arm/boot/dts/tny_a9g20.dts
Normal file
@ -0,0 +1,15 @@
|
||||
/*
|
||||
* tny_a9g20.dts - Device Tree file for Caloa TNY A9G20 board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9g20.dtsi"
|
||||
/include/ "tny_a9260_common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Calao TNY A9G20";
|
||||
compatible = "calao,tny-a9g20", "atmel,at91sam9g20", "atmel,at91sam9";
|
||||
};
|
47
arch/arm/boot/dts/twl4030.dtsi
Normal file
47
arch/arm/boot/dts/twl4030.dtsi
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Integrated Power Management Chip
|
||||
*/
|
||||
&twl {
|
||||
compatible = "ti,twl4030";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
|
||||
rtc {
|
||||
compatible = "ti,twl4030-rtc";
|
||||
interrupts = <11>;
|
||||
};
|
||||
|
||||
vdac: regulator@0 {
|
||||
compatible = "ti,twl4030-vdac";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
};
|
||||
|
||||
vpll2: regulator@1 {
|
||||
compatible = "ti,twl4030-vpll2";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
};
|
||||
|
||||
vmmc1: regulator@2 {
|
||||
compatible = "ti,twl4030-vmmc1";
|
||||
regulator-min-microvolt = <1850000>;
|
||||
regulator-max-microvolt = <3150000>;
|
||||
};
|
||||
|
||||
twl_gpio: gpio {
|
||||
compatible = "ti,twl4030-gpio";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
};
|
||||
};
|
86
arch/arm/boot/dts/twl6030.dtsi
Normal file
86
arch/arm/boot/dts/twl6030.dtsi
Normal file
@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Integrated Power Management Chip
|
||||
* http://www.ti.com/lit/ds/symlink/twl6030.pdf
|
||||
*/
|
||||
&twl {
|
||||
compatible = "ti,twl6030";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
|
||||
rtc {
|
||||
compatible = "ti,twl4030-rtc";
|
||||
interrupts = <11>;
|
||||
};
|
||||
|
||||
vaux1: regulator@0 {
|
||||
compatible = "ti,twl6030-vaux1";
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
};
|
||||
|
||||
vaux2: regulator@1 {
|
||||
compatible = "ti,twl6030-vaux2";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
};
|
||||
|
||||
vaux3: regulator@2 {
|
||||
compatible = "ti,twl6030-vaux3";
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
};
|
||||
|
||||
vmmc: regulator@3 {
|
||||
compatible = "ti,twl6030-vmmc";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
};
|
||||
|
||||
vpp: regulator@4 {
|
||||
compatible = "ti,twl6030-vpp";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <2500000>;
|
||||
};
|
||||
|
||||
vusim: regulator@5 {
|
||||
compatible = "ti,twl6030-vusim";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
};
|
||||
|
||||
vdac: regulator@6 {
|
||||
compatible = "ti,twl6030-vdac";
|
||||
};
|
||||
|
||||
vana: regulator@7 {
|
||||
compatible = "ti,twl6030-vana";
|
||||
};
|
||||
|
||||
vcxio: regulator@8 {
|
||||
compatible = "ti,twl6030-vcxio";
|
||||
};
|
||||
|
||||
vusb: regulator@9 {
|
||||
compatible = "ti,twl6030-vusb";
|
||||
};
|
||||
|
||||
v1v8: regulator@10 {
|
||||
compatible = "ti,twl6030-v1v8";
|
||||
};
|
||||
|
||||
v2v1: regulator@11 {
|
||||
compatible = "ti,twl6030-v2v1";
|
||||
};
|
||||
|
||||
clk32kg: regulator@12 {
|
||||
compatible = "ti,twl6030-clk32kg";
|
||||
};
|
||||
};
|
23
arch/arm/boot/dts/usb_a9260.dts
Normal file
23
arch/arm/boot/dts/usb_a9260.dts
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* usb_a9260.dts - Device Tree file for Caloa USB A9260 board
|
||||
*
|
||||
* Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2 or later.
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9260.dtsi"
|
||||
/include/ "usb_a9260_common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Calao USB A9260";
|
||||
compatible = "calao,usb-a9260", "atmel,at91sam9260", "atmel,at91sam9";
|
||||
|
||||
chosen {
|
||||
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x4000000>;
|
||||
};
|
||||
};
|
117
arch/arm/boot/dts/usb_a9260_common.dtsi
Normal file
117
arch/arm/boot/dts/usb_a9260_common.dtsi
Normal file
@ -0,0 +1,117 @@
|
||||
/*
|
||||
* usb_a926x.dts - Device Tree file for Caloa USB A926x board
|
||||
*
|
||||
* Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2 or later.
|
||||
*/
|
||||
|
||||
/ {
|
||||
clocks {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
main_clock: clock@0 {
|
||||
compatible = "atmel,osc", "fixed-clock";
|
||||
clock-frequency = <12000000>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
dbgu: serial@fffff200 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffc4000 {
|
||||
phy-mode = "rmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb1: gadget@fffa4000 {
|
||||
atmel,vbus-gpio = <&pioC 5 0>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
|
||||
at91bootstrap@0 {
|
||||
label = "at91bootstrap";
|
||||
reg = <0x0 0x20000>;
|
||||
};
|
||||
|
||||
barebox@20000 {
|
||||
label = "barebox";
|
||||
reg = <0x20000 0x40000>;
|
||||
};
|
||||
|
||||
bareboxenv@60000 {
|
||||
label = "bareboxenv";
|
||||
reg = <0x60000 0x20000>;
|
||||
};
|
||||
|
||||
bareboxenv2@80000 {
|
||||
label = "bareboxenv2";
|
||||
reg = <0x80000 0x20000>;
|
||||
};
|
||||
|
||||
oftree@80000 {
|
||||
label = "oftree";
|
||||
reg = <0xa0000 0x20000>;
|
||||
};
|
||||
|
||||
kernel@a0000 {
|
||||
label = "kernel";
|
||||
reg = <0xc0000 0x400000>;
|
||||
};
|
||||
|
||||
rootfs@4a0000 {
|
||||
label = "rootfs";
|
||||
reg = <0x4c0000 0x7800000>;
|
||||
};
|
||||
|
||||
data@7ca0000 {
|
||||
label = "data";
|
||||
reg = <0x7cc0000 0x8340000>;
|
||||
};
|
||||
};
|
||||
|
||||
usb0: ohci@00500000 {
|
||||
num-ports = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
user_led {
|
||||
label = "user_led";
|
||||
gpios = <&pioB 21 1>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
user_pb {
|
||||
label = "user_pb";
|
||||
gpios = <&pioB 10 1>;
|
||||
linux,code = <28>;
|
||||
gpio-key,wakeup;
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
131
arch/arm/boot/dts/usb_a9263.dts
Normal file
131
arch/arm/boot/dts/usb_a9263.dts
Normal file
@ -0,0 +1,131 @@
|
||||
/*
|
||||
* usb_a9263.dts - Device Tree file for Caloa USB A9293 board
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||
*
|
||||
* Licensed under GPLv2 only
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9263.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Calao USB A9263";
|
||||
compatible = "atmel,usb-a9263", "atmel,at91sam9263", "atmel,at91sam9";
|
||||
|
||||
chosen {
|
||||
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x20000000 0x4000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
main_clock: clock@0 {
|
||||
compatible = "atmel,osc", "fixed-clock";
|
||||
clock-frequency = <12000000>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
dbgu: serial@ffffee00 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffbc000 {
|
||||
phy-mode = "rmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb1: gadget@fff78000 {
|
||||
atmel,vbus-gpio = <&pioB 11 0>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
|
||||
at91bootstrap@0 {
|
||||
label = "at91bootstrap";
|
||||
reg = <0x0 0x20000>;
|
||||
};
|
||||
|
||||
barebox@20000 {
|
||||
label = "barebox";
|
||||
reg = <0x20000 0x40000>;
|
||||
};
|
||||
|
||||
bareboxenv@60000 {
|
||||
label = "bareboxenv";
|
||||
reg = <0x60000 0x20000>;
|
||||
};
|
||||
|
||||
bareboxenv2@80000 {
|
||||
label = "bareboxenv2";
|
||||
reg = <0x80000 0x20000>;
|
||||
};
|
||||
|
||||
oftree@80000 {
|
||||
label = "oftree";
|
||||
reg = <0xa0000 0x20000>;
|
||||
};
|
||||
|
||||
kernel@a0000 {
|
||||
label = "kernel";
|
||||
reg = <0xc0000 0x400000>;
|
||||
};
|
||||
|
||||
rootfs@4a0000 {
|
||||
label = "rootfs";
|
||||
reg = <0x4c0000 0x7800000>;
|
||||
};
|
||||
|
||||
data@7ca0000 {
|
||||
label = "data";
|
||||
reg = <0x7cc0000 0x8340000>;
|
||||
};
|
||||
};
|
||||
|
||||
usb0: ohci@00a00000 {
|
||||
num-ports = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
user_led {
|
||||
label = "user_led";
|
||||
gpios = <&pioB 21 0>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
user_pb {
|
||||
label = "user_pb";
|
||||
gpios = <&pioB 10 1>;
|
||||
linux,code = <28>;
|
||||
gpio-key,wakeup;
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
@ -7,6 +7,7 @@
|
||||
*/
|
||||
/dts-v1/;
|
||||
/include/ "at91sam9g20.dtsi"
|
||||
/include/ "usb_a9260_common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Calao USB A9G20";
|
||||
@ -20,108 +21,7 @@
|
||||
reg = <0x20000000 0x4000000>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
main_clock: clock@0 {
|
||||
compatible = "atmel,osc", "fixed-clock";
|
||||
clock-frequency = <12000000>;
|
||||
};
|
||||
};
|
||||
|
||||
ahb {
|
||||
apb {
|
||||
dbgu: serial@fffff200 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
macb0: ethernet@fffc4000 {
|
||||
phy-mode = "rmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb1: gadget@fffa4000 {
|
||||
atmel,vbus-gpio = <&pioC 5 0>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
nand0: nand@40000000 {
|
||||
nand-bus-width = <8>;
|
||||
nand-ecc-mode = "soft";
|
||||
nand-on-flash-bbt;
|
||||
status = "okay";
|
||||
|
||||
at91bootstrap@0 {
|
||||
label = "at91bootstrap";
|
||||
reg = <0x0 0x20000>;
|
||||
};
|
||||
|
||||
barebox@20000 {
|
||||
label = "barebox";
|
||||
reg = <0x20000 0x40000>;
|
||||
};
|
||||
|
||||
bareboxenv@60000 {
|
||||
label = "bareboxenv";
|
||||
reg = <0x60000 0x20000>;
|
||||
};
|
||||
|
||||
bareboxenv2@80000 {
|
||||
label = "bareboxenv2";
|
||||
reg = <0x80000 0x20000>;
|
||||
};
|
||||
|
||||
kernel@a0000 {
|
||||
label = "kernel";
|
||||
reg = <0xa0000 0x400000>;
|
||||
};
|
||||
|
||||
rootfs@4a0000 {
|
||||
label = "rootfs";
|
||||
reg = <0x4a0000 0x7800000>;
|
||||
};
|
||||
|
||||
data@7ca0000 {
|
||||
label = "data";
|
||||
reg = <0x7ca0000 0x8360000>;
|
||||
};
|
||||
};
|
||||
|
||||
usb0: ohci@00500000 {
|
||||
num-ports = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
user_led {
|
||||
label = "user_led";
|
||||
gpios = <&pioB 21 1>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
user_pb {
|
||||
label = "user_pb";
|
||||
gpios = <&pioB 10 1>;
|
||||
linux,code = <28>;
|
||||
gpio-key,wakeup;
|
||||
};
|
||||
};
|
||||
|
||||
i2c@0 {
|
||||
status = "okay";
|
||||
|
||||
rv3029c2@56 {
|
||||
compatible = "rv3029c2";
|
||||
reg = <0x56>;
|
||||
|
@ -2,7 +2,7 @@ CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
@ -10,6 +10,7 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_JUMP_LABEL=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
@ -21,6 +22,8 @@ CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_ARM_APPENDED_DTB=y
|
||||
CONFIG_ARM_ATAG_DTB_COMPAT=y
|
||||
CONFIG_CMDLINE="console=ttyS0,115200n81 root=/dev/ram0"
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_FPE_NWFPE=y
|
||||
@ -40,7 +43,8 @@ CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_IPV6_PRIVACY=y
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
# CONFIG_FW_LOADER is not set
|
||||
@ -55,13 +59,24 @@ CONFIG_BLK_DEV_CRYPTOLOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=1
|
||||
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||
CONFIG_MISC_DEVICES=y
|
||||
CONFIG_EEPROM_AT25=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_PHYLIB=y
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_CHELSIO is not set
|
||||
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||
# CONFIG_NET_VENDOR_FARADAY is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
CONFIG_LPC_ENET=y
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_SMSC is not set
|
||||
# CONFIG_NET_VENDOR_STMICRO is not set
|
||||
CONFIG_SMSC_PHY=y
|
||||
# CONFIG_WLAN is not set
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
@ -97,16 +112,22 @@ CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_DYNAMIC_MINORS=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||
CONFIG_SND_DEBUG=y
|
||||
CONFIG_SND_DEBUG_VERBOSE=y
|
||||
# CONFIG_SND_DRIVERS is not set
|
||||
# CONFIG_SND_ARM is not set
|
||||
# CONFIG_SND_SPI is not set
|
||||
CONFIG_SND_SOC=y
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_LIBUSUAL=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_LPC32XX=y
|
||||
CONFIG_USB_MASS_STORAGE=m
|
||||
CONFIG_USB_G_SERIAL=m
|
||||
CONFIG_MMC=y
|
||||
# CONFIG_MMC_BLOCK_BOUNCE is not set
|
||||
CONFIG_MMC_ARMMMCI=y
|
||||
@ -114,10 +135,21 @@ CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||
CONFIG_LEDS_TRIGGER_BACKLIGHT=y
|
||||
CONFIG_LEDS_TRIGGER_GPIO=y
|
||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
|
||||
CONFIG_RTC_DRV_DS1374=y
|
||||
CONFIG_RTC_DRV_PCF8563=y
|
||||
CONFIG_RTC_DRV_LPC32XX=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_AMBA_PL08X=y
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_IIO=y
|
||||
CONFIG_LPC32XX_ADC=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
|
@ -2,33 +2,67 @@ CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_KALLSYMS_EXTRA_PASS=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_PLAT_SPEAR=y
|
||||
CONFIG_BOARD_SPEAR300_EVB=y
|
||||
CONFIG_BOARD_SPEAR310_EVB=y
|
||||
CONFIG_BOARD_SPEAR320_EVB=y
|
||||
CONFIG_MACH_SPEAR300=y
|
||||
CONFIG_MACH_SPEAR310=y
|
||||
CONFIG_MACH_SPEAR320=y
|
||||
CONFIG_BINFMT_MISC=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_FSMC=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||
# CONFIG_NET_VENDOR_FARADAY is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_SMSC is not set
|
||||
CONFIG_STMMAC_ETH=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_FF_MEMLESS=y
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_SPEAR=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=8192
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_PL022=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_GPIO_PL061=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_ARM_SP805_WATCHDOG=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_ARMCLCD=y
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEVICE_CLASS is not set
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_SPEAR=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_AMBA_PL08X=y
|
||||
CONFIG_DMATEST=m
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
@ -39,8 +73,6 @@ CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="utf8"
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ASCII=m
|
||||
@ -48,6 +80,4 @@ CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_SPINLOCK_SLEEP=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_CRC32 is not set
|
||||
|
@ -2,29 +2,58 @@ CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_KALLSYMS_EXTRA_PASS=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_PLAT_SPEAR=y
|
||||
CONFIG_ARCH_SPEAR6XX=y
|
||||
CONFIG_BOARD_SPEAR600_EVB=y
|
||||
CONFIG_BOARD_SPEAR600_DT=y
|
||||
CONFIG_BINFMT_MISC=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_FSMC=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||
# CONFIG_NET_VENDOR_FARADAY is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MICREL is not set
|
||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
||||
# CONFIG_NET_VENDOR_SMSC is not set
|
||||
CONFIG_STMMAC_ETH=y
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_FF_MEMLESS=y
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=8192
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_PL022=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_GPIO_PL061=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_ARM_SP805_WATCHDOG=y
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_AMBA_PL08X=y
|
||||
CONFIG_DMATEST=m
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
@ -35,8 +64,6 @@ CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="utf8"
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ASCII=m
|
||||
@ -44,6 +71,4 @@ CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_SPINLOCK_SLEEP=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_CRC32 is not set
|
||||
|
@ -14,7 +14,19 @@ initrd_phys-y := 0x20410000
|
||||
endif
|
||||
|
||||
# Keep dtb files sorted alphabetically for each SoC
|
||||
# sam9260
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += ethernut5.dtb
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += tny_a9260.dtb
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += usb_a9260.dtb
|
||||
# sam9263
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9263ek.dtb
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += tny_a9263.dtb
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += usb_a9263.dtb
|
||||
# sam9g20
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9g20ek.dtb
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9g20ek_2mmc.dtb
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += kizbox.dtb
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += tny_a9g20.dtb
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += usb_a9g20.dtb
|
||||
# sam9g45
|
||||
dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9m10g45ek.dtb
|
||||
|
@ -702,25 +702,8 @@ static struct platform_device at91sam9260_tcb1_device = {
|
||||
.num_resources = ARRAY_SIZE(tcb1_resources),
|
||||
};
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
static struct of_device_id tcb_ids[] = {
|
||||
{ .compatible = "atmel,at91rm9200-tcb" },
|
||||
{ /*sentinel*/ }
|
||||
};
|
||||
#endif
|
||||
|
||||
static void __init at91_add_device_tc(void)
|
||||
{
|
||||
#if defined(CONFIG_OF)
|
||||
struct device_node *np;
|
||||
|
||||
np = of_find_matching_node(NULL, tcb_ids);
|
||||
if (np) {
|
||||
of_node_put(np);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
platform_device_register(&at91sam9260_tcb0_device);
|
||||
platform_device_register(&at91sam9260_tcb1_device);
|
||||
}
|
||||
@ -1364,6 +1347,9 @@ void __init at91_add_device_cf(struct at91_cf_data * data) {}
|
||||
*/
|
||||
static int __init at91_add_standard_devices(void)
|
||||
{
|
||||
if (of_have_populated_dt())
|
||||
return 0;
|
||||
|
||||
at91_add_device_rtt();
|
||||
at91_add_device_watchdog();
|
||||
at91_add_device_tc();
|
||||
|
@ -199,6 +199,16 @@ static struct clk_lookup periph_clocks_lookups[] = {
|
||||
CLKDEV_CON_ID("pioC", &pioCDE_clk),
|
||||
CLKDEV_CON_ID("pioD", &pioCDE_clk),
|
||||
CLKDEV_CON_ID("pioE", &pioCDE_clk),
|
||||
/* more usart lookup table for DT entries */
|
||||
CLKDEV_CON_DEV_ID("usart", "ffffee00.serial", &mck),
|
||||
CLKDEV_CON_DEV_ID("usart", "fff8c000.serial", &usart0_clk),
|
||||
CLKDEV_CON_DEV_ID("usart", "fff90000.serial", &usart1_clk),
|
||||
CLKDEV_CON_DEV_ID("usart", "fff94000.serial", &usart2_clk),
|
||||
/* more tc lookup table for DT entries */
|
||||
CLKDEV_CON_DEV_ID("t0_clk", "fff7c000.timer", &tcb_clk),
|
||||
CLKDEV_CON_DEV_ID("hclk", "a00000.ohci", &ohci_clk),
|
||||
CLKDEV_CON_DEV_ID("spi_clk", "fffa4000.spi", &spi0_clk),
|
||||
CLKDEV_CON_DEV_ID("spi_clk", "fffa8000.spi", &spi1_clk),
|
||||
};
|
||||
|
||||
static struct clk_lookup usart_clocks_lookups[] = {
|
||||
|
@ -953,8 +953,25 @@ static struct platform_device at91sam9263_tcb_device = {
|
||||
.num_resources = ARRAY_SIZE(tcb_resources),
|
||||
};
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
static struct of_device_id tcb_ids[] = {
|
||||
{ .compatible = "atmel,at91rm9200-tcb" },
|
||||
{ /*sentinel*/ }
|
||||
};
|
||||
#endif
|
||||
|
||||
static void __init at91_add_device_tc(void)
|
||||
{
|
||||
#if defined(CONFIG_OF)
|
||||
struct device_node *np;
|
||||
|
||||
np = of_find_matching_node(NULL, tcb_ids);
|
||||
if (np) {
|
||||
of_node_put(np);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
platform_device_register(&at91sam9263_tcb_device);
|
||||
}
|
||||
#else
|
||||
@ -1483,6 +1500,9 @@ void __init at91_add_device_serial(void) {}
|
||||
*/
|
||||
static int __init at91_add_standard_devices(void)
|
||||
{
|
||||
if (of_have_populated_dt())
|
||||
return 0;
|
||||
|
||||
at91_add_device_rtt();
|
||||
at91_add_device_watchdog();
|
||||
at91_add_device_tc();
|
||||
|
@ -69,15 +69,7 @@ static struct platform_device at_hdmac_device = {
|
||||
|
||||
void __init at91_add_device_hdmac(void)
|
||||
{
|
||||
#if defined(CONFIG_OF)
|
||||
struct device_node *of_node =
|
||||
of_find_node_by_name(NULL, "dma-controller");
|
||||
|
||||
if (of_node)
|
||||
of_node_put(of_node);
|
||||
else
|
||||
#endif
|
||||
platform_device_register(&at_hdmac_device);
|
||||
platform_device_register(&at_hdmac_device);
|
||||
}
|
||||
#else
|
||||
void __init at91_add_device_hdmac(void) {}
|
||||
@ -1094,25 +1086,8 @@ static struct platform_device at91sam9g45_tcb1_device = {
|
||||
.num_resources = ARRAY_SIZE(tcb1_resources),
|
||||
};
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
static struct of_device_id tcb_ids[] = {
|
||||
{ .compatible = "atmel,at91rm9200-tcb" },
|
||||
{ /*sentinel*/ }
|
||||
};
|
||||
#endif
|
||||
|
||||
static void __init at91_add_device_tc(void)
|
||||
{
|
||||
#if defined(CONFIG_OF)
|
||||
struct device_node *np;
|
||||
|
||||
np = of_find_matching_node(NULL, tcb_ids);
|
||||
if (np) {
|
||||
of_node_put(np);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
platform_device_register(&at91sam9g45_tcb0_device);
|
||||
platform_device_register(&at91sam9g45_tcb1_device);
|
||||
}
|
||||
@ -1763,6 +1738,9 @@ void __init at91_add_device_serial(void) {}
|
||||
*/
|
||||
static int __init at91_add_standard_devices(void)
|
||||
{
|
||||
if (of_have_populated_dt())
|
||||
return 0;
|
||||
|
||||
at91_add_device_hdmac();
|
||||
at91_add_device_rtc();
|
||||
at91_add_device_rtt();
|
||||
|
@ -171,6 +171,10 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
|
||||
.name = "bareboxenv2",
|
||||
.offset = MTDPART_OFS_NXTBLK,
|
||||
.size = SZ_128K,
|
||||
}, {
|
||||
.name = "oftree",
|
||||
.offset = MTDPART_OFS_NXTBLK,
|
||||
.size = SZ_128K,
|
||||
}, {
|
||||
.name = "kernel",
|
||||
.offset = MTDPART_OFS_NXTBLK,
|
||||
|
@ -29,30 +29,4 @@ config ARCH_LPC32XX_UART6_SELECT
|
||||
|
||||
endmenu
|
||||
|
||||
menu "LPC32XX chip components"
|
||||
|
||||
config ARCH_LPC32XX_IRAM_FOR_NET
|
||||
bool "Use IRAM for network buffers"
|
||||
default y
|
||||
help
|
||||
Say Y here to use the LPC internal fast IRAM (i.e. 256KB SRAM) as
|
||||
network buffer. If the total combined required buffer sizes is
|
||||
larger than the size of IRAM, then SDRAM will be used instead.
|
||||
|
||||
This can be enabled safely if the IRAM is not intended for other
|
||||
uses.
|
||||
|
||||
config ARCH_LPC32XX_MII_SUPPORT
|
||||
bool "Check to enable MII support or leave disabled for RMII support"
|
||||
help
|
||||
Say Y here to enable MII support, or N for RMII support. Regardless of
|
||||
which support is selected, the ethernet interface driver needs to be
|
||||
selected in the device driver networking section.
|
||||
|
||||
The PHY3250 reference board uses RMII, so users of this board should
|
||||
say N.
|
||||
|
||||
endmenu
|
||||
|
||||
endif
|
||||
|
||||
|
@ -1095,49 +1095,42 @@ struct clk *clk_get_parent(struct clk *clk)
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_parent);
|
||||
|
||||
#define _REGISTER_CLOCK(d, n, c) \
|
||||
{ \
|
||||
.dev_id = (d), \
|
||||
.con_id = (n), \
|
||||
.clk = &(c), \
|
||||
},
|
||||
|
||||
static struct clk_lookup lookups[] = {
|
||||
_REGISTER_CLOCK(NULL, "osc_32KHz", osc_32KHz)
|
||||
_REGISTER_CLOCK(NULL, "osc_pll397", osc_pll397)
|
||||
_REGISTER_CLOCK(NULL, "osc_main", osc_main)
|
||||
_REGISTER_CLOCK(NULL, "sys_ck", clk_sys)
|
||||
_REGISTER_CLOCK(NULL, "arm_pll_ck", clk_armpll)
|
||||
_REGISTER_CLOCK(NULL, "ck_pll5", clk_usbpll)
|
||||
_REGISTER_CLOCK(NULL, "hclk_ck", clk_hclk)
|
||||
_REGISTER_CLOCK(NULL, "pclk_ck", clk_pclk)
|
||||
_REGISTER_CLOCK(NULL, "timer0_ck", clk_timer0)
|
||||
_REGISTER_CLOCK(NULL, "timer1_ck", clk_timer1)
|
||||
_REGISTER_CLOCK(NULL, "timer2_ck", clk_timer2)
|
||||
_REGISTER_CLOCK(NULL, "timer3_ck", clk_timer3)
|
||||
_REGISTER_CLOCK(NULL, "vfp9_ck", clk_vfp9)
|
||||
_REGISTER_CLOCK(NULL, "clk_dmac", clk_dma)
|
||||
_REGISTER_CLOCK("pnx4008-watchdog", NULL, clk_wdt)
|
||||
_REGISTER_CLOCK(NULL, "uart3_ck", clk_uart3)
|
||||
_REGISTER_CLOCK(NULL, "uart4_ck", clk_uart4)
|
||||
_REGISTER_CLOCK(NULL, "uart5_ck", clk_uart5)
|
||||
_REGISTER_CLOCK(NULL, "uart6_ck", clk_uart6)
|
||||
_REGISTER_CLOCK("pnx-i2c.0", NULL, clk_i2c0)
|
||||
_REGISTER_CLOCK("pnx-i2c.1", NULL, clk_i2c1)
|
||||
_REGISTER_CLOCK("pnx-i2c.2", NULL, clk_i2c2)
|
||||
_REGISTER_CLOCK("dev:ssp0", NULL, clk_ssp0)
|
||||
_REGISTER_CLOCK("dev:ssp1", NULL, clk_ssp1)
|
||||
_REGISTER_CLOCK("lpc32xx_keys.0", NULL, clk_kscan)
|
||||
_REGISTER_CLOCK("lpc32xx-nand.0", "nand_ck", clk_nand)
|
||||
_REGISTER_CLOCK("lpc32xx-adc", NULL, clk_adc)
|
||||
_REGISTER_CLOCK(NULL, "i2s0_ck", clk_i2s0)
|
||||
_REGISTER_CLOCK(NULL, "i2s1_ck", clk_i2s1)
|
||||
_REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc)
|
||||
_REGISTER_CLOCK("dev:mmc0", NULL, clk_mmc)
|
||||
_REGISTER_CLOCK("lpc-eth.0", NULL, clk_net)
|
||||
_REGISTER_CLOCK("dev:clcd", NULL, clk_lcd)
|
||||
_REGISTER_CLOCK("lpc32xx_udc", "ck_usbd", clk_usbd)
|
||||
_REGISTER_CLOCK("lpc32xx_rtc", NULL, clk_rtc)
|
||||
CLKDEV_INIT(NULL, "osc_32KHz", &osc_32KHz),
|
||||
CLKDEV_INIT(NULL, "osc_pll397", &osc_pll397),
|
||||
CLKDEV_INIT(NULL, "osc_main", &osc_main),
|
||||
CLKDEV_INIT(NULL, "sys_ck", &clk_sys),
|
||||
CLKDEV_INIT(NULL, "arm_pll_ck", &clk_armpll),
|
||||
CLKDEV_INIT(NULL, "ck_pll5", &clk_usbpll),
|
||||
CLKDEV_INIT(NULL, "hclk_ck", &clk_hclk),
|
||||
CLKDEV_INIT(NULL, "pclk_ck", &clk_pclk),
|
||||
CLKDEV_INIT(NULL, "timer0_ck", &clk_timer0),
|
||||
CLKDEV_INIT(NULL, "timer1_ck", &clk_timer1),
|
||||
CLKDEV_INIT(NULL, "timer2_ck", &clk_timer2),
|
||||
CLKDEV_INIT(NULL, "timer3_ck", &clk_timer3),
|
||||
CLKDEV_INIT(NULL, "vfp9_ck", &clk_vfp9),
|
||||
CLKDEV_INIT("pl08xdmac", NULL, &clk_dma),
|
||||
CLKDEV_INIT("4003c000.watchdog", NULL, &clk_wdt),
|
||||
CLKDEV_INIT(NULL, "uart3_ck", &clk_uart3),
|
||||
CLKDEV_INIT(NULL, "uart4_ck", &clk_uart4),
|
||||
CLKDEV_INIT(NULL, "uart5_ck", &clk_uart5),
|
||||
CLKDEV_INIT(NULL, "uart6_ck", &clk_uart6),
|
||||
CLKDEV_INIT("400a0000.i2c", NULL, &clk_i2c0),
|
||||
CLKDEV_INIT("400a8000.i2c", NULL, &clk_i2c1),
|
||||
CLKDEV_INIT("31020300.i2c", NULL, &clk_i2c2),
|
||||
CLKDEV_INIT("dev:ssp0", NULL, &clk_ssp0),
|
||||
CLKDEV_INIT("dev:ssp1", NULL, &clk_ssp1),
|
||||
CLKDEV_INIT("lpc32xx_keys.0", NULL, &clk_kscan),
|
||||
CLKDEV_INIT("lpc32xx-nand.0", "nand_ck", &clk_nand),
|
||||
CLKDEV_INIT("40048000.adc", NULL, &clk_adc),
|
||||
CLKDEV_INIT(NULL, "i2s0_ck", &clk_i2s0),
|
||||
CLKDEV_INIT(NULL, "i2s1_ck", &clk_i2s1),
|
||||
CLKDEV_INIT("40048000.tsc", NULL, &clk_tsc),
|
||||
CLKDEV_INIT("20098000.sd", NULL, &clk_mmc),
|
||||
CLKDEV_INIT("31060000.ethernet", NULL, &clk_net),
|
||||
CLKDEV_INIT("dev:clcd", NULL, &clk_lcd),
|
||||
CLKDEV_INIT("31020000.usbd", "ck_usbd", &clk_usbd),
|
||||
CLKDEV_INIT("lpc32xx_rtc", NULL, &clk_rtc),
|
||||
};
|
||||
|
||||
static int __init clk_init(void)
|
||||
|
@ -27,185 +27,10 @@
|
||||
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/platform.h>
|
||||
#include "common.h"
|
||||
|
||||
/*
|
||||
* Watchdog timer
|
||||
*/
|
||||
static struct resource watchdog_resources[] = {
|
||||
[0] = {
|
||||
.start = LPC32XX_WDTIM_BASE,
|
||||
.end = LPC32XX_WDTIM_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device lpc32xx_watchdog_device = {
|
||||
.name = "pnx4008-watchdog",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(watchdog_resources),
|
||||
.resource = watchdog_resources,
|
||||
};
|
||||
|
||||
/*
|
||||
* I2C busses
|
||||
*/
|
||||
static struct i2c_pnx_data i2c0_data = {
|
||||
.name = I2C_CHIP_NAME "1",
|
||||
.base = LPC32XX_I2C1_BASE,
|
||||
.irq = IRQ_LPC32XX_I2C_1,
|
||||
};
|
||||
|
||||
static struct i2c_pnx_data i2c1_data = {
|
||||
.name = I2C_CHIP_NAME "2",
|
||||
.base = LPC32XX_I2C2_BASE,
|
||||
.irq = IRQ_LPC32XX_I2C_2,
|
||||
};
|
||||
|
||||
static struct i2c_pnx_data i2c2_data = {
|
||||
.name = "USB-I2C",
|
||||
.base = LPC32XX_OTG_I2C_BASE,
|
||||
.irq = IRQ_LPC32XX_USB_I2C,
|
||||
};
|
||||
|
||||
struct platform_device lpc32xx_i2c0_device = {
|
||||
.name = "pnx-i2c",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &i2c0_data,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device lpc32xx_i2c1_device = {
|
||||
.name = "pnx-i2c",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.platform_data = &i2c1_data,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device lpc32xx_i2c2_device = {
|
||||
.name = "pnx-i2c",
|
||||
.id = 2,
|
||||
.dev = {
|
||||
.platform_data = &i2c2_data,
|
||||
},
|
||||
};
|
||||
|
||||
/* TSC (Touch Screen Controller) */
|
||||
|
||||
static struct resource lpc32xx_tsc_resources[] = {
|
||||
{
|
||||
.start = LPC32XX_ADC_BASE,
|
||||
.end = LPC32XX_ADC_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = IRQ_LPC32XX_TS_IRQ,
|
||||
.end = IRQ_LPC32XX_TS_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device lpc32xx_tsc_device = {
|
||||
.name = "ts-lpc32xx",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(lpc32xx_tsc_resources),
|
||||
.resource = lpc32xx_tsc_resources,
|
||||
};
|
||||
|
||||
/* RTC */
|
||||
|
||||
static struct resource lpc32xx_rtc_resources[] = {
|
||||
{
|
||||
.start = LPC32XX_RTC_BASE,
|
||||
.end = LPC32XX_RTC_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},{
|
||||
.start = IRQ_LPC32XX_RTC,
|
||||
.end = IRQ_LPC32XX_RTC,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device lpc32xx_rtc_device = {
|
||||
.name = "rtc-lpc32xx",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(lpc32xx_rtc_resources),
|
||||
.resource = lpc32xx_rtc_resources,
|
||||
};
|
||||
|
||||
/*
|
||||
* ADC support
|
||||
*/
|
||||
static struct resource adc_resources[] = {
|
||||
{
|
||||
.start = LPC32XX_ADC_BASE,
|
||||
.end = LPC32XX_ADC_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = IRQ_LPC32XX_TS_IRQ,
|
||||
.end = IRQ_LPC32XX_TS_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device lpc32xx_adc_device = {
|
||||
.name = "lpc32xx-adc",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(adc_resources),
|
||||
.resource = adc_resources,
|
||||
};
|
||||
|
||||
/*
|
||||
* USB support
|
||||
*/
|
||||
/* The dmamask must be set for OHCI to work */
|
||||
static u64 ohci_dmamask = ~(u32) 0;
|
||||
static struct resource ohci_resources[] = {
|
||||
{
|
||||
.start = IO_ADDRESS(LPC32XX_USB_BASE),
|
||||
.end = IO_ADDRESS(LPC32XX_USB_BASE + 0x100 - 1),
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = IRQ_LPC32XX_USB_HOST,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
struct platform_device lpc32xx_ohci_device = {
|
||||
.name = "usb-ohci",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.dma_mask = &ohci_dmamask,
|
||||
.coherent_dma_mask = 0xFFFFFFFF,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(ohci_resources),
|
||||
.resource = ohci_resources,
|
||||
};
|
||||
|
||||
/*
|
||||
* Network Support
|
||||
*/
|
||||
static struct resource net_resources[] = {
|
||||
[0] = DEFINE_RES_MEM(LPC32XX_ETHERNET_BASE, SZ_4K),
|
||||
[1] = DEFINE_RES_MEM(LPC32XX_IRAM_BASE, SZ_128K),
|
||||
[2] = DEFINE_RES_IRQ(IRQ_LPC32XX_ETHERNET),
|
||||
};
|
||||
|
||||
static u64 lpc32xx_mac_dma_mask = 0xffffffffUL;
|
||||
struct platform_device lpc32xx_net_device = {
|
||||
.name = "lpc-eth",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.dma_mask = &lpc32xx_mac_dma_mask,
|
||||
.coherent_dma_mask = 0xffffffffUL,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(net_resources),
|
||||
.resource = net_resources,
|
||||
};
|
||||
|
||||
/*
|
||||
* Returns the unique ID for the device
|
||||
*/
|
||||
@ -398,3 +223,16 @@ void lpc23xx_restart(char mode, const char *cmd)
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
|
||||
static int __init lpc32xx_display_uid(void)
|
||||
{
|
||||
u32 uid[4];
|
||||
|
||||
lpc32xx_get_uid(uid);
|
||||
|
||||
printk(KERN_INFO "LPC32XX unique ID: %08x%08x%08x%08x\n",
|
||||
uid[3], uid[2], uid[1], uid[0]);
|
||||
|
||||
return 1;
|
||||
}
|
||||
arch_initcall(lpc32xx_display_uid);
|
||||
|
@ -22,19 +22,6 @@
|
||||
#include <mach/board.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
/*
|
||||
* Arch specific platform device structures
|
||||
*/
|
||||
extern struct platform_device lpc32xx_watchdog_device;
|
||||
extern struct platform_device lpc32xx_i2c0_device;
|
||||
extern struct platform_device lpc32xx_i2c1_device;
|
||||
extern struct platform_device lpc32xx_i2c2_device;
|
||||
extern struct platform_device lpc32xx_tsc_device;
|
||||
extern struct platform_device lpc32xx_adc_device;
|
||||
extern struct platform_device lpc32xx_rtc_device;
|
||||
extern struct platform_device lpc32xx_ohci_device;
|
||||
extern struct platform_device lpc32xx_net_device;
|
||||
|
||||
/*
|
||||
* Other arch specific structures and functions
|
||||
*/
|
||||
@ -42,7 +29,6 @@ extern struct sys_timer lpc32xx_timer;
|
||||
extern void __init lpc32xx_init_irq(void);
|
||||
extern void __init lpc32xx_map_io(void);
|
||||
extern void __init lpc32xx_serial_init(void);
|
||||
extern void __init lpc32xx_gpio_init(void);
|
||||
extern void lpc23xx_restart(char, const char *);
|
||||
|
||||
|
||||
|
@ -1,63 +0,0 @@
|
||||
/*
|
||||
* PNX4008-specific tweaks for I2C IP3204 block
|
||||
*
|
||||
* Author: Vitaly Wool <vwool@ru.mvista.com>
|
||||
*
|
||||
* 2005 (c) MontaVista Software, Inc. 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.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_I2C_H
|
||||
#define __ASM_ARCH_I2C_H
|
||||
|
||||
enum {
|
||||
mstatus_tdi = 0x00000001,
|
||||
mstatus_afi = 0x00000002,
|
||||
mstatus_nai = 0x00000004,
|
||||
mstatus_drmi = 0x00000008,
|
||||
mstatus_active = 0x00000020,
|
||||
mstatus_scl = 0x00000040,
|
||||
mstatus_sda = 0x00000080,
|
||||
mstatus_rff = 0x00000100,
|
||||
mstatus_rfe = 0x00000200,
|
||||
mstatus_tff = 0x00000400,
|
||||
mstatus_tfe = 0x00000800,
|
||||
};
|
||||
|
||||
enum {
|
||||
mcntrl_tdie = 0x00000001,
|
||||
mcntrl_afie = 0x00000002,
|
||||
mcntrl_naie = 0x00000004,
|
||||
mcntrl_drmie = 0x00000008,
|
||||
mcntrl_daie = 0x00000020,
|
||||
mcntrl_rffie = 0x00000040,
|
||||
mcntrl_tffie = 0x00000080,
|
||||
mcntrl_reset = 0x00000100,
|
||||
mcntrl_cdbmode = 0x00000400,
|
||||
};
|
||||
|
||||
enum {
|
||||
rw_bit = 1 << 0,
|
||||
start_bit = 1 << 8,
|
||||
stop_bit = 1 << 9,
|
||||
};
|
||||
|
||||
#define I2C_REG_RX(a) ((a)->ioaddr) /* Rx FIFO reg (RO) */
|
||||
#define I2C_REG_TX(a) ((a)->ioaddr) /* Tx FIFO reg (WO) */
|
||||
#define I2C_REG_STS(a) ((a)->ioaddr + 0x04) /* Status reg (RO) */
|
||||
#define I2C_REG_CTL(a) ((a)->ioaddr + 0x08) /* Ctl reg */
|
||||
#define I2C_REG_CKL(a) ((a)->ioaddr + 0x0c) /* Clock divider low */
|
||||
#define I2C_REG_CKH(a) ((a)->ioaddr + 0x10) /* Clock divider high */
|
||||
#define I2C_REG_ADR(a) ((a)->ioaddr + 0x14) /* I2C address */
|
||||
#define I2C_REG_RFL(a) ((a)->ioaddr + 0x18) /* Rx FIFO level (RO) */
|
||||
#define I2C_REG_TFL(a) ((a)->ioaddr + 0x1c) /* Tx FIFO level (RO) */
|
||||
#define I2C_REG_RXB(a) ((a)->ioaddr + 0x20) /* Num of bytes Rx-ed (RO) */
|
||||
#define I2C_REG_TXB(a) ((a)->ioaddr + 0x24) /* Num of bytes Tx-ed (RO) */
|
||||
#define I2C_REG_TXS(a) ((a)->ioaddr + 0x28) /* Tx slave FIFO (RO) */
|
||||
#define I2C_REG_STFL(a) ((a)->ioaddr + 0x2c) /* Tx slave FIFO level (RO) */
|
||||
|
||||
#define I2C_CHIP_NAME "PNX4008-I2C"
|
||||
|
||||
#endif /* __ASM_ARCH_I2C_H */
|
@ -22,6 +22,11 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/hardware.h>
|
||||
@ -44,6 +49,9 @@
|
||||
#define SIC1_ATR_DEFAULT 0x00026000
|
||||
#define SIC2_ATR_DEFAULT 0x00000000
|
||||
|
||||
static struct irq_domain *lpc32xx_mic_domain;
|
||||
static struct device_node *lpc32xx_mic_np;
|
||||
|
||||
struct lpc32xx_event_group_regs {
|
||||
void __iomem *enab_reg;
|
||||
void __iomem *edge_reg;
|
||||
@ -203,7 +211,7 @@ static void lpc32xx_mask_irq(struct irq_data *d)
|
||||
{
|
||||
unsigned int reg, ctrl, mask;
|
||||
|
||||
get_controller(d->irq, &ctrl, &mask);
|
||||
get_controller(d->hwirq, &ctrl, &mask);
|
||||
|
||||
reg = __raw_readl(LPC32XX_INTC_MASK(ctrl)) & ~mask;
|
||||
__raw_writel(reg, LPC32XX_INTC_MASK(ctrl));
|
||||
@ -213,7 +221,7 @@ static void lpc32xx_unmask_irq(struct irq_data *d)
|
||||
{
|
||||
unsigned int reg, ctrl, mask;
|
||||
|
||||
get_controller(d->irq, &ctrl, &mask);
|
||||
get_controller(d->hwirq, &ctrl, &mask);
|
||||
|
||||
reg = __raw_readl(LPC32XX_INTC_MASK(ctrl)) | mask;
|
||||
__raw_writel(reg, LPC32XX_INTC_MASK(ctrl));
|
||||
@ -223,14 +231,14 @@ static void lpc32xx_ack_irq(struct irq_data *d)
|
||||
{
|
||||
unsigned int ctrl, mask;
|
||||
|
||||
get_controller(d->irq, &ctrl, &mask);
|
||||
get_controller(d->hwirq, &ctrl, &mask);
|
||||
|
||||
__raw_writel(mask, LPC32XX_INTC_RAW_STAT(ctrl));
|
||||
|
||||
/* Also need to clear pending wake event */
|
||||
if (lpc32xx_events[d->irq].mask != 0)
|
||||
__raw_writel(lpc32xx_events[d->irq].mask,
|
||||
lpc32xx_events[d->irq].event_group->rawstat_reg);
|
||||
if (lpc32xx_events[d->hwirq].mask != 0)
|
||||
__raw_writel(lpc32xx_events[d->hwirq].mask,
|
||||
lpc32xx_events[d->hwirq].event_group->rawstat_reg);
|
||||
}
|
||||
|
||||
static void __lpc32xx_set_irq_type(unsigned int irq, int use_high_level,
|
||||
@ -274,22 +282,22 @@ static int lpc32xx_set_irq_type(struct irq_data *d, unsigned int type)
|
||||
switch (type) {
|
||||
case IRQ_TYPE_EDGE_RISING:
|
||||
/* Rising edge sensitive */
|
||||
__lpc32xx_set_irq_type(d->irq, 1, 1);
|
||||
__lpc32xx_set_irq_type(d->hwirq, 1, 1);
|
||||
break;
|
||||
|
||||
case IRQ_TYPE_EDGE_FALLING:
|
||||
/* Falling edge sensitive */
|
||||
__lpc32xx_set_irq_type(d->irq, 0, 1);
|
||||
__lpc32xx_set_irq_type(d->hwirq, 0, 1);
|
||||
break;
|
||||
|
||||
case IRQ_TYPE_LEVEL_LOW:
|
||||
/* Low level sensitive */
|
||||
__lpc32xx_set_irq_type(d->irq, 0, 0);
|
||||
__lpc32xx_set_irq_type(d->hwirq, 0, 0);
|
||||
break;
|
||||
|
||||
case IRQ_TYPE_LEVEL_HIGH:
|
||||
/* High level sensitive */
|
||||
__lpc32xx_set_irq_type(d->irq, 1, 0);
|
||||
__lpc32xx_set_irq_type(d->hwirq, 1, 0);
|
||||
break;
|
||||
|
||||
/* Other modes are not supported */
|
||||
@ -298,7 +306,7 @@ static int lpc32xx_set_irq_type(struct irq_data *d, unsigned int type)
|
||||
}
|
||||
|
||||
/* Ok to use the level handler for all types */
|
||||
irq_set_handler(d->irq, handle_level_irq);
|
||||
irq_set_handler(d->hwirq, handle_level_irq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -307,33 +315,33 @@ static int lpc32xx_irq_wake(struct irq_data *d, unsigned int state)
|
||||
{
|
||||
unsigned long eventreg;
|
||||
|
||||
if (lpc32xx_events[d->irq].mask != 0) {
|
||||
eventreg = __raw_readl(lpc32xx_events[d->irq].
|
||||
if (lpc32xx_events[d->hwirq].mask != 0) {
|
||||
eventreg = __raw_readl(lpc32xx_events[d->hwirq].
|
||||
event_group->enab_reg);
|
||||
|
||||
if (state)
|
||||
eventreg |= lpc32xx_events[d->irq].mask;
|
||||
eventreg |= lpc32xx_events[d->hwirq].mask;
|
||||
else {
|
||||
eventreg &= ~lpc32xx_events[d->irq].mask;
|
||||
eventreg &= ~lpc32xx_events[d->hwirq].mask;
|
||||
|
||||
/*
|
||||
* When disabling the wakeup, clear the latched
|
||||
* event
|
||||
*/
|
||||
__raw_writel(lpc32xx_events[d->irq].mask,
|
||||
lpc32xx_events[d->irq].
|
||||
__raw_writel(lpc32xx_events[d->hwirq].mask,
|
||||
lpc32xx_events[d->hwirq].
|
||||
event_group->rawstat_reg);
|
||||
}
|
||||
|
||||
__raw_writel(eventreg,
|
||||
lpc32xx_events[d->irq].event_group->enab_reg);
|
||||
lpc32xx_events[d->hwirq].event_group->enab_reg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Clear event */
|
||||
__raw_writel(lpc32xx_events[d->irq].mask,
|
||||
lpc32xx_events[d->irq].event_group->rawstat_reg);
|
||||
__raw_writel(lpc32xx_events[d->hwirq].mask,
|
||||
lpc32xx_events[d->hwirq].event_group->rawstat_reg);
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
@ -353,6 +361,7 @@ static void __init lpc32xx_set_default_mappings(unsigned int apr,
|
||||
}
|
||||
|
||||
static struct irq_chip lpc32xx_irq_chip = {
|
||||
.name = "MIC",
|
||||
.irq_ack = lpc32xx_ack_irq,
|
||||
.irq_mask = lpc32xx_mask_irq,
|
||||
.irq_unmask = lpc32xx_unmask_irq,
|
||||
@ -386,9 +395,23 @@ static void lpc32xx_sic2_handler(unsigned int irq, struct irq_desc *desc)
|
||||
}
|
||||
}
|
||||
|
||||
static int __init __lpc32xx_mic_of_init(struct device_node *node,
|
||||
struct device_node *parent)
|
||||
{
|
||||
lpc32xx_mic_np = node;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id mic_of_match[] __initconst = {
|
||||
{ .compatible = "nxp,lpc3220-mic", .data = __lpc32xx_mic_of_init },
|
||||
{ }
|
||||
};
|
||||
|
||||
void __init lpc32xx_init_irq(void)
|
||||
{
|
||||
unsigned int i;
|
||||
int irq_base;
|
||||
|
||||
/* Setup MIC */
|
||||
__raw_writel(0, LPC32XX_INTC_MASK(LPC32XX_MIC_BASE));
|
||||
@ -448,4 +471,19 @@ void __init lpc32xx_init_irq(void)
|
||||
LPC32XX_CLKPWR_PIN_RS);
|
||||
__raw_writel(__raw_readl(LPC32XX_CLKPWR_INT_RS),
|
||||
LPC32XX_CLKPWR_INT_RS);
|
||||
|
||||
of_irq_init(mic_of_match);
|
||||
|
||||
irq_base = irq_alloc_descs(-1, 0, NR_IRQS, 0);
|
||||
if (irq_base < 0) {
|
||||
pr_warn("Cannot allocate irq_descs, assuming pre-allocated\n");
|
||||
irq_base = 0;
|
||||
}
|
||||
|
||||
lpc32xx_mic_domain = irq_domain_add_legacy(lpc32xx_mic_np, NR_IRQS,
|
||||
irq_base, 0,
|
||||
&irq_domain_simple_ops,
|
||||
NULL);
|
||||
if (!lpc32xx_mic_domain)
|
||||
panic("Unable to add MIC irq domain\n");
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
/*
|
||||
* arch/arm/mach-lpc32xx/phy3250.c
|
||||
* Platform support for LPC32xx SoC
|
||||
*
|
||||
* Author: Kevin Wells <kevin.wells@nxp.com>
|
||||
*
|
||||
* Copyright (C) 2012 Roland Stigge <stigge@antcom.de>
|
||||
* Copyright (C) 2010 NXP Semiconductors
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -25,11 +26,16 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/eeprom.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/clcd.h>
|
||||
#include <linux/amba/pl022.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/amba/pl08x.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach-types.h>
|
||||
@ -47,7 +53,6 @@
|
||||
#define SPI0_CS_GPIO LPC32XX_GPIO(LPC32XX_GPIO_P3_GRP, 5)
|
||||
#define LCD_POWER_GPIO LPC32XX_GPIO(LPC32XX_GPO_P3_GRP, 0)
|
||||
#define BKL_POWER_GPIO LPC32XX_GPIO(LPC32XX_GPO_P3_GRP, 4)
|
||||
#define LED_GPIO LPC32XX_GPIO(LPC32XX_GPO_P3_GRP, 1)
|
||||
|
||||
/*
|
||||
* AMBA LCD controller
|
||||
@ -150,9 +155,6 @@ static struct clcd_board lpc32xx_clcd_data = {
|
||||
.remove = lpc32xx_clcd_remove,
|
||||
};
|
||||
|
||||
static AMBA_AHB_DEVICE(lpc32xx_clcd, "dev:clcd", 0,
|
||||
LPC32XX_LCD_BASE, { IRQ_LPC32XX_LCD }, &lpc32xx_clcd_data);
|
||||
|
||||
/*
|
||||
* AMBA SSP (SPI)
|
||||
*/
|
||||
@ -180,8 +182,11 @@ static struct pl022_ssp_controller lpc32xx_ssp0_data = {
|
||||
.enable_dma = 0,
|
||||
};
|
||||
|
||||
static AMBA_APB_DEVICE(lpc32xx_ssp0, "dev:ssp0", 0,
|
||||
LPC32XX_SSP0_BASE, { IRQ_LPC32XX_SSP0 }, &lpc32xx_ssp0_data);
|
||||
static struct pl022_ssp_controller lpc32xx_ssp1_data = {
|
||||
.bus_id = 1,
|
||||
.num_chipselect = 1,
|
||||
.enable_dma = 0,
|
||||
};
|
||||
|
||||
/* AT25 driver registration */
|
||||
static int __init phy3250_spi_board_register(void)
|
||||
@ -221,73 +226,20 @@ static int __init phy3250_spi_board_register(void)
|
||||
}
|
||||
arch_initcall(phy3250_spi_board_register);
|
||||
|
||||
static struct i2c_board_info __initdata phy3250_i2c_board_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("pcf8563", 0x51),
|
||||
},
|
||||
static struct pl08x_platform_data pl08x_pd = {
|
||||
};
|
||||
|
||||
static struct gpio_led phy_leds[] = {
|
||||
{
|
||||
.name = "led0",
|
||||
.gpio = LED_GPIO,
|
||||
.active_low = 1,
|
||||
.default_trigger = "heartbeat",
|
||||
},
|
||||
static const struct of_dev_auxdata lpc32xx_auxdata_lookup[] __initconst = {
|
||||
OF_DEV_AUXDATA("arm,pl022", 0x20084000, "dev:ssp0", &lpc32xx_ssp0_data),
|
||||
OF_DEV_AUXDATA("arm,pl022", 0x2008C000, "dev:ssp1", &lpc32xx_ssp1_data),
|
||||
OF_DEV_AUXDATA("arm,pl110", 0x31040000, "dev:clcd", &lpc32xx_clcd_data),
|
||||
OF_DEV_AUXDATA("arm,pl080", 0x31000000, "pl08xdmac", &pl08x_pd),
|
||||
{ }
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data led_data = {
|
||||
.leds = phy_leds,
|
||||
.num_leds = ARRAY_SIZE(phy_leds),
|
||||
};
|
||||
|
||||
static struct platform_device lpc32xx_gpio_led_device = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev.platform_data = &led_data,
|
||||
};
|
||||
|
||||
static struct platform_device *phy3250_devs[] __initdata = {
|
||||
&lpc32xx_rtc_device,
|
||||
&lpc32xx_tsc_device,
|
||||
&lpc32xx_i2c0_device,
|
||||
&lpc32xx_i2c1_device,
|
||||
&lpc32xx_i2c2_device,
|
||||
&lpc32xx_watchdog_device,
|
||||
&lpc32xx_gpio_led_device,
|
||||
&lpc32xx_adc_device,
|
||||
&lpc32xx_ohci_device,
|
||||
&lpc32xx_net_device,
|
||||
};
|
||||
|
||||
static struct amba_device *amba_devs[] __initdata = {
|
||||
&lpc32xx_clcd_device,
|
||||
&lpc32xx_ssp0_device,
|
||||
};
|
||||
|
||||
/*
|
||||
* Board specific functions
|
||||
*/
|
||||
static void __init phy3250_board_init(void)
|
||||
static void __init lpc3250_machine_init(void)
|
||||
{
|
||||
u32 tmp;
|
||||
int i;
|
||||
|
||||
lpc32xx_gpio_init();
|
||||
|
||||
/* Register GPIOs used on this board */
|
||||
if (gpio_request(SPI0_CS_GPIO, "spi0 cs"))
|
||||
printk(KERN_ERR "Error requesting gpio %u",
|
||||
SPI0_CS_GPIO);
|
||||
else if (gpio_direction_output(SPI0_CS_GPIO, 1))
|
||||
printk(KERN_ERR "Error setting gpio %u to output",
|
||||
SPI0_CS_GPIO);
|
||||
|
||||
/* Setup network interface for RMII mode */
|
||||
tmp = __raw_readl(LPC32XX_CLKPWR_MACCLK_CTRL);
|
||||
tmp &= ~LPC32XX_CLKPWR_MACCTRL_PINS_MSK;
|
||||
tmp |= LPC32XX_CLKPWR_MACCTRL_USE_RMII_PINS;
|
||||
__raw_writel(tmp, LPC32XX_CLKPWR_MACCLK_CTRL);
|
||||
|
||||
/* Setup SLC NAND controller muxing */
|
||||
__raw_writel(LPC32XX_CLKPWR_NANDCLK_SEL_SLC,
|
||||
@ -300,6 +252,12 @@ static void __init phy3250_board_init(void)
|
||||
tmp |= LPC32XX_CLKPWR_LCDCTRL_LCDTYPE_TFT16;
|
||||
__raw_writel(tmp, LPC32XX_CLKPWR_LCDCLK_CTRL);
|
||||
|
||||
/* Set up USB power */
|
||||
tmp = __raw_readl(LPC32XX_CLKPWR_USB_CTRL);
|
||||
tmp |= LPC32XX_CLKPWR_USBCTRL_HCLK_EN |
|
||||
LPC32XX_CLKPWR_USBCTRL_USBI2C_EN;
|
||||
__raw_writel(tmp, LPC32XX_CLKPWR_USB_CTRL);
|
||||
|
||||
/* Set up I2C pull levels */
|
||||
tmp = __raw_readl(LPC32XX_CLKPWR_I2C_CLK_CTRL);
|
||||
tmp |= LPC32XX_CLKPWR_I2CCLK_USBI2CHI_DRIVE |
|
||||
@ -321,54 +279,51 @@ static void __init phy3250_board_init(void)
|
||||
/*
|
||||
* AMBA peripheral clocks need to be enabled prior to AMBA device
|
||||
* detection or a data fault will occur, so enable the clocks
|
||||
* here. However, we don't want to enable them if the peripheral
|
||||
* isn't included in the image
|
||||
* here.
|
||||
*/
|
||||
#ifdef CONFIG_FB_ARMCLCD
|
||||
tmp = __raw_readl(LPC32XX_CLKPWR_LCDCLK_CTRL);
|
||||
__raw_writel((tmp | LPC32XX_CLKPWR_LCDCTRL_CLK_EN),
|
||||
LPC32XX_CLKPWR_LCDCLK_CTRL);
|
||||
#endif
|
||||
#ifdef CONFIG_SPI_PL022
|
||||
|
||||
tmp = __raw_readl(LPC32XX_CLKPWR_SSP_CLK_CTRL);
|
||||
__raw_writel((tmp | LPC32XX_CLKPWR_SSPCTRL_SSPCLK0_EN),
|
||||
LPC32XX_CLKPWR_SSP_CLK_CTRL);
|
||||
#endif
|
||||
|
||||
platform_add_devices(phy3250_devs, ARRAY_SIZE(phy3250_devs));
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
|
||||
struct amba_device *d = amba_devs[i];
|
||||
amba_device_register(d, &iomem_resource);
|
||||
}
|
||||
tmp = __raw_readl(LPC32XX_CLKPWR_DMA_CLK_CTRL);
|
||||
__raw_writel((tmp | LPC32XX_CLKPWR_DMACLKCTRL_CLK_EN),
|
||||
LPC32XX_CLKPWR_DMA_CLK_CTRL);
|
||||
|
||||
/* Test clock needed for UDA1380 initial init */
|
||||
__raw_writel(LPC32XX_CLKPWR_TESTCLK2_SEL_MOSC |
|
||||
LPC32XX_CLKPWR_TESTCLK_TESTCLK2_EN,
|
||||
LPC32XX_CLKPWR_TEST_CLK_SEL);
|
||||
|
||||
i2c_register_board_info(0, phy3250_i2c_board_info,
|
||||
ARRAY_SIZE(phy3250_i2c_board_info));
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
lpc32xx_auxdata_lookup, NULL);
|
||||
|
||||
/* Register GPIOs used on this board */
|
||||
if (gpio_request(SPI0_CS_GPIO, "spi0 cs"))
|
||||
printk(KERN_ERR "Error requesting gpio %u",
|
||||
SPI0_CS_GPIO);
|
||||
else if (gpio_direction_output(SPI0_CS_GPIO, 1))
|
||||
printk(KERN_ERR "Error setting gpio %u to output",
|
||||
SPI0_CS_GPIO);
|
||||
}
|
||||
|
||||
static int __init lpc32xx_display_uid(void)
|
||||
{
|
||||
u32 uid[4];
|
||||
static char const *lpc32xx_dt_compat[] __initdata = {
|
||||
"nxp,lpc3220",
|
||||
"nxp,lpc3230",
|
||||
"nxp,lpc3240",
|
||||
"nxp,lpc3250",
|
||||
NULL
|
||||
};
|
||||
|
||||
lpc32xx_get_uid(uid);
|
||||
|
||||
printk(KERN_INFO "LPC32XX unique ID: %08x%08x%08x%08x\n",
|
||||
uid[3], uid[2], uid[1], uid[0]);
|
||||
|
||||
return 1;
|
||||
}
|
||||
arch_initcall(lpc32xx_display_uid);
|
||||
|
||||
MACHINE_START(PHY3250, "Phytec 3250 board with the LPC3250 Microcontroller")
|
||||
/* Maintainer: Kevin Wells, NXP Semiconductors */
|
||||
DT_MACHINE_START(LPC32XX_DT, "LPC32XX SoC (Flattened Device Tree)")
|
||||
.atag_offset = 0x100,
|
||||
.map_io = lpc32xx_map_io,
|
||||
.init_irq = lpc32xx_init_irq,
|
||||
.timer = &lpc32xx_timer,
|
||||
.init_machine = phy3250_board_init,
|
||||
.init_machine = lpc3250_machine_init,
|
||||
.dt_compat = lpc32xx_dt_compat,
|
||||
.restart = lpc23xx_restart,
|
||||
MACHINE_END
|
||||
|
@ -2,16 +2,6 @@ if ARCH_MMP
|
||||
|
||||
menu "Marvell PXA168/910/MMP2 Implmentations"
|
||||
|
||||
config MACH_MMP_DT
|
||||
bool "Support MMP2 platforms from device tree"
|
||||
select CPU_PXA168
|
||||
select CPU_PXA910
|
||||
select USE_OF
|
||||
help
|
||||
Include support for Marvell MMP2 based platforms using
|
||||
the device tree. Needn't select any other machine while
|
||||
MACH_MMP_DT is enabled.
|
||||
|
||||
config MACH_ASPENITE
|
||||
bool "Marvell's PXA168 Aspenite Development Board"
|
||||
select CPU_PXA168
|
||||
@ -94,6 +84,25 @@ config MACH_GPLUGD
|
||||
Say 'Y' here if you want to support the Marvell PXA168-based
|
||||
GuruPlug Display (gplugD) Board
|
||||
|
||||
config MACH_MMP_DT
|
||||
bool "Support MMP (ARMv5) platforms from device tree"
|
||||
select CPU_PXA168
|
||||
select CPU_PXA910
|
||||
select USE_OF
|
||||
help
|
||||
Include support for Marvell MMP2 based platforms using
|
||||
the device tree. Needn't select any other machine while
|
||||
MACH_MMP_DT is enabled.
|
||||
|
||||
config MACH_MMP2_DT
|
||||
bool "Support MMP2 (ARMv7) platforms from device tree"
|
||||
depends on !CPU_MOHAWK
|
||||
select CPU_MMP2
|
||||
select USE_OF
|
||||
help
|
||||
Include support for Marvell MMP2 based platforms using
|
||||
the device tree.
|
||||
|
||||
endmenu
|
||||
|
||||
config CPU_PXA168
|
||||
|
@ -2,12 +2,12 @@
|
||||
# Makefile for Marvell's PXA168 processors line
|
||||
#
|
||||
|
||||
obj-y += common.o clock.o devices.o time.o
|
||||
obj-y += common.o clock.o devices.o time.o irq.o
|
||||
|
||||
# SoC support
|
||||
obj-$(CONFIG_CPU_PXA168) += pxa168.o irq-pxa168.o
|
||||
obj-$(CONFIG_CPU_PXA910) += pxa910.o irq-pxa168.o
|
||||
obj-$(CONFIG_CPU_MMP2) += mmp2.o irq-mmp2.o sram.o
|
||||
obj-$(CONFIG_CPU_PXA168) += pxa168.o
|
||||
obj-$(CONFIG_CPU_PXA910) += pxa910.o
|
||||
obj-$(CONFIG_CPU_MMP2) += mmp2.o sram.o
|
||||
|
||||
# board support
|
||||
obj-$(CONFIG_MACH_ASPENITE) += aspenite.o
|
||||
@ -19,5 +19,6 @@ obj-$(CONFIG_MACH_BROWNSTONE) += brownstone.o
|
||||
obj-$(CONFIG_MACH_FLINT) += flint.o
|
||||
obj-$(CONFIG_MACH_MARVELL_JASPER) += jasper.o
|
||||
obj-$(CONFIG_MACH_MMP_DT) += mmp-dt.o
|
||||
obj-$(CONFIG_MACH_MMP2_DT) += mmp2-dt.o
|
||||
obj-$(CONFIG_MACH_TETON_BGA) += teton_bga.o
|
||||
obj-$(CONFIG_MACH_GPLUGD) += gplugd.o
|
||||
|
@ -6,13 +6,15 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <mach/regs-icu.h>
|
||||
|
||||
.macro get_irqnr_preamble, base, tmp
|
||||
mrc p15, 0, \tmp, c0, c0, 0 @ CPUID
|
||||
and \tmp, \tmp, #0xff00
|
||||
cmp \tmp, #0x5800
|
||||
ldr \base, =ICU_VIRT_BASE
|
||||
ldr \base, =mmp_icu_base
|
||||
ldr \base, [\base, #0]
|
||||
addne \base, \base, #0x10c @ PJ1 AP INT SEL register
|
||||
addeq \base, \base, #0x104 @ PJ4 IRQ SEL register
|
||||
.endm
|
||||
|
@ -125,7 +125,7 @@
|
||||
#define IRQ_MMP2_RTC_MUX 5
|
||||
#define IRQ_MMP2_TWSI1 7
|
||||
#define IRQ_MMP2_GPU 8
|
||||
#define IRQ_MMP2_KEYPAD 9
|
||||
#define IRQ_MMP2_KEYPAD_MUX 9
|
||||
#define IRQ_MMP2_ROTARY 10
|
||||
#define IRQ_MMP2_TRACKBALL 11
|
||||
#define IRQ_MMP2_ONEWIRE 12
|
||||
@ -163,11 +163,11 @@
|
||||
#define IRQ_MMP2_DMA_FIQ 47
|
||||
#define IRQ_MMP2_DMA_RIQ 48
|
||||
#define IRQ_MMP2_GPIO 49
|
||||
#define IRQ_MMP2_SSP_MUX 51
|
||||
#define IRQ_MMP2_MIPI_HSI1_MUX 51
|
||||
#define IRQ_MMP2_MMC2 52
|
||||
#define IRQ_MMP2_MMC3 53
|
||||
#define IRQ_MMP2_MMC4 54
|
||||
#define IRQ_MMP2_MIPI_HSI 55
|
||||
#define IRQ_MMP2_MIPI_HSI0_MUX 55
|
||||
#define IRQ_MMP2_MSP 58
|
||||
#define IRQ_MMP2_MIPI_SLIM_DMA 59
|
||||
#define IRQ_MMP2_PJ4_FREQ_CHG 60
|
||||
@ -186,8 +186,14 @@
|
||||
#define IRQ_MMP2_RTC_ALARM (IRQ_MMP2_RTC_BASE + 0)
|
||||
#define IRQ_MMP2_RTC (IRQ_MMP2_RTC_BASE + 1)
|
||||
|
||||
/* secondary interrupt of INT #9 */
|
||||
#define IRQ_MMP2_KEYPAD_BASE (IRQ_MMP2_RTC_BASE + 2)
|
||||
#define IRQ_MMP2_KPC (IRQ_MMP2_KEYPAD_BASE + 0)
|
||||
#define IRQ_MMP2_ROTORY (IRQ_MMP2_KEYPAD_BASE + 1)
|
||||
#define IRQ_MMP2_TBALL (IRQ_MMP2_KEYPAD_BASE + 2)
|
||||
|
||||
/* secondary interrupt of INT #17 */
|
||||
#define IRQ_MMP2_TWSI_BASE (IRQ_MMP2_RTC_BASE + 2)
|
||||
#define IRQ_MMP2_TWSI_BASE (IRQ_MMP2_KEYPAD_BASE + 3)
|
||||
#define IRQ_MMP2_TWSI2 (IRQ_MMP2_TWSI_BASE + 0)
|
||||
#define IRQ_MMP2_TWSI3 (IRQ_MMP2_TWSI_BASE + 1)
|
||||
#define IRQ_MMP2_TWSI4 (IRQ_MMP2_TWSI_BASE + 2)
|
||||
@ -212,11 +218,16 @@
|
||||
#define IRQ_MMP2_COMMRX (IRQ_MMP2_MISC_BASE + 14)
|
||||
|
||||
/* secondary interrupt of INT #51 */
|
||||
#define IRQ_MMP2_SSP_BASE (IRQ_MMP2_MISC_BASE + 15)
|
||||
#define IRQ_MMP2_SSP1_SRDY (IRQ_MMP2_SSP_BASE + 0)
|
||||
#define IRQ_MMP2_SSP3_SRDY (IRQ_MMP2_SSP_BASE + 1)
|
||||
#define IRQ_MMP2_MIPI_HSI1_BASE (IRQ_MMP2_MISC_BASE + 15)
|
||||
#define IRQ_MMP2_HSI1_CAWAKE (IRQ_MMP2_MIPI_HSI1_BASE + 0)
|
||||
#define IRQ_MMP2_MIPI_HSI_INT1 (IRQ_MMP2_MIPI_HSI1_BASE + 1)
|
||||
|
||||
#define IRQ_MMP2_MUX_END (IRQ_MMP2_SSP_BASE + 2)
|
||||
/* secondary interrupt of INT #55 */
|
||||
#define IRQ_MMP2_MIPI_HSI0_BASE (IRQ_MMP2_MIPI_HSI1_BASE + 2)
|
||||
#define IRQ_MMP2_HSI0_CAWAKE (IRQ_MMP2_MIPI_HSI0_BASE + 0)
|
||||
#define IRQ_MMP2_MIPI_HSI_INT0 (IRQ_MMP2_MIPI_HSI0_BASE + 1)
|
||||
|
||||
#define IRQ_MMP2_MUX_END (IRQ_MMP2_MIPI_HSI0_BASE + 2)
|
||||
|
||||
#define IRQ_GPIO_START 128
|
||||
#define MMP_NR_BUILTIN_GPIO 192
|
||||
|
@ -1,158 +0,0 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-mmp/irq-mmp2.c
|
||||
*
|
||||
* Generic IRQ handling, GPIO IRQ demultiplexing, etc.
|
||||
*
|
||||
* Author: Haojian Zhuang <haojian.zhuang@marvell.com>
|
||||
* Copyright: Marvell International Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/regs-icu.h>
|
||||
#include <mach/mmp2.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
static void icu_mask_irq(struct irq_data *d)
|
||||
{
|
||||
uint32_t r = __raw_readl(ICU_INT_CONF(d->irq));
|
||||
|
||||
r &= ~ICU_INT_ROUTE_PJ4_IRQ;
|
||||
__raw_writel(r, ICU_INT_CONF(d->irq));
|
||||
}
|
||||
|
||||
static void icu_unmask_irq(struct irq_data *d)
|
||||
{
|
||||
uint32_t r = __raw_readl(ICU_INT_CONF(d->irq));
|
||||
|
||||
r |= ICU_INT_ROUTE_PJ4_IRQ;
|
||||
__raw_writel(r, ICU_INT_CONF(d->irq));
|
||||
}
|
||||
|
||||
static struct irq_chip icu_irq_chip = {
|
||||
.name = "icu_irq",
|
||||
.irq_mask = icu_mask_irq,
|
||||
.irq_mask_ack = icu_mask_irq,
|
||||
.irq_unmask = icu_unmask_irq,
|
||||
};
|
||||
|
||||
static void pmic_irq_ack(struct irq_data *d)
|
||||
{
|
||||
if (d->irq == IRQ_MMP2_PMIC)
|
||||
mmp2_clear_pmic_int();
|
||||
}
|
||||
|
||||
#define SECOND_IRQ_MASK(_name_, irq_base, prefix) \
|
||||
static void _name_##_mask_irq(struct irq_data *d) \
|
||||
{ \
|
||||
uint32_t r; \
|
||||
r = __raw_readl(prefix##_MASK) | (1 << (d->irq - irq_base)); \
|
||||
__raw_writel(r, prefix##_MASK); \
|
||||
}
|
||||
|
||||
#define SECOND_IRQ_UNMASK(_name_, irq_base, prefix) \
|
||||
static void _name_##_unmask_irq(struct irq_data *d) \
|
||||
{ \
|
||||
uint32_t r; \
|
||||
r = __raw_readl(prefix##_MASK) & ~(1 << (d->irq - irq_base)); \
|
||||
__raw_writel(r, prefix##_MASK); \
|
||||
}
|
||||
|
||||
#define SECOND_IRQ_DEMUX(_name_, irq_base, prefix) \
|
||||
static void _name_##_irq_demux(unsigned int irq, struct irq_desc *desc) \
|
||||
{ \
|
||||
unsigned long status, mask, n; \
|
||||
mask = __raw_readl(prefix##_MASK); \
|
||||
while (1) { \
|
||||
status = __raw_readl(prefix##_STATUS) & ~mask; \
|
||||
if (status == 0) \
|
||||
break; \
|
||||
n = find_first_bit(&status, BITS_PER_LONG); \
|
||||
while (n < BITS_PER_LONG) { \
|
||||
generic_handle_irq(irq_base + n); \
|
||||
n = find_next_bit(&status, BITS_PER_LONG, n+1); \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
#define SECOND_IRQ_CHIP(_name_, irq_base, prefix) \
|
||||
SECOND_IRQ_MASK(_name_, irq_base, prefix) \
|
||||
SECOND_IRQ_UNMASK(_name_, irq_base, prefix) \
|
||||
SECOND_IRQ_DEMUX(_name_, irq_base, prefix) \
|
||||
static struct irq_chip _name_##_irq_chip = { \
|
||||
.name = #_name_, \
|
||||
.irq_mask = _name_##_mask_irq, \
|
||||
.irq_unmask = _name_##_unmask_irq, \
|
||||
}
|
||||
|
||||
SECOND_IRQ_CHIP(pmic, IRQ_MMP2_PMIC_BASE, MMP2_ICU_INT4);
|
||||
SECOND_IRQ_CHIP(rtc, IRQ_MMP2_RTC_BASE, MMP2_ICU_INT5);
|
||||
SECOND_IRQ_CHIP(twsi, IRQ_MMP2_TWSI_BASE, MMP2_ICU_INT17);
|
||||
SECOND_IRQ_CHIP(misc, IRQ_MMP2_MISC_BASE, MMP2_ICU_INT35);
|
||||
SECOND_IRQ_CHIP(ssp, IRQ_MMP2_SSP_BASE, MMP2_ICU_INT51);
|
||||
|
||||
static void init_mux_irq(struct irq_chip *chip, int start, int num)
|
||||
{
|
||||
int irq;
|
||||
|
||||
for (irq = start; num > 0; irq++, num--) {
|
||||
struct irq_data *d = irq_get_irq_data(irq);
|
||||
|
||||
/* mask and clear the IRQ */
|
||||
chip->irq_mask(d);
|
||||
if (chip->irq_ack)
|
||||
chip->irq_ack(d);
|
||||
|
||||
irq_set_chip(irq, chip);
|
||||
set_irq_flags(irq, IRQF_VALID);
|
||||
irq_set_handler(irq, handle_level_irq);
|
||||
}
|
||||
}
|
||||
|
||||
void __init mmp2_init_icu(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
for (irq = 0; irq < IRQ_MMP2_MUX_BASE; irq++) {
|
||||
icu_mask_irq(irq_get_irq_data(irq));
|
||||
irq_set_chip(irq, &icu_irq_chip);
|
||||
set_irq_flags(irq, IRQF_VALID);
|
||||
|
||||
switch (irq) {
|
||||
case IRQ_MMP2_PMIC_MUX:
|
||||
case IRQ_MMP2_RTC_MUX:
|
||||
case IRQ_MMP2_TWSI_MUX:
|
||||
case IRQ_MMP2_MISC_MUX:
|
||||
case IRQ_MMP2_SSP_MUX:
|
||||
break;
|
||||
default:
|
||||
irq_set_handler(irq, handle_level_irq);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* NOTE: IRQ_MMP2_PMIC requires the PMIC MFPR register
|
||||
* to be written to clear the interrupt
|
||||
*/
|
||||
pmic_irq_chip.irq_ack = pmic_irq_ack;
|
||||
|
||||
init_mux_irq(&pmic_irq_chip, IRQ_MMP2_PMIC_BASE, 2);
|
||||
init_mux_irq(&rtc_irq_chip, IRQ_MMP2_RTC_BASE, 2);
|
||||
init_mux_irq(&twsi_irq_chip, IRQ_MMP2_TWSI_BASE, 5);
|
||||
init_mux_irq(&misc_irq_chip, IRQ_MMP2_MISC_BASE, 15);
|
||||
init_mux_irq(&ssp_irq_chip, IRQ_MMP2_SSP_BASE, 2);
|
||||
|
||||
irq_set_chained_handler(IRQ_MMP2_PMIC_MUX, pmic_irq_demux);
|
||||
irq_set_chained_handler(IRQ_MMP2_RTC_MUX, rtc_irq_demux);
|
||||
irq_set_chained_handler(IRQ_MMP2_TWSI_MUX, twsi_irq_demux);
|
||||
irq_set_chained_handler(IRQ_MMP2_MISC_MUX, misc_irq_demux);
|
||||
irq_set_chained_handler(IRQ_MMP2_SSP_MUX, ssp_irq_demux);
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-mmp/irq.c
|
||||
*
|
||||
* Generic IRQ handling, GPIO IRQ demultiplexing, etc.
|
||||
*
|
||||
* Author: Bin Yang <bin.yang@marvell.com>
|
||||
* Created: Sep 30, 2008
|
||||
* Copyright: Marvell International Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <mach/regs-icu.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define IRQ_ROUTE_TO_AP (ICU_INT_CONF_AP_INT | ICU_INT_CONF_IRQ)
|
||||
|
||||
#define PRIORITY_DEFAULT 0x1
|
||||
#define PRIORITY_NONE 0x0 /* means IRQ disabled */
|
||||
|
||||
static void icu_mask_irq(struct irq_data *d)
|
||||
{
|
||||
__raw_writel(PRIORITY_NONE, ICU_INT_CONF(d->irq));
|
||||
}
|
||||
|
||||
static void icu_unmask_irq(struct irq_data *d)
|
||||
{
|
||||
__raw_writel(IRQ_ROUTE_TO_AP | PRIORITY_DEFAULT, ICU_INT_CONF(d->irq));
|
||||
}
|
||||
|
||||
static struct irq_chip icu_irq_chip = {
|
||||
.name = "icu_irq",
|
||||
.irq_ack = icu_mask_irq,
|
||||
.irq_mask = icu_mask_irq,
|
||||
.irq_unmask = icu_unmask_irq,
|
||||
};
|
||||
|
||||
void __init icu_init_irq(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
for (irq = 0; irq < 64; irq++) {
|
||||
icu_mask_irq(irq_get_irq_data(irq));
|
||||
irq_set_chip_and_handler(irq, &icu_irq_chip, handle_level_irq);
|
||||
set_irq_flags(irq, IRQF_VALID);
|
||||
}
|
||||
}
|
445
arch/arm/mach-mmp/irq.c
Normal file
445
arch/arm/mach-mmp/irq.c
Normal file
@ -0,0 +1,445 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-mmp/irq.c
|
||||
*
|
||||
* Generic IRQ handling, GPIO IRQ demultiplexing, etc.
|
||||
* Copyright (C) 2008 - 2012 Marvell Technology Group Ltd.
|
||||
*
|
||||
* Author: Bin Yang <bin.yang@marvell.com>
|
||||
* Haojian Zhuang <haojian.zhuang@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_irq.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define MAX_ICU_NR 16
|
||||
|
||||
struct icu_chip_data {
|
||||
int nr_irqs;
|
||||
unsigned int virq_base;
|
||||
unsigned int cascade_irq;
|
||||
void __iomem *reg_status;
|
||||
void __iomem *reg_mask;
|
||||
unsigned int conf_enable;
|
||||
unsigned int conf_disable;
|
||||
unsigned int conf_mask;
|
||||
unsigned int clr_mfp_irq_base;
|
||||
unsigned int clr_mfp_hwirq;
|
||||
struct irq_domain *domain;
|
||||
};
|
||||
|
||||
struct mmp_intc_conf {
|
||||
unsigned int conf_enable;
|
||||
unsigned int conf_disable;
|
||||
unsigned int conf_mask;
|
||||
};
|
||||
|
||||
void __iomem *mmp_icu_base;
|
||||
static struct icu_chip_data icu_data[MAX_ICU_NR];
|
||||
static int max_icu_nr;
|
||||
|
||||
extern void mmp2_clear_pmic_int(void);
|
||||
|
||||
static void icu_mask_ack_irq(struct irq_data *d)
|
||||
{
|
||||
struct irq_domain *domain = d->domain;
|
||||
struct icu_chip_data *data = (struct icu_chip_data *)domain->host_data;
|
||||
int hwirq;
|
||||
u32 r;
|
||||
|
||||
hwirq = d->irq - data->virq_base;
|
||||
if (data == &icu_data[0]) {
|
||||
r = readl_relaxed(mmp_icu_base + (hwirq << 2));
|
||||
r &= ~data->conf_mask;
|
||||
r |= data->conf_disable;
|
||||
writel_relaxed(r, mmp_icu_base + (hwirq << 2));
|
||||
} else {
|
||||
#ifdef CONFIG_CPU_MMP2
|
||||
if ((data->virq_base == data->clr_mfp_irq_base)
|
||||
&& (hwirq == data->clr_mfp_hwirq))
|
||||
mmp2_clear_pmic_int();
|
||||
#endif
|
||||
r = readl_relaxed(data->reg_mask) | (1 << hwirq);
|
||||
writel_relaxed(r, data->reg_mask);
|
||||
}
|
||||
}
|
||||
|
||||
static void icu_mask_irq(struct irq_data *d)
|
||||
{
|
||||
struct irq_domain *domain = d->domain;
|
||||
struct icu_chip_data *data = (struct icu_chip_data *)domain->host_data;
|
||||
int hwirq;
|
||||
u32 r;
|
||||
|
||||
hwirq = d->irq - data->virq_base;
|
||||
if (data == &icu_data[0]) {
|
||||
r = readl_relaxed(mmp_icu_base + (hwirq << 2));
|
||||
r &= ~data->conf_mask;
|
||||
r |= data->conf_disable;
|
||||
writel_relaxed(r, mmp_icu_base + (hwirq << 2));
|
||||
} else {
|
||||
r = readl_relaxed(data->reg_mask) | (1 << hwirq);
|
||||
writel_relaxed(r, data->reg_mask);
|
||||
}
|
||||
}
|
||||
|
||||
static void icu_unmask_irq(struct irq_data *d)
|
||||
{
|
||||
struct irq_domain *domain = d->domain;
|
||||
struct icu_chip_data *data = (struct icu_chip_data *)domain->host_data;
|
||||
int hwirq;
|
||||
u32 r;
|
||||
|
||||
hwirq = d->irq - data->virq_base;
|
||||
if (data == &icu_data[0]) {
|
||||
r = readl_relaxed(mmp_icu_base + (hwirq << 2));
|
||||
r &= ~data->conf_mask;
|
||||
r |= data->conf_enable;
|
||||
writel_relaxed(r, mmp_icu_base + (hwirq << 2));
|
||||
} else {
|
||||
r = readl_relaxed(data->reg_mask) & ~(1 << hwirq);
|
||||
writel_relaxed(r, data->reg_mask);
|
||||
}
|
||||
}
|
||||
|
||||
static struct irq_chip icu_irq_chip = {
|
||||
.name = "icu_irq",
|
||||
.irq_mask = icu_mask_irq,
|
||||
.irq_mask_ack = icu_mask_ack_irq,
|
||||
.irq_unmask = icu_unmask_irq,
|
||||
};
|
||||
|
||||
static void icu_mux_irq_demux(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
struct irq_domain *domain;
|
||||
struct icu_chip_data *data;
|
||||
int i;
|
||||
unsigned long mask, status, n;
|
||||
|
||||
for (i = 1; i < max_icu_nr; i++) {
|
||||
if (irq == icu_data[i].cascade_irq) {
|
||||
domain = icu_data[i].domain;
|
||||
data = (struct icu_chip_data *)domain->host_data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i >= max_icu_nr) {
|
||||
pr_err("Spurious irq %d in MMP INTC\n", irq);
|
||||
return;
|
||||
}
|
||||
|
||||
mask = readl_relaxed(data->reg_mask);
|
||||
while (1) {
|
||||
status = readl_relaxed(data->reg_status) & ~mask;
|
||||
if (status == 0)
|
||||
break;
|
||||
n = find_first_bit(&status, BITS_PER_LONG);
|
||||
while (n < BITS_PER_LONG) {
|
||||
generic_handle_irq(icu_data[i].virq_base + n);
|
||||
n = find_next_bit(&status, BITS_PER_LONG, n + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int mmp_irq_domain_map(struct irq_domain *d, unsigned int irq,
|
||||
irq_hw_number_t hw)
|
||||
{
|
||||
irq_set_chip_and_handler(irq, &icu_irq_chip, handle_level_irq);
|
||||
set_irq_flags(irq, IRQF_VALID);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mmp_irq_domain_xlate(struct irq_domain *d, struct device_node *node,
|
||||
const u32 *intspec, unsigned int intsize,
|
||||
unsigned long *out_hwirq,
|
||||
unsigned int *out_type)
|
||||
{
|
||||
*out_hwirq = intspec[0];
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct irq_domain_ops mmp_irq_domain_ops = {
|
||||
.map = mmp_irq_domain_map,
|
||||
.xlate = mmp_irq_domain_xlate,
|
||||
};
|
||||
|
||||
static struct mmp_intc_conf mmp_conf = {
|
||||
.conf_enable = 0x51,
|
||||
.conf_disable = 0x0,
|
||||
.conf_mask = 0x7f,
|
||||
};
|
||||
|
||||
static struct mmp_intc_conf mmp2_conf = {
|
||||
.conf_enable = 0x20,
|
||||
.conf_disable = 0x0,
|
||||
.conf_mask = 0x7f,
|
||||
};
|
||||
|
||||
/* MMP (ARMv5) */
|
||||
void __init icu_init_irq(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
max_icu_nr = 1;
|
||||
mmp_icu_base = ioremap(0xd4282000, 0x1000);
|
||||
icu_data[0].conf_enable = mmp_conf.conf_enable;
|
||||
icu_data[0].conf_disable = mmp_conf.conf_disable;
|
||||
icu_data[0].conf_mask = mmp_conf.conf_mask;
|
||||
icu_data[0].nr_irqs = 64;
|
||||
icu_data[0].virq_base = 0;
|
||||
icu_data[0].domain = irq_domain_add_legacy(NULL, 64, 0, 0,
|
||||
&irq_domain_simple_ops,
|
||||
&icu_data[0]);
|
||||
for (irq = 0; irq < 64; irq++) {
|
||||
icu_mask_irq(irq_get_irq_data(irq));
|
||||
irq_set_chip_and_handler(irq, &icu_irq_chip, handle_level_irq);
|
||||
set_irq_flags(irq, IRQF_VALID);
|
||||
}
|
||||
irq_set_default_host(icu_data[0].domain);
|
||||
}
|
||||
|
||||
/* MMP2 (ARMv7) */
|
||||
void __init mmp2_init_icu(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
max_icu_nr = 8;
|
||||
mmp_icu_base = ioremap(0xd4282000, 0x1000);
|
||||
icu_data[0].conf_enable = mmp2_conf.conf_enable;
|
||||
icu_data[0].conf_disable = mmp2_conf.conf_disable;
|
||||
icu_data[0].conf_mask = mmp2_conf.conf_mask;
|
||||
icu_data[0].nr_irqs = 64;
|
||||
icu_data[0].virq_base = 0;
|
||||
icu_data[0].domain = irq_domain_add_legacy(NULL, 64, 0, 0,
|
||||
&irq_domain_simple_ops,
|
||||
&icu_data[0]);
|
||||
icu_data[1].reg_status = mmp_icu_base + 0x150;
|
||||
icu_data[1].reg_mask = mmp_icu_base + 0x168;
|
||||
icu_data[1].clr_mfp_irq_base = IRQ_MMP2_PMIC_BASE;
|
||||
icu_data[1].clr_mfp_hwirq = IRQ_MMP2_PMIC - IRQ_MMP2_PMIC_BASE;
|
||||
icu_data[1].nr_irqs = 2;
|
||||
icu_data[1].virq_base = IRQ_MMP2_PMIC_BASE;
|
||||
icu_data[1].domain = irq_domain_add_legacy(NULL, icu_data[1].nr_irqs,
|
||||
icu_data[1].virq_base, 0,
|
||||
&irq_domain_simple_ops,
|
||||
&icu_data[1]);
|
||||
icu_data[2].reg_status = mmp_icu_base + 0x154;
|
||||
icu_data[2].reg_mask = mmp_icu_base + 0x16c;
|
||||
icu_data[2].nr_irqs = 2;
|
||||
icu_data[2].virq_base = IRQ_MMP2_RTC_BASE;
|
||||
icu_data[2].domain = irq_domain_add_legacy(NULL, icu_data[2].nr_irqs,
|
||||
icu_data[2].virq_base, 0,
|
||||
&irq_domain_simple_ops,
|
||||
&icu_data[2]);
|
||||
icu_data[3].reg_status = mmp_icu_base + 0x180;
|
||||
icu_data[3].reg_mask = mmp_icu_base + 0x17c;
|
||||
icu_data[3].nr_irqs = 3;
|
||||
icu_data[3].virq_base = IRQ_MMP2_KEYPAD_BASE;
|
||||
icu_data[3].domain = irq_domain_add_legacy(NULL, icu_data[3].nr_irqs,
|
||||
icu_data[3].virq_base, 0,
|
||||
&irq_domain_simple_ops,
|
||||
&icu_data[3]);
|
||||
icu_data[4].reg_status = mmp_icu_base + 0x158;
|
||||
icu_data[4].reg_mask = mmp_icu_base + 0x170;
|
||||
icu_data[4].nr_irqs = 5;
|
||||
icu_data[4].virq_base = IRQ_MMP2_TWSI_BASE;
|
||||
icu_data[4].domain = irq_domain_add_legacy(NULL, icu_data[4].nr_irqs,
|
||||
icu_data[4].virq_base, 0,
|
||||
&irq_domain_simple_ops,
|
||||
&icu_data[4]);
|
||||
icu_data[5].reg_status = mmp_icu_base + 0x15c;
|
||||
icu_data[5].reg_mask = mmp_icu_base + 0x174;
|
||||
icu_data[5].nr_irqs = 15;
|
||||
icu_data[5].virq_base = IRQ_MMP2_MISC_BASE;
|
||||
icu_data[5].domain = irq_domain_add_legacy(NULL, icu_data[5].nr_irqs,
|
||||
icu_data[5].virq_base, 0,
|
||||
&irq_domain_simple_ops,
|
||||
&icu_data[5]);
|
||||
icu_data[6].reg_status = mmp_icu_base + 0x160;
|
||||
icu_data[6].reg_mask = mmp_icu_base + 0x178;
|
||||
icu_data[6].nr_irqs = 2;
|
||||
icu_data[6].virq_base = IRQ_MMP2_MIPI_HSI1_BASE;
|
||||
icu_data[6].domain = irq_domain_add_legacy(NULL, icu_data[6].nr_irqs,
|
||||
icu_data[6].virq_base, 0,
|
||||
&irq_domain_simple_ops,
|
||||
&icu_data[6]);
|
||||
icu_data[7].reg_status = mmp_icu_base + 0x188;
|
||||
icu_data[7].reg_mask = mmp_icu_base + 0x184;
|
||||
icu_data[7].nr_irqs = 2;
|
||||
icu_data[7].virq_base = IRQ_MMP2_MIPI_HSI0_BASE;
|
||||
icu_data[7].domain = irq_domain_add_legacy(NULL, icu_data[7].nr_irqs,
|
||||
icu_data[7].virq_base, 0,
|
||||
&irq_domain_simple_ops,
|
||||
&icu_data[7]);
|
||||
for (irq = 0; irq < IRQ_MMP2_MUX_END; irq++) {
|
||||
icu_mask_irq(irq_get_irq_data(irq));
|
||||
switch (irq) {
|
||||
case IRQ_MMP2_PMIC_MUX:
|
||||
case IRQ_MMP2_RTC_MUX:
|
||||
case IRQ_MMP2_KEYPAD_MUX:
|
||||
case IRQ_MMP2_TWSI_MUX:
|
||||
case IRQ_MMP2_MISC_MUX:
|
||||
case IRQ_MMP2_MIPI_HSI1_MUX:
|
||||
case IRQ_MMP2_MIPI_HSI0_MUX:
|
||||
irq_set_chip(irq, &icu_irq_chip);
|
||||
irq_set_chained_handler(irq, icu_mux_irq_demux);
|
||||
break;
|
||||
default:
|
||||
irq_set_chip_and_handler(irq, &icu_irq_chip,
|
||||
handle_level_irq);
|
||||
break;
|
||||
}
|
||||
set_irq_flags(irq, IRQF_VALID);
|
||||
}
|
||||
irq_set_default_host(icu_data[0].domain);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id intc_ids[] __initconst = {
|
||||
{ .compatible = "mrvl,mmp-intc", .data = &mmp_conf },
|
||||
{ .compatible = "mrvl,mmp2-intc", .data = &mmp2_conf },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct of_device_id mmp_mux_irq_match[] __initconst = {
|
||||
{ .compatible = "mrvl,mmp2-mux-intc" },
|
||||
{}
|
||||
};
|
||||
|
||||
int __init mmp2_mux_init(struct device_node *parent)
|
||||
{
|
||||
struct device_node *node;
|
||||
const struct of_device_id *of_id;
|
||||
struct resource res;
|
||||
int i, irq_base, ret, irq;
|
||||
u32 nr_irqs, mfp_irq;
|
||||
|
||||
node = parent;
|
||||
max_icu_nr = 1;
|
||||
for (i = 1; i < MAX_ICU_NR; i++) {
|
||||
node = of_find_matching_node(node, mmp_mux_irq_match);
|
||||
if (!node)
|
||||
break;
|
||||
of_id = of_match_node(&mmp_mux_irq_match[0], node);
|
||||
ret = of_property_read_u32(node, "mrvl,intc-nr-irqs",
|
||||
&nr_irqs);
|
||||
if (ret) {
|
||||
pr_err("Not found mrvl,intc-nr-irqs property\n");
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
ret = of_address_to_resource(node, 0, &res);
|
||||
if (ret < 0) {
|
||||
pr_err("Not found reg property\n");
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
icu_data[i].reg_status = mmp_icu_base + res.start;
|
||||
ret = of_address_to_resource(node, 1, &res);
|
||||
if (ret < 0) {
|
||||
pr_err("Not found reg property\n");
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
icu_data[i].reg_mask = mmp_icu_base + res.start;
|
||||
icu_data[i].cascade_irq = irq_of_parse_and_map(node, 0);
|
||||
if (!icu_data[i].cascade_irq) {
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
irq_base = irq_alloc_descs(-1, 0, nr_irqs, 0);
|
||||
if (irq_base < 0) {
|
||||
pr_err("Failed to allocate IRQ numbers for mux intc\n");
|
||||
ret = irq_base;
|
||||
goto err;
|
||||
}
|
||||
if (!of_property_read_u32(node, "mrvl,clr-mfp-irq",
|
||||
&mfp_irq)) {
|
||||
icu_data[i].clr_mfp_irq_base = irq_base;
|
||||
icu_data[i].clr_mfp_hwirq = mfp_irq;
|
||||
}
|
||||
irq_set_chained_handler(icu_data[i].cascade_irq,
|
||||
icu_mux_irq_demux);
|
||||
icu_data[i].nr_irqs = nr_irqs;
|
||||
icu_data[i].virq_base = irq_base;
|
||||
icu_data[i].domain = irq_domain_add_legacy(node, nr_irqs,
|
||||
irq_base, 0,
|
||||
&mmp_irq_domain_ops,
|
||||
&icu_data[i]);
|
||||
for (irq = irq_base; irq < irq_base + nr_irqs; irq++)
|
||||
icu_mask_irq(irq_get_irq_data(irq));
|
||||
}
|
||||
max_icu_nr = i;
|
||||
return 0;
|
||||
err:
|
||||
of_node_put(node);
|
||||
max_icu_nr = i;
|
||||
return ret;
|
||||
}
|
||||
|
||||
void __init mmp_dt_irq_init(void)
|
||||
{
|
||||
struct device_node *node;
|
||||
const struct of_device_id *of_id;
|
||||
struct mmp_intc_conf *conf;
|
||||
int nr_irqs, irq_base, ret, irq;
|
||||
|
||||
node = of_find_matching_node(NULL, intc_ids);
|
||||
if (!node) {
|
||||
pr_err("Failed to find interrupt controller in arch-mmp\n");
|
||||
return;
|
||||
}
|
||||
of_id = of_match_node(intc_ids, node);
|
||||
conf = of_id->data;
|
||||
|
||||
ret = of_property_read_u32(node, "mrvl,intc-nr-irqs", &nr_irqs);
|
||||
if (ret) {
|
||||
pr_err("Not found mrvl,intc-nr-irqs property\n");
|
||||
return;
|
||||
}
|
||||
|
||||
mmp_icu_base = of_iomap(node, 0);
|
||||
if (!mmp_icu_base) {
|
||||
pr_err("Failed to get interrupt controller register\n");
|
||||
return;
|
||||
}
|
||||
|
||||
irq_base = irq_alloc_descs(-1, 0, nr_irqs - NR_IRQS_LEGACY, 0);
|
||||
if (irq_base < 0) {
|
||||
pr_err("Failed to allocate IRQ numbers\n");
|
||||
goto err;
|
||||
} else if (irq_base != NR_IRQS_LEGACY) {
|
||||
pr_err("ICU's irqbase should be started from 0\n");
|
||||
goto err;
|
||||
}
|
||||
icu_data[0].conf_enable = conf->conf_enable;
|
||||
icu_data[0].conf_disable = conf->conf_disable;
|
||||
icu_data[0].conf_mask = conf->conf_mask;
|
||||
icu_data[0].nr_irqs = nr_irqs;
|
||||
icu_data[0].virq_base = 0;
|
||||
icu_data[0].domain = irq_domain_add_legacy(node, nr_irqs, 0, 0,
|
||||
&mmp_irq_domain_ops,
|
||||
&icu_data[0]);
|
||||
irq_set_default_host(icu_data[0].domain);
|
||||
for (irq = 0; irq < nr_irqs; irq++)
|
||||
icu_mask_irq(irq_get_irq_data(irq));
|
||||
mmp2_mux_init(node);
|
||||
return;
|
||||
err:
|
||||
iounmap(mmp_icu_base);
|
||||
}
|
||||
#endif
|
@ -14,14 +14,19 @@
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
extern struct sys_timer pxa168_timer;
|
||||
extern void __init icu_init_irq(void);
|
||||
extern void __init mmp_dt_irq_init(void);
|
||||
extern void __init mmp_dt_init_timer(void);
|
||||
|
||||
static const struct of_dev_auxdata mmp_auxdata_lookup[] __initconst = {
|
||||
static struct sys_timer mmp_dt_timer = {
|
||||
.init = mmp_dt_init_timer,
|
||||
};
|
||||
|
||||
static const struct of_dev_auxdata pxa168_auxdata_lookup[] __initconst = {
|
||||
OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4017000, "pxa2xx-uart.0", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4018000, "pxa2xx-uart.1", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4026000, "pxa2xx-uart.2", NULL),
|
||||
@ -32,44 +37,47 @@ static const struct of_dev_auxdata mmp_auxdata_lookup[] __initconst = {
|
||||
{}
|
||||
};
|
||||
|
||||
static int __init mmp_intc_add_irq_domain(struct device_node *np,
|
||||
struct device_node *parent)
|
||||
{
|
||||
irq_domain_add_simple(np, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init mmp_gpio_add_irq_domain(struct device_node *np,
|
||||
struct device_node *parent)
|
||||
{
|
||||
irq_domain_add_simple(np, IRQ_GPIO_START);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id mmp_irq_match[] __initconst = {
|
||||
{ .compatible = "mrvl,mmp-intc", .data = mmp_intc_add_irq_domain, },
|
||||
{ .compatible = "mrvl,mmp-gpio", .data = mmp_gpio_add_irq_domain, },
|
||||
static const struct of_dev_auxdata pxa910_auxdata_lookup[] __initconst = {
|
||||
OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4017000, "pxa2xx-uart.0", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4018000, "pxa2xx-uart.1", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4036000, "pxa2xx-uart.2", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-twsi", 0xd4011000, "pxa2xx-i2c.0", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-twsi", 0xd4037000, "pxa2xx-i2c.1", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-gpio", 0xd4019000, "pxa-gpio", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-rtc", 0xd4010000, "sa1100-rtc", NULL),
|
||||
{}
|
||||
};
|
||||
|
||||
static void __init mmp_dt_init(void)
|
||||
static void __init pxa168_dt_init(void)
|
||||
{
|
||||
|
||||
of_irq_init(mmp_irq_match);
|
||||
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
mmp_auxdata_lookup, NULL);
|
||||
pxa168_auxdata_lookup, NULL);
|
||||
}
|
||||
|
||||
static const char *pxa168_dt_board_compat[] __initdata = {
|
||||
static void __init pxa910_dt_init(void)
|
||||
{
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
pxa910_auxdata_lookup, NULL);
|
||||
}
|
||||
|
||||
static const char *mmp_dt_board_compat[] __initdata = {
|
||||
"mrvl,pxa168-aspenite",
|
||||
"mrvl,pxa910-dkb",
|
||||
NULL,
|
||||
};
|
||||
|
||||
DT_MACHINE_START(PXA168_DT, "Marvell PXA168 (Device Tree Support)")
|
||||
.map_io = mmp_map_io,
|
||||
.init_irq = icu_init_irq,
|
||||
.timer = &pxa168_timer,
|
||||
.init_machine = mmp_dt_init,
|
||||
.dt_compat = pxa168_dt_board_compat,
|
||||
.init_irq = mmp_dt_irq_init,
|
||||
.timer = &mmp_dt_timer,
|
||||
.init_machine = pxa168_dt_init,
|
||||
.dt_compat = mmp_dt_board_compat,
|
||||
MACHINE_END
|
||||
|
||||
DT_MACHINE_START(PXA910_DT, "Marvell PXA910 (Device Tree Support)")
|
||||
.map_io = mmp_map_io,
|
||||
.init_irq = mmp_dt_irq_init,
|
||||
.timer = &mmp_dt_timer,
|
||||
.init_machine = pxa910_dt_init,
|
||||
.dt_compat = mmp_dt_board_compat,
|
||||
MACHINE_END
|
||||
|
60
arch/arm/mach-mmp/mmp2-dt.c
Normal file
60
arch/arm/mach-mmp/mmp2-dt.c
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-mmp/mmp2-dt.c
|
||||
*
|
||||
* Copyright (C) 2012 Marvell Technology Group Ltd.
|
||||
* Author: Haojian Zhuang <haojian.zhuang@marvell.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* publishhed by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/regs-apbc.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
extern void __init mmp_dt_irq_init(void);
|
||||
extern void __init mmp_dt_init_timer(void);
|
||||
|
||||
static struct sys_timer mmp_dt_timer = {
|
||||
.init = mmp_dt_init_timer,
|
||||
};
|
||||
|
||||
static const struct of_dev_auxdata mmp2_auxdata_lookup[] __initconst = {
|
||||
OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4030000, "pxa2xx-uart.0", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4017000, "pxa2xx-uart.1", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4018000, "pxa2xx-uart.2", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-uart", 0xd4016000, "pxa2xx-uart.3", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-twsi", 0xd4011000, "pxa2xx-i2c.0", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-twsi", 0xd4025000, "pxa2xx-i2c.1", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-gpio", 0xd4019000, "pxa-gpio", NULL),
|
||||
OF_DEV_AUXDATA("mrvl,mmp-rtc", 0xd4010000, "sa1100-rtc", NULL),
|
||||
{}
|
||||
};
|
||||
|
||||
static void __init mmp2_dt_init(void)
|
||||
{
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
mmp2_auxdata_lookup, NULL);
|
||||
}
|
||||
|
||||
static const char *mmp2_dt_board_compat[] __initdata = {
|
||||
"mrvl,mmp2-brownstone",
|
||||
NULL,
|
||||
};
|
||||
|
||||
DT_MACHINE_START(MMP2_DT, "Marvell MMP2 (Device Tree Support)")
|
||||
.map_io = mmp_map_io,
|
||||
.init_irq = mmp_dt_irq_init,
|
||||
.timer = &mmp_dt_timer,
|
||||
.init_machine = mmp2_dt_init,
|
||||
.dt_compat = mmp2_dt_board_compat,
|
||||
MACHINE_END
|
@ -25,6 +25,9 @@
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_irq.h>
|
||||
|
||||
#include <asm/sched_clock.h>
|
||||
#include <mach/addr-map.h>
|
||||
@ -41,6 +44,8 @@
|
||||
#define MAX_DELTA (0xfffffffe)
|
||||
#define MIN_DELTA (16)
|
||||
|
||||
static void __iomem *mmp_timer_base = TIMERS_VIRT_BASE;
|
||||
|
||||
/*
|
||||
* FIXME: the timer needs some delay to stablize the counter capture
|
||||
*/
|
||||
@ -48,12 +53,12 @@ static inline uint32_t timer_read(void)
|
||||
{
|
||||
int delay = 100;
|
||||
|
||||
__raw_writel(1, TIMERS_VIRT_BASE + TMR_CVWR(1));
|
||||
__raw_writel(1, mmp_timer_base + TMR_CVWR(1));
|
||||
|
||||
while (delay--)
|
||||
cpu_relax();
|
||||
|
||||
return __raw_readl(TIMERS_VIRT_BASE + TMR_CVWR(1));
|
||||
return __raw_readl(mmp_timer_base + TMR_CVWR(1));
|
||||
}
|
||||
|
||||
static u32 notrace mmp_read_sched_clock(void)
|
||||
@ -68,12 +73,12 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
|
||||
/*
|
||||
* Clear pending interrupt status.
|
||||
*/
|
||||
__raw_writel(0x01, TIMERS_VIRT_BASE + TMR_ICR(0));
|
||||
__raw_writel(0x01, mmp_timer_base + TMR_ICR(0));
|
||||
|
||||
/*
|
||||
* Disable timer 0.
|
||||
*/
|
||||
__raw_writel(0x02, TIMERS_VIRT_BASE + TMR_CER);
|
||||
__raw_writel(0x02, mmp_timer_base + TMR_CER);
|
||||
|
||||
c->event_handler(c);
|
||||
|
||||
@ -90,23 +95,23 @@ static int timer_set_next_event(unsigned long delta,
|
||||
/*
|
||||
* Disable timer 0.
|
||||
*/
|
||||
__raw_writel(0x02, TIMERS_VIRT_BASE + TMR_CER);
|
||||
__raw_writel(0x02, mmp_timer_base + TMR_CER);
|
||||
|
||||
/*
|
||||
* Clear and enable timer match 0 interrupt.
|
||||
*/
|
||||
__raw_writel(0x01, TIMERS_VIRT_BASE + TMR_ICR(0));
|
||||
__raw_writel(0x01, TIMERS_VIRT_BASE + TMR_IER(0));
|
||||
__raw_writel(0x01, mmp_timer_base + TMR_ICR(0));
|
||||
__raw_writel(0x01, mmp_timer_base + TMR_IER(0));
|
||||
|
||||
/*
|
||||
* Setup new clockevent timer value.
|
||||
*/
|
||||
__raw_writel(delta - 1, TIMERS_VIRT_BASE + TMR_TN_MM(0, 0));
|
||||
__raw_writel(delta - 1, mmp_timer_base + TMR_TN_MM(0, 0));
|
||||
|
||||
/*
|
||||
* Enable timer 0.
|
||||
*/
|
||||
__raw_writel(0x03, TIMERS_VIRT_BASE + TMR_CER);
|
||||
__raw_writel(0x03, mmp_timer_base + TMR_CER);
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
@ -124,7 +129,7 @@ static void timer_set_mode(enum clock_event_mode mode,
|
||||
case CLOCK_EVT_MODE_UNUSED:
|
||||
case CLOCK_EVT_MODE_SHUTDOWN:
|
||||
/* disable the matching interrupt */
|
||||
__raw_writel(0x00, TIMERS_VIRT_BASE + TMR_IER(0));
|
||||
__raw_writel(0x00, mmp_timer_base + TMR_IER(0));
|
||||
break;
|
||||
case CLOCK_EVT_MODE_RESUME:
|
||||
case CLOCK_EVT_MODE_PERIODIC:
|
||||
@ -157,27 +162,27 @@ static struct clocksource cksrc = {
|
||||
|
||||
static void __init timer_config(void)
|
||||
{
|
||||
uint32_t ccr = __raw_readl(TIMERS_VIRT_BASE + TMR_CCR);
|
||||
uint32_t ccr = __raw_readl(mmp_timer_base + TMR_CCR);
|
||||
|
||||
__raw_writel(0x0, TIMERS_VIRT_BASE + TMR_CER); /* disable */
|
||||
__raw_writel(0x0, mmp_timer_base + TMR_CER); /* disable */
|
||||
|
||||
ccr &= (cpu_is_mmp2()) ? (TMR_CCR_CS_0(0) | TMR_CCR_CS_1(0)) :
|
||||
(TMR_CCR_CS_0(3) | TMR_CCR_CS_1(3));
|
||||
__raw_writel(ccr, TIMERS_VIRT_BASE + TMR_CCR);
|
||||
__raw_writel(ccr, mmp_timer_base + TMR_CCR);
|
||||
|
||||
/* set timer 0 to periodic mode, and timer 1 to free-running mode */
|
||||
__raw_writel(0x2, TIMERS_VIRT_BASE + TMR_CMR);
|
||||
__raw_writel(0x2, mmp_timer_base + TMR_CMR);
|
||||
|
||||
__raw_writel(0x1, TIMERS_VIRT_BASE + TMR_PLCR(0)); /* periodic */
|
||||
__raw_writel(0x7, TIMERS_VIRT_BASE + TMR_ICR(0)); /* clear status */
|
||||
__raw_writel(0x0, TIMERS_VIRT_BASE + TMR_IER(0));
|
||||
__raw_writel(0x1, mmp_timer_base + TMR_PLCR(0)); /* periodic */
|
||||
__raw_writel(0x7, mmp_timer_base + TMR_ICR(0)); /* clear status */
|
||||
__raw_writel(0x0, mmp_timer_base + TMR_IER(0));
|
||||
|
||||
__raw_writel(0x0, TIMERS_VIRT_BASE + TMR_PLCR(1)); /* free-running */
|
||||
__raw_writel(0x7, TIMERS_VIRT_BASE + TMR_ICR(1)); /* clear status */
|
||||
__raw_writel(0x0, TIMERS_VIRT_BASE + TMR_IER(1));
|
||||
__raw_writel(0x0, mmp_timer_base + TMR_PLCR(1)); /* free-running */
|
||||
__raw_writel(0x7, mmp_timer_base + TMR_ICR(1)); /* clear status */
|
||||
__raw_writel(0x0, mmp_timer_base + TMR_IER(1));
|
||||
|
||||
/* enable timer 1 counter */
|
||||
__raw_writel(0x2, TIMERS_VIRT_BASE + TMR_CER);
|
||||
__raw_writel(0x2, mmp_timer_base + TMR_CER);
|
||||
}
|
||||
|
||||
static struct irqaction timer_irq = {
|
||||
@ -203,3 +208,37 @@ void __init timer_init(int irq)
|
||||
clocksource_register_hz(&cksrc, CLOCK_TICK_RATE);
|
||||
clockevents_register_device(&ckevt);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static struct of_device_id mmp_timer_dt_ids[] = {
|
||||
{ .compatible = "mrvl,mmp-timer", },
|
||||
{}
|
||||
};
|
||||
|
||||
void __init mmp_dt_init_timer(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
int irq, ret;
|
||||
|
||||
np = of_find_matching_node(NULL, mmp_timer_dt_ids);
|
||||
if (!np) {
|
||||
ret = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
||||
irq = irq_of_parse_and_map(np, 0);
|
||||
if (!irq) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
mmp_timer_base = of_iomap(np, 0);
|
||||
if (!mmp_timer_base) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
timer_init(irq);
|
||||
return;
|
||||
out:
|
||||
pr_err("Failed to get timer from device tree with error:%d\n", ret);
|
||||
}
|
||||
#endif
|
||||
|
@ -15,7 +15,6 @@
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/hardware/gic.h>
|
||||
@ -95,22 +94,6 @@ MACHINE_END
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
static struct twl4030_platform_data beagle_twldata = {
|
||||
.irq_base = TWL4030_IRQ_BASE,
|
||||
.irq_end = TWL4030_IRQ_END,
|
||||
};
|
||||
|
||||
static void __init omap3_i2c_init(void)
|
||||
{
|
||||
omap3_pmic_init("twl4030", &beagle_twldata);
|
||||
}
|
||||
|
||||
static void __init omap3_init(void)
|
||||
{
|
||||
omap3_i2c_init();
|
||||
omap_generic_init();
|
||||
}
|
||||
|
||||
static const char *omap3_boards_compat[] __initdata = {
|
||||
"ti,omap3",
|
||||
NULL,
|
||||
@ -122,7 +105,7 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
|
||||
.init_early = omap3430_init_early,
|
||||
.init_irq = omap_init_irq,
|
||||
.handle_irq = omap3_intc_handle_irq,
|
||||
.init_machine = omap3_init,
|
||||
.init_machine = omap_generic_init,
|
||||
.timer = &omap3_timer,
|
||||
.dt_compat = omap3_boards_compat,
|
||||
.restart = omap_prcm_restart,
|
||||
@ -130,22 +113,6 @@ MACHINE_END
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP4
|
||||
static struct twl4030_platform_data sdp4430_twldata = {
|
||||
.irq_base = TWL6030_IRQ_BASE,
|
||||
.irq_end = TWL6030_IRQ_END,
|
||||
};
|
||||
|
||||
static void __init omap4_i2c_init(void)
|
||||
{
|
||||
omap4_pmic_init("twl6030", &sdp4430_twldata, NULL, 0);
|
||||
}
|
||||
|
||||
static void __init omap4_init(void)
|
||||
{
|
||||
omap4_i2c_init();
|
||||
omap_generic_init();
|
||||
}
|
||||
|
||||
static const char *omap4_boards_compat[] __initdata = {
|
||||
"ti,omap4",
|
||||
NULL,
|
||||
@ -157,7 +124,7 @@ DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)")
|
||||
.init_early = omap4430_init_early,
|
||||
.init_irq = omap_init_irq,
|
||||
.handle_irq = gic_handle_irq,
|
||||
.init_machine = omap4_init,
|
||||
.init_machine = omap_generic_init,
|
||||
.timer = &omap4_timer,
|
||||
.dt_compat = omap4_boards_compat,
|
||||
.restart = omap_prcm_restart,
|
||||
|
@ -700,11 +700,14 @@ static int __init omap2_init_devices(void)
|
||||
* in alphabetical order so they're easier to sort through.
|
||||
*/
|
||||
omap_init_audio();
|
||||
omap_init_mcpdm();
|
||||
omap_init_dmic();
|
||||
omap_init_camera();
|
||||
omap_init_mbox();
|
||||
omap_init_mcspi();
|
||||
/* If dtb is there, the devices will be created dynamically */
|
||||
if (!of_have_populated_dt()) {
|
||||
omap_init_dmic();
|
||||
omap_init_mcpdm();
|
||||
omap_init_mcspi();
|
||||
}
|
||||
omap_init_pmu();
|
||||
omap_hdq_init();
|
||||
omap_init_sti();
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#include <plat/omap_hwmod.h>
|
||||
#include <plat/omap_device.h>
|
||||
@ -146,7 +147,10 @@ static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
|
||||
*/
|
||||
static int __init omap2_gpio_init(void)
|
||||
{
|
||||
return omap_hwmod_for_each_by_class("gpio", omap2_gpio_dev_init,
|
||||
NULL);
|
||||
/* If dtb is there, the devices will be created dynamically */
|
||||
if (of_have_populated_dt())
|
||||
return -ENODEV;
|
||||
|
||||
return omap_hwmod_for_each_by_class("gpio", omap2_gpio_dev_init, NULL);
|
||||
}
|
||||
postcore_initcall(omap2_gpio_init);
|
||||
|
@ -16,48 +16,62 @@
|
||||
#include <linux/err.h>
|
||||
#include <mach/platform.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/i2c.h>
|
||||
|
||||
static struct i2c_pnx_data i2c0_data = {
|
||||
.name = I2C_CHIP_NAME "0",
|
||||
.base = PNX4008_I2C1_BASE,
|
||||
.irq = I2C_1_INT,
|
||||
static struct resource i2c0_resources[] = {
|
||||
{
|
||||
.start = PNX4008_I2C1_BASE,
|
||||
.end = PNX4008_I2C1_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = I2C_1_INT,
|
||||
.end = I2C_1_INT,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct i2c_pnx_data i2c1_data = {
|
||||
.name = I2C_CHIP_NAME "1",
|
||||
.base = PNX4008_I2C2_BASE,
|
||||
.irq = I2C_2_INT,
|
||||
static struct resource i2c1_resources[] = {
|
||||
{
|
||||
.start = PNX4008_I2C2_BASE,
|
||||
.end = PNX4008_I2C2_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = I2C_2_INT,
|
||||
.end = I2C_2_INT,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct i2c_pnx_data i2c2_data = {
|
||||
.name = "USB-I2C",
|
||||
.base = (PNX4008_USB_CONFIG_BASE + 0x300),
|
||||
.irq = USB_I2C_INT,
|
||||
static struct resource i2c2_resources[] = {
|
||||
{
|
||||
.start = PNX4008_USB_CONFIG_BASE + 0x300,
|
||||
.end = PNX4008_USB_CONFIG_BASE + 0x300 + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = USB_I2C_INT,
|
||||
.end = USB_I2C_INT,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device i2c0_device = {
|
||||
.name = "pnx-i2c",
|
||||
.name = "pnx-i2c.0",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &i2c0_data,
|
||||
},
|
||||
.resource = i2c0_resources,
|
||||
.num_resources = ARRAY_SIZE(i2c0_resources),
|
||||
};
|
||||
|
||||
static struct platform_device i2c1_device = {
|
||||
.name = "pnx-i2c",
|
||||
.name = "pnx-i2c.1",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.platform_data = &i2c1_data,
|
||||
},
|
||||
.resource = i2c1_resources,
|
||||
.num_resources = ARRAY_SIZE(i2c1_resources),
|
||||
};
|
||||
|
||||
static struct platform_device i2c2_device = {
|
||||
.name = "pnx-i2c",
|
||||
.name = "pnx-i2c.2",
|
||||
.id = 2,
|
||||
.dev = {
|
||||
.platform_data = &i2c2_data,
|
||||
},
|
||||
.resource = i2c2_resources,
|
||||
.num_resources = ARRAY_SIZE(i2c2_resources),
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
|
@ -1,64 +0,0 @@
|
||||
/*
|
||||
* PNX4008-specific tweaks for I2C IP3204 block
|
||||
*
|
||||
* Author: Vitaly Wool <vwool@ru.mvista.com>
|
||||
*
|
||||
* 2005 (c) MontaVista Software, Inc. 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.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_I2C_H__
|
||||
#define __ASM_ARCH_I2C_H__
|
||||
|
||||
enum {
|
||||
mstatus_tdi = 0x00000001,
|
||||
mstatus_afi = 0x00000002,
|
||||
mstatus_nai = 0x00000004,
|
||||
mstatus_drmi = 0x00000008,
|
||||
mstatus_active = 0x00000020,
|
||||
mstatus_scl = 0x00000040,
|
||||
mstatus_sda = 0x00000080,
|
||||
mstatus_rff = 0x00000100,
|
||||
mstatus_rfe = 0x00000200,
|
||||
mstatus_tff = 0x00000400,
|
||||
mstatus_tfe = 0x00000800,
|
||||
};
|
||||
|
||||
enum {
|
||||
mcntrl_tdie = 0x00000001,
|
||||
mcntrl_afie = 0x00000002,
|
||||
mcntrl_naie = 0x00000004,
|
||||
mcntrl_drmie = 0x00000008,
|
||||
mcntrl_daie = 0x00000020,
|
||||
mcntrl_rffie = 0x00000040,
|
||||
mcntrl_tffie = 0x00000080,
|
||||
mcntrl_reset = 0x00000100,
|
||||
mcntrl_cdbmode = 0x00000400,
|
||||
};
|
||||
|
||||
enum {
|
||||
rw_bit = 1 << 0,
|
||||
start_bit = 1 << 8,
|
||||
stop_bit = 1 << 9,
|
||||
};
|
||||
|
||||
#define I2C_REG_RX(a) ((a)->ioaddr) /* Rx FIFO reg (RO) */
|
||||
#define I2C_REG_TX(a) ((a)->ioaddr) /* Tx FIFO reg (WO) */
|
||||
#define I2C_REG_STS(a) ((a)->ioaddr + 0x04) /* Status reg (RO) */
|
||||
#define I2C_REG_CTL(a) ((a)->ioaddr + 0x08) /* Ctl reg */
|
||||
#define I2C_REG_CKL(a) ((a)->ioaddr + 0x0c) /* Clock divider low */
|
||||
#define I2C_REG_CKH(a) ((a)->ioaddr + 0x10) /* Clock divider high */
|
||||
#define I2C_REG_ADR(a) ((a)->ioaddr + 0x14) /* I2C address */
|
||||
#define I2C_REG_RFL(a) ((a)->ioaddr + 0x18) /* Rx FIFO level (RO) */
|
||||
#define I2C_REG_TFL(a) ((a)->ioaddr + 0x1c) /* Tx FIFO level (RO) */
|
||||
#define I2C_REG_RXB(a) ((a)->ioaddr + 0x20) /* Num of bytes Rx-ed (RO) */
|
||||
#define I2C_REG_TXB(a) ((a)->ioaddr + 0x24) /* Num of bytes Tx-ed (RO) */
|
||||
#define I2C_REG_TXS(a) ((a)->ioaddr + 0x28) /* Tx slave FIFO (RO) */
|
||||
#define I2C_REG_STFL(a) ((a)->ioaddr + 0x2c) /* Tx slave FIFO level (RO) */
|
||||
|
||||
#define HCLK_MHZ 13
|
||||
#define I2C_CHIP_NAME "PNX4008-I2C"
|
||||
|
||||
#endif /* __ASM_ARCH_I2C_H___ */
|
@ -3,6 +3,8 @@
|
||||
|
||||
extern void shmobile_earlytimer_init(void);
|
||||
extern struct sys_timer shmobile_timer;
|
||||
extern void shmobile_setup_delay(unsigned int max_cpu_core_mhz,
|
||||
unsigned int mult, unsigned int div);
|
||||
struct twd_local_timer;
|
||||
extern void shmobile_setup_console(void);
|
||||
extern void shmobile_secondary_vector(void);
|
||||
|
@ -142,6 +142,50 @@ static struct intc_desc p ## _desc __initdata = { \
|
||||
p ## _sense_registers, p ## _ack_registers) \
|
||||
}
|
||||
|
||||
#define INTC_IRQ_PINS_16H(p, base, vect, str) \
|
||||
\
|
||||
static struct resource p ## _resources[] __initdata = { \
|
||||
[0] = { \
|
||||
.start = base, \
|
||||
.end = base + 0x64, \
|
||||
.flags = IORESOURCE_MEM, \
|
||||
}, \
|
||||
}; \
|
||||
\
|
||||
enum { \
|
||||
p ## _UNUSED = 0, \
|
||||
INTC_IRQ_PINS_ENUM_16H(p), \
|
||||
}; \
|
||||
\
|
||||
static struct intc_vect p ## _vectors[] __initdata = { \
|
||||
INTC_IRQ_PINS_VECT_16H(p, vect), \
|
||||
}; \
|
||||
\
|
||||
static struct intc_mask_reg p ## _mask_registers[] __initdata = { \
|
||||
INTC_IRQ_PINS_MASK_16H(p, base), \
|
||||
}; \
|
||||
\
|
||||
static struct intc_prio_reg p ## _prio_registers[] __initdata = { \
|
||||
INTC_IRQ_PINS_PRIO_16H(p, base), \
|
||||
}; \
|
||||
\
|
||||
static struct intc_sense_reg p ## _sense_registers[] __initdata = { \
|
||||
INTC_IRQ_PINS_SENSE_16H(p, base), \
|
||||
}; \
|
||||
\
|
||||
static struct intc_mask_reg p ## _ack_registers[] __initdata = { \
|
||||
INTC_IRQ_PINS_ACK_16H(p, base), \
|
||||
}; \
|
||||
\
|
||||
static struct intc_desc p ## _desc __initdata = { \
|
||||
.name = str, \
|
||||
.resource = p ## _resources, \
|
||||
.num_resources = ARRAY_SIZE(p ## _resources), \
|
||||
.hw = INTC_HW_DESC(p ## _vectors, NULL, \
|
||||
p ## _mask_registers, p ## _prio_registers, \
|
||||
p ## _sense_registers, p ## _ack_registers) \
|
||||
}
|
||||
|
||||
#define INTC_IRQ_PINS_32(p, base, vect, str) \
|
||||
\
|
||||
static struct resource p ## _resources[] __initdata = { \
|
||||
|
@ -7,7 +7,7 @@
|
||||
#define gic_spi(nr) ((nr) + 32)
|
||||
|
||||
/* INTCS */
|
||||
#define INTCS_VECT_BASE 0x2200
|
||||
#define INTCS_VECT_BASE 0x3400
|
||||
#define INTCS_VECT(n, vect) INTC_VECT((n), INTCS_VECT_BASE + (vect))
|
||||
#define intcs_evt2irq(evt) evt2irq(INTCS_VECT_BASE + (evt))
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/sh_intc.h>
|
||||
@ -305,14 +306,16 @@ static DECLARE_INTC_DESC(intca_desc, "sh7372-intca",
|
||||
intca_mask_registers, intca_prio_registers,
|
||||
NULL);
|
||||
|
||||
INTC_IRQ_PINS_32(intca_irq_pins, 0xe6900000,
|
||||
INTC_VECT, "sh7372-intca-irq-pins");
|
||||
INTC_IRQ_PINS_16(intca_irq_pins_lo, 0xe6900000,
|
||||
INTC_VECT, "sh7372-intca-irq-lo");
|
||||
|
||||
INTC_IRQ_PINS_16H(intca_irq_pins_hi, 0xe6900000,
|
||||
INTC_VECT, "sh7372-intca-irq-hi");
|
||||
|
||||
enum {
|
||||
UNUSED_INTCS = 0,
|
||||
ENABLED_INTCS,
|
||||
|
||||
INTCS,
|
||||
|
||||
/* interrupt sources INTCS */
|
||||
|
||||
/* IRQ0S - IRQ31S */
|
||||
@ -426,8 +429,6 @@ static struct intc_vect intcs_vectors[] = {
|
||||
INTCS_VECT(CPORTS2R, 0x1a20),
|
||||
/* CEC */
|
||||
INTCS_VECT(JPU6E, 0x1a80),
|
||||
|
||||
INTC_VECT(INTCS, 0xf80),
|
||||
};
|
||||
|
||||
static struct intc_group intcs_groups[] __initdata = {
|
||||
@ -490,9 +491,6 @@ static struct intc_mask_reg intcs_mask_registers[] = {
|
||||
{ 0xffd5019c, 0xffd501dc, 8, /* IMR7SA3 / IMCR7SA3 */
|
||||
{ MFIS2_INTCS, CPORTS2R, 0, 0,
|
||||
JPU6E, 0, 0, 0 } },
|
||||
{ 0xffd20104, 0, 16, /* INTAMASK */
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, INTCS } },
|
||||
};
|
||||
|
||||
/* Priority is needed for INTCA to receive the INTCS interrupt */
|
||||
@ -557,18 +555,30 @@ static void __iomem *intcs_ffd5;
|
||||
void __init sh7372_init_irq(void)
|
||||
{
|
||||
void __iomem *intevtsa;
|
||||
int n;
|
||||
|
||||
intcs_ffd2 = ioremap_nocache(0xffd20000, PAGE_SIZE);
|
||||
intevtsa = intcs_ffd2 + 0x100;
|
||||
intcs_ffd5 = ioremap_nocache(0xffd50000, PAGE_SIZE);
|
||||
|
||||
register_intc_controller(&intca_desc);
|
||||
register_intc_controller(&intca_irq_pins_desc);
|
||||
register_intc_controller(&intca_irq_pins_lo_desc);
|
||||
register_intc_controller(&intca_irq_pins_hi_desc);
|
||||
register_intc_controller(&intcs_desc);
|
||||
|
||||
/* setup dummy cascade chip for INTCS */
|
||||
n = evt2irq(0xf80);
|
||||
irq_alloc_desc_at(n, numa_node_id());
|
||||
irq_set_chip_and_handler_name(n, &dummy_irq_chip,
|
||||
handle_level_irq, "level");
|
||||
set_irq_flags(n, IRQF_VALID); /* yuck */
|
||||
|
||||
/* demux using INTEVTSA */
|
||||
irq_set_handler_data(evt2irq(0xf80), (void *)intevtsa);
|
||||
irq_set_chained_handler(evt2irq(0xf80), intcs_demux);
|
||||
irq_set_handler_data(n, (void *)intevtsa);
|
||||
irq_set_chained_handler(n, intcs_demux);
|
||||
|
||||
/* unmask INTCS in INTAMASK */
|
||||
iowrite16(0, intcs_ffd2 + 0x104);
|
||||
}
|
||||
|
||||
static unsigned short ffd2[0x200];
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/uio_driver.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/input.h>
|
||||
@ -1092,3 +1093,50 @@ void __init sh7372_add_early_devices(void)
|
||||
/* override timer setup with soc-specific code */
|
||||
shmobile_timer.init = sh7372_earlytimer_init;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_USE_OF
|
||||
|
||||
void __init sh7372_add_early_devices_dt(void)
|
||||
{
|
||||
shmobile_setup_delay(800, 1, 3); /* Cortex-A8 @ 800MHz */
|
||||
|
||||
early_platform_add_devices(sh7372_early_devices,
|
||||
ARRAY_SIZE(sh7372_early_devices));
|
||||
|
||||
/* setup early console here as well */
|
||||
shmobile_setup_console();
|
||||
}
|
||||
|
||||
static const struct of_dev_auxdata sh7372_auxdata_lookup[] __initconst = {
|
||||
{ }
|
||||
};
|
||||
|
||||
void __init sh7372_add_standard_devices_dt(void)
|
||||
{
|
||||
/* clocks are setup late during boot in the case of DT */
|
||||
sh7372_clock_init();
|
||||
|
||||
platform_add_devices(sh7372_early_devices,
|
||||
ARRAY_SIZE(sh7372_early_devices));
|
||||
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
sh7372_auxdata_lookup, NULL);
|
||||
}
|
||||
|
||||
static const char *sh7372_boards_compat_dt[] __initdata = {
|
||||
"renesas,sh7372",
|
||||
NULL,
|
||||
};
|
||||
|
||||
DT_MACHINE_START(SH7372_DT, "Generic SH7372 (Flattened Device Tree)")
|
||||
.map_io = sh7372_map_io,
|
||||
.init_early = sh7372_add_early_devices_dt,
|
||||
.nr_irqs = NR_IRQS_LEGACY,
|
||||
.init_irq = sh7372_init_irq,
|
||||
.handle_irq = shmobile_handle_irq_intc,
|
||||
.init_machine = sh7372_add_standard_devices_dt,
|
||||
.timer = &shmobile_timer,
|
||||
.dt_compat = sh7372_boards_compat_dt,
|
||||
MACHINE_END
|
||||
|
||||
#endif /* CONFIG_USE_OF */
|
||||
|
@ -19,9 +19,26 @@
|
||||
*
|
||||
*/
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/smp_twd.h>
|
||||
|
||||
void __init shmobile_setup_delay(unsigned int max_cpu_core_mhz,
|
||||
unsigned int mult, unsigned int div)
|
||||
{
|
||||
/* calculate a worst-case loops-per-jiffy value
|
||||
* based on maximum cpu core mhz setting and the
|
||||
* __delay() implementation in arch/arm/lib/delay.S
|
||||
*
|
||||
* this will result in a longer delay than expected
|
||||
* when the cpu core runs on lower frequencies.
|
||||
*/
|
||||
|
||||
unsigned int value = (1000000 * mult) / (HZ * div);
|
||||
|
||||
lpj_fine = max_cpu_core_mhz * value;
|
||||
}
|
||||
|
||||
static void __init shmobile_late_time_init(void)
|
||||
{
|
||||
/*
|
||||
|
@ -5,39 +5,19 @@
|
||||
if ARCH_SPEAR3XX
|
||||
|
||||
menu "SPEAr3xx Implementations"
|
||||
config BOARD_SPEAR300_EVB
|
||||
bool "SPEAr300 Evaluation Board"
|
||||
select MACH_SPEAR300
|
||||
help
|
||||
Supports ST SPEAr300 Evaluation Board
|
||||
|
||||
config BOARD_SPEAR310_EVB
|
||||
bool "SPEAr310 Evaluation Board"
|
||||
select MACH_SPEAR310
|
||||
help
|
||||
Supports ST SPEAr310 Evaluation Board
|
||||
|
||||
config BOARD_SPEAR320_EVB
|
||||
bool "SPEAr320 Evaluation Board"
|
||||
select MACH_SPEAR320
|
||||
help
|
||||
Supports ST SPEAr320 Evaluation Board
|
||||
|
||||
endmenu
|
||||
|
||||
config MACH_SPEAR300
|
||||
bool "SPEAr300"
|
||||
bool "SPEAr300 Machine support with Device Tree"
|
||||
help
|
||||
Supports ST SPEAr300 Machine
|
||||
Supports ST SPEAr300 machine configured via the device-tree
|
||||
|
||||
config MACH_SPEAR310
|
||||
bool "SPEAr310"
|
||||
bool "SPEAr310 Machine support with Device Tree"
|
||||
help
|
||||
Supports ST SPEAr310 Machine
|
||||
Supports ST SPEAr310 machine configured via the device-tree
|
||||
|
||||
config MACH_SPEAR320
|
||||
bool "SPEAr320"
|
||||
bool "SPEAr320 Machine support with Device Tree"
|
||||
help
|
||||
Supports ST SPEAr320 Machine
|
||||
|
||||
Supports ST SPEAr320 machine configured via the device-tree
|
||||
endmenu
|
||||
endif #ARCH_SPEAR3XX
|
||||
|
@ -3,24 +3,13 @@
|
||||
#
|
||||
|
||||
# common files
|
||||
obj-y += spear3xx.o clock.o
|
||||
obj-$(CONFIG_ARCH_SPEAR3XX) += spear3xx.o clock.o
|
||||
|
||||
# spear300 specific files
|
||||
obj-$(CONFIG_MACH_SPEAR300) += spear300.o
|
||||
|
||||
# spear300 boards files
|
||||
obj-$(CONFIG_BOARD_SPEAR300_EVB) += spear300_evb.o
|
||||
|
||||
|
||||
# spear310 specific files
|
||||
obj-$(CONFIG_MACH_SPEAR310) += spear310.o
|
||||
|
||||
# spear310 boards files
|
||||
obj-$(CONFIG_BOARD_SPEAR310_EVB) += spear310_evb.o
|
||||
|
||||
|
||||
# spear320 specific files
|
||||
obj-$(CONFIG_MACH_SPEAR320) += spear320.o
|
||||
|
||||
# spear320 boards files
|
||||
obj-$(CONFIG_BOARD_SPEAR320_EVB) += spear320_evb.o
|
||||
|
@ -1,3 +1,7 @@
|
||||
zreladdr-y += 0x00008000
|
||||
params_phys-y := 0x00000100
|
||||
initrd_phys-y := 0x00800000
|
||||
|
||||
dtb-$(CONFIG_MACH_SPEAR300) += spear300-evb.dtb
|
||||
dtb-$(CONFIG_MACH_SPEAR310) += spear310-evb.dtb
|
||||
dtb-$(CONFIG_MACH_SPEAR320) += spear320-evb.dtb
|
||||
|
@ -11,12 +11,112 @@
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#include <linux/clkdev.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <plat/clock.h>
|
||||
#include <mach/misc_regs.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
#define PLL1_CTR (MISC_BASE + 0x008)
|
||||
#define PLL1_FRQ (MISC_BASE + 0x00C)
|
||||
#define PLL1_MOD (MISC_BASE + 0x010)
|
||||
#define PLL2_CTR (MISC_BASE + 0x014)
|
||||
/* PLL_CTR register masks */
|
||||
#define PLL_ENABLE 2
|
||||
#define PLL_MODE_SHIFT 4
|
||||
#define PLL_MODE_MASK 0x3
|
||||
#define PLL_MODE_NORMAL 0
|
||||
#define PLL_MODE_FRACTION 1
|
||||
#define PLL_MODE_DITH_DSB 2
|
||||
#define PLL_MODE_DITH_SSB 3
|
||||
|
||||
#define PLL2_FRQ (MISC_BASE + 0x018)
|
||||
/* PLL FRQ register masks */
|
||||
#define PLL_DIV_N_SHIFT 0
|
||||
#define PLL_DIV_N_MASK 0xFF
|
||||
#define PLL_DIV_P_SHIFT 8
|
||||
#define PLL_DIV_P_MASK 0x7
|
||||
#define PLL_NORM_FDBK_M_SHIFT 24
|
||||
#define PLL_NORM_FDBK_M_MASK 0xFF
|
||||
#define PLL_DITH_FDBK_M_SHIFT 16
|
||||
#define PLL_DITH_FDBK_M_MASK 0xFFFF
|
||||
|
||||
#define PLL2_MOD (MISC_BASE + 0x01C)
|
||||
#define PLL_CLK_CFG (MISC_BASE + 0x020)
|
||||
#define CORE_CLK_CFG (MISC_BASE + 0x024)
|
||||
/* CORE CLK CFG register masks */
|
||||
#define PLL_HCLK_RATIO_SHIFT 10
|
||||
#define PLL_HCLK_RATIO_MASK 0x3
|
||||
#define HCLK_PCLK_RATIO_SHIFT 8
|
||||
#define HCLK_PCLK_RATIO_MASK 0x3
|
||||
|
||||
#define PERIP_CLK_CFG (MISC_BASE + 0x028)
|
||||
/* PERIP_CLK_CFG register masks */
|
||||
#define UART_CLK_SHIFT 4
|
||||
#define UART_CLK_MASK 0x1
|
||||
#define FIRDA_CLK_SHIFT 5
|
||||
#define FIRDA_CLK_MASK 0x3
|
||||
#define GPT0_CLK_SHIFT 8
|
||||
#define GPT1_CLK_SHIFT 11
|
||||
#define GPT2_CLK_SHIFT 12
|
||||
#define GPT_CLK_MASK 0x1
|
||||
#define AUX_CLK_PLL3_VAL 0
|
||||
#define AUX_CLK_PLL1_VAL 1
|
||||
|
||||
#define PERIP1_CLK_ENB (MISC_BASE + 0x02C)
|
||||
/* PERIP1_CLK_ENB register masks */
|
||||
#define UART_CLK_ENB 3
|
||||
#define SSP_CLK_ENB 5
|
||||
#define I2C_CLK_ENB 7
|
||||
#define JPEG_CLK_ENB 8
|
||||
#define FIRDA_CLK_ENB 10
|
||||
#define GPT1_CLK_ENB 11
|
||||
#define GPT2_CLK_ENB 12
|
||||
#define ADC_CLK_ENB 15
|
||||
#define RTC_CLK_ENB 17
|
||||
#define GPIO_CLK_ENB 18
|
||||
#define DMA_CLK_ENB 19
|
||||
#define SMI_CLK_ENB 21
|
||||
#define GMAC_CLK_ENB 23
|
||||
#define USBD_CLK_ENB 24
|
||||
#define USBH_CLK_ENB 25
|
||||
#define C3_CLK_ENB 31
|
||||
|
||||
#define RAS_CLK_ENB (MISC_BASE + 0x034)
|
||||
|
||||
#define PRSC1_CLK_CFG (MISC_BASE + 0x044)
|
||||
#define PRSC2_CLK_CFG (MISC_BASE + 0x048)
|
||||
#define PRSC3_CLK_CFG (MISC_BASE + 0x04C)
|
||||
/* gpt synthesizer register masks */
|
||||
#define GPT_MSCALE_SHIFT 0
|
||||
#define GPT_MSCALE_MASK 0xFFF
|
||||
#define GPT_NSCALE_SHIFT 12
|
||||
#define GPT_NSCALE_MASK 0xF
|
||||
|
||||
#define AMEM_CLK_CFG (MISC_BASE + 0x050)
|
||||
#define EXPI_CLK_CFG (MISC_BASE + 0x054)
|
||||
#define CLCD_CLK_SYNT (MISC_BASE + 0x05C)
|
||||
#define FIRDA_CLK_SYNT (MISC_BASE + 0x060)
|
||||
#define UART_CLK_SYNT (MISC_BASE + 0x064)
|
||||
#define GMAC_CLK_SYNT (MISC_BASE + 0x068)
|
||||
#define RAS1_CLK_SYNT (MISC_BASE + 0x06C)
|
||||
#define RAS2_CLK_SYNT (MISC_BASE + 0x070)
|
||||
#define RAS3_CLK_SYNT (MISC_BASE + 0x074)
|
||||
#define RAS4_CLK_SYNT (MISC_BASE + 0x078)
|
||||
/* aux clk synthesiser register masks for irda to ras4 */
|
||||
#define AUX_SYNT_ENB 31
|
||||
#define AUX_EQ_SEL_SHIFT 30
|
||||
#define AUX_EQ_SEL_MASK 1
|
||||
#define AUX_EQ1_SEL 0
|
||||
#define AUX_EQ2_SEL 1
|
||||
#define AUX_XSCALE_SHIFT 16
|
||||
#define AUX_XSCALE_MASK 0xFFF
|
||||
#define AUX_YSCALE_SHIFT 0
|
||||
#define AUX_YSCALE_MASK 0xFFF
|
||||
|
||||
/* root clks */
|
||||
/* 32 KHz oscillator clock */
|
||||
@ -411,6 +511,21 @@ static struct clk usbd_clk = {
|
||||
.recalc = &follow_parent,
|
||||
};
|
||||
|
||||
/* clock derived from usbh clk */
|
||||
/* usbh0 clock */
|
||||
static struct clk usbh0_clk = {
|
||||
.flags = ALWAYS_ENABLED,
|
||||
.pclk = &usbh_clk,
|
||||
.recalc = &follow_parent,
|
||||
};
|
||||
|
||||
/* usbh1 clock */
|
||||
static struct clk usbh1_clk = {
|
||||
.flags = ALWAYS_ENABLED,
|
||||
.pclk = &usbh_clk,
|
||||
.recalc = &follow_parent,
|
||||
};
|
||||
|
||||
/* clock derived from ahb clk */
|
||||
/* apb masks structure */
|
||||
static struct bus_clk_masks apb_masks = {
|
||||
@ -652,109 +767,126 @@ static struct clk pwm_clk = {
|
||||
|
||||
/* array of all spear 3xx clock lookups */
|
||||
static struct clk_lookup spear_clk_lookups[] = {
|
||||
{ .con_id = "apb_pclk", .clk = &dummy_apb_pclk},
|
||||
CLKDEV_INIT(NULL, "apb_pclk", &dummy_apb_pclk),
|
||||
/* root clks */
|
||||
{ .con_id = "osc_32k_clk", .clk = &osc_32k_clk},
|
||||
{ .con_id = "osc_24m_clk", .clk = &osc_24m_clk},
|
||||
CLKDEV_INIT(NULL, "osc_32k_clk", &osc_32k_clk),
|
||||
CLKDEV_INIT(NULL, "osc_24m_clk", &osc_24m_clk),
|
||||
/* clock derived from 32 KHz osc clk */
|
||||
{ .dev_id = "rtc-spear", .clk = &rtc_clk},
|
||||
CLKDEV_INIT("fc900000.rtc", NULL, &rtc_clk),
|
||||
/* clock derived from 24 MHz osc clk */
|
||||
{ .con_id = "pll1_clk", .clk = &pll1_clk},
|
||||
{ .con_id = "pll3_48m_clk", .clk = &pll3_48m_clk},
|
||||
{ .dev_id = "wdt", .clk = &wdt_clk},
|
||||
CLKDEV_INIT(NULL, "pll1_clk", &pll1_clk),
|
||||
CLKDEV_INIT(NULL, "pll3_48m_clk", &pll3_48m_clk),
|
||||
CLKDEV_INIT("fc880000.wdt", NULL, &wdt_clk),
|
||||
/* clock derived from pll1 clk */
|
||||
{ .con_id = "cpu_clk", .clk = &cpu_clk},
|
||||
{ .con_id = "ahb_clk", .clk = &ahb_clk},
|
||||
{ .con_id = "uart_synth_clk", .clk = &uart_synth_clk},
|
||||
{ .con_id = "firda_synth_clk", .clk = &firda_synth_clk},
|
||||
{ .con_id = "gpt0_synth_clk", .clk = &gpt0_synth_clk},
|
||||
{ .con_id = "gpt1_synth_clk", .clk = &gpt1_synth_clk},
|
||||
{ .con_id = "gpt2_synth_clk", .clk = &gpt2_synth_clk},
|
||||
{ .dev_id = "uart", .clk = &uart_clk},
|
||||
{ .dev_id = "firda", .clk = &firda_clk},
|
||||
{ .dev_id = "gpt0", .clk = &gpt0_clk},
|
||||
{ .dev_id = "gpt1", .clk = &gpt1_clk},
|
||||
{ .dev_id = "gpt2", .clk = &gpt2_clk},
|
||||
CLKDEV_INIT(NULL, "cpu_clk", &cpu_clk),
|
||||
CLKDEV_INIT(NULL, "ahb_clk", &ahb_clk),
|
||||
CLKDEV_INIT(NULL, "uart_synth_clk", &uart_synth_clk),
|
||||
CLKDEV_INIT(NULL, "firda_synth_clk", &firda_synth_clk),
|
||||
CLKDEV_INIT(NULL, "gpt0_synth_clk", &gpt0_synth_clk),
|
||||
CLKDEV_INIT(NULL, "gpt1_synth_clk", &gpt1_synth_clk),
|
||||
CLKDEV_INIT(NULL, "gpt2_synth_clk", &gpt2_synth_clk),
|
||||
CLKDEV_INIT("d0000000.serial", NULL, &uart_clk),
|
||||
CLKDEV_INIT("firda", NULL, &firda_clk),
|
||||
CLKDEV_INIT("gpt0", NULL, &gpt0_clk),
|
||||
CLKDEV_INIT("gpt1", NULL, &gpt1_clk),
|
||||
CLKDEV_INIT("gpt2", NULL, &gpt2_clk),
|
||||
/* clock derived from pll3 clk */
|
||||
{ .dev_id = "designware_udc", .clk = &usbd_clk},
|
||||
{ .con_id = "usbh_clk", .clk = &usbh_clk},
|
||||
CLKDEV_INIT("designware_udc", NULL, &usbd_clk),
|
||||
CLKDEV_INIT(NULL, "usbh_clk", &usbh_clk),
|
||||
/* clock derived from usbh clk */
|
||||
CLKDEV_INIT(NULL, "usbh.0_clk", &usbh0_clk),
|
||||
CLKDEV_INIT(NULL, "usbh.1_clk", &usbh1_clk),
|
||||
/* clock derived from ahb clk */
|
||||
{ .con_id = "apb_clk", .clk = &apb_clk},
|
||||
{ .dev_id = "i2c_designware.0", .clk = &i2c_clk},
|
||||
{ .dev_id = "dma", .clk = &dma_clk},
|
||||
{ .dev_id = "jpeg", .clk = &jpeg_clk},
|
||||
{ .dev_id = "gmac", .clk = &gmac_clk},
|
||||
{ .dev_id = "smi", .clk = &smi_clk},
|
||||
{ .dev_id = "c3", .clk = &c3_clk},
|
||||
CLKDEV_INIT(NULL, "apb_clk", &apb_clk),
|
||||
CLKDEV_INIT("d0180000.i2c", NULL, &i2c_clk),
|
||||
CLKDEV_INIT("fc400000.dma", NULL, &dma_clk),
|
||||
CLKDEV_INIT("jpeg", NULL, &jpeg_clk),
|
||||
CLKDEV_INIT("e0800000.eth", NULL, &gmac_clk),
|
||||
CLKDEV_INIT("fc000000.flash", NULL, &smi_clk),
|
||||
CLKDEV_INIT("c3", NULL, &c3_clk),
|
||||
/* clock derived from apb clk */
|
||||
{ .dev_id = "adc", .clk = &adc_clk},
|
||||
{ .dev_id = "ssp-pl022.0", .clk = &ssp0_clk},
|
||||
{ .dev_id = "gpio", .clk = &gpio_clk},
|
||||
CLKDEV_INIT("adc", NULL, &adc_clk),
|
||||
CLKDEV_INIT("d0100000.spi", NULL, &ssp0_clk),
|
||||
CLKDEV_INIT("fc980000.gpio", NULL, &gpio_clk),
|
||||
};
|
||||
|
||||
/* array of all spear 300 clock lookups */
|
||||
#ifdef CONFIG_MACH_SPEAR300
|
||||
static struct clk_lookup spear300_clk_lookups[] = {
|
||||
{ .dev_id = "clcd", .clk = &clcd_clk},
|
||||
{ .con_id = "fsmc", .clk = &fsmc_clk},
|
||||
{ .dev_id = "gpio1", .clk = &gpio1_clk},
|
||||
{ .dev_id = "keyboard", .clk = &kbd_clk},
|
||||
{ .dev_id = "sdhci", .clk = &sdhci_clk},
|
||||
CLKDEV_INIT("60000000.clcd", NULL, &clcd_clk),
|
||||
CLKDEV_INIT("94000000.flash", NULL, &fsmc_clk),
|
||||
CLKDEV_INIT("a9000000.gpio", NULL, &gpio1_clk),
|
||||
CLKDEV_INIT("a0000000.kbd", NULL, &kbd_clk),
|
||||
CLKDEV_INIT("70000000.sdhci", NULL, &sdhci_clk),
|
||||
};
|
||||
|
||||
void __init spear300_clk_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spear_clk_lookups); i++)
|
||||
clk_register(&spear_clk_lookups[i]);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spear300_clk_lookups); i++)
|
||||
clk_register(&spear300_clk_lookups[i]);
|
||||
|
||||
clk_init();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* array of all spear 310 clock lookups */
|
||||
#ifdef CONFIG_MACH_SPEAR310
|
||||
static struct clk_lookup spear310_clk_lookups[] = {
|
||||
{ .con_id = "fsmc", .clk = &fsmc_clk},
|
||||
{ .con_id = "emi", .clk = &emi_clk},
|
||||
{ .dev_id = "uart1", .clk = &uart1_clk},
|
||||
{ .dev_id = "uart2", .clk = &uart2_clk},
|
||||
{ .dev_id = "uart3", .clk = &uart3_clk},
|
||||
{ .dev_id = "uart4", .clk = &uart4_clk},
|
||||
{ .dev_id = "uart5", .clk = &uart5_clk},
|
||||
CLKDEV_INIT("44000000.flash", NULL, &fsmc_clk),
|
||||
CLKDEV_INIT(NULL, "emi", &emi_clk),
|
||||
CLKDEV_INIT("b2000000.serial", NULL, &uart1_clk),
|
||||
CLKDEV_INIT("b2080000.serial", NULL, &uart2_clk),
|
||||
CLKDEV_INIT("b2100000.serial", NULL, &uart3_clk),
|
||||
CLKDEV_INIT("b2180000.serial", NULL, &uart4_clk),
|
||||
CLKDEV_INIT("b2200000.serial", NULL, &uart5_clk),
|
||||
};
|
||||
|
||||
void __init spear310_clk_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spear_clk_lookups); i++)
|
||||
clk_register(&spear_clk_lookups[i]);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spear310_clk_lookups); i++)
|
||||
clk_register(&spear310_clk_lookups[i]);
|
||||
|
||||
clk_init();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* array of all spear 320 clock lookups */
|
||||
#ifdef CONFIG_MACH_SPEAR320
|
||||
static struct clk_lookup spear320_clk_lookups[] = {
|
||||
{ .dev_id = "clcd", .clk = &clcd_clk},
|
||||
{ .con_id = "fsmc", .clk = &fsmc_clk},
|
||||
{ .dev_id = "i2c_designware.1", .clk = &i2c1_clk},
|
||||
{ .con_id = "emi", .clk = &emi_clk},
|
||||
{ .dev_id = "pwm", .clk = &pwm_clk},
|
||||
{ .dev_id = "sdhci", .clk = &sdhci_clk},
|
||||
{ .dev_id = "c_can_platform.0", .clk = &can0_clk},
|
||||
{ .dev_id = "c_can_platform.1", .clk = &can1_clk},
|
||||
{ .dev_id = "ssp-pl022.1", .clk = &ssp1_clk},
|
||||
{ .dev_id = "ssp-pl022.2", .clk = &ssp2_clk},
|
||||
{ .dev_id = "uart1", .clk = &uart1_clk},
|
||||
{ .dev_id = "uart2", .clk = &uart2_clk},
|
||||
CLKDEV_INIT("90000000.clcd", NULL, &clcd_clk),
|
||||
CLKDEV_INIT("4c000000.flash", NULL, &fsmc_clk),
|
||||
CLKDEV_INIT("a7000000.i2c", NULL, &i2c1_clk),
|
||||
CLKDEV_INIT(NULL, "emi", &emi_clk),
|
||||
CLKDEV_INIT("pwm", NULL, &pwm_clk),
|
||||
CLKDEV_INIT("70000000.sdhci", NULL, &sdhci_clk),
|
||||
CLKDEV_INIT("c_can_platform.0", NULL, &can0_clk),
|
||||
CLKDEV_INIT("c_can_platform.1", NULL, &can1_clk),
|
||||
CLKDEV_INIT("a5000000.spi", NULL, &ssp1_clk),
|
||||
CLKDEV_INIT("a6000000.spi", NULL, &ssp2_clk),
|
||||
CLKDEV_INIT("a3000000.serial", NULL, &uart1_clk),
|
||||
CLKDEV_INIT("a4000000.serial", NULL, &uart2_clk),
|
||||
};
|
||||
#endif
|
||||
|
||||
void __init spear3xx_clk_init(void)
|
||||
void __init spear320_clk_init(void)
|
||||
{
|
||||
int i, cnt;
|
||||
struct clk_lookup *lookups;
|
||||
|
||||
if (machine_is_spear300()) {
|
||||
cnt = ARRAY_SIZE(spear300_clk_lookups);
|
||||
lookups = spear300_clk_lookups;
|
||||
} else if (machine_is_spear310()) {
|
||||
cnt = ARRAY_SIZE(spear310_clk_lookups);
|
||||
lookups = spear310_clk_lookups;
|
||||
} else {
|
||||
cnt = ARRAY_SIZE(spear320_clk_lookups);
|
||||
lookups = spear320_clk_lookups;
|
||||
}
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(spear_clk_lookups); i++)
|
||||
clk_register(&spear_clk_lookups[i]);
|
||||
|
||||
for (i = 0; i < cnt; i++)
|
||||
clk_register(&lookups[i]);
|
||||
for (i = 0; i < ARRAY_SIZE(spear320_clk_lookups); i++)
|
||||
clk_register(&spear320_clk_lookups[i]);
|
||||
|
||||
clk_init();
|
||||
}
|
||||
#endif
|
||||
|
@ -14,6 +14,7 @@
|
||||
#ifndef __MACH_GENERIC_H
|
||||
#define __MACH_GENERIC_H
|
||||
|
||||
#include <linux/amba/pl08x.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/amba/bus.h>
|
||||
@ -21,26 +22,15 @@
|
||||
#include <asm/mach/map.h>
|
||||
#include <plat/padmux.h>
|
||||
|
||||
/* spear3xx declarations */
|
||||
/*
|
||||
* Each GPT has 2 timer channels
|
||||
* Following GPT channels will be used as clock source and clockevent
|
||||
*/
|
||||
#define SPEAR_GPT0_BASE SPEAR3XX_ML1_TMR_BASE
|
||||
#define SPEAR_GPT0_CHAN0_IRQ SPEAR3XX_IRQ_CPU_GPT1_1
|
||||
#define SPEAR_GPT0_CHAN1_IRQ SPEAR3XX_IRQ_CPU_GPT1_2
|
||||
|
||||
/* Add spear3xx family device structure declarations here */
|
||||
extern struct amba_device spear3xx_gpio_device;
|
||||
extern struct amba_device spear3xx_uart_device;
|
||||
extern struct sys_timer spear3xx_timer;
|
||||
extern struct pl022_ssp_controller pl022_plat_data;
|
||||
extern struct pl08x_platform_data pl080_plat_data;
|
||||
|
||||
/* Add spear3xx family function declarations here */
|
||||
void __init spear3xx_clk_init(void);
|
||||
void __init spear_setup_timer(void);
|
||||
void __init spear_setup_timer(resource_size_t base, int irq);
|
||||
void __init spear3xx_map_io(void);
|
||||
void __init spear3xx_init_irq(void);
|
||||
void __init spear3xx_init(void);
|
||||
void __init spear3xx_dt_init_irq(void);
|
||||
|
||||
void spear_restart(char, const char *);
|
||||
|
||||
@ -99,9 +89,6 @@ extern struct pmx_dev spear3xx_pmx_plgpio_45_46_49_50;
|
||||
|
||||
/* spear300 declarations */
|
||||
#ifdef CONFIG_MACH_SPEAR300
|
||||
/* Add spear300 machine device structure declarations here */
|
||||
extern struct amba_device spear300_gpio1_device;
|
||||
|
||||
/* pad mux modes */
|
||||
extern struct pmx_mode spear300_nand_mode;
|
||||
extern struct pmx_mode spear300_nor_mode;
|
||||
@ -133,16 +120,13 @@ extern struct pmx_dev spear300_pmx_telecom_sdhci_4bit;
|
||||
extern struct pmx_dev spear300_pmx_telecom_sdhci_8bit;
|
||||
extern struct pmx_dev spear300_pmx_gpio1;
|
||||
|
||||
/* Add spear300 machine function declarations here */
|
||||
void __init spear300_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
u8 pmx_dev_count);
|
||||
/* Add spear300 machine declarations here */
|
||||
void __init spear300_clk_init(void);
|
||||
|
||||
#endif /* CONFIG_MACH_SPEAR300 */
|
||||
|
||||
/* spear310 declarations */
|
||||
#ifdef CONFIG_MACH_SPEAR310
|
||||
/* Add spear310 machine device structure declarations here */
|
||||
|
||||
/* pad mux devices */
|
||||
extern struct pmx_dev spear310_pmx_emi_cs_0_1_4_5;
|
||||
extern struct pmx_dev spear310_pmx_emi_cs_2_3;
|
||||
@ -153,16 +137,13 @@ extern struct pmx_dev spear310_pmx_fsmc;
|
||||
extern struct pmx_dev spear310_pmx_rs485_0_1;
|
||||
extern struct pmx_dev spear310_pmx_tdm0;
|
||||
|
||||
/* Add spear310 machine function declarations here */
|
||||
void __init spear310_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
u8 pmx_dev_count);
|
||||
/* Add spear310 machine declarations here */
|
||||
void __init spear310_clk_init(void);
|
||||
|
||||
#endif /* CONFIG_MACH_SPEAR310 */
|
||||
|
||||
/* spear320 declarations */
|
||||
#ifdef CONFIG_MACH_SPEAR320
|
||||
/* Add spear320 machine device structure declarations here */
|
||||
|
||||
/* pad mux modes */
|
||||
extern struct pmx_mode spear320_auto_net_smii_mode;
|
||||
extern struct pmx_mode spear320_auto_net_mii_mode;
|
||||
@ -193,9 +174,8 @@ extern struct pmx_dev spear320_pmx_smii0;
|
||||
extern struct pmx_dev spear320_pmx_smii1;
|
||||
extern struct pmx_dev spear320_pmx_i2c1;
|
||||
|
||||
/* Add spear320 machine function declarations here */
|
||||
void __init spear320_init(struct pmx_mode *pmx_mode, struct pmx_dev **pmx_devs,
|
||||
u8 pmx_dev_count);
|
||||
/* Add spear320 machine declarations here */
|
||||
void __init spear320_clk_init(void);
|
||||
|
||||
#endif /* CONFIG_MACH_SPEAR320 */
|
||||
|
||||
|
@ -1,23 +1 @@
|
||||
/*
|
||||
* arch/arm/mach-spear3xx/include/mach/hardware.h
|
||||
*
|
||||
* Hardware definitions for SPEAr3xx machine family
|
||||
*
|
||||
* Copyright (C) 2009 ST Microelectronics
|
||||
* Viresh Kumar<viresh.kumar@st.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.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_HARDWARE_H
|
||||
#define __MACH_HARDWARE_H
|
||||
|
||||
#include <plat/hardware.h>
|
||||
#include <mach/spear.h>
|
||||
|
||||
/* Vitual to physical translation of statically mapped space */
|
||||
#define IO_ADDRESS(x) (x | 0xF0000000)
|
||||
|
||||
#endif /* __MACH_HARDWARE_H */
|
||||
/* empty */
|
||||
|
@ -14,141 +14,15 @@
|
||||
#ifndef __MACH_IRQS_H
|
||||
#define __MACH_IRQS_H
|
||||
|
||||
/* SPEAr3xx IRQ definitions */
|
||||
#define SPEAR3XX_IRQ_HW_ACCEL_MOD_0 0
|
||||
/* FIXME: probe all these from DT */
|
||||
#define SPEAR3XX_IRQ_INTRCOMM_RAS_ARM 1
|
||||
#define SPEAR3XX_IRQ_CPU_GPT1_1 2
|
||||
#define SPEAR3XX_IRQ_CPU_GPT1_2 3
|
||||
#define SPEAR3XX_IRQ_BASIC_GPT1_1 4
|
||||
#define SPEAR3XX_IRQ_BASIC_GPT1_2 5
|
||||
#define SPEAR3XX_IRQ_BASIC_GPT2_1 6
|
||||
#define SPEAR3XX_IRQ_BASIC_GPT2_2 7
|
||||
#define SPEAR3XX_IRQ_BASIC_DMA 8
|
||||
#define SPEAR3XX_IRQ_BASIC_SMI 9
|
||||
#define SPEAR3XX_IRQ_BASIC_RTC 10
|
||||
#define SPEAR3XX_IRQ_BASIC_GPIO 11
|
||||
#define SPEAR3XX_IRQ_BASIC_WDT 12
|
||||
#define SPEAR3XX_IRQ_DDR_CONTROLLER 13
|
||||
#define SPEAR3XX_IRQ_SYS_ERROR 14
|
||||
#define SPEAR3XX_IRQ_WAKEUP_RCV 15
|
||||
#define SPEAR3XX_IRQ_JPEG 16
|
||||
#define SPEAR3XX_IRQ_IRDA 17
|
||||
#define SPEAR3XX_IRQ_ADC 18
|
||||
#define SPEAR3XX_IRQ_UART 19
|
||||
#define SPEAR3XX_IRQ_SSP 20
|
||||
#define SPEAR3XX_IRQ_I2C 21
|
||||
#define SPEAR3XX_IRQ_MAC_1 22
|
||||
#define SPEAR3XX_IRQ_MAC_2 23
|
||||
#define SPEAR3XX_IRQ_USB_DEV 24
|
||||
#define SPEAR3XX_IRQ_USB_H_OHCI_0 25
|
||||
#define SPEAR3XX_IRQ_USB_H_EHCI_0 26
|
||||
#define SPEAR3XX_IRQ_USB_H_EHCI_1 SPEAR3XX_IRQ_USB_H_EHCI_0
|
||||
#define SPEAR3XX_IRQ_USB_H_OHCI_1 27
|
||||
#define SPEAR3XX_IRQ_GEN_RAS_1 28
|
||||
#define SPEAR3XX_IRQ_GEN_RAS_2 29
|
||||
#define SPEAR3XX_IRQ_GEN_RAS_3 30
|
||||
#define SPEAR3XX_IRQ_HW_ACCEL_MOD_1 31
|
||||
#define SPEAR3XX_IRQ_VIC_END 32
|
||||
|
||||
#define SPEAR3XX_VIRQ_START SPEAR3XX_IRQ_VIC_END
|
||||
|
||||
/* SPEAr300 Virtual irq definitions */
|
||||
/* IRQs sharing IRQ_GEN_RAS_1 */
|
||||
#define SPEAR300_VIRQ_IT_PERS_S (SPEAR3XX_VIRQ_START + 0)
|
||||
#define SPEAR300_VIRQ_IT_CHANGE_S (SPEAR3XX_VIRQ_START + 1)
|
||||
#define SPEAR300_VIRQ_I2S (SPEAR3XX_VIRQ_START + 2)
|
||||
#define SPEAR300_VIRQ_TDM (SPEAR3XX_VIRQ_START + 3)
|
||||
#define SPEAR300_VIRQ_CAMERA_L (SPEAR3XX_VIRQ_START + 4)
|
||||
#define SPEAR300_VIRQ_CAMERA_F (SPEAR3XX_VIRQ_START + 5)
|
||||
#define SPEAR300_VIRQ_CAMERA_V (SPEAR3XX_VIRQ_START + 6)
|
||||
#define SPEAR300_VIRQ_KEYBOARD (SPEAR3XX_VIRQ_START + 7)
|
||||
#define SPEAR300_VIRQ_GPIO1 (SPEAR3XX_VIRQ_START + 8)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_3 */
|
||||
#define SPEAR300_IRQ_CLCD SPEAR3XX_IRQ_GEN_RAS_3
|
||||
|
||||
/* IRQs sharing IRQ_INTRCOMM_RAS_ARM */
|
||||
#define SPEAR300_IRQ_SDHCI SPEAR3XX_IRQ_INTRCOMM_RAS_ARM
|
||||
|
||||
/* SPEAr310 Virtual irq definitions */
|
||||
/* IRQs sharing IRQ_GEN_RAS_1 */
|
||||
#define SPEAR310_VIRQ_SMII0 (SPEAR3XX_VIRQ_START + 0)
|
||||
#define SPEAR310_VIRQ_SMII1 (SPEAR3XX_VIRQ_START + 1)
|
||||
#define SPEAR310_VIRQ_SMII2 (SPEAR3XX_VIRQ_START + 2)
|
||||
#define SPEAR310_VIRQ_SMII3 (SPEAR3XX_VIRQ_START + 3)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII0 (SPEAR3XX_VIRQ_START + 4)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII1 (SPEAR3XX_VIRQ_START + 5)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII2 (SPEAR3XX_VIRQ_START + 6)
|
||||
#define SPEAR310_VIRQ_WAKEUP_SMII3 (SPEAR3XX_VIRQ_START + 7)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_2 */
|
||||
#define SPEAR310_VIRQ_UART1 (SPEAR3XX_VIRQ_START + 8)
|
||||
#define SPEAR310_VIRQ_UART2 (SPEAR3XX_VIRQ_START + 9)
|
||||
#define SPEAR310_VIRQ_UART3 (SPEAR3XX_VIRQ_START + 10)
|
||||
#define SPEAR310_VIRQ_UART4 (SPEAR3XX_VIRQ_START + 11)
|
||||
#define SPEAR310_VIRQ_UART5 (SPEAR3XX_VIRQ_START + 12)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_3 */
|
||||
#define SPEAR310_VIRQ_EMI (SPEAR3XX_VIRQ_START + 13)
|
||||
#define SPEAR310_VIRQ_PLGPIO (SPEAR3XX_VIRQ_START + 14)
|
||||
|
||||
/* IRQs sharing IRQ_INTRCOMM_RAS_ARM */
|
||||
#define SPEAR310_VIRQ_TDM_HDLC (SPEAR3XX_VIRQ_START + 15)
|
||||
#define SPEAR310_VIRQ_RS485_0 (SPEAR3XX_VIRQ_START + 16)
|
||||
#define SPEAR310_VIRQ_RS485_1 (SPEAR3XX_VIRQ_START + 17)
|
||||
|
||||
/* SPEAr320 Virtual irq definitions */
|
||||
/* IRQs sharing IRQ_GEN_RAS_1 */
|
||||
#define SPEAR320_VIRQ_EMI (SPEAR3XX_VIRQ_START + 0)
|
||||
#define SPEAR320_VIRQ_CLCD (SPEAR3XX_VIRQ_START + 1)
|
||||
#define SPEAR320_VIRQ_SPP (SPEAR3XX_VIRQ_START + 2)
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_2 */
|
||||
#define SPEAR320_IRQ_SDHCI SPEAR3XX_IRQ_GEN_RAS_2
|
||||
|
||||
/* IRQs sharing IRQ_GEN_RAS_3 */
|
||||
#define SPEAR320_VIRQ_PLGPIO (SPEAR3XX_VIRQ_START + 3)
|
||||
#define SPEAR320_VIRQ_I2S_PLAY (SPEAR3XX_VIRQ_START + 4)
|
||||
#define SPEAR320_VIRQ_I2S_REC (SPEAR3XX_VIRQ_START + 5)
|
||||
|
||||
/* IRQs sharing IRQ_INTRCOMM_RAS_ARM */
|
||||
#define SPEAR320_VIRQ_CANU (SPEAR3XX_VIRQ_START + 6)
|
||||
#define SPEAR320_VIRQ_CANL (SPEAR3XX_VIRQ_START + 7)
|
||||
#define SPEAR320_VIRQ_UART1 (SPEAR3XX_VIRQ_START + 8)
|
||||
#define SPEAR320_VIRQ_UART2 (SPEAR3XX_VIRQ_START + 9)
|
||||
#define SPEAR320_VIRQ_SSP1 (SPEAR3XX_VIRQ_START + 10)
|
||||
#define SPEAR320_VIRQ_SSP2 (SPEAR3XX_VIRQ_START + 11)
|
||||
#define SPEAR320_VIRQ_SMII0 (SPEAR3XX_VIRQ_START + 12)
|
||||
#define SPEAR320_VIRQ_MII1_SMII1 (SPEAR3XX_VIRQ_START + 13)
|
||||
#define SPEAR320_VIRQ_WAKEUP_SMII0 (SPEAR3XX_VIRQ_START + 14)
|
||||
#define SPEAR320_VIRQ_WAKEUP_MII1_SMII1 (SPEAR3XX_VIRQ_START + 15)
|
||||
#define SPEAR320_VIRQ_I2C1 (SPEAR3XX_VIRQ_START + 16)
|
||||
|
||||
/*
|
||||
* GPIO pins virtual irqs
|
||||
* Use the lowest number for the GPIO virtual IRQs base on which subarchs
|
||||
* we have compiled in
|
||||
*/
|
||||
#if defined(CONFIG_MACH_SPEAR310)
|
||||
#define SPEAR3XX_GPIO_INT_BASE (SPEAR3XX_VIRQ_START + 18)
|
||||
#elif defined(CONFIG_MACH_SPEAR320)
|
||||
#define SPEAR3XX_GPIO_INT_BASE (SPEAR3XX_VIRQ_START + 17)
|
||||
#else
|
||||
#define SPEAR3XX_GPIO_INT_BASE (SPEAR3XX_VIRQ_START + 9)
|
||||
#endif
|
||||
|
||||
#define SPEAR300_GPIO1_INT_BASE (SPEAR3XX_GPIO_INT_BASE + 8)
|
||||
#define SPEAR3XX_PLGPIO_COUNT 102
|
||||
|
||||
#if defined(CONFIG_MACH_SPEAR310) || defined(CONFIG_MACH_SPEAR320)
|
||||
#define SPEAR3XX_PLGPIO_INT_BASE (SPEAR3XX_GPIO_INT_BASE + 8)
|
||||
#define SPEAR3XX_GPIO_INT_END (SPEAR3XX_PLGPIO_INT_BASE + \
|
||||
SPEAR3XX_PLGPIO_COUNT)
|
||||
#else
|
||||
#define SPEAR3XX_GPIO_INT_END (SPEAR300_GPIO1_INT_BASE + 8)
|
||||
#endif
|
||||
|
||||
#define SPEAR3XX_VIRQ_END SPEAR3XX_GPIO_INT_END
|
||||
#define NR_IRQS SPEAR3XX_VIRQ_END
|
||||
#define NR_IRQS 160
|
||||
|
||||
#endif /* __MACH_IRQS_H */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user