blob: e85dfdd6b97d67b8d4d06e8dc06473ca93269efb [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,s2l";
interrupt-parent = <&intc>;
aliases {
serial0 = &uart0;
serial1 = &uart1;
nand = &nand0;
sd0 = &sdmmc0;
sd1 = &sdmmc1;
sd2 = &sdmmc2;
spinor = &spinor0;
spinand = &spinand0;
i2c0 = &i2c0;
i2c1 = &i2c1;
i2c2 = &i2c2;
spi0 = &spi0;
spi1 = &spi1;
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;
/* the gpio used to disconnect RESET signal to
* dram, used for self-refresh, can be overwritten. */
ambarella,dram-reset-ctrl = <5>;
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
clock-latency = <100000>;
/* the highest frequency is gotten in runtime */
cpufreq_tbl = < /*core_clk cortex_clk*/
24000 96000
108000 504000>;
cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a9";
reg = <0>;
};
};
apb@e8000000 { /* APB */
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0xe8000000 0x01000000>;
ranges;
timer7: timer@e800b064 {
compatible = "ambarella,clock-source";
reg = <0xe800b064 0x10 0xe800b030 0x4>;
interrupts = <62 0x1>;
ctrl-offset = <24>; /* bit offset in timer-ctrl reg */
};
timer8: timer@e800b074 {
compatible = "ambarella,clock-event";
reg = <0xe800b074 0x10 0xe800b030 0x4>;
interrupts = <63 0x1>;
ctrl-offset = <28>; /* bit offset in timer-ctrl reg */
};
uart0: uart@e8005000 {
compatible = "ambarella,uart";
reg = <0xe8005000 0x1000>;
interrupts = <9 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins>;
status = "ok";
/* amb,tx-fifo-fix; */
};
i2c0: i2c@e8003000 {
compatible = "ambarella,i2c";
#address-cells = <1>;
#size-cells = <0>;
reg = <0xe8003000 0x1000>;
interrupts = <19 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
clock-frequency = <100000>;
amb,i2c-class = <0x81>;
/* amb,duty-cycle = <0>; */
status = "disabled";
};
i2c1: i2c@e8001000 {
compatible = "ambarella,i2c";
#address-cells = <1>;
#size-cells = <0>;
reg = <0xe8001000 0x1000>;
interrupts = <51 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
amb,i2c-class = <0x08>;
status = "disabled";
};
i2c2: i2c@e8007000 {
compatible = "ambarella,i2c";
#address-cells = <1>;
#size-cells = <0>;
reg = <0xe8007000 0x1000>;
interrupts = <36 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&i2c2_pins>;
clock-frequency = <100000>;
amb,i2c-class = <0x81>;
status = "disabled";
};
adc@e801d000 {
compatible = "ambarella,adc";
reg = <0xe801d000 0x1000>;
interrupts = <34 0x4>;
clock-frequency = <3000000>;
};
ir@e8006000 {
compatible = "ambarella,ir";
reg = <0xe8006000 0x1000>;
interrupts = <22 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&ir_pins>;
};
wdt@e800c000 {
compatible = "ambarella,wdt";
reg = <0xe800c000 0x1000>;
/* interrupts = <21 0x4>; */
timeout-sec = <15>;
};
rtc@e8015000 {
compatible = "ambarella,rtc";
reg = <0xe8015000 0x1000>;
rtc,wakeup;
};
pwm: pwm@e8008000 {
compatible = "ambarella,pwm";
reg = <0xe8008000 0x1000>;
#pwm-cells = <3>;
};
pinctrl: pinctrl@e8009000 {
compatible = "ambarella,pinctrl", "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
reg = <0xe8009000 0x1000>,
<0xe800a000 0x1000>,
<0xe800e000 0x1000>,
<0xe8010000 0x1000>,
<0xe8016000 0x1000>;
reg-names = "gpio0", "gpio1", "gpio2", "gpio3", "iomux";
#gpio-range-cells = <3>;
gpio: gpio@0 {
compatible = "ambarella,gpio";
/* gpio interrupts to vic */
interrupts = <10 0x4 11 0x4 30 0x4 29 0x4>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl 0 0 128>;
interrupt-controller;
#interrupt-cells = <2>;
};
uart0_pins: uart0@0 {
reg = <0>;
amb,pinmux-ids = <0x1027 0x1028>;
};
uart1_pins_a: uart1@0 {
reg = <0>;
amb,pinmux-ids = <0x2001 0x2002>;
};
uart1_pins_b: uart1@1 {
reg = <1>;
amb,pinmux-ids = <0x200f 0x2010>;
};
uart1_pins_c: uart1@2 {
reg = <2>;
amb,pinmux-ids = <0x2013 0x2014>;
};
uart1_pins_d: uart1@3 {
reg = <3>;
amb,pinmux-ids = <0x3022 0x3023>;
};
uart1_pins_e: uart1@4 {
reg = <4>;
amb,pinmux-ids = <0x2027 0x2028>;
};
uart1_flow_pins_a: uart1_flow@0 {
reg = <0>;
amb,pinmux-ids = <0x2003 0x2004>;
};
uart1_flow_pins_b: uart1_flow@1 {
reg = <1>;
amb,pinmux-ids = <0x5005 0x5006>;
};
uart1_flow_pins_c: uart1_flow@2 {
reg = <2>;
amb,pinmux-ids = <0x2011 0x2012>;
};
uart1_flow_pins_d: uart1_flow@3 {
reg = <3>;
amb,pinmux-ids = <0x3015 0x3016>;
};
uart1_flow_pins_e: uart1_flow@4 {
reg = <4>;
amb,pinmux-ids = <0x3024 0x3025>;
};
nand0_pins: nand0@0 {
reg = <0>;
amb,pinmux-ids = <0x2036 0x2037 0x2038 0x203d
0x203e 0x203f 0x2040 0x2041
0x2042 0x2043 0x2044 0x2045
0x2046 0x2047 0x2048>;
};
spinor0_pins: spinor0@0 {
reg = <0>;
amb,pinmux-ids = <0x3037 0x3038 0x303d 0x303e
0x303f 0x3040 0x3041 0x3042
0x3043 0x3044 0x3045 0x3046
0x3047>;
};
sdmmc0_cd_pin: sdmmc0_cd@0 {
reg = <0>;
amb,pinmux-ids = <0x203b>;
};
sdmmc0_wp_pin: sdmmc0_wp@0 {
reg = <0>;
amb,pinmux-ids = <0x203c>;
};
sdmmc0_pins_1bit: sdmmc0@0 {
reg = <0>;
amb,pinmux-ids = <0x2039 0x203a 0x2049>;
};
sdmmc0_pins_4bit: sdmmc0@1 {
reg = <1>;
amb,pinmux-ids = <0x2039 0x203a 0x2049
0x204a 0x204b 0x204c>;
};
sdmmc0_pins_8bit: sdmmc0@2 {
reg = <2>;
amb,pinmux-ids = <0x2039 0x203a 0x2049 0x204a 0x204b
0x204c 0x204d 0x204e 0x204f 0x2050>;
};
sdmmc1_cd_pin: sdmmc1_cd@0 {
reg = <0>;
amb,pinmux-ids = <0x2057>;
};
sdmmc1_wp_pin: sdmmc1_wp@0 {
reg = <0>;
amb,pinmux-ids = <0x2058>;
};
sdmmc1_pins_1bit: sdmmc1@0 {
reg = <0>;
amb,pinmux-ids = <0x2051 0x2052 0x2053>;
};
sdmmc1_pins_4bit: sdmmc1@1 {
reg = <1>;
amb,pinmux-ids = <0x2051 0x2052 0x2053
0x2054 0x2055 0x2056>;
};
sdmmc2_cd_pin: sdmmc2_cd@0 {
reg = <0>;
amb,pinmux-ids = <0x5008>;
};
sdmmc2_wp_pin: sdmmc2_wp@0 {
reg = <0>;
amb,pinmux-ids = <0x5009>;
};
sdmmc2_pins_1bit: sdmmc2@0 {
reg = <0>;
amb,pinmux-ids = <0x5007 0x500a 0x5012>;
};
sdmmc2_pins_4bit: sdmmc2@1 {
reg = <1>;
amb,pinmux-ids = <0x5007 0x500a 0x500b
0x500c 0x500d 0x5012>;
};
sdmmc2_pins_8bit: sdmmc2@2 {
reg = <2>;
amb,pinmux-ids = <0x5007 0x500a 0x500b 0x500c 0x500d
0x500e 0x500f 0x5010 0x5011 0x5012>;
};
eth_pins: eth0@0 {
reg = <0>;
amb,pinmux-ids = <0x4019 0x401a 0x102e 0x102f
0x1030 0x1031 0x1032 0x1033
0x1034 0x1035>;
};
i2c0_pins: i2c0@0 {
reg = <0>;
amb,pinmux-ids = <0x101b 0x101c>;
};
i2c1_pins: i2c1@0 {
reg = <0>;
amb,pinmux-ids = <0x101d 0x101e>;
};
i2c2_pins: i2c2@0 {
reg = <0>;
amb,pinmux-ids = <0x101f 0x1020>;
};
ir_pins: ir0@0 {
reg = <0>;
amb,pinmux-ids = <0x1021>;
};
i2s0_pins: i2s0@0 {
reg = <0>;
amb,pinmux-ids = <0x1029 0x102a 0x102b 0x102c 0x102d>;
};
usb_host0_pins: uhc0@0 { /* USB0: host/device configurable */
reg = <0>;
amb,pinmux-ids = <0x1002 0x1004>;
};
usb_host1_pins: uhc1@0 { /* USB1: host only */
reg = <0>;
amb,pinmux-ids = <0x1001 0x1003>;
};
pwm0_pins_a: pwm0@0 {
reg = <0>;
amb,pinmux-ids = <0x4007>;
};
pwm0_pins_b: pwm0@1 {
reg = <1>;
amb,pinmux-ids = <0x5013>;
};
pwm0_pins_c: pwm0@2 {
reg = <2>;
amb,pinmux-ids = <0x1071>;
};
pwm1_pins_a: pwm1@0 {
reg = <0>;
amb,pinmux-ids = <0x1005>;
};
pwm1_pins_b: pwm1@1 {
reg = <1>;
amb,pinmux-ids = <0x4008>;
};
pwm1_pins_c: pwm1@2 {
reg = <2>;
amb,pinmux-ids = <0x5014>;
};
pwm1_pins_d: pwm1@3 {
reg = <3>;
amb,pinmux-ids = <0x5017>;
};
pwm2_pins_a: pwm2@0 {
reg = <0>;
amb,pinmux-ids = <0x1006>;
};
pwm2_pins_b: pwm2@1 {
reg = <1>;
amb,pinmux-ids = <0x4009>;
};
pwm2_pins_c: pwm2@2 {
reg = <2>;
amb,pinmux-ids = <0x5015>;
};
pwm3_pins_a: pwm3@0 {
reg = <0>;
amb,pinmux-ids = <0x400a>;
};
pwm3_pins_b: pwm3@1 {
reg = <1>;
amb,pinmux-ids = <0x200e>;
};
pwm3_pins_c: pwm3@2 {
reg = <2>;
amb,pinmux-ids = <0x5016>;
};
spi_slave_pins_a: spi_slave@0 {
reg = <0>;
amb,pinmux-ids = <0x4022 0x4023 0x4024 0x4025>;
};
spi_slave_pins_b: spi_slave@1 {
reg = <1>;
amb,pinmux-ids = <0x3013 0x3014 0x3015 0x3016>;
};
spi0_pins: spi0@0 {
reg = <0>;
amb,pinmux-ids = <0x1022 0x1023 0x1024>;
};
spi1_pins_a: spi1@0 {
reg = <0>;
amb,pinmux-ids = <0x2007 0x2008 0x2009>;
};
spi1_pins_b: spi1@1 {
reg = <1>;
amb,pinmux-ids = <0x402e 0x402f 0x4030>;
};
};
};
ahb@e0000000 { /* AHB */
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0xe0000000 0x01000000>;
ranges;
intc: interrupt-controller@e0003000 {
compatible = "ambarella,vic";
interrupt-controller;
#interrupt-cells = <2>;
reg = <0xe0003000 0x1000>,
<0xe0010000 0x1000>,
<0xe001c000 0x1000>;
};
dma: dma@e0005000 {
compatible = "ambarella,dma";
reg = <0xe0005000 0x1000>;
interrupts = <15 0x4>;
#dma-cells = <2>;
dma-channels = <8>;
dma-requests = <12>;
dma-trans-type = <1 1 0 0 1 1 1 1>; /* 0-memcpy ,1-slave*/
amb,copy-align = <0>;
};
nand0: nand@e0001000 {
compatible = "ambarella,nand";
#address-cells = <1>;
#size-cells = <1>;
reg = <0xe0001000 0x1000>, /* fio reg address */
<0xe0012000 0x1000>, /* fdma reg address */
<0xe0000000 0x4>; /* fifo base */
interrupts = <16 0x4>, /* fio_cmd_irq */
<17 0x4>, /* fio_dma_irq */
<33 0x4>; /* fdma_irq */
pinctrl-names = "default";
pinctrl-0 = <&nand0_pins>;
nand-on-flash-bbt;
amb,enable-wp;
/* amb,soft-ecc = <1>; */
};
spinor0: spinor@e0031000 {
compatible = "ambarella,spinor";
reg = <0xe0031000 0x2ff>, /* spi nor controller */
<0xe0005300 0x20>; /* dma reg */
pinctrl-names = "default";
pinctrl-0 = <&spinor0_pins>;
status = "disabled";
};
spinand0: spinand@e0031000 {
compatible = "ambarella,spinand";
reg = <0xe0031000 0x2ff>, /* spi nor controller */
<0xe0005300 0x20>; /* dma reg */
pinctrl-names = "default";
pinctrl-0 = <&spinor0_pins>;
status = "disabled";
};
uart1: uart@e0032000 {
compatible = "ambarella,uart";
reg = <0xe0032000 0x1000>;
interrupts = <25 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins_b &uart1_flow_pins_c>;
status = "disabled";
amb,msr-used; /* use Modem Status Register */
amb,txdma-used;
amb,rxdma-used;
/* amb,tx-fifo-fix; */
/* need to select pinctrl setup in board dts */
};
i2s0: i2s@e001a000 {
compatible = "ambarella,i2s";
reg = <0xe001a000 0x1000>;
pinctrl-names = "default";
pinctrl-0 = <&i2s0_pins>;
amb,i2s-channels = <2>;
amb,default-mclk = <12288000>;
dmas = <&dma 5 1>,
<&dma 4 1>;
dma-names = "tx", "rx";
};
udc@e0006000 {
compatible = "ambarella,udc";
reg = <0xe0006000 0x2000 0xec1702cc 0x4>;
interrupts = <4 0x4>;
amb,usbphy = <&usbphy>;
};
ehci@e0018000 {
compatible = "ambarella,ehci";
reg = <0xe0018000 0x1000>;
interrupts = <39 0x4>;
amb,usbphy = <&usbphy>;
};
ohci@e0019000 {
compatible = "ambarella,ohci";
reg = <0xe0019000 0x1000>;
interrupts = <44 0x4>;
amb,usbphy = <&usbphy>;
};
sdmmc0: sdmmc0@e0002000 {
compatible = "ambarella,sdmmc";
#address-cells = <1>;
#size-cells = <0>;
reg = <0xe0002000 0x1000>,
<0xe0001000 0x80>, /* fio reg address */
<0xec1704c0 0x8>;
interrupts = <18 0x4>;
amb,clk-name = "gclk_sd";
amb,wait-tmo = <10000>; /* in millisecond */
amb,switch_vol_tmo = <20>;
amb,max-blk-size = <131072>; /* valid value: 4K<<n */
amb,auto-tuning;
amb,phy-type = <0>;/*0:rct phy, 1: sd controller phy, 2: for s2e*/
amb,phy-timing = <0x00000001 0x04070000 0x00000000>,
<0x00000040 0x00000001 0x00001111>,/*for sdr104 200M*/
<0x000000A4 0x00000005 0x00001111>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc0_pins_8bit &sdmmc0_cd_pin &sdmmc0_wp_pin>;
slot@0 {
reg = <0>;
global-id = <0>;
max-frequency = <50000000>;
bus-width = <8>;
amb,caps-adma;
amb,caps-ddr;
cap-sdio-irq;
};
};
sdmmc1: sdmmc1@e000c000 {
compatible = "ambarella,sdmmc";
reg = <0xe000c000 0x1000>,
<0xe0001000 0x80>; /* fio reg address */
#address-cells = <1>;
#size-cells = <0>;
interrupts = <52 0x4>;
amb,clk-name = "gclk_sdio";
amb,wait-tmo = <10000>; /* in millisecond */
amb,switch_vol_tmo = <20>;
amb,max-blk-size = <131072>; /* valid value: 4K<<n */
pinctrl-names = "default";
pinctrl-0 = <&sdmmc1_pins_4bit &sdmmc1_cd_pin &sdmmc1_wp_pin>;
status = "disabled";
slot@0 {
reg = <0>;
global-id = <1>;
max-frequency = <50000000>;
bus-width = <4>;
amb,caps-adma;
cap-sdio-irq;
};
};
sdmmc2: sdmmc2@e001f000 {
compatible = "ambarella,sdmmc";
#address-cells = <1>;
#size-cells = <0>;
reg = <0xe001f000 0x1000>,
<0xe0001000 0x80>; /* fio reg address */
interrupts = <20 0x4>;
amb,clk-name = "gclk_sdxc";
amb,wait-tmo = <10000>; /* in millisecond */
amb,switch_vol_tmo = <20>;
amb,max-blk-size = <131072>; /* valid value: 4K<<n */
pinctrl-names = "default";
pinctrl-0 = <&sdmmc2_pins_8bit &sdmmc2_cd_pin &sdmmc2_wp_pin>;
status = "disabled";
slot@0 {
reg = <0>;
global-id = <2>;
max-frequency = <50000000>;
bus-width = <8>;
amb,caps-adma;
cap-sdio-irq;
};
};
mac0: ethernet@e000e000 {
compatible = "ambarella,eth";
#address-cells = <1>;
#size-cells = <0>;
reg = <0xe000e000 0x2000>;
interrupts = <27 0x4>;
amb,tx-ring-size = <32>;
amb,rx-ring-size = <64>;
amb,ipc-tx;
amb,ipc-rx;
pinctrl-names = "default";
pinctrl-0 = <&eth_pins>;
};
spi0: spi@e0020000 {
compatible = "ambarella,spi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0xe0020000 0x1000>;
interrupts = <35 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins>;
amb,clk-freq = <54000000>;
amb,dma-used;
dmas = <&dma 0 1>,
<&dma 1 1>;
dma-names = "tx", "rx";
};
spi1: spi@e0021000 {
compatible = "ambarella,spi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0xe0021000 0x1000>;
interrupts = <37 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&spi1_pins_a>;
amb,clk-freq = <54000000>;
status = "disabled";
};
spi_slave@e0026000 {
compatible = "ambarella,spi-slave";
reg = <0xe0026000 0x1000>;
interrupts = <38 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&spi_slave_pins_a>;
status = "disabled";
};
};
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 = <88 0x1>, <87 0x1>, <86 0x1>, <89 0x1>;
interrupt-names = "aes-irq", "des-irq", "md5-irq", "sha1-irq";
amb,cap-md5-sha1;
amb,data-swap;
amb,reg-64bit;
};
l2-cache@f0002000 {
compatible = "arm,pl310-cache";
reg = <0xf0002000 0x1000>;
cache-unified;
cache-level = <2>;
/* l2 cache latency use default setting */
/* arm,tag_latency = <1 2 1>; */
/* arm,data_latency = <1 3 1>; */
};
};
rct@ec170000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0xec170000 0x1000>;
ranges;
usbphy: usbphy@ec170050 {
compatible = "ambarella,usbphy";
reg = <0xec170050 0x4 0xe001b00c 0x4 0xec1702c0 0x4>;
amb,host-phy-num = <2>;
amb,owner-mask;
amb,owner-invert;
};
};
iav {
compatible = "ambarella,iav";
};
bogus_bus {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
dummycodec: codec@0 {
compatible = "ambarella,dummycodec";
};
};
amba_lens {
compatible = "ambarella,lens";
interrupts = <0 12 0x1>, /* zoom_timer_irq */
<0 13 0x1>, /* focus_timer_irq */
<0 14 0x1>; /* iris_timer_irq */
};
};