blob: 9c1911899ceb8b36aca9dbd1a2b6e380ab498a18 [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,a5s";
interrupt-parent = <&intc>;
aliases {
serial0 = &uart0;
serial1 = &uart1;
nand = &nand0;
emmc = &sdmmc0;
i2c0 = &i2c0;
i2c1 = &i2c1;
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 = <0xc0200000 0x07e00000>; /* 126M */
};
chosen {
linux,stdout-path = &uart0;
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
compatible = "arm,arm1136";
reg = <0>;
};
};
apb@70000000 { /* APB */
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x70000000 0x01000000>;
ranges;
timer2: timer@7000b010 {
compatible = "ambarella,clock-source";
reg = <0x7000b010 0x10 0x7000b030 0x4>;
interrupts = <13 0x1>;
ctrl-offset = <4>; /* bit offset in timer-ctrl reg */
};
timer3: timer@7000b020 {
compatible = "ambarella,clock-event";
reg = <0x7000b020 0x10 0x7000b030 0x4>;
interrupts = <14 0x1>;
ctrl-offset = <8>; /* bit offset in timer-ctrl reg */
};
uart0: uart@70005000 {
compatible = "ambarella,uart";
reg = <0x70005000 0x1000>;
interrupts = <9 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins>;
amb,less-reg;
status = "ok";
};
uart1: uart@7001f000 {
compatible = "ambarella,uart";
reg = <0x7001f000 0x1000>;
interrupts = <25 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
amb,less-reg;
amb,msr-used; /* use Modem Status Register */
status = "disabled";
};
i2c0: i2c@70003000 {
compatible = "ambarella,i2c";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x70003000 0x1000>;
interrupts = <19 0x4>;
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 = <36 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
amb,i2c-class = <0x08>;
status = "disabled";
};
i2cmux {
compatible = "i2c-mux-pinctrl";
#address-cells = <1>;
#size-cells = <0>;
i2c-parent = <&i2c0>;
pinctrl-names = "i2c2", "idle";
pinctrl-0 = <&i2c2_pins>;
pinctrl-1 = <&i2c2_pins_idle>;
i2c@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
};
};
spi0: spi@70002000 {
compatible = "ambarella,spi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x70002000 0x1000>;
interrupts = <20 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins>;
amb,clk-freq = <13500000>;
amb,msb-first-only;
};
spi1: spi@7000f000 {
compatible = "ambarella,spi";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x7000f000 0x1000>;
interrupts = <41 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&spi1_pins>;
amb,clk-freq = <13500000>;
amb,msb-first-only;
};
spi_slave@7001e000 {
compatible = "ambarella,spi-slave";
reg = <0x7001e000 0x1000>;
interrupts = <26 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&spi_slave_pins>;
amb,id = <0>;
};
adc@7000d000 {
compatible = "ambarella,adc";
reg = <0x7000d000 0x1000>;
interrupts = <34 0x4>;
clock-frequency = <3000000>;
amb,polling-mode;
};
ir@70006000 {
compatible = "ambarella,ir";
reg = <0x70006000 0x1000>;
interrupts = <22 0x4>;
pinctrl-names = "default";
pinctrl-0 = <&ir_pins>;
};
wdt@7000c000 {
compatible = "ambarella,wdt";
reg = <0x7000c000 0x1000>;
/* interrupts = <21 0x4>; */
timeout-sec = <15>;
amb,non-bootstatus;
};
rtc@7000d000 {
compatible = "ambarella,rtc";
reg = <0x7000d000 0x1000>;
amb,is-limited;
};
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>;
reg-names = "gpio0", "gpio1", "gpio2";
#gpio-range-cells = <3>;
gpio: gpio@0 {
compatible = "ambarella,gpio";
/* gpio interrupts to vic */
interrupts = <10 0x4 11 0x4 30 0x4>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl 0 0 96>;
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 = <0x1032 0x1034>,
/* virtual pins, just for config */
<0x1021 0x0022>;
};
uart1_flow_pins: uart1_flow@0 {
reg = <0>;
amb,pinmux-ids = <0x1033 0x1035>,
/* virtual pins, just for config */
<0x0021 0x1022>;
};
nand0_pins: nand0@0 {
reg = <0>;
amb,pinmux-ids = <0x1027>; /* just WP is shared with GPIO */
};
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>;
};
i2c2_pins_idle: i2c2_idle@0 {
reg = <0>;
amb,pinmux-ids = <0x0024>;
};
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 config */
<0x003f>;
};
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>;
};
pwm3_pins: pwm3@0 {
reg = <0>;
amb,pinmux-ids = <0x1033>;
};
pwm5_pins: pwm5@0 {
reg = <0>;
amb,pinmux-ids = <0x1010>;
};
sdio_pins: sdio@0 {
reg = <0>;
amb,pinmux-ids = <0x1045 0x1046 0x1047
0x1048 0x1049 0x104a>;
};
sdio_pins_idle: sdio_idle@0 {
reg = <0>;
amb,pinmux-ids = <0x0045 0x0046 0x0047
0x0048 0x0049 0x004a>;
};
spi0_pins: spi0@0 {
reg = <0>;
amb,pinmux-ids = <0x1002 0x1003 0x1004>;
};
spi1_pins: spi1@0 {
reg = <0>;
amb,pinmux-ids = <0x1058 0x1059 0x105A>;
};
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;
intc: interrupt-controller@60003000 {
compatible = "ambarella,vic";
interrupt-controller;
#interrupt-cells = <2>;
reg = <0x60003000 0x1000>,
<0x60010000 0x1000>;
};
dma: dma@60005000 {
compatible = "ambarella,dma";
reg = <0x60005000 0x1000>;
interrupts = <15 0x4>;
#dma-cells = <2>;
dma-channels = <4>;
dma-requests = <4>;
dma-trans-type = <0 1 1 0>; /* 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 = <16 0x4>, /* fio_cmd_irq */
<17 0x4>, /* fio_dma_irq */
<33 0x4>; /* fdma_irq */
pinctrl-names = "default";
pinctrl-0 = <&nand0_pins>;
amb,enable-wp;
amb,no-bch;
amb,use-2x-pll;
nand-on-flash-bbt;
};
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 = <4 0x4>;
amb,usbphy = <&usbphy>;
};
sdmmc0: sdmmc0@60002000 {
compatible = "ambarella,sdmmc";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x60002000 0x1000>,
<0x60001000 0x80>; /* fio reg address */
interrupts = <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 */
status = "disabled";
slot@0 {
reg = <0>;
global-id = <0>;
max-frequency = <24000000>;
bus-width = <4>;
cap-sdio-irq;
no-1-8-v;
};
slot@1 {
reg = <1>;
global-id = <1>;
max-frequency = <24000000>;
bus-width = <4>;
cap-sdio-irq;
no-1-8-v;
amb,force-gpio;
pinctrl-names = "work", "idle";
pinctrl-0 = <&sdio_pins>;
pinctrl-1 = <&sdio_pins_idle>;
};
};
mac0: ethernet@6000e000 {
compatible = "ambarella,eth";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x6000e000 0x2000>;
interrupts = <27 0x4>;
amb,tx-ring-size = <32>;
amb,rx-ring-size = <64>;
};
crypto@60014000 {
compatible = "ambarella,crypto";
reg = <0x60014000 0x1000>;
interrupts = <45 0x1>, <46 0x1>;
interrupt-names = "aes-irq", "des-irq";
amb,binary-mode;
};
};
rct@70170000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x70170000 0x1000>;
ranges;
usbphy: usbphy@70170050 {
compatible = "ambarella,usbphy";
reg = <0x70170050 0x4>;
};
};
iav {
compatible = "ambarella,iav";
};
bogus_bus {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
dummycodec: codec@0 {
compatible = "ambarella,dummycodec";
};
};
};