1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0-only 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * Support for peripherals on the AXS10x mainboard 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2013-15 Synopsys, Inc. (www.synopsys.com) 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun/ { 9*4882a593Smuzhiyun aliases { 10*4882a593Smuzhiyun ethernet = &gmac; 11*4882a593Smuzhiyun }; 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun axs10x_mb { 14*4882a593Smuzhiyun compatible = "simple-bus"; 15*4882a593Smuzhiyun #address-cells = <1>; 16*4882a593Smuzhiyun #size-cells = <1>; 17*4882a593Smuzhiyun ranges = <0x00000000 0x0 0xe0000000 0x10000000>; 18*4882a593Smuzhiyun interrupt-parent = <&mb_intc>; 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun creg_rst: reset-controller@11220 { 21*4882a593Smuzhiyun compatible = "snps,axs10x-reset"; 22*4882a593Smuzhiyun #reset-cells = <1>; 23*4882a593Smuzhiyun reg = <0x11220 0x4>; 24*4882a593Smuzhiyun }; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun i2sclk: i2sclk@100a0 { 27*4882a593Smuzhiyun compatible = "snps,axs10x-i2s-pll-clock"; 28*4882a593Smuzhiyun reg = <0x100a0 0x10>; 29*4882a593Smuzhiyun clocks = <&i2spll_clk>; 30*4882a593Smuzhiyun #clock-cells = <0>; 31*4882a593Smuzhiyun }; 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun clocks { 34*4882a593Smuzhiyun i2spll_clk: i2spll_clk { 35*4882a593Smuzhiyun compatible = "fixed-clock"; 36*4882a593Smuzhiyun clock-frequency = <27000000>; 37*4882a593Smuzhiyun #clock-cells = <0>; 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun i2cclk: i2cclk { 41*4882a593Smuzhiyun compatible = "fixed-clock"; 42*4882a593Smuzhiyun clock-frequency = <50000000>; 43*4882a593Smuzhiyun #clock-cells = <0>; 44*4882a593Smuzhiyun }; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun apbclk: apbclk { 47*4882a593Smuzhiyun compatible = "fixed-clock"; 48*4882a593Smuzhiyun clock-frequency = <50000000>; 49*4882a593Smuzhiyun #clock-cells = <0>; 50*4882a593Smuzhiyun }; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun mmcclk: mmcclk { 53*4882a593Smuzhiyun compatible = "fixed-clock"; 54*4882a593Smuzhiyun /* 55*4882a593Smuzhiyun * DW sdio controller has external ciu clock divider 56*4882a593Smuzhiyun * controlled via register in SDIO IP. It divides 57*4882a593Smuzhiyun * sdio_ref_clk (which comes from CGU) by 16 for 58*4882a593Smuzhiyun * default. So default mmcclk clock (which comes 59*4882a593Smuzhiyun * to sdk_in) is 25000000 Hz. 60*4882a593Smuzhiyun */ 61*4882a593Smuzhiyun clock-frequency = <25000000>; 62*4882a593Smuzhiyun #clock-cells = <0>; 63*4882a593Smuzhiyun }; 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun pguclk: pguclk@10080 { 67*4882a593Smuzhiyun compatible = "snps,axs10x-pgu-pll-clock"; 68*4882a593Smuzhiyun reg = <0x10080 0x10>, <0x110 0x10>; 69*4882a593Smuzhiyun #clock-cells = <0>; 70*4882a593Smuzhiyun clocks = <&input_clk>; 71*4882a593Smuzhiyun }; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun gmac: ethernet@18000 { 74*4882a593Smuzhiyun #interrupt-cells = <1>; 75*4882a593Smuzhiyun compatible = "snps,dwmac"; 76*4882a593Smuzhiyun reg = < 0x18000 0x2000 >; 77*4882a593Smuzhiyun interrupts = < 4 >; 78*4882a593Smuzhiyun interrupt-names = "macirq"; 79*4882a593Smuzhiyun phy-mode = "rgmii"; 80*4882a593Smuzhiyun snps,pbl = < 32 >; 81*4882a593Smuzhiyun snps,multicast-filter-bins = <256>; 82*4882a593Smuzhiyun clocks = <&apbclk>; 83*4882a593Smuzhiyun clock-names = "stmmaceth"; 84*4882a593Smuzhiyun max-speed = <100>; 85*4882a593Smuzhiyun resets = <&creg_rst 5>; 86*4882a593Smuzhiyun reset-names = "stmmaceth"; 87*4882a593Smuzhiyun mac-address = [00 00 00 00 00 00]; /* Filled in by U-Boot */ 88*4882a593Smuzhiyun }; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun ehci@40000 { 91*4882a593Smuzhiyun compatible = "generic-ehci"; 92*4882a593Smuzhiyun reg = < 0x40000 0x100 >; 93*4882a593Smuzhiyun interrupts = < 8 >; 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun ohci@60000 { 97*4882a593Smuzhiyun compatible = "generic-ohci"; 98*4882a593Smuzhiyun reg = < 0x60000 0x100 >; 99*4882a593Smuzhiyun interrupts = < 8 >; 100*4882a593Smuzhiyun }; 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun /* 103*4882a593Smuzhiyun * According to DW Mobile Storage databook it is required 104*4882a593Smuzhiyun * to use "Hold Register" if card is enumerated in SDR12 or 105*4882a593Smuzhiyun * SDR25 modes. 106*4882a593Smuzhiyun * 107*4882a593Smuzhiyun * Utilization of "Hold Register" is already implemented via 108*4882a593Smuzhiyun * dw_mci_pltfm_prepare_command() which in its turn gets 109*4882a593Smuzhiyun * used through dw_mci_drv_data->prepare_command call-back. 110*4882a593Smuzhiyun * This call-back is used in Altera Socfpga platform and so 111*4882a593Smuzhiyun * we may reuse it saying that we're compatible with their 112*4882a593Smuzhiyun * "altr,socfpga-dw-mshc". 113*4882a593Smuzhiyun * 114*4882a593Smuzhiyun * Most probably "Hold Register" utilization is platform- 115*4882a593Smuzhiyun * independent requirement which means that single unified 116*4882a593Smuzhiyun * "snps,dw-mshc" should be enough for all users of DW MMC once 117*4882a593Smuzhiyun * dw_mci_pltfm_prepare_command() is used in generic platform 118*4882a593Smuzhiyun * code. 119*4882a593Smuzhiyun */ 120*4882a593Smuzhiyun mmc@15000 { 121*4882a593Smuzhiyun compatible = "altr,socfpga-dw-mshc"; 122*4882a593Smuzhiyun reg = < 0x15000 0x400 >; 123*4882a593Smuzhiyun fifo-depth = < 16 >; 124*4882a593Smuzhiyun card-detect-delay = < 200 >; 125*4882a593Smuzhiyun clocks = <&apbclk>, <&mmcclk>; 126*4882a593Smuzhiyun clock-names = "biu", "ciu"; 127*4882a593Smuzhiyun interrupts = < 7 >; 128*4882a593Smuzhiyun bus-width = < 4 >; 129*4882a593Smuzhiyun }; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun uart@20000 { 132*4882a593Smuzhiyun compatible = "snps,dw-apb-uart"; 133*4882a593Smuzhiyun reg = <0x20000 0x100>; 134*4882a593Smuzhiyun clock-frequency = <33333333>; 135*4882a593Smuzhiyun interrupts = <17>; 136*4882a593Smuzhiyun baud = <115200>; 137*4882a593Smuzhiyun reg-shift = <2>; 138*4882a593Smuzhiyun reg-io-width = <4>; 139*4882a593Smuzhiyun }; 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun uart@21000 { 142*4882a593Smuzhiyun compatible = "snps,dw-apb-uart"; 143*4882a593Smuzhiyun reg = <0x21000 0x100>; 144*4882a593Smuzhiyun clock-frequency = <33333333>; 145*4882a593Smuzhiyun interrupts = <18>; 146*4882a593Smuzhiyun baud = <115200>; 147*4882a593Smuzhiyun reg-shift = <2>; 148*4882a593Smuzhiyun reg-io-width = <4>; 149*4882a593Smuzhiyun }; 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun /* UART muxed with USB data port (ttyS3) */ 152*4882a593Smuzhiyun uart@22000 { 153*4882a593Smuzhiyun compatible = "snps,dw-apb-uart"; 154*4882a593Smuzhiyun reg = <0x22000 0x100>; 155*4882a593Smuzhiyun clock-frequency = <33333333>; 156*4882a593Smuzhiyun interrupts = <19>; 157*4882a593Smuzhiyun baud = <115200>; 158*4882a593Smuzhiyun reg-shift = <2>; 159*4882a593Smuzhiyun reg-io-width = <4>; 160*4882a593Smuzhiyun }; 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun i2c@1d000 { 163*4882a593Smuzhiyun compatible = "snps,designware-i2c"; 164*4882a593Smuzhiyun reg = <0x1d000 0x100>; 165*4882a593Smuzhiyun clock-frequency = <400000>; 166*4882a593Smuzhiyun clocks = <&i2cclk>; 167*4882a593Smuzhiyun interrupts = <14>; 168*4882a593Smuzhiyun }; 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun i2s: i2s@1e000 { 171*4882a593Smuzhiyun compatible = "snps,designware-i2s"; 172*4882a593Smuzhiyun reg = <0x1e000 0x100>; 173*4882a593Smuzhiyun clocks = <&i2sclk 0>; 174*4882a593Smuzhiyun clock-names = "i2sclk"; 175*4882a593Smuzhiyun interrupts = <15>; 176*4882a593Smuzhiyun #sound-dai-cells = <0>; 177*4882a593Smuzhiyun }; 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun i2c@1f000 { 180*4882a593Smuzhiyun compatible = "snps,designware-i2c"; 181*4882a593Smuzhiyun #address-cells = <1>; 182*4882a593Smuzhiyun #size-cells = <0>; 183*4882a593Smuzhiyun reg = <0x1f000 0x100>; 184*4882a593Smuzhiyun clock-frequency = <400000>; 185*4882a593Smuzhiyun clocks = <&i2cclk>; 186*4882a593Smuzhiyun interrupts = <16>; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun adv7511:adv7511@39{ 189*4882a593Smuzhiyun compatible="adi,adv7511"; 190*4882a593Smuzhiyun reg = <0x39>; 191*4882a593Smuzhiyun interrupts = <23>; 192*4882a593Smuzhiyun adi,input-depth = <8>; 193*4882a593Smuzhiyun adi,input-colorspace = "rgb"; 194*4882a593Smuzhiyun adi,input-clock = "1x"; 195*4882a593Smuzhiyun adi,clock-delay = <0x03>; 196*4882a593Smuzhiyun #sound-dai-cells = <0>; 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun ports { 199*4882a593Smuzhiyun #address-cells = <1>; 200*4882a593Smuzhiyun #size-cells = <0>; 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun /* RGB/YUV input */ 203*4882a593Smuzhiyun port@0 { 204*4882a593Smuzhiyun reg = <0>; 205*4882a593Smuzhiyun adv7511_input:endpoint { 206*4882a593Smuzhiyun remote-endpoint = <&pgu_output>; 207*4882a593Smuzhiyun }; 208*4882a593Smuzhiyun }; 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun /* HDMI output */ 211*4882a593Smuzhiyun port@1 { 212*4882a593Smuzhiyun reg = <1>; 213*4882a593Smuzhiyun adv7511_output: endpoint { 214*4882a593Smuzhiyun remote-endpoint = <&hdmi_connector_in>; 215*4882a593Smuzhiyun }; 216*4882a593Smuzhiyun }; 217*4882a593Smuzhiyun }; 218*4882a593Smuzhiyun }; 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun eeprom@54{ 221*4882a593Smuzhiyun compatible = "atmel,24c01"; 222*4882a593Smuzhiyun reg = <0x54>; 223*4882a593Smuzhiyun pagesize = <0x8>; 224*4882a593Smuzhiyun }; 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun eeprom@57{ 227*4882a593Smuzhiyun compatible = "atmel,24c04"; 228*4882a593Smuzhiyun reg = <0x57>; 229*4882a593Smuzhiyun pagesize = <0x8>; 230*4882a593Smuzhiyun }; 231*4882a593Smuzhiyun }; 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun hdmi0: connector { 234*4882a593Smuzhiyun compatible = "hdmi-connector"; 235*4882a593Smuzhiyun type = "a"; 236*4882a593Smuzhiyun port { 237*4882a593Smuzhiyun hdmi_connector_in: endpoint { 238*4882a593Smuzhiyun remote-endpoint = <&adv7511_output>; 239*4882a593Smuzhiyun }; 240*4882a593Smuzhiyun }; 241*4882a593Smuzhiyun }; 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun gpio0:gpio@13000 { 244*4882a593Smuzhiyun compatible = "snps,dw-apb-gpio"; 245*4882a593Smuzhiyun reg = <0x13000 0x1000>; 246*4882a593Smuzhiyun #address-cells = <1>; 247*4882a593Smuzhiyun #size-cells = <0>; 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun gpio0_banka: gpio-controller@0 { 250*4882a593Smuzhiyun compatible = "snps,dw-apb-gpio-port"; 251*4882a593Smuzhiyun gpio-controller; 252*4882a593Smuzhiyun #gpio-cells = <2>; 253*4882a593Smuzhiyun snps,nr-gpios = <32>; 254*4882a593Smuzhiyun reg = <0>; 255*4882a593Smuzhiyun }; 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun gpio0_bankb: gpio-controller@1 { 258*4882a593Smuzhiyun compatible = "snps,dw-apb-gpio-port"; 259*4882a593Smuzhiyun gpio-controller; 260*4882a593Smuzhiyun #gpio-cells = <2>; 261*4882a593Smuzhiyun snps,nr-gpios = <8>; 262*4882a593Smuzhiyun reg = <1>; 263*4882a593Smuzhiyun }; 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun gpio0_bankc: gpio-controller@2 { 266*4882a593Smuzhiyun compatible = "snps,dw-apb-gpio-port"; 267*4882a593Smuzhiyun gpio-controller; 268*4882a593Smuzhiyun #gpio-cells = <2>; 269*4882a593Smuzhiyun snps,nr-gpios = <8>; 270*4882a593Smuzhiyun reg = <2>; 271*4882a593Smuzhiyun }; 272*4882a593Smuzhiyun }; 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun gpio1:gpio@14000 { 275*4882a593Smuzhiyun compatible = "snps,dw-apb-gpio"; 276*4882a593Smuzhiyun reg = <0x14000 0x1000>; 277*4882a593Smuzhiyun #address-cells = <1>; 278*4882a593Smuzhiyun #size-cells = <0>; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun gpio1_banka: gpio-controller@0 { 281*4882a593Smuzhiyun compatible = "snps,dw-apb-gpio-port"; 282*4882a593Smuzhiyun gpio-controller; 283*4882a593Smuzhiyun #gpio-cells = <2>; 284*4882a593Smuzhiyun snps,nr-gpios = <30>; 285*4882a593Smuzhiyun reg = <0>; 286*4882a593Smuzhiyun }; 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun gpio1_bankb: gpio-controller@1 { 289*4882a593Smuzhiyun compatible = "snps,dw-apb-gpio-port"; 290*4882a593Smuzhiyun gpio-controller; 291*4882a593Smuzhiyun #gpio-cells = <2>; 292*4882a593Smuzhiyun snps,nr-gpios = <10>; 293*4882a593Smuzhiyun reg = <1>; 294*4882a593Smuzhiyun }; 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun gpio1_bankc: gpio-controller@2 { 297*4882a593Smuzhiyun compatible = "snps,dw-apb-gpio-port"; 298*4882a593Smuzhiyun gpio-controller; 299*4882a593Smuzhiyun #gpio-cells = <2>; 300*4882a593Smuzhiyun snps,nr-gpios = <8>; 301*4882a593Smuzhiyun reg = <2>; 302*4882a593Smuzhiyun }; 303*4882a593Smuzhiyun }; 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun pgu@17000 { 306*4882a593Smuzhiyun compatible = "snps,arcpgu"; 307*4882a593Smuzhiyun reg = <0x17000 0x400>; 308*4882a593Smuzhiyun clocks = <&pguclk>; 309*4882a593Smuzhiyun clock-names = "pxlclk"; 310*4882a593Smuzhiyun memory-region = <&frame_buffer>; 311*4882a593Smuzhiyun port { 312*4882a593Smuzhiyun pgu_output: endpoint { 313*4882a593Smuzhiyun remote-endpoint = <&adv7511_input>; 314*4882a593Smuzhiyun }; 315*4882a593Smuzhiyun }; 316*4882a593Smuzhiyun }; 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun sound_playback { 319*4882a593Smuzhiyun compatible = "simple-audio-card"; 320*4882a593Smuzhiyun simple-audio-card,name = "AXS10x HDMI Audio"; 321*4882a593Smuzhiyun simple-audio-card,format = "i2s"; 322*4882a593Smuzhiyun simple-audio-card,cpu { 323*4882a593Smuzhiyun sound-dai = <&i2s>; 324*4882a593Smuzhiyun }; 325*4882a593Smuzhiyun simple-audio-card,codec { 326*4882a593Smuzhiyun sound-dai = <&adv7511>; 327*4882a593Smuzhiyun }; 328*4882a593Smuzhiyun }; 329*4882a593Smuzhiyun }; 330*4882a593Smuzhiyun}; 331