// SPDX-License-Identifier: GPL-2.0 /dts-v1/; /include/ "skeleton.dtsi" #include #include / { model = "ARM Arkmicro ark1668ed SoC"; compatible = "arkmicro,ark1668e,ark1668ed"; interrupt-parent = <&gic>; aliases { serial0 = &uart0; // hsserial0 = &uart4; // hsserial1 = &uart5; }; chosen { bootargs = "console=ttyS0,115200 earlyprintk loglevel=8 clk_ignore_unused"; stdout-path = "serial0:115200n8"; }; cpus { #address-cells = <1>; #size-cells = <0>; enable-method = "arkmicro,arke-smp"; cpu0: cpu@0 { compatible = "arm,cortex-a7"; device_type = "cpu"; reg = <0>; clock-frequency = <24000000>; }; cpu1: cpu@1 { compatible = "arm,cortex-a7"; device_type = "cpu"; reg = <1>; clock-frequency = <24000000>; }; }; memory { reg = <0x60000000 0x18000000>; }; reserved-memory { #address-cells = <1>; #size-cells = <1>; ranges; /* global autoconfigured region for contiguous allocations */ linux,cma { compatible = "shared-dma-pool"; reusable; size = <0x8000000>; linux,cma-default; }; }; iram { compatible = "arkmicro,arke-iram"; reg = <0x300000 0x8000>; cpuctlofset = <0x34>; enablebit = <0x0>; }; timer { compatible = "arm,armv7-timer"; arm,cpu-registers-not-fw-configured; interrupts = , , , ; clock-frequency = <24000000>; }; sregs@50000000 { compatible = "arkmicro,ark-sregs"; reg = <0x50000000 0x1000>; clocks { #address-cells = <1>; #size-cells = <0>; /* cpu axi ahb apb */ clk24mhz: clk24mhz@24M { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <24000000>; }; /* ddr */ clk100mhz: clk100mhz@20M { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <100000000>; }; /* lcd */ clk15mhz: clk15mhz@15M { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <15000000>; }; /* peripheral */ clk12mhz: clk12mhz@12M { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <24000000>; }; clk30mhz: clk30mhz@30M { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <30000000>; }; eth_phy_ref_clk: eth_phy_ref_clk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <25000000>; }; wm8960_mclk: wm8960_mclk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <12288000>; }; i2s_dac_clk: i2s_dac_clk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <48000>; }; i2s_adc_clk: i2s_adc_clk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <48000>; }; }; }; soc { compatible = "simple-bus"; #address-cells = <1>; #size-cells = <1>; ranges; gic: interrupt-controller@e0b01000 { compatible = "arm,cortex-a7-gic"; interrupt-controller; #interrupt-cells = <3>; reg = <0xe0b01000 0x1000>, <0xe0b02000 0x2000>, <0xe0b04000 0x2000>, <0xe0b06000 0x2000>; //interrupts = ; }; pinctrl0: pinctrl@50000000 { compatible = "arkmicro,ark1668ed-pinctrl"; reg = <0x50000000 0x1000>; }; // dmac: dmac@40200000 { // compatible = "snps,axi-dma-1.01a"; // reg = <0x40200000 0x1000>; // interrupts = ; // clocks = <&clk24mhz>, <&clk24mhz>; // clock-names = "core-clk", "cfgr-clk"; // #dma-cells = <3>; // dma-channels = <8>; // snps,dma-masters = <2>; // snps,data-width = <3>; // snps,block-size = <65536 65536 65536 65536 // 65536 65536 65536 65536>; // snps,priority = <0 1 2 3 4 5 6 7>; // snps,axi-max-burst-len = <16>; // status = "disabled"; // }; #if 0 dmac: dmac@40200000 { compatible = "arm,pl080", "arm,primecell"; reg = <0x40200000 0x1000>; // interrupts = <28 IRQ_TYPE_LEVEL_HIGH>; interrupts = ; // clocks = <&clk LPC32XX_CLK_DMA>; clocks = <&clk24mhz>; clock-names = "apb_pclk"; lli-bus-interface-ahb1; lli-bus-interface-ahb2; mem-bus-interface-ahb2; memcpy-burst-size = <256>; memcpy-bus-width = <32>; #dma-cells = <3>; //status = "disabled"; }; #else dmac: dmac@40200000 { compatible = "arkmicro,ark-dma"; reg = <0x40200000 0x1000>; interrupts = ; dma-channels = <8>; dma-masters = <2>; chan_allocation_order = <1>; chan_priority = <1>; block_size = <0xfff>; data-width = <4 4>; /* multi-block = <1 1 1 1 1 1 1 1>; */ clocks = <&clk24mhz>; clock-names = "hclk"; lli-bus-interface-ahb1; lli-bus-interface-ahb2; mem-bus-interface-ahb2; #dma-cells = <3>; }; #endif i2s_adc: i2s-adc@50100000 { compatible = "arkmicro,ark1668e-i2s"; reg = <0x50100000 0x1000 0x50000000 0x1000>; interrupts = ; nco-reg = <0x4040815c>; dmas = <&dmac 0 1 0>, <&dmac 1 0 1>; dma-names = "rx", "tx"; clocks = <&i2s_adc_clk>; // pinctrl-0 = <&pinctrl_i2sadc_sync &pinctrl_i2sadc_sadata // &pinctrl_i2sadc_mclk &pinctrl_i2sadc_bclk>; // pinctrl-names = "default"; #sound-dai-cells = <0>; status = "disabled"; }; i2s_dac: i2s-dac@50d00000 { compatible = "arkmicro,ark1668e-i2s"; reg = <0x50d00000 0x1000 0x50000000 0x1000>; interrupts = ; nco-reg = <0x4040816c>; dmas = <&dmac 25 1 0>, <&dmac 26 0 1>; dma-names = "rx", "tx"; clocks = <&i2s_dac_clk>; // pinctrl-0 = <&pinctrl_i2sdac_sync &pinctrl_i2sdac_sadata // &pinctrl_i2sdac_mclk &pinctrl_i2sdac_bclk>; // pinctrl-names = "default"; #sound-dai-cells = <0>; status = "disabled"; }; uart0: uart@50500000 { compatible = "snps,dw-apb-uart"; reg = <0x50500000 0x1000>; interrupts = ; clocks = <&clk24mhz>; reg-shift = <2>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart0>; //dmas = <&dmac 6 1 0>, <&dmac 7 0 1>; //dma-names = "rx", "tx"; }; uart1: uart@50600000 { compatible = "snps,dw-apb-uart"; reg = <0x50600000 0x1000>; interrupts = ; current-speed = <115200>; clocks = <&clk12mhz>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart1>; //dmas = <&dmac 12 1 0>, <&dmac 13 0 1>; //dma-names = "rx", "tx"; //status = "disabled"; }; uart2: uart@50700000 { compatible = "snps,dw-apb-uart"; reg = <0x50700000 0x1000>; interrupts = ; current-speed = <115200>; clocks = <&clk12mhz>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart2>; //dmas = <&dmac 19 1 0>, <&dmac 20 0 1>; //dma-names = "rx", "tx"; //status = "disabled"; }; uart3: uart@50800000 { //compatible = "arkmicro,ark-uart"; compatible = "snps,dw-apb-uart"; reg = <0x50800000 0x1000>; interrupts = ; current-speed = <115200>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart3>; clocks = <&clk12mhz>; //dmas = <&dmac 21 1 0>, <&dmac 22 0 1>; //dma-names = "rx", "tx"; //status = "disabled"; }; uart4: uart@51300000 { //compatible = "arkmicro,ark-uart"; compatible = "snps,dw-apb-uart"; reg = <0x51300000 0x4000>; interrupts = ; clocks = <&clk12mhz>; //pinctrl-names = "default"; //pinctrl-0 = <&pinctrl_uart4>; dmas = <&dmac 14 1 0>, <&dmac 15 0 1>; dma-names = "rx", "tx"; status = "disabled"; }; uart5: uart@51d00000 { //compatible = "arkmicro,ark-uart"; compatible = "snps,dw-apb-uart"; reg = <0x51d00000 0x4000>; interrupts = ; clocks = <&clk12mhz>; //pinctrl-names = "default"; //pinctrl-0 = <&pinctrl_uart5>; dmas = <&dmac 16 1 0>, <&dmac 17 0 1>; dma-names = "rx", "tx"; status = "disabled"; }; timer: timer@50a00000 { compatible = "snps,dw-apb-timer-osc"; reg = <0x50a00000 0x1000>; interrupts = ; clocks = <&clk12mhz>, <&clk24mhz>; clock-names = "timer", "pclk"; }; watchdog: watchdog@50c00000 { compatible = "arkmicro,ark-wdt"; reg = <0x50c00000 0x20>; interrupts = ; clocks = <&clk24mhz>; status = "disabled"; }; gpio0: gpio@50900000 { #address-cells = <1>; #size-cells = <0>; compatible = "snps,dw-apb-gpio"; reg = <0x50900000 0x80>; // status = "disabled"; gporta: gpio-controller@0 { compatible = "snps,dw-apb-gpio-port"; gpio-controller; #gpio-cells = <2>; snps,nr-gpios = <32>; reg = <0>; base = <0>; interrupt-controller; #interrupt-cells = <2>; interrupts = ; gpio-ranges = <&pinctrl0 0 0 32>; }; }; gpio1: gpio@50900080 { #address-cells = <1>; #size-cells = <0>; compatible = "snps,dw-apb-gpio"; reg = <0x50900080 0x80>; // status = "disabled"; gportb: gpio-controller@0 { compatible = "snps,dw-apb-gpio-port"; gpio-controller; #gpio-cells = <2>; snps,nr-gpios = <32>; reg = <0>; base = <32>; interrupt-controller; #interrupt-cells = <2>; interrupts = ; gpio-ranges = <&pinctrl0 0 32 32>; }; }; gpio2: gpio@50900100 { #address-cells = <1>; #size-cells = <0>; compatible = "snps,dw-apb-gpio"; reg = <0x50900100 0x80>; // status = "disabled"; gportc: gpio-controller@0 { compatible = "snps,dw-apb-gpio-port"; gpio-controller; #gpio-cells = <2>; snps,nr-gpios = <32>; reg = <0>; base = <64>; interrupt-controller; #interrupt-cells = <2>; interrupts = ; gpio-ranges = <&pinctrl0 0 64 32>; }; }; gpio3: gpio@50900180 { #address-cells = <1>; #size-cells = <0>; compatible = "snps,dw-apb-gpio"; reg = <0x50900180 0x80>; // status = "disabled"; gportd: gpio-controller@0 { compatible = "snps,dw-apb-gpio-port"; gpio-controller; #gpio-cells = <2>; snps,nr-gpios = <32>; reg = <0>; base = <96>; interrupt-controller; #interrupt-cells = <2>; interrupts = ; gpio-ranges = <&pinctrl0 0 96 32>; }; }; gpio4: gpio@50900200 { #address-cells = <1>; #size-cells = <0>; compatible = "snps,dw-apb-gpio"; reg = <0x50900200 0x80>; // status = "disabled"; gporte: gpio-controller@0 { compatible = "snps,dw-apb-gpio-port"; gpio-controller; #gpio-cells = <2>; snps,nr-gpios = <32>; reg = <0>; base = <128>; interrupt-controller; #interrupt-cells = <2>; interrupts = ; gpio-ranges = <&pinctrl0 0 128 32>; }; }; pwm0: pwm@50b00000 { compatible = "arkmicro,ark-pwm"; reg = <0x50b00000 0x100>; #pwm-cells = <2>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm0 &pinctrl_pwm1 &pinctrl_pwm2 &pinctrl_pwm3 &pinctrl_pwm4 &pinctrl_pwm5>; clocks = <&clk12mhz>; status = "disabled"; }; nfc: nand@20000000 { compatible = "arkmicro,ark-nand"; reg = <0x20000000 0x1000>; max-chips = <1>; interrupts = ; nand-bus-width = <8>; // nand-ecc-mode = "hw_syndrome"; nand-ecc-mode = "hw"; nand-ecc-placement = "oob"; status = "disabled"; }; mmc0: mmc@40100000 { compatible = "snps,dw-mshc"; #address-cells = <1>; #size-cells = <0>; reg = <0x40100000 0x1000>; interrupts = ; fifo-depth = <64>; bus-width = <8>; cap-mmc-highspeed; disable-wp; non-removable; clocks = <&clk12mhz>; clock-names = "ciu"; status = "disabled"; }; mmc1: mmc@40400000 { compatible = "snps,dw-mshc"; #address-cells = <1>; #size-cells = <0>; reg = <0x40400000 0x1000>; interrupts = ; //fifo-depth = <128>; fifo-depth = <64>; bus-width = <4>; //clocks = <&clk12mhz>; clock-frequency= <24000000>; clock-names = "ciu"; //status = "disabled"; }; i2c0: i2c@50300000 { #address-cells = <1>; #size-cells = <0>; compatible = "snps,designware-i2c"; reg = <0x50300000 0x1000>; interrupts = ; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c0>; clocks = <&clk24mhz>; clock-frequency = <400000>; eeprom0: eeprom@50 { compatible = "atmel,24c32"; reg = <0x50>; pagesize = <32>; }; }; i2c1: i2c@50400000 { #address-cells = <1>; #size-cells = <0>; compatible = "snps,designware-i2c"; reg = <0x50400000 0x1000>; interrupts = ; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c1>; clocks = <&clk12mhz>; status = "disabled"; }; i2c-gpio-0 { #address-cells = <1>; #size-cells = <0>; compatible = "i2c-gpio"; gpios = <&gporte 15 0 /* SDA */ &gporte 14 0 /* SCL */ >; i2c-gpio,delay-us = <2>; /* clk freq = 500/delay KHz */ i2c-gpio,scl-output-only; //i2c-gpio,sda-open-drain; //i2c-gpio,scl-open-drain; status = "disabled"; codec: wm8960@1a { compatible = "wlf,wm8960"; reg = <0x1a>; clocks = <&wm8960_mclk>; clock-names = "mclk"; //wlf,shared-lrclk; #sound-dai-cells = <0>; }; }; ecspi: spi@50200000 { #address-cells = <1>; #size-cells = <0>; compatible = "arkmicro,arke-ecspi"; reg = <0x50200000 0x1000>; num-chipselect = <1>; chipselects = <101>; interrupts = ; //dmas = <&dmac 8 1 0>; //<&dmac 9 0 1> //dma-names = "rx"; //"tx" //pinctrl-names = "default"; //pinctrl-0 = <&pinctrl_ecspi>; clocks = <&clk12mhz>, <&clk12mhz>; clock-names = "ipg", "per"; status = "disabled"; m25p80@0 { #address-cells = <1>; #size-cells = <1>; compatible = "w25q256"; reg = <0>; /* Chip select 0 */ spi-max-frequency = <3000000>; status = "disabled"; }; gd5f@0 { #address-cells = <1>; #size-cells = <1>; compatible = "gd5f"; reg = <0>; /* Chip select 0 */ spi-max-frequency = <3000000>; status = "disabled"; }; }; dwssi: spi@30000000 { //compatible = "arkmicro,ark-dw-ssi"; //compatible = "snps,dw-apb-ssi"; compatible = "snps,dwc-ssi-1.01a"; #address-cells = <1>; #size-cells = <0>; reg = <0x30000000 0x100>; interrupts = ; num-cs = <1>; //cs-gpios = <&gportd 14 0>; // dmas = <&dmac 0 1 0>, <&dmac 1 0 1>; // dma-names = "rx", "tx"; // pinctrl-names = "default"; // pinctrl-0 = <&pinctrl_dwssi_0>; clocks = <&clk24mhz>; //reg-io-width = <1>; status = "disabled"; m25p80@0 { #address-cells = <1>; #size-cells = <1>; compatible = "w25q256"; reg = <0>; /* Chip select 0 */ spi-max-frequency = <3000000>; //spi-tx-bus-width = <1>; //spi-rx-bus-width = <4>; //status = "disabled"; }; gd5f@0 { #address-cells = <1>; #size-cells = <1>; compatible = "gd5f"; reg = <0>; /* Chip select 0 */ spi-max-frequency = <3000000>; status = "disabled"; }; }; gpu0: gpu@40600000 { compatible = "arkmicro,ark1668ed_gc555"; // reg = <0x40600000 0x1000 // 0x7A000000 0x500000>; interrupts = ; clocks = <&clk24mhz>; // clock-names = "gpu0_clk"; }; vdec0: vdec@40700000 { compatible = "on2,ark-vdec"; reg = <0x40700000 0x1000 0x7e000000 0x500000>; interrupts = ; clocks = <&clk24mhz>; clock-names = "vdec_clk"; }; ethernet: ethernet@40b00000 { compatible = "snps,dwc-qos-ethernet-4.10"; reg = <0x40b00000 0x4000>; interrupts = ; snps,write-requests = <2>; snps,read-requests = <16>; snps,txpbl = <8>; snps,rxpbl = <2>; snps,reset-gpio = <&gportd 15 GPIO_ACTIVE_LOW>; snps,reset-active-low; snps,reset-delays-us = <0 10000 1000000>; clocks = <ð_phy_ref_clk>, <ð_phy_ref_clk>; clock-names = "phy_ref_clk", "apb_pclk"; // status = "disabled"; phy-handle = <&phy1>; phy-mode = "rgmii"; mdio { #address-cells = <0x1>; #size-cells = <0x0>; phy1: phy@0 { compatible = "ethernet-phy-ieee802.3-c22"; device_type = "ethernet-phy"; reg = <0x5>; }; }; }; #if 0 gpu@40500000 { compatible = "arm,mali-400", "arm,mali-utgard"; reg = <0x40500000 0x30000>; interrupts = , , , , , , ; interrupt-names = "IRQGP", "IRQGPMMU", "IRQPP", "IRQPP0", "IRQPPMMU0", "IRQPP1", "IRQPPMMU1"; //pmu_domain_config = <0x1 0x4 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x2 0x0 0x0>; //pmu_switch_delay = <0xff>; clocks = <&clk24mhz>, <&clk24mhz>; clock-names = "mali_parent", "mali"; status = "disabled"; }; #endif lcdc: lcd@40300000 { compatible = "arkmicro,ark1668e-lcdc"; reg = <0x40300000 0x1000 0x7F000000 0x1000000>; interrupts = ; clocks = <&clk24mhz>; clock-names = "lcdc_clk"; display = <&display0>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_lcd_rgb888>; display0: display@0 { interface-type = "TTL"; bits-per-pixel = <32>; //power-control-gpio = <&gpio2 17 GPIO_ACTIVE_HIGH>; lcd-wiring-mode = "RGB"; //lcdcon-backlight; //pwms = <&pwm0 1 50000>; //pwm-names = "backlight"; //backlight-value = <20>; //backlight-delay = <200>; display-timings { native-mode = <&timing0>; timing0: timing0 { clock-frequency = <24000000>; hactive = <1024>; vactive = <600>; hback-porch = <64>; hfront-porch = <21>; vback-porch = <16>; vfront-porch = <24>; hsync-len = <21>; vsync-len = <80>; hsync-active = <1>; vsync-active = <1>; de-active = <0>; pixelclk-active = <0>; }; }; }; }; #if 0 usb0_phy: usb0-phy { compatible = "usb-nop-xceiv"; #phy-cells = <0>; // status = "disabled"; }; usb0: usb@40000000 { compatible = "snps,dwc2"; #address-cells = <1>; #size-cells = <0>; reg = <0x40000000 0x40000>; interrupts = ; phys = <&usb0_phy>; phy-names = "usb0-phy"; dr_mode = "host"; // status = "disabled"; }; #endif usb1_phy: usb1-phy { compatible = "usb-nop-xceiv"; #phy-cells = <0>; // status = "disabled"; }; usb1: usb@40C00000 { compatible = "snps,dwc2"; #address-cells = <1>; #size-cells = <0>; reg = <0x40C00000 0x40000>; interrupts = ; phys = <&usb1_phy>; phy-names = "usb1-phy"; dr_mode = "host"; // status = "disabled"; }; }; sound { compatible = "simple-audio-card"; simple-audio-card,name = "ark1668e fpga audio"; simple-audio-card,widgets = "Microphone", "Mic Jack", "Line", "Line In", "Headphone", "Headphone Jack"; simple-audio-card,routing = "Headphone Jack", "HP_L", "Headphone Jack", "HP_R", "LINPUT1", "Mic Jack", "LINPUT2", "Mic Jack", "RINPUT1", "Mic Jack", "RINPUT2", "Mic Jack"; status = "disabled"; simple-audio-card,dai-link@0 { /* I2S - adc */ format = "i2s"; bitclock-master = <&capture_codec>; frame-master = <&capture_codec>; capture_cpu: cpu { sound-dai = <&i2s_adc>; }; capture_codec: codec { sound-dai = <&codec>; }; }; simple-audio-card,dai-link@1 { /* I2S - dac */ format = "i2s"; bitclock-master = <&playback_codec>; frame-master = <&playback_codec>; playback_cpu: cpu { sound-dai = <&i2s_dac>; }; playback_codec: codec { sound-dai = <&codec>; }; }; }; axi_scale: axi-scale@41000000 { compatible = "arkmicro,ark1668ed-axi-scale"; reg = <0x41000000 0x1000 0x50000000 0x1000>; interrupts = ; clocks = <&clk24mhz>; /* softreset-reg = <0x74>; softreset-offset = <28>; */ }; /* ituin: ituin@e0800000 { compatible = "arkmicro,ark1668ed-vin"; reg = <0xe0800000 0x1000 0xe4900000 0x1000 0xe0a00000 0x1000 0xe0500000 0x1000>; interrupts = , ; pinctrl-0 = <&pinctrl_hvsync &pinctrl_itu0>; pinctrl-1 = <&pinctrl_hvsync &pinctrl_itu1>; pinctrl-2 = <&pinctrl_hvsync &pinctrl_itu2>; pinctrl-names = "itu0", "itu1", "itu2"; status = "disabled"; port { #address-cells = <1>; #size-cells = <0>; }; }; */ /* carback: carback@0 { compatible = "arkmicro,ark-carback"; interrupt-parent = <&gportf>; interrupts = <25 IRQ_TYPE_EDGE_BOTH>; detect-gpios = <&gportf 25 GPIO_ACTIVE_HIGH>; debounce-detect = <20>; status = "disabled"; }; */ }; #include "ark1668ed-pinctrl.dtsi"