blob: d9674e2d5f4fbd528032b3793678aa311f459cdb [file] [log] [blame]
/*
* Copyright (C) 2013 Ambarella,Inc. - http://www.ambarella.com/
* Author: Cao Rongrong <rrcao@ambarella.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/ "skeleton.dtsi"
/ {
compatible = "ambarella,s2";
interrupt-parent = <&gic>;
aliases {
serial0 = &uart0;
serial1 = &uart1;
serial2 = &uart2;
serial3 = &uart3;
nand = &nand0;
sd0 = &sdmmc0;
sd1 = &sdmmc1;
i2c0 = &i2c0;
i2c1 = &i2c1;
i2c2 = &i2c2;
spi0 = &spi0;
ethernet0 = &mac0;
};
/* the memory node will be overwritten in Amboot,
* here is just the default value. */
memory {
device_type = "memory";
reg = <0x00200000 0x07e00000>; /* 126M */
};
chosen {
linux,stdout-path = &uart0;
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a9";
reg = <0>;
};
cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a9";
reg = <1>;
};
};
gic: interrupt-controller@f0001000 {
compatible = "arm,cortex-a9-gic";
interrupt-controller;
#interrupt-cells = <3>;
reg = <0xf0001000 0x1000>,
<0xf0000100 0x0100>;
};
apb@70000000 { /* APB */
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x70000000 0x01000000>;
ranges;
timer7: timer@7000b064 {
compatible = "ambarella,clock-source";
reg = <0x7000b064 0x10 0x7000b030 0x4>;
interrupts = <0 108 0x1>;
ctrl-offset = <24>; /* bit offset in timer-ctrl reg */
};
timer8: timer@7000b074 {
compatible = "ambarella,clock-event";
reg = <0x7000b074 0x10 0x7000b030 0x4>;
interrupts = <0 109 0x1>;
ctrl-offset = <28>; /* bit offset in timer-ctrl reg */
};
/* local_timer is not used, just for debug purpose */
local_timer: timer@7000b054 {
compatible = "ambarella,local-clock-event";
reg = <0x7000b054 0x10 0x7000b030 0x4 0x7000b044 0x10 0x7000b030 0x4>;
interrupts = <0 107 0x1 0 106 0x1>;
ctrl-offset = <20 16>; /* bit offset in timer-ctrl reg */
};
uart0: uart@70005000 {
compatible = "ambarella,uart";
reg = <0x70005000 0x100>;
interrupts = <0 9 0x04>;
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins>;
status = "ok";
/* amb,tx-fifo-fix; */
};
uart1: uart@7001f000 {
compatible = "ambarella,uart";
reg = <0x7001f000 0x100>;
interrupts = <0 25 0x04>;
status = "disabled";
amb,msr-used; /* use Modem Status Register */
/* amb,tx-fifo-fix; */
};
uart2: uart@70014000 {
compatible = "ambarella,uart";
reg = <0x70014000 0x100>;
interrupts = <0 91 0x04>;
status = "disabled";
amb,msr-used; /* use Modem Status Register */
/* amb,tx-fifo-fix; */
};
uart3: uart@70015000 {
compatible = "ambarella,uart";
reg = <0x70015000 0x100>;
interrupts = <0 92 0x04>;
status = "disabled";
amb,msr-used; /* use Modem Status Register */
/* amb,tx-fifo-fix; */
};
i2c0: i2c@70003000 {
compatible = "ambarella,i2c";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x70003000 0x1000>;
interrupts = <0 19 0x04>;
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
clock-frequency = <100000>;
amb,i2c-class = <0x81>;
status = "disabled";
};
i2c1: i2c@70007000 {
compatible = "ambarella,i2c";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x70007000 0x1000>;
interrupts = <0 36 0x04>;
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
amb,i2c-class = <0x08>;
status = "disabled";
};
i2c2: i2c@70013000 {
compatible = "ambarella,i2c";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x70013000 0x1000>;
interrupts = <0 90 0x04>;
pinctrl-names = "default";
pinctrl-0 = <&i2c2_pins>;
clock-frequency = <100000>;
amb,i2c-class = <0x81>;
status = "disabled";
};
spi0: spi@70002000 {
compatible = "ambarella,spi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x70002000 0x1000>;
interrupts = <0 20 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins>;
amb,clk-freq = <60000000>;
amb,msb-first-only;
};
spi_slave@7001e000 {
compatible = "ambarella,spi-slave";
reg = <0x7001e000 0x1000>;
interrupts = <0 26 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&spi_slave_pins>;
};
adc@7000d000 {
compatible = "ambarella,adc";
reg = <0x7000d000 0x1000>;
interrupts = <0 34 0x4>;
clock-frequency = <3000000>;
};
ir@70006000 {
compatible = "ambarella,ir";
reg = <0x70006000 0x1000>;
interrupts = <0 22 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&ir_pins>;
};
wdt@7000c000 {
compatible = "ambarella,wdt";
reg = <0x7000c000 0x1000>;
/* interrupts = <0 101 0x4>; */
timeout-sec = <15>;
};
rtc@7000d000 {
compatible = "ambarella,rtc";
reg = <0x7000d000 0x1000>;
};
pwm: pwm@70004000 {
compatible = "ambarella,pwm";
reg = <0x70004000 0x1000 0x70008000 0x10>;
#pwm-cells = <3>;
};
pinctrl: pinctrl@70009000 {
compatible = "ambarella,pinctrl", "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x70009000 0x1000>,
<0x7000a000 0x1000>,
<0x7000e000 0x1000>,
<0x70010000 0x1000>,
<0x70011000 0x1000>;
reg-names = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
#gpio-range-cells = <3>;
gpio: gpio@0 {
compatible = "ambarella,gpio";
/* gpio interrupts to vic */
interrupts = <0 10 0x04>,
<0 11 0x04>,
<0 30 0x04>,
<0 29 0x04>,
<0 48 0x04>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl 0 0 160>;
interrupt-controller;
#interrupt-cells = <2>;
};
uart0_pins: uart0@0 {
reg = <0>;
amb,pinmux-ids = <0x100e 0x100f>;
};
uart1_pins: uart1@0 {
reg = <0>;
amb,pinmux-ids = <0x1034 0x1035>,
/* virtual pins, just for configuration purpose */
<0x1021 0x0022 0x1032 0x1033 0x1034 0x1035>;
};
uart1_4pins: uart1_4pins@0 {
reg = <0>;
amb,pinmux-ids = <0x1032 0x1033 0x1034 0x1035>,
/* virtual pins, just for configuration purpose */
<0x1021 0x0022 0x1032 0x1033 0x1034 0x1035>;
};
uart2_pins: uart2@0 {
reg = <0>;
amb,pinmux-ids = <0x100a 0x1012>;
};
uart3_pins: uart3@0 {
reg = <0>;
amb,pinmux-ids = <0x1013 0x1014>;
};
nand0_pins: nand0@0 {
reg = <0>;
amb,pinmux-ids = <0x1027>; /* just WP is shared with GPIO */
};
sdmmc0_pins: sdmmc0@0 {
reg = <0>;
amb,pinmux-ids = <0x1041 0x1042 0x1043 0x1044>;
};
sdmmc1_pins_1bit: sdmmc1@0 {
reg = <0>;
amb,pinmux-ids = <0x1045 0x1046 0x1047
0x104b 0x104c>;
};
sdmmc1_pins_4bit: sdmmc1@1 {
reg = <1>;
amb,pinmux-ids = <0x1045 0x1046 0x1047 0x1048
0x1049 0x104a 0x104b 0x104c>;
};
eth_pins:eth0@0 {
reg = <0>;
amb,pinmux-ids = <0x1008 0x101c 0x101d 0x101e 0x101f
0x1028 0x1029 0x102a 0x102b 0x102c
0x102f 0x1030 0x1052 0x1053 0x105c
0x105d 0x105e 0x105f 0x107c 0x107d
0x107e 0x107f 0x1080 0x1088 0x1089
0x108a>;
};
i2c0_pins: i2c0@0 {
reg = <0>;
amb,pinmux-ids = <0x1000 0x1001>;
};
i2c1_pins: i2c1@0 {
reg = <0>;
amb,pinmux-ids = <0x1056 0x1057>;
};
i2c2_pins: i2c2@0 {
reg = <0>;
amb,pinmux-ids = <0x1024 0x1025>;
};
ir_pins: ir0@0 {
reg = <0>;
amb,pinmux-ids = <0x1023>;
};
i2s0_pins: i2s0@0 {
reg = <0>;
amb,pinmux-ids = <0x104d 0x104e 0x104f 0x1050 0x1051>,
/* virtual pins, just for configuration purpose.*/
<0x0064 0x0065>;
};
usb_host_pins: uhc0@0 {
reg = <0>;
amb,pinmux-ids = <0x1007 0x1009>,
/* virtual pins, just for configuration purpose.
EHCI_PRT_PWR and APP_PRT_OVCURR share the hw
mode with SPI enable pin. */
<0x1060 0x1061>;
};
pwm0_pins: pwm0@0 {
reg = <0>;
amb,pinmux-ids = <0x102d>;
};
pwm1_pins: pwm1@0 {
reg = <0>;
amb,pinmux-ids = <0x102e>;
};
pwm2_pins: pwm2@0 {
reg = <0>;
amb,pinmux-ids = <0x1032>,
/* virtual pins, just for
configuration purpose.*/
<0x0021 0x0022>;
};
pwm3_pins: pwm3@0 {
reg = <0>;
amb,pinmux-ids = <0x1033>,
/* virtual pins, just for
configuration purpose.*/
<0x0022 0x0003>;
};
pwm5_pins: pwm5@0 {
reg = <0>;
amb,pinmux-ids = <0x1010>;
};
spi0_pins: spi0@0 {
reg = <0>;
amb,pinmux-ids = <0x1002 0x1003 0x1004>;
};
spi_slave_pins: spi_slave@0 {
reg = <0>;
amb,pinmux-ids = <0x1032 0x1033 0x1034 0x1035>,
/* virtual pins, just for
configuration purpose.*/
<0x0021 0x1022>;
};
};
};
ahb@60000000 { /* AHB */
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x60000000 0x01000000>;
ranges;
dma: dma@60005000 {
compatible = "ambarella,dma";
reg = <0x60005000 0x1000>;
interrupts = <0 15 0x4>;
#dma-cells = <2>;
dma-channels = <5>;
dma-requests = <5>;
dma-trans-type = <0 1 1 1 1>; /* 0-memcpy ,1-slave*/
amb,copy-align = <3>;
};
nand0: nand@60001000 {
compatible = "ambarella,nand";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x60001000 0x1000>, /* fio reg address */
<0x60012000 0x1000>, /* fdma reg address */
<0x60000000 0x4>; /* fifo base */
interrupts = <0 16 0x04>, /* fio_cmd_irq */
<0 17 0x04>, /* fio_dma_irq */
<0 33 0x04>; /* fdma_irq */
pinctrl-names = "default";
pinctrl-0 = <&nand0_pins>;
nand-on-flash-bbt;
amb,enable-wp;
};
i2s0: i2s@6000a000 {
compatible = "ambarella,i2s";
reg = <0x6000a000 0x1000>;
pinctrl-names = "default";
pinctrl-0 = <&i2s0_pins>;
amb,i2s-channels = <2>;
amb,default-mclk = <12288000>;
dmas = <&dma 1 1>,
<&dma 0 1>;
dma-names = "tx", "rx";
};
udc@60006000 {
compatible = "ambarella,udc";
reg = <0x60006000 0x2000 0x70170088 0x4>;
interrupts = <0 4 0x04>;
amb,usbphy = <&usbphy>;
amb,dma-addr-fix;
};
ehci@60018000 {
compatible = "ambarella,ehci";
reg = <0x60018000 0x1000>;
interrupts = <0 73 0x04>;
amb,usbphy = <&usbphy>;
};
ohci@60019000 {
compatible = "ambarella,ohci";
reg = <0x60019000 0x1000>;
interrupts = <0 89 0x04>;
amb,usbphy = <&usbphy>;
status = "disabled";
};
sdmmc0: sdmmc0@60002000 {
compatible = "ambarella,sdmmc";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x60002000 0x1000>,
<0x60001000 0x80>, /* fio reg address */
<0x701701d0 0x4>;
interrupts = <0 18 0x4>;
amb,clk-name = "gclk_sd";
amb,wait-tmo = <10000>; /* in millisecond */
amb,switch_vol_tmo = <20>;
amb,max-blk-size = <524288>; /* valid value: 4K<<n */
amb,phy-timing = <0x00000001 0xe3e0e3e0 0x00000000>,
<0x00000080 0xe3e0e3e0 0x00071c00>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc0_pins>;
slot@0 {
reg = <0>;
global-id = <0>;
max-frequency = <48000000>;
bus-width = <8>;
amb,caps-ddr;
cap-sdio-irq;
};
};
sdmmc1: sdmmc1@6000c000 {
compatible = "ambarella,sdmmc";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x6000c000 0x1000>,
<0x60001000 0x80>, /* fio reg address */
<0x701701d0 0x4>;
interrupts = <0 52 0x4>;
amb,dma-addr-fix;
amb,clk-name = "gclk_sdio";
amb,wait-tmo = <10000>; /* in millisecond */
amb,switch_vol_tmo = <20>;
amb,max-blk-size = <524288>; /* valid value: 4K<<n */
amb,phy-timing = <0x00000001 0x1c1f1c1f 0x00000000>,
<0x00000080 0x1c1f1c1f 0x00e0e000>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc1_pins_4bit>;
slot@0 {
reg = <0>;
global-id = <1>;
max-frequency = <48000000>;
bus-width = <4>;
amb,caps-ddr;
cap-sdio-irq;
};
};
mac0: ethernet@6000e000 {
compatible = "ambarella,eth";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x6000e000 0x2000>;
interrupts = <0 27 0x4>;
amb,support-gmii;
amb,tx-ring-size = <64>;
amb,rx-ring-size = <64>;
amb,ipc-rx;
pinctrl-names = "default";
pinctrl-0 = <&eth_pins>;
};
};
axi@f0000000 { /* AXI */
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0xf0000000 0x00030000>;
ranges;
crypto@f0020000 {
compatible = "ambarella,crypto";
reg = <0xf0020000 0x8000>;
interrupts = <0 122 0x1>, <0 121 0x1>, <0 120 0x1>, <0 123 0x1>;
interrupt-names = "aes-irq", "des-irq", "md5-irq", "sha1-irq";
amb,cap-md5-sha1;
amb,data-swap;
amb,reg-64bit;
};
};
rct@70170000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x70170000 0x1000>;
ranges;
usbphy: usbphy@70170050 {
compatible = "ambarella,usbphy";
reg = <0x70170050 0x4 0x6001b00c 0x4 0x70170088 0x4>;
amb,host-phy-num = <1>;
};
};
iav {
compatible = "ambarella,iav";
};
bogus_bus {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
dummycodec: codec@0 {
compatible = "ambarella,dummycodec";
};
};
};