Merge tag 'u-boot-amlogic-20181207' of git://git.denx.de/u-boot-amlogic
authorTom Rini <trini@konsulko.com>
Sat, 8 Dec 2018 00:01:09 +0000 (19:01 -0500)
committerTom Rini <trini@konsulko.com>
Sat, 8 Dec 2018 00:01:09 +0000 (19:01 -0500)
Two fixes for the Amlogic Pinctrl driver :
- bad usage of clrsetbits_le32
- bad pin definition for AXG Family

265 files changed:
.travis.yml
MAINTAINERS
README
arch/arm/Kconfig
arch/arm/dts/Makefile
arch/arm/dts/am335x-evm.dts
arch/arm/dts/am335x-evmsk.dts
arch/arm/dts/am335x-pdu001-u-boot.dtsi
arch/arm/dts/am335x-pdu001.dts
arch/arm/dts/am335x-pxm2.dtsi
arch/arm/dts/am335x-rut.dts
arch/arm/dts/am33xx-clocks.dtsi
arch/arm/dts/am33xx.dtsi
arch/arm/dts/am3517-evm-ui.dtsi [new file with mode: 0644]
arch/arm/dts/am3517-evm.dts
arch/arm/dts/am3517-som.dtsi
arch/arm/dts/am4372.dtsi
arch/arm/dts/am437x-idk-evm.dts
arch/arm/dts/bcm6858.dtsi
arch/arm/dts/da850-evm.dts
arch/arm/dts/da850-lcdk.dts
arch/arm/dts/da850.dtsi
arch/arm/dts/dm816x.dtsi
arch/arm/dts/logicpd-som-lv-35xx-devkit.dts
arch/arm/dts/logicpd-som-lv-37xx-devkit.dts
arch/arm/dts/logicpd-som-lv.dtsi
arch/arm/dts/logicpd-torpedo-37xx-devkit.dts
arch/arm/dts/r8a7790-lager.dts
arch/arm/dts/r8a7790.dtsi
arch/arm/dts/r8a7791-koelsch.dts
arch/arm/dts/r8a7791-porter-u-boot.dts
arch/arm/dts/r8a7791-porter.dts
arch/arm/dts/r8a7791.dtsi
arch/arm/dts/r8a7792-blanche.dts
arch/arm/dts/r8a7792.dtsi
arch/arm/dts/r8a7793-gose.dts
arch/arm/dts/r8a7793.dtsi
arch/arm/dts/r8a7794-alt.dts
arch/arm/dts/r8a7794-silk.dts
arch/arm/dts/r8a7794.dtsi
arch/arm/dts/r8a7795-h3ulcb-u-boot.dts
arch/arm/dts/r8a7795-salvator-x-u-boot.dts
arch/arm/dts/r8a7795-salvator-x.dts
arch/arm/dts/r8a7795-u-boot.dtsi
arch/arm/dts/r8a7795.dtsi
arch/arm/dts/r8a7796-m3ulcb-u-boot.dts
arch/arm/dts/r8a7796-salvator-x-u-boot.dts
arch/arm/dts/r8a7796-salvator-x.dts
arch/arm/dts/r8a7796-u-boot.dtsi
arch/arm/dts/r8a7796.dtsi
arch/arm/dts/r8a77965-salvator-x-u-boot.dts
arch/arm/dts/r8a77965-salvator-x.dts
arch/arm/dts/r8a77965-u-boot.dtsi
arch/arm/dts/r8a77965.dtsi
arch/arm/dts/r8a77970-eagle-u-boot.dts
arch/arm/dts/r8a77970-eagle.dts
arch/arm/dts/r8a77970-u-boot.dtsi
arch/arm/dts/r8a77970.dtsi
arch/arm/dts/r8a77990-ebisu-u-boot.dts
arch/arm/dts/r8a77990-ebisu.dts
arch/arm/dts/r8a77990-u-boot.dtsi
arch/arm/dts/r8a77990.dtsi
arch/arm/dts/r8a77995-draak.dts
arch/arm/dts/r8a77995-u-boot.dtsi
arch/arm/dts/r8a77995.dtsi
arch/arm/dts/rk3399-ficus.dts [new file with mode: 0644]
arch/arm/dts/rk3399-rock960.dts [new file with mode: 0644]
arch/arm/dts/rk3399-rock960.dtsi [new file with mode: 0644]
arch/arm/dts/rk3399-sdram-lpddr3-2GB-1600.dtsi [new file with mode: 0644]
arch/arm/dts/rk3399.dtsi
arch/arm/dts/salvator-common.dtsi
arch/arm/dts/salvator-x.dtsi
arch/arm/dts/stm32mp157c-ed1.dts
arch/arm/dts/stm32mp157c.dtsi
arch/arm/dts/ulcb.dtsi
arch/arm/include/asm/arch-stm32/gpio.h
arch/arm/include/asm/io.h
arch/arm/mach-at91/arm926ejs/u-boot-spl.lds
arch/arm/mach-rmobile/Kconfig
arch/arm/mach-rmobile/cpu_info.c
arch/arm/mach-rockchip/rk3399/Kconfig
arch/arm/mach-stm32mp/include/mach/gpio.h
arch/powerpc/include/asm/config.h
arch/riscv/Kconfig
arch/riscv/cpu/start.S
arch/riscv/include/asm/encoding.h
arch/riscv/lib/interrupts.c
arch/sandbox/Makefile
arch/sandbox/config.mk
arch/sandbox/cpu/Makefile
arch/sandbox/cpu/os.c
arch/sandbox/cpu/spl.c
arch/sandbox/cpu/start.c
arch/sandbox/dts/test.dts
arch/sandbox/include/asm/state.h
arch/x86/include/asm/acpi_table.h
arch/x86/lib/acpi_table.c
board/AndesTech/ax25-ae350/ax25-ae350.c
board/emulation/qemu-riscv/Kconfig
board/emulation/qemu-riscv/MAINTAINERS
board/freescale/mpc8349emds/mpc8349emds.c
board/ids/ids8313/ids8313.c
board/renesas/salvator-x/salvator-x.c
board/renesas/ulcb/ulcb.c
board/ti/ks2_evm/board.c
board/vamrs/rock960_rk3399/Kconfig [new file with mode: 0644]
board/vamrs/rock960_rk3399/MAINTAINERS [new file with mode: 0644]
board/vamrs/rock960_rk3399/Makefile [new file with mode: 0644]
board/vamrs/rock960_rk3399/README [new file with mode: 0644]
board/vamrs/rock960_rk3399/rock960-rk3399.c [new file with mode: 0644]
cmd/Kconfig
cmd/Makefile
cmd/bmp.c
cmd/bootmenu.c
cmd/cls.c [new file with mode: 0644]
cmd/eeprom.c
cmd/ubi.c
common/board_f.c
common/board_r.c
common/lcd.c
common/main.c
configs/am335x_hs_evm_uart_defconfig
configs/am335x_pdu001_defconfig
configs/bcm968580_ram_defconfig
configs/ficus-rk3399_defconfig [new file with mode: 0644]
configs/qemu-riscv32_smode_defconfig [new file with mode: 0644]
configs/qemu-riscv64_smode_defconfig [new file with mode: 0644]
configs/r8a7795_salvator-x_defconfig
configs/r8a7795_ulcb_defconfig
configs/r8a77965_salvator-x_defconfig
configs/r8a7796_salvator-x_defconfig
configs/r8a7796_ulcb_defconfig
configs/rock960-rk3399_defconfig [new file with mode: 0644]
configs/sandbox_defconfig
configs/stm32f746-disco_defconfig
configs/stm32mp15_basic_defconfig
doc/driver-model/spi-howto.txt
drivers/Kconfig
drivers/Makefile
drivers/clk/clk-uclass.c
drivers/clk/clk_stm32mp1.c
drivers/core/fdtaddr.c
drivers/core/read.c
drivers/dma/Kconfig
drivers/dma/Makefile
drivers/dma/dma-uclass.c
drivers/dma/sandbox-dma-test.c [new file with mode: 0644]
drivers/dma/ti-edma3.c
drivers/gpio/stm32f7_gpio.c
drivers/hwspinlock/Kconfig [new file with mode: 0644]
drivers/hwspinlock/Makefile [new file with mode: 0644]
drivers/hwspinlock/hwspinlock-uclass.c [new file with mode: 0644]
drivers/hwspinlock/sandbox_hwspinlock.c [new file with mode: 0644]
drivers/hwspinlock/stm32_hwspinlock.c [new file with mode: 0644]
drivers/input/i8042.c
drivers/misc/cros_ec.c
drivers/misc/cros_ec_sandbox.c
drivers/mmc/mmc.c
drivers/mtd/mtd_uboot.c
drivers/mtd/mtdcore.c
drivers/mtd/mtdpart.c
drivers/mtd/nand/raw/pxa3xx_nand.c
drivers/mtd/spi/sf_mtd.c
drivers/mtd/spi/sf_probe.c
drivers/net/e1000_spi.c
drivers/net/sandbox-raw-bus.c
drivers/pci/pci_rom.c
drivers/pinctrl/pinctrl_stm32.c
drivers/power/regulator/regulator-uclass.c
drivers/serial/Kconfig
drivers/serial/Makefile
drivers/serial/ns16550.c
drivers/serial/sandbox.c
drivers/serial/serial-uclass.c
drivers/serial/serial_bcm6345.c
drivers/serial/serial_bcm6858.c [deleted file]
drivers/serial/serial_omap.c
drivers/spi/Kconfig
drivers/spi/Makefile
drivers/spi/atmel_spi.c
drivers/spi/davinci_spi.c
drivers/spi/fsl_dspi.c
drivers/spi/fsl_espi.c
drivers/spi/lpc32xx_ssp.c
drivers/spi/meson_spifc.c [new file with mode: 0644]
drivers/spi/mtk_qspi.c [new file with mode: 0644]
drivers/spi/mxc_spi.c
drivers/spi/mxs_spi.c
drivers/spi/omap3_spi.c
drivers/spi/pl022_spi.c
drivers/spi/sh_qspi.c
drivers/spi/sh_spi.c
drivers/spi/soft_spi_legacy.c
drivers/sysreset/sysreset_sandbox.c
drivers/video/pwm_backlight.c
drivers/video/video-uclass.c
drivers/video/video_bmp.c
drivers/w1/w1-uclass.c
examples/standalone/atmel_df_pow2.c
fs/fat/fat.c
include/_exports.h
include/common.h
include/configs/M52277EVB.h
include/configs/M54418TWR.h
include/configs/M54451EVB.h
include/configs/M54455EVB.h
include/configs/MPC8536DS.h
include/configs/P1022DS.h
include/configs/UCP1020.h
include/configs/alt.h
include/configs/controlcenterd.h
include/configs/gose.h
include/configs/ids8313.h
include/configs/koelsch.h
include/configs/lager.h
include/configs/mx31pdk.h
include/configs/mxs.h
include/configs/p1_p2_rdb_pc.h
include/configs/p1_twr.h
include/configs/porter.h
include/configs/rcar-gen3-common.h
include/configs/rock960_rk3399.h [new file with mode: 0644]
include/configs/silk.h
include/configs/stmark2.h
include/configs/stout.h
include/configs/ts4800.h
include/dm/fdtaddr.h
include/dm/platform_data/spi_pl022.h [moved from include/dm/platform_data/pl022_spi.h with 64% similarity]
include/dm/read.h
include/dm/uclass-id.h
include/dma-uclass.h [new file with mode: 0644]
include/dma.h
include/dt-bindings/clock/am3.h [new file with mode: 0644]
include/dt-bindings/clock/r8a77965-cpg-mssr.h [new file with mode: 0644]
include/dt-bindings/clock/r8a77990-cpg-mssr.h
include/dt-bindings/power/r8a77990-sysc.h
include/hwspinlock.h [new file with mode: 0644]
include/i8042.h
include/inttypes.h [new file with mode: 0644]
include/linux/delay.h
include/linux/kernel.h
include/linux/mtd/mtd.h
include/ns16550.h
include/regmap.h
include/rtc.h
include/serial.h
include/spi.h
include/spl.h
include/tpm-common.h
include/tpm-v2.h
include/usb/dwc2_udc.h
include/video.h
lib/physmem.c
lib/tpm-common.c
lib/tpm-v1.c
scripts/config_whitelist.txt
test/dm/Makefile
test/dm/dma.c [new file with mode: 0644]
test/dm/hwspinlock.c [new file with mode: 0644]
test/dm/regmap.c
test/dm/serial.c
test/dm/sysreset.c
test/dm/test-fdt.c
test/py/u_boot_console_base.py
tools/buildman/toolchain.py

index a061f02..ed07d81 100644 (file)
@@ -42,7 +42,7 @@ install:
  - ln -s travis-ci /tmp/uboot-test-hooks/py/`hostname`
  # prepare buildman environment
  - echo -e "[toolchain]\nroot = /usr" > ~/.buildman
- - echo -e "arc = /tmp/arc_gnu_2017.09_prebuilt_uclibc_le_archs_linux_install" >> ~/.buildman
+ - echo -e "arc = /tmp/arc_gnu_2018.09_prebuilt_uclibc_le_archs_linux_install" >> ~/.buildman
  - echo -e "\n[toolchain-alias]\nsh = sh2\n" >> ~/.buildman
  - cat ~/.buildman
  - virtualenv /tmp/venv
@@ -75,8 +75,8 @@ before_script:
       echo -e "\n[toolchain-alias]\nx86 = i386" >> ~/.buildman;
     fi
   - if [[ "${TOOLCHAIN}" == arc ]]; then
-       wget https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/download/arc-2017.09-release/arc_gnu_2017.09_prebuilt_uclibc_le_archs_linux_install.tar.gz &&
-       tar -C /tmp -xf arc_gnu_2017.09_prebuilt_uclibc_le_archs_linux_install.tar.gz;
+       wget https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/download/arc-2018.09-release/arc_gnu_2018.09_prebuilt_uclibc_le_archs_linux_install.tar.gz &&
+       tar -C /tmp -xf arc_gnu_2018.09_prebuilt_uclibc_le_archs_linux_install.tar.gz;
     fi
   - if [[ "${TOOLCHAIN}" == *xtensa* ]]; then
        wget https://github.com/foss-xtensa/toolchain/releases/download/2018.02/x86_64-2018.02-${TOOLCHAIN}.tar.gz &&
index 8ea8ef9..0cec39c 100644 (file)
@@ -380,6 +380,11 @@ S: Maintained
 T:     git git://git.denx.de/u-boot-microblaze.git
 F:     arch/arm/mach-zynqmp-r5/
 
+BINMAN
+M:     Simon Glass <sjg@chromium.org>
+S:     Maintained
+F:     tools/binman/
+
 BUILDMAN
 M:     Simon Glass <sjg@chromium.org>
 S:     Maintained
diff --git a/README b/README
index a46c7c6..17d56b8 100644 (file)
--- a/README
+++ b/README
@@ -1932,14 +1932,6 @@ The following options need to be configured:
                SPI configuration items (port pins to use, etc). For
                an example, see include/configs/sacsng.h.
 
-               CONFIG_HARD_SPI
-
-               Enables a hardware SPI driver for general-purpose reads
-               and writes.  As with CONFIG_SOFT_SPI, the board configuration
-               must define a list of chip-select function pointers.
-               Currently supported on some MPC8xxx processors.  For an
-               example, see include/configs/mpc8349emds.h.
-
                CONFIG_SYS_SPI_MXC_WAIT
                Timeout for waiting until spi transfer completed.
                default: (CONFIG_SYS_HZ/100)     /* 10 ms */
index eb6ce29..13ba774 100644 (file)
@@ -784,6 +784,7 @@ config ARCH_RMOBILE
        imply CMD_DM
        imply FAT_WRITE
        imply SYS_THUMB_BUILD
+       imply ARCH_MISC_INIT if DISPLAY_CPUINFO
 
 config TARGET_S32V234EVB
        bool "Support s32v234evb"
index c5960d3..949ee47 100644 (file)
@@ -42,6 +42,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += \
        rk3288-veyron-minnie.dtb \
        rk3288-vyasa.dtb \
        rk3328-evb.dtb \
+       rk3399-ficus.dtb \
        rk3368-lion.dtb \
        rk3368-sheep.dtb \
        rk3368-geekbox.dtb \
@@ -51,6 +52,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += \
        rk3399-puma-ddr1333.dtb \
        rk3399-puma-ddr1600.dtb \
        rk3399-puma-ddr1866.dtb \
+       rk3399-rock960.dtb \
        rv1108-evb.dtb
 dtb-$(CONFIG_ARCH_MESON) += \
        meson-gxbb-nanopi-k2.dtb \
index a6f20af..fe27207 100644 (file)
@@ -80,8 +80,6 @@
 
        gpio_keys: volume_keys@0 {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
                autorepeat;
 
                switch@9 {
 &mmc3 {
        /* these are on the crossbar and are outlined in the
           xbar-event-map element */
-       dmas = <&edma 12
-               &edma 13>;
+       dmas = <&edma 12 0
+               &edma 13 0>;
        dma-names = "tx", "rx";
        status = "okay";
        vmmc-supply = <&wlan_en_reg>;
index b3e9b61..0767578 100644 (file)
 
        gpio_buttons: gpio_buttons@0 {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
 
                switch@1 {
                        label = "button0";
index fbb6a3f..84a07bd 100644 (file)
        u-boot,dm-pre-reloc;
 };
 
+&mmc1 {
+       u-boot,dm-pre-reloc;
+};
+
 &mmc1_pins {
        u-boot,dm-pre-reloc;
 };
 
+&mmc2 {
+       u-boot,dm-pre-reloc;
+};
+
 &mmc2_pins {
        u-boot,dm-pre-reloc;
 };
index 121e2c6..3a5e952 100644 (file)
        bus-width = <4>;
        pinctrl-names = "default";
        pinctrl-0 = <&mmc2_pins>;
-       cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>;
+       cd-gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>;
 };
 
 &sham {
index 8d58cd4..d9243d5 100644 (file)
@@ -50,8 +50,6 @@
 
        gpio_keys: restart-keys {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
                autorepeat;
 
                restart0 {
index c6cfbb8..a5716a9 100644 (file)
@@ -36,8 +36,6 @@
 
        gpio_keys: powerfail-keys {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
                autorepeat;
 
                pwr-fail0 {
 
 &epwmss1 {
        status = "okay";
-
-       ehrpwm1: ehrpwm@48302200 {
-               status = "okay";
-               pinctrl-names = "default";
-               pinctrl-0 = <&epwmss1_pins>;
-       };
+       pinctrl-names = "default";
+       pinctrl-0 = <&epwmss1_pins>;
 };
 
 &gpmc {
index afb4b3a..95d5c9d 100644 (file)
@@ -8,7 +8,7 @@
  * published by the Free Software Foundation.
  */
 &scm_clocks {
-       sys_clkin_ck: sys_clkin_ck {
+       sys_clkin_ck: sys_clkin_ck@40 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
                clocks = <&virt_19200000_ck>, <&virt_24000000_ck>, <&virt_25000000_ck>, <&virt_26000000_ck>;
                clock-frequency = <12000000>;
        };
 
-       dpll_core_ck: dpll_core_ck {
+       dpll_core_ck: dpll_core_ck@490 {
                #clock-cells = <0>;
                compatible = "ti,am3-dpll-core-clock";
                clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
                clocks = <&dpll_core_ck>;
        };
 
-       dpll_core_m4_ck: dpll_core_m4_ck {
+       dpll_core_m4_ck: dpll_core_m4_ck@480 {
                #clock-cells = <0>;
                compatible = "ti,divider-clock";
                clocks = <&dpll_core_x2_ck>;
                ti,index-starts-at-one;
        };
 
-       dpll_core_m5_ck: dpll_core_m5_ck {
+       dpll_core_m5_ck: dpll_core_m5_ck@484 {
                #clock-cells = <0>;
                compatible = "ti,divider-clock";
                clocks = <&dpll_core_x2_ck>;
                ti,index-starts-at-one;
        };
 
-       dpll_core_m6_ck: dpll_core_m6_ck {
+       dpll_core_m6_ck: dpll_core_m6_ck@4d8 {
                #clock-cells = <0>;
                compatible = "ti,divider-clock";
                clocks = <&dpll_core_x2_ck>;
                ti,index-starts-at-one;
        };
 
-       dpll_mpu_ck: dpll_mpu_ck {
+       dpll_mpu_ck: dpll_mpu_ck@488 {
                #clock-cells = <0>;
                compatible = "ti,am3-dpll-clock";
                clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
                reg = <0x0488>, <0x0420>, <0x042c>;
        };
 
-       dpll_mpu_m2_ck: dpll_mpu_m2_ck {
+       dpll_mpu_m2_ck: dpll_mpu_m2_ck@4a8 {
                #clock-cells = <0>;
                compatible = "ti,divider-clock";
                clocks = <&dpll_mpu_ck>;
                ti,index-starts-at-one;
        };
 
-       dpll_ddr_ck: dpll_ddr_ck {
+       dpll_ddr_ck: dpll_ddr_ck@494 {
                #clock-cells = <0>;
                compatible = "ti,am3-dpll-no-gate-clock";
                clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
                reg = <0x0494>, <0x0434>, <0x0440>;
        };
 
-       dpll_ddr_m2_ck: dpll_ddr_m2_ck {
+       dpll_ddr_m2_ck: dpll_ddr_m2_ck@4a0 {
                #clock-cells = <0>;
                compatible = "ti,divider-clock";
                clocks = <&dpll_ddr_ck>;
                clock-div = <2>;
        };
 
-       dpll_disp_ck: dpll_disp_ck {
+       dpll_disp_ck: dpll_disp_ck@498 {
                #clock-cells = <0>;
                compatible = "ti,am3-dpll-no-gate-clock";
                clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
                reg = <0x0498>, <0x0448>, <0x0454>;
        };
 
-       dpll_disp_m2_ck: dpll_disp_m2_ck {
+       dpll_disp_m2_ck: dpll_disp_m2_ck@4a4 {
                #clock-cells = <0>;
                compatible = "ti,divider-clock";
                clocks = <&dpll_disp_ck>;
                ti,set-rate-parent;
        };
 
-       dpll_per_ck: dpll_per_ck {
+       dpll_per_ck: dpll_per_ck@48c {
                #clock-cells = <0>;
                compatible = "ti,am3-dpll-no-gate-j-type-clock";
                clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
                reg = <0x048c>, <0x0470>, <0x049c>;
        };
 
-       dpll_per_m2_ck: dpll_per_m2_ck {
+       dpll_per_m2_ck: dpll_per_m2_ck@4ac {
                #clock-cells = <0>;
                compatible = "ti,divider-clock";
                clocks = <&dpll_per_ck>;
                clock-div = <4>;
        };
 
-       cefuse_fck: cefuse_fck {
-               #clock-cells = <0>;
-               compatible = "ti,gate-clock";
-               clocks = <&sys_clkin_ck>;
-               ti,bit-shift = <1>;
-               reg = <0x0a20>;
-       };
-
        clk_24mhz: clk_24mhz {
                #clock-cells = <0>;
                compatible = "fixed-factor-clock";
                clock-div = <732>;
        };
 
-       clkdiv32k_ick: clkdiv32k_ick {
-               #clock-cells = <0>;
-               compatible = "ti,gate-clock";
-               clocks = <&clkdiv32k_ck>;
-               ti,bit-shift = <1>;
-               reg = <0x014c>;
-       };
-
        l3_gclk: l3_gclk {
                #clock-cells = <0>;
                compatible = "fixed-factor-clock";
                clock-div = <1>;
        };
 
-       pruss_ocp_gclk: pruss_ocp_gclk {
+       pruss_ocp_gclk: pruss_ocp_gclk@530 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
                clocks = <&l3_gclk>, <&dpll_disp_m2_ck>;
                reg = <0x0530>;
        };
 
-       mmu_fck: mmu_fck {
+       mmu_fck: mmu_fck@914 {
                #clock-cells = <0>;
                compatible = "ti,gate-clock";
                clocks = <&dpll_core_m4_ck>;
                reg = <0x0914>;
        };
 
-       timer1_fck: timer1_fck {
+       timer1_fck: timer1_fck@528 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
-               clocks = <&sys_clkin_ck>, <&clkdiv32k_ick>, <&tclkin_ck>, <&clk_rc32k_ck>, <&clk_32768_ck>;
+               clocks = <&sys_clkin_ck>, <&l4_per_clkctrl AM3_CLKDIV32K_CLKCTRL 0>, <&tclkin_ck>, <&clk_rc32k_ck>, <&clk_32768_ck>;
                reg = <0x0528>;
        };
 
-       timer2_fck: timer2_fck {
+       timer2_fck: timer2_fck@508 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
-               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>;
+               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&l4_per_clkctrl AM3_CLKDIV32K_CLKCTRL 0>;
                reg = <0x0508>;
        };
 
-       timer3_fck: timer3_fck {
+       timer3_fck: timer3_fck@50c {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
-               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>;
+               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&l4_per_clkctrl AM3_CLKDIV32K_CLKCTRL 0>;
                reg = <0x050c>;
        };
 
-       timer4_fck: timer4_fck {
+       timer4_fck: timer4_fck@510 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
-               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>;
+               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&l4_per_clkctrl AM3_CLKDIV32K_CLKCTRL 0>;
                reg = <0x0510>;
        };
 
-       timer5_fck: timer5_fck {
+       timer5_fck: timer5_fck@518 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
-               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>;
+               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&l4_per_clkctrl AM3_CLKDIV32K_CLKCTRL 0>;
                reg = <0x0518>;
        };
 
-       timer6_fck: timer6_fck {
+       timer6_fck: timer6_fck@51c {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
-               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>;
+               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&l4_per_clkctrl AM3_CLKDIV32K_CLKCTRL 0>;
                reg = <0x051c>;
        };
 
-       timer7_fck: timer7_fck {
+       timer7_fck: timer7_fck@504 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
-               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&clkdiv32k_ick>;
+               clocks = <&tclkin_ck>, <&sys_clkin_ck>, <&l4_per_clkctrl AM3_CLKDIV32K_CLKCTRL 0>;
                reg = <0x0504>;
        };
 
-       usbotg_fck: usbotg_fck {
+       usbotg_fck: usbotg_fck@47c {
                #clock-cells = <0>;
                compatible = "ti,gate-clock";
                clocks = <&dpll_per_ck>;
                clock-div = <2>;
        };
 
-       ieee5000_fck: ieee5000_fck {
+       ieee5000_fck: ieee5000_fck@e4 {
                #clock-cells = <0>;
                compatible = "ti,gate-clock";
                clocks = <&dpll_core_m4_div2_ck>;
                reg = <0x00e4>;
        };
 
-       wdt1_fck: wdt1_fck {
+       wdt1_fck: wdt1_fck@538 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
-               clocks = <&clk_rc32k_ck>, <&clkdiv32k_ick>;
+               clocks = <&clk_rc32k_ck>, <&l4_per_clkctrl AM3_CLKDIV32K_CLKCTRL 0>;
                reg = <0x0538>;
        };
 
                clock-div = <2>;
        };
 
-       cpsw_cpts_rft_clk: cpsw_cpts_rft_clk {
+       cpsw_cpts_rft_clk: cpsw_cpts_rft_clk@520 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
                clocks = <&dpll_core_m5_ck>, <&dpll_core_m4_ck>;
                reg = <0x0520>;
        };
 
-       gpio0_dbclk_mux_ck: gpio0_dbclk_mux_ck {
+       gpio0_dbclk_mux_ck: gpio0_dbclk_mux_ck@53c {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
-               clocks = <&clk_rc32k_ck>, <&clk_32768_ck>, <&clkdiv32k_ick>;
+               clocks = <&clk_rc32k_ck>, <&clk_32768_ck>, <&l4_per_clkctrl AM3_CLKDIV32K_CLKCTRL 0>;
                reg = <0x053c>;
        };
 
-       gpio0_dbclk: gpio0_dbclk {
-               #clock-cells = <0>;
-               compatible = "ti,gate-clock";
-               clocks = <&gpio0_dbclk_mux_ck>;
-               ti,bit-shift = <18>;
-               reg = <0x0408>;
-       };
-
-       gpio1_dbclk: gpio1_dbclk {
-               #clock-cells = <0>;
-               compatible = "ti,gate-clock";
-               clocks = <&clkdiv32k_ick>;
-               ti,bit-shift = <18>;
-               reg = <0x00ac>;
-       };
-
-       gpio2_dbclk: gpio2_dbclk {
-               #clock-cells = <0>;
-               compatible = "ti,gate-clock";
-               clocks = <&clkdiv32k_ick>;
-               ti,bit-shift = <18>;
-               reg = <0x00b0>;
-       };
-
-       gpio3_dbclk: gpio3_dbclk {
-               #clock-cells = <0>;
-               compatible = "ti,gate-clock";
-               clocks = <&clkdiv32k_ick>;
-               ti,bit-shift = <18>;
-               reg = <0x00b4>;
-       };
-
-       lcd_gclk: lcd_gclk {
+       lcd_gclk: lcd_gclk@534 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
                clocks = <&dpll_disp_m2_ck>, <&dpll_core_m5_ck>, <&dpll_per_m2_ck>;
                clock-div = <2>;
        };
 
-       gfx_fclk_clksel_ck: gfx_fclk_clksel_ck {
+       gfx_fclk_clksel_ck: gfx_fclk_clksel_ck@52c {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
                clocks = <&dpll_core_m4_ck>, <&dpll_per_m2_ck>;
                reg = <0x052c>;
        };
 
-       gfx_fck_div_ck: gfx_fck_div_ck {
+       gfx_fck_div_ck: gfx_fck_div_ck@52c {
                #clock-cells = <0>;
                compatible = "ti,divider-clock";
                clocks = <&gfx_fclk_clksel_ck>;
                ti,max-div = <2>;
        };
 
-       sysclkout_pre_ck: sysclkout_pre_ck {
+       sysclkout_pre_ck: sysclkout_pre_ck@700 {
                #clock-cells = <0>;
                compatible = "ti,mux-clock";
                clocks = <&clk_32768_ck>, <&l3_gclk>, <&dpll_ddr_m2_ck>, <&dpll_per_m2_ck>, <&lcd_gclk>;
                reg = <0x0700>;
        };
 
-       clkout2_div_ck: clkout2_div_ck {
+       clkout2_div_ck: clkout2_div_ck@700 {
                #clock-cells = <0>;
                compatible = "ti,divider-clock";
                clocks = <&sysclkout_pre_ck>;
                reg = <0x0700>;
        };
 
-       dbg_sysclk_ck: dbg_sysclk_ck {
-               #clock-cells = <0>;
-               compatible = "ti,gate-clock";
-               clocks = <&sys_clkin_ck>;
-               ti,bit-shift = <19>;
-               reg = <0x0414>;
-       };
-
-       dbg_clka_ck: dbg_clka_ck {
-               #clock-cells = <0>;
-               compatible = "ti,gate-clock";
-               clocks = <&dpll_core_m4_ck>;
-               ti,bit-shift = <30>;
-               reg = <0x0414>;
-       };
-
-       stm_pmd_clock_mux_ck: stm_pmd_clock_mux_ck {
-               #clock-cells = <0>;
-               compatible = "ti,mux-clock";
-               clocks = <&dbg_sysclk_ck>, <&dbg_clka_ck>;
-               ti,bit-shift = <22>;
-               reg = <0x0414>;
-       };
-
-       trace_pmd_clk_mux_ck: trace_pmd_clk_mux_ck {
-               #clock-cells = <0>;
-               compatible = "ti,mux-clock";
-               clocks = <&dbg_sysclk_ck>, <&dbg_clka_ck>;
-               ti,bit-shift = <20>;
-               reg = <0x0414>;
-       };
-
-       stm_clk_div_ck: stm_clk_div_ck {
-               #clock-cells = <0>;
-               compatible = "ti,divider-clock";
-               clocks = <&stm_pmd_clock_mux_ck>;
-               ti,bit-shift = <27>;
-               ti,max-div = <64>;
-               reg = <0x0414>;
-               ti,index-power-of-two;
-       };
-
-       trace_clk_div_ck: trace_clk_div_ck {
-               #clock-cells = <0>;
-               compatible = "ti,divider-clock";
-               clocks = <&trace_pmd_clk_mux_ck>;
-               ti,bit-shift = <24>;
-               ti,max-div = <64>;
-               reg = <0x0414>;
-               ti,index-power-of-two;
-       };
-
-       clkout2_ck: clkout2_ck {
+       clkout2_ck: clkout2_ck@700 {
                #clock-cells = <0>;
                compatible = "ti,gate-clock";
                clocks = <&clkout2_div_ck>;
        };
 };
 
-&prcm_clockdomains {
-       clk_24mhz_clkdm: clk_24mhz_clkdm {
-               compatible = "ti,clockdomain";
-               clocks = <&clkdiv32k_ick>;
+&prcm {
+       l4_per_cm: l4_per_cm@0 {
+               compatible = "ti,omap4-cm";
+               reg = <0x0 0x200>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0 0x0 0x200>;
+
+               l4_per_clkctrl: clk@14 {
+                       compatible = "ti,clkctrl";
+                       reg = <0x14 0x13c>;
+                       #clock-cells = <2>;
+               };
+       };
+
+       l4_wkup_cm: l4_wkup_cm@400 {
+               compatible = "ti,omap4-cm";
+               reg = <0x400 0x100>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0 0x400 0x100>;
+
+               l4_wkup_clkctrl: clk@4 {
+                       compatible = "ti,clkctrl";
+                       reg = <0x4 0xd4>;
+                       #clock-cells = <2>;
+               };
+       };
+
+       mpu_cm: mpu_cm@600 {
+               compatible = "ti,omap4-cm";
+               reg = <0x600 0x100>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0 0x600 0x100>;
+
+               mpu_clkctrl: clk@4 {
+                       compatible = "ti,clkctrl";
+                       reg = <0x4 0x4>;
+                       #clock-cells = <2>;
+               };
+       };
+
+       l4_rtc_cm: l4_rtc_cm@800 {
+               compatible = "ti,omap4-cm";
+               reg = <0x800 0x100>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0 0x800 0x100>;
+
+               l4_rtc_clkctrl: clk@0 {
+                       compatible = "ti,clkctrl";
+                       reg = <0x0 0x4>;
+                       #clock-cells = <2>;
+               };
+       };
+
+       gfx_l3_cm: gfx_l3_cm@900 {
+               compatible = "ti,omap4-cm";
+               reg = <0x900 0x100>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0 0x900 0x100>;
+
+               gfx_l3_clkctrl: clk@4 {
+                       compatible = "ti,clkctrl";
+                       reg = <0x4 0x4>;
+                       #clock-cells = <2>;
+               };
+       };
+
+       l4_cefuse_cm: l4_cefuse_cm@a00 {
+               compatible = "ti,omap4-cm";
+               reg = <0xa00 0x100>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0 0xa00 0x100>;
+
+               l4_cefuse_clkctrl: clk@20 {
+                       compatible = "ti,clkctrl";
+                       reg = <0x20 0x4>;
+                       #clock-cells = <2>;
+               };
        };
 };
index 4234537..d3dd6a1 100644 (file)
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/pinctrl/am33xx.h>
-
-#include "skeleton.dtsi"
+#include <dt-bindings/clock/am3.h>
 
 / {
        compatible = "ti,am33xx";
        interrupt-parent = <&intc>;
+       #address-cells = <1>;
+       #size-cells = <1>;
+       chosen { };
 
        aliases {
                i2c0 = &i2c0;
                serial3 = &uart3;
                serial4 = &uart4;
                serial5 = &uart5;
-               d_can0 = &dcan0;
-               d_can1 = &dcan1;
+               d-can0 = &dcan0;
+               d-can1 = &dcan1;
                usb0 = &usb0;
                usb1 = &usb1;
                phy0 = &usb0_phy;
                phy1 = &usb1_phy;
                ethernet0 = &cpsw_emac0;
                ethernet1 = &cpsw_emac1;
+               spi0 = &spi0;
+               spi1 = &spi1;
        };
 
        cpus {
                        device_type = "cpu";
                        reg = <0>;
 
-                       /*
-                        * To consider voltage drop between PMIC and SoC,
-                        * tolerance value is reduced to 2% from 4% and
-                        * voltage value is increased as a precaution.
-                        */
-                       operating-points = <
-                               /* kHz    uV */
-                               720000  1285000
-                               600000  1225000
-                               500000  1125000
-                               275000  1125000
-                       >;
-                       voltage-tolerance = <2>; /* 2 percentage */
+                       operating-points-v2 = <&cpu0_opp_table>;
 
                        clocks = <&dpll_mpu_ck>;
                        clock-names = "cpu";
                };
        };
 
-       pmu {
+       cpu0_opp_table: opp-table {
+               compatible = "operating-points-v2-ti-cpu";
+               syscon = <&scm_conf>;
+
+               /*
+                * The three following nodes are marked with opp-suspend
+                * because the can not be enabled simultaneously on a
+                * single SoC.
+                */
+               opp50-300000000 {
+                       opp-hz = /bits/ 64 <300000000>;
+                       opp-microvolt = <950000 931000 969000>;
+                       opp-supported-hw = <0x06 0x0010>;
+                       opp-suspend;
+               };
+
+               opp100-275000000 {
+                       opp-hz = /bits/ 64 <275000000>;
+                       opp-microvolt = <1100000 1078000 1122000>;
+                       opp-supported-hw = <0x01 0x00FF>;
+                       opp-suspend;
+               };
+
+               opp100-300000000 {
+                       opp-hz = /bits/ 64 <300000000>;
+                       opp-microvolt = <1100000 1078000 1122000>;
+                       opp-supported-hw = <0x06 0x0020>;
+                       opp-suspend;
+               };
+
+               opp100-500000000 {
+                       opp-hz = /bits/ 64 <500000000>;
+                       opp-microvolt = <1100000 1078000 1122000>;
+                       opp-supported-hw = <0x01 0xFFFF>;
+               };
+
+               opp100-600000000 {
+                       opp-hz = /bits/ 64 <600000000>;
+                       opp-microvolt = <1100000 1078000 1122000>;
+                       opp-supported-hw = <0x06 0x0040>;
+               };
+
+               opp120-600000000 {
+                       opp-hz = /bits/ 64 <600000000>;
+                       opp-microvolt = <1200000 1176000 1224000>;
+                       opp-supported-hw = <0x01 0xFFFF>;
+               };
+
+               opp120-720000000 {
+                       opp-hz = /bits/ 64 <720000000>;
+                       opp-microvolt = <1200000 1176000 1224000>;
+                       opp-supported-hw = <0x06 0x0080>;
+               };
+
+               oppturbo-720000000 {
+                       opp-hz = /bits/ 64 <720000000>;
+                       opp-microvolt = <1260000 1234800 1285200>;
+                       opp-supported-hw = <0x01 0xFFFF>;
+               };
+
+               oppturbo-800000000 {
+                       opp-hz = /bits/ 64 <800000000>;
+                       opp-microvolt = <1260000 1234800 1285200>;
+                       opp-supported-hw = <0x06 0x0100>;
+               };
+
+               oppnitro-1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-microvolt = <1325000 1298500 1351500>;
+                       opp-supported-hw = <0x04 0x0200>;
+               };
+       };
+
+       pmu@4b000000 {
                compatible = "arm,cortex-a8-pmu";
                interrupts = <3>;
+               reg = <0x4b000000 0x1000000>;
+               ti,hwmods = "debugss";
        };
 
        /*
                mpu {
                        compatible = "ti,omap3-mpu";
                        ti,hwmods = "mpu";
+                       pm-sram = <&pm_sram_code
+                                  &pm_sram_data>;
                };
        };
 
         * the whole bus hierarchy.
         */
        ocp {
-               u-boot,dm-spl;
                compatible = "simple-bus";
                #address-cells = <1>;
                #size-cells = <1>;
                        #size-cells = <1>;
                        ranges = <0 0x44c00000 0x280000>;
 
+                       wkup_m3: wkup_m3@100000 {
+                               compatible = "ti,am3352-wkup-m3";
+                               reg = <0x100000 0x4000>,
+                                     <0x180000 0x2000>;
+                               reg-names = "umem", "dmem";
+                               ti,hwmods = "wkup_m3";
+                               ti,pm-firmware = "am335x-pm-firmware.elf";
+                       };
+
                        prcm: prcm@200000 {
-                               compatible = "ti,am3-prcm";
+                               compatible = "ti,am3-prcm", "simple-bus";
                                reg = <0x200000 0x4000>;
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               ranges = <0 0x200000 0x4000>;
 
                                prcm_clocks: clocks {
                                        #address-cells = <1>;
                                reg = <0x210000 0x2000>;
                                #address-cells = <1>;
                                #size-cells = <1>;
+                               #pinctrl-cells = <1>;
                                ranges = <0 0x210000 0x2000>;
 
                                am33xx_pinmux: pinmux@800 {
                                        reg = <0x800 0x238>;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
+                                       #pinctrl-cells = <1>;
                                        pinctrl-single,register-width = <32>;
                                        pinctrl-single,function-mask = <0x7f>;
                                };
 
                                scm_conf: scm_conf@0 {
-                                       compatible = "syscon";
+                                       compatible = "syscon", "simple-bus";
                                        reg = <0x0 0x800>;
                                        #address-cells = <1>;
                                        #size-cells = <1>;
+                                       ranges = <0 0 0x800>;
 
                                        scm_clocks: clocks {
                                                #address-cells = <1>;
                                        };
                                };
 
+                               wkup_m3_ipc: wkup_m3_ipc@1324 {
+                                       compatible = "ti,am3352-wkup-m3-ipc";
+                                       reg = <0x1324 0x24>;
+                                       interrupts = <78>;
+                                       ti,rproc = <&wkup_m3>;
+                                       mboxes = <&mailbox &mbox_wkupm3>;
+                               };
+
+                               edma_xbar: dma-router@f90 {
+                                       compatible = "ti,am335x-edma-crossbar";
+                                       reg = <0xf90 0x40>;
+                                       #dma-cells = <3>;
+                                       dma-requests = <32>;
+                                       dma-masters = <&edma>;
+                               };
+
                                scm_clockdomains: clockdomains {
                                };
                        };
                };
 
                edma: edma@49000000 {
-                       compatible = "ti,edma3";
-                       ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2";
-                       reg =   <0x49000000 0x10000>,
-                               <0x44e10f90 0x40>;
+                       compatible = "ti,edma3-tpcc";
+                       ti,hwmods = "tpcc";
+                       reg =   <0x49000000 0x10000>;
+                       reg-names = "edma3_cc";
                        interrupts = <12 13 14>;
-                       #dma-cells = <1>;
+                       interrupt-names = "edma3_ccint", "edma3_mperr",
+                                         "edma3_ccerrint";
+                       dma-requests = <64>;
+                       #dma-cells = <2>;
+
+                       ti,tptcs = <&edma_tptc0 7>, <&edma_tptc1 5>,
+                                  <&edma_tptc2 0>;
+
+                       ti,edma-memcpy-channels = <20 21>;
+               };
+
+               edma_tptc0: tptc@49800000 {
+                       compatible = "ti,edma3-tptc";
+                       ti,hwmods = "tptc0";
+                       reg =   <0x49800000 0x100000>;
+                       interrupts = <112>;
+                       interrupt-names = "edma3_tcerrint";
+               };
+
+               edma_tptc1: tptc@49900000 {
+                       compatible = "ti,edma3-tptc";
+                       ti,hwmods = "tptc1";
+                       reg =   <0x49900000 0x100000>;
+                       interrupts = <113>;
+                       interrupt-names = "edma3_tcerrint";
+               };
+
+               edma_tptc2: tptc@49a00000 {
+                       compatible = "ti,edma3-tptc";
+                       ti,hwmods = "tptc2";
+                       reg =   <0x49a00000 0x100000>;
+                       interrupts = <114>;
+                       interrupt-names = "edma3_tcerrint";
                };
 
                gpio0: gpio@44e07000 {
                };
 
                uart0: serial@44e09000 {
-                       compatible = "ti,omap3-uart";
+                       compatible = "ti,am3352-uart", "ti,omap3-uart";
                        ti,hwmods = "uart1";
                        clock-frequency = <48000000>;
                        reg = <0x44e09000 0x2000>;
-                       reg-shift = <2>;
                        interrupts = <72>;
                        status = "disabled";
-                       dmas = <&edma 26>, <&edma 27>;
+                       dmas = <&edma 26 0>, <&edma 27 0>;
                        dma-names = "tx", "rx";
                };
 
                uart1: serial@48022000 {
-                       compatible = "ti,omap3-uart";
+                       compatible = "ti,am3352-uart", "ti,omap3-uart";
                        ti,hwmods = "uart2";
                        clock-frequency = <48000000>;
                        reg = <0x48022000 0x2000>;
-                       reg-shift = <2>;
                        interrupts = <73>;
                        status = "disabled";
-                       dmas = <&edma 28>, <&edma 29>;
+                       dmas = <&edma 28 0>, <&edma 29 0>;
                        dma-names = "tx", "rx";
                };
 
                uart2: serial@48024000 {
-                       compatible = "ti,omap3-uart";
+                       compatible = "ti,am3352-uart", "ti,omap3-uart";
                        ti,hwmods = "uart3";
                        clock-frequency = <48000000>;
                        reg = <0x48024000 0x2000>;
-                       reg-shift = <2>;
                        interrupts = <74>;
                        status = "disabled";
-                       dmas = <&edma 30>, <&edma 31>;
+                       dmas = <&edma 30 0>, <&edma 31 0>;
                        dma-names = "tx", "rx";
                };
 
                uart3: serial@481a6000 {
-                       compatible = "ti,omap3-uart";
+                       compatible = "ti,am3352-uart", "ti,omap3-uart";
                        ti,hwmods = "uart4";
                        clock-frequency = <48000000>;
                        reg = <0x481a6000 0x2000>;
-                       reg-shift = <2>;
                        interrupts = <44>;
                        status = "disabled";
                };
 
                uart4: serial@481a8000 {
-                       compatible = "ti,omap3-uart";
+                       compatible = "ti,am3352-uart", "ti,omap3-uart";
                        ti,hwmods = "uart5";
                        clock-frequency = <48000000>;
                        reg = <0x481a8000 0x2000>;
-                       reg-shift = <2>;
                        interrupts = <45>;
                        status = "disabled";
                };
 
                uart5: serial@481aa000 {
-                       compatible = "ti,omap3-uart";
+                       compatible = "ti,am3352-uart", "ti,omap3-uart";
                        ti,hwmods = "uart6";
                        clock-frequency = <48000000>;
                        reg = <0x481aa000 0x2000>;
-                       reg-shift = <2>;
                        interrupts = <46>;
                        status = "disabled";
                };
                        ti,dual-volt;
                        ti,needs-special-reset;
                        ti,needs-special-hs-handling;
-                       dmas = <&edma 24
-                               &edma 25>;
+                       dmas = <&edma_xbar 24 0 0
+                               &edma_xbar 25 0 0>;
                        dma-names = "tx", "rx";
                        interrupts = <64>;
                        reg = <0x48060000 0x1000>;
                        compatible = "ti,omap4-hsmmc";
                        ti,hwmods = "mmc2";
                        ti,needs-special-reset;
-                       dmas = <&edma 2
-                               &edma 3>;
+                       dmas = <&edma 2 0
+                               &edma 3 0>;
                        dma-names = "tx", "rx";
                        interrupts = <28>;
                        reg = <0x481d8000 0x1000>;
                        status = "disabled";
                };
 
-               mailbox: mailbox@480C8000 {
+               mailbox: mailbox@480c8000 {
                        compatible = "ti,omap4-mailbox";
                        reg = <0x480C8000 0x200>;
                        interrupts = <77>;
                        ti,mbox-num-users = <4>;
                        ti,mbox-num-fifos = <8>;
                        mbox_wkupm3: wkup_m3 {
+                               ti,mbox-send-noirq;
                                ti,mbox-tx = <0 0 0>;
                                ti,mbox-rx = <0 0 3>;
                        };
                        interrupts = <67>;
                        ti,hwmods = "timer1";
                        ti,timer-alwon;
+                       clocks = <&timer1_fck>;
+                       clock-names = "fck";
                };
 
                timer2: timer@48040000 {
                        reg = <0x48040000 0x400>;
                        interrupts = <68>;
                        ti,hwmods = "timer2";
+                       clocks = <&timer2_fck>;
+                       clock-names = "fck";
                };
 
                timer3: timer@48042000 {
                        interrupts = <75
                                      76>;
                        ti,hwmods = "rtc";
+                       clocks = <&l4_per_clkctrl AM3_CLKDIV32K_CLKCTRL 0>;
+                       clock-names = "int-clk";
                };
 
                spi0: spi@48030000 {
                        interrupts = <65>;
                        ti,spi-num-cs = <2>;
                        ti,hwmods = "spi0";
-                       dmas = <&edma 16
-                               &edma 17
-                               &edma 18
-                               &edma 19>;
+                       dmas = <&edma 16 0
+                               &edma 17 0
+                               &edma 18 0
+                               &edma 19 0>;
                        dma-names = "tx0", "rx0", "tx1", "rx1";
                        status = "disabled";
                };
                        interrupts = <125>;
                        ti,spi-num-cs = <2>;
                        ti,hwmods = "spi1";
-                       dmas = <&edma 42
-                               &edma 43
-                               &edma 44
-                               &edma 45>;
+                       dmas = <&edma 42 0
+                               &edma 43 0
+                               &edma 44 0
+                               &edma 45 0>;
                        dma-names = "tx0", "rx0", "tx1", "rx1";
                        status = "disabled";
                };
                                reg-names = "phy";
                                status = "disabled";
                                ti,ctrl_mod = <&usb_ctrl_mod>;
+                               #phy-cells = <0>;
                        };
 
                        usb0: usb@47401000 {
                                reg-names = "phy";
                                status = "disabled";
                                ti,ctrl_mod = <&usb_ctrl_mod>;
+                               #phy-cells = <0>;
                        };
 
                        usb1: usb@47401800 {
                                  0x48300200 0x48300200 0x80>; /* EHRPWM */
 
                        ecap0: ecap@48300100 {
-                               compatible = "ti,am33xx-ecap";
+                               compatible = "ti,am3352-ecap",
+                                            "ti,am33xx-ecap";
                                #pwm-cells = <3>;
                                reg = <0x48300100 0x80>;
+                               clocks = <&l4ls_gclk>;
+                               clock-names = "fck";
                                interrupts = <31>;
                                interrupt-names = "ecap0";
-                               ti,hwmods = "ecap0";
                                status = "disabled";
                        };
 
-                       ehrpwm0: ehrpwm@48300200 {
-                               compatible = "ti,am33xx-ehrpwm";
+                       ehrpwm0: pwm@48300200 {
+                               compatible = "ti,am3352-ehrpwm",
+                                            "ti,am33xx-ehrpwm";
                                #pwm-cells = <3>;
                                reg = <0x48300200 0x80>;
-                               ti,hwmods = "ehrpwm0";
+                               clocks = <&ehrpwm0_tbclk>, <&l4ls_gclk>;
+                               clock-names = "tbclk", "fck";
                                status = "disabled";
                        };
                };
                                  0x48302200 0x48302200 0x80>; /* EHRPWM */
 
                        ecap1: ecap@48302100 {
-                               compatible = "ti,am33xx-ecap";
+                               compatible = "ti,am3352-ecap",
+                                            "ti,am33xx-ecap";
                                #pwm-cells = <3>;
                                reg = <0x48302100 0x80>;
+                               clocks = <&l4ls_gclk>;
+                               clock-names = "fck";
                                interrupts = <47>;
                                interrupt-names = "ecap1";
-                               ti,hwmods = "ecap1";
                                status = "disabled";
                        };
 
-                       ehrpwm1: ehrpwm@48302200 {
-                               compatible = "ti,am33xx-ehrpwm";
+                       ehrpwm1: pwm@48302200 {
+                               compatible = "ti,am3352-ehrpwm",
+                                            "ti,am33xx-ehrpwm";
                                #pwm-cells = <3>;
                                reg = <0x48302200 0x80>;
-                               ti,hwmods = "ehrpwm1";
+                               clocks = <&ehrpwm1_tbclk>, <&l4ls_gclk>;
+                               clock-names = "tbclk", "fck";
                                status = "disabled";
                        };
                };
                                  0x48304200 0x48304200 0x80>; /* EHRPWM */
 
                        ecap2: ecap@48304100 {
-                               compatible = "ti,am33xx-ecap";
+                               compatible = "ti,am3352-ecap",
+                                            "ti,am33xx-ecap";
                                #pwm-cells = <3>;
                                reg = <0x48304100 0x80>;
+                               clocks = <&l4ls_gclk>;
+                               clock-names = "fck";
                                interrupts = <61>;
                                interrupt-names = "ecap2";
-                               ti,hwmods = "ecap2";
                                status = "disabled";
                        };
 
-                       ehrpwm2: ehrpwm@48304200 {
-                               compatible = "ti,am33xx-ehrpwm";
+                       ehrpwm2: pwm@48304200 {
+                               compatible = "ti,am3352-ehrpwm",
+                                            "ti,am33xx-ehrpwm";
                                #pwm-cells = <3>;
                                reg = <0x48304200 0x80>;
-                               ti,hwmods = "ehrpwm2";
+                               clocks = <&ehrpwm2_tbclk>, <&l4ls_gclk>;
+                               clock-names = "tbclk", "fck";
                                status = "disabled";
                        };
                };
 
                mac: ethernet@4a100000 {
-                       compatible = "ti,cpsw";
+                       compatible = "ti,am335x-cpsw","ti,cpsw";
                        ti,hwmods = "cpgmac0";
                        clocks = <&cpsw_125mhz_gclk>, <&cpsw_cpts_rft_clk>;
                        clock-names = "fck", "cpts";
                        cpdma_channels = <8>;
                        ale_entries = <1024>;
                        bd_ram_size = <0x2000>;
-                       no_bd_ram = <0>;
-                       rx_descs = <64>;
                        mac_control = <0x20>;
                        slaves = <2>;
                        active_slave = <0>;
                        status = "disabled";
 
                        davinci_mdio: mdio@4a101000 {
-                               compatible = "ti,davinci_mdio";
+                               compatible = "ti,cpsw-mdio","ti,davinci_mdio";
                                #address-cells = <1>;
                                #size-cells = <0>;
                                ti,hwmods = "davinci_mdio";
                ocmcram: ocmcram@40300000 {
                        compatible = "mmio-sram";
                        reg = <0x40300000 0x10000>; /* 64k */
-               };
+                       ranges = <0x0 0x40300000 0x10000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
 
-               wkup_m3: wkup_m3@44d00000 {
-                       compatible = "ti,am3353-wkup-m3";
-                       reg = <0x44d00000 0x4000        /* M3 UMEM */
-                              0x44d80000 0x2000>;      /* M3 DMEM */
-                       ti,hwmods = "wkup_m3";
-                       ti,no-reset-on-init;
+                       pm_sram_code: pm-sram-code@0 {
+                               compatible = "ti,sram";
+                               reg = <0x0 0x1000>;
+                               protect-exec;
+                       };
+
+                       pm_sram_data: pm-sram-data@1000 {
+                               compatible = "ti,sram";
+                               reg = <0x1000 0x1000>;
+                               pool;
+                       };
                };
 
                elm: elm@48080000 {
                        interrupts = <16>;
                        ti,hwmods = "adc_tsc";
                        status = "disabled";
+                       dmas = <&edma 53 0>, <&edma 57 0>;
+                       dma-names = "fifo0", "fifo1";
 
                        tsc {
                                compatible = "ti,am3359-tsc";
                        };
                };
 
+               emif: emif@4c000000 {
+                       compatible = "ti,emif-am3352";
+                       reg = <0x4c000000 0x1000000>;
+                       ti,hwmods = "emif";
+                       interrupts = <101>;
+                       sram = <&pm_sram_code
+                               &pm_sram_data>;
+                       ti,no-idle;
+               };
+
                gpmc: gpmc@50000000 {
                        compatible = "ti,am3352-gpmc";
                        ti,hwmods = "gpmc";
                        ti,no-idle-on-init;
                        reg = <0x50000000 0x2000>;
                        interrupts = <100>;
+                       dmas = <&edma 52 0>;
+                       dma-names = "rxtx";
                        gpmc,num-cs = <7>;
                        gpmc,num-waitpins = <2>;
                        #address-cells = <2>;
                        #size-cells = <1>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
                        status = "disabled";
                };
 
                        ti,hwmods = "sham";
                        reg = <0x53100000 0x200>;
                        interrupts = <109>;
-                       dmas = <&edma 36>;
+                       dmas = <&edma 36 0>;
                        dma-names = "rx";
                };
 
                        ti,hwmods = "aes";
                        reg = <0x53500000 0xa0>;
                        interrupts = <103>;
-                       dmas = <&edma 6>,
-                              <&edma 5>;
+                       dmas = <&edma 6 0>,
+                              <&edma 5 0>;
                        dma-names = "tx", "rx";
                };
 
                        interrupts = <80>, <81>;
                        interrupt-names = "tx", "rx";
                        status = "disabled";
-                       dmas = <&edma 8>,
-                               <&edma 9>;
+                       dmas = <&edma 8 2>,
+                               <&edma 9 2>;
                        dma-names = "tx", "rx";
                };
 
-               mcasp1: mcasp@4803C000 {
+               mcasp1: mcasp@4803c000 {
                        compatible = "ti,am33xx-mcasp-audio";
                        ti,hwmods = "mcasp1";
                        reg = <0x4803C000 0x2000>,
                        interrupts = <82>, <83>;
                        interrupt-names = "tx", "rx";
                        status = "disabled";
-                       dmas = <&edma 10>,
-                               <&edma 11>;
+                       dmas = <&edma 10 2>,
+                               <&edma 11 2>;
                        dma-names = "tx", "rx";
                };
 
        };
 };
 
-/include/ "am33xx-clocks.dtsi"
+#include "am33xx-clocks.dtsi"
diff --git a/arch/arm/dts/am3517-evm-ui.dtsi b/arch/arm/dts/am3517-evm-ui.dtsi
new file mode 100644 (file)
index 0000000..e841918
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2018 Logic PD, Inc - http://www.logicpd.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 <dt-bindings/input/input.h>
+
+/ {
+       codec1 {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "tlv320aic23-hifi";
+
+               simple-audio-card,widgets =
+                       "Microphone", "Mic In",
+                       "Line", "Line In",
+                       "Line", "Line Out";
+
+               simple-audio-card,routing =
+                       "Line Out", "LOUT",
+                       "Line Out", "ROUT",
+                       "LLINEIN", "Line In",
+                       "RLINEIN", "Line In",
+                       "MICIN", "Mic In";
+
+               simple-audio-card,format = "i2s";
+               simple-audio-card,bitclock-master = <&sound_master>;
+               simple-audio-card,frame-master = <&sound_master>;
+
+               simple-audio-card,cpu {
+                       sound-dai = <&mcbsp1>;
+               };
+
+               sound_master: simple-audio-card,codec {
+                       sound-dai = <&tlv320aic23_1>;
+                       system-clock-frequency = <12000000>;
+               };
+       };
+
+       codec2 {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "tlv320aic23-hifi";
+
+               simple-audio-card,widgets =
+                       "Microphone", "Mic In",
+                       "Line", "Line In",
+                       "Line", "Line Out";
+
+               simple-audio-card,routing =
+                       "Line Out", "LOUT",
+                       "Line Out", "ROUT",
+                       "LLINEIN", "Line In",
+                       "RLINEIN", "Line In",
+                       "MICIN", "Mic In";
+
+               simple-audio-card,format = "i2s";
+               simple-audio-card,bitclock-master = <&sound_master2>;
+               simple-audio-card,frame-master = <&sound_master2>;
+
+               simple-audio-card,cpu {
+                       sound-dai = <&mcbsp2>;
+               };
+
+               sound_master2: simple-audio-card,codec {
+                       sound-dai = <&tlv320aic23_2>;
+                       system-clock-frequency = <12000000>;
+               };
+       };
+
+       expander-keys {
+               compatible = "gpio-keys-polled";
+               poll-interval = <100>;
+
+               record {
+                       label = "Record";
+                       /* linux,code = <BTN_0>; */
+                       gpios = <&tca6416_2 15 GPIO_ACTIVE_LOW>;
+               };
+
+               play {
+                       label = "Play";
+                       linux,code = <KEY_PLAY>;
+                       gpios = <&tca6416_2 14 GPIO_ACTIVE_LOW>;
+               };
+
+               Stop {
+                       label = "Stop";
+                       linux,code = <KEY_STOP>;
+                       gpios = <&tca6416_2 13 GPIO_ACTIVE_LOW>;
+               };
+
+               fwd {
+                       label = "FWD";
+                       linux,code = <KEY_FASTFORWARD>;
+                       gpios = <&tca6416_2 12 GPIO_ACTIVE_LOW>;
+               };
+
+               rwd {
+                       label = "RWD";
+                       linux,code = <KEY_REWIND>;
+                       gpios = <&tca6416_2 11 GPIO_ACTIVE_LOW>;
+               };
+
+               shift {
+                       label = "Shift";
+                       linux,code = <KEY_LEFTSHIFT>;
+                       gpios = <&tca6416_2 10 GPIO_ACTIVE_LOW>;
+               };
+
+               Mode {
+                       label = "Mode";
+                       linux,code = <BTN_MODE>;
+                       gpios = <&tca6416_2 9 GPIO_ACTIVE_LOW>;
+               };
+
+               Menu {
+                       label = "Menu";
+                       linux,code = <KEY_MENU>;
+                       gpios = <&tca6416_2 8 GPIO_ACTIVE_LOW>;
+               };
+
+               Up {
+                       label = "Up";
+                       linux,code = <KEY_UP>;
+                       gpios = <&tca6416_2 7 GPIO_ACTIVE_LOW>;
+               };
+
+               Down {
+                       label = "Down";
+                       linux,code = <KEY_DOWN>;
+                       gpios = <&tca6416_2 6 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&i2c2 {
+       /* Audio codecs */
+       tlv320aic23_1: codec@1a {
+               compatible = "ti,tlv320aic23";
+               reg = <0x1a>;
+               #sound-dai-cells= <0>;
+               status = "okay";
+       };
+
+       tlv320aic23_2: codec@1b {
+               compatible = "ti,tlv320aic23";
+               reg = <0x1b>;
+               #sound-dai-cells= <0>;
+               status = "okay";
+       };
+};
+
+&i2c3 {
+       /* Audio codecs */
+       tlv320aic23_3: codec@1a {
+               compatible = "ti,tlv320aic23";
+               reg = <0x1a>;
+               #sound-dai-cells= <0>;
+               status = "okay";
+       };
+
+       /* GPIO Expanders */
+       tca6416_2: gpio@20 {
+               compatible = "ti,tca6416";
+               reg = <0x20>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               vcc-supply = <&vdd_io_reg>;
+       };
+
+       tca6416_3: gpio@21 {
+               compatible = "ti,tca6416";
+               reg = <0x21>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               vcc-supply = <&vdd_io_reg>;
+       };
+
+       /* TVP5146 Analog Video decoder input */
+       tvp5146@5c {
+               compatible = "ti,tvp5146m2";
+               reg = <0x5c>;
+       };
+};
+
+&mcbsp1 {
+       status = "ok";
+       #sound-dai-cells = <0>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&mcbsp1_pins>;
+};
+
+&mcbsp2 {
+       status = "ok";
+       #sound-dai-cells = <0>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&mcbsp2_pins>;
+};
+
+&omap3_pmx_core {
+       mcbsp1_pins: pinmux_mcbsp1_pins {
+               pinctrl-single,pins = <
+                       OMAP3_CORE1_IOPAD(0x2190, PIN_OUTPUT | MUX_MODE0)       /* mcbsp1_dx.mcbsp1_dx */
+                       OMAP3_CORE1_IOPAD(0x2192, PIN_INPUT | MUX_MODE0)        /* mcbsp1_dx.mcbsp1_dr */
+                       OMAP3_CORE1_IOPAD(0x2196, PIN_INPUT | MUX_MODE0)        /* mcbsp_clks.mcbsp1_fsx */
+                       OMAP3_CORE1_IOPAD(0x2198, PIN_INPUT | MUX_MODE0)        /* mcbsp1_clkx.mcbsp1_clkx */
+               >;
+       };
+
+       mcbsp2_pins: pinmux_mcbsp2_pins {
+               pinctrl-single,pins = <
+                       OMAP3_CORE1_IOPAD(0x213c, PIN_INPUT | MUX_MODE0)        /* mcbsp2_fsx.mcbsp2_fsx */
+                       OMAP3_CORE1_IOPAD(0x213e, PIN_INPUT | MUX_MODE0)        /* mcbsp2_clkx.mcbsp2_clkx */
+                       OMAP3_CORE1_IOPAD(0x2140, PIN_INPUT | MUX_MODE0)        /* mcbsp2_dr.mcbsp2.dr */
+                       OMAP3_CORE1_IOPAD(0x2142, PIN_OUTPUT | MUX_MODE0)       /* mcbsp2_dx.mcbsp2_dx */
+               >;
+       };
+};
index 1d158cf..1e2bb68 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "am3517.dtsi"
 #include "am3517-som.dtsi"
+#include "am3517-evm-ui.dtsi"
 #include <dt-bindings/input/input.h>
 
 / {
        vmmc-supply = <&vmmc_fixed>;
        bus-width = <4>;
        wp-gpios = <&gpio4 30 GPIO_ACTIVE_HIGH>; /* gpio_126 */
-       cd-gpios = <&gpio4 31 GPIO_ACTIVE_HIGH>; /* gpio_127 */
+       cd-gpios = <&gpio4 31 GPIO_ACTIVE_LOW>; /* gpio_127 */
 };
 
 &mmc3 {
index dae6e45..b1c988e 100644 (file)
                compatible = "ti,wl1271";
                reg = <2>;
                interrupt-parent = <&gpio6>;
-               interrupts = <10 IRQ_TYPE_LEVEL_HIGH>; /* gpio_170 */
+               interrupts = <10 IRQ_TYPE_EDGE_RISING>; /* gpio_170 */
                ref-clock-frequency = <26000000>;
                tcxo-clock-frequency = <26000000>;
        };
index 3ffa8e0..6f60a32 100644 (file)
                                        compatible = "ti,am437-padconf",
                                                     "pinctrl-single";
                                        reg = <0x800 0x31c>;
-                                       #address-cells = <1>;
-                                       #size-cells = <0>;
                                        #interrupt-cells = <1>;
                                        interrupt-controller;
                                        pinctrl-single,register-width = <32>;
                                scm_conf: scm_conf@0 {
                                        compatible = "syscon";
                                        reg = <0x0 0x800>;
-                                       #address-cells = <1>;
-                                       #size-cells = <1>;
 
                                        scm_clocks: clocks {
                                                #address-cells = <1>;
                        reg = <0x48038000 0x2000>,
                              <0x46000000 0x400000>;
                        reg-names = "mpu", "dat";
-                       interrupts = <80>, <81>;
+                       interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "tx", "rx";
                        status = "disabled";
                        dmas = <&edma 8>,
                        reg = <0x4803C000 0x2000>,
                              <0x46400000 0x400000>;
                        reg-names = "mpu", "dat";
-                       interrupts = <82>, <83>;
+                       interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "tx", "rx";
                        status = "disabled";
                        dmas = <&edma 10>,
                        gpmc,num-waitpins = <2>;
                        #address-cells = <2>;
                        #size-cells = <1>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
                        status = "disabled";
                };
 
index e454647..28e3e1b 100644 (file)
                compatible = "gpio-keys";
                pinctrl-names = "default";
                pinctrl-0 = <&gpio_keys_pins_default>;
-               #address-cells = <1>;
-               #size-cells = <0>;
 
                switch@0 {
                        label = "power-button";
index 9869d72..d78d34d 100644 (file)
@@ -75,7 +75,7 @@
                u-boot,dm-pre-reloc;
 
                uart0: serial@ff800640 {
-                       compatible = "brcm,bcm6858-uart";
+                       compatible = "brcm,bcm6345-uart";
                        reg = <0x0 0xff800640 0x0 0x18>;
                        clocks = <&periph_osc>;
 
index 0e82bb9..a3c9b34 100644 (file)
                spi0 = &spi1;
        };
 
+       backlight: backlight-pwm {
+               pinctrl-names = "default";
+               pinctrl-0 = <&ecap2_pins>;
+               power-supply = <&backlight_lcd>;
+               compatible = "pwm-backlight";
+               /*
+                * The PWM here corresponds to production hardware. The
+                * schematic needs to be 1015171 (15 March 2010), Rev A
+                * or newer.
+                */
+               pwms = <&ecap2 0 50000 0>;
+               brightness-levels = <0 10 20 30 40 50 60 70 80 90 99>;
+               default-brightness-level = <7>;
+       };
+
+       panel {
+               compatible = "ti,tilcdc,panel";
+               pinctrl-names = "default";
+               pinctrl-0 = <&lcd_pins>;
+               /*
+                * The vpif and the LCD are mutually exclusive.
+                * To enable VPIF, change the status below to 'disabled' then
+                * then change the status of the vpif below to 'okay'
+                */
+               status = "okay";
+               enable-gpios = <&gpio 40 GPIO_ACTIVE_HIGH>; /* lcd_panel_pwr */
+
+               panel-info {
+                       ac-bias         = <255>;
+                       ac-bias-intrpt  = <0>;
+                       dma-burst-sz    = <16>;
+                       bpp             = <16>;
+                       fdd             = <0x80>;
+                       sync-edge       = <0>;
+                       sync-ctrl       = <1>;
+                       raster-order    = <0>;
+                       fifo-th         = <0>;
+               };
+
+               display-timings {
+                       native-mode = <&timing0>;
+                       timing0: 480x272 {
+                               clock-frequency = <9000000>;
+                               hactive = <480>;
+                               vactive = <272>;
+                               hfront-porch = <3>;
+                               hback-porch = <2>;
+                               hsync-len = <42>;
+                               vback-porch = <3>;
+                               vfront-porch = <4>;
+                               vsync-len = <11>;
+                               hsync-active = <0>;
+                               vsync-active = <0>;
+                               de-active = <1>;
+                               pixelclk-active = <1>;
+                       };
+               };
+       };
+
        vbat: fixedregulator0 {
                compatible = "regulator-fixed";
                regulator-name = "vbat";
                regulator-boot-on;
        };
 
+       backlight_lcd: backlight-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "lcd_backlight_pwr";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&gpio 47 GPIO_ACTIVE_HIGH>; /* lcd_backlight_pwr */
+               enable-active-high;
+       };
+
        sound {
                compatible = "simple-audio-card";
                simple-audio-card,name = "DA850/OMAP-L138 EVM";
        };
 };
 
+&ecap2 {
+       status = "okay";
+};
+
+&ref_clk {
+       clock-frequency = <24000000>;
+};
+
 &pmx_core {
        status = "okay";
 
        };
 };
 
+&sata {
+       status = "okay";
+};
+
 &serial0 {
        status = "okay";
 };
        status = "okay";
 };
 
+&lcdc {
+       status = "okay";
+};
+
 &i2c0 {
        status = "okay";
        clock-frequency = <100000>;
                gpio-controller;
                #gpio-cells = <2>;
        };
+       tca6416_bb: gpio@21 {
+               compatible = "ti,tca6416";
+               reg = <0x21>;
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
 };
 
 &wdt {
 &vpif {
        pinctrl-names = "default";
        pinctrl-0 = <&vpif_capture_pins>, <&vpif_display_pins>;
-       status = "okay";
+       /*
+        * The vpif and the LCD are mutually exclusive.
+        * To enable VPIF, disable the ti,tilcdc,panel then
+        * change the status below to 'okay'
+        */
+       status = "disabled";
 };
index a1f4d6d..0177e3e 100644 (file)
@@ -21,8 +21,8 @@
                stdout-path = "serial2:115200n8";
        };
 
-       memory {
-               device_type = "memory";
+       memory@c0000000 {
+               /* 128 MB DDR2 SDRAM @ 0xc0000000 */
                reg = <0xc0000000 0x08000000>;
        };
 
        };
 };
 
+&ref_clk {
+       clock-frequency = <24000000>;
+};
+
 &pmx_core {
        status = "okay";
 
        status = "okay";
 };
 
+&sata_refclk {
+       status = "okay";
+       clock-frequency = <100000000>;
+};
+
 &sata {
        status = "okay";
 };
index c66cf78..47aa53b 100644 (file)
@@ -7,10 +7,19 @@
  * Free Software Foundation;  either version 2 of the  License, or (at your
  * option) any later version.
  */
-#include "skeleton.dtsi"
 #include <dt-bindings/interrupt-controller/irq.h>
 
 / {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       chosen { };
+       aliases { };
+
+       memory@c0000000 {
+               device_type = "memory";
+               reg = <0xc0000000 0x0>;
+       };
+
        arm {
                #address-cells = <1>;
                #size-cells = <1>;
                        reg = <0xfffee000 0x2000>;
                };
        };
+       clocks: clocks {
+               ref_clk: ref_clk {
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+                       clock-output-names = "ref_clk";
+               };
+               sata_refclk: sata_refclk {
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+                       clock-output-names = "sata_refclk";
+                       status = "disabled";
+               };
+               usb_refclkin: usb_refclkin {
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+                       clock-output-names = "usb_refclkin";
+                       status = "disabled";
+               };
+       };
        dsp: dsp@11800000 {
                compatible = "ti,da850-dsp";
                reg = <0x11800000 0x40000>,
@@ -33,6 +61,8 @@
                reg-names = "l2sram", "l1pram", "l1dram", "host1cfg", "chipsig";
                interrupt-parent = <&intc>;
                interrupts = <28>;
+               clocks = <&psc0 15>;
+               resets = <&psc0 15>;
                status = "disabled";
        };
        soc@1c00000 {
                ranges = <0x0 0x01c00000 0x400000>;
                interrupt-parent = <&intc>;
 
+               psc0: clock-controller@10000 {
+                       compatible = "ti,da850-psc0";
+                       reg = <0x10000 0x1000>;
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+                       #power-domain-cells = <1>;
+                       clocks = <&pll0_sysclk 1>, <&pll0_sysclk 2>,
+                                <&pll0_sysclk 4>, <&pll0_sysclk 6>,
+                                <&async1_clk>;
+                       clock-names = "pll0_sysclk1", "pll0_sysclk2",
+                                     "pll0_sysclk4", "pll0_sysclk6",
+                                     "async1";
+               };
+               pll0: clock-controller@11000 {
+                       compatible = "ti,da850-pll0";
+                       reg = <0x11000 0x1000>;
+                       clocks = <&ref_clk>, <&pll1_sysclk 3>;
+                       clock-names = "clksrc", "extclksrc";
+
+                       pll0_pllout: pllout {
+                               #clock-cells = <0>;
+                       };
+                       pll0_sysclk: sysclk {
+                               #clock-cells = <1>;
+                       };
+                       pll0_auxclk: auxclk {
+                               #clock-cells = <0>;
+                       };
+                       pll0_obsclk: obsclk {
+                               #clock-cells = <0>;
+                       };
+               };
                pmx_core: pinmux@14120 {
                        compatible = "pinctrl-single";
                        reg = <0x14120 0x50>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
                        #pinctrl-cells = <2>;
                        pinctrl-single,bit-per-mux;
                        pinctrl-single,register-width = <32>;
                        pinctrl-single,function-mask = <0xf>;
+                       /* pin base, nr pins & gpio function */
+                       pinctrl-single,gpio-range = <&range   0 17 0x8>,
+                                                   <&range  17  8 0x4>,
+                                                   <&range  26  8 0x4>,
+                                                   <&range  34 80 0x8>,
+                                                   <&range 129 31 0x8>;
                        status = "disabled";
 
+                       range: gpio-range {
+                               #pinctrl-single,gpio-range-cells = <3>;
+                       };
+
                        serial0_rtscts_pins: pinmux_serial0_rtscts_pins {
                                pinctrl-single,bits = <
                                        /* UART0_RTS UART0_CTS */
                        usb_phy: usb-phy {
                                compatible = "ti,da830-usb-phy";
                                #phy-cells = <1>;
+                               clocks = <&usb_phy_clk 0>, <&usb_phy_clk 1>;
+                               clock-names = "usb0_clk48", "usb1_clk48";
                                status = "disabled";
                        };
+                       usb_phy_clk: usb-phy-clocks {
+                               compatible = "ti,da830-usb-phy-clocks";
+                               #clock-cells = <1>;
+                               clocks = <&psc1 1>, <&usb_refclkin>,
+                                        <&pll0_auxclk>;
+                               clock-names = "fck", "usb_refclkin", "auxclk";
+                       };
+                       ehrpwm_tbclk: ehrpwm_tbclk {
+                               compatible = "ti,da830-tbclksync";
+                               #clock-cells = <0>;
+                               clocks = <&psc1 17>;
+                               clock-names = "fck";
+                       };
+                       div4p5_clk: div4.5 {
+                               compatible = "ti,da830-div4p5ena";
+                               #clock-cells = <0>;
+                               clocks = <&pll0_pllout>;
+                               clock-names = "pll0_pllout";
+                       };
+                       async1_clk: async1 {
+                               compatible = "ti,da850-async1-clksrc";
+                               #clock-cells = <0>;
+                               clocks = <&pll0_sysclk 3>, <&div4p5_clk>;
+                               clock-names = "pll0_sysclk3", "div4.5";
+                       };
+                       async3_clk: async3 {
+                               compatible = "ti,da850-async3-clksrc";
+                               #clock-cells = <0>;
+                               clocks = <&pll0_sysclk 2>, <&pll1_sysclk 2>;
+                               clock-names = "pll0_sysclk2", "pll1_sysclk2";
+                       };
                };
                edma0: edma@0 {
                        compatible = "ti,edma3-tpcc";
                        #dma-cells = <2>;
 
                        ti,tptcs = <&edma0_tptc0 7>, <&edma0_tptc1 0>;
+                       power-domains = <&psc0 0>;
                };
                edma0_tptc0: tptc@8000 {
                        compatible = "ti,edma3-tptc";
                        reg =   <0x8000 0x400>;
                        interrupts = <13>;
                        interrupt-names = "edm3_tcerrint";
+                       power-domains = <&psc0 1>;
                };
                edma0_tptc1: tptc@8400 {
                        compatible = "ti,edma3-tptc";
                        reg =   <0x8400 0x400>;
                        interrupts = <32>;
                        interrupt-names = "edm3_tcerrint";
+                       power-domains = <&psc0 2>;
                };
                edma1: edma@230000 {
                        compatible = "ti,edma3-tpcc";
                        #dma-cells = <2>;
 
                        ti,tptcs = <&edma1_tptc0 7>;
+                       power-domains = <&psc1 0>;
                };
                edma1_tptc0: tptc@238000 {
                        compatible = "ti,edma3-tptc";
                        reg =   <0x238000 0x400>;
                        interrupts = <95>;
                        interrupt-names = "edm3_tcerrint";
+                       power-domains = <&psc1 21>;
                };
                serial0: serial@42000 {
                        compatible = "ti,da830-uart", "ns16550a";
                        reg-io-width = <4>;
                        reg-shift = <2>;
                        interrupts = <25>;
+                       clocks = <&psc0 9>;
+                       power-domains = <&psc0 9>;
                        status = "disabled";
                };
                serial1: serial@10c000 {
                        reg-io-width = <4>;
                        reg-shift = <2>;
                        interrupts = <53>;
+                       clocks = <&psc1 12>;
+                       power-domains = <&psc1 12>;
                        status = "disabled";
                };
                serial2: serial@10d000 {
                        reg-io-width = <4>;
                        reg-shift = <2>;
                        interrupts = <61>;
+                       clocks = <&psc1 13>;
+                       power-domains = <&psc1 13>;
                        status = "disabled";
                };
                rtc0: rtc@23000 {
                        reg = <0x23000 0x1000>;
                        interrupts = <19
                                      19>;
+                       clocks = <&pll0_auxclk>;
+                       clock-names = "int-clk";
                        status = "disabled";
                };
                i2c0: i2c@22000 {
                        interrupts = <15>;
                        #address-cells = <1>;
                        #size-cells = <0>;
+                       clocks = <&pll0_auxclk>;
                        status = "disabled";
                };
                i2c1: i2c@228000 {
                        interrupts = <51>;
                        #address-cells = <1>;
                        #size-cells = <0>;
+                       clocks = <&psc1 11>;
+                       power-domains = <&psc1 11>;
                        status = "disabled";
                };
+               clocksource: timer@20000 {
+                       compatible = "ti,da830-timer";
+                       reg = <0x20000 0x1000>;
+                       interrupts = <12>, <13>;
+                       interrupt-names = "tint12", "tint34";
+                       clocks = <&pll0_auxclk>;
+               };
                wdt: wdt@21000 {
                        compatible = "ti,davinci-wdt";
                        reg = <0x21000 0x1000>;
+                       clocks = <&pll0_auxclk>;
                        status = "disabled";
                };
                mmc0: mmc@40000 {
                        interrupts = <16>;
                        dmas = <&edma0 16 0>, <&edma0 17 0>;
                        dma-names = "rx", "tx";
+                       clocks = <&psc0 5>;
                        status = "disabled";
                };
                vpif: video@217000 {
                        compatible = "ti,da850-vpif";
                        reg = <0x217000 0x1000>;
                        interrupts = <92>;
+                       power-domains = <&psc1 9>;
                        status = "disabled";
 
                        /* VPIF capture port */
                        interrupts = <72>;
                        dmas = <&edma1 28 0>, <&edma1 29 0>;
                        dma-names = "rx", "tx";
+                       clocks = <&psc1 18>;
                        status = "disabled";
                };
                ehrpwm0: pwm@300000 {
                                     "ti,am33xx-ehrpwm";
                        #pwm-cells = <3>;
                        reg = <0x300000 0x2000>;
+                       clocks = <&psc1 17>, <&ehrpwm_tbclk>;
+                       clock-names = "fck", "tbclk";
+                       power-domains = <&psc1 17>;
                        status = "disabled";
                };
                ehrpwm1: pwm@302000 {
                                     "ti,am33xx-ehrpwm";
                        #pwm-cells = <3>;
                        reg = <0x302000 0x2000>;
+                       clocks = <&psc1 17>, <&ehrpwm_tbclk>;
+                       clock-names = "fck", "tbclk";
+                       power-domains = <&psc1 17>;
                        status = "disabled";
                };
                ecap0: ecap@306000 {
                                     "ti,am33xx-ecap";
                        #pwm-cells = <3>;
                        reg = <0x306000 0x80>;
+                       clocks = <&psc1 20>;
+                       clock-names = "fck";
+                       power-domains = <&psc1 20>;
                        status = "disabled";
                };
                ecap1: ecap@307000 {
                                     "ti,am33xx-ecap";
                        #pwm-cells = <3>;
                        reg = <0x307000 0x80>;
+                       clocks = <&psc1 20>;
+                       clock-names = "fck";
+                       power-domains = <&psc1 20>;
                        status = "disabled";
                };
                ecap2: ecap@308000 {
                                     "ti,am33xx-ecap";
                        #pwm-cells = <3>;
                        reg = <0x308000 0x80>;
+                       clocks = <&psc1 20>;
+                       clock-names = "fck";
+                       power-domains = <&psc1 20>;
                        status = "disabled";
                };
                spi0: spi@41000 {
                        interrupts = <20>;
                        dmas = <&edma0 14 0>, <&edma0 15 0>;
                        dma-names = "rx", "tx";
+                       clocks = <&psc0 4>;
+                       power-domains = <&psc0 4>;
                        status = "disabled";
                };
                spi1: spi@30e000 {
                        interrupts = <56>;
                        dmas = <&edma0 18 0>, <&edma0 19 0>;
                        dma-names = "rx", "tx";
+                       clocks = <&psc1 10>;
+                       power-domains = <&psc1 10>;
                        status = "disabled";
                };
                usb0: usb@200000 {
                        dr_mode = "otg";
                        phys = <&usb_phy 0>;
                        phy-names = "usb-phy";
+                       clocks = <&psc1 1>;
+                       clock-ranges;
                        status = "disabled";
 
                        #address-cells = <1>;
                                interrupts = <58>;
                                #dma-cells = <2>;
                                #dma-channels = <4>;
+                               power-domains = <&psc1 1>;
                                status = "okay";
                        };
                };
                        compatible = "ti,da850-ahci";
                        reg = <0x218000 0x2000>, <0x22c018 0x4>;
                        interrupts = <67>;
+                       clocks = <&psc1 8>, <&sata_refclk>;
+                       clock-names = "fck", "refclk";
                        status = "disabled";
                };
+               pll1: clock-controller@21a000 {
+                       compatible = "ti,da850-pll1";
+                       reg = <0x21a000 0x1000>;
+                       clocks = <&ref_clk>;
+                       clock-names = "clksrc";
+
+                       pll1_sysclk: sysclk {
+                               #clock-cells = <1>;
+                       };
+                       pll1_obsclk: obsclk {
+                               #clock-cells = <0>;
+                       };
+               };
                mdio: mdio@224000 {
                        compatible = "ti,davinci_mdio";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x224000 0x1000>;
+                       clocks = <&psc1 5>;
+                       clock-names = "fck";
+                       power-domains = <&psc1 5>;
                        status = "disabled";
                };
                eth0: ethernet@220000 {
                                        35
                                        36
                                        >;
+                       clocks = <&psc1 5>;
+                       power-domains = <&psc1 5>;
                        status = "disabled";
                };
                usb1: usb@225000 {
                        interrupts = <59>;
                        phys = <&usb_phy 1>;
                        phy-names = "usb-phy";
+                       clocks = <&psc1 2>;
                        status = "disabled";
                };
                gpio: gpio@226000 {
                        gpio-controller;
                        #gpio-cells = <2>;
                        reg = <0x226000 0x1000>;
-                       interrupts = <42 IRQ_TYPE_EDGE_BOTH
-                               43 IRQ_TYPE_EDGE_BOTH 44 IRQ_TYPE_EDGE_BOTH
-                               45 IRQ_TYPE_EDGE_BOTH 46 IRQ_TYPE_EDGE_BOTH
-                               47 IRQ_TYPE_EDGE_BOTH 48 IRQ_TYPE_EDGE_BOTH
-                               49 IRQ_TYPE_EDGE_BOTH 50 IRQ_TYPE_EDGE_BOTH>;
+                       interrupts = <42 43 44 45 46 47 48 49 50>;
                        ti,ngpio = <144>;
                        ti,davinci-gpio-unbanked = <0>;
+                       clocks = <&psc1 3>;
+                       clock-names = "gpio";
                        status = "disabled";
                        interrupt-controller;
                        #interrupt-cells = <2>;
+                       gpio-ranges = <&pmx_core   0  15 1>,
+                                     <&pmx_core   1  14 1>,
+                                     <&pmx_core   2  13 1>,
+                                     <&pmx_core   3  12 1>,
+                                     <&pmx_core   4  11 1>,
+                                     <&pmx_core   5  10 1>,
+                                     <&pmx_core   6   9 1>,
+                                     <&pmx_core   7   8 1>,
+                                     <&pmx_core   8   7 1>,
+                                     <&pmx_core   9   6 1>,
+                                     <&pmx_core  10   5 1>,
+                                     <&pmx_core  11   4 1>,
+                                     <&pmx_core  12   3 1>,
+                                     <&pmx_core  13   2 1>,
+                                     <&pmx_core  14   1 1>,
+                                     <&pmx_core  15   0 1>,
+                                     <&pmx_core  16  39 1>,
+                                     <&pmx_core  17  38 1>,
+                                     <&pmx_core  18  37 1>,
+                                     <&pmx_core  19  36 1>,
+                                     <&pmx_core  20  35 1>,
+                                     <&pmx_core  21  34 1>,
+                                     <&pmx_core  22  33 1>,
+                                     <&pmx_core  23  32 1>,
+                                     <&pmx_core  24  24 1>,
+                                     <&pmx_core  25  22 1>,
+                                     <&pmx_core  26  21 1>,
+                                     <&pmx_core  27  20 1>,
+                                     <&pmx_core  28  19 1>,
+                                     <&pmx_core  29  18 1>,
+                                     <&pmx_core  30  17 1>,
+                                     <&pmx_core  31  16 1>,
+                                     <&pmx_core  32  55 1>,
+                                     <&pmx_core  33  54 1>,
+                                     <&pmx_core  34  53 1>,
+                                     <&pmx_core  35  52 1>,
+                                     <&pmx_core  36  51 1>,
+                                     <&pmx_core  37  50 1>,
+                                     <&pmx_core  38  49 1>,
+                                     <&pmx_core  39  48 1>,
+                                     <&pmx_core  40  47 1>,
+                                     <&pmx_core  41  46 1>,
+                                     <&pmx_core  42  45 1>,
+                                     <&pmx_core  43  44 1>,
+                                     <&pmx_core  44  43 1>,
+                                     <&pmx_core  45  42 1>,
+                                     <&pmx_core  46  41 1>,
+                                     <&pmx_core  47  40 1>,
+                                     <&pmx_core  48  71 1>,
+                                     <&pmx_core  49  70 1>,
+                                     <&pmx_core  50  69 1>,
+                                     <&pmx_core  51  68 1>,
+                                     <&pmx_core  52  67 1>,
+                                     <&pmx_core  53  66 1>,
+                                     <&pmx_core  54  65 1>,
+                                     <&pmx_core  55  64 1>,
+                                     <&pmx_core  56  63 1>,
+                                     <&pmx_core  57  62 1>,
+                                     <&pmx_core  58  61 1>,
+                                     <&pmx_core  59  60 1>,
+                                     <&pmx_core  60  59 1>,
+                                     <&pmx_core  61  58 1>,
+                                     <&pmx_core  62  57 1>,
+                                     <&pmx_core  63  56 1>,
+                                     <&pmx_core  64  87 1>,
+                                     <&pmx_core  65  86 1>,
+                                     <&pmx_core  66  85 1>,
+                                     <&pmx_core  67  84 1>,
+                                     <&pmx_core  68  83 1>,
+                                     <&pmx_core  69  82 1>,
+                                     <&pmx_core  70  81 1>,
+                                     <&pmx_core  71  80 1>,
+                                     <&pmx_core  72  70 1>,
+                                     <&pmx_core  73  78 1>,
+                                     <&pmx_core  74  77 1>,
+                                     <&pmx_core  75  76 1>,
+                                     <&pmx_core  76  75 1>,
+                                     <&pmx_core  77  74 1>,
+                                     <&pmx_core  78  73 1>,
+                                     <&pmx_core  79  72 1>,
+                                     <&pmx_core  80 103 1>,
+                                     <&pmx_core  81 102 1>,
+                                     <&pmx_core  82 101 1>,
+                                     <&pmx_core  83 100 1>,
+                                     <&pmx_core  84  99 1>,
+                                     <&pmx_core  85  98 1>,
+                                     <&pmx_core  86  97 1>,
+                                     <&pmx_core  87  96 1>,
+                                     <&pmx_core  88  95 1>,
+                                     <&pmx_core  89  94 1>,
+                                     <&pmx_core  90  93 1>,
+                                     <&pmx_core  91  92 1>,
+                                     <&pmx_core  92  91 1>,
+                                     <&pmx_core  93  90 1>,
+                                     <&pmx_core  94  89 1>,
+                                     <&pmx_core  95  88 1>,
+                                     <&pmx_core  96 158 1>,
+                                     <&pmx_core  97 157 1>,
+                                     <&pmx_core  98 156 1>,
+                                     <&pmx_core  99 155 1>,
+                                     <&pmx_core 100 154 1>,
+                                     <&pmx_core 101 129 1>,
+                                     <&pmx_core 102 113 1>,
+                                     <&pmx_core 103 112 1>,
+                                     <&pmx_core 104 111 1>,
+                                     <&pmx_core 105 110 1>,
+                                     <&pmx_core 106 109 1>,
+                                     <&pmx_core 107 108 1>,
+                                     <&pmx_core 108 107 1>,
+                                     <&pmx_core 109 106 1>,
+                                     <&pmx_core 110 105 1>,
+                                     <&pmx_core 111 104 1>,
+                                     <&pmx_core 112 145 1>,
+                                     <&pmx_core 113 144 1>,
+                                     <&pmx_core 114 143 1>,
+                                     <&pmx_core 115 142 1>,
+                                     <&pmx_core 116 141 1>,
+                                     <&pmx_core 117 140 1>,
+                                     <&pmx_core 118 139 1>,
+                                     <&pmx_core 119 138 1>,
+                                     <&pmx_core 120 137 1>,
+                                     <&pmx_core 121 136 1>,
+                                     <&pmx_core 122 135 1>,
+                                     <&pmx_core 123 134 1>,
+                                     <&pmx_core 124 133 1>,
+                                     <&pmx_core 125 132 1>,
+                                     <&pmx_core 126 131 1>,
+                                     <&pmx_core 127 130 1>,
+                                     <&pmx_core 128 159 1>,
+                                     <&pmx_core 129  31 1>,
+                                     <&pmx_core 130  30 1>,
+                                     <&pmx_core 131  20 1>,
+                                     <&pmx_core 132  28 1>,
+                                     <&pmx_core 133  27 1>,
+                                     <&pmx_core 134  26 1>,
+                                     <&pmx_core 135  23 1>,
+                                     <&pmx_core 136 153 1>,
+                                     <&pmx_core 137 152 1>,
+                                     <&pmx_core 138 151 1>,
+                                     <&pmx_core 139 150 1>,
+                                     <&pmx_core 140 149 1>,
+                                     <&pmx_core 141 148 1>,
+                                     <&pmx_core 142 147 1>,
+                                     <&pmx_core 143 146 1>;
+               };
+               psc1: clock-controller@227000 {
+                       compatible = "ti,da850-psc1";
+                       reg = <0x227000 0x1000>;
+                       #clock-cells = <1>;
+                       #power-domain-cells = <1>;
+                       clocks = <&pll0_sysclk 2>, <&pll0_sysclk 4>,
+                                <&async3_clk>;
+                       clock-names = "pll0_sysclk2", "pll0_sysclk4", "async3";
+                       assigned-clocks = <&async3_clk>;
+                       assigned-clock-parents = <&pll1_sysclk 2>;
                };
                pinconf: pin-controller@22c00c {
                        compatible = "ti,da850-pupd";
                        reg-names = "mpu", "dat";
                        interrupts = <54>;
                        interrupt-names = "common";
+                       power-domains = <&psc1 7>;
                        status = "disabled";
                        dmas = <&edma0 1 1>,
                                <&edma0 0 1>;
                        reg = <0x213000 0x1000>;
                        interrupts = <52>;
                        max-pixelclock = <37500>;
+                       clocks = <&psc1 16>;
+                       clock-names = "fck";
+                       power-domains = <&psc1 16>;
                        status = "disabled";
                };
        };
                reg = <0x68000000 0x00008000>;
                ranges = <0 0 0x60000000 0x08000000
                          1 0 0x68000000 0x00008000>;
+               clocks = <&psc0 3>;
+               clock-names = "aemif";
+               clock-ranges;
                status = "disabled";
        };
        memctrl: memory-controller@b0000000 {
index 276211e..fe58faf 100644 (file)
@@ -90,8 +90,6 @@
                        dm816x_pinmux: pinmux@800 {
                                compatible = "pinctrl-single";
                                reg = <0x800 0x50a>;
-                               #address-cells = <1>;
-                               #size-cells = <0>;
                                #pinctrl-cells = <1>;
                                pinctrl-single,register-width = <16>;
                                pinctrl-single,function-mask = <0xf>;
                        };
 
                        scrm_clocks: clocks {
-                               #address-cells = <1>;
-                               #size-cells = <0>;
                        };
 
                        scrm_clockdomains: clockdomains {
index 4cd72b5..32d0dc3 100644 (file)
        model = "LogicPD Zoom OMAP35xx SOM-LV Development Kit";
        compatible = "logicpd,dm3730-som-lv-devkit", "ti,omap3";
 };
-
-&omap3_pmx_core2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&hsusb2_2_pins>;
-       hsusb2_2_pins: pinmux_hsusb2_2_pins {
-               pinctrl-single,pins = <
-                       OMAP3430_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3)            /* etk_d10.hsusb2_clk */
-                       OMAP3430_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3)            /* etk_d11.hsusb2_stp */
-                       OMAP3430_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d12.hsusb2_dir */
-                       OMAP3430_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d13.hsusb2_nxt */
-                       OMAP3430_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d14.hsusb2_data0 */
-                       OMAP3430_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d15.hsusb2_data1 */
-               >;
-       };
-};
index 2aca911..2428373 100644 (file)
        model = "LogicPD Zoom DM3730 SOM-LV Development Kit";
        compatible = "logicpd,dm3730-som-lv-devkit", "ti,omap3630", "ti,omap3";
 };
-
-&omap3_pmx_core2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&hsusb2_2_pins>;
-       hsusb2_2_pins: pinmux_hsusb2_2_pins {
-               pinctrl-single,pins = <
-                       OMAP3630_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3)            /* etk_d10.hsusb2_clk */
-                       OMAP3630_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3)            /* etk_d11.hsusb2_stp */
-                       OMAP3630_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d12.hsusb2_dir */
-                       OMAP3630_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d13.hsusb2_nxt */
-                       OMAP3630_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d14.hsusb2_data0 */
-                       OMAP3630_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d15.hsusb2_data1 */
-               >;
-       };
-};
index 0348550..98b682a 100644 (file)
 };
 
 &mmc3 {
-       interrupts-extended = <&intc 94>;
+       interrupts-extended = <&intc 94 &omap3_pmx_core 0x136>;
        pinctrl-0 = <&mmc3_pins &wl127x_gpio>;
        pinctrl-names = "default";
        vmmc-supply = <&wl12xx_vmmc>;
                >;
        };
 
-       i2c2_pins: pinmux_i2c2_pins {
-               pinctrl-single,pins = <
-                       OMAP3_CORE1_IOPAD(0x21be, PIN_INPUT | MUX_MODE0)        /* i2c2_scl */
-                       OMAP3_CORE1_IOPAD(0x21c0, PIN_INPUT | MUX_MODE0)        /* i2c2_sda */
-               >;
-       };
-
-       i2c3_pins: pinmux_i2c3_pins {
-               pinctrl-single,pins = <
-                       OMAP3_CORE1_IOPAD(0x21c2, PIN_INPUT | MUX_MODE0)        /* i2c3_scl */
-                       OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT | MUX_MODE0)        /* i2c3_sda */
-               >;
-       };
-
        tsc2004_pins: pinmux_tsc2004_pins {
                pinctrl-single,pins = <
                        OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE4)        /* mcbsp4_dr.gpio_153 */
                        OMAP3_WKUP_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4)        /* sys_boot1.gpio_3 */
                >;
        };
+       i2c2_pins: pinmux_i2c2_pins {
+               pinctrl-single,pins = <
+                       OMAP3_CORE1_IOPAD(0x21be, PIN_INPUT | MUX_MODE0)        /* i2c2_scl */
+                       OMAP3_CORE1_IOPAD(0x21c0, PIN_INPUT | MUX_MODE0)        /* i2c2_sda */
+               >;
+       };
+       i2c3_pins: pinmux_i2c3_pins {
+               pinctrl-single,pins = <
+                       OMAP3_CORE1_IOPAD(0x21c2, PIN_INPUT | MUX_MODE0)        /* i2c3_scl */
+                       OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT | MUX_MODE0)        /* i2c3_sda */
+               >;
+       };
+};
+
+&omap3_pmx_core2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&hsusb2_2_pins>;
+       hsusb2_2_pins: pinmux_hsusb2_2_pins {
+               pinctrl-single,pins = <
+                       OMAP3630_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3)            /* etk_d10.hsusb2_clk */
+                       OMAP3630_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3)            /* etk_d11.hsusb2_stp */
+                       OMAP3630_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d12.hsusb2_dir */
+                       OMAP3630_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d13.hsusb2_nxt */
+                       OMAP3630_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d14.hsusb2_data0 */
+                       OMAP3630_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d15.hsusb2_data1 */
+               >;
+       };
 };
 
 &uart2 {
index 9d5d53f..c39cf2c 100644 (file)
@@ -35,7 +35,7 @@
  * jumpering combinations for the long run.
  */
 &mmc3 {
-       interrupts-extended = <&intc 94 &omap3_pmx_core2 0x46>;
+       interrupts-extended = <&intc 94 &omap3_pmx_core 0x136>;
        pinctrl-0 = <&mmc3_pins &mmc3_core2_pins>;
        pinctrl-names = "default";
        vmmc-supply = <&wl12xx_vmmc>;
index dcda98c..50312e7 100644 (file)
        status = "okay";
 
        port {
-               #address-cells = <1>;
-               #size-cells = <0>;
-
                vin1ep0: endpoint {
                        remote-endpoint = <&adv7180>;
                        bus-width = <8>;
        };
 };
 
+&rwdt {
+       timeout-sec = <60>;
+       status = "okay";
+};
+
 &ssi1 {
        shared-pin;
 };
index ed09e56..0925bdc 100644 (file)
                        compatible = "arm,cortex-a15";
                        reg = <0>;
                        clock-frequency = <1300000000>;
-                       voltage-tolerance = <1>; /* 1% */
                        clocks = <&cpg CPG_CORE R8A7790_CLK_Z>;
-                       clock-latency = <300000>; /* 300 us */
                        power-domains = <&sysc R8A7790_PD_CA15_CPU0>;
                        next-level-cache = <&L2_CA15>;
                        capacity-dmips-mhz = <1024>;
+                       voltage-tolerance = <1>; /* 1% */
+                       clock-latency = <300000>; /* 300 us */
 
                        /* kHz - uV - OPPs unknown yet */
                        operating-points = <1400000 1000000>,
                        power-domains = <&sysc R8A7790_PD_CA15_CPU1>;
                        next-level-cache = <&L2_CA15>;
                        capacity-dmips-mhz = <1024>;
+                       voltage-tolerance = <1>; /* 1% */
+                       clock-latency = <300000>; /* 300 us */
+
+                       /* kHz - uV - OPPs unknown yet */
+                       operating-points = <1400000 1000000>,
+                                          <1225000 1000000>,
+                                          <1050000 1000000>,
+                                          < 875000 1000000>,
+                                          < 700000 1000000>,
+                                          < 350000 1000000>;
                };
 
                cpu2: cpu@2 {
                        power-domains = <&sysc R8A7790_PD_CA15_CPU2>;
                        next-level-cache = <&L2_CA15>;
                        capacity-dmips-mhz = <1024>;
+                       voltage-tolerance = <1>; /* 1% */
+                       clock-latency = <300000>; /* 300 us */
+
+                       /* kHz - uV - OPPs unknown yet */
+                       operating-points = <1400000 1000000>,
+                                          <1225000 1000000>,
+                                          <1050000 1000000>,
+                                          < 875000 1000000>,
+                                          < 700000 1000000>,
+                                          < 350000 1000000>;
                };
 
                cpu3: cpu@3 {
                        power-domains = <&sysc R8A7790_PD_CA15_CPU3>;
                        next-level-cache = <&L2_CA15>;
                        capacity-dmips-mhz = <1024>;
+                       voltage-tolerance = <1>; /* 1% */
+                       clock-latency = <300000>; /* 300 us */
+
+                       /* kHz - uV - OPPs unknown yet */
+                       operating-points = <1400000 1000000>,
+                                          <1225000 1000000>,
+                                          <1050000 1000000>,
+                                          < 875000 1000000>,
+                                          < 700000 1000000>,
+                                          < 350000 1000000>;
                };
 
                cpu4: cpu@100 {
                clock-frequency = <0>;
        };
 
+       pmu-0 {
+               compatible = "arm,cortex-a15-pmu";
+               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
+       };
+
+       pmu-1 {
+               compatible = "arm,cortex-a7-pmu";
+               interrupts-extended = <&gic GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&cpu4>, <&cpu5>, <&cpu6>, <&cpu7>;
+       };
+
        /* External SCIF clock */
        scif_clk: scif {
                compatible = "fixed-clock";
                #size-cells = <2>;
                ranges;
 
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a7790-wdt",
+                                    "renesas,rcar-gen2-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
+               };
+
                gpio0: gpio@e6050000 {
                        compatible = "renesas,gpio-r8a7790",
                                     "renesas,rcar-gen2-gpio";
 
                        smp-sram@0 {
                                compatible = "renesas,smp-sram";
-                               reg = <0 0x10>;
+                               reg = <0 0x100>;
                        };
                };
 
                        interrupt-controller;
                        reg = <0 0xf1001000 0 0x1000>, <0 0xf1002000 0 0x2000>,
                              <0 0xf1004000 0 0x2000>, <0 0xf1006000 0 0x2000>;
-                       interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
+                       interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_HIGH)>;
                        clocks = <&cpg CPG_MOD 408>;
                        clock-names = "clk";
                        power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
                        resets = <&cpg 127>;
                };
 
+               fdp1@fe940000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe940000 0 0x2400>;
+                       interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 119>;
+                       power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
+                       resets = <&cpg 119>;
+               };
+
+               fdp1@fe944000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe944000 0 0x2400>;
+                       interrupts = <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 118>;
+                       power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
+                       resets = <&cpg 118>;
+               };
+
+               fdp1@fe948000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe948000 0 0x2400>;
+                       interrupts = <GIC_SPI 264 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 117>;
+                       power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
+                       resets = <&cpg 117>;
+               };
+
                jpu: jpeg-codec@fe980000 {
                        compatible = "renesas,jpu-r8a7790",
                                     "renesas,rcar-gen2-jpu";
 
        timer {
                compatible = "arm,armv7-timer";
-               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
+               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>;
        };
 
        /* External USB clock - can be overridden by the board */
index be96bfd..ce22db0 100644 (file)
        status = "okay";
 };
 
+&rwdt {
+       timeout-sec = <60>;
+       status = "okay";
+};
+
 &sata0 {
        status = "okay";
 };
        pinctrl-names = "default";
 
        port {
-               #address-cells = <1>;
-               #size-cells = <0>;
-
                vin0ep2: endpoint {
                        remote-endpoint = <&adv7612_out>;
                        bus-width = <24>;
        pinctrl-names = "default";
 
        port {
-               #address-cells = <1>;
-               #size-cells = <0>;
-
                vin1ep: endpoint {
                        remote-endpoint = <&adv7180>;
                        bus-width = <8>;
index 797fa9d..275f6b4 100644 (file)
@@ -11,3 +11,8 @@
 &scif0 {
        u-boot,dm-pre-reloc;
 };
+
+&i2c6 {
+       status = "okay";
+       clock-frequency = <400000>;
+};
index fa9a57d..f02036e 100644 (file)
 
 &i2c6 {
        status = "okay";
-       clock-frequency = <400000>;
+       clock-frequency = <100000>;
+
+       pmic@5a {
+               compatible = "dlg,da9063l";
+               reg = <0x5a>;
+               interrupt-parent = <&irqc0>;
+               interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
+               interrupt-controller;
+
+               wdt {
+                       compatible = "dlg,da9063-watchdog";
+               };
+       };
+
+       vdd_dvfs: regulator@68 {
+               compatible = "dlg,da9210";
+               reg = <0x68>;
+               interrupt-parent = <&irqc0>;
+               interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
+
+               regulator-min-microvolt = <1000000>;
+               regulator-max-microvolt = <1000000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
 };
 
 &sata0 {
        status = "okay";
 };
 
+&cpu0 {
+       cpu0-supply = <&vdd_dvfs>;
+};
+
 /* composite video input */
 &vin0 {
        status = "okay";
        pinctrl-names = "default";
 
        port {
-               #address-cells = <1>;
-               #size-cells = <0>;
-
                vin0ep: endpoint {
                        remote-endpoint = <&adv7180>;
                        bus-width = <8>;
        };
 };
 
+&rwdt {
+       timeout-sec = <60>;
+       status = "okay";
+};
+
 &ssi1 {
        shared-pin;
 };
index d728738..991ac6f 100644 (file)
                        compatible = "arm,cortex-a15";
                        reg = <0>;
                        clock-frequency = <1500000000>;
-                       voltage-tolerance = <1>; /* 1% */
                        clocks = <&cpg CPG_CORE R8A7791_CLK_Z>;
-                       clock-latency = <300000>; /* 300 us */
                        power-domains = <&sysc R8A7791_PD_CA15_CPU0>;
                        next-level-cache = <&L2_CA15>;
+                       voltage-tolerance = <1>; /* 1% */
+                       clock-latency = <300000>; /* 300 us */
 
                        /* kHz - uV - OPPs unknown yet */
                        operating-points = <1500000 1000000>,
                        clocks = <&cpg CPG_CORE R8A7791_CLK_Z>;
                        power-domains = <&sysc R8A7791_PD_CA15_CPU1>;
                        next-level-cache = <&L2_CA15>;
+                       voltage-tolerance = <1>; /* 1% */
+                       clock-latency = <300000>; /* 300 us */
+
+                       /* kHz - uV - OPPs unknown yet */
+                       operating-points = <1500000 1000000>,
+                                          <1312500 1000000>,
+                                          <1125000 1000000>,
+                                          < 937500 1000000>,
+                                          < 750000 1000000>,
+                                          < 375000 1000000>;
                };
 
                L2_CA15: cache-controller-0 {
                clock-frequency = <0>;
        };
 
+       pmu {
+               compatible = "arm,cortex-a15-pmu";
+               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&cpu0>, <&cpu1>;
+       };
+
        /* External SCIF clock */
        scif_clk: scif {
                compatible = "fixed-clock";
                #size-cells = <2>;
                ranges;
 
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a7791-wdt",
+                                    "renesas,rcar-gen2-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc R8A7791_PD_ALWAYS_ON>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
+               };
+
                gpio0: gpio@e6050000 {
                        compatible = "renesas,gpio-r8a7791",
                                     "renesas,rcar-gen2-gpio";
 
                        smp-sram@0 {
                                compatible = "renesas,smp-sram";
-                               reg = <0 0x10>;
+                               reg = <0 0x100>;
                        };
                };
 
                        resets = <&cpg 127>;
                };
 
+               fdp1@fe940000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe940000 0 0x2400>;
+                       interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 119>;
+                       power-domains = <&sysc R8A7791_PD_ALWAYS_ON>;
+                       resets = <&cpg 119>;
+               };
+
+               fdp1@fe944000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe944000 0 0x2400>;
+                       interrupts = <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 118>;
+                       power-domains = <&sysc R8A7791_PD_ALWAYS_ON>;
+                       resets = <&cpg 118>;
+               };
+
                jpu: jpeg-codec@fe980000 {
                        compatible = "renesas,jpu-r8a7791",
                                     "renesas,rcar-gen2-jpu";
index 023d870..f923012 100644 (file)
        };
 };
 
+&rwdt {
+       timeout-sec = <60>;
+       status = "okay";
+};
+
 &scif0 {
        pinctrl-0 = <&scif0_pins>;
        pinctrl-names = "default";
index 8e26ded..63a978e 100644 (file)
                clock-frequency = <0>;
        };
 
+       pmu {
+               compatible = "arm,cortex-a15-pmu";
+               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&cpu0>, <&cpu1>;
+       };
+
        /* External SCIF clock */
        scif_clk: scif {
                compatible = "fixed-clock";
                #size-cells = <2>;
                ranges;
 
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a7792-wdt",
+                                    "renesas,rcar-gen2-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc R8A7792_PD_ALWAYS_ON>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
+               };
+
                gpio0: gpio@e6050000 {
                        compatible = "renesas,gpio-r8a7792",
                                     "renesas,rcar-gen2-gpio";
 
                        smp-sram@0 {
                                compatible = "renesas,smp-sram";
-                               reg = <0 0x10>;
+                               reg = <0 0x100>;
                        };
                };
 
index 9c89345..6b2f3a4 100644 (file)
        status = "okay";
 };
 
+&rwdt {
+       timeout-sec = <60>;
+       status = "okay";
+};
+
 &scif0 {
        pinctrl-0 = <&scif0_pins>;
        pinctrl-names = "default";
        pinctrl-names = "default";
 
        port {
-               #address-cells = <1>;
-               #size-cells = <0>;
-
                vin0ep2: endpoint {
                        remote-endpoint = <&adv7612_out>;
                        bus-width = <24>;
        status = "okay";
 
        port {
-               #address-cells = <1>;
-               #size-cells = <0>;
-
                vin1ep: endpoint {
                        remote-endpoint = <&adv7180_out>;
                        bus-width = <8>;
index 8201b4e..620a570 100644 (file)
                        compatible = "arm,cortex-a15";
                        reg = <0>;
                        clock-frequency = <1500000000>;
-                       voltage-tolerance = <1>; /* 1% */
                        clocks = <&cpg CPG_CORE R8A7793_CLK_Z>;
-                       clock-latency = <300000>; /* 300 us */
                        power-domains = <&sysc R8A7793_PD_CA15_CPU0>;
+                       voltage-tolerance = <1>; /* 1% */
+                       clock-latency = <300000>; /* 300 us */
 
                        /* kHz - uV - OPPs unknown yet */
                        operating-points = <1500000 1000000>,
                        clock-frequency = <1500000000>;
                        clocks = <&cpg CPG_CORE R8A7793_CLK_Z>;
                        power-domains = <&sysc R8A7793_PD_CA15_CPU1>;
+                       voltage-tolerance = <1>; /* 1% */
+                       clock-latency = <300000>; /* 300 us */
+
+                       /* kHz - uV - OPPs unknown yet */
+                       operating-points = <1500000 1000000>,
+                                          <1312500 1000000>,
+                                          <1125000 1000000>,
+                                          < 937500 1000000>,
+                                          < 750000 1000000>,
+                                          < 375000 1000000>;
+                       next-level-cache = <&L2_CA15>;
                };
 
                L2_CA15: cache-controller-0 {
                clock-frequency = <0>;
        };
 
+       pmu {
+               compatible = "arm,cortex-a15-pmu";
+               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&cpu0>, <&cpu1>;
+       };
+
        /* External SCIF clock */
        scif_clk: scif {
                compatible = "fixed-clock";
                #size-cells = <2>;
                ranges;
 
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a7793-wdt",
+                                    "renesas,rcar-gen2-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc R8A7793_PD_ALWAYS_ON>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
+               };
+
                gpio0: gpio@e6050000 {
                        compatible = "renesas,gpio-r8a7793",
                                     "renesas,rcar-gen2-gpio";
 
                        smp-sram@0 {
                                compatible = "renesas,smp-sram";
-                               reg = <0 0x10>;
+                               reg = <0 0x100>;
                        };
                };
 
                        resets = <&cpg 408>;
                };
 
+               fdp1@fe940000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe940000 0 0x2400>;
+                       interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 119>;
+                       power-domains = <&sysc R8A7793_PD_ALWAYS_ON>;
+                       resets = <&cpg 119>;
+               };
+
+               fdp1@fe944000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe944000 0 0x2400>;
+                       interrupts = <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 118>;
+                       power-domains = <&sysc R8A7793_PD_ALWAYS_ON>;
+                       resets = <&cpg 118>;
+               };
+
                du: display@feb00000 {
                        compatible = "renesas,du-r8a7793";
                        reg = <0 0xfeb00000 0 0x40000>;
index af3c67e..ef7e2a8 100644 (file)
                                };
                        };
                };
+
+               eeprom@50 {
+                       compatible = "renesas,r1ex24002", "atmel,24c02";
+                       reg = <0x50>;
+                       pagesize = <16>;
+               };
        };
 
        /*
        status = "okay";
 };
 
+&rwdt {
+       timeout-sec = <60>;
+       status = "okay";
+};
+
 &sdhi0 {
        pinctrl-0 = <&sdhi0_pins>;
        pinctrl-1 = <&sdhi0_pins_uhs>;
        pinctrl-names = "default";
 
        port {
-               #address-cells = <1>;
-               #size-cells = <0>;
-
                vin0ep: endpoint {
                        remote-endpoint = <&adv7180>;
                        bus-width = <8>;
index 50dad43..daec965 100644 (file)
        pinctrl-names = "default";
 
        port {
-               #address-cells = <1>;
-               #size-cells = <0>;
-
                vin0ep: endpoint {
                        remote-endpoint = <&adv7180>;
                        bus-width = <8>;
        };
 };
 
+&rwdt {
+       timeout-sec = <60>;
+       status = "okay";
+};
+
 &ssi1 {
        shared-pin;
 };
index 0cc07b3..ea2ca4b 100644 (file)
                clock-frequency = <0>;
        };
 
+       pmu {
+               compatible = "arm,cortex-a7-pmu";
+               interrupts-extended = <&gic GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&cpu0>, <&cpu1>;
+       };
+
        /* External SCIF clock */
        scif_clk: scif {
                compatible = "fixed-clock";
                #size-cells = <2>;
                ranges;
 
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a7794-wdt",
+                                    "renesas,rcar-gen2-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc R8A7794_PD_ALWAYS_ON>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
+               };
+
                gpio0: gpio@e6050000 {
                        compatible = "renesas,gpio-r8a7794",
                                     "renesas,rcar-gen2-gpio";
 
                        smp-sram@0 {
                                compatible = "renesas,smp-sram";
-                               reg = <0 0x10>;
+                               reg = <0 0x100>;
                        };
                };
 
                        resets = <&cpg 128>;
                };
 
+               fdp1@fe940000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe940000 0 0x2400>;
+                       interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 119>;
+                       power-domains = <&sysc R8A7794_PD_ALWAYS_ON>;
+                       resets = <&cpg 119>;
+               };
+
                du: display@feb00000 {
                        compatible = "renesas,du-r8a7794";
                        reg = <0 0xfeb00000 0 0x40000>;
index 06bd4f2..ebbd234 100644 (file)
@@ -7,3 +7,35 @@
 
 #include "r8a7795-h3ulcb.dts"
 #include "r8a7795-u-boot.dtsi"
+
+/ {
+       cpld {
+               compatible = "renesas,ulcb-cpld";
+               status = "okay";
+               gpio-sck = <&gpio6 8 0>;
+               gpio-mosi = <&gpio6 7 0>;
+               gpio-miso = <&gpio6 10 0>;
+               gpio-sstbz = <&gpio2 3 0>;
+       };
+};
+
+&sdhi2_pins {
+       groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
+       power-source = <1800>;
+};
+
+&sdhi2_pins_uhs {
+       groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
+};
+
+&sdhi0 {
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr104;
+       max-frequency = <208000000>;
+};
+
+&sdhi2 {
+       mmc-hs400-1_8v;
+       max-frequency = <200000000>;
+};
index 666fbf5..8be5e41 100644 (file)
@@ -7,3 +7,31 @@
 
 #include "r8a7795-salvator-x.dts"
 #include "r8a7795-u-boot.dtsi"
+
+&sdhi2_pins {
+       groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
+       power-source = <1800>;
+};
+
+&sdhi2_pins_uhs {
+       groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
+};
+
+&sdhi0 {
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr104;
+       max-frequency = <208000000>;
+};
+
+&sdhi2 {
+       mmc-hs400-1_8v;
+       max-frequency = <200000000>;
+};
+
+&sdhi3 {
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr104;
+       max-frequency = <208000000>;
+};
index 36373d6..446822f 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the Salvator-X board
+ * Device Tree Source for the Salvator-X board with R-Car H3 ES2.0
  *
  * Copyright (C) 2015 Renesas Electronics Corp.
  */
        status = "okay";
 };
 
+&sound_card {
+       dais = <&rsnd_port0     /* ak4613 */
+               &rsnd_port1     /* HDMI0  */
+               &rsnd_port2>;   /* HDMI1  */
+};
+
 &hdmi0 {
        status = "okay";
 
                                remote-endpoint = <&hdmi0_con>;
                        };
                };
+               port@2 {
+                       reg = <2>;
+                       dw_hdmi0_snd_in: endpoint {
+                               remote-endpoint = <&rsnd_endpoint1>;
+                       };
+               };
        };
 };
 
                                remote-endpoint = <&hdmi1_con>;
                        };
                };
+               port@2 {
+                       reg = <2>;
+                       dw_hdmi1_snd_in: endpoint {
+                               remote-endpoint = <&rsnd_endpoint2>;
+                       };
+               };
        };
 };
 
        status = "okay";
 };
 
+&rcar_sound {
+       ports {
+               /* rsnd_port0 is on salvator-common */
+               rsnd_port1: port@1 {
+                       rsnd_endpoint1: endpoint {
+                               remote-endpoint = <&dw_hdmi0_snd_in>;
+
+                               dai-format = "i2s";
+                               bitclock-master = <&rsnd_endpoint1>;
+                               frame-master = <&rsnd_endpoint1>;
+
+                               playback = <&ssi2>;
+                       };
+               };
+               rsnd_port2: port@2 {
+                       rsnd_endpoint2: endpoint {
+                               remote-endpoint = <&dw_hdmi1_snd_in>;
+
+                               dai-format = "i2s";
+                               bitclock-master = <&rsnd_endpoint2>;
+                               frame-master = <&rsnd_endpoint2>;
+
+                               playback = <&ssi3>;
+                       };
+               };
+       };
+};
+
 &pfc {
        usb2_pins: usb2 {
                groups = "usb2";
index 526966a..cc22c57 100644 (file)
 &extalr_clk {
        u-boot,dm-pre-reloc;
 };
+
+&soc {
+       rpc: rpc@0xee200000 {
+               compatible = "renesas,rpc-r8a7795", "renesas,rpc";
+               reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
+               clocks = <&cpg CPG_MOD 917>;
+               bank-width = <2>;
+               status = "disabled";
+       };
+};
index af77bfe..c87eed7 100644 (file)
                i2c7 = &i2c_dvfs;
        };
 
+       /*
+        * The external audio clocks are configured as 0 Hz fixed frequency
+        * clocks by default.
+        * Boards that provide audio clocks should override them.
+        */
+       audio_clk_a: audio_clk_a {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       audio_clk_b: audio_clk_b {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       audio_clk_c: audio_clk_c {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       /* External CAN clock - to be overridden by boards that provide it */
+       can_clk: can {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       cluster0_opp: opp_table0 {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp-500000000 {
+                       opp-hz = /bits/ 64 <500000000>;
+                       opp-microvolt = <830000>;
+                       clock-latency-ns = <300000>;
+               };
+               opp-1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-microvolt = <830000>;
+                       clock-latency-ns = <300000>;
+               };
+               opp-1500000000 {
+                       opp-hz = /bits/ 64 <1500000000>;
+                       opp-microvolt = <830000>;
+                       clock-latency-ns = <300000>;
+                       opp-suspend;
+               };
+               opp-1600000000 {
+                       opp-hz = /bits/ 64 <1600000000>;
+                       opp-microvolt = <900000>;
+                       clock-latency-ns = <300000>;
+                       turbo-mode;
+               };
+               opp-1700000000 {
+                       opp-hz = /bits/ 64 <1700000000>;
+                       opp-microvolt = <960000>;
+                       clock-latency-ns = <300000>;
+                       turbo-mode;
+               };
+       };
+
+       cluster1_opp: opp_table1 {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp-800000000 {
+                       opp-hz = /bits/ 64 <800000000>;
+                       opp-microvolt = <820000>;
+                       clock-latency-ns = <300000>;
+               };
+               opp-1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-microvolt = <820000>;
+                       clock-latency-ns = <300000>;
+               };
+               opp-1200000000 {
+                       opp-hz = /bits/ 64 <1200000000>;
+                       opp-microvolt = <820000>;
+                       clock-latency-ns = <300000>;
+               };
+       };
+
        cpus {
                #address-cells = <1>;
                #size-cells = <0>;
                };
 
                a57_1: cpu@1 {
-                       compatible = "arm,cortex-a57","arm,armv8";
+                       compatible = "arm,cortex-a57", "arm,armv8";
                        reg = <0x1>;
                        device_type = "cpu";
                        power-domains = <&sysc R8A7795_PD_CA57_CPU1>;
                };
 
                a57_2: cpu@2 {
-                       compatible = "arm,cortex-a57","arm,armv8";
+                       compatible = "arm,cortex-a57", "arm,armv8";
                        reg = <0x2>;
                        device_type = "cpu";
                        power-domains = <&sysc R8A7795_PD_CA57_CPU2>;
                };
 
                a57_3: cpu@3 {
-                       compatible = "arm,cortex-a57","arm,armv8";
+                       compatible = "arm,cortex-a57", "arm,armv8";
                        reg = <0x3>;
                        device_type = "cpu";
                        power-domains = <&sysc R8A7795_PD_CA57_CPU3>;
                };
 
                a53_1: cpu@101 {
-                       compatible = "arm,cortex-a53","arm,armv8";
+                       compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0x101>;
                        device_type = "cpu";
                        power-domains = <&sysc R8A7795_PD_CA53_CPU1>;
                };
 
                a53_2: cpu@102 {
-                       compatible = "arm,cortex-a53","arm,armv8";
+                       compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0x102>;
                        device_type = "cpu";
                        power-domains = <&sysc R8A7795_PD_CA53_CPU2>;
                };
 
                a53_3: cpu@103 {
-                       compatible = "arm,cortex-a53","arm,armv8";
+                       compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0x103>;
                        device_type = "cpu";
                        power-domains = <&sysc R8A7795_PD_CA53_CPU3>;
                clock-frequency = <0>;
        };
 
-       /*
-        * The external audio clocks are configured as 0 Hz fixed frequency
-        * clocks by default.
-        * Boards that provide audio clocks should override them.
-        */
-       audio_clk_a: audio_clk_a {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
-       };
-
-       audio_clk_b: audio_clk_b {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
-       };
-
-       audio_clk_c: audio_clk_c {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
-       };
-
-       /* External CAN clock - to be overridden by boards that provide it */
-       can_clk: can {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
-       };
-
-       cluster0_opp: opp_table0 {
-               compatible = "operating-points-v2";
-               opp-shared;
-
-               opp-500000000 {
-                       opp-hz = /bits/ 64 <500000000>;
-                       opp-microvolt = <830000>;
-                       clock-latency-ns = <300000>;
-               };
-               opp-1000000000 {
-                       opp-hz = /bits/ 64 <1000000000>;
-                       opp-microvolt = <830000>;
-                       clock-latency-ns = <300000>;
-               };
-               opp-1500000000 {
-                       opp-hz = /bits/ 64 <1500000000>;
-                       opp-microvolt = <830000>;
-                       clock-latency-ns = <300000>;
-                       opp-suspend;
-               };
-               opp-1600000000 {
-                       opp-hz = /bits/ 64 <1600000000>;
-                       opp-microvolt = <900000>;
-                       clock-latency-ns = <300000>;
-                       turbo-mode;
-               };
-               opp-1700000000 {
-                       opp-hz = /bits/ 64 <1700000000>;
-                       opp-microvolt = <960000>;
-                       clock-latency-ns = <300000>;
-                       turbo-mode;
-               };
-       };
-
-       cluster1_opp: opp_table1 {
-               compatible = "operating-points-v2";
-               opp-shared;
-
-               opp-800000000 {
-                       opp-hz = /bits/ 64 <800000000>;
-                       opp-microvolt = <820000>;
-                       clock-latency-ns = <300000>;
-               };
-               opp-1000000000 {
-                       opp-hz = /bits/ 64 <1000000000>;
-                       opp-microvolt = <820000>;
-                       clock-latency-ns = <300000>;
-               };
-               opp-1200000000 {
-                       opp-hz = /bits/ 64 <1200000000>;
-                       opp-microvolt = <820000>;
-                       clock-latency-ns = <300000>;
-               };
-       };
-
        /* External PCIe clock - can be overridden by the board */
        pcie_bus_clk: pcie_bus {
                compatible = "fixed-clock";
                clock-frequency = <0>;
        };
 
-       pmu_a57 {
-               compatible = "arm,cortex-a57-pmu";
-               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
-                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
-                                     <&gic GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,
-                                     <&gic GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
-               interrupt-affinity = <&a57_0>,
-                                    <&a57_1>,
-                                    <&a57_2>,
-                                    <&a57_3>;
-       };
-
        pmu_a53 {
                compatible = "arm,cortex-a53-pmu";
                interrupts-extended = <&gic GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
                                     <&a53_3>;
        };
 
+       pmu_a57 {
+               compatible = "arm,cortex-a57-pmu";
+               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&a57_0>,
+                                    <&a57_1>,
+                                    <&a57_2>,
+                                    <&a57_3>;
+       };
+
        psci {
                compatible = "arm,psci-1.0", "arm,psci-0.2";
                method = "smc";
                #size-cells = <2>;
                ranges;
 
-               gic: interrupt-controller@f1010000 {
-                       compatible = "arm,gic-400";
-                       #interrupt-cells = <3>;
-                       #address-cells = <0>;
-                       interrupt-controller;
-                       reg = <0x0 0xf1010000 0 0x1000>,
-                             <0x0 0xf1020000 0 0x20000>,
-                             <0x0 0xf1040000 0 0x20000>,
-                             <0x0 0xf1060000 0 0x20000>;
-                       interrupts = <GIC_PPI 9
-                                       (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_HIGH)>;
-                       clocks = <&cpg CPG_MOD 408>;
-                       clock-names = "clk";
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 408>;
-               };
-
-               wdt0: watchdog@e6020000 {
+               rwdt: watchdog@e6020000 {
                        compatible = "renesas,r8a7795-wdt", "renesas,rcar-gen3-wdt";
                        reg = <0 0xe6020000 0 0x0c>;
                        clocks = <&cpg CPG_MOD 402>;
                        resets = <&cpg 905>;
                };
 
+               pfc: pin-controller@e6060000 {
+                       compatible = "renesas,pfc-r8a7795";
+                       reg = <0 0xe6060000 0 0x50c>;
+               };
+
                cpg: clock-controller@e6150000 {
                        compatible = "renesas,r8a7795-cpg-mssr";
                        reg = <0 0xe6150000 0 0x1000>;
                        reg = <0 0xe6160000 0 0x0200>;
                };
 
-               prr: chipid@fff00044 {
-                       compatible = "renesas,prr";
-                       reg = <0 0xfff00044 0 4>;
-               };
-
                sysc: system-controller@e6180000 {
                        compatible = "renesas,r8a7795-sysc";
                        reg = <0 0xe6180000 0 0x0400>;
                        #power-domain-cells = <1>;
                };
 
-               pfc: pin-controller@e6060000 {
-                       compatible = "renesas,pfc-r8a7795";
-                       reg = <0 0xe6060000 0 0x50c>;
+               tsc: thermal@e6198000 {
+                       compatible = "renesas,r8a7795-thermal";
+                       reg = <0 0xe6198000 0 0x100>,
+                             <0 0xe61a0000 0 0x100>,
+                             <0 0xe61a8000 0 0x100>;
+                       interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 522>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 522>;
+                       #thermal-sensor-cells = <1>;
+                       status = "okay";
                };
 
                intc_ex: interrupt-controller@e61c0000 {
                        resets = <&cpg 407>;
                };
 
-               ipmmu_vi0: mmu@febd0000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xfebd0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 14>;
+               i2c0: i2c@e6500000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7795",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe6500000 0 0x40>;
+                       interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 931>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-               };
-
-               ipmmu_vi1: mmu@febe0000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xfebe0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 15>;
+                       resets = <&cpg 931>;
+                       dmas = <&dmac1 0x91>, <&dmac1 0x90>,
+                              <&dmac2 0x91>, <&dmac2 0x90>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       i2c-scl-internal-delay-ns = <110>;
+                       status = "disabled";
+               };
+
+               i2c1: i2c@e6508000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7795",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe6508000 0 0x40>;
+                       interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 930>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 930>;
+                       dmas = <&dmac1 0x93>, <&dmac1 0x92>,
+                              <&dmac2 0x93>, <&dmac2 0x92>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       i2c-scl-internal-delay-ns = <6>;
                        status = "disabled";
                };
 
-               ipmmu_vp0: mmu@fe990000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xfe990000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 16>;
-                       power-domains = <&sysc R8A7795_PD_A3VP>;
-                       #iommu-cells = <1>;
+               i2c2: i2c@e6510000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7795",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe6510000 0 0x40>;
+                       interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 929>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 929>;
+                       dmas = <&dmac1 0x95>, <&dmac1 0x94>,
+                              <&dmac2 0x95>, <&dmac2 0x94>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       i2c-scl-internal-delay-ns = <6>;
                        status = "disabled";
                };
 
-               ipmmu_vp1: mmu@fe980000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xfe980000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 17>;
-                       power-domains = <&sysc R8A7795_PD_A3VP>;
-                       #iommu-cells = <1>;
+               arm_cc630p: crypto@e6601000 {
+                       compatible = "arm,cryptocell-630p-ree";
+                       interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
+                       reg = <0x0 0xe6601000 0 0x1000>;
+                       clocks = <&cpg CPG_MOD 229>;
+                       resets = <&cpg 229>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                };
 
-               ipmmu_vc0: mmu@fe6b0000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xfe6b0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 12>;
-                       power-domains = <&sysc R8A7795_PD_A3VC>;
-                       #iommu-cells = <1>;
+               i2c3: i2c@e66d0000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7795",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe66d0000 0 0x40>;
+                       interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 928>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 928>;
+                       dmas = <&dmac0 0x97>, <&dmac0 0x96>;
+                       dma-names = "tx", "rx";
+                       i2c-scl-internal-delay-ns = <110>;
                        status = "disabled";
                };
 
-               ipmmu_vc1: mmu@fe6f0000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xfe6f0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 13>;
-                       power-domains = <&sysc R8A7795_PD_A3VC>;
-                       #iommu-cells = <1>;
+               i2c4: i2c@e66d8000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7795",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe66d8000 0 0x40>;
+                       interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 927>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 927>;
+                       dmas = <&dmac0 0x99>, <&dmac0 0x98>;
+                       dma-names = "tx", "rx";
+                       i2c-scl-internal-delay-ns = <110>;
                        status = "disabled";
                };
 
-               ipmmu_pv0: mmu@fd800000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xfd800000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 6>;
+               i2c5: i2c@e66e0000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7795",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe66e0000 0 0x40>;
+                       interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 919>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 919>;
+                       dmas = <&dmac0 0x9b>, <&dmac0 0x9a>;
+                       dma-names = "tx", "rx";
+                       i2c-scl-internal-delay-ns = <110>;
                        status = "disabled";
                };
 
-               ipmmu_pv1: mmu@fd950000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xfd950000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 7>;
+               i2c6: i2c@e66e8000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7795",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe66e8000 0 0x40>;
+                       interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 918>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 918>;
+                       dmas = <&dmac0 0x9d>, <&dmac0 0x9c>;
+                       dma-names = "tx", "rx";
+                       i2c-scl-internal-delay-ns = <6>;
                        status = "disabled";
                };
 
-               ipmmu_pv2: mmu@fd960000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xfd960000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 8>;
+               i2c_dvfs: i2c@e60b0000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a7795",
+                                    "renesas,rcar-gen3-iic",
+                                    "renesas,rmobile-iic";
+                       reg = <0 0xe60b0000 0 0x425>;
+                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 926>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 926>;
+                       dmas = <&dmac0 0x11>, <&dmac0 0x10>;
+                       dma-names = "tx", "rx";
                        status = "disabled";
                };
 
-               ipmmu_pv3: mmu@fd970000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xfd970000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 9>;
+               hscif0: serial@e6540000 {
+                       compatible = "renesas,hscif-r8a7795",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe6540000 0 96>;
+                       interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 520>,
+                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x31>, <&dmac1 0x30>,
+                              <&dmac2 0x31>, <&dmac2 0x30>;
+                       dma-names = "tx", "rx", "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 520>;
                        status = "disabled";
                };
 
-               ipmmu_ir: mmu@ff8b0000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xff8b0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 3>;
-                       power-domains = <&sysc R8A7795_PD_A3IR>;
-                       #iommu-cells = <1>;
+               hscif1: serial@e6550000 {
+                       compatible = "renesas,hscif-r8a7795",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe6550000 0 96>;
+                       interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 519>,
+                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x33>, <&dmac1 0x32>,
+                              <&dmac2 0x33>, <&dmac2 0x32>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 519>;
                        status = "disabled";
                };
 
-               ipmmu_hc: mmu@e6570000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xe6570000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 2>;
+               hscif2: serial@e6560000 {
+                       compatible = "renesas,hscif-r8a7795",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe6560000 0 96>;
+                       interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 518>,
+                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x35>, <&dmac1 0x34>,
+                              <&dmac2 0x35>, <&dmac2 0x34>;
+                       dma-names = "tx", "rx", "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 518>;
                        status = "disabled";
                };
 
-               ipmmu_rt: mmu@ffc80000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xffc80000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 10>;
+               hscif3: serial@e66a0000 {
+                       compatible = "renesas,hscif-r8a7795",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe66a0000 0 96>;
+                       interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 517>,
+                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x37>, <&dmac0 0x36>;
+                       dma-names = "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 517>;
                        status = "disabled";
                };
 
-               ipmmu_mp0: mmu@ec670000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xec670000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 4>;
+               hscif4: serial@e66b0000 {
+                       compatible = "renesas,hscif-r8a7795",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe66b0000 0 96>;
+                       interrupts = <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 516>,
+                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x39>, <&dmac0 0x38>;
+                       dma-names = "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 516>;
                        status = "disabled";
                };
 
-               ipmmu_ds0: mmu@e6740000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xe6740000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 0>;
+               hsusb: usb@e6590000 {
+                       compatible = "renesas,usbhs-r8a7795",
+                                    "renesas,rcar-gen3-usbhs";
+                       reg = <0 0xe6590000 0 0x100>;
+                       interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 704>;
+                       dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
+                              <&usb_dmac1 0>, <&usb_dmac1 1>;
+                       dma-names = "ch0", "ch1", "ch2", "ch3";
+                       renesas,buswait = <11>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 704>;
+                       status = "disabled";
                };
 
-               ipmmu_ds1: mmu@e7740000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xe7740000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 1>;
+               hsusb3: usb@e659c000 {
+                       compatible = "renesas,usbhs-r8a7795",
+                                    "renesas,rcar-gen3-usbhs";
+                       reg = <0 0xe659c000 0 0x100>;
+                       interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 705>;
+                       dmas = <&usb_dmac2 0>, <&usb_dmac2 1>,
+                              <&usb_dmac3 0>, <&usb_dmac3 1>;
+                       dma-names = "ch0", "ch1", "ch2", "ch3";
+                       renesas,buswait = <11>;
+                       phys = <&usb2_phy3>;
+                       phy-names = "usb";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 705>;
+                       status = "disabled";
                };
 
-               ipmmu_mm: mmu@e67b0000 {
-                       compatible = "renesas,ipmmu-r8a7795";
-                       reg = <0 0xe67b0000 0 0x1000>;
-                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
+               usb_dmac0: dma-controller@e65a0000 {
+                       compatible = "renesas,r8a7795-usb-dmac",
+                                    "renesas,usb-dmac";
+                       reg = <0 0xe65a0000 0 0x100>;
+                       interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1";
+                       clocks = <&cpg CPG_MOD 330>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 330>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac1: dma-controller@e65b0000 {
+                       compatible = "renesas,r8a7795-usb-dmac",
+                                    "renesas,usb-dmac";
+                       reg = <0 0xe65b0000 0 0x100>;
+                       interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1";
+                       clocks = <&cpg CPG_MOD 331>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 331>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac2: dma-controller@e6460000 {
+                       compatible = "renesas,r8a7795-usb-dmac",
+                                    "renesas,usb-dmac";
+                       reg = <0 0xe6460000 0 0x100>;
+                       interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1";
+                       clocks = <&cpg CPG_MOD 326>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 326>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac3: dma-controller@e6470000 {
+                       compatible = "renesas,r8a7795-usb-dmac",
+                                    "renesas,usb-dmac";
+                       reg = <0 0xe6470000 0 0x100>;
+                       interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1";
+                       clocks = <&cpg CPG_MOD 329>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 329>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb3_phy0: usb-phy@e65ee000 {
+                       compatible = "renesas,r8a7795-usb3-phy",
+                                    "renesas,rcar-gen3-usb3-phy";
+                       reg = <0 0xe65ee000 0 0x90>;
+                       clocks = <&cpg CPG_MOD 328>, <&usb3s0_clk>,
+                                <&usb_extal_clk>;
+                       clock-names = "usb3-if", "usb3s_clk", "usb_extal";
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 328>;
+                       #phy-cells = <0>;
+                       status = "disabled";
                };
 
                dmac0: dma-controller@e6700000 {
                               <&ipmmu_ds1 30>, <&ipmmu_ds1 31>;
                };
 
-               audma0: dma-controller@ec700000 {
-                       compatible = "renesas,dmac-r8a7795",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xec700000 0 0x10000>;
-                       interrupts = <GIC_SPI 350 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 320 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 321 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 322 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 323 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 324 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 325 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 327 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 328 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 329 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 330 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 331 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 332 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 333 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 334 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 335 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                       "ch0", "ch1", "ch2", "ch3",
-                                       "ch4", "ch5", "ch6", "ch7",
-                                       "ch8", "ch9", "ch10", "ch11",
-                                       "ch12", "ch13", "ch14", "ch15";
-                       clocks = <&cpg CPG_MOD 502>;
-                       clock-names = "fck";
+               ipmmu_ds0: mmu@e6740000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xe6740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 0>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 502>;
-                       #dma-cells = <1>;
-                       dma-channels = <16>;
-                       iommus = <&ipmmu_mp0 0>, <&ipmmu_mp0 1>,
-                              <&ipmmu_mp0 2>, <&ipmmu_mp0 3>,
-                              <&ipmmu_mp0 4>, <&ipmmu_mp0 5>,
-                              <&ipmmu_mp0 6>, <&ipmmu_mp0 7>,
-                              <&ipmmu_mp0 8>, <&ipmmu_mp0 9>,
-                              <&ipmmu_mp0 10>, <&ipmmu_mp0 11>,
-                              <&ipmmu_mp0 12>, <&ipmmu_mp0 13>,
-                              <&ipmmu_mp0 14>, <&ipmmu_mp0 15>;
+                       #iommu-cells = <1>;
                };
 
-               audma1: dma-controller@ec720000 {
-                       compatible = "renesas,dmac-r8a7795",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xec720000 0 0x10000>;
-                       interrupts = <GIC_SPI 351 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 336 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 337 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 338 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 339 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 340 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 341 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 342 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 343 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 344 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 345 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 346 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 347 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 348 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 349 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 382 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 383 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                       "ch0", "ch1", "ch2", "ch3",
-                                       "ch4", "ch5", "ch6", "ch7",
-                                       "ch8", "ch9", "ch10", "ch11",
-                                       "ch12", "ch13", "ch14", "ch15";
-                       clocks = <&cpg CPG_MOD 501>;
-                       clock-names = "fck";
+               ipmmu_ds1: mmu@e7740000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xe7740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 1>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 501>;
-                       #dma-cells = <1>;
-                       dma-channels = <16>;
-                       iommus = <&ipmmu_mp0 16>, <&ipmmu_mp0 17>,
-                              <&ipmmu_mp0 18>, <&ipmmu_mp0 19>,
-                              <&ipmmu_mp0 20>, <&ipmmu_mp0 21>,
-                              <&ipmmu_mp0 22>, <&ipmmu_mp0 23>,
-                              <&ipmmu_mp0 24>, <&ipmmu_mp0 25>,
-                              <&ipmmu_mp0 26>, <&ipmmu_mp0 27>,
-                              <&ipmmu_mp0 28>, <&ipmmu_mp0 29>,
-                              <&ipmmu_mp0 30>, <&ipmmu_mp0 31>;
+                       #iommu-cells = <1>;
                };
 
-               avb: ethernet@e6800000 {
-                       compatible = "renesas,etheravb-r8a7795",
-                                    "renesas,etheravb-rcar-gen3";
-                       reg = <0 0xe6800000 0 0x800>, <0 0xe6a00000 0 0x10000>;
-                       interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "ch0", "ch1", "ch2", "ch3",
-                                         "ch4", "ch5", "ch6", "ch7",
-                                         "ch8", "ch9", "ch10", "ch11",
-                                         "ch12", "ch13", "ch14", "ch15",
-                                         "ch16", "ch17", "ch18", "ch19",
-                                         "ch20", "ch21", "ch22", "ch23",
-                                         "ch24";
-                       clocks = <&cpg CPG_MOD 812>;
+               ipmmu_hc: mmu@e6570000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xe6570000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 2>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 812>;
-                       phy-mode = "rgmii";
-                       iommus = <&ipmmu_ds0 16>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       status = "disabled";
+                       #iommu-cells = <1>;
                };
 
-               can0: can@e6c30000 {
-                       compatible = "renesas,can-r8a7795",
-                                    "renesas,rcar-gen3-can";
-                       reg = <0 0xe6c30000 0 0x1000>;
-                       interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 916>,
-                              <&cpg CPG_CORE R8A7795_CLK_CANFD>,
-                              <&can_clk>;
-                       clock-names = "clkp1", "clkp2", "can_clk";
-                       assigned-clocks = <&cpg CPG_CORE R8A7795_CLK_CANFD>;
-                       assigned-clock-rates = <40000000>;
+               ipmmu_ir: mmu@ff8b0000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xff8b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 3>;
+                       power-domains = <&sysc R8A7795_PD_A3IR>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mm: mmu@e67b0000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xe67b0000 0 0x1000>;
+                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 916>;
-                       status = "disabled";
+                       #iommu-cells = <1>;
                };
 
-               can1: can@e6c38000 {
-                       compatible = "renesas,can-r8a7795",
+               ipmmu_mp0: mmu@ec670000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xec670000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 4>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv0: mmu@fd800000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xfd800000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 6>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv1: mmu@fd950000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xfd950000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 7>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv2: mmu@fd960000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xfd960000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 8>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv3: mmu@fd970000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xfd970000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 9>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_rt: mmu@ffc80000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xffc80000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 10>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vc0: mmu@fe6b0000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xfe6b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 12>;
+                       power-domains = <&sysc R8A7795_PD_A3VC>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vc1: mmu@fe6f0000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xfe6f0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 13>;
+                       power-domains = <&sysc R8A7795_PD_A3VC>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vi0: mmu@febd0000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xfebd0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 14>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vi1: mmu@febe0000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xfebe0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 15>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vp0: mmu@fe990000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xfe990000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 16>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vp1: mmu@fe980000 {
+                       compatible = "renesas,ipmmu-r8a7795";
+                       reg = <0 0xfe980000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 17>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+                       #iommu-cells = <1>;
+               };
+
+               avb: ethernet@e6800000 {
+                       compatible = "renesas,etheravb-r8a7795",
+                                    "renesas,etheravb-rcar-gen3";
+                       reg = <0 0xe6800000 0 0x800>, <0 0xe6a00000 0 0x10000>;
+                       interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1", "ch2", "ch3",
+                                         "ch4", "ch5", "ch6", "ch7",
+                                         "ch8", "ch9", "ch10", "ch11",
+                                         "ch12", "ch13", "ch14", "ch15",
+                                         "ch16", "ch17", "ch18", "ch19",
+                                         "ch20", "ch21", "ch22", "ch23",
+                                         "ch24";
+                       clocks = <&cpg CPG_MOD 812>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 812>;
+                       phy-mode = "rgmii";
+                       iommus = <&ipmmu_ds0 16>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               can0: can@e6c30000 {
+                       compatible = "renesas,can-r8a7795",
+                                    "renesas,rcar-gen3-can";
+                       reg = <0 0xe6c30000 0 0x1000>;
+                       interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 916>,
+                              <&cpg CPG_CORE R8A7795_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A7795_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 916>;
+                       status = "disabled";
+               };
+
+               can1: can@e6c38000 {
+                       compatible = "renesas,can-r8a7795",
                                     "renesas,rcar-gen3-can";
                        reg = <0 0xe6c38000 0 0x1000>;
                        interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
                        };
                };
 
-               drif00: rif@e6f40000 {
-                       compatible = "renesas,r8a7795-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f40000 0 0x64>;
-                       interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 515>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x20>, <&dmac2 0x20>;
-                       dma-names = "rx", "rx";
+               pwm0: pwm@e6e30000 {
+                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
+                       reg = <0 0xe6e30000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 515>;
-                       renesas,bonding = <&drif01>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
                        status = "disabled";
                };
 
-               drif01: rif@e6f50000 {
-                       compatible = "renesas,r8a7795-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f50000 0 0x64>;
-                       interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 514>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x22>, <&dmac2 0x22>;
-                       dma-names = "rx", "rx";
+               pwm1: pwm@e6e31000 {
+                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
+                       reg = <0 0xe6e31000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 514>;
-                       renesas,bonding = <&drif00>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
                        status = "disabled";
                };
 
-               drif10: rif@e6f60000 {
-                       compatible = "renesas,r8a7795-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f60000 0 0x64>;
-                       interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 513>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x24>, <&dmac2 0x24>;
-                       dma-names = "rx", "rx";
+               pwm2: pwm@e6e32000 {
+                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
+                       reg = <0 0xe6e32000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 513>;
-                       renesas,bonding = <&drif11>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
                        status = "disabled";
                };
 
-               drif11: rif@e6f70000 {
-                       compatible = "renesas,r8a7795-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f70000 0 0x64>;
-                       interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 512>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x26>, <&dmac2 0x26>;
-                       dma-names = "rx", "rx";
+               pwm3: pwm@e6e33000 {
+                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
+                       reg = <0 0xe6e33000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 512>;
-                       renesas,bonding = <&drif10>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
                        status = "disabled";
                };
 
-               drif20: rif@e6f80000 {
-                       compatible = "renesas,r8a7795-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f80000 0 0x64>;
-                       interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 511>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x28>, <&dmac2 0x28>;
-                       dma-names = "rx", "rx";
+               pwm4: pwm@e6e34000 {
+                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
+                       reg = <0 0xe6e34000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 511>;
-                       renesas,bonding = <&drif21>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
                        status = "disabled";
                };
 
-               drif21: rif@e6f90000 {
-                       compatible = "renesas,r8a7795-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f90000 0 0x64>;
-                       interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 510>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x2a>, <&dmac2 0x2a>;
-                       dma-names = "rx", "rx";
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 510>;
-                       renesas,bonding = <&drif20>;
+               pwm5: pwm@e6e35000 {
+                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
+                       reg = <0 0xe6e35000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
                        status = "disabled";
                };
 
-               drif30: rif@e6fa0000 {
-                       compatible = "renesas,r8a7795-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6fa0000 0 0x64>;
-                       interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 509>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x2c>, <&dmac2 0x2c>;
-                       dma-names = "rx", "rx";
+               pwm6: pwm@e6e36000 {
+                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
+                       reg = <0 0xe6e36000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 509>;
-                       renesas,bonding = <&drif31>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
                        status = "disabled";
                };
 
-               drif31: rif@e6fb0000 {
-                       compatible = "renesas,r8a7795-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6fb0000 0 0x64>;
-                       interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 508>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x2e>, <&dmac2 0x2e>;
-                       dma-names = "rx", "rx";
+               scif0: serial@e6e60000 {
+                       compatible = "renesas,scif-r8a7795",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e60000 0 64>;
+                       interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 207>,
+                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x51>, <&dmac1 0x50>,
+                              <&dmac2 0x51>, <&dmac2 0x50>;
+                       dma-names = "tx", "rx", "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 508>;
-                       renesas,bonding = <&drif30>;
+                       resets = <&cpg 207>;
                        status = "disabled";
                };
 
-               hscif0: serial@e6540000 {
-                       compatible = "renesas,hscif-r8a7795",
-                                    "renesas,rcar-gen3-hscif",
-                                    "renesas,hscif";
-                       reg = <0 0xe6540000 0 96>;
-                       interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 520>,
+               scif1: serial@e6e68000 {
+                       compatible = "renesas,scif-r8a7795",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e68000 0 64>;
+                       interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 206>,
                                 <&cpg CPG_CORE R8A7795_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x31>, <&dmac1 0x30>,
-                              <&dmac2 0x31>, <&dmac2 0x30>;
+                       dmas = <&dmac1 0x53>, <&dmac1 0x52>,
+                              <&dmac2 0x53>, <&dmac2 0x52>;
                        dma-names = "tx", "rx", "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 520>;
+                       resets = <&cpg 206>;
                        status = "disabled";
                };
 
-               hscif1: serial@e6550000 {
-                       compatible = "renesas,hscif-r8a7795",
-                                    "renesas,rcar-gen3-hscif",
-                                    "renesas,hscif";
-                       reg = <0 0xe6550000 0 96>;
-                       interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 519>,
+               scif2: serial@e6e88000 {
+                       compatible = "renesas,scif-r8a7795",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e88000 0 64>;
+                       interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 310>,
                                 <&cpg CPG_CORE R8A7795_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x33>, <&dmac1 0x32>,
-                              <&dmac2 0x33>, <&dmac2 0x32>;
+                       dmas = <&dmac1 0x13>, <&dmac1 0x12>,
+                              <&dmac2 0x13>, <&dmac2 0x12>;
                        dma-names = "tx", "rx", "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 519>;
+                       resets = <&cpg 310>;
                        status = "disabled";
                };
 
-               hscif2: serial@e6560000 {
-                       compatible = "renesas,hscif-r8a7795",
-                                    "renesas,rcar-gen3-hscif",
-                                    "renesas,hscif";
-                       reg = <0 0xe6560000 0 96>;
-                       interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 518>,
+               scif3: serial@e6c50000 {
+                       compatible = "renesas,scif-r8a7795",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6c50000 0 64>;
+                       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 204>,
                                 <&cpg CPG_CORE R8A7795_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x35>, <&dmac1 0x34>,
-                              <&dmac2 0x35>, <&dmac2 0x34>;
-                       dma-names = "tx", "rx", "tx", "rx";
+                       dmas = <&dmac0 0x57>, <&dmac0 0x56>;
+                       dma-names = "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 518>;
+                       resets = <&cpg 204>;
                        status = "disabled";
                };
 
-               hscif3: serial@e66a0000 {
-                       compatible = "renesas,hscif-r8a7795",
-                                    "renesas,rcar-gen3-hscif",
-                                    "renesas,hscif";
-                       reg = <0 0xe66a0000 0 96>;
-                       interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 517>,
+               scif4: serial@e6c40000 {
+                       compatible = "renesas,scif-r8a7795",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6c40000 0 64>;
+                       interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 203>,
                                 <&cpg CPG_CORE R8A7795_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac0 0x37>, <&dmac0 0x36>;
+                       dmas = <&dmac0 0x59>, <&dmac0 0x58>;
                        dma-names = "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 517>;
+                       resets = <&cpg 203>;
                        status = "disabled";
                };
 
-               hscif4: serial@e66b0000 {
-                       compatible = "renesas,hscif-r8a7795",
-                                    "renesas,rcar-gen3-hscif",
-                                    "renesas,hscif";
-                       reg = <0 0xe66b0000 0 96>;
-                       interrupts = <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 516>,
+               scif5: serial@e6f30000 {
+                       compatible = "renesas,scif-r8a7795",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6f30000 0 64>;
+                       interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 202>,
                                 <&cpg CPG_CORE R8A7795_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac0 0x39>, <&dmac0 0x38>;
-                       dma-names = "tx", "rx";
+                       dmas = <&dmac1 0x5b>, <&dmac1 0x5a>,
+                              <&dmac2 0x5b>, <&dmac2 0x5a>;
+                       dma-names = "tx", "rx", "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 516>;
+                       resets = <&cpg 202>;
                        status = "disabled";
                };
 
                        status = "disabled";
                };
 
-               scif0: serial@e6e60000 {
-                       compatible = "renesas,scif-r8a7795",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6e60000 0 64>;
-                       interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 207>,
-                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x51>, <&dmac1 0x50>,
-                              <&dmac2 0x51>, <&dmac2 0x50>;
-                       dma-names = "tx", "rx", "tx", "rx";
+               vin0: video@e6ef0000 {
+                       compatible = "renesas,vin-r8a7795";
+                       reg = <0 0xe6ef0000 0 0x1000>;
+                       interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 811>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 207>;
+                       resets = <&cpg 811>;
+                       renesas,id = <0>;
                        status = "disabled";
-               };
 
-               scif1: serial@e6e68000 {
-                       compatible = "renesas,scif-r8a7795",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6e68000 0 64>;
-                       interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 206>,
-                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x53>, <&dmac1 0x52>,
-                              <&dmac2 0x53>, <&dmac2 0x52>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 206>;
-                       status = "disabled";
-               };
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
 
-               scif2: serial@e6e88000 {
-                       compatible = "renesas,scif-r8a7795",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6e88000 0 64>;
-                       interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 310>,
-                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x13>, <&dmac1 0x12>,
-                              <&dmac2 0x13>, <&dmac2 0x12>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 310>;
-                       status = "disabled";
-               };
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
 
-               scif3: serial@e6c50000 {
-                       compatible = "renesas,scif-r8a7795",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6c50000 0 64>;
-                       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 204>,
-                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac0 0x57>, <&dmac0 0x56>;
-                       dma-names = "tx", "rx";
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 204>;
-                       status = "disabled";
-               };
+                                       reg = <1>;
 
-               scif4: serial@e6c40000 {
-                       compatible = "renesas,scif-r8a7795",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6c40000 0 64>;
-                       interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 203>,
-                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac0 0x59>, <&dmac0 0x58>;
-                       dma-names = "tx", "rx";
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 203>;
-                       status = "disabled";
+                                       vin0csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin0>;
+                                       };
+                                       vin0csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin0>;
+                                       };
+                               };
+                       };
                };
 
-               scif5: serial@e6f30000 {
-                       compatible = "renesas,scif-r8a7795",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6f30000 0 64>;
-                       interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 202>,
-                                <&cpg CPG_CORE R8A7795_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x5b>, <&dmac1 0x5a>,
-                              <&dmac2 0x5b>, <&dmac2 0x5a>;
-                       dma-names = "tx", "rx", "tx", "rx";
+               vin1: video@e6ef1000 {
+                       compatible = "renesas,vin-r8a7795";
+                       reg = <0 0xe6ef1000 0 0x1000>;
+                       interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 810>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 202>;
+                       resets = <&cpg 810>;
+                       renesas,id = <1>;
                        status = "disabled";
-               };
 
-               i2c_dvfs: i2c@e60b0000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,iic-r8a7795",
-                                    "renesas,rcar-gen3-iic",
-                                    "renesas,rmobile-iic";
-                       reg = <0 0xe60b0000 0 0x425>;
-                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 926>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 926>;
-                       dmas = <&dmac0 0x11>, <&dmac0 0x10>;
-                       dma-names = "tx", "rx";
-                       status = "disabled";
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin1csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin1>;
+                                       };
+                                       vin1csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin1>;
+                                       };
+                               };
+                       };
                };
 
-               i2c0: i2c@e6500000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a7795",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe6500000 0 0x40>;
-                       interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 931>;
+               vin2: video@e6ef2000 {
+                       compatible = "renesas,vin-r8a7795";
+                       reg = <0 0xe6ef2000 0 0x1000>;
+                       interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 809>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 931>;
-                       dmas = <&dmac1 0x91>, <&dmac1 0x90>,
-                              <&dmac2 0x91>, <&dmac2 0x90>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       i2c-scl-internal-delay-ns = <110>;
+                       resets = <&cpg 809>;
+                       renesas,id = <2>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin2csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin2>;
+                                       };
+                                       vin2csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin2>;
+                                       };
+                               };
+                       };
                };
 
-               i2c1: i2c@e6508000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a7795",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe6508000 0 0x40>;
-                       interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 930>;
+               vin3: video@e6ef3000 {
+                       compatible = "renesas,vin-r8a7795";
+                       reg = <0 0xe6ef3000 0 0x1000>;
+                       interrupts = <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 808>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 930>;
-                       dmas = <&dmac1 0x93>, <&dmac1 0x92>,
-                              <&dmac2 0x93>, <&dmac2 0x92>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       i2c-scl-internal-delay-ns = <6>;
+                       resets = <&cpg 808>;
+                       renesas,id = <3>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin3csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin3>;
+                                       };
+                                       vin3csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin3>;
+                                       };
+                               };
+                       };
                };
 
-               i2c2: i2c@e6510000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a7795",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe6510000 0 0x40>;
-                       interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 929>;
+               vin4: video@e6ef4000 {
+                       compatible = "renesas,vin-r8a7795";
+                       reg = <0 0xe6ef4000 0 0x1000>;
+                       interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 807>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 929>;
-                       dmas = <&dmac1 0x95>, <&dmac1 0x94>,
-                              <&dmac2 0x95>, <&dmac2 0x94>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       i2c-scl-internal-delay-ns = <6>;
+                       resets = <&cpg 807>;
+                       renesas,id = <4>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin4csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin4>;
+                                       };
+                                       vin4csi41: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint= <&csi41vin4>;
+                                       };
+                               };
+                       };
                };
 
-               i2c3: i2c@e66d0000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a7795",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe66d0000 0 0x40>;
-                       interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 928>;
+               vin5: video@e6ef5000 {
+                       compatible = "renesas,vin-r8a7795";
+                       reg = <0 0xe6ef5000 0 0x1000>;
+                       interrupts = <GIC_SPI 175 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 806>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 928>;
-                       dmas = <&dmac0 0x97>, <&dmac0 0x96>;
-                       dma-names = "tx", "rx";
-                       i2c-scl-internal-delay-ns = <110>;
+                       resets = <&cpg 806>;
+                       renesas,id = <5>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin5csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin5>;
+                                       };
+                                       vin5csi41: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint= <&csi41vin5>;
+                                       };
+                               };
+                       };
                };
 
-               i2c4: i2c@e66d8000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a7795",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe66d8000 0 0x40>;
-                       interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 927>;
+               vin6: video@e6ef6000 {
+                       compatible = "renesas,vin-r8a7795";
+                       reg = <0 0xe6ef6000 0 0x1000>;
+                       interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 805>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 927>;
-                       dmas = <&dmac0 0x99>, <&dmac0 0x98>;
-                       dma-names = "tx", "rx";
-                       i2c-scl-internal-delay-ns = <110>;
+                       resets = <&cpg 805>;
+                       renesas,id = <6>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin6csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin6>;
+                                       };
+                                       vin6csi41: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint= <&csi41vin6>;
+                                       };
+                               };
+                       };
                };
 
-               i2c5: i2c@e66e0000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a7795",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe66e0000 0 0x40>;
-                       interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 919>;
+               vin7: video@e6ef7000 {
+                       compatible = "renesas,vin-r8a7795";
+                       reg = <0 0xe6ef7000 0 0x1000>;
+                       interrupts = <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 804>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 919>;
-                       dmas = <&dmac0 0x9b>, <&dmac0 0x9a>;
-                       dma-names = "tx", "rx";
-                       i2c-scl-internal-delay-ns = <110>;
+                       resets = <&cpg 804>;
+                       renesas,id = <7>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin7csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin7>;
+                                       };
+                                       vin7csi41: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint= <&csi41vin7>;
+                                       };
+                               };
+                       };
                };
 
-               i2c6: i2c@e66e8000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a7795",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe66e8000 0 0x40>;
-                       interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 918>;
+               drif00: rif@e6f40000 {
+                       compatible = "renesas,r8a7795-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f40000 0 0x64>;
+                       interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 515>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x20>, <&dmac2 0x20>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 918>;
-                       dmas = <&dmac0 0x9d>, <&dmac0 0x9c>;
-                       dma-names = "tx", "rx";
-                       i2c-scl-internal-delay-ns = <6>;
+                       resets = <&cpg 515>;
+                       renesas,bonding = <&drif01>;
                        status = "disabled";
                };
 
-               pwm0: pwm@e6e30000 {
-                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
-                       reg = <0 0xe6e30000 0 0x8>;
-                       clocks = <&cpg CPG_MOD 523>;
+               drif01: rif@e6f50000 {
+                       compatible = "renesas,r8a7795-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f50000 0 0x64>;
+                       interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 514>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x22>, <&dmac2 0x22>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 523>;
-                       #pwm-cells = <2>;
+                       resets = <&cpg 514>;
+                       renesas,bonding = <&drif00>;
                        status = "disabled";
                };
 
-               pwm1: pwm@e6e31000 {
-                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
-                       reg = <0 0xe6e31000 0 0x8>;
-                       clocks = <&cpg CPG_MOD 523>;
+               drif10: rif@e6f60000 {
+                       compatible = "renesas,r8a7795-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f60000 0 0x64>;
+                       interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 513>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x24>, <&dmac2 0x24>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 523>;
-                       #pwm-cells = <2>;
+                       resets = <&cpg 513>;
+                       renesas,bonding = <&drif11>;
                        status = "disabled";
                };
-
-               pwm2: pwm@e6e32000 {
-                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
-                       reg = <0 0xe6e32000 0 0x8>;
-                       clocks = <&cpg CPG_MOD 523>;
+
+               drif11: rif@e6f70000 {
+                       compatible = "renesas,r8a7795-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f70000 0 0x64>;
+                       interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 512>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x26>, <&dmac2 0x26>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 523>;
-                       #pwm-cells = <2>;
+                       resets = <&cpg 512>;
+                       renesas,bonding = <&drif10>;
                        status = "disabled";
                };
 
-               pwm3: pwm@e6e33000 {
-                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
-                       reg = <0 0xe6e33000 0 0x8>;
-                       clocks = <&cpg CPG_MOD 523>;
+               drif20: rif@e6f80000 {
+                       compatible = "renesas,r8a7795-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f80000 0 0x64>;
+                       interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 511>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x28>, <&dmac2 0x28>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 523>;
-                       #pwm-cells = <2>;
+                       resets = <&cpg 511>;
+                       renesas,bonding = <&drif21>;
                        status = "disabled";
                };
 
-               pwm4: pwm@e6e34000 {
-                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
-                       reg = <0 0xe6e34000 0 0x8>;
-                       clocks = <&cpg CPG_MOD 523>;
+               drif21: rif@e6f90000 {
+                       compatible = "renesas,r8a7795-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f90000 0 0x64>;
+                       interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 510>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x2a>, <&dmac2 0x2a>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 523>;
-                       #pwm-cells = <2>;
+                       resets = <&cpg 510>;
+                       renesas,bonding = <&drif20>;
                        status = "disabled";
                };
 
-               pwm5: pwm@e6e35000 {
-                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
-                       reg = <0 0xe6e35000 0 0x8>;
-                       clocks = <&cpg CPG_MOD 523>;
+               drif30: rif@e6fa0000 {
+                       compatible = "renesas,r8a7795-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6fa0000 0 0x64>;
+                       interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 509>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x2c>, <&dmac2 0x2c>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 523>;
-                       #pwm-cells = <2>;
+                       resets = <&cpg 509>;
+                       renesas,bonding = <&drif31>;
                        status = "disabled";
                };
 
-               pwm6: pwm@e6e36000 {
-                       compatible = "renesas,pwm-r8a7795", "renesas,pwm-rcar";
-                       reg = <0 0xe6e36000 0 0x8>;
-                       clocks = <&cpg CPG_MOD 523>;
+               drif31: rif@e6fb0000 {
+                       compatible = "renesas,r8a7795-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6fb0000 0 0x64>;
+                       interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 508>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x2e>, <&dmac2 0x2e>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 523>;
-                       #pwm-cells = <2>;
+                       resets = <&cpg 508>;
+                       renesas,bonding = <&drif30>;
                        status = "disabled";
                };
 
                                        dma-names = "rx", "tx", "rxu", "txu";
                                };
                        };
-               };
-
-               sata: sata@ee300000 {
-                       compatible = "renesas,sata-r8a7795",
-                                    "renesas,rcar-gen3-sata";
-                       reg = <0 0xee300000 0 0x200000>;
-                       interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 815>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 815>;
-                       status = "disabled";
-                       iommus = <&ipmmu_hc 2>;
-               };
-
-               usb3_phy0: usb-phy@e65ee000 {
-                       compatible = "renesas,r8a7795-usb3-phy",
-                                    "renesas,rcar-gen3-usb3-phy";
-                       reg = <0 0xe65ee000 0 0x90>;
-                       clocks = <&cpg CPG_MOD 328>, <&usb3s0_clk>,
-                                <&usb_extal_clk>;
-                       clock-names = "usb3-if", "usb3s_clk", "usb_extal";
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 328>;
-                       #phy-cells = <0>;
-                       status = "disabled";
-               };
-
-               xhci0: usb@ee000000 {
-                       compatible = "renesas,xhci-r8a7795", "renesas,rcar-gen3-xhci";
-                       reg = <0 0xee000000 0 0xc00>;
-                       interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 328>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 328>;
-                       status = "disabled";
-               };
-
-               usb3_peri0: usb@ee020000 {
-                       compatible = "renesas,r8a7795-usb3-peri",
-                                    "renesas,rcar-gen3-usb3-peri";
-                       reg = <0 0xee020000 0 0x400>;
-                       interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 328>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 328>;
-                       status = "disabled";
-               };
-
-               usb_dmac0: dma-controller@e65a0000 {
-                       compatible = "renesas,r8a7795-usb-dmac",
-                                    "renesas,usb-dmac";
-                       reg = <0 0xe65a0000 0 0x100>;
-                       interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "ch0", "ch1";
-                       clocks = <&cpg CPG_MOD 330>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 330>;
-                       #dma-cells = <1>;
-                       dma-channels = <2>;
-               };
-
-               usb_dmac1: dma-controller@e65b0000 {
-                       compatible = "renesas,r8a7795-usb-dmac",
-                                    "renesas,usb-dmac";
-                       reg = <0 0xe65b0000 0 0x100>;
-                       interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "ch0", "ch1";
-                       clocks = <&cpg CPG_MOD 331>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 331>;
-                       #dma-cells = <1>;
-                       dma-channels = <2>;
-               };
 
-               usb_dmac2: dma-controller@e6460000 {
-                       compatible = "renesas,r8a7795-usb-dmac",
-                                    "renesas,usb-dmac";
-                       reg = <0 0xe6460000 0 0x100>;
-                       interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "ch0", "ch1";
-                       clocks = <&cpg CPG_MOD 326>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 326>;
-                       #dma-cells = <1>;
-                       dma-channels = <2>;
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               port@0 {
+                                       reg = <0>;
+                               };
+                               port@1 {
+                                       reg = <1>;
+                               };
+                               port@2 {
+                                       reg = <2>;
+                               };
+                       };
                };
 
-               usb_dmac3: dma-controller@e6470000 {
-                       compatible = "renesas,r8a7795-usb-dmac",
-                                    "renesas,usb-dmac";
-                       reg = <0 0xe6470000 0 0x100>;
-                       interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "ch0", "ch1";
-                       clocks = <&cpg CPG_MOD 329>;
+               audma0: dma-controller@ec700000 {
+                       compatible = "renesas,dmac-r8a7795",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xec700000 0 0x10000>;
+                       interrupts = <GIC_SPI 350 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 320 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 321 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 322 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 323 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 324 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 325 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 327 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 328 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 329 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 330 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 331 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 332 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 333 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 334 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 335 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                       "ch0", "ch1", "ch2", "ch3",
+                                       "ch4", "ch5", "ch6", "ch7",
+                                       "ch8", "ch9", "ch10", "ch11",
+                                       "ch12", "ch13", "ch14", "ch15";
+                       clocks = <&cpg CPG_MOD 502>;
+                       clock-names = "fck";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 329>;
+                       resets = <&cpg 502>;
                        #dma-cells = <1>;
-                       dma-channels = <2>;
-               };
-
-               rpc: rpc@0xee200000 {
-                       compatible = "renesas,rpc-r8a7795", "renesas,rpc";
-                       reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
-                       clocks = <&cpg CPG_MOD 917>;
-                       bank-width = <2>;
-                       status = "disabled";
-               };
-
-               sdhi0: sd@ee100000 {
-                       compatible = "renesas,sdhi-r8a7795",
-                                    "renesas,rcar-gen3-sdhi";
-                       reg = <0 0xee100000 0 0x2000>;
-                       interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 314>;
-                       max-frequency = <200000000>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 314>;
-                       status = "disabled";
+                       dma-channels = <16>;
+                       iommus = <&ipmmu_mp0 0>, <&ipmmu_mp0 1>,
+                              <&ipmmu_mp0 2>, <&ipmmu_mp0 3>,
+                              <&ipmmu_mp0 4>, <&ipmmu_mp0 5>,
+                              <&ipmmu_mp0 6>, <&ipmmu_mp0 7>,
+                              <&ipmmu_mp0 8>, <&ipmmu_mp0 9>,
+                              <&ipmmu_mp0 10>, <&ipmmu_mp0 11>,
+                              <&ipmmu_mp0 12>, <&ipmmu_mp0 13>,
+                              <&ipmmu_mp0 14>, <&ipmmu_mp0 15>;
                };
 
-               sdhi1: sd@ee120000 {
-                       compatible = "renesas,sdhi-r8a7795",
-                                    "renesas,rcar-gen3-sdhi";
-                       reg = <0 0xee120000 0 0x2000>;
-                       interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 313>;
-                       max-frequency = <200000000>;
+               audma1: dma-controller@ec720000 {
+                       compatible = "renesas,dmac-r8a7795",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xec720000 0 0x10000>;
+                       interrupts = <GIC_SPI 351 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 336 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 337 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 338 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 339 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 340 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 341 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 342 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 343 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 344 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 345 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 346 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 347 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 348 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 349 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 382 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 383 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                       "ch0", "ch1", "ch2", "ch3",
+                                       "ch4", "ch5", "ch6", "ch7",
+                                       "ch8", "ch9", "ch10", "ch11",
+                                       "ch12", "ch13", "ch14", "ch15";
+                       clocks = <&cpg CPG_MOD 501>;
+                       clock-names = "fck";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 313>;
-                       status = "disabled";
+                       resets = <&cpg 501>;
+                       #dma-cells = <1>;
+                       dma-channels = <16>;
+                       iommus = <&ipmmu_mp0 16>, <&ipmmu_mp0 17>,
+                              <&ipmmu_mp0 18>, <&ipmmu_mp0 19>,
+                              <&ipmmu_mp0 20>, <&ipmmu_mp0 21>,
+                              <&ipmmu_mp0 22>, <&ipmmu_mp0 23>,
+                              <&ipmmu_mp0 24>, <&ipmmu_mp0 25>,
+                              <&ipmmu_mp0 26>, <&ipmmu_mp0 27>,
+                              <&ipmmu_mp0 28>, <&ipmmu_mp0 29>,
+                              <&ipmmu_mp0 30>, <&ipmmu_mp0 31>;
                };
 
-               sdhi2: sd@ee140000 {
-                       compatible = "renesas,sdhi-r8a7795",
-                                    "renesas,rcar-gen3-sdhi";
-                       reg = <0 0xee140000 0 0x2000>;
-                       interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 312>;
-                       max-frequency = <200000000>;
+               xhci0: usb@ee000000 {
+                       compatible = "renesas,xhci-r8a7795", "renesas,rcar-gen3-xhci";
+                       reg = <0 0xee000000 0 0xc00>;
+                       interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 328>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 312>;
+                       resets = <&cpg 328>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
-                       compatible = "renesas,sdhi-r8a7795",
-                                    "renesas,rcar-gen3-sdhi";
-                       reg = <0 0xee160000 0 0x2000>;
-                       interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 311>;
-                       max-frequency = <200000000>;
+               usb3_peri0: usb@ee020000 {
+                       compatible = "renesas,r8a7795-usb3-peri",
+                                    "renesas,rcar-gen3-usb3-peri";
+                       reg = <0 0xee020000 0 0x400>;
+                       interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 328>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 311>;
+                       resets = <&cpg 328>;
                        status = "disabled";
                };
 
-               usb2_phy0: usb-phy@ee080200 {
-                       compatible = "renesas,usb2-phy-r8a7795",
-                                    "renesas,rcar-gen3-usb2-phy";
-                       reg = <0 0xee080200 0 0x700>;
+               ohci0: usb@ee080000 {
+                       compatible = "generic-ohci";
+                       reg = <0 0xee080000 0 0x100>;
                        interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 703>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        resets = <&cpg 703>;
-                       #phy-cells = <0>;
                        status = "disabled";
                };
 
-               usb2_phy1: usb-phy@ee0a0200 {
-                       compatible = "renesas,usb2-phy-r8a7795",
-                                    "renesas,rcar-gen3-usb2-phy";
-                       reg = <0 0xee0a0200 0 0x700>;
+               ohci1: usb@ee0a0000 {
+                       compatible = "generic-ohci";
+                       reg = <0 0xee0a0000 0 0x100>;
+                       interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 702>;
+                       phys = <&usb2_phy1>;
+                       phy-names = "usb";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        resets = <&cpg 702>;
-                       #phy-cells = <0>;
                        status = "disabled";
                };
 
-               usb2_phy2: usb-phy@ee0c0200 {
-                       compatible = "renesas,usb2-phy-r8a7795",
-                                    "renesas,rcar-gen3-usb2-phy";
-                       reg = <0 0xee0c0200 0 0x700>;
+               ohci2: usb@ee0c0000 {
+                       compatible = "generic-ohci";
+                       reg = <0 0xee0c0000 0 0x100>;
+                       interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 701>;
+                       phys = <&usb2_phy2>;
+                       phy-names = "usb";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        resets = <&cpg 701>;
-                       #phy-cells = <0>;
                        status = "disabled";
                };
 
-               usb2_phy3: usb-phy@ee0e0200 {
-                       compatible = "renesas,usb2-phy-r8a7795",
-                                    "renesas,rcar-gen3-usb2-phy";
-                       reg = <0 0xee0e0200 0 0x700>;
+               ohci3: usb@ee0e0000 {
+                       compatible = "generic-ohci";
+                       reg = <0 0xee0e0000 0 0x100>;
                        interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 700>;
+                       phys = <&usb2_phy3>;
+                       phy-names = "usb";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        resets = <&cpg 700>;
-                       #phy-cells = <0>;
                        status = "disabled";
                };
 
                        status = "disabled";
                };
 
-               ohci0: usb@ee080000 {
-                       compatible = "generic-ohci";
-                       reg = <0 0xee080000 0 0x100>;
+               usb2_phy0: usb-phy@ee080200 {
+                       compatible = "renesas,usb2-phy-r8a7795",
+                                    "renesas,rcar-gen3-usb2-phy";
+                       reg = <0 0xee080200 0 0x700>;
                        interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 703>;
-                       phys = <&usb2_phy0>;
-                       phy-names = "usb";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        resets = <&cpg 703>;
+                       #phy-cells = <0>;
                        status = "disabled";
                };
 
-               ohci1: usb@ee0a0000 {
-                       compatible = "generic-ohci";
-                       reg = <0 0xee0a0000 0 0x100>;
-                       interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+               usb2_phy1: usb-phy@ee0a0200 {
+                       compatible = "renesas,usb2-phy-r8a7795",
+                                    "renesas,rcar-gen3-usb2-phy";
+                       reg = <0 0xee0a0200 0 0x700>;
                        clocks = <&cpg CPG_MOD 702>;
-                       phys = <&usb2_phy1>;
-                       phy-names = "usb";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        resets = <&cpg 702>;
+                       #phy-cells = <0>;
                        status = "disabled";
                };
 
-               ohci2: usb@ee0c0000 {
-                       compatible = "generic-ohci";
-                       reg = <0 0xee0c0000 0 0x100>;
-                       interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
+               usb2_phy2: usb-phy@ee0c0200 {
+                       compatible = "renesas,usb2-phy-r8a7795",
+                                    "renesas,rcar-gen3-usb2-phy";
+                       reg = <0 0xee0c0200 0 0x700>;
                        clocks = <&cpg CPG_MOD 701>;
-                       phys = <&usb2_phy2>;
-                       phy-names = "usb";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        resets = <&cpg 701>;
+                       #phy-cells = <0>;
                        status = "disabled";
                };
 
-               ohci3: usb@ee0e0000 {
-                       compatible = "generic-ohci";
-                       reg = <0 0xee0e0000 0 0x100>;
+               usb2_phy3: usb-phy@ee0e0200 {
+                       compatible = "renesas,usb2-phy-r8a7795",
+                                    "renesas,rcar-gen3-usb2-phy";
+                       reg = <0 0xee0e0200 0 0x700>;
                        interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 700>;
-                       phys = <&usb2_phy3>;
-                       phy-names = "usb";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        resets = <&cpg 700>;
+                       #phy-cells = <0>;
                        status = "disabled";
                };
 
-               hsusb: usb@e6590000 {
-                       compatible = "renesas,usbhs-r8a7795",
-                                    "renesas,rcar-gen3-usbhs";
-                       reg = <0 0xe6590000 0 0x100>;
-                       interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 704>;
-                       dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
-                              <&usb_dmac1 0>, <&usb_dmac1 1>;
-                       dma-names = "ch0", "ch1", "ch2", "ch3";
-                       renesas,buswait = <11>;
-                       phys = <&usb2_phy0>;
-                       phy-names = "usb";
+               sdhi0: sd@ee100000 {
+                       compatible = "renesas,sdhi-r8a7795",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee100000 0 0x2000>;
+                       interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 314>;
+                       max-frequency = <200000000>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 704>;
+                       resets = <&cpg 314>;
                        status = "disabled";
                };
 
-               hsusb3: usb@e659c000 {
-                       compatible = "renesas,usbhs-r8a7795",
-                                    "renesas,rcar-gen3-usbhs";
-                       reg = <0 0xe659c000 0 0x100>;
-                       interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 705>;
-                       dmas = <&usb_dmac2 0>, <&usb_dmac2 1>,
-                              <&usb_dmac3 0>, <&usb_dmac3 1>;
-                       dma-names = "ch0", "ch1", "ch2", "ch3";
-                       renesas,buswait = <11>;
-                       phys = <&usb2_phy3>;
-                       phy-names = "usb";
+               sdhi1: sd@ee120000 {
+                       compatible = "renesas,sdhi-r8a7795",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee120000 0 0x2000>;
+                       interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 313>;
+                       max-frequency = <200000000>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 705>;
+                       resets = <&cpg 313>;
                        status = "disabled";
                };
 
+               sdhi2: sd@ee140000 {
+                       compatible = "renesas,sdhi-r8a7795",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee140000 0 0x2000>;
+                       interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 312>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 312>;
+                       status = "disabled";
+               };
+
+               sdhi3: sd@ee160000 {
+                       compatible = "renesas,sdhi-r8a7795",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee160000 0 0x2000>;
+                       interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 311>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 311>;
+                       status = "disabled";
+               };
+
+               sata: sata@ee300000 {
+                       compatible = "renesas,sata-r8a7795",
+                                    "renesas,rcar-gen3-sata";
+                       reg = <0 0xee300000 0 0x200000>;
+                       interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 815>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 815>;
+                       status = "disabled";
+                       iommus = <&ipmmu_hc 2>;
+               };
+
+               gic: interrupt-controller@f1010000 {
+                       compatible = "arm,gic-400";
+                       #interrupt-cells = <3>;
+                       #address-cells = <0>;
+                       interrupt-controller;
+                       reg = <0x0 0xf1010000 0 0x1000>,
+                             <0x0 0xf1020000 0 0x20000>,
+                             <0x0 0xf1040000 0 0x20000>,
+                             <0x0 0xf1060000 0 0x20000>;
+                       interrupts = <GIC_PPI 9
+                                       (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_HIGH)>;
+                       clocks = <&cpg CPG_MOD 408>;
+                       clock-names = "clk";
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 408>;
+               };
+
                pciec0: pcie@fe000000 {
                        compatible = "renesas,pcie-r8a7795",
                                     "renesas,pcie-rcar-gen3";
                        reg = <0 0xfe890000 0 0x2000>;
                        interrupts = <GIC_SPI 195 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 820>;
-                       power-domains = <&sysc R8A7795_PD_A3VC>;
-                       resets = <&cpg 820>;
-               };
-
-               vspbc: vsp@fe920000 {
-                       compatible = "renesas,vsp2";
-                       reg = <0 0xfe920000 0 0x8000>;
-                       interrupts = <GIC_SPI 465 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 624>;
-                       power-domains = <&sysc R8A7795_PD_A3VP>;
-                       resets = <&cpg 624>;
+                       power-domains = <&sysc R8A7795_PD_A3VC>;
+                       resets = <&cpg 820>;
+               };
 
-                       renesas,fcp = <&fcpvb1>;
+               fdp1@fe940000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe940000 0 0x2400>;
+                       interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 119>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+                       resets = <&cpg 119>;
+                       renesas,fcp = <&fcpf0>;
                };
 
-               fcpvb1: fcp@fe92f000 {
-                       compatible = "renesas,fcpv";
-                       reg = <0 0xfe92f000 0 0x200>;
-                       clocks = <&cpg CPG_MOD 606>;
+               fdp1@fe944000 {
+                       compatible = "renesas,fdp1";
+                       reg = <0 0xfe944000 0 0x2400>;
+                       interrupts = <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 118>;
                        power-domains = <&sysc R8A7795_PD_A3VP>;
-                       resets = <&cpg 606>;
-                       iommus = <&ipmmu_vp1 7>;
+                       resets = <&cpg 118>;
+                       renesas,fcp = <&fcpf1>;
                };
 
                fcpf0: fcp@fe950000 {
                        iommus = <&ipmmu_vp1 1>;
                };
 
-               vspbd: vsp@fe960000 {
-                       compatible = "renesas,vsp2";
-                       reg = <0 0xfe960000 0 0x8000>;
-                       interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 626>;
-                       power-domains = <&sysc R8A7795_PD_A3VP>;
-                       resets = <&cpg 626>;
-
-                       renesas,fcp = <&fcpvb0>;
-               };
-
                fcpvb0: fcp@fe96f000 {
                        compatible = "renesas,fcpv";
                        reg = <0 0xfe96f000 0 0x200>;
                        iommus = <&ipmmu_vp0 5>;
                };
 
-               vspi0: vsp@fe9a0000 {
-                       compatible = "renesas,vsp2";
-                       reg = <0 0xfe9a0000 0 0x8000>;
-                       interrupts = <GIC_SPI 444 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 631>;
+               fcpvb1: fcp@fe92f000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfe92f000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 606>;
                        power-domains = <&sysc R8A7795_PD_A3VP>;
-                       resets = <&cpg 631>;
-
-                       renesas,fcp = <&fcpvi0>;
+                       resets = <&cpg 606>;
+                       iommus = <&ipmmu_vp1 7>;
                };
 
                fcpvi0: fcp@fe9af000 {
                        iommus = <&ipmmu_vp0 8>;
                };
 
-               vspi1: vsp@fe9b0000 {
-                       compatible = "renesas,vsp2";
-                       reg = <0 0xfe9b0000 0 0x8000>;
-                       interrupts = <GIC_SPI 445 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 630>;
-                       power-domains = <&sysc R8A7795_PD_A3VP>;
-                       resets = <&cpg 630>;
-
-                       renesas,fcp = <&fcpvi1>;
-               };
-
                fcpvi1: fcp@fe9bf000 {
                        compatible = "renesas,fcpv";
                        reg = <0 0xfe9bf000 0 0x200>;
                        iommus = <&ipmmu_vp1 9>;
                };
 
+               fcpvd0: fcp@fea27000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfea27000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 603>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 603>;
+                       iommus = <&ipmmu_vi0 8>;
+               };
+
+               fcpvd1: fcp@fea2f000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfea2f000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 602>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 602>;
+                       iommus = <&ipmmu_vi0 9>;
+               };
+
+               fcpvd2: fcp@fea37000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfea37000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 601>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 601>;
+                       iommus = <&ipmmu_vi1 10>;
+               };
+
+               vspbd: vsp@fe960000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe960000 0 0x8000>;
+                       interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 626>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+                       resets = <&cpg 626>;
+
+                       renesas,fcp = <&fcpvb0>;
+               };
+
+               vspbc: vsp@fe920000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe920000 0 0x8000>;
+                       interrupts = <GIC_SPI 465 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 624>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+                       resets = <&cpg 624>;
+
+                       renesas,fcp = <&fcpvb1>;
+               };
+
                vspd0: vsp@fea20000 {
                        compatible = "renesas,vsp2";
-                       reg = <0 0xfea20000 0 0x8000>;
+                       reg = <0 0xfea20000 0 0x5000>;
                        interrupts = <GIC_SPI 466 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 623>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        renesas,fcp = <&fcpvd0>;
                };
 
-               fcpvd0: fcp@fea27000 {
-                       compatible = "renesas,fcpv";
-                       reg = <0 0xfea27000 0 0x200>;
-                       clocks = <&cpg CPG_MOD 603>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 603>;
-                       iommus = <&ipmmu_vi0 8>;
-               };
-
                vspd1: vsp@fea28000 {
                        compatible = "renesas,vsp2";
-                       reg = <0 0xfea28000 0 0x8000>;
+                       reg = <0 0xfea28000 0 0x5000>;
                        interrupts = <GIC_SPI 467 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 622>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        renesas,fcp = <&fcpvd1>;
                };
 
-               fcpvd1: fcp@fea2f000 {
-                       compatible = "renesas,fcpv";
-                       reg = <0 0xfea2f000 0 0x200>;
-                       clocks = <&cpg CPG_MOD 602>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 602>;
-                       iommus = <&ipmmu_vi0 9>;
-               };
-
                vspd2: vsp@fea30000 {
                        compatible = "renesas,vsp2";
-                       reg = <0 0xfea30000 0 0x8000>;
+                       reg = <0 0xfea30000 0 0x5000>;
                        interrupts = <GIC_SPI 468 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 621>;
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        renesas,fcp = <&fcpvd2>;
                };
 
-               fcpvd2: fcp@fea37000 {
-                       compatible = "renesas,fcpv";
-                       reg = <0 0xfea37000 0 0x200>;
-                       clocks = <&cpg CPG_MOD 601>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 601>;
-                       iommus = <&ipmmu_vi1 10>;
+               vspi0: vsp@fe9a0000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe9a0000 0 0x8000>;
+                       interrupts = <GIC_SPI 444 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 631>;
+                       power-domains = <&sysc R8A7795_PD_A3VP>;
+                       resets = <&cpg 631>;
+
+                       renesas,fcp = <&fcpvi0>;
                };
 
-               fdp1@fe940000 {
-                       compatible = "renesas,fdp1";
-                       reg = <0 0xfe940000 0 0x2400>;
-                       interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 119>;
+               vspi1: vsp@fe9b0000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe9b0000 0 0x8000>;
+                       interrupts = <GIC_SPI 445 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 630>;
                        power-domains = <&sysc R8A7795_PD_A3VP>;
-                       resets = <&cpg 119>;
-                       renesas,fcp = <&fcpf0>;
+                       resets = <&cpg 630>;
+
+                       renesas,fcp = <&fcpvi1>;
                };
 
-               fdp1@fe944000 {
-                       compatible = "renesas,fdp1";
-                       reg = <0 0xfe944000 0 0x2400>;
-                       interrupts = <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 118>;
-                       power-domains = <&sysc R8A7795_PD_A3VP>;
-                       resets = <&cpg 118>;
-                       renesas,fcp = <&fcpf1>;
+               csi20: csi2@fea80000 {
+                       compatible = "renesas,r8a7795-csi2";
+                       reg = <0 0xfea80000 0 0x10000>;
+                       interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 714>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 714>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       csi20vin0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&vin0csi20>;
+                                       };
+                                       csi20vin1: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&vin1csi20>;
+                                       };
+                                       csi20vin2: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&vin2csi20>;
+                                       };
+                                       csi20vin3: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint = <&vin3csi20>;
+                                       };
+                                       csi20vin4: endpoint@4 {
+                                               reg = <4>;
+                                               remote-endpoint = <&vin4csi20>;
+                                       };
+                                       csi20vin5: endpoint@5 {
+                                               reg = <5>;
+                                               remote-endpoint = <&vin5csi20>;
+                                       };
+                                       csi20vin6: endpoint@6 {
+                                               reg = <6>;
+                                               remote-endpoint = <&vin6csi20>;
+                                       };
+                                       csi20vin7: endpoint@7 {
+                                               reg = <7>;
+                                               remote-endpoint = <&vin7csi20>;
+                                       };
+                               };
+                       };
+               };
+
+               csi40: csi2@feaa0000 {
+                       compatible = "renesas,r8a7795-csi2";
+                       reg = <0 0xfeaa0000 0 0x10000>;
+                       interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 716>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 716>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       csi40vin0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&vin0csi40>;
+                                       };
+                                       csi40vin1: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&vin1csi40>;
+                                       };
+                                       csi40vin2: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&vin2csi40>;
+                                       };
+                                       csi40vin3: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint = <&vin3csi40>;
+                                       };
+                               };
+                       };
+               };
+
+               csi41: csi2@feab0000 {
+                       compatible = "renesas,r8a7795-csi2";
+                       reg = <0 0xfeab0000 0 0x10000>;
+                       interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 715>;
+                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
+                       resets = <&cpg 715>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       csi41vin4: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&vin4csi41>;
+                                       };
+                                       csi41vin5: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&vin5csi41>;
+                                       };
+                                       csi41vin6: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&vin6csi41>;
+                                       };
+                                       csi41vin7: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint = <&vin7csi41>;
+                                       };
+                               };
+                       };
                };
 
                hdmi0: hdmi@fead0000 {
                                port@1 {
                                        reg = <1>;
                                };
+                               port@2 {
+                                       /* HDMI sound */
+                                       reg = <2>;
+                               };
                        };
                };
 
                                port@1 {
                                        reg = <1>;
                                };
+                               port@2 {
+                                       /* HDMI sound */
+                                       reg = <2>;
+                               };
                        };
                };
 
                        };
                };
 
-               tsc: thermal@e6198000 {
-                       compatible = "renesas,r8a7795-thermal";
-                       reg = <0 0xe6198000 0 0x100>,
-                             <0 0xe61a0000 0 0x100>,
-                             <0 0xe61a8000 0 0x100>;
-                       interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 522>;
-                       power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
-                       resets = <&cpg 522>;
-                       #thermal-sensor-cells = <1>;
-                       status = "okay";
+               prr: chipid@fff00044 {
+                       compatible = "renesas,prr";
+                       reg = <0 0xfff00044 0 4>;
                };
        };
 
-       timer {
-               compatible = "arm,armv8-timer";
-               interrupts-extended = <&gic GIC_PPI 13
-                                      (GIC_CPU_MASK_SIMPLE(8) |
-                                      IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 14
-                                      (GIC_CPU_MASK_SIMPLE(8) |
-                                      IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 11
-                                      (GIC_CPU_MASK_SIMPLE(8) |
-                                      IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 10
-                                      (GIC_CPU_MASK_SIMPLE(8) |
-                                      IRQ_TYPE_LEVEL_LOW)>;
-       };
-
        thermal-zones {
                sensor_thermal1: sensor-thermal1 {
                        polling-delay-passive = <250>;
                        trips {
                                sensor1_passive: sensor1-passive {
                                        temperature = <95000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "passive";
                                };
                                sensor1_crit: sensor1-crit {
                                        temperature = <120000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "critical";
                                };
                        };
                        trips {
                                sensor2_passive: sensor2-passive {
                                        temperature = <95000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "passive";
                                };
                                sensor2_crit: sensor2-crit {
                                        temperature = <120000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "critical";
                                };
                        };
                        trips {
                                sensor3_passive: sensor3-passive {
                                        temperature = <95000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "passive";
                                };
                                sensor3_crit: sensor3-crit {
                                        temperature = <120000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "critical";
                                };
                        };
                };
        };
 
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>;
+       };
+
        /* External USB clocks - can be overridden by the board */
        usb3s0_clk: usb3s0 {
                compatible = "fixed-clock";
index a1d13cc..4e96008 100644 (file)
@@ -7,3 +7,35 @@
 
 #include "r8a7796-m3ulcb.dts"
 #include "r8a7796-u-boot.dtsi"
+
+/ {
+       cpld {
+               compatible = "renesas,ulcb-cpld";
+               status = "okay";
+               gpio-sck = <&gpio6 8 0>;
+               gpio-mosi = <&gpio6 7 0>;
+               gpio-miso = <&gpio6 10 0>;
+               gpio-sstbz = <&gpio2 3 0>;
+       };
+};
+
+&sdhi2_pins {
+       groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
+       power-source = <1800>;
+};
+
+&sdhi2_pins_uhs {
+       groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
+};
+
+&sdhi0 {
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr104;
+       max-frequency = <208000000>;
+};
+
+&sdhi2 {
+       mmc-hs400-1_8v;
+       max-frequency = <200000000>;
+};
index 7a8ad27..44b2f9f 100644 (file)
@@ -7,3 +7,31 @@
 
 #include "r8a7796-salvator-x.dts"
 #include "r8a7796-u-boot.dtsi"
+
+&sdhi2_pins {
+       groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
+       power-source = <1800>;
+};
+
+&sdhi2_pins_uhs {
+       groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
+};
+
+&sdhi0 {
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr104;
+       max-frequency = <208000000>;
+};
+
+&sdhi2 {
+       mmc-hs400-1_8v;
+       max-frequency = <200000000>;
+};
+
+&sdhi3 {
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr104;
+       max-frequency = <208000000>;
+};
index 62aa27d..052d72a 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the Salvator-X board
+ * Device Tree Source for the Salvator-X board with R-Car M3-W
  *
  * Copyright (C) 2016 Renesas Electronics Corp.
  */
                      "dclkin.0", "dclkin.1", "dclkin.2";
 };
 
+&sound_card {
+       dais = <&rsnd_port0     /* ak4613 */
+               &rsnd_port1>;   /* HDMI0  */
+};
+
 &hdmi0 {
        status = "okay";
 
                                remote-endpoint = <&hdmi0_con>;
                        };
                };
+               port@2 {
+                       reg = <2>;
+                       dw_hdmi0_snd_in: endpoint {
+                               remote-endpoint = <&rsnd_endpoint1>;
+                       };
+               };
        };
 };
 
 &hdmi0_con {
        remote-endpoint = <&rcar_dw_hdmi0_out>;
 };
+
+&rcar_sound {
+       ports {
+               /* rsnd_port0 is on salvator-common */
+               rsnd_port1: port@1 {
+                       rsnd_endpoint1: endpoint {
+                               remote-endpoint = <&dw_hdmi0_snd_in>;
+
+                               dai-format = "i2s";
+                               bitclock-master = <&rsnd_endpoint1>;
+                               frame-master = <&rsnd_endpoint1>;
+
+                               playback = <&ssi2>;
+                       };
+               };
+       };
+};
index 7cc60bc..4655259 100644 (file)
 &extalr_clk {
        u-boot,dm-pre-reloc;
 };
+
+&soc {
+       rpc: rpc@0xee200000 {
+               compatible = "renesas,rpc-r8a7796", "renesas,rpc";
+               reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
+               clocks = <&cpg CPG_MOD 917>;
+               bank-width = <2>;
+               status = "disabled";
+       };
+};
index 011f0e5..bf860f0 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Device Tree Source for the r8a7796 SoC
  *
- * Copyright (C) 2016 Renesas Electronics Corp.
+ * Copyright (C) 2016-2017 Renesas Electronics Corp.
  */
 
 #include <dt-bindings/clock/r8a7796-cpg-mssr.h>
                clock-frequency = <0>;
        };
 
+       cluster0_opp: opp_table0 {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp-500000000 {
+                       opp-hz = /bits/ 64 <500000000>;
+                       opp-microvolt = <820000>;
+                       clock-latency-ns = <300000>;
+               };
+               opp-1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-microvolt = <820000>;
+                       clock-latency-ns = <300000>;
+               };
+               opp-1500000000 {
+                       opp-hz = /bits/ 64 <1500000000>;
+                       opp-microvolt = <820000>;
+                       clock-latency-ns = <300000>;
+               };
+               opp-1600000000 {
+                       opp-hz = /bits/ 64 <1600000000>;
+                       opp-microvolt = <900000>;
+                       clock-latency-ns = <300000>;
+                       turbo-mode;
+               };
+               opp-1700000000 {
+                       opp-hz = /bits/ 64 <1700000000>;
+                       opp-microvolt = <900000>;
+                       clock-latency-ns = <300000>;
+                       turbo-mode;
+               };
+               opp-1800000000 {
+                       opp-hz = /bits/ 64 <1800000000>;
+                       opp-microvolt = <960000>;
+                       clock-latency-ns = <300000>;
+                       turbo-mode;
+               };
+       };
+
+       cluster1_opp: opp_table1 {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp-800000000 {
+                       opp-hz = /bits/ 64 <800000000>;
+                       opp-microvolt = <820000>;
+                       clock-latency-ns = <300000>;
+               };
+               opp-1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-microvolt = <820000>;
+                       clock-latency-ns = <300000>;
+               };
+               opp-1200000000 {
+                       opp-hz = /bits/ 64 <1200000000>;
+                       opp-microvolt = <820000>;
+                       clock-latency-ns = <300000>;
+               };
+               opp-1300000000 {
+                       opp-hz = /bits/ 64 <1300000000>;
+                       opp-microvolt = <820000>;
+                       clock-latency-ns = <300000>;
+                       turbo-mode;
+               };
+       };
+
        cpus {
                #address-cells = <1>;
                #size-cells = <0>;
                };
 
                a57_1: cpu@1 {
-                       compatible = "arm,cortex-a57","arm,armv8";
+                       compatible = "arm,cortex-a57", "arm,armv8";
                        reg = <0x1>;
                        device_type = "cpu";
                        power-domains = <&sysc R8A7796_PD_CA57_CPU1>;
                };
 
                a53_1: cpu@101 {
-                       compatible = "arm,cortex-a53","arm,armv8";
+                       compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0x101>;
                        device_type = "cpu";
                        power-domains = <&sysc R8A7796_PD_CA53_CPU1>;
                };
 
                a53_2: cpu@102 {
-                       compatible = "arm,cortex-a53","arm,armv8";
+                       compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0x102>;
                        device_type = "cpu";
                        power-domains = <&sysc R8A7796_PD_CA53_CPU2>;
                };
 
                a53_3: cpu@103 {
-                       compatible = "arm,cortex-a53","arm,armv8";
+                       compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0x103>;
                        device_type = "cpu";
                        power-domains = <&sysc R8A7796_PD_CA53_CPU3>;
                clock-frequency = <0>;
        };
 
-       cluster0_opp: opp_table0 {
-               compatible = "operating-points-v2";
-               opp-shared;
-
-               opp-500000000 {
-                       opp-hz = /bits/ 64 <500000000>;
-                       opp-microvolt = <820000>;
-                       clock-latency-ns = <300000>;
-               };
-               opp-1000000000 {
-                       opp-hz = /bits/ 64 <1000000000>;
-                       opp-microvolt = <820000>;
-                       clock-latency-ns = <300000>;
-               };
-               opp-1500000000 {
-                       opp-hz = /bits/ 64 <1500000000>;
-                       opp-microvolt = <820000>;
-                       clock-latency-ns = <300000>;
-               };
-               opp-1600000000 {
-                       opp-hz = /bits/ 64 <1600000000>;
-                       opp-microvolt = <900000>;
-                       clock-latency-ns = <300000>;
-                       turbo-mode;
-               };
-               opp-1700000000 {
-                       opp-hz = /bits/ 64 <1700000000>;
-                       opp-microvolt = <900000>;
-                       clock-latency-ns = <300000>;
-                       turbo-mode;
-               };
-               opp-1800000000 {
-                       opp-hz = /bits/ 64 <1800000000>;
-                       opp-microvolt = <960000>;
-                       clock-latency-ns = <300000>;
-                       turbo-mode;
-               };
-       };
-
-       cluster1_opp: opp_table1 {
-               compatible = "operating-points-v2";
-               opp-shared;
-
-               opp-800000000 {
-                       opp-hz = /bits/ 64 <800000000>;
-                       opp-microvolt = <820000>;
-                       clock-latency-ns = <300000>;
-               };
-               opp-1000000000 {
-                       opp-hz = /bits/ 64 <1000000000>;
-                       opp-microvolt = <820000>;
-                       clock-latency-ns = <300000>;
-               };
-               opp-1200000000 {
-                       opp-hz = /bits/ 64 <1200000000>;
-                       opp-microvolt = <820000>;
-                       clock-latency-ns = <300000>;
-               };
-               opp-1300000000 {
-                       opp-hz = /bits/ 64 <1300000000>;
-                       opp-microvolt = <820000>;
-                       clock-latency-ns = <300000>;
-                       turbo-mode;
-               };
-       };
-
        /* External PCIe clock - can be overridden by the board */
        pcie_bus_clk: pcie_bus {
                compatible = "fixed-clock";
                clock-frequency = <0>;
        };
 
-       pmu_a57 {
-               compatible = "arm,cortex-a57-pmu";
-               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
-                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
-               interrupt-affinity = <&a57_0>, <&a57_1>;
-       };
-
        pmu_a53 {
                compatible = "arm,cortex-a53-pmu";
                interrupts-extended = <&gic GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
                interrupt-affinity = <&a53_0>, <&a53_1>, <&a53_2>, <&a53_3>;
        };
 
+       pmu_a57 {
+               compatible = "arm,cortex-a57-pmu";
+               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&a57_0>, <&a57_1>;
+       };
+
        psci {
                compatible = "arm,psci-1.0", "arm,psci-0.2";
                method = "smc";
                clock-frequency = <0>;
        };
 
-       soc {
+       soc: soc {
                compatible = "simple-bus";
                interrupt-parent = <&gic>;
                #address-cells = <2>;
                #size-cells = <2>;
                ranges;
 
-               gic: interrupt-controller@f1010000 {
-                       compatible = "arm,gic-400";
-                       #interrupt-cells = <3>;
-                       #address-cells = <0>;
-                       interrupt-controller;
-                       reg = <0x0 0xf1010000 0 0x1000>,
-                             <0x0 0xf1020000 0 0x20000>,
-                             <0x0 0xf1040000 0 0x20000>,
-                             <0x0 0xf1060000 0 0x20000>;
-                       interrupts = <GIC_PPI 9
-                                       (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_HIGH)>;
-                       clocks = <&cpg CPG_MOD 408>;
-                       clock-names = "clk";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 408>;
-               };
-
-               wdt0: watchdog@e6020000 {
+               rwdt: watchdog@e6020000 {
                        compatible = "renesas,r8a7796-wdt",
                                     "renesas,rcar-gen3-wdt";
                        reg = <0 0xe6020000 0 0x0c>;
                        reg = <0 0xe6060000 0 0x50c>;
                };
 
-               ipmmu_vi0: mmu@febd0000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xfebd0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 9>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+               cpg: clock-controller@e6150000 {
+                       compatible = "renesas,r8a7796-cpg-mssr";
+                       reg = <0 0xe6150000 0 0x1000>;
+                       clocks = <&extal_clk>, <&extalr_clk>;
+                       clock-names = "extal", "extalr";
+                       #clock-cells = <2>;
+                       #power-domain-cells = <0>;
+                       #reset-cells = <1>;
                };
 
-               ipmmu_vc0: mmu@fe6b0000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xfe6b0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 8>;
-                       power-domains = <&sysc R8A7796_PD_A3VC>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
+               rst: reset-controller@e6160000 {
+                       compatible = "renesas,r8a7796-rst";
+                       reg = <0 0xe6160000 0 0x0200>;
                };
 
-               ipmmu_pv0: mmu@fd800000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xfd800000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 5>;
+               sysc: system-controller@e6180000 {
+                       compatible = "renesas,r8a7796-sysc";
+                       reg = <0 0xe6180000 0 0x0400>;
+                       #power-domain-cells = <1>;
+               };
+
+               tsc: thermal@e6198000 {
+                       compatible = "renesas,r8a7796-thermal";
+                       reg = <0 0xe6198000 0 0x100>,
+                             <0 0xe61a0000 0 0x100>,
+                             <0 0xe61a8000 0 0x100>;
+                       interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 522>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
+                       resets = <&cpg 522>;
+                       #thermal-sensor-cells = <1>;
+                       status = "okay";
                };
 
-               ipmmu_pv1: mmu@fd950000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xfd950000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 6>;
+               intc_ex: interrupt-controller@e61c0000 {
+                       compatible = "renesas,intc-ex-r8a7796", "renesas,irqc";
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       reg = <0 0xe61c0000 0 0x200>;
+                       interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 407>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
+                       resets = <&cpg 407>;
                };
 
-               ipmmu_ir: mmu@ff8b0000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xff8b0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 3>;
-                       power-domains = <&sysc R8A7796_PD_A3IR>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_hc: mmu@e6570000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xe6570000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 2>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_rt: mmu@ffc80000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xffc80000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 7>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_mp: mmu@ec670000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xec670000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 4>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-               };
-
-               ipmmu_ds0: mmu@e6740000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xe6740000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 0>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-               };
-
-               ipmmu_ds1: mmu@e7740000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xe7740000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 1>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-               };
-
-               ipmmu_mm: mmu@e67b0000 {
-                       compatible = "renesas,ipmmu-r8a7796";
-                       reg = <0 0xe67b0000 0 0x1000>;
-                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-               };
-
-               cpg: clock-controller@e6150000 {
-                       compatible = "renesas,r8a7796-cpg-mssr";
-                       reg = <0 0xe6150000 0 0x1000>;
-                       clocks = <&extal_clk>, <&extalr_clk>;
-                       clock-names = "extal", "extalr";
-                       #clock-cells = <2>;
-                       #power-domain-cells = <0>;
-                       #reset-cells = <1>;
-               };
-
-               rst: reset-controller@e6160000 {
-                       compatible = "renesas,r8a7796-rst";
-                       reg = <0 0xe6160000 0 0x0200>;
-               };
-
-               prr: chipid@fff00044 {
-                       compatible = "renesas,prr";
-                       reg = <0 0xfff00044 0 4>;
-               };
-
-               sysc: system-controller@e6180000 {
-                       compatible = "renesas,r8a7796-sysc";
-                       reg = <0 0xe6180000 0 0x0400>;
-                       #power-domain-cells = <1>;
-               };
-
-               intc_ex: interrupt-controller@e61c0000 {
-                       compatible = "renesas,intc-ex-r8a7796", "renesas,irqc";
-                       #interrupt-cells = <2>;
-                       interrupt-controller;
-                       reg = <0 0xe61c0000 0 0x200>;
-                       interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 407>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 407>;
-               };
-
-               i2c_dvfs: i2c@e60b0000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,iic-r8a7796",
-                                    "renesas,rcar-gen3-iic",
-                                    "renesas,rmobile-iic";
-                       reg = <0 0xe60b0000 0 0x425>;
-                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 926>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 926>;
-                       dmas = <&dmac0 0x11>, <&dmac0 0x10>;
-                       dma-names = "tx", "rx";
-                       status = "disabled";
-               };
-
-               pwm0: pwm@e6e30000 {
-                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
-                       reg = <0 0xe6e30000 0 8>;
-                       #pwm-cells = <2>;
-                       clocks = <&cpg CPG_MOD 523>;
-                       resets = <&cpg 523>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       status = "disabled";
-               };
-
-               pwm1: pwm@e6e31000 {
-                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
-                       reg = <0 0xe6e31000 0 8>;
-                       #pwm-cells = <2>;
-                       clocks = <&cpg CPG_MOD 523>;
-                       resets = <&cpg 523>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       status = "disabled";
-               };
-
-               pwm2: pwm@e6e32000 {
-                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
-                       reg = <0 0xe6e32000 0 8>;
-                       #pwm-cells = <2>;
-                       clocks = <&cpg CPG_MOD 523>;
-                       resets = <&cpg 523>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       status = "disabled";
-               };
-
-               pwm3: pwm@e6e33000 {
-                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
-                       reg = <0 0xe6e33000 0 8>;
-                       #pwm-cells = <2>;
-                       clocks = <&cpg CPG_MOD 523>;
-                       resets = <&cpg 523>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       status = "disabled";
-               };
-
-               pwm4: pwm@e6e34000 {
-                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
-                       reg = <0 0xe6e34000 0 8>;
-                       #pwm-cells = <2>;
-                       clocks = <&cpg CPG_MOD 523>;
-                       resets = <&cpg 523>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       status = "disabled";
-               };
-
-               pwm5: pwm@e6e35000 {
-                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
-                       reg = <0 0xe6e35000 0 8>;
-                       #pwm-cells = <2>;
-                       clocks = <&cpg CPG_MOD 523>;
-                       resets = <&cpg 523>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       status = "disabled";
-               };
-
-               pwm6: pwm@e6e36000 {
-                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
-                       reg = <0 0xe6e36000 0 8>;
-                       #pwm-cells = <2>;
-                       clocks = <&cpg CPG_MOD 523>;
-                       resets = <&cpg 523>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       status = "disabled";
-               };
-
-               i2c0: i2c@e6500000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a7796",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe6500000 0 0x40>;
-                       interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 931>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 931>;
-                       dmas = <&dmac1 0x91>, <&dmac1 0x90>,
-                              <&dmac2 0x91>, <&dmac2 0x90>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       i2c-scl-internal-delay-ns = <110>;
+               i2c0: i2c@e6500000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7796",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe6500000 0 0x40>;
+                       interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 931>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 931>;
+                       dmas = <&dmac1 0x91>, <&dmac1 0x90>,
+                              <&dmac2 0x91>, <&dmac2 0x90>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       i2c-scl-internal-delay-ns = <110>;
                        status = "disabled";
                };
 
                        status = "disabled";
                };
 
-               can0: can@e6c30000 {
-                       compatible = "renesas,can-r8a7796",
-                                    "renesas,rcar-gen3-can";
-                       reg = <0 0xe6c30000 0 0x1000>;
-                       interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 916>,
-                              <&cpg CPG_CORE R8A7796_CLK_CANFD>,
-                              <&can_clk>;
-                       clock-names = "clkp1", "clkp2", "can_clk";
-                       assigned-clocks = <&cpg CPG_CORE R8A7796_CLK_CANFD>;
-                       assigned-clock-rates = <40000000>;
+               i2c_dvfs: i2c@e60b0000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a7796",
+                                    "renesas,rcar-gen3-iic",
+                                    "renesas,rmobile-iic";
+                       reg = <0 0xe60b0000 0 0x425>;
+                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 926>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 916>;
+                       resets = <&cpg 926>;
+                       dmas = <&dmac0 0x11>, <&dmac0 0x10>;
+                       dma-names = "tx", "rx";
                        status = "disabled";
                };
 
-               can1: can@e6c38000 {
-                       compatible = "renesas,can-r8a7796",
-                                    "renesas,rcar-gen3-can";
-                       reg = <0 0xe6c38000 0 0x1000>;
-                       interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 915>,
-                              <&cpg CPG_CORE R8A7796_CLK_CANFD>,
-                              <&can_clk>;
-                       clock-names = "clkp1", "clkp2", "can_clk";
-                       assigned-clocks = <&cpg CPG_CORE R8A7796_CLK_CANFD>;
-                       assigned-clock-rates = <40000000>;
+               hscif0: serial@e6540000 {
+                       compatible = "renesas,hscif-r8a7796",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe6540000 0 0x60>;
+                       interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 520>,
+                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x31>, <&dmac1 0x30>,
+                              <&dmac2 0x31>, <&dmac2 0x30>;
+                       dma-names = "tx", "rx", "tx", "rx";
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 915>;
-                       status = "disabled";
-               };
-
-               canfd: can@e66c0000 {
-                       compatible = "renesas,r8a7796-canfd",
-                                    "renesas,rcar-gen3-canfd";
-                       reg = <0 0xe66c0000 0 0x8000>;
-                       interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
-                                  <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 914>,
-                              <&cpg CPG_CORE R8A7796_CLK_CANFD>,
-                              <&can_clk>;
-                       clock-names = "fck", "canfd", "can_clk";
-                       assigned-clocks = <&cpg CPG_CORE R8A7796_CLK_CANFD>;
-                       assigned-clock-rates = <40000000>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 914>;
-                       status = "disabled";
-
-                       channel0 {
-                               status = "disabled";
-                       };
-
-                       channel1 {
-                               status = "disabled";
-                       };
-               };
-
-               drif00: rif@e6f40000 {
-                       compatible = "renesas,r8a7796-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f40000 0 0x64>;
-                       interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 515>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x20>, <&dmac2 0x20>;
-                       dma-names = "rx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 515>;
-                       renesas,bonding = <&drif01>;
-                       status = "disabled";
-               };
-
-               drif01: rif@e6f50000 {
-                       compatible = "renesas,r8a7796-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f50000 0 0x64>;
-                       interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 514>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x22>, <&dmac2 0x22>;
-                       dma-names = "rx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 514>;
-                       renesas,bonding = <&drif00>;
-                       status = "disabled";
-               };
-
-               drif10: rif@e6f60000 {
-                       compatible = "renesas,r8a7796-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f60000 0 0x64>;
-                       interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 513>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x24>, <&dmac2 0x24>;
-                       dma-names = "rx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 513>;
-                       renesas,bonding = <&drif11>;
-                       status = "disabled";
-               };
-
-               drif11: rif@e6f70000 {
-                       compatible = "renesas,r8a7796-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f70000 0 0x64>;
-                       interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 512>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x26>, <&dmac2 0x26>;
-                       dma-names = "rx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 512>;
-                       renesas,bonding = <&drif10>;
-                       status = "disabled";
-               };
-
-               drif20: rif@e6f80000 {
-                       compatible = "renesas,r8a7796-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f80000 0 0x64>;
-                       interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 511>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x28>, <&dmac2 0x28>;
-                       dma-names = "rx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 511>;
-                       renesas,bonding = <&drif21>;
-                       status = "disabled";
-               };
-
-               drif21: rif@e6f90000 {
-                       compatible = "renesas,r8a7796-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6f90000 0 0x64>;
-                       interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 510>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x2a>, <&dmac2 0x2a>;
-                       dma-names = "rx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 510>;
-                       renesas,bonding = <&drif20>;
-                       status = "disabled";
-               };
-
-               drif30: rif@e6fa0000 {
-                       compatible = "renesas,r8a7796-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6fa0000 0 0x64>;
-                       interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 509>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x2c>, <&dmac2 0x2c>;
-                       dma-names = "rx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 509>;
-                       renesas,bonding = <&drif31>;
-                       status = "disabled";
-               };
-
-               drif31: rif@e6fb0000 {
-                       compatible = "renesas,r8a7796-drif",
-                                    "renesas,rcar-gen3-drif";
-                       reg = <0 0xe6fb0000 0 0x64>;
-                       interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 508>;
-                       clock-names = "fck";
-                       dmas = <&dmac1 0x2e>, <&dmac2 0x2e>;
-                       dma-names = "rx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 508>;
-                       renesas,bonding = <&drif30>;
-                       status = "disabled";
-               };
-
-               avb: ethernet@e6800000 {
-                       compatible = "renesas,etheravb-r8a7796",
-                                    "renesas,etheravb-rcar-gen3";
-                       reg = <0 0xe6800000 0 0x800>, <0 0xe6a00000 0 0x10000>;
-                       interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "ch0", "ch1", "ch2", "ch3",
-                                         "ch4", "ch5", "ch6", "ch7",
-                                         "ch8", "ch9", "ch10", "ch11",
-                                         "ch12", "ch13", "ch14", "ch15",
-                                         "ch16", "ch17", "ch18", "ch19",
-                                         "ch20", "ch21", "ch22", "ch23",
-                                         "ch24";
-                       clocks = <&cpg CPG_MOD 812>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 812>;
-                       phy-mode = "rgmii";
-                       iommus = <&ipmmu_ds0 16>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       status = "disabled";
-               };
-
-               hscif0: serial@e6540000 {
-                       compatible = "renesas,hscif-r8a7796",
-                                    "renesas,rcar-gen3-hscif",
-                                    "renesas,hscif";
-                       reg = <0 0xe6540000 0 0x60>;
-                       interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 520>,
-                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x31>, <&dmac1 0x30>,
-                              <&dmac2 0x31>, <&dmac2 0x30>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 520>;
+                       resets = <&cpg 520>;
                        status = "disabled";
                };
 
                        status = "disabled";
                };
 
-               scif0: serial@e6e60000 {
-                       compatible = "renesas,scif-r8a7796",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6e60000 0 64>;
-                       interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 207>,
-                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x51>, <&dmac1 0x50>,
-                              <&dmac2 0x51>, <&dmac2 0x50>;
-                       dma-names = "tx", "rx", "tx", "rx";
+               hsusb: usb@e6590000 {
+                       compatible = "renesas,usbhs-r8a7796",
+                                    "renesas,rcar-gen3-usbhs";
+                       reg = <0 0xe6590000 0 0x100>;
+                       interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 704>;
+                       dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
+                              <&usb_dmac1 0>, <&usb_dmac1 1>;
+                       dma-names = "ch0", "ch1", "ch2", "ch3";
+                       renesas,buswait = <11>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 207>;
+                       resets = <&cpg 704>;
                        status = "disabled";
                };
 
-               scif1: serial@e6e68000 {
-                       compatible = "renesas,scif-r8a7796",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6e68000 0 64>;
-                       interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 206>,
-                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x53>, <&dmac1 0x52>,
-                              <&dmac2 0x53>, <&dmac2 0x52>;
-                       dma-names = "tx", "rx", "tx", "rx";
+               usb_dmac0: dma-controller@e65a0000 {
+                       compatible = "renesas,r8a7796-usb-dmac",
+                                    "renesas,usb-dmac";
+                       reg = <0 0xe65a0000 0 0x100>;
+                       interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1";
+                       clocks = <&cpg CPG_MOD 330>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 206>;
-                       status = "disabled";
+                       resets = <&cpg 330>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
                };
 
-               scif2: serial@e6e88000 {
-                       compatible = "renesas,scif-r8a7796",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6e88000 0 64>;
-                       interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 310>,
-                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 310>;
-                       status = "disabled";
-               };
-
-               scif3: serial@e6c50000 {
-                       compatible = "renesas,scif-r8a7796",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6c50000 0 64>;
-                       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 204>,
-                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac0 0x57>, <&dmac0 0x56>;
-                       dma-names = "tx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 204>;
-                       status = "disabled";
-               };
-
-               scif4: serial@e6c40000 {
-                       compatible = "renesas,scif-r8a7796",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6c40000 0 64>;
-                       interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 203>,
-                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac0 0x59>, <&dmac0 0x58>;
-                       dma-names = "tx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 203>;
-                       status = "disabled";
-               };
-
-               scif5: serial@e6f30000 {
-                       compatible = "renesas,scif-r8a7796",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6f30000 0 64>;
-                       interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 202>,
-                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x5b>, <&dmac1 0x5a>,
-                              <&dmac2 0x5b>, <&dmac2 0x5a>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 202>;
-                       status = "disabled";
-               };
-
-               msiof0: spi@e6e90000 {
-                       compatible = "renesas,msiof-r8a7796",
-                                    "renesas,rcar-gen3-msiof";
-                       reg = <0 0xe6e90000 0 0x0064>;
-                       interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 211>;
-                       dmas = <&dmac1 0x41>, <&dmac1 0x40>,
-                              <&dmac2 0x41>, <&dmac2 0x40>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 211>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       status = "disabled";
-               };
-
-               msiof1: spi@e6ea0000 {
-                       compatible = "renesas,msiof-r8a7796",
-                                    "renesas,rcar-gen3-msiof";
-                       reg = <0 0xe6ea0000 0 0x0064>;
-                       interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 210>;
-                       dmas = <&dmac1 0x43>, <&dmac1 0x42>,
-                              <&dmac2 0x43>, <&dmac2 0x42>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 210>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       status = "disabled";
-               };
-
-               msiof2: spi@e6c00000 {
-                       compatible = "renesas,msiof-r8a7796",
-                                    "renesas,rcar-gen3-msiof";
-                       reg = <0 0xe6c00000 0 0x0064>;
-                       interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 209>;
-                       dmas = <&dmac0 0x45>, <&dmac0 0x44>;
-                       dma-names = "tx", "rx";
+               usb_dmac1: dma-controller@e65b0000 {
+                       compatible = "renesas,r8a7796-usb-dmac",
+                                    "renesas,usb-dmac";
+                       reg = <0 0xe65b0000 0 0x100>;
+                       interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1";
+                       clocks = <&cpg CPG_MOD 331>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 209>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       status = "disabled";
+                       resets = <&cpg 331>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
                };
 
-               msiof3: spi@e6c10000 {
-                       compatible = "renesas,msiof-r8a7796",
-                                    "renesas,rcar-gen3-msiof";
-                       reg = <0 0xe6c10000 0 0x0064>;
-                       interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 208>;
-                       dmas = <&dmac0 0x47>, <&dmac0 0x46>;
-                       dma-names = "tx", "rx";
+               usb3_phy0: usb-phy@e65ee000 {
+                       compatible = "renesas,r8a7796-usb3-phy",
+                                    "renesas,rcar-gen3-usb3-phy";
+                       reg = <0 0xe65ee000 0 0x90>;
+                       clocks = <&cpg CPG_MOD 328>, <&usb3s0_clk>,
+                                <&usb_extal_clk>;
+                       clock-names = "usb3-if", "usb3s_clk", "usb_extal";
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 208>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
+                       resets = <&cpg 328>;
+                       #phy-cells = <0>;
                        status = "disabled";
                };
 
                               <&ipmmu_ds1 30>, <&ipmmu_ds1 31>;
                };
 
-               audma0: dma-controller@ec700000 {
-                       compatible = "renesas,dmac-r8a7796",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xec700000 0 0x10000>;
-                       interrupts = <GIC_SPI 350 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 320 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 321 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 322 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 323 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 324 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 325 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 327 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 328 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 329 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 330 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 331 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 332 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 333 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 334 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 335 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                       "ch0", "ch1", "ch2", "ch3",
-                                       "ch4", "ch5", "ch6", "ch7",
-                                       "ch8", "ch9", "ch10", "ch11",
-                                       "ch12", "ch13", "ch14", "ch15";
-                       clocks = <&cpg CPG_MOD 502>;
-                       clock-names = "fck";
+               ipmmu_ds0: mmu@e6740000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xe6740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 0>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 502>;
-                       #dma-cells = <1>;
-                       dma-channels = <16>;
-                       iommus = <&ipmmu_mp 0>, <&ipmmu_mp 1>,
-                              <&ipmmu_mp 2>, <&ipmmu_mp 3>,
-                              <&ipmmu_mp 4>, <&ipmmu_mp 5>,
-                              <&ipmmu_mp 6>, <&ipmmu_mp 7>,
-                              <&ipmmu_mp 8>, <&ipmmu_mp 9>,
-                              <&ipmmu_mp 10>, <&ipmmu_mp 11>,
-                              <&ipmmu_mp 12>, <&ipmmu_mp 13>,
-                              <&ipmmu_mp 14>, <&ipmmu_mp 15>;
+                       #iommu-cells = <1>;
                };
 
-               audma1: dma-controller@ec720000 {
-                       compatible = "renesas,dmac-r8a7796",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xec720000 0 0x10000>;
-                       interrupts = <GIC_SPI 351 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 336 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 337 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 338 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 339 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 340 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 341 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 342 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 343 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 344 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 345 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 346 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 347 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 348 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 349 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 382 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 383 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                       "ch0", "ch1", "ch2", "ch3",
-                                       "ch4", "ch5", "ch6", "ch7",
-                                       "ch8", "ch9", "ch10", "ch11",
-                                       "ch12", "ch13", "ch14", "ch15";
-                       clocks = <&cpg CPG_MOD 501>;
-                       clock-names = "fck";
+               ipmmu_ds1: mmu@e7740000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xe7740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 1>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 501>;
-                       #dma-cells = <1>;
-                       dma-channels = <16>;
-                       iommus = <&ipmmu_mp 16>, <&ipmmu_mp 17>,
-                              <&ipmmu_mp 18>, <&ipmmu_mp 19>,
-                              <&ipmmu_mp 20>, <&ipmmu_mp 21>,
-                              <&ipmmu_mp 22>, <&ipmmu_mp 23>,
-                              <&ipmmu_mp 24>, <&ipmmu_mp 25>,
-                              <&ipmmu_mp 26>, <&ipmmu_mp 27>,
-                              <&ipmmu_mp 28>, <&ipmmu_mp 29>,
-                              <&ipmmu_mp 30>, <&ipmmu_mp 31>;
+                       #iommu-cells = <1>;
                };
 
-               usb_dmac0: dma-controller@e65a0000 {
-                       compatible = "renesas,r8a7796-usb-dmac",
-                                    "renesas,usb-dmac";
-                       reg = <0 0xe65a0000 0 0x100>;
-                       interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "ch0", "ch1";
-                       clocks = <&cpg CPG_MOD 330>;
+               ipmmu_hc: mmu@e6570000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xe6570000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 2>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 330>;
-                       #dma-cells = <1>;
-                       dma-channels = <2>;
+                       #iommu-cells = <1>;
                };
 
-               usb_dmac1: dma-controller@e65b0000 {
-                       compatible = "renesas,r8a7796-usb-dmac",
-                                    "renesas,usb-dmac";
-                       reg = <0 0xe65b0000 0 0x100>;
-                       interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "ch0", "ch1";
-                       clocks = <&cpg CPG_MOD 331>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 331>;
-                       #dma-cells = <1>;
-                       dma-channels = <2>;
+               ipmmu_ir: mmu@ff8b0000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xff8b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 3>;
+                       power-domains = <&sysc R8A7796_PD_A3IR>;
+                       #iommu-cells = <1>;
                };
 
-               hsusb: usb@e6590000 {
-                       compatible = "renesas,usbhs-r8a7796",
-                                    "renesas,rcar-gen3-usbhs";
-                       reg = <0 0xe6590000 0 0x100>;
-                       interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 704>;
-                       dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
-                              <&usb_dmac1 0>, <&usb_dmac1 1>;
-                       dma-names = "ch0", "ch1", "ch2", "ch3";
-                       renesas,buswait = <11>;
-                       phys = <&usb2_phy0>;
-                       phy-names = "usb";
+               ipmmu_mm: mmu@e67b0000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xe67b0000 0 0x1000>;
+                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mp: mmu@ec670000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xec670000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 4>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv0: mmu@fd800000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xfd800000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 5>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv1: mmu@fd950000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xfd950000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 6>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_rt: mmu@ffc80000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xffc80000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 7>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vc0: mmu@fe6b0000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xfe6b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 8>;
+                       power-domains = <&sysc R8A7796_PD_A3VC>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vi0: mmu@febd0000 {
+                       compatible = "renesas,ipmmu-r8a7796";
+                       reg = <0 0xfebd0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 9>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               avb: ethernet@e6800000 {
+                       compatible = "renesas,etheravb-r8a7796",
+                                    "renesas,etheravb-rcar-gen3";
+                       reg = <0 0xe6800000 0 0x800>, <0 0xe6a00000 0 0x10000>;
+                       interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1", "ch2", "ch3",
+                                         "ch4", "ch5", "ch6", "ch7",
+                                         "ch8", "ch9", "ch10", "ch11",
+                                         "ch12", "ch13", "ch14", "ch15",
+                                         "ch16", "ch17", "ch18", "ch19",
+                                         "ch20", "ch21", "ch22", "ch23",
+                                         "ch24";
+                       clocks = <&cpg CPG_MOD 812>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 812>;
+                       phy-mode = "rgmii";
+                       iommus = <&ipmmu_ds0 16>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               can0: can@e6c30000 {
+                       compatible = "renesas,can-r8a7796",
+                                    "renesas,rcar-gen3-can";
+                       reg = <0 0xe6c30000 0 0x1000>;
+                       interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 916>,
+                              <&cpg CPG_CORE R8A7796_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A7796_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 916>;
+                       status = "disabled";
+               };
+
+               can1: can@e6c38000 {
+                       compatible = "renesas,can-r8a7796",
+                                    "renesas,rcar-gen3-can";
+                       reg = <0 0xe6c38000 0 0x1000>;
+                       interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 915>,
+                              <&cpg CPG_CORE R8A7796_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A7796_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 915>;
+                       status = "disabled";
+               };
+
+               canfd: can@e66c0000 {
+                       compatible = "renesas,r8a7796-canfd",
+                                    "renesas,rcar-gen3-canfd";
+                       reg = <0 0xe66c0000 0 0x8000>;
+                       interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
+                                  <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 914>,
+                              <&cpg CPG_CORE R8A7796_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "fck", "canfd", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A7796_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 914>;
+                       status = "disabled";
+
+                       channel0 {
+                               status = "disabled";
+                       };
+
+                       channel1 {
+                               status = "disabled";
+                       };
+               };
+
+               pwm0: pwm@e6e30000 {
+                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
+                       reg = <0 0xe6e30000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm1: pwm@e6e31000 {
+                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
+                       reg = <0 0xe6e31000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm2: pwm@e6e32000 {
+                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
+                       reg = <0 0xe6e32000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm3: pwm@e6e33000 {
+                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
+                       reg = <0 0xe6e33000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm4: pwm@e6e34000 {
+                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
+                       reg = <0 0xe6e34000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm5: pwm@e6e35000 {
+                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
+                       reg = <0 0xe6e35000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm6: pwm@e6e36000 {
+                       compatible = "renesas,pwm-r8a7796", "renesas,pwm-rcar";
+                       reg = <0 0xe6e36000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               scif0: serial@e6e60000 {
+                       compatible = "renesas,scif-r8a7796",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e60000 0 64>;
+                       interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 207>,
+                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x51>, <&dmac1 0x50>,
+                              <&dmac2 0x51>, <&dmac2 0x50>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 207>;
+                       status = "disabled";
+               };
+
+               scif1: serial@e6e68000 {
+                       compatible = "renesas,scif-r8a7796",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e68000 0 64>;
+                       interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 206>,
+                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x53>, <&dmac1 0x52>,
+                              <&dmac2 0x53>, <&dmac2 0x52>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 206>;
+                       status = "disabled";
+               };
+
+               scif2: serial@e6e88000 {
+                       compatible = "renesas,scif-r8a7796",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e88000 0 64>;
+                       interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 310>,
+                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 310>;
+                       status = "disabled";
+               };
+
+               scif3: serial@e6c50000 {
+                       compatible = "renesas,scif-r8a7796",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6c50000 0 64>;
+                       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 204>,
+                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x57>, <&dmac0 0x56>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 204>;
+                       status = "disabled";
+               };
+
+               scif4: serial@e6c40000 {
+                       compatible = "renesas,scif-r8a7796",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6c40000 0 64>;
+                       interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 203>,
+                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x59>, <&dmac0 0x58>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 203>;
+                       status = "disabled";
+               };
+
+               scif5: serial@e6f30000 {
+                       compatible = "renesas,scif-r8a7796",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6f30000 0 64>;
+                       interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 202>,
+                                <&cpg CPG_CORE R8A7796_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x5b>, <&dmac1 0x5a>,
+                              <&dmac2 0x5b>, <&dmac2 0x5a>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 202>;
+                       status = "disabled";
+               };
+
+               msiof0: spi@e6e90000 {
+                       compatible = "renesas,msiof-r8a7796",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6e90000 0 0x0064>;
+                       interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 211>;
+                       dmas = <&dmac1 0x41>, <&dmac1 0x40>,
+                              <&dmac2 0x41>, <&dmac2 0x40>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 211>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof1: spi@e6ea0000 {
+                       compatible = "renesas,msiof-r8a7796",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6ea0000 0 0x0064>;
+                       interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 210>;
+                       dmas = <&dmac1 0x43>, <&dmac1 0x42>,
+                              <&dmac2 0x43>, <&dmac2 0x42>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 210>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof2: spi@e6c00000 {
+                       compatible = "renesas,msiof-r8a7796",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6c00000 0 0x0064>;
+                       interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 209>;
+                       dmas = <&dmac0 0x45>, <&dmac0 0x44>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 209>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof3: spi@e6c10000 {
+                       compatible = "renesas,msiof-r8a7796",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6c10000 0 0x0064>;
+                       interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 208>;
+                       dmas = <&dmac0 0x47>, <&dmac0 0x46>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 208>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               vin0: video@e6ef0000 {
+                       compatible = "renesas,vin-r8a7796";
+                       reg = <0 0xe6ef0000 0 0x1000>;
+                       interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 811>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 811>;
+                       renesas,id = <0>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin0csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin0>;
+                                       };
+                                       vin0csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin0>;
+                                       };
+                               };
+                       };
+               };
+
+               vin1: video@e6ef1000 {
+                       compatible = "renesas,vin-r8a7796";
+                       reg = <0 0xe6ef1000 0 0x1000>;
+                       interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 810>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 704>;
+                       resets = <&cpg 810>;
+                       renesas,id = <1>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin1csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin1>;
+                                       };
+                                       vin1csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin1>;
+                                       };
+                               };
+                       };
                };
 
-               usb3_phy0: usb-phy@e65ee000 {
-                       compatible = "renesas,r8a7796-usb3-phy",
-                                    "renesas,rcar-gen3-usb3-phy";
-                       reg = <0 0xe65ee000 0 0x90>;
-                       clocks = <&cpg CPG_MOD 328>, <&usb3s0_clk>,
-                                <&usb_extal_clk>;
-                       clock-names = "usb3-if", "usb3s_clk", "usb_extal";
+               vin2: video@e6ef2000 {
+                       compatible = "renesas,vin-r8a7796";
+                       reg = <0 0xe6ef2000 0 0x1000>;
+                       interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 809>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 328>;
-                       #phy-cells = <0>;
+                       resets = <&cpg 809>;
+                       renesas,id = <2>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin2csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin2>;
+                                       };
+                                       vin2csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin2>;
+                                       };
+                               };
+                       };
                };
 
-               xhci0: usb@ee000000 {
-                       compatible = "renesas,xhci-r8a7796",
-                                    "renesas,rcar-gen3-xhci";
-                       reg = <0 0xee000000 0 0xc00>;
-                       interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 328>;
+               vin3: video@e6ef3000 {
+                       compatible = "renesas,vin-r8a7796";
+                       reg = <0 0xe6ef3000 0 0x1000>;
+                       interrupts = <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 808>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 328>;
+                       resets = <&cpg 808>;
+                       renesas,id = <3>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin3csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin3>;
+                                       };
+                                       vin3csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin3>;
+                                       };
+                               };
+                       };
                };
 
-               usb3_peri0: usb@ee020000 {
-                       compatible = "renesas,r8a7796-usb3-peri",
-                                    "renesas,rcar-gen3-usb3-peri";
-                       reg = <0 0xee020000 0 0x400>;
-                       interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 328>;
+               vin4: video@e6ef4000 {
+                       compatible = "renesas,vin-r8a7796";
+                       reg = <0 0xe6ef4000 0 0x1000>;
+                       interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 807>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 328>;
+                       resets = <&cpg 807>;
+                       renesas,id = <4>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin4csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin4>;
+                                       };
+                                       vin4csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin4>;
+                                       };
+                               };
+                       };
                };
 
-               ohci0: usb@ee080000 {
-                       compatible = "generic-ohci";
-                       reg = <0 0xee080000 0 0x100>;
-                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 703>;
-                       phys = <&usb2_phy0>;
-                       phy-names = "usb";
+               vin5: video@e6ef5000 {
+                       compatible = "renesas,vin-r8a7796";
+                       reg = <0 0xe6ef5000 0 0x1000>;
+                       interrupts = <GIC_SPI 175 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 806>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 703>;
+                       resets = <&cpg 806>;
+                       renesas,id = <5>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin5csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin5>;
+                                       };
+                                       vin5csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin5>;
+                                       };
+                               };
+                       };
                };
 
-               ehci0: usb@ee080100 {
-                       compatible = "generic-ehci";
-                       reg = <0 0xee080100 0 0x100>;
-                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 703>;
-                       phys = <&usb2_phy0>;
-                       phy-names = "usb";
-                       companion= <&ohci0>;
+               vin6: video@e6ef6000 {
+                       compatible = "renesas,vin-r8a7796";
+                       reg = <0 0xe6ef6000 0 0x1000>;
+                       interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 805>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 703>;
+                       resets = <&cpg 805>;
+                       renesas,id = <6>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin6csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin6>;
+                                       };
+                                       vin6csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin6>;
+                                       };
+                               };
+                       };
                };
 
-               usb2_phy0: usb-phy@ee080200 {
-                       compatible = "renesas,usb2-phy-r8a7796",
-                                    "renesas,rcar-gen3-usb2-phy";
-                       reg = <0 0xee080200 0 0x700>;
-                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 703>;
+               vin7: video@e6ef7000 {
+                       compatible = "renesas,vin-r8a7796";
+                       reg = <0 0xe6ef7000 0 0x1000>;
+                       interrupts = <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 804>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 703>;
-                       #phy-cells = <0>;
+                       resets = <&cpg 804>;
+                       renesas,id = <7>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin7csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin7>;
+                                       };
+                                       vin7csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin7>;
+                                       };
+                               };
+                       };
                };
 
-               ohci1: usb@ee0a0000 {
-                       compatible = "generic-ohci";
-                       reg = <0 0xee0a0000 0 0x100>;
-                       interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 702>;
-                       phys = <&usb2_phy1>;
-                       phy-names = "usb";
+               drif00: rif@e6f40000 {
+                       compatible = "renesas,r8a7796-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f40000 0 0x64>;
+                       interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 515>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x20>, <&dmac2 0x20>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 702>;
+                       resets = <&cpg 515>;
+                       renesas,bonding = <&drif01>;
                        status = "disabled";
                };
 
-               ehci1: usb@ee0a0100 {
-                       compatible = "generic-ehci";
-                       reg = <0 0xee0a0100 0 0x100>;
-                       interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 702>;
-                       phys = <&usb2_phy1>;
-                       phy-names = "usb";
-                       companion= <&ohci1>;
+               drif01: rif@e6f50000 {
+                       compatible = "renesas,r8a7796-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f50000 0 0x64>;
+                       interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 514>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x22>, <&dmac2 0x22>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 702>;
+                       resets = <&cpg 514>;
+                       renesas,bonding = <&drif00>;
                        status = "disabled";
                };
 
-               usb2_phy1: usb-phy@ee0a0200 {
-                       compatible = "renesas,usb2-phy-r8a7796",
-                                    "renesas,rcar-gen3-usb2-phy";
-                       reg = <0 0xee0a0200 0 0x700>;
-                       clocks = <&cpg CPG_MOD 702>;
+               drif10: rif@e6f60000 {
+                       compatible = "renesas,r8a7796-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f60000 0 0x64>;
+                       interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 513>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x24>, <&dmac2 0x24>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 702>;
-                       #phy-cells = <0>;
+                       resets = <&cpg 513>;
+                       renesas,bonding = <&drif11>;
                        status = "disabled";
                };
 
-               rpc: rpc@0xee200000 {
-                       compatible = "renesas,rpc-r8a7796", "renesas,rpc";
-                       reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
-                       clocks = <&cpg CPG_MOD 917>;
-                       bank-width = <2>;
+               drif11: rif@e6f70000 {
+                       compatible = "renesas,r8a7796-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f70000 0 0x64>;
+                       interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 512>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x26>, <&dmac2 0x26>;
+                       dma-names = "rx", "rx";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 512>;
+                       renesas,bonding = <&drif10>;
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
-                       compatible = "renesas,sdhi-r8a7796",
-                                    "renesas,rcar-gen3-sdhi";
-                       reg = <0 0xee100000 0 0x2000>;
-                       interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 314>;
-                       max-frequency = <200000000>;
+               drif20: rif@e6f80000 {
+                       compatible = "renesas,r8a7796-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f80000 0 0x64>;
+                       interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 511>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x28>, <&dmac2 0x28>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 314>;
+                       resets = <&cpg 511>;
+                       renesas,bonding = <&drif21>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee120000 {
-                       compatible = "renesas,sdhi-r8a7796",
-                                    "renesas,rcar-gen3-sdhi";
-                       reg = <0 0xee120000 0 0x2000>;
-                       interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 313>;
-                       max-frequency = <200000000>;
+               drif21: rif@e6f90000 {
+                       compatible = "renesas,r8a7796-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6f90000 0 0x64>;
+                       interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 510>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x2a>, <&dmac2 0x2a>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 313>;
+                       resets = <&cpg 510>;
+                       renesas,bonding = <&drif20>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee140000 {
-                       compatible = "renesas,sdhi-r8a7796",
-                                    "renesas,rcar-gen3-sdhi";
-                       reg = <0 0xee140000 0 0x2000>;
-                       interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 312>;
-                       max-frequency = <200000000>;
+               drif30: rif@e6fa0000 {
+                       compatible = "renesas,r8a7796-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6fa0000 0 0x64>;
+                       interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 509>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x2c>, <&dmac2 0x2c>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 312>;
+                       resets = <&cpg 509>;
+                       renesas,bonding = <&drif31>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
-                       compatible = "renesas,sdhi-r8a7796",
-                                    "renesas,rcar-gen3-sdhi";
-                       reg = <0 0xee160000 0 0x2000>;
-                       interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 311>;
-                       max-frequency = <200000000>;
+               drif31: rif@e6fb0000 {
+                       compatible = "renesas,r8a7796-drif",
+                                    "renesas,rcar-gen3-drif";
+                       reg = <0 0xe6fb0000 0 0x64>;
+                       interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 508>;
+                       clock-names = "fck";
+                       dmas = <&dmac1 0x2e>, <&dmac2 0x2e>;
+                       dma-names = "rx", "rx";
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 311>;
+                       resets = <&cpg 508>;
+                       renesas,bonding = <&drif30>;
                        status = "disabled";
                };
 
-               tsc: thermal@e6198000 {
-                       compatible = "renesas,r8a7796-thermal";
-                       reg = <0 0xe6198000 0 0x100>,
-                             <0 0xe61a0000 0 0x100>,
-                             <0 0xe61a8000 0 0x100>;
-                       interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 522>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 522>;
-                       #thermal-sensor-cells = <1>;
-                       status = "okay";
-               };
-
                rcar_sound: sound@ec500000 {
                        /*
                         * #sound-dai-cells is required
                                        dma-names = "rx", "tx", "rxu", "txu";
                                };
                        };
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               port@0 {
+                                       reg = <0>;
+                               };
+                               port@1 {
+                                       reg = <1>;
+                               };
+                       };
+               };
+
+               audma0: dma-controller@ec700000 {
+                       compatible = "renesas,dmac-r8a7796",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xec700000 0 0x10000>;
+                       interrupts = <GIC_SPI 350 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 320 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 321 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 322 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 323 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 324 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 325 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 327 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 328 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 329 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 330 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 331 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 332 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 333 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 334 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 335 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                       "ch0", "ch1", "ch2", "ch3",
+                                       "ch4", "ch5", "ch6", "ch7",
+                                       "ch8", "ch9", "ch10", "ch11",
+                                       "ch12", "ch13", "ch14", "ch15";
+                       clocks = <&cpg CPG_MOD 502>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 502>;
+                       #dma-cells = <1>;
+                       dma-channels = <16>;
+                       iommus = <&ipmmu_mp 0>, <&ipmmu_mp 1>,
+                              <&ipmmu_mp 2>, <&ipmmu_mp 3>,
+                              <&ipmmu_mp 4>, <&ipmmu_mp 5>,
+                              <&ipmmu_mp 6>, <&ipmmu_mp 7>,
+                              <&ipmmu_mp 8>, <&ipmmu_mp 9>,
+                              <&ipmmu_mp 10>, <&ipmmu_mp 11>,
+                              <&ipmmu_mp 12>, <&ipmmu_mp 13>,
+                              <&ipmmu_mp 14>, <&ipmmu_mp 15>;
+               };
+
+               audma1: dma-controller@ec720000 {
+                       compatible = "renesas,dmac-r8a7796",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xec720000 0 0x10000>;
+                       interrupts = <GIC_SPI 351 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 336 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 337 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 338 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 339 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 340 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 341 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 342 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 343 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 344 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 345 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 346 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 347 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 348 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 349 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 382 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 383 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                       "ch0", "ch1", "ch2", "ch3",
+                                       "ch4", "ch5", "ch6", "ch7",
+                                       "ch8", "ch9", "ch10", "ch11",
+                                       "ch12", "ch13", "ch14", "ch15";
+                       clocks = <&cpg CPG_MOD 501>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 501>;
+                       #dma-cells = <1>;
+                       dma-channels = <16>;
+                       iommus = <&ipmmu_mp 16>, <&ipmmu_mp 17>,
+                              <&ipmmu_mp 18>, <&ipmmu_mp 19>,
+                              <&ipmmu_mp 20>, <&ipmmu_mp 21>,
+                              <&ipmmu_mp 22>, <&ipmmu_mp 23>,
+                              <&ipmmu_mp 24>, <&ipmmu_mp 25>,
+                              <&ipmmu_mp 26>, <&ipmmu_mp 27>,
+                              <&ipmmu_mp 28>, <&ipmmu_mp 29>,
+                              <&ipmmu_mp 30>, <&ipmmu_mp 31>;
+               };
+
+               xhci0: usb@ee000000 {
+                       compatible = "renesas,xhci-r8a7796",
+                                    "renesas,rcar-gen3-xhci";
+                       reg = <0 0xee000000 0 0xc00>;
+                       interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 328>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 328>;
+                       status = "disabled";
+               };
+
+               usb3_peri0: usb@ee020000 {
+                       compatible = "renesas,r8a7796-usb3-peri",
+                                    "renesas,rcar-gen3-usb3-peri";
+                       reg = <0 0xee020000 0 0x400>;
+                       interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 328>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 328>;
+                       status = "disabled";
+               };
+
+               ohci0: usb@ee080000 {
+                       compatible = "generic-ohci";
+                       reg = <0 0xee080000 0 0x100>;
+                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 703>;
+                       status = "disabled";
+               };
+
+               ohci1: usb@ee0a0000 {
+                       compatible = "generic-ohci";
+                       reg = <0 0xee0a0000 0 0x100>;
+                       interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 702>;
+                       phys = <&usb2_phy1>;
+                       phy-names = "usb";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 702>;
+                       status = "disabled";
+               };
+
+               ehci0: usb@ee080100 {
+                       compatible = "generic-ehci";
+                       reg = <0 0xee080100 0 0x100>;
+                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
+                       companion= <&ohci0>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 703>;
+                       status = "disabled";
+               };
+
+               ehci1: usb@ee0a0100 {
+                       compatible = "generic-ehci";
+                       reg = <0 0xee0a0100 0 0x100>;
+                       interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 702>;
+                       phys = <&usb2_phy1>;
+                       phy-names = "usb";
+                       companion= <&ohci1>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 702>;
+                       status = "disabled";
+               };
+
+               usb2_phy0: usb-phy@ee080200 {
+                       compatible = "renesas,usb2-phy-r8a7796",
+                                    "renesas,rcar-gen3-usb2-phy";
+                       reg = <0 0xee080200 0 0x700>;
+                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 703>;
+                       #phy-cells = <0>;
+                       status = "disabled";
+               };
+
+               usb2_phy1: usb-phy@ee0a0200 {
+                       compatible = "renesas,usb2-phy-r8a7796",
+                                    "renesas,rcar-gen3-usb2-phy";
+                       reg = <0 0xee0a0200 0 0x700>;
+                       clocks = <&cpg CPG_MOD 702>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 702>;
+                       #phy-cells = <0>;
+                       status = "disabled";
+               };
+
+               sdhi0: sd@ee100000 {
+                       compatible = "renesas,sdhi-r8a7796",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee100000 0 0x2000>;
+                       interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 314>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 314>;
+                       status = "disabled";
+               };
+
+               sdhi1: sd@ee120000 {
+                       compatible = "renesas,sdhi-r8a7796",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee120000 0 0x2000>;
+                       interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 313>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 313>;
+                       status = "disabled";
+               };
+
+               sdhi2: sd@ee140000 {
+                       compatible = "renesas,sdhi-r8a7796",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee140000 0 0x2000>;
+                       interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 312>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 312>;
+                       status = "disabled";
+               };
+
+               sdhi3: sd@ee160000 {
+                       compatible = "renesas,sdhi-r8a7796",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee160000 0 0x2000>;
+                       interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 311>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 311>;
+                       status = "disabled";
+               };
+
+               gic: interrupt-controller@f1010000 {
+                       compatible = "arm,gic-400";
+                       #interrupt-cells = <3>;
+                       #address-cells = <0>;
+                       interrupt-controller;
+                       reg = <0x0 0xf1010000 0 0x1000>,
+                             <0x0 0xf1020000 0 0x20000>,
+                             <0x0 0xf1040000 0 0x20000>,
+                             <0x0 0xf1060000 0 0x20000>;
+                       interrupts = <GIC_PPI 9
+                                       (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_HIGH)>;
+                       clocks = <&cpg CPG_MOD 408>;
+                       clock-names = "clk";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 408>;
                };
 
                pciec0: pcie@fe000000 {
+                       compatible = "renesas,pcie-r8a7796",
+                                    "renesas,pcie-rcar-gen3";
                        reg = <0 0xfe000000 0 0x80000>;
-                       /* placeholder */
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       bus-range = <0x00 0xff>;
+                       device_type = "pci";
+                       ranges = <0x01000000 0 0x00000000 0 0xfe100000 0 0x00100000
+                               0x02000000 0 0xfe200000 0 0xfe200000 0 0x00200000
+                               0x02000000 0 0x30000000 0 0x30000000 0 0x08000000
+                               0x42000000 0 0x38000000 0 0x38000000 0 0x08000000>;
+                       /* Map all possible DDR as inbound ranges */
+                       dma-ranges = <0x42000000 0 0x40000000 0 0x40000000 0 0x80000000>;
+                       interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0>;
+                       interrupt-map = <0 0 0 0 &gic GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 319>, <&pcie_bus_clk>;
+                       clock-names = "pcie", "pcie_bus";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 319>;
+                       status = "disabled";
                };
 
                pciec1: pcie@ee800000 {
+                       compatible = "renesas,pcie-r8a7796",
+                                    "renesas,pcie-rcar-gen3";
                        reg = <0 0xee800000 0 0x80000>;
-                       /* placeholder */
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       bus-range = <0x00 0xff>;
+                       device_type = "pci";
+                       ranges = <0x01000000 0 0x00000000 0 0xee900000 0 0x00100000
+                               0x02000000 0 0xeea00000 0 0xeea00000 0 0x00200000
+                               0x02000000 0 0xc0000000 0 0xc0000000 0 0x08000000
+                               0x42000000 0 0xc8000000 0 0xc8000000 0 0x08000000>;
+                       /* Map all possible DDR as inbound ranges */
+                       dma-ranges = <0x42000000 0 0x40000000 0 0x40000000 0 0x80000000>;
+                       interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0>;
+                       interrupt-map = <0 0 0 0 &gic GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 318>, <&pcie_bus_clk>;
+                       clock-names = "pcie", "pcie_bus";
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 318>;
+                       status = "disabled";
+               };
+
+               imr-lx4@fe860000 {
+                       compatible = "renesas,r8a7796-imr-lx4",
+                                    "renesas,imr-lx4";
+                       reg = <0 0xfe860000 0 0x2000>;
+                       interrupts = <GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 823>;
+                       power-domains = <&sysc R8A7796_PD_A3VC>;
+                       resets = <&cpg 823>;
+               };
+
+               imr-lx4@fe870000 {
+                       compatible = "renesas,r8a7796-imr-lx4",
+                                    "renesas,imr-lx4";
+                       reg = <0 0xfe870000 0 0x2000>;
+                       interrupts = <GIC_SPI 193 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 822>;
+                       power-domains = <&sysc R8A7796_PD_A3VC>;
+                       resets = <&cpg 822>;
                };
 
                fdp1@fe940000 {
                        resets = <&cpg 615>;
                };
 
-               vspb: vsp@fe960000 {
-                       compatible = "renesas,vsp2";
-                       reg = <0 0xfe960000 0 0x8000>;
-                       interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 626>;
-                       power-domains = <&sysc R8A7796_PD_A3VC>;
-                       resets = <&cpg 626>;
-
-                       renesas,fcp = <&fcpvb0>;
-               };
-
                fcpvb0: fcp@fe96f000 {
                        compatible = "renesas,fcpv";
                        reg = <0 0xfe96f000 0 0x200>;
                        resets = <&cpg 607>;
                };
 
-               vspi0: vsp@fe9a0000 {
-                       compatible = "renesas,vsp2";
-                       reg = <0 0xfe9a0000 0 0x8000>;
-                       interrupts = <GIC_SPI 444 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 631>;
-                       power-domains = <&sysc R8A7796_PD_A3VC>;
-                       resets = <&cpg 631>;
-
-                       renesas,fcp = <&fcpvi0>;
-               };
-
                fcpvi0: fcp@fe9af000 {
                        compatible = "renesas,fcpv";
                        reg = <0 0xfe9af000 0 0x200>;
                        iommus = <&ipmmu_vc0 19>;
                };
 
+               fcpvd0: fcp@fea27000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfea27000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 603>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 603>;
+                       iommus = <&ipmmu_vi0 8>;
+               };
+
+               fcpvd1: fcp@fea2f000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfea2f000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 602>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 602>;
+                       iommus = <&ipmmu_vi0 9>;
+               };
+
+               fcpvd2: fcp@fea37000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfea37000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 601>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 601>;
+                       iommus = <&ipmmu_vi0 10>;
+               };
+
+               vspb: vsp@fe960000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe960000 0 0x8000>;
+                       interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 626>;
+                       power-domains = <&sysc R8A7796_PD_A3VC>;
+                       resets = <&cpg 626>;
+
+                       renesas,fcp = <&fcpvb0>;
+               };
+
                vspd0: vsp@fea20000 {
                        compatible = "renesas,vsp2";
-                       reg = <0 0xfea20000 0 0x8000>;
+                       reg = <0 0xfea20000 0 0x5000>;
                        interrupts = <GIC_SPI 466 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 623>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
                        renesas,fcp = <&fcpvd0>;
                };
 
-               fcpvd0: fcp@fea27000 {
-                       compatible = "renesas,fcpv";
-                       reg = <0 0xfea27000 0 0x200>;
-                       clocks = <&cpg CPG_MOD 603>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 603>;
-                       iommus = <&ipmmu_vi0 8>;
-               };
-
                vspd1: vsp@fea28000 {
                        compatible = "renesas,vsp2";
-                       reg = <0 0xfea28000 0 0x8000>;
+                       reg = <0 0xfea28000 0 0x5000>;
                        interrupts = <GIC_SPI 467 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 622>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
                        renesas,fcp = <&fcpvd1>;
                };
 
-               fcpvd1: fcp@fea2f000 {
-                       compatible = "renesas,fcpv";
-                       reg = <0 0xfea2f000 0 0x200>;
-                       clocks = <&cpg CPG_MOD 602>;
-                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 602>;
-                       iommus = <&ipmmu_vi0 9>;
-               };
-
                vspd2: vsp@fea30000 {
                        compatible = "renesas,vsp2";
-                       reg = <0 0xfea30000 0 0x8000>;
+                       reg = <0 0xfea30000 0 0x5000>;
                        interrupts = <GIC_SPI 468 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 621>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
                        renesas,fcp = <&fcpvd2>;
                };
 
-               fcpvd2: fcp@fea37000 {
-                       compatible = "renesas,fcpv";
-                       reg = <0 0xfea37000 0 0x200>;
-                       clocks = <&cpg CPG_MOD 601>;
+               vspi0: vsp@fe9a0000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe9a0000 0 0x8000>;
+                       interrupts = <GIC_SPI 444 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 631>;
+                       power-domains = <&sysc R8A7796_PD_A3VC>;
+                       resets = <&cpg 631>;
+
+                       renesas,fcp = <&fcpvi0>;
+               };
+
+               csi20: csi2@fea80000 {
+                       compatible = "renesas,r8a7796-csi2";
+                       reg = <0 0xfea80000 0 0x10000>;
+                       interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 714>;
                        power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
-                       resets = <&cpg 601>;
-                       iommus = <&ipmmu_vi0 10>;
+                       resets = <&cpg 714>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       csi20vin0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&vin0csi20>;
+                                       };
+                                       csi20vin1: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&vin1csi20>;
+                                       };
+                                       csi20vin2: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&vin2csi20>;
+                                       };
+                                       csi20vin3: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint = <&vin3csi20>;
+                                       };
+                                       csi20vin4: endpoint@4 {
+                                               reg = <4>;
+                                               remote-endpoint = <&vin4csi20>;
+                                       };
+                                       csi20vin5: endpoint@5 {
+                                               reg = <5>;
+                                               remote-endpoint = <&vin5csi20>;
+                                       };
+                                       csi20vin6: endpoint@6 {
+                                               reg = <6>;
+                                               remote-endpoint = <&vin6csi20>;
+                                       };
+                                       csi20vin7: endpoint@7 {
+                                               reg = <7>;
+                                               remote-endpoint = <&vin7csi20>;
+                                       };
+                               };
+                       };
+               };
+
+               csi40: csi2@feaa0000 {
+                       compatible = "renesas,r8a7796-csi2";
+                       reg = <0 0xfeaa0000 0 0x10000>;
+                       interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 716>;
+                       power-domains = <&sysc R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 716>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       csi40vin0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&vin0csi40>;
+                                       };
+                                       csi40vin1: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&vin1csi40>;
+                                       };
+                                       csi40vin2: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&vin2csi40>;
+                                       };
+                                       csi40vin3: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint = <&vin3csi40>;
+                                       };
+                                       csi40vin4: endpoint@4 {
+                                               reg = <4>;
+                                               remote-endpoint = <&vin4csi40>;
+                                       };
+                                       csi40vin5: endpoint@5 {
+                                               reg = <5>;
+                                               remote-endpoint = <&vin5csi40>;
+                                       };
+                                       csi40vin6: endpoint@6 {
+                                               reg = <6>;
+                                               remote-endpoint = <&vin6csi40>;
+                                       };
+                                       csi40vin7: endpoint@7 {
+                                               reg = <7>;
+                                               remote-endpoint = <&vin7csi40>;
+                                       };
+                               };
+
+                       };
                };
 
                hdmi0: hdmi@fead0000 {
                                port@1 {
                                        reg = <1>;
                                };
+                               port@2 {
+                                       /* HDMI sound */
+                                       reg = <2>;
+                               };
                        };
                };
 
                        };
                };
 
-               imr-lx4@fe860000 {
-                       compatible = "renesas,r8a7796-imr-lx4",
-                                    "renesas,imr-lx4";
-                       reg = <0 0xfe860000 0 0x2000>;
-                       interrupts = <GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 823>;
-                       power-domains = <&sysc R8A7796_PD_A3VC>;
-                       resets = <&cpg 823>;
-               };
-
-               imr-lx4@fe870000 {
-                       compatible = "renesas,r8a7796-imr-lx4",
-                                    "renesas,imr-lx4";
-                       reg = <0 0xfe870000 0 0x2000>;
-                       interrupts = <GIC_SPI 193 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 822>;
-                       power-domains = <&sysc R8A7796_PD_A3VC>;
-                       resets = <&cpg 822>;
+               prr: chipid@fff00044 {
+                       compatible = "renesas,prr";
+                       reg = <0 0xfff00044 0 4>;
                };
        };
 
-       timer {
-               compatible = "arm,armv8-timer";
-               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>;
-       };
-
        thermal-zones {
                sensor_thermal1: sensor-thermal1 {
                        polling-delay-passive = <250>;
                        trips {
                                sensor1_passive: sensor1-passive {
                                        temperature = <95000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "passive";
                                };
                                sensor1_crit: sensor1-crit {
                                        temperature = <120000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "critical";
                                };
                        };
                        trips {
                                sensor2_passive: sensor2-passive {
                                        temperature = <95000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "passive";
                                };
                                sensor2_crit: sensor2-crit {
                                        temperature = <120000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "critical";
                                };
                        };
                        trips {
                                sensor3_passive: sensor3-passive {
                                        temperature = <95000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "passive";
                                };
                                sensor3_crit: sensor3-crit {
                                        temperature = <120000>;
-                                       hysteresis = <2000>;
+                                       hysteresis = <1000>;
                                        type = "critical";
                                };
                        };
                };
        };
 
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>;
+       };
+
        /* External USB clocks - can be overridden by the board */
        usb3s0_clk: usb3s0 {
                compatible = "fixed-clock";
index 06002b6..9e0cd26 100644 (file)
@@ -7,3 +7,34 @@
 
 #include "r8a77965-salvator-x.dts"
 #include "r8a77965-u-boot.dtsi"
+
+&sdhi2_pins {
+       groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
+       power-source = <1800>;
+};
+
+&sdhi2_pins_uhs {
+       groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
+};
+
+&sdhi0 {
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr104;
+       max-frequency = <208000000>;
+       status = "okay";
+};
+
+&sdhi2 {
+       mmc-hs400-1_8v;
+       max-frequency = <200000000>;
+       status = "okay";
+};
+
+&sdhi3 {
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr104;
+       max-frequency = <208000000>;
+       status = "okay";
+};
index 75d890d..340a3c7 100644 (file)
                reg = <0x0 0x48000000 0x0 0x78000000>;
        };
 };
+
+&du {
+       clocks = <&cpg CPG_MOD 724>,
+                <&cpg CPG_MOD 723>,
+                <&cpg CPG_MOD 721>,
+                <&versaclock5 1>,
+                <&x21_clk>,
+                <&versaclock5 2>;
+       clock-names = "du.0", "du.1", "du.3",
+                     "dclkin.0", "dclkin.1", "dclkin.3";
+};
+
+&hdmi0 {
+       status = "okay";
+
+       ports {
+               port@1 {
+                       reg = <1>;
+                       rcar_dw_hdmi0_out: endpoint {
+                               remote-endpoint = <&hdmi0_con>;
+                       };
+               };
+       };
+};
+
+&hdmi0_con {
+       remote-endpoint = <&rcar_dw_hdmi0_out>;
+};
index f002311..cbd29b3 100644 (file)
 &extalr_clk {
        u-boot,dm-pre-reloc;
 };
+
+&soc {
+       rpc: rpc@0xee200000 {
+               compatible = "renesas,rpc-r8a77965", "renesas,rpc";
+               reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
+               clocks = <&cpg CPG_MOD 917>;
+               bank-width = <2>;
+               status = "disabled";
+       };
+
+       sdhi0: sd@ee100000 {
+               compatible = "renesas,sdhi-r8a77965";
+               reg = <0 0xee100000 0 0x2000>;
+               interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&cpg CPG_MOD 314>;
+               max-frequency = <200000000>;
+               power-domains = <&sysc 32>;
+               resets = <&cpg 314>;
+               status = "disabled";
+       };
+
+       sdhi1: sd@ee120000 {
+               compatible = "renesas,sdhi-r8a77965";
+               reg = <0 0xee120000 0 0x2000>;
+               interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&cpg CPG_MOD 313>;
+               max-frequency = <200000000>;
+               power-domains = <&sysc 32>;
+               resets = <&cpg 313>;
+               status = "disabled";
+       };
+
+       sdhi2: sd@ee140000 {
+               compatible = "renesas,sdhi-r8a77965";
+               reg = <0 0xee140000 0 0x2000>;
+               interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&cpg CPG_MOD 312>;
+               max-frequency = <200000000>;
+               power-domains = <&sysc 32>;
+               resets = <&cpg 312>;
+               status = "disabled";
+       };
+
+       sdhi3: sd@ee160000 {
+               compatible = "renesas,sdhi-r8a77965";
+               reg = <0 0xee160000 0 0x2000>;
+               interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&cpg CPG_MOD 311>;
+               max-frequency = <200000000>;
+               power-domains = <&sysc 32>;
+               resets = <&cpg 311>;
+               status = "disabled";
+       };
+
+       ehci0: usb@ee080100 {
+               compatible = "generic-ehci";
+               reg = <0 0xee080100 0 0x100>;
+               interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&cpg CPG_MOD 703>;
+               phys = <&usb2_phy0>;
+               phy-names = "usb";
+               companion= <&ohci0>;
+               power-domains = <&sysc 32>;
+               resets = <&cpg 703>;
+       };
+
+       usb2_phy0: usb-phy@ee080200 {
+               compatible = "renesas,usb2-phy-r8a77965",
+                            "renesas,rcar-gen3-usb2-phy";
+               reg = <0 0xee080200 0 0x700>;
+               interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&cpg CPG_MOD 703>;
+               power-domains = <&sysc 32>;
+               resets = <&cpg 703>;
+               #phy-cells = <0>;
+       };
+
+       ehci1: usb@ee0a0100 {
+               compatible = "generic-ehci";
+               reg = <0 0xee0a0100 0 0x100>;
+               interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&cpg CPG_MOD 702>;
+               phys = <&usb2_phy1>;
+               phy-names = "usb";
+               companion= <&ohci1>;
+               power-domains = <&sysc 32>;
+               resets = <&cpg 702>;
+       };
+
+       usb2_phy1: usb-phy@ee0a0200 {
+               compatible = "renesas,usb2-phy-r8a77965",
+                            "renesas,rcar-gen3-usb2-phy";
+               reg = <0 0xee0a0200 0 0x700>;
+               clocks = <&cpg CPG_MOD 702>;
+               power-domains = <&sysc 32>;
+               resets = <&cpg 702>;
+               #phy-cells = <0>;
+       };
+
+       xhci0: usb@ee000000 {
+               compatible = "renesas,xhci-r8a77965",
+                            "renesas,rcar-gen3-xhci";
+               reg = <0 0xee000000 0 0xc00>;
+               interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&cpg CPG_MOD 328>;
+               power-domains = <&sysc 32>;
+               resets = <&cpg 328>;
+       };
+};
index 7a5d68b..ef8cdc6 100644 (file)
@@ -8,8 +8,9 @@
  * Copyright (C) 2016 Renesas Electronics Corp.
  */
 
-#include <dt-bindings/clock/renesas-cpg-mssr.h>
+#include <dt-bindings/clock/r8a77965-cpg-mssr.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/power/r8a77965-sysc.h>
 
 #define CPG_AUDIO_CLK_I                10
 
        #size-cells = <2>;
 
        aliases {
+               i2c0 = &i2c0;
+               i2c1 = &i2c1;
+               i2c2 = &i2c2;
+               i2c3 = &i2c3;
+               i2c4 = &i2c4;
+               i2c5 = &i2c5;
+               i2c6 = &i2c6;
                i2c7 = &i2c_dvfs;
        };
 
-       psci {
-               compatible = "arm,psci-1.0", "arm,psci-0.2";
-               method = "smc";
+       /*
+        * The external audio clocks are configured as 0 Hz fixed frequency
+        * clocks by default.
+        * Boards that provide audio clocks should override them.
+        */
+       audio_clk_a: audio_clk_a {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       audio_clk_b: audio_clk_b {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       audio_clk_c: audio_clk_c {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       /* External CAN clock - to be overridden by boards that provide it */
+       can_clk: can {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
        };
 
        cpus {
                        compatible = "arm,cortex-a57", "arm,armv8";
                        reg = <0x0>;
                        device_type = "cpu";
-                       power-domains = <&sysc 0>;
+                       power-domains = <&sysc R8A77965_PD_CA57_CPU0>;
                        next-level-cache = <&L2_CA57>;
                        enable-method = "psci";
                };
 
                a57_1: cpu@1 {
-                       compatible = "arm,cortex-a57","arm,armv8";
+                       compatible = "arm,cortex-a57", "arm,armv8";
                        reg = <0x1>;
                        device_type = "cpu";
-                       power-domains = <&sysc 1>;
+                       power-domains = <&sysc R8A77965_PD_CA57_CPU1>;
                        next-level-cache = <&L2_CA57>;
                        enable-method = "psci";
                };
 
                L2_CA57: cache-controller-0 {
                        compatible = "cache";
-                       power-domains = <&sysc 12>;
+                       power-domains = <&sysc R8A77965_PD_CA57_SCU>;
                        cache-unified;
                        cache-level = <2>;
                };
                clock-frequency = <0>;
        };
 
-       /*
-        * The external audio clocks are configured as 0 Hz fixed frequency
-        * clocks by default.
-        * Boards that provide audio clocks should override them.
-        */
-       audio_clk_a: audio_clk_a {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
-       };
-
-       audio_clk_b: audio_clk_b {
+       /* External PCIe clock - can be overridden by the board */
+       pcie_bus_clk: pcie_bus {
                compatible = "fixed-clock";
                #clock-cells = <0>;
                clock-frequency = <0>;
        };
 
-       audio_clk_c: audio_clk_c {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
+       pmu_a57 {
+               compatible = "arm,cortex-a57-pmu";
+               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&a57_0>,
+                                    <&a57_1>;
        };
 
-       /* External CAN clock - to be overridden by boards that provide it */
-       can_clk: can {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
+       psci {
+               compatible = "arm,psci-1.0", "arm,psci-0.2";
+               method = "smc";
        };
 
        /* External SCIF clock - to be overridden by boards that provide it */
                clock-frequency = <0>;
        };
 
-       /* External PCIe clock - can be overridden by the board */
-       pcie_bus_clk: pcie_bus {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
-       };
-
-       /* External USB clocks - can be overridden by the board */
-       usb3s0_clk: usb3s0 {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
-       };
-
-       usb_extal_clk: usb_extal {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
-       };
-
-       timer {
-               compatible = "arm,armv8-timer";
-               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>;
-       };
-
-       pmu_a57 {
-               compatible = "arm,cortex-a57-pmu";
-               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
-                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
-               interrupt-affinity = <&a57_0>,
-                                    <&a57_1>;
-       };
-
-       soc {
+       soc: soc {
                compatible = "simple-bus";
                interrupt-parent = <&gic>;
                #address-cells = <2>;
                #size-cells = <2>;
                ranges;
 
-               gic: interrupt-controller@f1010000 {
-                       compatible = "arm,gic-400";
-                       #interrupt-cells = <3>;
-                       #address-cells = <0>;
-                       interrupt-controller;
-                       reg = <0x0 0xf1010000 0 0x1000>,
-                             <0x0 0xf1020000 0 0x20000>,
-                             <0x0 0xf1040000 0 0x20000>,
-                             <0x0 0xf1060000 0 0x20000>;
-                       interrupts = <GIC_PPI 9
-                                       (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
-                       clocks = <&cpg CPG_MOD 408>;
-                       clock-names = "clk";
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 408>;
-               };
-
-               pfc: pin-controller@e6060000 {
-                       compatible = "renesas,pfc-r8a77965";
-                       reg = <0 0xe6060000 0 0x50c>;
-               };
-
-               cpg: clock-controller@e6150000 {
-                       compatible = "renesas,r8a77965-cpg-mssr";
-                       reg = <0 0xe6150000 0 0x1000>;
-                       clocks = <&extal_clk>, <&extalr_clk>;
-                       clock-names = "extal", "extalr";
-                       #clock-cells = <2>;
-                       #power-domain-cells = <0>;
-                       #reset-cells = <1>;
-               };
-
-               rst: reset-controller@e6160000 {
-                       compatible = "renesas,r8a77965-rst";
-                       reg = <0 0xe6160000 0 0x0200>;
-               };
-
-               prr: chipid@fff00044 {
-                       compatible = "renesas,prr";
-                       reg = <0 0xfff00044 0 4>;
-               };
-
-               sysc: system-controller@e6180000 {
-                       compatible = "renesas,r8a77965-sysc";
-                       reg = <0 0xe6180000 0 0x0400>;
-                       #power-domain-cells = <1>;
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a77965-wdt",
+                                    "renesas,rcar-gen3-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
                };
 
                gpio0: gpio@e6050000 {
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 912>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 912>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 911>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 911>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 910>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 910>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 909>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 909>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 908>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 908>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 907>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 907>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 906>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 906>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 905>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 905>;
                };
 
+               pfc: pin-controller@e6060000 {
+                       compatible = "renesas,pfc-r8a77965";
+                       reg = <0 0xe6060000 0 0x50c>;
+               };
+
+               cpg: clock-controller@e6150000 {
+                       compatible = "renesas,r8a77965-cpg-mssr";
+                       reg = <0 0xe6150000 0 0x1000>;
+                       clocks = <&extal_clk>, <&extalr_clk>;
+                       clock-names = "extal", "extalr";
+                       #clock-cells = <2>;
+                       #power-domain-cells = <0>;
+                       #reset-cells = <1>;
+               };
+
+               rst: reset-controller@e6160000 {
+                       compatible = "renesas,r8a77965-rst";
+                       reg = <0 0xe6160000 0 0x0200>;
+               };
+
+               sysc: system-controller@e6180000 {
+                       compatible = "renesas,r8a77965-sysc";
+                       reg = <0 0xe6180000 0 0x0400>;
+                       #power-domain-cells = <1>;
+               };
+
+               tsc: thermal@e6198000 {
+                       compatible = "renesas,r8a77965-thermal";
+                       reg = <0 0xe6198000 0 0x100>,
+                             <0 0xe61a0000 0 0x100>,
+                             <0 0xe61a8000 0 0x100>;
+                       interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 522>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 522>;
+                       #thermal-sensor-cells = <1>;
+                       status = "okay";
+               };
+
                intc_ex: interrupt-controller@e61c0000 {
                        compatible = "renesas,intc-ex-r8a77965", "renesas,irqc";
                        #interrupt-cells = <2>;
                                      GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH
                                      GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 407>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 407>;
                };
 
-               dmac0: dma-controller@e6700000 {
-                       compatible = "renesas,dmac-r8a77965",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xe6700000 0 0x10000>;
-                       interrupts = <GIC_SPI 199 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 201 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 203 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 204 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 206 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 207 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 209 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 210 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 211 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 212 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 213 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 214 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                       "ch0", "ch1", "ch2", "ch3",
-                                       "ch4", "ch5", "ch6", "ch7",
-                                       "ch8", "ch9", "ch10", "ch11",
-                                       "ch12", "ch13", "ch14", "ch15";
-                       clocks = <&cpg CPG_MOD 219>;
-                       clock-names = "fck";
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 219>;
-                       #dma-cells = <1>;
-                       dma-channels = <16>;
+               i2c0: i2c@e6500000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77965",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe6500000 0 0x40>;
+                       interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 931>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 931>;
+                       dmas = <&dmac1 0x91>, <&dmac1 0x90>,
+                              <&dmac2 0x91>, <&dmac2 0x90>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       i2c-scl-internal-delay-ns = <110>;
+                       status = "disabled";
                };
 
-               dmac1: dma-controller@e7300000 {
-                       compatible = "renesas,dmac-r8a77965",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xe7300000 0 0x10000>;
-                       interrupts = <GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 308 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 309 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 310 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 311 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 312 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 313 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 314 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 315 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 316 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 318 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 319 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                       "ch0", "ch1", "ch2", "ch3",
-                                       "ch4", "ch5", "ch6", "ch7",
-                                       "ch8", "ch9", "ch10", "ch11",
-                                       "ch12", "ch13", "ch14", "ch15";
-                       clocks = <&cpg CPG_MOD 218>;
-                       clock-names = "fck";
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 218>;
-                       #dma-cells = <1>;
-                       dma-channels = <16>;
+               i2c1: i2c@e6508000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77965",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe6508000 0 0x40>;
+                       interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 930>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 930>;
+                       dmas = <&dmac1 0x93>, <&dmac1 0x92>,
+                              <&dmac2 0x93>, <&dmac2 0x92>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
                };
 
-               dmac2: dma-controller@e7310000 {
-                       compatible = "renesas,dmac-r8a77965",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xe7310000 0 0x10000>;
-                       interrupts = <GIC_SPI 416 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 417 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 418 IRQ_TYPE_LEVEL_HIGH
+               i2c2: i2c@e6510000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77965",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe6510000 0 0x40>;
+                       interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 929>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 929>;
+                       dmas = <&dmac1 0x95>, <&dmac1 0x94>,
+                              <&dmac2 0x95>, <&dmac2 0x94>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c3: i2c@e66d0000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77965",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe66d0000 0 0x40>;
+                       interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 928>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 928>;
+                       dmas = <&dmac0 0x97>, <&dmac0 0x96>;
+                       dma-names = "tx", "rx";
+                       i2c-scl-internal-delay-ns = <110>;
+                       status = "disabled";
+               };
+
+               i2c4: i2c@e66d8000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77965",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe66d8000 0 0x40>;
+                       interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 927>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 927>;
+                       dmas = <&dmac0 0x99>, <&dmac0 0x98>;
+                       dma-names = "tx", "rx";
+                       i2c-scl-internal-delay-ns = <110>;
+                       status = "disabled";
+               };
+
+               i2c5: i2c@e66e0000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77965",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe66e0000 0 0x40>;
+                       interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 919>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 919>;
+                       dmas = <&dmac0 0x9b>, <&dmac0 0x9a>;
+                       dma-names = "tx", "rx";
+                       i2c-scl-internal-delay-ns = <110>;
+                       status = "disabled";
+               };
+
+               i2c6: i2c@e66e8000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77965",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe66e8000 0 0x40>;
+                       interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 918>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 918>;
+                       dmas = <&dmac0 0x9d>, <&dmac0 0x9c>;
+                       dma-names = "tx", "rx";
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c_dvfs: i2c@e60b0000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a77965",
+                                    "renesas,rcar-gen3-iic",
+                                    "renesas,rmobile-iic";
+                       reg = <0 0xe60b0000 0 0x425>;
+                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 926>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 926>;
+                       dmas = <&dmac0 0x11>, <&dmac0 0x10>;
+                       dma-names = "tx", "rx";
+                       status = "disabled";
+               };
+
+               hscif0: serial@e6540000 {
+                       compatible = "renesas,hscif-r8a77965",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe6540000 0 0x60>;
+                       interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 520>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x31>, <&dmac1 0x30>,
+                              <&dmac2 0x31>, <&dmac2 0x30>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 520>;
+                       status = "disabled";
+               };
+
+               hscif1: serial@e6550000 {
+                       compatible = "renesas,hscif-r8a77965",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe6550000 0 0x60>;
+                       interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 519>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x33>, <&dmac1 0x32>,
+                              <&dmac2 0x33>, <&dmac2 0x32>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 519>;
+                       status = "disabled";
+               };
+
+               hscif2: serial@e6560000 {
+                       compatible = "renesas,hscif-r8a77965",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe6560000 0 0x60>;
+                       interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 518>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x35>, <&dmac1 0x34>,
+                              <&dmac2 0x35>, <&dmac2 0x34>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 518>;
+                       status = "disabled";
+               };
+
+               hscif3: serial@e66a0000 {
+                       compatible = "renesas,hscif-r8a77965",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe66a0000 0 0x60>;
+                       interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 517>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x37>, <&dmac0 0x36>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 517>;
+                       status = "disabled";
+               };
+
+               hscif4: serial@e66b0000 {
+                       compatible = "renesas,hscif-r8a77965",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe66b0000 0 0x60>;
+                       interrupts = <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 516>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x39>, <&dmac0 0x38>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 516>;
+                       status = "disabled";
+               };
+
+               hsusb: usb@e6590000 {
+                       compatible = "renesas,usbhs-r8a7796",
+                                    "renesas,rcar-gen3-usbhs";
+                       reg = <0 0xe6590000 0 0x100>;
+                       interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 704>;
+                       dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
+                              <&usb_dmac1 0>, <&usb_dmac1 1>;
+                       dma-names = "ch0", "ch1", "ch2", "ch3";
+                       renesas,buswait = <11>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 704>;
+                       status = "disabled";
+               };
+
+               usb_dmac0: dma-controller@e65a0000 {
+                       compatible = "renesas,r8a77965-usb-dmac",
+                                    "renesas,usb-dmac";
+                       reg = <0 0xe65a0000 0 0x100>;
+                       interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1";
+                       clocks = <&cpg CPG_MOD 330>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 330>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac1: dma-controller@e65b0000 {
+                       compatible = "renesas,r8a77965-usb-dmac",
+                                    "renesas,usb-dmac";
+                       reg = <0 0xe65b0000 0 0x100>;
+                       interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1";
+                       clocks = <&cpg CPG_MOD 331>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 331>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb3_phy0: usb-phy@e65ee000 {
+                       compatible = "renesas,r8a77965-usb3-phy",
+                                    "renesas,rcar-gen3-usb3-phy";
+                       reg = <0 0xe65ee000 0 0x90>;
+                       clocks = <&cpg CPG_MOD 328>, <&usb3s0_clk>,
+                                <&usb_extal_clk>;
+                       clock-names = "usb3-if", "usb3s_clk", "usb_extal";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 328>;
+                       #phy-cells = <0>;
+                       status = "disabled";
+               };
+
+               dmac0: dma-controller@e6700000 {
+                       compatible = "renesas,dmac-r8a77965",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xe6700000 0 0x10000>;
+                       interrupts = <GIC_SPI 199 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 201 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 203 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 204 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 206 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 207 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 209 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 210 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 211 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 212 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 213 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 214 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                       "ch0", "ch1", "ch2", "ch3",
+                                       "ch4", "ch5", "ch6", "ch7",
+                                       "ch8", "ch9", "ch10", "ch11",
+                                       "ch12", "ch13", "ch14", "ch15";
+                       clocks = <&cpg CPG_MOD 219>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 219>;
+                       #dma-cells = <1>;
+                       dma-channels = <16>;
+               };
+
+               dmac1: dma-controller@e7300000 {
+                       compatible = "renesas,dmac-r8a77965",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xe7300000 0 0x10000>;
+                       interrupts = <GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 308 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 309 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 310 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 311 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 312 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 313 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 314 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 315 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 316 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 318 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 319 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                       "ch0", "ch1", "ch2", "ch3",
+                                       "ch4", "ch5", "ch6", "ch7",
+                                       "ch8", "ch9", "ch10", "ch11",
+                                       "ch12", "ch13", "ch14", "ch15";
+                       clocks = <&cpg CPG_MOD 218>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 218>;
+                       #dma-cells = <1>;
+                       dma-channels = <16>;
+               };
+
+               dmac2: dma-controller@e7310000 {
+                       compatible = "renesas,dmac-r8a77965",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xe7310000 0 0x10000>;
+                       interrupts = <GIC_SPI 416 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 417 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 418 IRQ_TYPE_LEVEL_HIGH
                                      GIC_SPI 419 IRQ_TYPE_LEVEL_HIGH
                                      GIC_SPI 420 IRQ_TYPE_LEVEL_HIGH
                                      GIC_SPI 421 IRQ_TYPE_LEVEL_HIGH
                                        "ch12", "ch13", "ch14", "ch15";
                        clocks = <&cpg CPG_MOD 217>;
                        clock-names = "fck";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 217>;
                        #dma-cells = <1>;
                        dma-channels = <16>;
                };
 
+               ipmmu_ds0: mmu@e6740000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xe6740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 0>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_ds1: mmu@e7740000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xe7740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 1>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_hc: mmu@e6570000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xe6570000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 2>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_ir: mmu@ff8b0000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xff8b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 3>;
+                       power-domains = <&sysc R8A77965_PD_A3IR>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mm: mmu@e67b0000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xe67b0000 0 0x1000>;
+                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mp: mmu@ec670000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xec670000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 4>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv0: mmu@fd800000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xfd800000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 6>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_rt: mmu@ffc80000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xffc80000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 10>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vc0: mmu@fe6b0000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xfe6b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 12>;
+                       power-domains = <&sysc R8A77965_PD_A3VC>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vi0: mmu@febd0000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xfebd0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 14>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vp0: mmu@fe990000 {
+                       compatible = "renesas,ipmmu-r8a77965";
+                       reg = <0 0xfe990000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 16>;
+                       power-domains = <&sysc R8A77965_PD_A3VP>;
+                       #iommu-cells = <1>;
+               };
+
+               avb: ethernet@e6800000 {
+                       compatible = "renesas,etheravb-r8a77965",
+                                    "renesas,etheravb-rcar-gen3";
+                       reg = <0 0xe6800000 0 0x800>, <0 0xe6a00000 0 0x10000>;
+                       interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1", "ch2", "ch3",
+                                         "ch4", "ch5", "ch6", "ch7",
+                                         "ch8", "ch9", "ch10", "ch11",
+                                         "ch12", "ch13", "ch14", "ch15",
+                                         "ch16", "ch17", "ch18", "ch19",
+                                         "ch20", "ch21", "ch22", "ch23",
+                                         "ch24";
+                       clocks = <&cpg CPG_MOD 812>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 812>;
+                       phy-mode = "rgmii";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               pwm0: pwm@e6e30000 {
+                       compatible = "renesas,pwm-r8a77965", "renesas,pwm-rcar";
+                       reg = <0 0xe6e30000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm1: pwm@e6e31000 {
+                       compatible = "renesas,pwm-r8a77965", "renesas,pwm-rcar";
+                       reg = <0 0xe6e31000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm2: pwm@e6e32000 {
+                       compatible = "renesas,pwm-r8a77965", "renesas,pwm-rcar";
+                       reg = <0 0xe6e32000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm3: pwm@e6e33000 {
+                       compatible = "renesas,pwm-r8a77965", "renesas,pwm-rcar";
+                       reg = <0 0xe6e33000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm4: pwm@e6e34000 {
+                       compatible = "renesas,pwm-r8a77965", "renesas,pwm-rcar";
+                       reg = <0 0xe6e34000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm5: pwm@e6e35000 {
+                       compatible = "renesas,pwm-r8a77965", "renesas,pwm-rcar";
+                       reg = <0 0xe6e35000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
+               pwm6: pwm@e6e36000 {
+                       compatible = "renesas,pwm-r8a77965", "renesas,pwm-rcar";
+                       reg = <0 0xe6e36000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       resets = <&cpg 523>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       status = "disabled";
+               };
+
                scif0: serial@e6e60000 {
                        compatible = "renesas,scif-r8a77965",
                                     "renesas,rcar-gen3-scif", "renesas,scif";
                        reg = <0 0xe6e60000 0 64>;
                        interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 207>,
-                                <&cpg CPG_CORE 20>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac1 0x51>, <&dmac1 0x50>,
                               <&dmac2 0x51>, <&dmac2 0x50>;
                        dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 207>;
                        status = "disabled";
                };
                        reg = <0 0xe6e68000 0 64>;
                        interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 206>,
-                                <&cpg CPG_CORE 20>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac1 0x53>, <&dmac1 0x52>,
                               <&dmac2 0x53>, <&dmac2 0x52>;
                        dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 206>;
                        status = "disabled";
                };
                        reg = <0 0xe6e88000 0 64>;
                        interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 310>,
-                                <&cpg CPG_CORE 20>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 310>;
                        status = "disabled";
                };
                        reg = <0 0xe6c50000 0 64>;
                        interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 204>,
-                                <&cpg CPG_CORE 20>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac0 0x57>, <&dmac0 0x56>;
                        dma-names = "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 204>;
                        status = "disabled";
                };
                        reg = <0 0xe6c40000 0 64>;
                        interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 203>,
-                                <&cpg CPG_CORE 20>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac0 0x59>, <&dmac0 0x58>;
                        dma-names = "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 203>;
                        status = "disabled";
                };
                        reg = <0 0xe6f30000 0 64>;
                        interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 202>,
-                                <&cpg CPG_CORE 20>,
+                                <&cpg CPG_CORE R8A77965_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac1 0x5b>, <&dmac1 0x5a>,
                               <&dmac2 0x5b>, <&dmac2 0x5a>;
                        dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 202>;
                        status = "disabled";
                };
 
-               avb: ethernet@e6800000 {
-                       compatible = "renesas,etheravb-r8a77965",
-                                    "renesas,etheravb-rcar-gen3";
-                       reg = <0 0xe6800000 0 0x800>, <0 0xe6a00000 0 0x10000>;
-                       interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "ch0", "ch1", "ch2", "ch3",
-                                         "ch4", "ch5", "ch6", "ch7",
-                                         "ch8", "ch9", "ch10", "ch11",
-                                         "ch12", "ch13", "ch14", "ch15",
-                                         "ch16", "ch17", "ch18", "ch19",
-                                         "ch20", "ch21", "ch22", "ch23",
-                                         "ch24";
-                       clocks = <&cpg CPG_MOD 812>;
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 812>;
-                       phy-mode = "rgmii";
+               msiof0: spi@e6e90000 {
+                       compatible = "renesas,msiof-r8a77965",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6e90000 0 0x0064>;
+                       interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 211>;
+                       dmas = <&dmac1 0x41>, <&dmac1 0x40>,
+                              <&dmac2 0x41>, <&dmac2 0x40>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 211>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };
 
-               csi20: csi2@fea80000 {
-                       reg = <0 0xfea80000 0 0x10000>;
-                       /* placeholder */
+               msiof1: spi@e6ea0000 {
+                       compatible = "renesas,msiof-r8a77965",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6ea0000 0 0x0064>;
+                       interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 210>;
+                       dmas = <&dmac1 0x43>, <&dmac1 0x42>,
+                              <&dmac2 0x43>, <&dmac2 0x42>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 210>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof2: spi@e6c00000 {
+                       compatible = "renesas,msiof-r8a77965",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6c00000 0 0x0064>;
+                       interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 209>;
+                       dmas = <&dmac0 0x45>, <&dmac0 0x44>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 209>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof3: spi@e6c10000 {
+                       compatible = "renesas,msiof-r8a77965",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6c10000 0 0x0064>;
+                       interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 208>;
+                       dmas = <&dmac0 0x47>, <&dmac0 0x46>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 208>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               vin0: video@e6ef0000 {
+                       compatible = "renesas,vin-r8a77965";
+                       reg = <0 0xe6ef0000 0 0x1000>;
+                       interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 811>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 811>;
+                       renesas,id = <0>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin0csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin0>;
+                                       };
+                                       vin0csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin0>;
+                                       };
+                               };
+                       };
+               };
+
+               vin1: video@e6ef1000 {
+                       compatible = "renesas,vin-r8a77965";
+                       reg = <0 0xe6ef1000 0 0x1000>;
+                       interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 810>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 810>;
+                       renesas,id = <1>;
+                       status = "disabled";
 
                        ports {
                                #address-cells = <1>;
                                #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin1csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin1>;
+                                       };
+                                       vin1csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin1>;
+                                       };
+                               };
                        };
                };
 
-               csi40: csi2@feaa0000 {
-                       reg = <0 0xfeaa0000 0 0x10000>;
-                       /* placeholder */
+               vin2: video@e6ef2000 {
+                       compatible = "renesas,vin-r8a77965";
+                       reg = <0 0xe6ef2000 0 0x1000>;
+                       interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 809>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 809>;
+                       renesas,id = <2>;
+                       status = "disabled";
 
                        ports {
                                #address-cells = <1>;
                                #size-cells = <0>;
-                       };
-               };
 
-               vin0: video@e6ef0000 {
-                       reg = <0 0xe6ef0000 0 0x1000>;
-                       /* placeholder */
-               };
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
 
-               vin1: video@e6ef1000 {
-                       reg = <0 0xe6ef1000 0 0x1000>;
-                       /* placeholder */
-               };
+                                       reg = <1>;
 
-               vin2: video@e6ef2000 {
-                       reg = <0 0xe6ef2000 0 0x1000>;
-                       /* placeholder */
+                                       vin2csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin2>;
+                                       };
+                                       vin2csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin2>;
+                                       };
+                               };
+                       };
                };
 
                vin3: video@e6ef3000 {
+                       compatible = "renesas,vin-r8a77965";
                        reg = <0 0xe6ef3000 0 0x1000>;
-                       /* placeholder */
+                       interrupts = <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 808>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 808>;
+                       renesas,id = <3>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin3csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin3>;
+                                       };
+                                       vin3csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin3>;
+                                       };
+                               };
+                       };
                };
 
                vin4: video@e6ef4000 {
+                       compatible = "renesas,vin-r8a77965";
                        reg = <0 0xe6ef4000 0 0x1000>;
-                       /* placeholder */
+                       interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 807>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 807>;
+                       renesas,id = <4>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin4csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin4>;
+                                       };
+                                       vin4csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin4>;
+                                       };
+                               };
+                       };
                };
 
                vin5: video@e6ef5000 {
+                       compatible = "renesas,vin-r8a77965";
                        reg = <0 0xe6ef5000 0 0x1000>;
-                       /* placeholder */
+                       interrupts = <GIC_SPI 175 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 806>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 806>;
+                       renesas,id = <5>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin5csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin5>;
+                                       };
+                                       vin5csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin5>;
+                                       };
+                               };
+                       };
                };
 
                vin6: video@e6ef6000 {
+                       compatible = "renesas,vin-r8a77965";
                        reg = <0 0xe6ef6000 0 0x1000>;
-                       /* placeholder */
+                       interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 805>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 805>;
+                       renesas,id = <6>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin6csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin6>;
+                                       };
+                                       vin6csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin6>;
+                                       };
+                               };
+                       };
                };
 
                vin7: video@e6ef7000 {
+                       compatible = "renesas,vin-r8a77965";
                        reg = <0 0xe6ef7000 0 0x1000>;
+                       interrupts = <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 804>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 804>;
+                       renesas,id = <7>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin7csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint= <&csi20vin7>;
+                                       };
+                                       vin7csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin7>;
+                                       };
+                               };
+                       };
+               };
+
+               rcar_sound: sound@ec500000 {
+                       reg =   <0 0xec500000 0 0x1000>, /* SCU */
+                               <0 0xec5a0000 0 0x100>,  /* ADG */
+                               <0 0xec540000 0 0x1000>, /* SSIU */
+                               <0 0xec541000 0 0x280>,  /* SSI */
+                               <0 0xec740000 0 0x200>;  /* Audio DMAC peri peri*/
                        /* placeholder */
+
+                       rcar_sound,dvc {
+                               dvc0: dvc-0 {
+                               };
+                               dvc1: dvc-1 {
+                               };
+                       };
+
+                       rcar_sound,src {
+                               src0: src-0 {
+                               };
+                               src1: src-1 {
+                               };
+                       };
+
+                       rcar_sound,ssi {
+                               ssi0: ssi-0 {
+                               };
+                               ssi1: ssi-1 {
+                               };
+                       };
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               port@0 {
+                                       reg = <0>;
+                               };
+                               port@1 {
+                                       reg = <1>;
+                               };
+                       };
+               };
+
+               xhci0: usb@ee000000 {
+                       compatible = "renesas,xhci-r8a77965",
+                                    "renesas,rcar-gen3-xhci";
+                       reg = <0 0xee000000 0 0xc00>;
+                       interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 328>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 328>;
+                       status = "disabled";
+               };
+
+               usb3_peri0: usb@ee020000 {
+                       compatible = "renesas,r8a77965-usb3-peri",
+                                    "renesas,rcar-gen3-usb3-peri";
+                       reg = <0 0xee020000 0 0x400>;
+                       interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 328>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 328>;
+                       status = "disabled";
                };
 
                ohci0: usb@ee080000 {
+                       compatible = "generic-ohci";
                        reg = <0 0xee080000 0 0x100>;
-                       /* placeholder */
+                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 703>;
+                       status = "disabled";
+               };
+
+               ohci1: usb@ee0a0000 {
+                       compatible = "generic-ohci";
+                       reg = <0 0xee0a0000 0 0x100>;
+                       interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 702>;
+                       phys = <&usb2_phy1>;
+                       phy-names = "usb";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 702>;
+                       status = "disabled";
                };
 
                ehci0: usb@ee080100 {
                        clocks = <&cpg CPG_MOD 703>;
                        phys = <&usb2_phy0>;
                        phy-names = "usb";
-                       companion= <&ohci0>;
-                       power-domains = <&sysc 32>;
+                       companion = <&ohci0>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 703>;
                        status = "disabled";
                };
 
+               ehci1: usb@ee0a0100 {
+                       compatible = "generic-ehci";
+                       reg = <0 0xee0a0100 0 0x100>;
+                       interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 702>;
+                       phys = <&usb2_phy1>;
+                       phy-names = "usb";
+                       companion = <&ohci1>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 702>;
+                       status = "disabled";
+               };
+
                usb2_phy0: usb-phy@ee080200 {
                        compatible = "renesas,usb2-phy-r8a77965",
                                     "renesas,rcar-gen3-usb2-phy";
                        reg = <0 0xee080200 0 0x700>;
                        interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 703>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
                        resets = <&cpg 703>;
                        #phy-cells = <0>;
                        status = "disabled";
                };
 
-               ohci1: usb@ee0a0000 {
-                       reg = <0 0xee0a0000 0 0x100>;
-                       /* placeholder */
+               usb2_phy1: usb-phy@ee0a0200 {
+                       compatible = "renesas,usb2-phy-r8a77965",
+                                    "renesas,rcar-gen3-usb2-phy";
+                       reg = <0 0xee0a0200 0 0x700>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 703>;
+                       #phy-cells = <0>;
+                       status = "disabled";
                };
 
-               ehci1: usb@ee0a0100 {
-                       compatible = "generic-ehci";
-                       reg = <0 0xee0a0100 0 0x100>;
-                       interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 702>;
-                       phys = <&usb2_phy1>;
-                       phy-names = "usb";
-                       companion= <&ohci1>;
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 702>;
+               sdhi0: sd@ee100000 {
+                       compatible = "renesas,sdhi-r8a77965",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee100000 0 0x2000>;
+                       interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 314>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 314>;
+                       status = "disabled";
+               };
+
+               sdhi1: sd@ee120000 {
+                       compatible = "renesas,sdhi-r8a77965",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee120000 0 0x2000>;
+                       interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 313>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 313>;
+                       status = "disabled";
+               };
+
+               sdhi2: sd@ee140000 {
+                       compatible = "renesas,sdhi-r8a77965",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee140000 0 0x2000>;
+                       interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 312>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 312>;
+                       status = "disabled";
+               };
+
+               sdhi3: sd@ee160000 {
+                       compatible = "renesas,sdhi-r8a77965",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee160000 0 0x2000>;
+                       interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 311>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 311>;
+                       status = "disabled";
+               };
+
+               gic: interrupt-controller@f1010000 {
+                       compatible = "arm,gic-400";
+                       #interrupt-cells = <3>;
+                       #address-cells = <0>;
+                       interrupt-controller;
+                       reg = <0x0 0xf1010000 0 0x1000>,
+                             <0x0 0xf1020000 0 0x20000>,
+                             <0x0 0xf1040000 0 0x20000>,
+                             <0x0 0xf1060000 0 0x20000>;
+                       interrupts = <GIC_PPI 9
+                                       (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
+                       clocks = <&cpg CPG_MOD 408>;
+                       clock-names = "clk";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 408>;
+               };
+
+               pciec0: pcie@fe000000 {
+                       compatible = "renesas,pcie-r8a77965",
+                                    "renesas,pcie-rcar-gen3";
+                       reg = <0 0xfe000000 0 0x80000>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       bus-range = <0x00 0xff>;
+                       device_type = "pci";
+                       ranges = <0x01000000 0 0x00000000 0 0xfe100000 0 0x00100000
+                               0x02000000 0 0xfe200000 0 0xfe200000 0 0x00200000
+                               0x02000000 0 0x30000000 0 0x30000000 0 0x08000000
+                               0x42000000 0 0x38000000 0 0x38000000 0 0x08000000>;
+                       /* Map all possible DDR as inbound ranges */
+                       dma-ranges = <0x42000000 0 0x40000000 0 0x40000000 0 0x80000000>;
+                       interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0>;
+                       interrupt-map = <0 0 0 0 &gic GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 319>, <&pcie_bus_clk>;
+                       clock-names = "pcie", "pcie_bus";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 319>;
                        status = "disabled";
                };
 
-               i2c0: i2c@e6500000 {
-                       reg = <0 0xe6500000 0 0x40>;
-                       /* placeholder */
+               pciec1: pcie@ee800000 {
+                       compatible = "renesas,pcie-r8a77965",
+                                    "renesas,pcie-rcar-gen3";
+                       reg = <0 0xee800000 0 0x80000>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       bus-range = <0x00 0xff>;
+                       device_type = "pci";
+                       ranges = <0x01000000 0 0x00000000 0 0xee900000 0 0x00100000
+                               0x02000000 0 0xeea00000 0 0xeea00000 0 0x00200000
+                               0x02000000 0 0xc0000000 0 0xc0000000 0 0x08000000
+                               0x42000000 0 0xc8000000 0 0xc8000000 0 0x08000000>;
+                       /* Map all possible DDR as inbound ranges */
+                       dma-ranges = <0x42000000 0 0x40000000 0 0x40000000 0 0x80000000>;
+                       interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0>;
+                       interrupt-map = <0 0 0 0 &gic GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 318>, <&pcie_bus_clk>;
+                       clock-names = "pcie", "pcie_bus";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 318>;
+                       status = "disabled";
                };
 
-               i2c1: i2c@e6508000 {
-                       reg = <0 0xe6508000 0 0x40>;
-                       /* placeholder */
+               fcpf0: fcp@fe950000 {
+                       compatible = "renesas,fcpf";
+                       reg = <0 0xfe950000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 615>;
+                       power-domains = <&sysc R8A77965_PD_A3VP>;
+                       resets = <&cpg 615>;
                };
 
-               i2c2: i2c@e6510000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
+               vspb: vsp@fe960000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe960000 0 0x8000>;
+                       interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 626>;
+                       power-domains = <&sysc R8A77965_PD_A3VP>;
+                       resets = <&cpg 626>;
 
-                       reg = <0 0xe6510000 0 0x40>;
-                       /* placeholder */
+                       renesas,fcp = <&fcpvb0>;
                };
 
-               i2c3: i2c@e66d0000 {
-                       reg = <0 0xe66d0000 0 0x40>;
-                       /* placeholder */
+               fcpvb0: fcp@fe96f000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfe96f000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 607>;
+                       power-domains = <&sysc R8A77965_PD_A3VP>;
+                       resets = <&cpg 607>;
                };
 
-               i2c4: i2c@e66d8000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
+               vspi0: vsp@fe9a0000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfe9a0000 0 0x8000>;
+                       interrupts = <GIC_SPI 444 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 631>;
+                       power-domains = <&sysc R8A77965_PD_A3VP>;
+                       resets = <&cpg 631>;
 
-                       reg = <0 0xe66d8000 0 0x40>;
-                       /* placeholder */
+                       renesas,fcp = <&fcpvi0>;
                };
 
-               i2c5: i2c@e66e0000 {
-                       reg = <0 0xe66e0000 0 0x40>;
-                       /* placeholder */
+               fcpvi0: fcp@fe9af000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfe9af000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 611>;
+                       power-domains = <&sysc R8A77965_PD_A3VP>;
+                       resets = <&cpg 611>;
                };
 
-               i2c6: i2c@e66e8000 {
-                       reg = <0 0xe66e8000 0 0x40>;
-                       /* placeholder */
-               };
+               vspd0: vsp@fea20000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfea20000 0 0x5000>;
+                       interrupts = <GIC_SPI 466 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 623>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 623>;
 
-               i2c_dvfs: i2c@e60b0000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,iic-r8a77965",
-                                    "renesas,rcar-gen3-iic",
-                                    "renesas,rmobile-iic";
-                       reg = <0 0xe60b0000 0 0x425>;
-                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 926>;
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 926>;
-                       dmas = <&dmac0 0x11>, <&dmac0 0x10>;
-                       dma-names = "tx", "rx";
-                       status = "disabled";
+                       renesas,fcp = <&fcpvd0>;
                };
 
-               pwm0: pwm@e6e30000 {
-                       reg = <0 0xe6e30000 0 8>;
-                       /* placeholder */
+               fcpvd0: fcp@fea27000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfea27000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 603>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 603>;
                };
 
-               pwm1: pwm@e6e31000 {
-                       reg = <0 0xe6e31000 0 8>;
-                       #pwm-cells = <2>;
-                       /* placeholder */
-               };
+               vspd1: vsp@fea28000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfea28000 0 0x5000>;
+                       interrupts = <GIC_SPI 467 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 622>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 622>;
 
-               pwm2: pwm@e6e32000 {
-                       reg = <0 0xe6e32000 0 8>;
-                       /* placeholder */
+                       renesas,fcp = <&fcpvd1>;
                };
 
-               pwm3: pwm@e6e33000 {
-                       reg = <0 0xe6e33000 0 8>;
-                       /* placeholder */
+               fcpvd1: fcp@fea2f000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfea2f000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 602>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 602>;
                };
 
-               pwm4: pwm@e6e34000 {
-                       reg = <0 0xe6e34000 0 8>;
-                       /* placeholder */
+               csi20: csi2@fea80000 {
+                       compatible = "renesas,r8a77965-csi2";
+                       reg = <0 0xfea80000 0 0x10000>;
+                       interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 714>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 714>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       csi20vin0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&vin0csi20>;
+                                       };
+                                       csi20vin1: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&vin1csi20>;
+                                       };
+                                       csi20vin2: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&vin2csi20>;
+                                       };
+                                       csi20vin3: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint = <&vin3csi20>;
+                                       };
+                                       csi20vin4: endpoint@4 {
+                                               reg = <4>;
+                                               remote-endpoint = <&vin4csi20>;
+                                       };
+                                       csi20vin5: endpoint@5 {
+                                               reg = <5>;
+                                               remote-endpoint = <&vin5csi20>;
+                                       };
+                                       csi20vin6: endpoint@6 {
+                                               reg = <6>;
+                                               remote-endpoint = <&vin6csi20>;
+                                       };
+                                       csi20vin7: endpoint@7 {
+                                               reg = <7>;
+                                               remote-endpoint = <&vin7csi20>;
+                                       };
+                               };
+                       };
                };
 
-               pwm5: pwm@e6e35000 {
-                       reg = <0 0xe6e35000 0 8>;
-                       /* placeholder */
+               csi40: csi2@feaa0000 {
+                       compatible = "renesas,r8a77965-csi2";
+                       reg = <0 0xfeaa0000 0 0x10000>;
+                       interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 716>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 716>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       csi40vin0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&vin0csi40>;
+                                       };
+                                       csi40vin1: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&vin1csi40>;
+                                       };
+                                       csi40vin2: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&vin2csi40>;
+                                       };
+                                       csi40vin3: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint = <&vin3csi40>;
+                                       };
+                                       csi40vin4: endpoint@4 {
+                                               reg = <4>;
+                                               remote-endpoint = <&vin4csi40>;
+                                       };
+                                       csi40vin5: endpoint@5 {
+                                               reg = <5>;
+                                               remote-endpoint = <&vin5csi40>;
+                                       };
+                                       csi40vin6: endpoint@6 {
+                                               reg = <6>;
+                                               remote-endpoint = <&vin6csi40>;
+                                       };
+                                       csi40vin7: endpoint@7 {
+                                               reg = <7>;
+                                               remote-endpoint = <&vin7csi40>;
+                                       };
+                               };
+                       };
                };
 
-               pwm6: pwm@e6e36000 {
-                       reg = <0 0xe6e36000 0 8>;
-                       /* placeholder */
+               hdmi0: hdmi@fead0000 {
+                       compatible = "renesas,r8a77965-hdmi",
+                                    "renesas,rcar-gen3-hdmi";
+                       reg = <0 0xfead0000 0 0x10000>;
+                       interrupts = <GIC_SPI 389 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 729>,
+                                <&cpg CPG_CORE R8A77965_CLK_HDMI>;
+                       clock-names = "iahb", "isfr";
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 729>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               port@0 {
+                                       reg = <0>;
+                                       dw_hdmi0_in: endpoint {
+                                               remote-endpoint = <&du_out_hdmi0>;
+                                       };
+                               };
+                               port@1 {
+                                       reg = <1>;
+                               };
+                       };
                };
 
                du: display@feb00000 {
-                       reg = <0 0xfeb00000 0 0x80000>,
-                             <0 0xfeb90000 0 0x14>;
-                       /* placeholder */
+                       compatible = "renesas,du-r8a77965";
+                       reg = <0 0xfeb00000 0 0x80000>;
+                       reg-names = "du";
+                       interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 724>,
+                                <&cpg CPG_MOD 723>,
+                                <&cpg CPG_MOD 721>;
+                       clock-names = "du.0", "du.1", "du.3";
+                       status = "disabled";
+
+                       vsps = <&vspd0 0 &vspd1 0 &vspd0 1>;
 
                        ports {
                                #address-cells = <1>;
                                port@1 {
                                        reg = <1>;
                                        du_out_hdmi0: endpoint {
+                                               remote-endpoint = <&dw_hdmi0_in>;
                                        };
                                };
                                port@2 {
                        };
                };
 
-               hsusb: usb@e6590000 {
-                       reg = <0 0xe6590000 0 0x100>;
-                       /* placeholder */
-               };
-
-               pciec0: pcie@fe000000 {
-                       reg = <0 0xfe000000 0 0x80000>;
-                       /* placeholder */
-               };
-
-               pciec1: pcie@ee800000 {
-                       reg = <0 0xee800000 0 0x80000>;
-                       /* placeholder */
+               prr: chipid@fff00044 {
+                       compatible = "renesas,prr";
+                       reg = <0 0xfff00044 0 4>;
                };
+       };
 
-               rcar_sound: sound@ec500000 {
-                       reg =   <0 0xec500000 0 0x1000>, /* SCU */
-                               <0 0xec5a0000 0 0x100>,  /* ADG */
-                               <0 0xec540000 0 0x1000>, /* SSIU */
-                               <0 0xec541000 0 0x280>,  /* SSI */
-                               <0 0xec740000 0 0x200>;  /* Audio DMAC peri peri*/
-                       /* placeholder */
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>;
+       };
 
-                       rcar_sound,dvc {
-                               dvc0: dvc-0 {
-                               };
-                               dvc1: dvc-1 {
+       thermal-zones {
+               sensor_thermal1: sensor-thermal1 {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&tsc 0>;
+
+                       trips {
+                               sensor1_crit: sensor1-crit {
+                                       temperature = <120000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
                                };
                        };
+               };
 
-                       rcar_sound,src {
-                               src0: src-0 {
-                               };
-                               src1: src-1 {
-                               };
-                       };
+               sensor_thermal2: sensor-thermal2 {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&tsc 1>;
 
-                       rcar_sound,ssi {
-                               ssi0: ssi-0 {
-                               };
-                               ssi1: ssi-1 {
+                       trips {
+                               sensor2_crit: sensor2-crit {
+                                       temperature = <120000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
                                };
                        };
                };
 
-               usb2_phy1: usb-phy@ee0a0200 {
-                       compatible = "renesas,usb2-phy-r8a77965",
-                                    "renesas,rcar-gen3-usb2-phy";
-                       reg = <0 0xee0a0200 0 0x700>;
-                       clocks = <&cpg CPG_MOD 702>;
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 702>;
-                       #phy-cells = <0>;
-                       status = "disabled";
-               };
-
-               rpc: rpc@0xee200000 {
-                       compatible = "renesas,rpc-r8a77965", "renesas,rpc";
-                       reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
-                       clocks = <&cpg CPG_MOD 917>;
-                       bank-width = <2>;
-                       status = "disabled";
-               };
-
-               sdhi0: sd@ee100000 {
-                       compatible = "renesas,sdhi-r8a77965";
-                       reg = <0 0xee100000 0 0x2000>;
-                       interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 314>;
-                       max-frequency = <200000000>;
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 314>;
-                       status = "disabled";
-               };
-
-               sdhi1: sd@ee120000 {
-                       compatible = "renesas,sdhi-r8a77965";
-                       reg = <0 0xee120000 0 0x2000>;
-                       interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 313>;
-                       max-frequency = <200000000>;
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 313>;
-                       status = "disabled";
-               };
-
-               sdhi2: sd@ee140000 {
-                       compatible = "renesas,sdhi-r8a77965";
-                       reg = <0 0xee140000 0 0x2000>;
-                       interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 312>;
-                       max-frequency = <200000000>;
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 312>;
-                       status = "disabled";
-               };
-
-               sdhi3: sd@ee160000 {
-                       compatible = "renesas,sdhi-r8a77965";
-                       reg = <0 0xee160000 0 0x2000>;
-                       interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 311>;
-                       max-frequency = <200000000>;
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 311>;
-                       status = "disabled";
-               };
-
-               usb3_phy0: usb-phy@e65ee000 {
-                       reg = <0 0xe65ee000 0 0x90>;
-                       #phy-cells = <0>;
-                       /* placeholder */
-               };
+               sensor_thermal3: sensor-thermal3 {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&tsc 2>;
 
-               usb3_peri0: usb@ee020000 {
-                       reg = <0 0xee020000 0 0x400>;
-                       /* placeholder */
+                       trips {
+                               sensor3_crit: sensor3-crit {
+                                       temperature = <120000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
                };
+       };
 
-               xhci0: usb@ee000000 {
-                       compatible = "renesas,xhci-r8a77965",
-                                    "renesas,rcar-gen3-xhci";
-                       reg = <0 0xee000000 0 0xc00>;
-                       interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 328>;
-                       power-domains = <&sysc 32>;
-                       resets = <&cpg 328>;
-                       status = "disabled";
-               };
+       /* External USB clocks - can be overridden by the board */
+       usb3s0_clk: usb3s0 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
 
-               wdt0: watchdog@e6020000 {
-                       reg = <0 0xe6020000 0 0x0c>;
-                       /* placeholder */
-               };
+       usb_extal_clk: usb_extal {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
        };
 };
index 7ab71a1..5b17f1d 100644 (file)
@@ -7,3 +7,48 @@
 
 #include "r8a77970-eagle.dts"
 #include "r8a77970-u-boot.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       aliases {
+               spi0 = &rpc;
+       };
+};
+
+&avb {
+       pinctrl-0 = <&avb0_pins>;
+       pinctrl-names = "default";
+
+};
+
+&phy0 {
+       reset-gpios = <&gpio1 16 GPIO_ACTIVE_LOW>;
+};
+
+&pfc {
+       avb0_pins: avb {
+               mux {
+                       groups = "avb0_link", "avb0_mdio", "avb0_rgmii", "avb0_txcrefclk";
+                       function = "avb0";
+               };
+       };
+};
+
+&rpc {
+       num-cs = <1>;
+       status = "okay";
+       spi-max-frequency = <50000000>;
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       flash0: spi-flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "s25fs512s", "spi-flash", "jedec,spi-nor";
+               spi-max-frequency = <50000000>;
+               spi-tx-bus-width = <1>;
+               spi-rx-bus-width = <1>;
+               reg = <0>;
+               status = "okay";
+       };
+};
index 5dcad63..b6d5332 100644 (file)
@@ -8,7 +8,6 @@
 
 /dts-v1/;
 #include "r8a77970.dtsi"
-#include <dt-bindings/gpio/gpio.h>
 
 / {
        model = "Renesas Eagle board based on r8a77970";
@@ -17,7 +16,6 @@
        aliases {
                serial0 = &scif0;
                ethernet0 = &avb;
-               spi0 = &rpc;
        };
 
        chosen {
                /* first 128MB is reserved for secure area. */
                reg = <0x0 0x48000000 0x0 0x38000000>;
        };
+
+       hdmi-out {
+               compatible = "hdmi-connector";
+               type = "a";
+
+               port {
+                       hdmi_con_out: endpoint {
+                               remote-endpoint = <&adv7511_out>;
+                       };
+               };
+       };
+
+       d3p3: regulator-fixed {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-3.3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       lvds-decoder {
+               compatible = "thine,thc63lvd1024";
+
+               vcc-supply = <&d3p3>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               thc63lvd1024_in: endpoint {
+                                       remote-endpoint = <&lvds0_out>;
+                               };
+                       };
+
+                       port@2 {
+                               reg = <2>;
+                               thc63lvd1024_out: endpoint {
+                                       remote-endpoint = <&adv7511_in>;
+                               };
+                       };
+               };
+       };
 };
 
 &avb {
-       pinctrl-0 = <&avb0_pins>;
+       pinctrl-0 = <&avb_pins>;
        pinctrl-names = "default";
+
        renesas,no-ether-link;
        phy-handle = <&phy0>;
        phy-mode = "rgmii-id";
                reg = <0>;
                interrupt-parent = <&gpio1>;
                interrupts = <17 IRQ_TYPE_LEVEL_LOW>;
-               reset-gpios = <&gpio1 16 GPIO_ACTIVE_LOW>;
+       };
+};
+
+&canfd {
+       pinctrl-0 = <&canfd0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       channel0 {
+               status = "okay";
        };
 };
 
                gpio-controller;
                #gpio-cells = <2>;
        };
+
+       hdmi@39 {
+               compatible = "adi,adv7511w";
+               reg = <0x39>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <20 IRQ_TYPE_LEVEL_LOW>;
+
+               adi,input-depth = <8>;
+               adi,input-colorspace = "rgb";
+               adi,input-clock = "1x";
+               adi,input-style = <1>;
+               adi,input-justification = "evenly";
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               adv7511_in: endpoint {
+                                       remote-endpoint = <&thc63lvd1024_out>;
+                               };
+                       };
+
+                       port@1 {
+                               reg = <1>;
+                               adv7511_out: endpoint {
+                                       remote-endpoint = <&hdmi_con_out>;
+                               };
+                       };
+               };
+       };
 };
 
 &pfc {
-       avb0_pins: avb {
-               mux {
-                       groups = "avb0_link", "avb0_mdio", "avb0_rgmii", "avb0_txcrefclk";
-                       function = "avb0";
-               };
+       avb_pins: avb0 {
+               groups = "avb0_mdio", "avb0_rgmii", "avb0_txcrefclk";
+               function = "avb0";
+       };
+
+       canfd0_pins: canfd0 {
+               groups = "canfd0_data_a";
+               function = "canfd0";
        };
 
        i2c0_pins: i2c0 {
        };
 };
 
-&rpc {
-       num-cs = <1>;
-       status = "okay";
-       spi-max-frequency = <50000000>;
-       #address-cells = <1>;
-       #size-cells = <0>;
-
-       flash0: spi-flash@0 {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               compatible = "s25fs512s", "spi-flash", "jedec,spi-nor";
-               spi-max-frequency = <50000000>;
-               spi-tx-bus-width = <1>;
-               spi-rx-bus-width = <1>;
-               reg = <0>;
-               status = "okay";
-       };
-};
-
 &rwdt {
        timeout-sec = <60>;
        status = "okay";
 
        status = "okay";
 };
+
+&du {
+       status = "okay";
+};
+
+&lvds0 {
+       status = "okay";
+
+       ports {
+               port@1 {
+                       lvds0_out: endpoint {
+                               remote-endpoint = <&thc63lvd1024_in>;
+                       };
+               };
+       };
+};
index 8fb7fe9..2903fdb 100644 (file)
 &extalr_clk {
        u-boot,dm-pre-reloc;
 };
+
+&soc {
+       rpc: rpc@0xee200000 {
+               compatible = "renesas,rpc-r8a77970", "renesas,rpc";
+               reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
+               clocks = <&cpg CPG_MOD 917>;
+               bank-width = <2>;
+               status = "disabled";
+       };
+};
index 8dc599e..a0808c9 100644 (file)
                        enable-method = "psci";
                };
 
+               a53_1: cpu@1 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53", "arm,armv8";
+                       reg = <1>;
+                       clocks = <&cpg CPG_CORE R8A77970_CLK_Z2>;
+                       power-domains = <&sysc R8A77970_PD_CA53_CPU1>;
+                       next-level-cache = <&L2_CA53>;
+                       enable-method = "psci";
+               };
+
                L2_CA53: cache-controller {
                        compatible = "cache";
                        power-domains = <&sysc R8A77970_PD_CA53_SCU>;
                clock-frequency = <0>;
        };
 
+       pmu_a53 {
+               compatible = "arm,cortex-a53-pmu";
+               interrupts-extended = <&gic GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&a53_0>, <&a53_1>;
+       };
+
        psci {
                compatible = "arm,psci-1.0", "arm,psci-0.2";
                method = "smc";
        };
 
+       /* External CAN clock - to be overridden by boards that provide it */
+       can_clk: can {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
        /* External SCIF clock - to be overridden by boards that provide it */
        scif_clk: scif {
                compatible = "fixed-clock";
@@ -72,7 +96,7 @@
                clock-frequency = <0>;
        };
 
-       soc {
+       soc: soc {
                compatible = "simple-bus";
                interrupt-parent = <&gic>;
 
                #size-cells = <2>;
                ranges;
 
-               gic: interrupt-controller@f1010000 {
-                       compatible = "arm,gic-400";
-                       #interrupt-cells = <3>;
-                       #address-cells = <0>;
-                       interrupt-controller;
-                       reg = <0 0xf1010000 0 0x1000>,
-                             <0 0xf1020000 0 0x20000>,
-                             <0 0xf1040000 0 0x20000>,
-                             <0 0xf1060000 0 0x20000>;
-                       interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(1) |
-                                     IRQ_TYPE_LEVEL_HIGH)>;
-                       clocks = <&cpg CPG_MOD 408>;
-                       clock-names = "clk";
-                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
-                       resets = <&cpg 408>;
-               };
-
                rwdt: watchdog@e6020000 {
                        compatible = "renesas,r8a77970-wdt",
                                     "renesas,rcar-gen3-wdt";
                        status = "disabled";
                };
 
-               cpg: clock-controller@e6150000 {
-                       compatible = "renesas,r8a77970-cpg-mssr";
-                       reg = <0 0xe6150000 0 0x1000>;
-                       clocks = <&extal_clk>, <&extalr_clk>;
-                       clock-names = "extal", "extalr";
-                       #clock-cells = <2>;
-                       #power-domain-cells = <0>;
-                       #reset-cells = <1>;
-               };
-
-               rst: reset-controller@e6160000 {
-                       compatible = "renesas,r8a77970-rst";
-                       reg = <0 0xe6160000 0 0x200>;
-               };
-
-               sysc: system-controller@e6180000 {
-                       compatible = "renesas,r8a77970-sysc";
-                       reg = <0 0xe6180000 0 0x440>;
-                       #power-domain-cells = <1>;
-               };
-
-               ipmmu_vi0: mmu@febd0000 {
-                       compatible = "renesas,ipmmu-r8a77970";
-                       reg = <0 0xfebd0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 9>;
-                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_ir: mmu@ff8b0000 {
-                       compatible = "renesas,ipmmu-r8a77970";
-                       reg = <0 0xff8b0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 3>;
-                       power-domains = <&sysc R8A77970_PD_A3IR>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_rt: mmu@ffc80000 {
-                       compatible = "renesas,ipmmu-r8a77970";
-                       reg = <0 0xffc80000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 7>;
-                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-               };
-
-               ipmmu_ds1: mmu@e7740000 {
-                       compatible = "renesas,ipmmu-r8a77970";
-                       reg = <0 0xe7740000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 1>;
-                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-               };
-
-               ipmmu_mm: mmu@e67b0000 {
-                       compatible = "renesas,ipmmu-r8a77970";
-                       reg = <0 0xe67b0000 0 0x1000>;
-                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
-                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
-                       #iommu-cells = <1>;
-               };
-
-               pfc: pin-controller@e6060000 {
-                       compatible = "renesas,pfc-r8a77970";
-                       reg = <0 0xe6060000 0 0x504>;
-               };
-
                gpio0: gpio@e6050000 {
                        compatible = "renesas,gpio-r8a77970",
                                     "renesas,rcar-gen3-gpio";
                        resets = <&cpg 907>;
                };
 
+               pfc: pin-controller@e6060000 {
+                       compatible = "renesas,pfc-r8a77970";
+                       reg = <0 0xe6060000 0 0x504>;
+               };
+
+               cpg: clock-controller@e6150000 {
+                       compatible = "renesas,r8a77970-cpg-mssr";
+                       reg = <0 0xe6150000 0 0x1000>;
+                       clocks = <&extal_clk>, <&extalr_clk>;
+                       clock-names = "extal", "extalr";
+                       #clock-cells = <2>;
+                       #power-domain-cells = <0>;
+                       #reset-cells = <1>;
+               };
+
+               rst: reset-controller@e6160000 {
+                       compatible = "renesas,r8a77970-rst";
+                       reg = <0 0xe6160000 0 0x200>;
+               };
+
+               sysc: system-controller@e6180000 {
+                       compatible = "renesas,r8a77970-sysc";
+                       reg = <0 0xe6180000 0 0x440>;
+                       #power-domain-cells = <1>;
+               };
+
                intc_ex: interrupt-controller@e61c0000 {
                        compatible = "renesas,intc-ex-r8a77970", "renesas,irqc";
                        #interrupt-cells = <2>;
                        resets = <&cpg 407>;
                };
 
-               prr: chipid@fff00044 {
-                       compatible = "renesas,prr";
-                       reg = <0 0xfff00044 0 4>;
-               };
-
-               dmac1: dma-controller@e7300000 {
-                       compatible = "renesas,dmac-r8a77970",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xe7300000 0 0x10000>;
-                       interrupts = <GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 308 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 309 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 310 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 311 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                         "ch0", "ch1", "ch2", "ch3",
-                                         "ch4", "ch5", "ch6", "ch7";
-                       clocks = <&cpg CPG_MOD 218>;
-                       clock-names = "fck";
-                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
-                       resets = <&cpg 218>;
-                       #dma-cells = <1>;
-                       dma-channels = <8>;
-                       iommus = <&ipmmu_ds1 0>, <&ipmmu_ds1 1>,
-                              <&ipmmu_ds1 2>, <&ipmmu_ds1 3>,
-                              <&ipmmu_ds1 4>, <&ipmmu_ds1 5>,
-                              <&ipmmu_ds1 6>, <&ipmmu_ds1 7>;
-               };
-
-               dmac2: dma-controller@e7310000 {
-                       compatible = "renesas,dmac-r8a77970",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xe7310000 0 0x10000>;
-                       interrupts = <GIC_SPI 307 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 312 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 313 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 314 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 315 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 316 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 318 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 319 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                         "ch0", "ch1", "ch2", "ch3",
-                                         "ch4", "ch5", "ch6", "ch7";
-                       clocks = <&cpg CPG_MOD 217>;
-                       clock-names = "fck";
-                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
-                       resets = <&cpg 217>;
-                       #dma-cells = <1>;
-                       dma-channels = <8>;
-                       iommus = <&ipmmu_ds1 16>, <&ipmmu_ds1 17>,
-                              <&ipmmu_ds1 18>, <&ipmmu_ds1 19>,
-                              <&ipmmu_ds1 20>, <&ipmmu_ds1 21>,
-                              <&ipmmu_ds1 22>, <&ipmmu_ds1 23>;
-               };
-
                i2c0: i2c@e6500000 {
                        compatible = "renesas,i2c-r8a77970",
                                     "renesas,rcar-gen3-i2c";
                        status = "disabled";
                };
 
+               canfd: can@e66c0000 {
+                       compatible = "renesas,r8a77970-canfd",
+                                    "renesas,rcar-gen3-canfd";
+                       reg = <0 0xe66c0000 0 0x8000>;
+                       interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 914>,
+                                <&cpg CPG_CORE R8A77970_CLK_CANFD>,
+                                <&can_clk>;
+                       clock-names = "fck", "canfd", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A77970_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 914>;
+                       status = "disabled";
+
+                       channel0 {
+                               status = "disabled";
+                       };
+
+                       channel1 {
+                               status = "disabled";
+                       };
+               };
+
+               avb: ethernet@e6800000 {
+                       compatible = "renesas,etheravb-r8a77970",
+                                    "renesas,etheravb-rcar-gen3";
+                       reg = <0 0xe6800000 0 0x800>;
+                       interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1", "ch2", "ch3",
+                                         "ch4", "ch5", "ch6", "ch7",
+                                         "ch8", "ch9", "ch10", "ch11",
+                                         "ch12", "ch13", "ch14", "ch15",
+                                         "ch16", "ch17", "ch18", "ch19",
+                                         "ch20", "ch21", "ch22", "ch23",
+                                         "ch24";
+                       clocks = <&cpg CPG_MOD 812>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 812>;
+                       phy-mode = "rgmii";
+                       iommus = <&ipmmu_rt 3>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
                scif0: serial@e6e60000 {
                        compatible = "renesas,scif-r8a77970",
                                     "renesas,rcar-gen3-scif",
                        status = "disabled";
                };
 
-               avb: ethernet@e6800000 {
-                       compatible = "renesas,etheravb-r8a77970",
-                                    "renesas,etheravb-rcar-gen3";
-                       reg = <0 0xe6800000 0 0x800>;
-                       interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "ch0", "ch1", "ch2", "ch3",
-                                         "ch4", "ch5", "ch6", "ch7",
-                                         "ch8", "ch9", "ch10", "ch11",
-                                         "ch12", "ch13", "ch14", "ch15",
-                                         "ch16", "ch17", "ch18", "ch19",
-                                         "ch20", "ch21", "ch22", "ch23",
-                                         "ch24";
-                       clocks = <&cpg CPG_MOD 812>;
+
+               vin0: video@e6ef0000 {
+                       compatible = "renesas,vin-r8a77970";
+                       reg = <0 0xe6ef0000 0 0x1000>;
+                       interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 811>;
                        power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
-                       resets = <&cpg 812>;
-                       phy-mode = "rgmii";
-                       iommus = <&ipmmu_rt 3>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
+                       resets = <&cpg 811>;
+                       renesas,id = <0>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin0csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin0>;
+                                       };
+                               };
+                       };
+               };
+
+               vin1: video@e6ef1000 {
+                       compatible = "renesas,vin-r8a77970";
+                       reg = <0 0xe6ef1000 0 0x1000>;
+                       interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 810>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 810>;
+                       renesas,id = <1>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin1csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin1>;
+                                       };
+                               };
+                       };
+               };
+
+               vin2: video@e6ef2000 {
+                       compatible = "renesas,vin-r8a77970";
+                       reg = <0 0xe6ef2000 0 0x1000>;
+                       interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 809>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 809>;
+                       renesas,id = <2>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin2csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin2>;
+                                       };
+                               };
+                       };
+               };
+
+               vin3: video@e6ef3000 {
+                       compatible = "renesas,vin-r8a77970";
+                       reg = <0 0xe6ef3000 0 0x1000>;
+                       interrupts = <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 808>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 808>;
+                       renesas,id = <3>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin3csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint= <&csi40vin3>;
+                                       };
+                               };
+                       };
+               };
+
+               dmac1: dma-controller@e7300000 {
+                       compatible = "renesas,dmac-r8a77970",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xe7300000 0 0x10000>;
+                       interrupts = <GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 308 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 309 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 310 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 311 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                         "ch0", "ch1", "ch2", "ch3",
+                                         "ch4", "ch5", "ch6", "ch7";
+                       clocks = <&cpg CPG_MOD 218>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 218>;
+                       #dma-cells = <1>;
+                       dma-channels = <8>;
+                       iommus = <&ipmmu_ds1 0>, <&ipmmu_ds1 1>,
+                              <&ipmmu_ds1 2>, <&ipmmu_ds1 3>,
+                              <&ipmmu_ds1 4>, <&ipmmu_ds1 5>,
+                              <&ipmmu_ds1 6>, <&ipmmu_ds1 7>;
+               };
+
+               dmac2: dma-controller@e7310000 {
+                       compatible = "renesas,dmac-r8a77970",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xe7310000 0 0x10000>;
+                       interrupts = <GIC_SPI 307 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 312 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 313 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 314 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 315 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 316 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 318 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 319 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                         "ch0", "ch1", "ch2", "ch3",
+                                         "ch4", "ch5", "ch6", "ch7";
+                       clocks = <&cpg CPG_MOD 217>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 217>;
+                       #dma-cells = <1>;
+                       dma-channels = <8>;
+                       iommus = <&ipmmu_ds1 16>, <&ipmmu_ds1 17>,
+                              <&ipmmu_ds1 18>, <&ipmmu_ds1 19>,
+                              <&ipmmu_ds1 20>, <&ipmmu_ds1 21>,
+                              <&ipmmu_ds1 22>, <&ipmmu_ds1 23>;
+               };
+
+               ipmmu_ds1: mmu@e7740000 {
+                       compatible = "renesas,ipmmu-r8a77970";
+                       reg = <0 0xe7740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 0>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_ir: mmu@ff8b0000 {
+                       compatible = "renesas,ipmmu-r8a77970";
+                       reg = <0 0xff8b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 3>;
+                       power-domains = <&sysc R8A77970_PD_A3IR>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mm: mmu@e67b0000 {
+                       compatible = "renesas,ipmmu-r8a77970";
+                       reg = <0 0xe67b0000 0 0x1000>;
+                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_rt: mmu@ffc80000 {
+                       compatible = "renesas,ipmmu-r8a77970";
+                       reg = <0 0xffc80000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 7>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vi0: mmu@febd0000 {
+                       compatible = "renesas,ipmmu-r8a77970";
+                       reg = <0 0xfebd0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 9>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
                };
 
-               rpc: rpc@0xee200000 {
-                       compatible = "renesas,rpc-r8a77970", "renesas,rpc";
-                       reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
-                       clocks = <&cpg CPG_MOD 917>;
-                       bank-width = <2>;
+               gic: interrupt-controller@f1010000 {
+                       compatible = "arm,gic-400";
+                       #interrupt-cells = <3>;
+                       #address-cells = <0>;
+                       interrupt-controller;
+                       reg = <0 0xf1010000 0 0x1000>,
+                             <0 0xf1020000 0 0x20000>,
+                             <0 0xf1040000 0 0x20000>,
+                             <0 0xf1060000 0 0x20000>;
+                       interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(2) |
+                                     IRQ_TYPE_LEVEL_HIGH)>;
+                       clocks = <&cpg CPG_MOD 408>;
+                       clock-names = "clk";
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 408>;
+               };
+
+               vspd0: vsp@fea20000 {
+                       compatible = "renesas,vsp2";
+                       reg = <0 0xfea20000 0 0x5000>;
+                       interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 623>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 623>;
+                       renesas,fcp = <&fcpvd0>;
+               };
+
+               fcpvd0: fcp@fea27000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfea27000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 603>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 603>;
+               };
+
+               csi40: csi2@feaa0000 {
+                       compatible = "renesas,r8a77970-csi2";
+                       reg = <0 0xfeaa0000 0 0x10000>;
+                       interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 716>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 716>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       csi40vin0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&vin0csi40>;
+                                       };
+                                       csi40vin1: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&vin1csi40>;
+                                       };
+                                       csi40vin2: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&vin2csi40>;
+                                       };
+                                       csi40vin3: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint = <&vin3csi40>;
+                                       };
+                               };
+                       };
+               };
+
+               du: display@feb00000 {
+                       compatible = "renesas,du-r8a77970";
+                       reg = <0 0xfeb00000 0 0x80000>;
+                       interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 724>;
+                       clock-names = "du.0";
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 724>;
+                       vsps = <&vspd0>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
+                                       reg = <0>;
+                                       du_out_rgb: endpoint {
+                                       };
+                               };
+
+                               port@1 {
+                                       reg = <1>;
+                                       du_out_lvds0: endpoint {
+                                               remote-endpoint = <&lvds0_in>;
+                                       };
+                               };
+                       };
+               };
+
+               lvds0: lvds-encoder@feb90000 {
+                       compatible = "renesas,r8a77970-lvds";
+                       reg = <0 0xfeb90000 0 0x14>;
+                       clocks = <&cpg CPG_MOD 727>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 727>;
                        status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
+                                       reg = <0>;
+                                       lvds0_in: endpoint {
+                                               remote-endpoint =
+                                                       <&du_out_lvds0>;
+                                       };
+                               };
+                               port@1 {
+                                       reg = <1>;
+                                       lvds0_out: endpoint {
+                                       };
+                               };
+                       };
+               };
+
+               prr: chipid@fff00044 {
+                       compatible = "renesas,prr";
+                       reg = <0 0xfff00044 0 4>;
                };
        };
 
        timer {
                compatible = "arm,armv8-timer";
-               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>;
+               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>;
        };
 };
index 8d4ea88..b030d5c 100644 (file)
@@ -7,3 +7,180 @@
 
 #include "r8a77990-ebisu.dts"
 #include "r8a77990-u-boot.dtsi"
+
+/ {
+       reg_1p8v: regulator0 {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-1.8V";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       reg_3p3v: regulator1 {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-3.3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       vcc_sdhi0: regulator-vcc-sdhi0 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "SDHI0 Vcc";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpio = <&gpio5 17 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       vccq_sdhi0: regulator-vccq-sdhi0 {
+               compatible = "regulator-gpio";
+
+               regulator-name = "SDHI0 VccQ";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpios = <&gpio5 18 GPIO_ACTIVE_HIGH>;
+               gpios-states = <1>;
+               states = <3300000 1
+                         1800000 0>;
+       };
+
+       vcc_sdhi1: regulator-vcc-sdhi1 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "SDHI1 Vcc";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpio = <&gpio0 4 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       vccq_sdhi1: regulator-vccq-sdhi1 {
+               compatible = "regulator-gpio";
+
+               regulator-name = "SDHI1 VccQ";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
+               gpios-states = <1>;
+               states = <3300000 1
+                         1800000 0>;
+       };
+};
+
+&pfc {
+       pinctrl-0 = <&scif_clk_pins>;
+       pinctrl-names = "default";
+
+       scif2_pins: scif2 {
+               groups = "scif2_data_a";
+               function = "scif2";
+       };
+
+       scif_clk_pins: scif_clk {
+               groups = "scif_clk_a";
+               function = "scif_clk";
+       };
+
+       sdhi0_pins: sd0 {
+               groups = "sdhi0_data4", "sdhi0_ctrl";
+               function = "sdhi0";
+               power-source = <3300>;
+       };
+
+       sdhi0_pins_uhs: sd0_uhs {
+               groups = "sdhi0_data4", "sdhi0_ctrl";
+               function = "sdhi0";
+               power-source = <1800>;
+       };
+
+       sdhi1_pins: sd1 {
+               groups = "sdhi1_data4", "sdhi1_ctrl";
+               function = "sdhi1";
+               power-source = <3300>;
+       };
+
+       sdhi1_pins_uhs: sd1_uhs {
+               groups = "sdhi1_data4", "sdhi1_ctrl";
+               function = "sdhi1";
+               power-source = <1800>;
+       };
+
+       sdhi3_pins: sd2 {
+               groups = "sdhi3_data8", "sdhi3_ctrl", "sdhi3_ds";
+               function = "sdhi3";
+               power-source = <1800>;
+       };
+
+       sdhi3_pins_uhs: sd2_uhs {
+               groups = "sdhi3_data8", "sdhi3_ctrl", "sdhi3_ds";
+               function = "sdhi3";
+               power-source = <1800>;
+       };
+};
+
+&scif2 {
+       pinctrl-0 = <&scif2_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&sdhi0 {
+       /* full size SD */
+       pinctrl-0 = <&sdhi0_pins>;
+       pinctrl-1 = <&sdhi0_pins_uhs>;
+       pinctrl-names = "default", "state_uhs";
+
+       vmmc-supply = <&vcc_sdhi0>;
+       vqmmc-supply = <&vccq_sdhi0>;
+       cd-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>;
+       wp-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
+       bus-width = <4>;
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr50;
+       sd-uhs-sdr104;
+       status = "okay";
+       max-frequency = <208000000>;
+};
+
+&sdhi1 {
+       /* microSD */
+       pinctrl-0 = <&sdhi1_pins>;
+       pinctrl-1 = <&sdhi1_pins_uhs>;
+       pinctrl-names = "default", "state_uhs";
+
+       vmmc-supply = <&vcc_sdhi1>;
+       vqmmc-supply = <&vccq_sdhi1>;
+       cd-gpios = <&gpio3 14 GPIO_ACTIVE_LOW>;
+       bus-width = <4>;
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr50;
+       sd-uhs-sdr104;
+       status = "okay";
+       max-frequency = <208000000>;
+};
+
+&sdhi3 {
+       /* used for on-board 8bit eMMC */
+       pinctrl-0 = <&sdhi3_pins>;
+       pinctrl-1 = <&sdhi3_pins_uhs>;
+       pinctrl-names = "default", "state_uhs";
+
+       vmmc-supply = <&reg_3p3v>;
+       vqmmc-supply = <&reg_1p8v>;
+       bus-width = <8>;
+       mmc-hs200-1_8v;
+       mmc-hs400-1_8v;
+       non-removable;
+       status = "okay";
+};
index 0f269d0..2bc3a48 100644 (file)
                /* first 128MB is reserved for secure area. */
                reg = <0x0 0x48000000 0x0 0x38000000>;
        };
-
-       reg_1p8v: regulator0 {
-               compatible = "regulator-fixed";
-               regulator-name = "fixed-1.8V";
-               regulator-min-microvolt = <1800000>;
-               regulator-max-microvolt = <1800000>;
-               regulator-boot-on;
-               regulator-always-on;
-       };
-
-       reg_3p3v: regulator1 {
-               compatible = "regulator-fixed";
-               regulator-name = "fixed-3.3V";
-               regulator-min-microvolt = <3300000>;
-               regulator-max-microvolt = <3300000>;
-               regulator-boot-on;
-               regulator-always-on;
-       };
-
-       vcc_sdhi0: regulator-vcc-sdhi0 {
-               compatible = "regulator-fixed";
-
-               regulator-name = "SDHI0 Vcc";
-               regulator-min-microvolt = <3300000>;
-               regulator-max-microvolt = <3300000>;
-
-               gpio = <&gpio5 17 GPIO_ACTIVE_HIGH>;
-               enable-active-high;
-       };
-
-       vccq_sdhi0: regulator-vccq-sdhi0 {
-               compatible = "regulator-gpio";
-
-               regulator-name = "SDHI0 VccQ";
-               regulator-min-microvolt = <1800000>;
-               regulator-max-microvolt = <3300000>;
-
-               gpios = <&gpio5 18 GPIO_ACTIVE_HIGH>;
-               gpios-states = <1>;
-               states = <3300000 1
-                         1800000 0>;
-       };
-
-       vcc_sdhi1: regulator-vcc-sdhi1 {
-               compatible = "regulator-fixed";
-
-               regulator-name = "SDHI1 Vcc";
-               regulator-min-microvolt = <3300000>;
-               regulator-max-microvolt = <3300000>;
-
-               gpio = <&gpio0 4 GPIO_ACTIVE_HIGH>;
-               enable-active-high;
-       };
-
-       vccq_sdhi1: regulator-vccq-sdhi1 {
-               compatible = "regulator-gpio";
-
-               regulator-name = "SDHI1 VccQ";
-               regulator-min-microvolt = <1800000>;
-               regulator-max-microvolt = <3300000>;
-
-               gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
-               gpios-states = <1>;
-               states = <3300000 1
-                         1800000 0>;
-       };
 };
 
 &avb {
        clock-frequency = <48000000>;
 };
 
-&pfc {
-       pinctrl-0 = <&scif_clk_pins>;
-       pinctrl-names = "default";
+&ohci0 {
+       status = "okay";
+};
 
+&pfc {
        avb_pins: avb {
                mux {
                        groups = "avb_link", "avb_mii";
                };
        };
 
-       scif2_pins: scif2 {
-               groups = "scif2_data_a";
-               function = "scif2";
-       };
-
-       scif_clk_pins: scif_clk {
-               groups = "scif_clk_a";
-               function = "scif_clk";
-       };
-
-       sdhi0_pins: sd0 {
-               groups = "sdhi0_data4", "sdhi0_ctrl";
-               function = "sdhi0";
-               power-source = <3300>;
-       };
-
-       sdhi0_pins_uhs: sd0_uhs {
-               groups = "sdhi0_data4", "sdhi0_ctrl";
-               function = "sdhi0";
-               power-source = <1800>;
-       };
-
-       sdhi1_pins: sd1 {
-               groups = "sdhi1_data4", "sdhi1_ctrl";
-               function = "sdhi1";
-               power-source = <3300>;
-       };
-
-       sdhi1_pins_uhs: sd1_uhs {
-               groups = "sdhi1_data4", "sdhi1_ctrl";
-               function = "sdhi1";
-               power-source = <1800>;
-       };
-
-       sdhi3_pins: sd2 {
-               groups = "sdhi3_data8", "sdhi3_ctrl", "sdhi3_ds";
-               function = "sdhi3";
-               power-source = <1800>;
-       };
-
-       sdhi3_pins_uhs: sd2_uhs {
-               groups = "sdhi3_data8", "sdhi3_ctrl", "sdhi3_ds";
-               function = "sdhi3";
-               power-source = <1800>;
+       usb0_pins: usb {
+               groups = "usb0_b";
+               function = "usb0";
        };
 
-       usb0_pins: usb0 {
-               groups = "usb0";
-               function = "usb0";
+       usb30_pins: usb30 {
+               groups = "usb30";
+               function = "usb30";
        };
 };
 
-&usb2_phy0 {
-       pinctrl-0 = <&usb0_pins>;
-       pinctrl-name = "default";
-
+&rwdt {
+       timeout-sec = <60>;
        status = "okay";
 };
 
-&sdhi0 {
-       /* full size SD */
-       pinctrl-0 = <&sdhi0_pins>;
-       pinctrl-1 = <&sdhi0_pins_uhs>;
-       pinctrl-names = "default", "state_uhs";
-
-       vmmc-supply = <&vcc_sdhi0>;
-       vqmmc-supply = <&vccq_sdhi0>;
-       cd-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>;
-       wp-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
-       bus-width = <4>;
-       sd-uhs-sdr12;
-       sd-uhs-sdr25;
-       sd-uhs-sdr50;
-       sd-uhs-sdr104;
+&scif2 {
        status = "okay";
-       max-frequency = <208000000>;
 };
 
-&sdhi1 {
-       /* microSD */
-       pinctrl-0 = <&sdhi1_pins>;
-       pinctrl-1 = <&sdhi1_pins_uhs>;
-       pinctrl-names = "default", "state_uhs";
-
-       vmmc-supply = <&vcc_sdhi1>;
-       vqmmc-supply = <&vccq_sdhi1>;
-       cd-gpios = <&gpio3 14 GPIO_ACTIVE_LOW>;
-       bus-width = <4>;
-       sd-uhs-sdr12;
-       sd-uhs-sdr25;
-       sd-uhs-sdr50;
-       sd-uhs-sdr104;
-       status = "okay";
-       max-frequency = <208000000>;
-};
+&usb2_phy0 {
+       pinctrl-0 = <&usb0_pins>;
+       pinctrl-names = "default";
 
-&sdhi3 {
-       /* used for on-board 8bit eMMC */
-       pinctrl-0 = <&sdhi3_pins>;
-       pinctrl-1 = <&sdhi3_pins_uhs>;
-       pinctrl-names = "default", "state_uhs";
-
-       vmmc-supply = <&reg_3p3v>;
-       vqmmc-supply = <&reg_1p8v>;
-       bus-width = <8>;
-       mmc-hs200-1_8v;
-       mmc-hs400-1_8v;
-       non-removable;
        status = "okay";
 };
 
-&scif2 {
-       pinctrl-0 = <&scif2_pins>;
+&xhci0 {
+       pinctrl-0 = <&usb30_pins>;
        pinctrl-names = "default";
 
        status = "okay";
index 564c258..288e57e 100644 (file)
@@ -6,3 +6,37 @@
  */
 
 #include "r8a779x-u-boot.dtsi"
+
+&soc {
+       rpc: rpc@0xee200000 {
+               compatible = "renesas,rpc-r8a77990", "renesas,rpc";
+               reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
+               clocks = <&cpg CPG_MOD 917>;
+               bank-width = <2>;
+               status = "disabled";
+       };
+
+       sdhi0: sd@ee100000 {
+               compatible = "renesas,sdhi-r8a77990";
+               reg = <0 0xee100000 0 0x2000>;
+               clocks = <&cpg CPG_MOD 314>;
+               max-frequency = <200000000>;
+               status = "disabled";
+       };
+
+       sdhi1: sd@ee120000 {
+               compatible = "renesas,sdhi-r8a77990";
+               reg = <0 0xee120000 0 0x2000>;
+               clocks = <&cpg CPG_MOD 313>;
+               max-frequency = <200000000>;
+               status = "disabled";
+       };
+
+       sdhi3: sd@ee160000 {
+               compatible = "renesas,sdhi-r8a77990";
+               reg = <0 0xee160000 0 0x2000>;
+               clocks = <&cpg CPG_MOD 311>;
+               max-frequency = <200000000>;
+               status = "disabled";
+       };
+};
index ad20ea1..ae89260 100644 (file)
                #address-cells = <1>;
                #size-cells = <0>;
 
-               /* 1 core only at this point */
                a53_0: cpu@0 {
                        compatible = "arm,cortex-a53", "arm,armv8";
-                       reg = <0x0>;
+                       reg = <0>;
                        device_type = "cpu";
                        power-domains = <&sysc 5>;
                        next-level-cache = <&L2_CA53>;
                        enable-method = "psci";
                };
 
+               a53_1: cpu@1 {
+                       compatible = "arm,cortex-a53", "arm,armv8";
+                       reg = <1>;
+                       device_type = "cpu";
+                       power-domains = <&sysc 6>;
+                       next-level-cache = <&L2_CA53>;
+                       enable-method = "psci";
+               };
+
                L2_CA53: cache-controller-0 {
                        compatible = "cache";
                        power-domains = <&sysc 21>;
@@ -45,8 +53,9 @@
 
        pmu_a53 {
                compatible = "arm,cortex-a53-pmu";
-               interrupts-extended = <&gic GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
-               interrupt-affinity = <&a53_0>;
+               interrupts-extended = <&gic GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&a53_0>, <&a53_1>;
        };
 
        psci {
                #size-cells = <2>;
                ranges;
 
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a77990-wdt",
+                                    "renesas,rcar-gen3-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc 32>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
+               };
+
                gpio0: gpio@e6050000 {
                        compatible = "renesas,gpio-r8a77990",
                                     "renesas,rcar-gen3-gpio";
                        resets = <&cpg 906>;
                };
 
-               ohci0: usb@ee080000 {
-                       compatible = "generic-ohci";
-                       reg = <0 0xee080000 0 0x100>;
-                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 703>;
-                       phys = <&usb2_phy0>;
-                       phy-names = "usb";
-                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
-                       resets = <&cpg 703>;
-                       status = "disabled";
-               };
-
-               ehci0: usb@ee080100 {
-                       compatible = "generic-ehci";
-                       reg = <0 0xee080100 0 0x100>;
-                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 703>;
-                       phys = <&usb2_phy0>;
-                       phy-names = "usb";
-                       companion = <&ohci0>;
-                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
-                       resets = <&cpg 703>;
-                       status = "disabled";
-               };
-
-               usb2_phy0: usb-phy@ee080200 {
-                       compatible = "renesas,usb2-phy-r8a7790",
-                                    "renesas,rcar-gen3-usb2-phy";
-                       reg = <0 0xee080200 0 0x700>;
-                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 703>;
-                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
-                       resets = <&cpg 703>;
-                       #phy-cells = <0>;
-                       status = "disabled";
-               };
-
                pfc: pin-controller@e6060000 {
                        compatible = "renesas,pfc-r8a77990";
                        reg = <0 0xe6060000 0 0x508>;
                        reg = <0 0xe6160000 0 0x0200>;
                };
 
-               sdhi0: sd@ee100000 {
-                       compatible = "renesas,sdhi-r8a77990";
-                       reg = <0 0xee100000 0 0x2000>;
-                       clocks = <&cpg CPG_MOD 314>;
-                       max-frequency = <200000000>;
-                       status = "disabled";
+               sysc: system-controller@e6180000 {
+                       compatible = "renesas,r8a77990-sysc";
+                       reg = <0 0xe6180000 0 0x0400>;
+                       #power-domain-cells = <1>;
                };
 
-               sdhi1: sd@ee120000 {
-                       compatible = "renesas,sdhi-r8a77990";
-                       reg = <0 0xee120000 0 0x2000>;
-                       clocks = <&cpg CPG_MOD 313>;
-                       max-frequency = <200000000>;
-                       status = "disabled";
+               ipmmu_ds0: mmu@e6740000 {
+                       compatible = "renesas,ipmmu-r8a77990";
+                       reg = <0 0xe6740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 0>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
                };
 
-               sdhi3: sd@ee160000 {
-                       compatible = "renesas,sdhi-r8a77990";
-                       reg = <0 0xee160000 0 0x2000>;
-                       clocks = <&cpg CPG_MOD 311>;
-                       max-frequency = <200000000>;
-                       status = "disabled";
+               ipmmu_ds1: mmu@e7740000 {
+                       compatible = "renesas,ipmmu-r8a77990";
+                       reg = <0 0xe7740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 1>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
                };
 
-               sysc: system-controller@e6180000 {
-                       compatible = "renesas,r8a77990-sysc";
-                       reg = <0 0xe6180000 0 0x0400>;
-                       #power-domain-cells = <1>;
+               ipmmu_hc: mmu@e6570000 {
+                       compatible = "renesas,ipmmu-r8a77990";
+                       reg = <0 0xe6570000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 2>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mm: mmu@e67b0000 {
+                       compatible = "renesas,ipmmu-r8a77990";
+                       reg = <0 0xe67b0000 0 0x1000>;
+                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mp: mmu@ec670000 {
+                       compatible = "renesas,ipmmu-r8a77990";
+                       reg = <0 0xec670000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 4>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv0: mmu@fd800000 {
+                       compatible = "renesas,ipmmu-r8a77990";
+                       reg = <0 0xfd800000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 6>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_rt: mmu@ffc80000 {
+                       compatible = "renesas,ipmmu-r8a77990";
+                       reg = <0 0xffc80000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 10>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vc0: mmu@fe6b0000 {
+                       compatible = "renesas,ipmmu-r8a77990";
+                       reg = <0 0xfe6b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 12>;
+                       power-domains = <&sysc R8A77990_PD_A3VC>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vi0: mmu@febd0000 {
+                       compatible = "renesas,ipmmu-r8a77990";
+                       reg = <0 0xfebd0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 14>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vp0: mmu@fe990000 {
+                       compatible = "renesas,ipmmu-r8a77990";
+                       reg = <0 0xfe990000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 16>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
                };
 
                avb: ethernet@e6800000 {
                        compatible = "renesas,etheravb-r8a77990",
                                     "renesas,etheravb-rcar-gen3";
-                       reg = <0 0xe6800000 0 0x800>, <0 0xe6a00000 0 0x10000>;
+                       reg = <0 0xe6800000 0 0x800>;
                        interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
                        status = "disabled";
                };
 
+               xhci0: usb@ee000000 {
+                       compatible = "renesas,xhci-r8a77990",
+                                    "renesas,rcar-gen3-xhci";
+                       reg = <0 0xee000000 0 0xc00>;
+                       interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 328>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 328>;
+                       status = "disabled";
+               };
+
+               ohci0: usb@ee080000 {
+                       compatible = "generic-ohci";
+                       reg = <0 0xee080000 0 0x100>;
+                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
+                       power-domains = <&sysc 32>;
+                       resets = <&cpg 703>;
+                       status = "disabled";
+               };
+
+               ehci0: usb@ee080100 {
+                       compatible = "generic-ehci";
+                       reg = <0 0xee080100 0 0x100>;
+                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
+                       companion = <&ohci0>;
+                       power-domains = <&sysc 32>;
+                       resets = <&cpg 703>;
+                       status = "disabled";
+               };
+
+               usb2_phy0: usb-phy@ee080200 {
+                       compatible = "renesas,usb2-phy-r8a77990",
+                                    "renesas,rcar-gen3-usb2-phy";
+                       reg = <0 0xee080200 0 0x700>;
+                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       power-domains = <&sysc 32>;
+                       resets = <&cpg 703>;
+                       #phy-cells = <0>;
+                       status = "disabled";
+               };
+
                gic: interrupt-controller@f1010000 {
                        compatible = "arm,gic-400";
                        #interrupt-cells = <3>;
                              <0x0 0xf1040000 0 0x20000>,
                              <0x0 0xf1060000 0 0x20000>;
                        interrupts = <GIC_PPI 9
-                                       (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
+                                       (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
                        clocks = <&cpg CPG_MOD 408>;
                        clock-names = "clk";
                        power-domains = <&sysc 32>;
                        compatible = "renesas,prr";
                        reg = <0 0xfff00044 0 4>;
                };
-
-               rpc: rpc@0xee200000 {
-                       compatible = "renesas,rpc-r8a77990", "renesas,rpc";
-                       reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
-                       clocks = <&cpg CPG_MOD 917>;
-                       bank-width = <2>;
-                       status = "disabled";
-               };
        };
 
        timer {
                compatible = "arm,armv8-timer";
-               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
-                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>;
+               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>;
        };
 };
index 711d487..a8e8f26 100644 (file)
                };
        };
 
+       composite-in {
+               compatible = "composite-video-connector";
+
+               port {
+                       composite_con_in: endpoint {
+                               remote-endpoint = <&adv7180_in>;
+                       };
+               };
+       };
+
+       hdmi-in {
+               compatible = "hdmi-connector";
+               type = "a";
+
+               port {
+                       hdmi_con_in: endpoint {
+                               remote-endpoint = <&adv7612_in>;
+                       };
+               };
+       };
+
        memory@48000000 {
                device_type = "memory";
                /* first 128MB is reserved for secure area. */
                regulator-boot-on;
                regulator-always-on;
        };
+
+       x12_clk: x12 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <74250000>;
+       };
 };
 
 &extal_clk {
 &pfc {
        avb0_pins: avb {
                mux {
-                       groups = "avb0_link", "avb0_mdc", "avb0_mii";
+                       groups = "avb0_link", "avb0_mdio", "avb0_mii";
                        function = "avb0";
                };
        };
                groups = "usb0";
                function = "usb0";
        };
+
+       vin4_pins_cvbs: vin4 {
+               groups = "vin4_data8", "vin4_sync", "vin4_clk";
+               function = "vin4";
+       };
 };
 
 &i2c0 {
                reg = <0x50>;
                pagesize = <8>;
        };
+
+       composite-in@20 {
+               compatible = "adi,adv7180cp";
+               reg = <0x20>;
+
+               port {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               adv7180_in: endpoint {
+                                       remote-endpoint = <&composite_con_in>;
+                               };
+                       };
+
+                       port@3 {
+                               reg = <3>;
+
+                               /*
+                                * The VIN4 video input path is shared between
+                                * CVBS and HDMI inputs through SW[49-53]
+                                * switches.
+                                *
+                                * CVBS is the default selection, link it to
+                                * VIN4 here.
+                                */
+                               adv7180_out: endpoint {
+                                       remote-endpoint = <&vin4_in>;
+                               };
+                       };
+               };
+
+       };
+
+       hdmi-decoder@4c {
+               compatible = "adi,adv7612";
+               reg = <0x4c>;
+               default-input = <0>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+
+                               adv7612_in: endpoint {
+                                       remote-endpoint = <&hdmi_con_in>;
+                               };
+                       };
+
+                       port@2 {
+                               reg = <2>;
+
+                               /*
+                                * The VIN4 video input path is shared between
+                                * CVBS and HDMI inputs through SW[49-53]
+                                * switches.
+                                *
+                                * CVBS is the default selection, leave HDMI
+                                * not connected here.
+                                */
+                               adv7612_out: endpoint {
+                                       pclk-sample = <0>;
+                                       hsync-active = <0>;
+                                       vsync-active = <0>;
+                               };
+                       };
+               };
+       };
 };
 
 &i2c1 {
        pinctrl-names = "default";
        status = "okay";
 
+       clocks = <&cpg CPG_MOD 724>,
+                <&cpg CPG_MOD 723>,
+                <&x12_clk>;
+       clock-names = "du.0", "du.1", "dclkin.0";
+
        ports {
                port@0 {
                        endpoint {
        timeout-sec = <60>;
        status = "okay";
 };
+
+&vin4 {
+       pinctrl-0 = <&vin4_pins_cvbs>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+
+                       vin4_in: endpoint {
+                               remote-endpoint = <&adv7180_out>;
+                       };
+               };
+       };
+};
index e0852c8..1f6efaf 100644 (file)
@@ -6,3 +6,13 @@
  */
 
 #include "r8a779x-u-boot.dtsi"
+
+&soc {
+       rpc: rpc@0xee200000 {
+               compatible = "renesas,rpc-r8a77995", "renesas,rpc";
+               reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
+               clocks = <&cpg CPG_MOD 917>;
+               bank-width = <2>;
+               status = "disabled";
+       };
+};
index 1d49279..1efef62 100644 (file)
        #address-cells = <2>;
        #size-cells = <2>;
 
-       psci {
-               compatible = "arm,psci-1.0", "arm,psci-0.2";
-               method = "smc";
+       /* External CAN clock - to be overridden by boards that provide it */
+       can_clk: can {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
        };
 
        cpus {
                clock-frequency = <0>;
        };
 
-       /* External CAN clock - to be overridden by boards that provide it */
-       can_clk: can {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <0>;
-       };
-
        pmu_a53 {
                compatible = "arm,cortex-a53-pmu";
                interrupts-extended = <&gic GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
        };
 
+       psci {
+               compatible = "arm,psci-1.0", "arm,psci-0.2";
+               method = "smc";
+       };
+
        scif_clk: scif {
                compatible = "fixed-clock";
                #clock-cells = <0>;
                clock-frequency = <0>;
        };
 
-       soc {
+       soc: soc {
                compatible = "simple-bus";
                interrupt-parent = <&gic>;
                #address-cells = <2>;
                #size-cells = <2>;
                ranges;
 
-               gic: interrupt-controller@f1010000 {
-                       compatible = "arm,gic-400";
-                       #interrupt-cells = <3>;
-                       #address-cells = <0>;
-                       interrupt-controller;
-                       reg = <0x0 0xf1010000 0 0x1000>,
-                             <0x0 0xf1020000 0 0x20000>,
-                             <0x0 0xf1040000 0 0x20000>,
-                             <0x0 0xf1060000 0 0x20000>;
-                       interrupts = <GIC_PPI 9
-                                       (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
-                       clocks = <&cpg CPG_MOD 408>;
-                       clock-names = "clk";
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 408>;
-               };
-
                rwdt: watchdog@e6020000 {
                        compatible = "renesas,r8a77995-wdt",
                                     "renesas,rcar-gen3-wdt";
                        status = "disabled";
                };
 
-               ipmmu_vi0: mmu@febd0000 {
-                       compatible = "renesas,ipmmu-r8a77995";
-                       reg = <0 0xfebd0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 14>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_vp0: mmu@fe990000 {
-                       compatible = "renesas,ipmmu-r8a77995";
-                       reg = <0 0xfe990000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 16>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_vc0: mmu@fe6b0000 {
-                       compatible = "renesas,ipmmu-r8a77995";
-                       reg = <0 0xfe6b0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 12>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_pv0: mmu@fd800000 {
-                       compatible = "renesas,ipmmu-r8a77995";
-                       reg = <0 0xfd800000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 6>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_hc: mmu@e6570000 {
-                       compatible = "renesas,ipmmu-r8a77995";
-                       reg = <0 0xe6570000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 2>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_rt: mmu@ffc80000 {
-                       compatible = "renesas,ipmmu-r8a77995";
-                       reg = <0 0xffc80000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 10>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_mp: mmu@ec670000 {
-                       compatible = "renesas,ipmmu-r8a77995";
-                       reg = <0 0xec670000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 4>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_ds0: mmu@e6740000 {
-                       compatible = "renesas,ipmmu-r8a77995";
-                       reg = <0 0xe6740000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 0>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_ds1: mmu@e7740000 {
-                       compatible = "renesas,ipmmu-r8a77995";
-                       reg = <0 0xe7740000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 1>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-               ipmmu_mm: mmu@e67b0000 {
-                       compatible = "renesas,ipmmu-r8a77995";
-                       reg = <0 0xe67b0000 0 0x1000>;
-                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
-                       #iommu-cells = <1>;
-                       status = "disabled";
-               };
-
-
-               cpg: clock-controller@e6150000 {
-                       compatible = "renesas,r8a77995-cpg-mssr";
-                       reg = <0 0xe6150000 0 0x1000>;
-                       clocks = <&extal_clk>;
-                       clock-names = "extal";
-                       #clock-cells = <2>;
-                       #power-domain-cells = <0>;
-                       #reset-cells = <1>;
-               };
-
-               rst: reset-controller@e6160000 {
-                       compatible = "renesas,r8a77995-rst";
-                       reg = <0 0xe6160000 0 0x0200>;
-               };
-
-               pfc: pin-controller@e6060000 {
-                       compatible = "renesas,pfc-r8a77995";
-                       reg = <0 0xe6060000 0 0x508>;
-               };
-
-               prr: chipid@fff00044 {
-                       compatible = "renesas,prr";
-                       reg = <0 0xfff00044 0 4>;
-               };
-
-               sysc: system-controller@e6180000 {
-                       compatible = "renesas,r8a77995-sysc";
-                       reg = <0 0xe6180000 0 0x0400>;
-                       #power-domain-cells = <1>;
-               };
-
-               intc_ex: interrupt-controller@e61c0000 {
-                       compatible = "renesas,intc-ex-r8a77995", "renesas,irqc";
-                       #interrupt-cells = <2>;
-                       interrupt-controller;
-                       reg = <0 0xe61c0000 0 0x200>;
-                       interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 407>;
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 407>;
-               };
-
-               dmac0: dma-controller@e6700000 {
-                       compatible = "renesas,dmac-r8a77995",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xe6700000 0 0x10000>;
-                       interrupts = <GIC_SPI 199 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 201 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 203 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 204 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 206 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 207 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                       "ch0", "ch1", "ch2", "ch3",
-                                       "ch4", "ch5", "ch6", "ch7";
-                       clocks = <&cpg CPG_MOD 219>;
-                       clock-names = "fck";
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 219>;
-                       #dma-cells = <1>;
-                       dma-channels = <8>;
-               };
-
-               dmac1: dma-controller@e7300000 {
-                       compatible = "renesas,dmac-r8a77995",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xe7300000 0 0x10000>;
-                       interrupts = <GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 308 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 309 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 310 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 311 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                       "ch0", "ch1", "ch2", "ch3",
-                                       "ch4", "ch5", "ch6", "ch7";
-                       clocks = <&cpg CPG_MOD 218>;
-                       clock-names = "fck";
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 218>;
-                       #dma-cells = <1>;
-                       dma-channels = <8>;
-               };
-
-               dmac2: dma-controller@e7310000 {
-                       compatible = "renesas,dmac-r8a77995",
-                                    "renesas,rcar-dmac";
-                       reg = <0 0xe7310000 0 0x10000>;
-                       interrupts = <GIC_SPI 416 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 417 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 418 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 419 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 420 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 421 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 422 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 423 IRQ_TYPE_LEVEL_HIGH
-                                     GIC_SPI 424 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-names = "error",
-                                       "ch0", "ch1", "ch2", "ch3",
-                                       "ch4", "ch5", "ch6", "ch7";
-                       clocks = <&cpg CPG_MOD 217>;
-                       clock-names = "fck";
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 217>;
-                       #dma-cells = <1>;
-                       dma-channels = <8>;
-               };
-
                gpio0: gpio@e6050000 {
                        compatible = "renesas,gpio-r8a77995",
-                                    "renesas,rcar-gen3-gpio",
-                                    "renesas,gpio-rcar";
+                                    "renesas,rcar-gen3-gpio";
                        reg = <0 0xe6050000 0 0x50>;
                        interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
                        #gpio-cells = <2>;
 
                gpio1: gpio@e6051000 {
                        compatible = "renesas,gpio-r8a77995",
-                                    "renesas,rcar-gen3-gpio",
-                                    "renesas,gpio-rcar";
+                                    "renesas,rcar-gen3-gpio";
                        reg = <0 0xe6051000 0 0x50>;
                        interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
                        #gpio-cells = <2>;
 
                gpio2: gpio@e6052000 {
                        compatible = "renesas,gpio-r8a77995",
-                                    "renesas,rcar-gen3-gpio",
-                                    "renesas,gpio-rcar";
+                                    "renesas,rcar-gen3-gpio";
                        reg = <0 0xe6052000 0 0x50>;
                        interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
                        #gpio-cells = <2>;
 
                gpio3: gpio@e6053000 {
                        compatible = "renesas,gpio-r8a77995",
-                                    "renesas,rcar-gen3-gpio",
-                                    "renesas,gpio-rcar";
+                                    "renesas,rcar-gen3-gpio";
                        reg = <0 0xe6053000 0 0x50>;
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
                        #gpio-cells = <2>;
 
                gpio4: gpio@e6054000 {
                        compatible = "renesas,gpio-r8a77995",
-                                    "renesas,rcar-gen3-gpio",
-                                    "renesas,gpio-rcar";
+                                    "renesas,rcar-gen3-gpio";
                        reg = <0 0xe6054000 0 0x50>;
                        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
                        #gpio-cells = <2>;
 
                gpio5: gpio@e6055000 {
                        compatible = "renesas,gpio-r8a77995",
-                                    "renesas,rcar-gen3-gpio",
-                                    "renesas,gpio-rcar";
+                                    "renesas,rcar-gen3-gpio";
                        reg = <0 0xe6055000 0 0x50>;
                        interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
                        #gpio-cells = <2>;
 
                gpio6: gpio@e6055400 {
                        compatible = "renesas,gpio-r8a77995",
-                                    "renesas,rcar-gen3-gpio",
-                                    "renesas,gpio-rcar";
+                                    "renesas,rcar-gen3-gpio";
                        reg = <0 0xe6055400 0 0x50>;
                        interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
                        #gpio-cells = <2>;
                        resets = <&cpg 906>;
                };
 
-               can0: can@e6c30000 {
-                       compatible = "renesas,can-r8a77995",
-                                    "renesas,rcar-gen3-can";
-                       reg = <0 0xe6c30000 0 0x1000>;
-                       interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 916>,
-                              <&cpg CPG_CORE R8A77995_CLK_CANFD>,
-                              <&can_clk>;
-                       clock-names = "clkp1", "clkp2", "can_clk";
-                       assigned-clocks = <&cpg CPG_CORE R8A77995_CLK_CANFD>;
-                       assigned-clock-rates = <40000000>;
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 916>;
-                       status = "disabled";
+               pfc: pin-controller@e6060000 {
+                       compatible = "renesas,pfc-r8a77995";
+                       reg = <0 0xe6060000 0 0x508>;
                };
 
-               can1: can@e6c38000 {
-                       compatible = "renesas,can-r8a77995",
-                                    "renesas,rcar-gen3-can";
-                       reg = <0 0xe6c38000 0 0x1000>;
-                       interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 915>,
-                              <&cpg CPG_CORE R8A77995_CLK_CANFD>,
-                              <&can_clk>;
-                       clock-names = "clkp1", "clkp2", "can_clk";
-                       assigned-clocks = <&cpg CPG_CORE R8A77995_CLK_CANFD>;
-                       assigned-clock-rates = <40000000>;
+               cpg: clock-controller@e6150000 {
+                       compatible = "renesas,r8a77995-cpg-mssr";
+                       reg = <0 0xe6150000 0 0x1000>;
+                       clocks = <&extal_clk>;
+                       clock-names = "extal";
+                       #clock-cells = <2>;
+                       #power-domain-cells = <0>;
+                       #reset-cells = <1>;
+               };
+
+               rst: reset-controller@e6160000 {
+                       compatible = "renesas,r8a77995-rst";
+                       reg = <0 0xe6160000 0 0x0200>;
+               };
+
+               sysc: system-controller@e6180000 {
+                       compatible = "renesas,r8a77995-sysc";
+                       reg = <0 0xe6180000 0 0x0400>;
+                       #power-domain-cells = <1>;
+               };
+
+               thermal: thermal@e6190000 {
+                       compatible = "renesas,thermal-r8a77995";
+                       reg = <0 0xe6190000 0 0x10>, <0 0xe6190100 0 0x38>;
+                       interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 522>;
                        power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 915>;
+                       resets = <&cpg 522>;
+                       #thermal-sensor-cells = <0>;
+               };
+
+               intc_ex: interrupt-controller@e61c0000 {
+                       compatible = "renesas,intc-ex-r8a77995", "renesas,irqc";
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       reg = <0 0xe61c0000 0 0x200>;
+                       interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 407>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 407>;
+               };
+
+               hscif0: serial@e6540000 {
+                       compatible = "renesas,hscif-r8a77995",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe6540000 0 0x60>;
+                       interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 520>,
+                                <&cpg CPG_CORE R8A77995_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x31>, <&dmac1 0x30>,
+                              <&dmac2 0x31>, <&dmac2 0x30>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 520>;
+                       status = "disabled";
+               };
+
+               hscif3: serial@e66a0000 {
+                       compatible = "renesas,hscif-r8a77995",
+                                    "renesas,rcar-gen3-hscif",
+                                    "renesas,hscif";
+                       reg = <0 0xe66a0000 0 0x60>;
+                       interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 517>,
+                                <&cpg CPG_CORE R8A77995_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x37>, <&dmac0 0x36>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 517>;
+                       status = "disabled";
+               };
+
+               i2c0: i2c@e6500000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77995",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe6500000 0 0x40>;
+                       interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 931>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 931>;
+                       dmas = <&dmac1 0x91>, <&dmac1 0x90>,
+                              <&dmac2 0x91>, <&dmac2 0x90>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c1: i2c@e6508000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77995",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe6508000 0 0x40>;
+                       interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 930>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 930>;
+                       dmas = <&dmac1 0x93>, <&dmac1 0x92>,
+                              <&dmac2 0x93>, <&dmac2 0x92>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c2: i2c@e6510000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77995",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe6510000 0 0x40>;
+                       interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 929>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 929>;
+                       dmas = <&dmac1 0x95>, <&dmac1 0x94>,
+                              <&dmac2 0x95>, <&dmac2 0x94>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c3: i2c@e66d0000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77995",
+                                    "renesas,rcar-gen3-i2c";
+                       reg = <0 0xe66d0000 0 0x40>;
+                       interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 928>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 928>;
+                       dmas = <&dmac0 0x97>, <&dmac0 0x96>;
+                       dma-names = "tx", "rx";
+                       i2c-scl-internal-delay-ns = <6>;
                        status = "disabled";
                };
 
                        };
                };
 
+               dmac0: dma-controller@e6700000 {
+                       compatible = "renesas,dmac-r8a77995",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xe6700000 0 0x10000>;
+                       interrupts = <GIC_SPI 199 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 201 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 203 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 204 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 206 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 207 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                       "ch0", "ch1", "ch2", "ch3",
+                                       "ch4", "ch5", "ch6", "ch7";
+                       clocks = <&cpg CPG_MOD 219>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 219>;
+                       #dma-cells = <1>;
+                       dma-channels = <8>;
+               };
+
+               dmac1: dma-controller@e7300000 {
+                       compatible = "renesas,dmac-r8a77995",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xe7300000 0 0x10000>;
+                       interrupts = <GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 308 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 309 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 310 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 311 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                       "ch0", "ch1", "ch2", "ch3",
+                                       "ch4", "ch5", "ch6", "ch7";
+                       clocks = <&cpg CPG_MOD 218>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 218>;
+                       #dma-cells = <1>;
+                       dma-channels = <8>;
+               };
+
+               dmac2: dma-controller@e7310000 {
+                       compatible = "renesas,dmac-r8a77995",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xe7310000 0 0x10000>;
+                       interrupts = <GIC_SPI 416 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 417 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 418 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 419 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 420 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 421 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 422 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 423 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 424 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                       "ch0", "ch1", "ch2", "ch3",
+                                       "ch4", "ch5", "ch6", "ch7";
+                       clocks = <&cpg CPG_MOD 217>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 217>;
+                       #dma-cells = <1>;
+                       dma-channels = <8>;
+               };
+
+               ipmmu_ds0: mmu@e6740000 {
+                       compatible = "renesas,ipmmu-r8a77995";
+                       reg = <0 0xe6740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 0>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_ds1: mmu@e7740000 {
+                       compatible = "renesas,ipmmu-r8a77995";
+                       reg = <0 0xe7740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 1>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_hc: mmu@e6570000 {
+                       compatible = "renesas,ipmmu-r8a77995";
+                       reg = <0 0xe6570000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 2>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mm: mmu@e67b0000 {
+                       compatible = "renesas,ipmmu-r8a77995";
+                       reg = <0 0xe67b0000 0 0x1000>;
+                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mp: mmu@ec670000 {
+                       compatible = "renesas,ipmmu-r8a77995";
+                       reg = <0 0xec670000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 4>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv0: mmu@fd800000 {
+                       compatible = "renesas,ipmmu-r8a77995";
+                       reg = <0 0xfd800000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 6>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_rt: mmu@ffc80000 {
+                       compatible = "renesas,ipmmu-r8a77995";
+                       reg = <0 0xffc80000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 10>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vc0: mmu@fe6b0000 {
+                       compatible = "renesas,ipmmu-r8a77995";
+                       reg = <0 0xfe6b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 12>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vi0: mmu@febd0000 {
+                       compatible = "renesas,ipmmu-r8a77995";
+                       reg = <0 0xfebd0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 14>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vp0: mmu@fe990000 {
+                       compatible = "renesas,ipmmu-r8a77995";
+                       reg = <0 0xfe990000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 16>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
                avb: ethernet@e6800000 {
                        compatible = "renesas,etheravb-r8a77995",
                                     "renesas,etheravb-rcar-gen3";
                                          "ch24";
                        clocks = <&cpg CPG_MOD 812>;
                        power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 812>;
-                       phy-mode = "rgmii";
-                       iommus = <&ipmmu_ds0 16>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       status = "disabled";
-               };
-
-               scif2: serial@e6e88000 {
-                       compatible = "renesas,scif-r8a77995",
-                                    "renesas,rcar-gen3-scif", "renesas,scif";
-                       reg = <0 0xe6e88000 0 64>;
-                       interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 310>,
-                                <&cpg CPG_CORE R8A77995_CLK_S3D1C>,
-                                <&scif_clk>;
-                       clock-names = "fck", "brg_int", "scif_clk";
-                       dmas = <&dmac1 0x13>, <&dmac1 0x12>,
-                              <&dmac2 0x13>, <&dmac2 0x12>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 310>;
-                       status = "disabled";
-               };
-
-               i2c0: i2c@e6500000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a77995",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe6500000 0 0x40>;
-                       interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 931>;
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 931>;
-                       dmas = <&dmac1 0x91>, <&dmac1 0x90>,
-                              <&dmac2 0x91>, <&dmac2 0x90>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       i2c-scl-internal-delay-ns = <6>;
-                       status = "disabled";
-               };
-
-               i2c1: i2c@e6508000 {
+                       resets = <&cpg 812>;
+                       phy-mode = "rgmii";
+                       iommus = <&ipmmu_ds0 16>;
                        #address-cells = <1>;
                        #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a77995",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe6508000 0 0x40>;
-                       interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 930>;
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 930>;
-                       dmas = <&dmac1 0x93>, <&dmac1 0x92>,
-                              <&dmac2 0x93>, <&dmac2 0x92>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       i2c-scl-internal-delay-ns = <6>;
                        status = "disabled";
                };
 
-               i2c2: i2c@e6510000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a77995",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe6510000 0 0x40>;
-                       interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 929>;
+               can0: can@e6c30000 {
+                       compatible = "renesas,can-r8a77995",
+                                    "renesas,rcar-gen3-can";
+                       reg = <0 0xe6c30000 0 0x1000>;
+                       interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 916>,
+                              <&cpg CPG_CORE R8A77995_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A77995_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
                        power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 929>;
-                       dmas = <&dmac1 0x95>, <&dmac1 0x94>,
-                              <&dmac2 0x95>, <&dmac2 0x94>;
-                       dma-names = "tx", "rx", "tx", "rx";
-                       i2c-scl-internal-delay-ns = <6>;
+                       resets = <&cpg 916>;
                        status = "disabled";
                };
 
-               i2c3: i2c@e66d0000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "renesas,i2c-r8a77995",
-                                    "renesas,rcar-gen3-i2c";
-                       reg = <0 0xe66d0000 0 0x40>;
-                       interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 928>;
+               can1: can@e6c38000 {
+                       compatible = "renesas,can-r8a77995",
+                                    "renesas,rcar-gen3-can";
+                       reg = <0 0xe6c38000 0 0x1000>;
+                       interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 915>,
+                              <&cpg CPG_CORE R8A77995_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A77995_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
                        power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 928>;
-                       dmas = <&dmac0 0x97>, <&dmac0 0x96>;
-                       dma-names = "tx", "rx";
-                       i2c-scl-internal-delay-ns = <6>;
+                       resets = <&cpg 915>;
                        status = "disabled";
                };
 
                        status = "disabled";
                };
 
-               sdhi2: sd@ee140000 {
-                       compatible = "renesas,sdhi-r8a77995",
-                                    "renesas,rcar-gen3-sdhi";
-                       reg = <0 0xee140000 0 0x2000>;
-                       interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&cpg CPG_MOD 312>;
-                       max-frequency = <200000000>;
+               scif0: serial@e6e60000 {
+                       compatible = "renesas,scif-r8a77995",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e60000 0 64>;
+                       interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 207>,
+                                <&cpg CPG_CORE R8A77995_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x51>, <&dmac1 0x50>,
+                              <&dmac2 0x51>, <&dmac2 0x50>;
+                       dma-names = "tx", "rx", "tx", "rx";
                        power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 312>;
+                       resets = <&cpg 207>;
                        status = "disabled";
                };
 
-               ehci0: usb@ee080100 {
-                       compatible = "generic-ehci";
-                       reg = <0 0xee080100 0 0x100>;
+               scif1: serial@e6e68000 {
+                       compatible = "renesas,scif-r8a77995",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e68000 0 64>;
+                       interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 206>,
+                                <&cpg CPG_CORE R8A77995_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x53>, <&dmac1 0x52>,
+                              <&dmac2 0x53>, <&dmac2 0x52>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 206>;
+                       status = "disabled";
+               };
+
+               scif2: serial@e6e88000 {
+                       compatible = "renesas,scif-r8a77995",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e88000 0 64>;
+                       interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 310>,
+                                <&cpg CPG_CORE R8A77995_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x13>, <&dmac1 0x12>,
+                              <&dmac2 0x13>, <&dmac2 0x12>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 310>;
+                       status = "disabled";
+               };
+
+               scif3: serial@e6c50000 {
+                       compatible = "renesas,scif-r8a77995",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6c50000 0 64>;
+                       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 204>,
+                                <&cpg CPG_CORE R8A77995_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x57>, <&dmac0 0x56>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 204>;
+                       status = "disabled";
+               };
+
+               scif4: serial@e6c40000 {
+                       compatible = "renesas,scif-r8a77995",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6c40000 0 64>;
+                       interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 203>,
+                                <&cpg CPG_CORE R8A77995_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x59>, <&dmac0 0x58>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 203>;
+                       status = "disabled";
+               };
+
+               scif5: serial@e6f30000 {
+                       compatible = "renesas,scif-r8a77995",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6f30000 0 64>;
+                       interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 202>,
+                                <&cpg CPG_CORE R8A77995_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x5b>, <&dmac1 0x5a>,
+                              <&dmac2 0x5b>, <&dmac2 0x5a>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 202>;
+                       status = "disabled";
+               };
+
+               msiof0: spi@e6e90000 {
+                       compatible = "renesas,msiof-r8a77995",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6e90000 0 0x64>;
+                       interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 211>;
+                       dmas = <&dmac1 0x41>, <&dmac1 0x40>,
+                              <&dmac2 0x41>, <&dmac2 0x40>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 211>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof1: spi@e6ea0000 {
+                       compatible = "renesas,msiof-r8a77995",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6ea0000 0 0x64>;
+                       interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 210>;
+                       dmas = <&dmac1 0x43>, <&dmac1 0x42>,
+                              <&dmac2 0x43>, <&dmac2 0x42>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 210>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof2: spi@e6c00000 {
+                       compatible = "renesas,msiof-r8a77995",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6c00000 0 0x64>;
+                       interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 209>;
+                       dmas = <&dmac0 0x45>, <&dmac0 0x44>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 209>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof3: spi@e6c10000 {
+                       compatible = "renesas,msiof-r8a77995",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6c10000 0 0x64>;
+                       interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 208>;
+                       dmas = <&dmac0 0x47>, <&dmac0 0x46>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 208>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               vin4: video@e6ef4000 {
+                       compatible = "renesas,vin-r8a77995";
+                       reg = <0 0xe6ef4000 0 0x1000>;
+                       interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 807>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 807>;
+                       renesas,id = <4>;
+                       status = "disabled";
+               };
+
+               ohci0: usb@ee080000 {
+                       compatible = "generic-ohci";
+                       reg = <0 0xee080000 0 0x100>;
                        interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 703>;
                        phys = <&usb2_phy0>;
                        phy-names = "usb";
-                       companion = <&ohci0>;
                        power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
                        resets = <&cpg 703>;
                        status = "disabled";
                };
 
-               ohci0: usb@ee080000 {
-                       compatible = "generic-ohci";
-                       reg = <0 0xee080000 0 0x100>;
+               ehci0: usb@ee080100 {
+                       compatible = "generic-ehci";
+                       reg = <0 0xee080100 0 0x100>;
                        interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 703>;
                        phys = <&usb2_phy0>;
                        phy-names = "usb";
+                       companion = <&ohci0>;
                        power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
                        resets = <&cpg 703>;
                        status = "disabled";
                        status = "disabled";
                };
 
+               sdhi2: sd@ee140000 {
+                       compatible = "renesas,sdhi-r8a77995",
+                                    "renesas,rcar-gen3-sdhi";
+                       reg = <0 0xee140000 0 0x2000>;
+                       interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 312>;
+                       max-frequency = <200000000>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 312>;
+                       status = "disabled";
+               };
+
+               gic: interrupt-controller@f1010000 {
+                       compatible = "arm,gic-400";
+                       #interrupt-cells = <3>;
+                       #address-cells = <0>;
+                       interrupt-controller;
+                       reg = <0x0 0xf1010000 0 0x1000>,
+                             <0x0 0xf1020000 0 0x20000>,
+                             <0x0 0xf1040000 0 0x20000>,
+                             <0x0 0xf1060000 0 0x20000>;
+                       interrupts = <GIC_PPI 9
+                                       (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
+                       clocks = <&cpg CPG_MOD 408>;
+                       clock-names = "clk";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 408>;
+               };
+
                vspbs: vsp@fe960000 {
                        compatible = "renesas,vsp2";
                        reg = <0 0xfe960000 0 0x8000>;
                        renesas,fcp = <&fcpvb0>;
                };
 
-               fcpvb0: fcp@fe96f000 {
-                       compatible = "renesas,fcpv";
-                       reg = <0 0xfe96f000 0 0x200>;
-                       clocks = <&cpg CPG_MOD 607>;
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 607>;
-                       iommus = <&ipmmu_vp0 5>;
-               };
-
                vspd0: vsp@fea20000 {
                        compatible = "renesas,vsp2";
-                       reg = <0 0xfea20000 0 0x8000>;
+                       reg = <0 0xfea20000 0 0x5000>;
                        interrupts = <GIC_SPI 466 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 623>;
                        power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
                        renesas,fcp = <&fcpvd0>;
                };
 
-               fcpvd0: fcp@fea27000 {
-                       compatible = "renesas,fcpv";
-                       reg = <0 0xfea27000 0 0x200>;
-                       clocks = <&cpg CPG_MOD 603>;
-                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
-                       resets = <&cpg 603>;
-                       iommus = <&ipmmu_vi0 8>;
-               };
-
                vspd1: vsp@fea28000 {
                        compatible = "renesas,vsp2";
-                       reg = <0 0xfea28000 0 0x8000>;
+                       reg = <0 0xfea28000 0 0x5000>;
                        interrupts = <GIC_SPI 467 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 622>;
                        power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
                        renesas,fcp = <&fcpvd1>;
                };
 
+               fcpvb0: fcp@fe96f000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfe96f000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 607>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 607>;
+                       iommus = <&ipmmu_vp0 5>;
+               };
+
+               fcpvd0: fcp@fea27000 {
+                       compatible = "renesas,fcpv";
+                       reg = <0 0xfea27000 0 0x200>;
+                       clocks = <&cpg CPG_MOD 603>;
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 603>;
+                       iommus = <&ipmmu_vi0 8>;
+               };
+
                fcpvd1: fcp@fea2f000 {
                        compatible = "renesas,fcpv";
                        reg = <0 0xfea2f000 0 0x200>;
                        };
                };
 
-               rpc: rpc@0xee200000 {
-                       compatible = "renesas,rpc-r8a77995", "renesas,rpc";
-                       reg = <0 0xee200000 0 0x100>, <0 0x08000000 0 0>;
-                       clocks = <&cpg CPG_MOD 917>;
-                       bank-width = <2>;
-                       status = "disabled";
+               prr: chipid@fff00044 {
+                       compatible = "renesas,prr";
+                       reg = <0 0xfff00044 0 4>;
+               };
+       };
+
+       thermal-zones {
+               cpu_thermal: cpu-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&thermal>;
+
+                       trips {
+                               cpu-crit {
+                                       temperature = <120000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                       };
                };
        };
 
diff --git a/arch/arm/dts/rk3399-ficus.dts b/arch/arm/dts/rk3399-ficus.dts
new file mode 100644 (file)
index 0000000..4af0e4e
--- /dev/null
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2018 Collabora Ltd.
+ * Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd.
+ *
+ * Schematics available at https://dl.vamrs.com/products/ficus/docs/hw
+ */
+
+/dts-v1/;
+#include "rk3399-rock960.dtsi"
+#include "rk3399-sdram-ddr3-1600.dtsi"
+
+/ {
+       model = "96boards RK3399 Ficus";
+       compatible = "vamrs,ficus", "rockchip,rk3399";
+
+       chosen {
+               stdout-path = "serial2:1500000n8";
+       };
+
+       clkin_gmac: external-gmac-clock {
+               compatible = "fixed-clock";
+               clock-frequency = <125000000>;
+               clock-output-names = "clkin_gmac";
+               #clock-cells = <0>;
+       };
+};
+
+&gmac {
+       assigned-clocks = <&cru SCLK_RMII_SRC>;
+       assigned-clock-parents = <&clkin_gmac>;
+       clock_in_out = "input";
+       phy-supply = <&vcc3v3_sys>;
+       phy-mode = "rgmii";
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgmii_pins>;
+       snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
+       snps,reset-active-low;
+       snps,reset-delays-us = <0 10000 50000>;
+       tx_delay = <0x28>;
+       rx_delay = <0x11>;
+       status = "okay";
+};
+
+&pcie0 {
+       ep-gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_HIGH>;
+};
+
+&pinctrl {
+       gmac {
+               rgmii_sleep_pins: rgmii-sleep-pins {
+                       rockchip,pins =
+                               <3 15 RK_FUNC_GPIO &pcfg_output_low>;
+               };
+       };
+
+       pcie {
+               pcie_drv: pcie-drv {
+                       rockchip,pins =
+                               <1 24 RK_FUNC_GPIO &pcfg_pull_none>;
+                       };
+       };
+
+       usb2 {
+               host_vbus_drv: host-vbus-drv {
+                       rockchip,pins =
+                               <4 27 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+};
+
+&vcc3v3_pcie {
+       gpio = <&gpio1 24 GPIO_ACTIVE_HIGH>;
+};
+
+&vcc5v0_host {
+       gpio = <&gpio4 27 GPIO_ACTIVE_HIGH>;
+};
diff --git a/arch/arm/dts/rk3399-rock960.dts b/arch/arm/dts/rk3399-rock960.dts
new file mode 100644 (file)
index 0000000..25c58b4
--- /dev/null
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2018 Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+ */
+
+/dts-v1/;
+#include "rk3399-rock960.dtsi"
+#include "rk3399-sdram-lpddr3-2GB-1600.dtsi"
+
+/ {
+       model = "96boards Rock960";
+       compatible = "vamrs,rock960", "rockchip,rk3399";
+
+       chosen {
+               stdout-path = "serial2:1500000n8";
+       };
+};
+
+&pcie0 {
+       ep-gpios = <&gpio2 RK_PA2 GPIO_ACTIVE_HIGH>;
+};
+
+&pinctrl {
+       pcie {
+               pcie_drv: pcie-drv {
+                       rockchip,pins =
+                               <2 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
+                       };
+       };
+
+       usb2 {
+               host_vbus_drv: host-vbus-drv {
+                       rockchip,pins =
+                               <4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+};
+
+&vcc3v3_pcie {
+       gpio = <&gpio2 5 GPIO_ACTIVE_HIGH>;
+};
+
+&vcc5v0_host {
+       gpio = <&gpio4 25 GPIO_ACTIVE_HIGH>;
+};
diff --git a/arch/arm/dts/rk3399-rock960.dtsi b/arch/arm/dts/rk3399-rock960.dtsi
new file mode 100644 (file)
index 0000000..51644d6
--- /dev/null
@@ -0,0 +1,506 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2018 Linaro Ltd.
+ */
+
+#include <dt-bindings/pwm/pwm.h>
+#include <dt-bindings/pinctrl/rockchip.h>
+#include "rk3399.dtsi"
+
+/ {
+       vcc1v8_s0: vcc1v8-s0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc1v8_s0";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
+       };
+
+       vcc_sys: vcc-sys {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc_sys";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
+
+       vcc3v3_sys: vcc3v3-sys {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc3v3_sys";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               vin-supply = <&vcc_sys>;
+       };
+
+       vcc3v3_pcie: vcc3v3-pcie-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pcie_drv>;
+               regulator-boot-on;
+               regulator-name = "vcc3v3_pcie";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&vcc3v3_sys>;
+       };
+
+       vcc5v0_host: vcc5v0-host-regulator {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               pinctrl-names = "default";
+               pinctrl-0 = <&host_vbus_drv>;
+               regulator-name = "vcc5v0_host";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               vin-supply = <&vcc_sys>;
+       };
+
+       vdd_log: vdd-log {
+               compatible = "pwm-regulator";
+               pwms = <&pwm2 0 25000 0>;
+               regulator-name = "vdd_log";
+               regulator-min-microvolt = <800000>;
+               regulator-max-microvolt = <1400000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vcc_sys>;
+       };
+
+};
+
+&cpu_l0 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l1 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l2 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_l3 {
+       cpu-supply = <&vdd_cpu_l>;
+};
+
+&cpu_b0 {
+       cpu-supply = <&vdd_cpu_b>;
+};
+
+&cpu_b1 {
+       cpu-supply = <&vdd_cpu_b>;
+};
+
+&emmc_phy {
+       status = "okay";
+};
+
+&hdmi {
+       status = "okay";
+};
+
+&i2c0 {
+       clock-frequency = <400000>;
+       i2c-scl-rising-time-ns = <168>;
+       i2c-scl-falling-time-ns = <4>;
+       status = "okay";
+
+       vdd_cpu_b: regulator@40 {
+               compatible = "silergy,syr827";
+               reg = <0x40>;
+               fcs,suspend-voltage-selector = <1>;
+               regulator-name = "vdd_cpu_b";
+               regulator-min-microvolt = <712500>;
+               regulator-max-microvolt = <1500000>;
+               regulator-ramp-delay = <1000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vcc_sys>;
+               status = "okay";
+
+               regulator-state-mem {
+                       regulator-off-in-suspend;
+               };
+       };
+
+       vdd_gpu: regulator@41 {
+               compatible = "silergy,syr828";
+               reg = <0x41>;
+               fcs,suspend-voltage-selector = <1>;
+               regulator-name = "vdd_gpu";
+               regulator-min-microvolt = <712500>;
+               regulator-max-microvolt = <1500000>;
+               regulator-ramp-delay = <1000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vcc_sys>;
+               regulator-state-mem {
+                       regulator-off-in-suspend;
+               };
+       };
+
+       rk808: pmic@1b {
+               compatible = "rockchip,rk808";
+               reg = <0x1b>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pmic_int_l>;
+               rockchip,system-power-controller;
+               wakeup-source;
+               #clock-cells = <1>;
+               clock-output-names = "xin32k", "rk808-clkout2";
+
+               vcc1-supply = <&vcc_sys>;
+               vcc2-supply = <&vcc_sys>;
+               vcc3-supply = <&vcc_sys>;
+               vcc4-supply = <&vcc_sys>;
+               vcc6-supply = <&vcc_sys>;
+               vcc7-supply = <&vcc_sys>;
+               vcc8-supply = <&vcc3v3_sys>;
+               vcc9-supply = <&vcc_sys>;
+               vcc10-supply = <&vcc_sys>;
+               vcc11-supply = <&vcc_sys>;
+               vcc12-supply = <&vcc3v3_sys>;
+               vddio-supply = <&vcc_1v8>;
+
+               regulators {
+                       vdd_center: DCDC_REG1 {
+                               regulator-name = "vdd_center";
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vdd_cpu_l: DCDC_REG2 {
+                               regulator-name = "vdd_cpu_l";
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_ddr: DCDC_REG3 {
+                               regulator-name = "vcc_ddr";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                               };
+                       };
+
+                       vcc_1v8: DCDC_REG4 {
+                               regulator-name = "vcc_1v8";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc1v8_dvp: LDO_REG1 {
+                               regulator-name = "vcc1v8_dvp";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcca1v8_hdmi: LDO_REG2 {
+                               regulator-name = "vcca1v8_hdmi";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcca_1v8: LDO_REG3 {
+                               regulator-name = "vcca_1v8";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc_sd: LDO_REG4 {
+                               regulator-name = "vcc_sd";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3300000>;
+                               };
+                       };
+
+                       vcc3v0_sd: LDO_REG5 {
+                               regulator-name = "vcc3v0_sd";
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3000000>;
+                               };
+                       };
+
+                       vcc_1v5: LDO_REG6 {
+                               regulator-name = "vcc_1v5";
+                               regulator-min-microvolt = <1500000>;
+                               regulator-max-microvolt = <1500000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1500000>;
+                               };
+                       };
+
+                       vcca0v9_hdmi: LDO_REG7 {
+                               regulator-name = "vcca0v9_hdmi";
+                               regulator-min-microvolt = <900000>;
+                               regulator-max-microvolt = <900000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <900000>;
+                               };
+                       };
+
+                       vcc_3v0: LDO_REG8 {
+                               regulator-name = "vcc_3v0";
+                               regulator-min-microvolt = <3000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3000000>;
+                               };
+                       };
+
+                       vcc3v3_s3: SWITCH_REG1 {
+                               regulator-name = "vcc3v3_s3";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                               };
+                       };
+
+                       vcc3v3_s0: SWITCH_REG2 {
+                               regulator-name = "vcc3v3_s0";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                               };
+                       };
+               };
+       };
+};
+
+&i2c1 {
+       status = "okay";
+};
+
+&i2c2 {
+       status = "okay";
+};
+
+&i2c3 {
+       status = "okay";
+};
+
+&i2c4 {
+       status = "okay";
+};
+
+&io_domains {
+       bt656-supply = <&vcc1v8_s0>; /* bt656_gpio2ab_ms */
+       audio-supply = <&vcc1v8_s0>; /* audio_gpio3d4a_ms */
+       sdmmc-supply = <&vcc_sd>; /* sdmmc_gpio4b_ms */
+       gpio1830-supply = <&vcc_3v0>; /* gpio1833_gpio4cd_ms */
+       status = "okay";
+};
+
+&pcie_phy {
+       status = "okay";
+};
+
+&pcie0 {
+       num-lanes = <4>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie_clkreqn_cpm>;
+       vpcie3v3-supply = <&vcc3v3_pcie>;
+       status = "okay";
+};
+
+&pmu_io_domains {
+       pmu1830-supply = <&vcc_1v8>;
+       status = "okay";
+};
+
+&pinctrl {
+       sdmmc {
+               sdmmc_bus1: sdmmc-bus1 {
+                       rockchip,pins =
+                               <4 8 RK_FUNC_1 &pcfg_pull_up_8ma>;
+               };
+
+               sdmmc_bus4: sdmmc-bus4 {
+                       rockchip,pins =
+                               <4 8 RK_FUNC_1 &pcfg_pull_up_8ma>,
+                               <4 9 RK_FUNC_1 &pcfg_pull_up_8ma>,
+                               <4 10 RK_FUNC_1 &pcfg_pull_up_8ma>,
+                               <4 11 RK_FUNC_1 &pcfg_pull_up_8ma>;
+               };
+
+               sdmmc_clk: sdmmc-clk {
+                       rockchip,pins =
+                               <4 12 RK_FUNC_1 &pcfg_pull_none_18ma>;
+               };
+
+               sdmmc_cmd: sdmmc-cmd {
+                       rockchip,pins =
+                               <4 13 RK_FUNC_1 &pcfg_pull_up_8ma>;
+               };
+       };
+
+       pmic {
+               pmic_int_l: pmic-int-l {
+                       rockchip,pins =
+                               <1 21 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+               vsel1_gpio: vsel1-gpio {
+                       rockchip,pins =
+                               <1 17 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+
+               vsel2_gpio: vsel2-gpio {
+                       rockchip,pins =
+                               <1 14 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+       };
+};
+
+&pwm2 {
+       status = "okay";
+};
+
+&pwm3 {
+       status = "okay";
+};
+
+&sdhci {
+       bus-width = <8>;
+       mmc-hs400-1_8v;
+       mmc-hs400-enhanced-strobe;
+       non-removable;
+       status = "okay";
+};
+
+&sdmmc {
+       bus-width = <4>;
+       cap-mmc-highspeed;
+       cap-sd-highspeed;
+       clock-frequency = <100000000>;
+       clock-freq-min-max = <100000 100000000>;
+       cd-gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
+       disable-wp;
+       sd-uhs-sdr104;
+       vqmmc-supply = <&vcc_sd>;
+       card-detect-delay = <800>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
+       status = "okay";
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart0_xfer &uart0_cts>;
+       status = "okay";
+};
+
+&uart2 {
+       status = "okay";
+};
+
+&u2phy0 {
+       status = "okay";
+};
+
+&u2phy1 {
+       status = "okay";
+};
+
+&u2phy0_host {
+       phy-supply = <&vcc5v0_host>;
+       status = "okay";
+};
+
+&u2phy1_host {
+       phy-supply = <&vcc5v0_host>;
+       status = "okay";
+};
+
+&u2phy0_otg {
+       status = "okay";
+};
+
+&u2phy1_otg {
+       status = "okay";
+};
+
+&usb_host0_ehci {
+       status = "okay";
+};
+
+&usb_host0_ohci {
+       status = "okay";
+};
+
+&usb_host1_ehci {
+       status = "okay";
+};
+
+&usb_host1_ohci {
+       status = "okay";
+};
+
+&vopb {
+       status = "okay";
+};
+
+&vopl {
+       status = "okay";
+};
diff --git a/arch/arm/dts/rk3399-sdram-lpddr3-2GB-1600.dtsi b/arch/arm/dts/rk3399-sdram-lpddr3-2GB-1600.dtsi
new file mode 100644 (file)
index 0000000..d14e833
--- /dev/null
@@ -0,0 +1,1536 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2016 Rockchip Electronics Co., Ltd
+ * (C) Copyright 2018 Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+ */
+
+&dmc {
+       rockchip,sdram-params = <
+               0x1
+               0xa
+               0x3
+               0x2
+               0x2
+               0x0
+               0xf
+               0xf
+               1
+               0x1d191519
+               0x14040808
+               0x00000002
+               0x00006226
+               0x00000054
+               0x00000000
+               0x1
+               0xa
+               0x3
+               0x2
+               0x2
+               0x0
+               0xf
+               0xf
+               1
+               0x1d191519
+               0x14040808
+               0x00000002
+               0x00006226
+               0x00000054
+               0x00000000
+               800
+               6
+               2
+               9
+               1
+               0x00000700
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000050
+               0x00027100
+               0x00000320
+               0x00001f40
+               0x00000050
+               0x00027100
+               0x00000320
+               0x00001f40
+               0x00000050
+               0x00027100
+               0x00000320
+               0x01001f40
+               0x00000000
+               0x00000101
+               0x00020100
+               0x000000a0
+               0x00000190
+               0x00000000
+               0x06180000
+               0x00061800
+               0x04000618
+               0x33080004
+               0x280f0622
+               0x22330800
+               0x00280f06
+               0x06223308
+               0x0600280f
+               0x00000a0a
+               0x0600dac0
+               0x0a0a060c
+               0x0600dac0
+               0x0a0a060c
+               0x0600dac0
+               0x0203000c
+               0x0f0c0f00
+               0x040c0f0c
+               0x14000a0a
+               0x03030a0a
+               0x00010003
+               0x031b1b1b
+               0x00111111
+               0x00000000
+               0x03010000
+               0x0c2800a8
+               0x0c2800a8
+               0x0c2800a8
+               0x00000000
+               0x00060006
+               0x00140006
+               0x00140014
+               0x000f0f0f
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00b00000
+               0x00b000b0
+               0x00b000b0
+               0x000000b0
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000301
+               0x00000001
+               0x00000000
+               0x00000000
+               0x01000000
+               0x80104002
+               0x00040003
+               0x00040005
+               0x00030000
+               0x00050004
+               0x00000004
+               0x00040003
+               0x00040005
+               0x30a00000
+               0x00001850
+               0x185030a0
+               0x30a00000
+               0x00001850
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x02020200
+               0x00020202
+               0x00030200
+               0x00040700
+               0x00000302
+               0x02000407
+               0x00000003
+               0x00030f04
+               0x00070004
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00010000
+               0x20040020
+               0x00200400
+               0x01000400
+               0x00000b80
+               0x00000000
+               0x00000001
+               0x00000002
+               0x0000000e
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00a00000
+               0x00c80050
+               0x00c80000
+               0x005000a0
+               0x000000c8
+               0x00a000c8
+               0x00c80050
+               0x00c80000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00430000
+               0x0000001a
+               0x001a0043
+               0x00430000
+               0x0000001a
+               0x00010001
+               0x07000001
+               0x00000707
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00430000
+               0x0000001a
+               0x001a0043
+               0x00430000
+               0x0000001a
+               0x00010001
+               0x07000001
+               0x00000707
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x01000000
+               0x00000000
+               0x00000000
+               0x18151100
+               0x0000000c
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00032003
+               0x00480120
+               0x00000000
+               0x01200320
+               0x00000048
+               0x00032000
+               0x00480120
+               0x00000000
+               0x00280000
+               0x00280028
+               0x01010100
+               0x01000202
+               0x0a000002
+               0x01000f0f
+               0x00000000
+               0x00000000
+               0x00010003
+               0x00000c03
+               0x00000100
+               0x00010000
+               0x01000000
+               0x00010000
+               0x00000001
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00010000
+               0x03030301
+               0x01010808
+               0x03030001
+               0x0a0a0a03
+               0x02080808
+               0x02050103
+               0x02050103
+               0x00050103
+               0x00020202
+               0x05020500
+               0x00020502
+               0x00000000
+               0x00000000
+               0x0d000001
+               0x00010028
+               0x00010000
+               0x00000003
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00010100
+               0x01000000
+               0x00000001
+               0x00000303
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x000556aa
+               0x000aaaaa
+               0x000aa955
+               0x00055555
+               0x000b3133
+               0x0004cd33
+               0x0004cecc
+               0x000b32cc
+               0x00010300
+               0x03000100
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00ffff00
+               0x1e1e0000
+               0x0800001e
+               0x00001850
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00001850
+               0x0000f320
+               0x1850050a
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00001850
+               0x0000f320
+               0x1850050a
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00001850
+               0x0000f320
+               0x0202050a
+               0x03030202
+               0x00000018
+               0x00000000
+               0x00000000
+               0x00001403
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00030000
+               0x000e0020
+               0x000e0020
+               0x000e0020
+               0x00000000
+               0x00000000
+               0x01000000
+               0x00070007
+               0x00050007
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x01000101
+               0x01010101
+               0x01000101
+               0x01000100
+               0x00010001
+               0x00010002
+               0x00020100
+               0x00000002
+               0x00000700
+               0x00000000
+               0x000030a0
+               0x00001850
+               0x000030a0
+               0x00001850
+               0x000030a0
+               0x18501850
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00001850
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00001850
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00000200
+               0x00010000
+               0x00000007
+               0x81000001
+               0x0f0003f0
+               0x3fffffff
+               0x0f0000a0
+               0x377ff000
+               0x0f000020
+               0x377ff000
+               0x0f000030
+               0x377ff000
+               0x0f0000b0
+               0x377ff000
+               0x0f000100
+               0x377ff000
+               0x0f000110
+               0x377ff000
+               0x0f000010
+               0x377ff000
+               0x03000101
+               0x042e2e2e
+               0x06180006
+               0x00061800
+               0x00000018
+               0x0c2800a8
+               0x0c2800a8
+               0x0c2800a8
+               0x00000500
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x04040000
+               0x0d000004
+               0x00000128
+               0x00000000
+               0x00030003
+               0x00000018
+               0x00000000
+               0x00000000
+               0x03060002
+               0x03010301
+               0x01080801
+               0x04020201
+               0x01080804
+               0x00000000
+               0x03030000
+               0x0a0a0a03
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00030300
+               0x00000014
+               0x00000000
+               0x01010300
+               0x00000000
+               0x00000000
+               0x01000000
+               0x00000101
+               0x55555a5a
+               0x55555a5a
+               0x55555a5a
+               0x55555a5a
+               0x0a0a0001
+               0x0505000a
+               0x00000005
+               0x00000100
+               0x00030000
+               0x17030000
+               0x000e0020
+               0x000e0020
+               0x000e0020
+               0x00000000
+               0x00000000
+               0x00000100
+               0x140a0000
+               0x000a030a
+               0x03000a03
+               0x010a000a
+               0x00000100
+               0x01000000
+               0x00000000
+               0x00000100
+               0x1e1a0000
+               0x10010204
+               0x07070705
+               0x20000202
+               0x00201000
+               0x00201000
+               0x04041000
+               0x10100100
+               0x00010110
+               0x004b004a
+               0x1a030000
+               0x0102041e
+               0x34000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00004300
+               0x0001001a
+               0x004d4d07
+               0x001a0043
+               0x4d070001
+               0x0000434d
+               0x0001001a
+               0x004d4d07
+               0x001a0043
+               0x4d070001
+               0x0000434d
+               0x0001001a
+               0x004d4d07
+               0x001a0043
+               0x4d070001
+               0x0043004d
+               0x0001001a
+               0x004d4d07
+               0x001a0043
+               0x4d070001
+               0x0000434d
+               0x0001001a
+               0x004d4d07
+               0x001a0043
+               0x4d070001
+               0x0000434d
+               0x0001001a
+               0x004d4d07
+               0x001a0043
+               0x4d070001
+               0x0100004d
+               0x00c800c8
+               0x060400c8
+               0x0c060f11
+               0x2200d890
+               0x0a0c2005
+               0x0f11060a
+               0x00000c06
+               0x2200d890
+               0x0a0c2005
+               0x0f11060a
+               0x00000c06
+               0x2200d890
+               0x0a0c2005
+               0x0200020a
+               0x02000200
+               0x02000200
+               0x02000200
+               0x02000200
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x01000300
+               0x00185000
+               0x0000f320
+               0x00001850
+               0x0000f320
+               0x00001850
+               0x0000f320
+               0x08000000
+               0x00000100
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000002
+               0x76543210
+               0x0004c008
+               0x000000b3
+               0x00000000
+               0x00000000
+               0x00010000
+               0x01665555
+               0x00665555
+               0x00010f00
+               0x05010200
+               0x00000003
+               0x001700c0
+               0x00cc0101
+               0x00030066
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x04080000
+               0x04080400
+               0x08000000
+               0x0c00c007
+               0x00000100
+               0x00000100
+               0x55555555
+               0xaaaaaaaa
+               0x55555555
+               0xaaaaaaaa
+               0x00005555
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00200000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x02700270
+               0x02700270
+               0x02700270
+               0x02700270
+               0x00000270
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00800000
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00b30080
+               0x00000003
+               0x00000000
+               0x00020000
+               0x00000200
+               0x00000000
+               0x51315152
+               0xc0013150
+               0x020000c0
+               0x00100001
+               0x07054208
+               0x000f0c18
+               0x01000140
+               0x00000c20
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x76543210
+               0x0004c008
+               0x000000b3
+               0x00000000
+               0x00000000
+               0x00010000
+               0x01665555
+               0x00665555
+               0x00010f00
+               0x05010200
+               0x00000003
+               0x001700c0
+               0x00cc0101
+               0x00030066
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x04080000
+               0x04080400
+               0x08000000
+               0x0c00c007
+               0x00000100
+               0x00000100
+               0x55555555
+               0xaaaaaaaa
+               0x55555555
+               0xaaaaaaaa
+               0x00005555
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00200000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x02700270
+               0x02700270
+               0x02700270
+               0x02700270
+               0x00000270
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00800000
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00b30080
+               0x00000003
+               0x00000000
+               0x00020000
+               0x00000200
+               0x00000000
+               0x51315152
+               0xc0013150
+               0x020000c0
+               0x00100001
+               0x07054208
+               0x000f0c18
+               0x01000140
+               0x00000c20
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x76543210
+               0x0004c008
+               0x000000b3
+               0x00000000
+               0x00000000
+               0x00010000
+               0x01665555
+               0x00665555
+               0x00010f00
+               0x05010200
+               0x00000003
+               0x001700c0
+               0x00cc0101
+               0x00030066
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x04080000
+               0x04080400
+               0x08000000
+               0x0c00c007
+               0x00000100
+               0x00000100
+               0x55555555
+               0xaaaaaaaa
+               0x55555555
+               0xaaaaaaaa
+               0x00005555
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00200000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x02700270
+               0x02700270
+               0x02700270
+               0x02700270
+               0x00000270
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00800000
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00b30080
+               0x00000003
+               0x00000000
+               0x00020000
+               0x00000200
+               0x00000000
+               0x51315152
+               0xc0013150
+               0x020000c0
+               0x00100001
+               0x07054208
+               0x000f0c18
+               0x01000140
+               0x00000c20
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x76543210
+               0x0004c008
+               0x000000b3
+               0x00000000
+               0x00000000
+               0x00010000
+               0x01665555
+               0x00665555
+               0x00010f00
+               0x05010200
+               0x00000003
+               0x001700c0
+               0x00cc0101
+               0x00030066
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x04080000
+               0x04080400
+               0x08000000
+               0x0c00c007
+               0x00000100
+               0x00000100
+               0x55555555
+               0xaaaaaaaa
+               0x55555555
+               0xaaaaaaaa
+               0x00005555
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00200000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x02700270
+               0x02700270
+               0x02700270
+               0x02700270
+               0x00000270
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00800000
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00800080
+               0x00b30080
+               0x00000003
+               0x00000000
+               0x00020000
+               0x00000200
+               0x00000000
+               0x51315152
+               0xc0013150
+               0x020000c0
+               0x00100001
+               0x07054208
+               0x000f0c18
+               0x01000140
+               0x00000c20
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00800000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000001
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00400320
+               0x00000040
+               0x00806420
+               0x00917531
+               0x00806420
+               0x01917531
+               0x00020003
+               0x00000000
+               0x00000000
+               0x00000000
+               0x000556aa
+               0x000aaaaa
+               0x000aa955
+               0x00055555
+               0x000b3133
+               0x0004cd33
+               0x0004cecc
+               0x000b32cc
+               0x0a418820
+               0x103f0000
+               0x0000003f
+               0x00038055
+               0x03800380
+               0x03800380
+               0x00000380
+               0x42080010
+               0x00000003
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00800000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000001
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00400320
+               0x00000040
+               0x00008eca
+               0x00009fdb
+               0x00008eca
+               0x01009fdb
+               0x00020003
+               0x00000000
+               0x00000000
+               0x00000000
+               0x000556aa
+               0x000aaaaa
+               0x000aa955
+               0x00055555
+               0x000b3133
+               0x0004cd33
+               0x0004cecc
+               0x000b32cc
+               0x0004a0e6
+               0x080f0000
+               0x0000000f
+               0x00038055
+               0x03800380
+               0x03800380
+               0x00000380
+               0x42080010
+               0x00000003
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00800000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000001
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00400320
+               0x00000040
+               0x00008eca
+               0x00009fdb
+               0x00008eca
+               0x01009fdb
+               0x00020003
+               0x00000000
+               0x00000000
+               0x00000000
+               0x000556aa
+               0x000aaaaa
+               0x000aa955
+               0x00055555
+               0x000b3133
+               0x0004cd33
+               0x0004cecc
+               0x000b32cc
+               0x1ee6b16a
+               0x10000000
+               0x00000000
+               0x00038055
+               0x03800380
+               0x03800380
+               0x00000380
+               0x42080010
+               0x00000003
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000001
+               0x00000000
+               0x01000005
+               0x04000f00
+               0x00020040
+               0x00020055
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000050
+               0x00000000
+               0x00010100
+               0x00000601
+               0x00000000
+               0x00006400
+               0x01221102
+               0x00000000
+               0x00051f00
+               0x051f051f
+               0x051f051f
+               0x00030003
+               0x03000300
+               0x00000300
+               0x01221102
+               0x00000000
+               0x00000000
+               0x03020000
+               0x00000001
+               0x00000011
+               0x00000011
+               0x00000400
+               0x00000000
+               0x00000011
+               0x00000011
+               0x00004410
+               0x00004410
+               0x00004410
+               0x00004410
+               0x00004410
+               0x00000011
+               0x00004410
+               0x00000011
+               0x00004410
+               0x00000011
+               0x00004410
+               0x00000000
+               0x00000000
+               0x00000000
+               0x04000000
+               0x00000000
+               0x00000000
+               0x00000508
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0x00000000
+               0xe4000000
+               0x00000000
+               0x00000000
+               0x01010000
+               0x00000000
+       >;
+};
index a55a6c6..21f1567 100644 (file)
                        drive-strength = <12>;
                };
 
+               pcfg_pull_none_13ma: pcfg-pull-none-13ma {
+                       bias-disable;
+                       drive-strength = <13>;
+               };
+
+               pcfg_pull_none_18ma: pcfg-pull-none-18ma {
+                       bias-disable;
+                       drive-strength = <18>;
+               };
+
+               pcfg_pull_none_20ma: pcfg-pull-none-20ma {
+                       bias-disable;
+                       drive-strength = <20>;
+               };
+
+               pcfg_pull_up_2ma: pcfg-pull-up-2ma {
+                       bias-pull-up;
+                       drive-strength = <2>;
+               };
+
                pcfg_pull_up_8ma: pcfg-pull-up-8ma {
                        bias-pull-up;
                        drive-strength = <8>;
                };
 
+               pcfg_pull_up_18ma: pcfg-pull-up-18ma {
+                       bias-pull-up;
+                       drive-strength = <18>;
+               };
+
+               pcfg_pull_up_20ma: pcfg-pull-up-20ma {
+                       bias-pull-up;
+                       drive-strength = <20>;
+               };
+
                pcfg_pull_down_4ma: pcfg-pull-down-4ma {
                        bias-pull-down;
                        drive-strength = <4>;
                };
 
-               pcfg_pull_up_2ma: pcfg-pull-up-2ma {
-                       bias-pull-up;
-                       drive-strength = <2>;
+               pcfg_pull_down_8ma: pcfg-pull-down-8ma {
+                       bias-pull-down;
+                       drive-strength = <8>;
                };
 
                pcfg_pull_down_12ma: pcfg-pull-down-12ma {
                        drive-strength = <12>;
                };
 
-               pcfg_pull_none_13ma: pcfg-pull-none-13ma {
-                       bias-disable;
-                       drive-strength = <13>;
+               pcfg_pull_down_18ma: pcfg-pull-down-18ma {
+                       bias-pull-down;
+                       drive-strength = <18>;
+               };
+
+               pcfg_pull_down_20ma: pcfg-pull-down-20ma {
+                       bias-pull-down;
+                       drive-strength = <20>;
+               };
+
+               pcfg_output_high: pcfg-output-high {
+                       output-high;
+               };
+
+               pcfg_output_low: pcfg-output-low {
+                       output-low;
                };
 
                clock {
index b036a71..7d3d866 100644 (file)
@@ -1,11 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Device Tree Source for common parts of Salvator-X board variants
  *
  * Copyright (C) 2015-2016 Renesas Electronics Corp.
- *
- * This file is licensed under the terms of the GNU General Public License
- * version 2.  This program is licensed "as is" without any warranty of any
- * kind, whether express or implied.
  */
 
 /*
@@ -36,7 +33,7 @@
 / {
        aliases {
                serial0 = &scif2;
-               serial1 = &scif1;
+               serial1 = &hscif1;
                ethernet0 = &avb;
        };
 
                enable-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>;
        };
 
+       cvbs-in {
+               compatible = "composite-video-connector";
+               label = "CVBS IN";
+
+               port {
+                       cvbs_con: endpoint {
+                               remote-endpoint = <&adv7482_ain7>;
+                       };
+               };
+       };
+
+       hdmi-in {
+               compatible = "hdmi-connector";
+               label = "HDMI IN";
+               type = "a";
+
+               port {
+                       hdmi_in_con: endpoint {
+                               remote-endpoint = <&adv7482_hdmi>;
+                       };
+               };
+       };
+
        reg_1p8v: regulator0 {
                compatible = "regulator-fixed";
                regulator-name = "fixed-1.8V";
                regulator-always-on;
        };
 
-       rsnd_ak4613: sound {
-               compatible = "simple-audio-card";
+       sound_card: sound {
+               compatible = "audio-graph-card";
 
-               simple-audio-card,format = "left_j";
-               simple-audio-card,bitclock-master = <&sndcpu>;
-               simple-audio-card,frame-master = <&sndcpu>;
-
-               sndcpu: simple-audio-card,cpu {
-                       sound-dai = <&rcar_sound>;
-               };
+               label = "rcar-sound";
 
-               sndcodec: simple-audio-card,codec {
-                       sound-dai = <&ak4613>;
-               };
+               dais = <&rsnd_port0>;
        };
 
        vbus0_usb2: regulator-vbus0-usb2 {
        };
 };
 
+&csi20 {
+       status = "okay";
+
+       ports {
+               port@0 {
+                       reg = <0>;
+                       csi20_in: endpoint {
+                               clock-lanes = <0>;
+                               data-lanes = <1>;
+                               remote-endpoint = <&adv7482_txb>;
+                       };
+               };
+       };
+};
+
+&csi40 {
+       status = "okay";
+
+       ports {
+               port@0 {
+                       reg = <0>;
+
+                       csi40_in: endpoint {
+                               clock-lanes = <0>;
+                               data-lanes = <1 2 3 4>;
+                               remote-endpoint = <&adv7482_txa>;
+                       };
+               };
+       };
+};
+
 &du {
        pinctrl-0 = <&du_pins>;
        pinctrl-names = "default";
        clock-frequency = <32768>;
 };
 
+&hscif1 {
+       pinctrl-0 = <&hscif1_pins>;
+       pinctrl-names = "default";
+
+       uart-has-rtscts;
+       /* Please only enable hscif1 or scif1 */
+       status = "okay";
+};
+
 &hsusb {
        dr_mode = "otg";
        status = "okay";
                asahi-kasei,out4-single-end;
                asahi-kasei,out5-single-end;
                asahi-kasei,out6-single-end;
+
+               port {
+                       ak4613_endpoint: endpoint {
+                               remote-endpoint = <&rsnd_endpoint0>;
+                       };
+               };
        };
 
        cs2000: clk_multiplier@4f {
 
                shunt-resistor-micro-ohms = <5000>;
        };
+
+       video-receiver@70 {
+               compatible = "adi,adv7482";
+               reg = <0x70>;
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               interrupt-parent = <&gpio6>;
+               interrupt-names = "intrq1", "intrq2";
+               interrupts = <30 IRQ_TYPE_LEVEL_LOW>,
+                            <31 IRQ_TYPE_LEVEL_LOW>;
+
+               port@7 {
+                       reg = <7>;
+
+                       adv7482_ain7: endpoint {
+                               remote-endpoint = <&cvbs_con>;
+                       };
+               };
+
+               port@8 {
+                       reg = <8>;
+
+                       adv7482_hdmi: endpoint {
+                               remote-endpoint = <&hdmi_in_con>;
+                       };
+               };
+
+               port@a {
+                       reg = <10>;
+
+                       adv7482_txa: endpoint {
+                               clock-lanes = <0>;
+                               data-lanes = <1 2 3 4>;
+                               remote-endpoint = <&csi40_in>;
+                       };
+               };
+
+               port@b {
+                       reg = <11>;
+
+                       adv7482_txb: endpoint {
+                               clock-lanes = <0>;
+                               data-lanes = <1>;
+                               remote-endpoint = <&csi20_in>;
+                       };
+               };
+       };
 };
 
 &i2c_dvfs {
                #interrupt-cells = <2>;
                gpio-controller;
                #gpio-cells = <2>;
+               rohm,ddr-backup-power = <0xf>;
+               rohm,rstbmode-level;
 
                regulators {
                        dvfs: dvfs {
                        };
                };
        };
+
+       eeprom@50 {
+               compatible = "rohm,br24t01", "atmel,24c01";
+               reg = <0x50>;
+               pagesize = <8>;
+       };
 };
 
 &ohci0 {
 
        avb_pins: avb {
                mux {
-                       groups = "avb_link", "avb_mdc", "avb_mii";
+                       groups = "avb_link", "avb_mdio", "avb_mii";
                        function = "avb";
                };
 
-               pins_mdc {
-                       groups = "avb_mdc";
+               pins_mdio {
+                       groups = "avb_mdio";
                        drive-strength = <24>;
                };
 
                function = "du";
        };
 
+       hscif1_pins: hscif1 {
+               groups = "hscif1_data_a", "hscif1_ctrl_a";
+               function = "hscif1";
+       };
+
        i2c2_pins: i2c2 {
                groups = "i2c2_a";
                function = "i2c2";
        sdhi2_pins: sd2 {
                groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
                function = "sdhi2";
-               power-source = <1800>;
+               power-source = <3300>;
        };
 
        sdhi2_pins_uhs: sd2_uhs {
                 <&audio_clk_c>,
                 <&cpg CPG_CORE CPG_AUDIO_CLK_I>;
 
-       rcar_sound,dai {
-               dai0 {
-                       playback = <&ssi0 &src0 &dvc0>;
-                       capture  = <&ssi1 &src1 &dvc1>;
+       ports {
+               rsnd_port0: port@0 {
+                       rsnd_endpoint0: endpoint {
+                               remote-endpoint = <&ak4613_endpoint>;
+
+                               dai-format = "left_j";
+                               bitclock-master = <&rsnd_endpoint0>;
+                               frame-master = <&rsnd_endpoint0>;
+
+                               playback = <&ssi0 &src0 &dvc0>;
+                               capture  = <&ssi1 &src1 &dvc1>;
+                       };
                };
        };
 };
        pinctrl-names = "default";
 
        uart-has-rtscts;
-       status = "okay";
+       /* Please only enable hscif1 or scif1 */
+       /* status = "okay"; */
 };
 
 &scif2 {
        cd-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>;
        wp-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
        bus-width = <4>;
-       sd-uhs-sdr12;
-       sd-uhs-sdr25;
        sd-uhs-sdr50;
-       sd-uhs-sdr104;
        status = "okay";
-
-       max-frequency = <208000000>;
 };
 
 &sdhi2 {
        vqmmc-supply = <&reg_1p8v>;
        bus-width = <8>;
        mmc-hs200-1_8v;
-       mmc-hs400-1_8v;
        non-removable;
        fixed-emmc-driver-type = <1>;
        status = "okay";
-       max-frequency = <200000000>;
 };
 
 &sdhi3 {
        cd-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>;
        wp-gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>;
        bus-width = <4>;
-       sd-uhs-sdr12;
-       sd-uhs-sdr25;
        sd-uhs-sdr50;
-       sd-uhs-sdr104;
        status = "okay";
-       max-frequency = <208000000>;
 };
 
 &ssi1 {
        clock-frequency = <100000000>;
 };
 
-&wdt0 {
+&vin0 {
+       status = "okay";
+};
+
+&vin1 {
+       status = "okay";
+};
+
+&vin2 {
+       status = "okay";
+};
+
+&vin3 {
+       status = "okay";
+};
+
+&vin4 {
+       status = "okay";
+};
+
+&vin5 {
+       status = "okay";
+};
+
+&vin6 {
+       status = "okay";
+};
+
+&vin7 {
+       status = "okay";
+};
+
+&rwdt {
        timeout-sec = <60>;
        status = "okay";
 };
index 468868c..ddee50e 100644 (file)
@@ -1,11 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Device Tree Source for the Salvator-X board
  *
  * Copyright (C) 2015-2016 Renesas Electronics Corp.
- *
- * This file is licensed under the terms of the GNU General Public License
- * version 2.  This program is licensed "as is" without any warranty of any
- * kind, whether express or implied.
  */
 
 #include "salvator-common.dtsi"
@@ -20,6 +17,8 @@
 };
 
 &i2c4 {
+       clock-frequency = <400000>;
+
        versaclock5: clock-generator@6a {
                compatible = "idt,5p49v5923";
                reg = <0x6a>;
index f8b7701..7a9b742 100644 (file)
        usb33d-supply = <&usb33>;
 };
 
+&hwspinlock {
+       status = "okay";
+};
+
+&pinctrl {
+       hwlocks = <&hwspinlock 0>;
+};
+
 &usbphyc_port0 {
        phy-supply = <&vdd_usb>;
        vdda1v1-supply = <&reg11>;
index 33c5981..37cadfa 100644 (file)
                        status = "disabled";
                };
 
+               hwspinlock: hwspinlock@4c000000 {
+                       compatible = "st,stm32-hwspinlock";
+                       #hwlock-cells = <1>;
+                       reg = <0x4c000000 0x400>;
+                       clocks = <&rcc HSEM>;
+                       clock-names = "hwspinlock";
+                       status = "disabled";
+               };
+
                rcc: rcc@50000000 {
                        compatible = "st,stm32mp1-rcc", "syscon";
                        reg = <0x50000000 0x1000>;
index e16c7f2..0ead552 100644 (file)
@@ -1,12 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Device Tree Source for the R-Car Gen3 ULCB board
  *
  * Copyright (C) 2016 Renesas Electronics Corp.
  * Copyright (C) 2016 Cogent Embedded, Inc.
- *
- * This file is licensed under the terms of the GNU General Public License
- * version 2.  This program is licensed "as is" without any warranty of any
- * kind, whether express or implied.
  */
 
 #include <dt-bindings/gpio/gpio.h>
                stdout-path = "serial0:115200n8";
        };
 
-       cpld {
-               compatible = "renesas,ulcb-cpld";
-               status = "okay";
-               gpio-sck = <&gpio6 8 0>;
-               gpio-mosi = <&gpio6 7 0>;
-               gpio-miso = <&gpio6 10 0>;
-               gpio-sstbz = <&gpio2 3 0>;
-       };
-
        audio_clkout: audio-clkout {
                /*
                 * This is same as <&rcar_sound 0>
 
 &i2c_dvfs {
        status = "okay";
+
+       pmic: pmic@30 {
+               pinctrl-0 = <&irq0_pins>;
+               pinctrl-names = "default";
+
+               compatible = "rohm,bd9571mwv";
+               reg = <0x30>;
+               interrupt-parent = <&intc_ex>;
+               interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               rohm,ddr-backup-power = <0xf>;
+               rohm,rstbmode-pulse;
+
+               regulators {
+                       dvfs: dvfs {
+                               regulator-name = "dvfs";
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1030000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+               };
+       };
 };
 
 &ohci1 {
 
        avb_pins: avb {
                mux {
-                       groups = "avb_link", "avb_mdc", "avb_mii";
+                       groups = "avb_link", "avb_mdio", "avb_mii";
                        function = "avb";
                };
 
-               pins_mdc {
-                       groups = "avb_mdc";
+               pins_mdio {
+                       groups = "avb_mdio";
                        drive-strength = <24>;
                };
 
                function = "i2c2";
        };
 
+       irq0_pins: irq0 {
+               groups = "intc_ex_irq0";
+               function = "intc_ex";
+       };
+
        scif2_pins: scif2 {
                groups = "scif2_data_a";
                function = "scif2";
        sdhi2_pins: sd2 {
                groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
                function = "sdhi2";
-               power-source = <1800>;
+               power-source = <3300>;
        };
 
        sdhi2_pins_uhs: sd2_uhs {
        vqmmc-supply = <&vccq_sdhi0>;
        cd-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>;
        bus-width = <4>;
-       sd-uhs-sdr12;
-       sd-uhs-sdr25;
        sd-uhs-sdr50;
-       sd-uhs-sdr104;
        status = "okay";
-       max-frequency = <208000000>;
 };
 
 &sdhi2 {
        vqmmc-supply = <&reg_1p8v>;
        bus-width = <8>;
        mmc-hs200-1_8v;
-       mmc-hs400-1_8v;
        non-removable;
        status = "okay";
-       max-frequency = <200000000>;
 };
 
 &ssi1 {
        status = "okay";
 };
 
-&wdt0 {
+&rwdt {
        timeout-sec = <60>;
        status = "okay";
 };
index 84859b1..570e80a 100644 (file)
@@ -7,6 +7,8 @@
 #ifndef _GPIO_H_
 #define _GPIO_H_
 
+#define STM32_GPIOS_PER_BANK           16
+
 enum stm32_gpio_port {
        STM32_GPIO_PORT_A = 0,
        STM32_GPIO_PORT_B,
@@ -109,6 +111,9 @@ struct stm32_gpio_regs {
 
 struct stm32_gpio_priv {
        struct stm32_gpio_regs *regs;
+       unsigned int gpio_range;
 };
 
+int stm32_offset_to_index(struct udevice *dev, unsigned int offset);
+
 #endif /* _GPIO_H_ */
index 5df7472..12bc7fb 100644 (file)
@@ -160,7 +160,12 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen)
 #define in_be32(a)     in_arch(l,be32,a)
 #define in_be16(a)     in_arch(w,be16,a)
 
+#define out_32(a,v)    __raw_writel(v,a)
+#define out_16(a,v)    __raw_writew(v,a)
 #define out_8(a,v)     __raw_writeb(v,a)
+
+#define in_32(a)       __raw_readl(a)
+#define in_16(a)       __raw_readw(a)
 #define in_8(a)                __raw_readb(a)
 
 #define clrbits(type, addr, clear) \
@@ -180,6 +185,10 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen)
 #define setbits_le32(addr, set) setbits(le32, addr, set)
 #define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set)
 
+#define clrbits_32(addr, clear) clrbits(32, addr, clear)
+#define setbits_32(addr, set) setbits(32, addr, set)
+#define clrsetbits_32(addr, clear, set) clrsetbits(32, addr, clear, set)
+
 #define clrbits_be16(addr, clear) clrbits(be16, addr, clear)
 #define setbits_be16(addr, set) setbits(be16, addr, set)
 #define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set)
@@ -188,6 +197,10 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen)
 #define setbits_le16(addr, set) setbits(le16, addr, set)
 #define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set)
 
+#define clrbits_16(addr, clear) clrbits(16, addr, clear)
+#define setbits_16(addr, set) setbits(16, addr, set)
+#define clrsetbits_16(addr, clear, set) clrsetbits(16, addr, clear, set)
+
 #define clrbits_8(addr, clear) clrbits(8, addr, clear)
 #define setbits_8(addr, set) setbits(8, addr, set)
 #define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set)
index eca78f8..b714e93 100644 (file)
@@ -48,3 +48,13 @@ SECTIONS
                __bss_end = .;
        } >.sdram
 }
+
+#if defined(CONFIG_SPL_MAX_SIZE)
+ASSERT(__image_copy_end - __start < (CONFIG_SPL_MAX_SIZE), \
+       "SPL image too big");
+#endif
+
+#if defined(CONFIG_SPL_BSS_MAX_SIZE)
+ASSERT(__bss_end - __bss_start < (CONFIG_SPL_BSS_MAX_SIZE), \
+       "SPL image BSS too big");
+#endif
index d82023a..c6e5f75 100644 (file)
@@ -13,6 +13,11 @@ config RCAR_GEN3
        select ARM64
        select PHY
        select CMD_CACHE
+       imply CMD_FS_UUID
+       imply CMD_GPT
+       imply CMD_UUID
+       imply CMD_MMC_SWRITE if MMC
+       imply SUPPORT_EMMC_RPMB if MMC
 
 endchoice
 
index c9ebc9f..65a9ca8 100644 (file)
@@ -5,6 +5,7 @@
  */
 #include <common.h>
 #include <asm/io.h>
+#include <linux/ctype.h>
 
 /* R-Car Gen3 caches are enabled in memmap-gen3.c */
 #ifndef CONFIG_RCAR_GEN3
@@ -67,19 +68,41 @@ static const struct {
        { 0x0, "CPU" },
 };
 
-int print_cpuinfo(void)
+static int rmobile_cpuinfo_idx(void)
 {
        int i = 0;
        u32 cpu_type = rmobile_get_cpu_type();
-       for (; i < ARRAY_SIZE(rmobile_cpuinfo); i++) {
-               if (rmobile_cpuinfo[i].cpu_type == cpu_type) {
-                       printf("CPU: Renesas Electronics %s rev %d.%d\n",
-                              rmobile_cpuinfo[i].cpu_name,
-                              rmobile_get_cpu_rev_integer(),
-                              rmobile_get_cpu_rev_fraction());
+
+       for (; i < ARRAY_SIZE(rmobile_cpuinfo); i++)
+               if (rmobile_cpuinfo[i].cpu_type == cpu_type)
                        break;
-               }
-       }
+
+       return i;
+}
+
+#ifdef CONFIG_ARCH_MISC_INIT
+int arch_misc_init(void)
+{
+       int i, idx = rmobile_cpuinfo_idx();
+       char cpu[10] = { 0 };
+
+       for (i = 0; i < sizeof(cpu); i++)
+               cpu[i] = tolower(rmobile_cpuinfo[idx].cpu_name[i]);
+
+       env_set("platform", cpu);
+
+       return 0;
+}
+#endif
+
+int print_cpuinfo(void)
+{
+       int i = rmobile_cpuinfo_idx();
+
+       printf("CPU: Renesas Electronics %s rev %d.%d\n",
+               rmobile_cpuinfo[i].cpu_name, rmobile_get_cpu_rev_integer(),
+               rmobile_get_cpu_rev_fraction());
+
        return 0;
 }
 #endif /* CONFIG_DISPLAY_CPUINFO */
index 415466a..8f18e33 100644 (file)
@@ -28,6 +28,31 @@ config TARGET_PUMA_RK3399
           * HDMI, eDP, MIPI-DSI, MIPI-DSI/CSI and MIPI-CSI
           * SPI, I2C, I2S, UART, GPIO, ...
 
+config TARGET_ROCK960_RK3399
+       bool "Vamrs Limited Rock960 board family"
+       help
+         Support for Rock960 board family by Vamrs Limited. This board
+         family consists of Rock960 (Consumer Edition) and Ficus
+         (Enterprise Edition) 96Boards.
+
+         Common features implemented on both boards:
+          * Rockchip RK3399 SoC (2xCortex A72, 4xCortex A53, ARM Mali T860MP4)
+          * 16/32GB eMMC, uSD slot
+          * HDMI/DP/MIPI
+          * 20-pin low speed and 40-pin high speed expanders, 6 LED, 3 buttons
+
+         Additional features of Rock960:
+          * 2GiB/4GiB LPDDR3 RAM
+          * 1x USB 3.0 type A, 1x USB 2.0 type A (host mode only),
+            1x USB 3.0 type C OTG
+
+         Additional features of Ficus:
+          * 2GiB/4GiB DDR3 RAM
+          * Ethernet
+          * Dual SATA
+          * 2x USB 3.0 type A, 2x USB 2.0 type A (host mode only),
+            1x USB 3.0 type C OTG
+
 endchoice
 
 config SYS_SOC
@@ -38,5 +63,6 @@ config SYS_MALLOC_F_LEN
 
 source "board/rockchip/evb_rk3399/Kconfig"
 source "board/theobroma-systems/puma_rk3399/Kconfig"
+source "board/vamrs/rock960_rk3399/Kconfig"
 
 endif
index 5151150..5ca76d2 100644 (file)
@@ -8,6 +8,8 @@
 #define _STM32_GPIO_H_
 #include <asm/gpio.h>
 
+#define STM32_GPIOS_PER_BANK           16
+
 enum stm32_gpio_port {
        STM32_GPIO_PORT_A = 0,
        STM32_GPIO_PORT_B,
@@ -110,5 +112,9 @@ struct stm32_gpio_regs {
 
 struct stm32_gpio_priv {
        struct stm32_gpio_regs *regs;
+       unsigned int gpio_range;
 };
+
+int stm32_offset_to_index(struct udevice *dev, unsigned int offset);
+
 #endif /* _STM32_GPIO_H_ */
index 849a69a..c9c9964 100644 (file)
   #define HWCONFIG_BUFFER_SIZE 256
 #endif
 
-/* CONFIG_HARD_SPI triggers SPI bus initialization in PowerPC */
-#if defined(CONFIG_MPC8XXX_SPI) || defined(CONFIG_FSL_ESPI)
-# ifndef CONFIG_HARD_SPI
-#  define CONFIG_HARD_SPI
-# endif
-#endif
-
 #define CONFIG_LMB
 #define CONFIG_SYS_BOOT_RAMDISK_HIGH
 
index 3e0af55..732a357 100644 (file)
@@ -55,6 +55,11 @@ config RISCV_ISA_C
 config RISCV_ISA_A
        def_bool y
 
+config RISCV_SMODE
+       bool "Run in S-Mode"
+       help
+         Enable this option to build U-Boot for RISC-V S-Mode
+
 config 32BIT
        bool
 
index 15e1b81..64246a4 100644 (file)
@@ -38,13 +38,11 @@ _start:
        mv      s0, a0
        mv      s1, a1
 
-       li      t0, CONFIG_SYS_SDRAM_BASE
-       SREG    a2, 0(t0)
        la      t0, trap_entry
-       csrw    mtvec, t0
+       csrw    MODE_PREFIX(tvec), t0
 
        /* mask all interrupts */
-       csrw    mie, zero
+       csrw    MODE_PREFIX(ie), zero
 
        /* Enable cache */
        jal     icache_enable
@@ -166,7 +164,7 @@ fix_rela_dyn:
 */
        la      t0, trap_entry
        add     t0, t0, t6
-       csrw    mtvec, t0
+       csrw    MODE_PREFIX(tvec), t0
 
 clear_bss:
        la      t0, __bss_start         /* t0 <- rel __bss_start in FLASH */
@@ -238,17 +236,24 @@ trap_entry:
        SREG    x29, 29*REGBYTES(sp)
        SREG    x30, 30*REGBYTES(sp)
        SREG    x31, 31*REGBYTES(sp)
-       csrr    a0, mcause
-       csrr    a1, mepc
+       csrr    a0, MODE_PREFIX(cause)
+       csrr    a1, MODE_PREFIX(epc)
        mv      a2, sp
        jal     handle_trap
-       csrw    mepc, a0
+       csrw    MODE_PREFIX(epc), a0
 
+#ifdef CONFIG_RISCV_SMODE
+/*
+ * Remain in S-mode after sret
+ */
+       li      t0, SSTATUS_SPP
+#else
 /*
  * Remain in M-mode after mret
  */
        li      t0, MSTATUS_MPP
-       csrs    mstatus, t0
+#endif
+       csrs    MODE_PREFIX(status), t0
        LREG    x1, 1*REGBYTES(sp)
        LREG    x2, 2*REGBYTES(sp)
        LREG    x3, 3*REGBYTES(sp)
@@ -281,4 +286,4 @@ trap_entry:
        LREG    x30, 30*REGBYTES(sp)
        LREG    x31, 31*REGBYTES(sp)
        addi    sp, sp, 32*REGBYTES
-       mret
+       MODE_PREFIX(ret)
index 9ea50ce..97cf906 100644 (file)
@@ -7,6 +7,12 @@
 #ifndef RISCV_CSR_ENCODING_H
 #define RISCV_CSR_ENCODING_H
 
+#ifdef CONFIG_RISCV_SMODE
+#define MODE_PREFIX(__suffix)  s##__suffix
+#else
+#define MODE_PREFIX(__suffix)  m##__suffix
+#endif
+
 #define MSTATUS_UIE    0x00000001
 #define MSTATUS_SIE    0x00000002
 #define MSTATUS_HIE    0x00000004
index 903a1c4..3aff006 100644 (file)
@@ -34,17 +34,30 @@ int disable_interrupts(void)
        return 0;
 }
 
-ulong handle_trap(ulong mcause, ulong epc, struct pt_regs *regs)
+ulong handle_trap(ulong cause, ulong epc, struct pt_regs *regs)
 {
-       ulong is_int;
+       ulong is_irq, irq;
 
-       is_int = (mcause & MCAUSE_INT);
-       if ((is_int) && ((mcause & MCAUSE_CAUSE)  == IRQ_M_EXT))
-               external_interrupt(0);  /* handle_m_ext_interrupt */
-       else if ((is_int) && ((mcause & MCAUSE_CAUSE)  == IRQ_M_TIMER))
-               timer_interrupt(0);     /* handle_m_timer_interrupt */
-       else
-               _exit_trap(mcause, epc, regs);
+       is_irq = (cause & MCAUSE_INT);
+       irq = (cause & ~MCAUSE_INT);
+
+       if (is_irq) {
+               switch (irq) {
+               case IRQ_M_EXT:
+               case IRQ_S_EXT:
+                       external_interrupt(0);  /* handle external interrupt */
+                       break;
+               case IRQ_M_TIMER:
+               case IRQ_S_TIMER:
+                       timer_interrupt(0);     /* handle timer interrupt */
+                       break;
+               default:
+                       _exit_trap(cause, epc, regs);
+                       break;
+               };
+       } else {
+               _exit_trap(cause, epc, regs);
+       }
 
        return epc;
 }
index 2610794..f6cf859 100644 (file)
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0+
 
-head-y := arch/sandbox/cpu/start.o
-
+head-y := arch/sandbox/cpu/start.o arch/sandbox/cpu/os.o
+head-$(CONFIG_SANDBOX_SDL) += arch/sandbox/cpu/sdl.o
 libs-y += arch/sandbox/cpu/
 libs-y += arch/sandbox/lib/
index 95f9e3f..7226b7b 100644 (file)
@@ -17,11 +17,12 @@ PLATFORM_CPPFLAGS += $(shell sdl-config --cflags)
 endif
 endif
 
-cmd_u-boot__ = $(CC) -o $@ -Wl,-T u-boot.lds \
+cmd_u-boot__ = $(CC) -o $@ -Wl,-T u-boot.lds $(u-boot-init) \
        -Wl,--start-group $(u-boot-main) -Wl,--end-group \
        $(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot.map
 
 cmd_u-boot-spl = (cd $(obj) && $(CC) -o $(SPL_BIN) -Wl,-T u-boot-spl.lds \
+       $(patsubst $(obj)/%,%,$(u-boot-spl-init)) \
        -Wl,--start-group $(patsubst $(obj)/%,%,$(u-boot-spl-main)) \
        $(patsubst $(obj)/%,%,$(u-boot-spl-platdata)) -Wl,--end-group \
        $(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot-spl.map -Wl,--gc-sections)
index 8fe6818..bac9644 100644 (file)
@@ -5,10 +5,11 @@
 # (C) Copyright 2000-2003
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 
-obj-y  := cpu.o os.o start.o state.o
+obj-y  := cpu.o state.o
+extra-y        := start.o os.o
+extra-$(CONFIG_SANDBOX_SDL)    += sdl.o
 obj-$(CONFIG_SPL_BUILD)        += spl.o
 obj-$(CONFIG_ETH_SANDBOX_RAW)  += eth-raw-os.o
-obj-$(CONFIG_SANDBOX_SDL)      += sdl.o
 
 # os.c is build in the system environment, so needs standard includes
 # CFLAGS_REMOVE_os.o cannot be used to drop header include path
index 62e05c5..a8d01e4 100644 (file)
@@ -668,7 +668,7 @@ static int os_jump_to_file(const char *fname)
        os_free(argv);
        if (err) {
                perror("Unable to run image");
-               printf("Image filename '%s'\n", mem_fname);
+               printf("Image filename '%s'\n", fname);
                return err;
        }
 
index 5005ed2..2ca4cd6 100644 (file)
@@ -69,7 +69,11 @@ void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
 {
        const char *fname = spl_image->arg;
 
-       os_fd_restore();
-       os_spl_to_uboot(fname);
+       if (fname) {
+               os_fd_restore();
+               os_spl_to_uboot(fname);
+       } else {
+               printf("No filename provided for U-Boot\n");
+       }
        hang();
 }
index b1566a8..2f5e6e9 100644 (file)
@@ -180,6 +180,7 @@ static int sandbox_cmdline_cb_memory(struct sandbox_state *state,
                printf("Failed to read RAM buffer '%s': %d\n", arg, err);
                return err;
        }
+       state->ram_buf_read = true;
 
        return 0;
 }
@@ -301,6 +302,12 @@ int board_run_command(const char *cmdline)
 
 static void setup_ram_buf(struct sandbox_state *state)
 {
+       /* Zero the RAM buffer if we didn't read it, to keep valgrind happy */
+       if (!state->ram_buf_read) {
+               memset(state->ram_buf, '\0', state->ram_size);
+               printf("clear %p %x\n", state->ram_buf, state->ram_size);
+       }
+
        gd->arch.ram_buf = state->ram_buf;
        gd->ram_size = state->ram_size;
 }
index 252aa7b..082fcec 100644 (file)
                dev@0,0 {
                        compatible = "denx,u-boot-fdt-dummy";
                        reg = <0 0x0 0x1000>;
+                       reg-names = "sandbox-dummy-0";
                };
 
                dev@1,100 {
        pinctrl {
                compatible = "sandbox,pinctrl";
        };
+
+       hwspinlock@0 {
+               compatible = "sandbox,hwspinlock";
+       };
+
+       dma: dma {
+               compatible = "sandbox,dma";
+               #dma-cells = <1>;
+
+               dmas = <&dma 0>, <&dma 1>, <&dma 2>;
+               dma-names = "m2m", "tx0", "rx0";
+       };
 };
 
 #include "sandbox_pmic.dtsi"
index 8fabe70..c724827 100644 (file)
@@ -90,6 +90,7 @@ struct sandbox_state {
        bool show_test_output;          /* Don't suppress stdout in tests */
        int default_log_level;          /* Default log level for sandbox */
        bool show_of_platdata;          /* Show of-platdata in SPL */
+       bool ram_buf_read;              /* true if we read the RAM buffer */
 
        /* Pointer to information for each SPI bus/cs */
        struct sandbox_spi_info spi[CONFIG_SANDBOX_SPI_MAX_BUS]
@@ -100,6 +101,7 @@ struct sandbox_state {
 
        ulong next_tag;                 /* Next address tag to allocate */
        struct list_head mapmem_head;   /* struct sandbox_mapmem_entry */
+       bool hwspinlock;                /* Hardware Spinlock status */
 };
 
 /* Minimum space we guarantee in the state FDT when calling read/write*/
index 95fae03..e3b65cf 100644 (file)
@@ -303,6 +303,57 @@ struct acpi_mcfg_mmconfig {
 /* ACPI global NVS structure */
 struct acpi_global_nvs;
 
+/* DBG2 definitions are partially used for SPCR interface_type */
+
+/* Types for port_type field */
+
+#define ACPI_DBG2_SERIAL_PORT          0x8000
+#define ACPI_DBG2_1394_PORT            0x8001
+#define ACPI_DBG2_USB_PORT             0x8002
+#define ACPI_DBG2_NET_PORT             0x8003
+
+/* Subtypes for port_subtype field */
+
+#define ACPI_DBG2_16550_COMPATIBLE     0x0000
+#define ACPI_DBG2_16550_SUBSET         0x0001
+#define ACPI_DBG2_ARM_PL011            0x0003
+#define ACPI_DBG2_ARM_SBSA_32BIT       0x000D
+#define ACPI_DBG2_ARM_SBSA_GENERIC     0x000E
+#define ACPI_DBG2_ARM_DCC              0x000F
+#define ACPI_DBG2_BCM2835              0x0010
+
+#define ACPI_DBG2_1394_STANDARD                0x0000
+
+#define ACPI_DBG2_USB_XHCI             0x0000
+#define ACPI_DBG2_USB_EHCI             0x0001
+
+#define ACPI_DBG2_UNKNOWN              0x00FF
+
+/* SPCR (Serial Port Console Redirection table) */
+struct __packed acpi_spcr {
+       struct acpi_table_header header;
+       u8 interface_type;
+       u8 reserved[3];
+       struct acpi_gen_regaddr serial_port;
+       u8 interrupt_type;
+       u8 pc_interrupt;
+       u32 interrupt;          /* Global system interrupt */
+       u8 baud_rate;
+       u8 parity;
+       u8 stop_bits;
+       u8 flow_control;
+       u8 terminal_type;
+       u8 reserved1;
+       u16 pci_device_id;      /* Must be 0xffff if not PCI device */
+       u16 pci_vendor_id;      /* Must be 0xffff if not PCI device */
+       u8 pci_bus;
+       u8 pci_device;
+       u8 pci_function;
+       u32 pci_flags;
+       u8 pci_segment;
+       u32 reserved2;
+};
+
 /* These can be used by the target port */
 
 void acpi_fill_header(struct acpi_table_header *header, char *signature);
index e48c9b9..79bc200 100644 (file)
@@ -10,6 +10,7 @@
 #include <cpu.h>
 #include <dm.h>
 #include <dm/uclass-internal.h>
+#include <serial.h>
 #include <version.h>
 #include <asm/acpi/global_nvs.h>
 #include <asm/acpi_table.h>
@@ -336,6 +337,115 @@ static void acpi_create_mcfg(struct acpi_mcfg *mcfg)
        header->checksum = table_compute_checksum((void *)mcfg, header->length);
 }
 
+static void acpi_create_spcr(struct acpi_spcr *spcr)
+{
+       struct acpi_table_header *header = &(spcr->header);
+       struct serial_device_info serial_info = {0};
+       ulong serial_address, serial_offset;
+       uint serial_config;
+       uint serial_width;
+       int access_size;
+       int space_id;
+       int ret;
+
+       /* Fill out header fields */
+       acpi_fill_header(header, "SPCR");
+       header->length = sizeof(struct acpi_spcr);
+       header->revision = 2;
+
+       ret = serial_getinfo(&serial_info);
+       if (ret)
+               serial_info.type = SERIAL_CHIP_UNKNOWN;
+
+       /* Encode chip type */
+       switch (serial_info.type) {
+       case SERIAL_CHIP_16550_COMPATIBLE:
+               spcr->interface_type = ACPI_DBG2_16550_COMPATIBLE;
+               break;
+       case SERIAL_CHIP_UNKNOWN:
+       default:
+               spcr->interface_type = ACPI_DBG2_UNKNOWN;
+               break;
+       }
+
+       /* Encode address space */
+       switch (serial_info.addr_space) {
+       case SERIAL_ADDRESS_SPACE_MEMORY:
+               space_id = ACPI_ADDRESS_SPACE_MEMORY;
+               break;
+       case SERIAL_ADDRESS_SPACE_IO:
+       default:
+               space_id = ACPI_ADDRESS_SPACE_IO;
+               break;
+       }
+
+       serial_width = serial_info.reg_width * 8;
+       serial_offset = serial_info.reg_offset << serial_info.reg_shift;
+       serial_address = serial_info.addr + serial_offset;
+
+       /* Encode register access size */
+       switch (serial_info.reg_shift) {
+       case 0:
+               access_size = ACPI_ACCESS_SIZE_BYTE_ACCESS;
+               break;
+       case 1:
+               access_size = ACPI_ACCESS_SIZE_WORD_ACCESS;
+               break;
+       case 2:
+               access_size = ACPI_ACCESS_SIZE_DWORD_ACCESS;
+               break;
+       case 3:
+               access_size = ACPI_ACCESS_SIZE_QWORD_ACCESS;
+               break;
+       default:
+               access_size = ACPI_ACCESS_SIZE_UNDEFINED;
+               break;
+       }
+
+       debug("UART type %u @ %lx\n", spcr->interface_type, serial_address);
+
+       /* Fill GAS */
+       spcr->serial_port.space_id = space_id;
+       spcr->serial_port.bit_width = serial_width;
+       spcr->serial_port.bit_offset = 0;
+       spcr->serial_port.access_size = access_size;
+       spcr->serial_port.addrl = lower_32_bits(serial_address);
+       spcr->serial_port.addrh = upper_32_bits(serial_address);
+
+       /* Encode baud rate */
+       switch (serial_info.baudrate) {
+       case 9600:
+               spcr->baud_rate = 3;
+               break;
+       case 19200:
+               spcr->baud_rate = 4;
+               break;
+       case 57600:
+               spcr->baud_rate = 6;
+               break;
+       case 115200:
+               spcr->baud_rate = 7;
+               break;
+       default:
+               spcr->baud_rate = 0;
+               break;
+       }
+
+       ret = serial_getconfig(&serial_config);
+       if (ret)
+               serial_config = SERIAL_DEFAULT_CONFIG;
+
+       spcr->parity = SERIAL_GET_PARITY(serial_config);
+       spcr->stop_bits = SERIAL_GET_STOP(serial_config);
+
+       /* No PCI devices for now */
+       spcr->pci_device_id = 0xffff;
+       spcr->pci_vendor_id = 0xffff;
+
+       /* Fix checksum */
+       header->checksum = table_compute_checksum((void *)spcr, header->length);
+}
+
 /*
  * QEMU's version of write_acpi_tables is defined in drivers/misc/qfw.c
  */
@@ -350,6 +460,7 @@ ulong write_acpi_tables(ulong start)
        struct acpi_fadt *fadt;
        struct acpi_mcfg *mcfg;
        struct acpi_madt *madt;
+       struct acpi_spcr *spcr;
        int i;
 
        current = start;
@@ -438,6 +549,13 @@ ulong write_acpi_tables(ulong start)
        acpi_add_table(rsdp, mcfg);
        current = ALIGN(current, 16);
 
+       debug("ACPI:    * SPCR\n");
+       spcr = (struct acpi_spcr *)current;
+       acpi_create_spcr(spcr);
+       current += spcr->header.length;
+       acpi_add_table(rsdp, spcr);
+       current = ALIGN(current, 16);
+
        debug("current = %x\n", current);
 
        acpi_rsdp_addr = (unsigned long)rsdp;
index 5f4ca0f..d343453 100644 (file)
@@ -14,6 +14,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+extern phys_addr_t prior_stage_fdt_address;
 /*
  * Miscellaneous platform dependent initializations
  */
@@ -66,7 +67,7 @@ ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info)
 
 void *board_fdt_blob_setup(void)
 {
-       void **ptr = (void *)CONFIG_SYS_SDRAM_BASE;
+       void **ptr = (void *)&prior_stage_fdt_address;
        if (fdt_magic(*ptr) == FDT_MAGIC)
                        return (void *)*ptr;
 
index 33ca253..56bb533 100644 (file)
@@ -13,7 +13,8 @@ config SYS_CONFIG_NAME
        default "qemu-riscv"
 
 config SYS_TEXT_BASE
-       default 0x80000000
+       default 0x80000000 if !RISCV_SMODE
+       default 0x80200000 if RISCV_SMODE
 
 config BOARD_SPECIFIC_OPTIONS # dummy
        def_bool y
index 3c6eb4f..c701c83 100644 (file)
@@ -4,4 +4,6 @@ S:      Maintained
 F:     board/emulation/qemu-riscv/
 F:     include/configs/qemu-riscv.h
 F:     configs/qemu-riscv32_defconfig
+F:     configs/qemu-riscv32_smode_defconfig
 F:     configs/qemu-riscv64_defconfig
+F:     configs/qemu-riscv64_smode_defconfig
index 4ec0af4..d40ed37 100644 (file)
@@ -273,7 +273,7 @@ void spi_cs_deactivate(struct spi_slave *slave)
 
        iopd->dat |=  SPI_CS_MASK;
 }
-#endif /* CONFIG_HARD_SPI */
+#endif
 
 #if defined(CONFIG_OF_BOARD_SETUP)
 int ft_board_setup(void *blob, bd_t *bd)
index a411d4e..d547af4 100644 (file)
@@ -208,4 +208,4 @@ void spi_cs_deactivate(struct spi_slave *slave)
        /* deactivate the spi_cs */
        setbits_be32(&iopd->dat, IDSCPLD_SPI_CS_MASK);
 }
-#endif /* CONFIG_HARD_SPI */
+#endif
index 8b15267..8f0247e 100644 (file)
@@ -31,7 +31,6 @@ void s_init(void)
 {
 }
 
-#define SCIF2_MSTP310          BIT(10) /* SCIF2 */
 #define DVFS_MSTP926           BIT(26)
 #define HSUSB_MSTP704          BIT(4)  /* HSUSB */
 
@@ -100,3 +99,25 @@ void reset_cpu(ulong addr)
        writel(RST_CODE, RST_CA57RESCNT);
 #endif
 }
+
+#ifdef CONFIG_MULTI_DTB_FIT
+int board_fit_config_name_match(const char *name)
+{
+       /* PRR driver is not available yet */
+       u32 cpu_type = rmobile_get_cpu_type();
+
+       if ((cpu_type == RMOBILE_CPU_TYPE_R8A7795) &&
+           !strcmp(name, "r8a7795-salvator-x-u-boot"))
+               return 0;
+
+       if ((cpu_type == RMOBILE_CPU_TYPE_R8A7796) &&
+           !strcmp(name, "r8a7796-salvator-x-u-boot"))
+               return 0;
+
+       if ((cpu_type == RMOBILE_CPU_TYPE_R8A77965) &&
+           !strcmp(name, "r8a77965-salvator-x-u-boot"))
+               return 0;
+
+       return -1;
+}
+#endif
index 63550af..81d6f8f 100644 (file)
@@ -30,8 +30,6 @@ void s_init(void)
 {
 }
 
-#define GSX_MSTP112            BIT(12) /* 3DG */
-#define SCIF2_MSTP310          BIT(10) /* SCIF2 */
 #define DVFS_MSTP926           BIT(26)
 #define HSUSB_MSTP704          BIT(4)  /* HSUSB */
 
@@ -84,3 +82,21 @@ int dram_init_banksize(void)
 
        return 0;
 }
+
+#ifdef CONFIG_MULTI_DTB_FIT
+int board_fit_config_name_match(const char *name)
+{
+       /* PRR driver is not available yet */
+       u32 cpu_type = rmobile_get_cpu_type();
+
+       if ((cpu_type == RMOBILE_CPU_TYPE_R8A7795) &&
+           !strcmp(name, "r8a7795-h3ulcb-u-boot"))
+               return 0;
+
+       if ((cpu_type == RMOBILE_CPU_TYPE_R8A7796) &&
+           !strcmp(name, "r8a7796-m3ulcb-u-boot"))
+               return 0;
+
+       return -1;
+}
+#endif
index 72709c0..3e06800 100644 (file)
@@ -59,6 +59,11 @@ int dram_init(void)
        return 0;
 }
 
+struct image_header *spl_get_load_buffer(ssize_t offset, size_t size)
+{
+       return (struct image_header *)(CONFIG_SYS_TEXT_BASE);
+}
+
 int board_init(void)
 {
        gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
diff --git a/board/vamrs/rock960_rk3399/Kconfig b/board/vamrs/rock960_rk3399/Kconfig
new file mode 100644 (file)
index 0000000..cacc53f
--- /dev/null
@@ -0,0 +1,15 @@
+if TARGET_ROCK960_RK3399
+
+config SYS_BOARD
+       default "rock960_rk3399"
+
+config SYS_VENDOR
+       default "vamrs"
+
+config SYS_CONFIG_NAME
+       default "rock960_rk3399"
+
+config BOARD_SPECIFIC_OPTIONS # dummy
+       def_bool y
+
+endif
diff --git a/board/vamrs/rock960_rk3399/MAINTAINERS b/board/vamrs/rock960_rk3399/MAINTAINERS
new file mode 100644 (file)
index 0000000..22b2db9
--- /dev/null
@@ -0,0 +1,11 @@
+ROCK960-RK3399
+M:      Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
+S:      Maintained
+F:      board/rockchip/rock960_rk3399
+F:      include/configs/rock960_rk3399.h
+F:      configs/rock960-rk3399_defconfig
+
+FICUS EE
+M:      Manivannan Sadhasivam manivannan.sadhasivam@linaro.org
+S:      Maintained
+F:     configs/ficus-rk3399_defconfig
diff --git a/board/vamrs/rock960_rk3399/Makefile b/board/vamrs/rock960_rk3399/Makefile
new file mode 100644 (file)
index 0000000..6c3e475
--- /dev/null
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Copyright (C) 2018 Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+#
+
+obj-y  += rock960-rk3399.o
diff --git a/board/vamrs/rock960_rk3399/README b/board/vamrs/rock960_rk3399/README
new file mode 100644 (file)
index 0000000..d143990
--- /dev/null
@@ -0,0 +1,152 @@
+Contents
+========
+
+1. Introduction
+2. Get the Source and prebuild binary
+3. Compile the U-Boot
+4. Compile the rkdeveloptool
+5. Package the image
+   5.1. Package the image for U-Boot SPL(option 1)
+   5.2. Package the image for Rockchip miniloader(option 2)
+6. Bootloader storage options
+7. Flash the image to eMMC
+   7.1. Flash the image with U-Boot SPL(option 1)
+   7.2. Flash the image with Rockchip miniloader(option 2)
+8. Create a bootable SD/MMC
+9. And that is it
+
+Introduction
+============
+
+Rock960 board family consists of Rock960 (Consumer Edition) and
+Ficus (Enterprise Edition) 96Boards featuring Rockchip RK3399 SoC.
+
+Common features implemented on both boards:
+       * CPU: ARMv8 64bit Big-Little architecture,
+               * Big: dual-core Cortex-A72
+               * Little: quad-core Cortex-A53
+               * IRAM: 200KB
+       * eMMC: 16/32GB eMMC 5.1
+       * PMU: RK808
+       * SD/MMC
+       * Display: HDMI/DP/MIPI
+       * Low Speed Expansion Connector
+       * High Speed Expansion Connector
+
+Additional features of Rock960:
+       * DRAM: 2GB/4GB LPDDR3 @ 1866MHz
+       * 1x USB 3.0 type A, 1x USB 2.0 type A (host mode only),
+         1x USB 3.0 type C OTG
+
+Additional features of Ficus:
+       * DRAM: 2GB/4GB DDR3 @ 1600MHz
+       * Ethernet
+       * 2x USB 3.0 type A, 2x USB 2.0 type A (host mode only),
+         1x USB 3.0 type C OTG
+
+Here is the step-by-step to boot to U-Boot on Rock960 boards.
+
+Get the Source and prebuild binary
+==================================
+
+  > git clone https://github.com/96rocks/rkbin.git
+  > git clone https://github.com/rockchip-linux/rkdeveloptool.git
+
+Compile the U-Boot
+==================
+
+  > cd ../u-boot
+  > cp ../rkbin/rk33/rk3399_bl31_v1.00.elf ./bl31.elf
+  > export ARCH=arm64
+  > export CROSS_COMPILE=aarch64-linux-gnu-
+  > make rock960-rk3399_defconfig
+  > make
+  > make u-boot.itb
+
+Compile the rkdeveloptool
+=========================
+
+Follow instructions in latest README
+  > cd ../rkdeveloptool
+  > autoreconf -i
+  > ./configure
+  > make
+  > sudo make install
+
+Package the image
+=================
+
+Package the image for U-Boot SPL(option 1)
+--------------------------------
+  > cd ..
+  > tools/mkimage -n rk3399 -T rksd -d spl/u-boot-spl.bin idbspl.img
+
+  Get idbspl.img in this step.
+
+Package the image for Rockchip miniloader(option 2)
+------------------------------------------
+  > cd ../rkbin
+  > ./tools/loaderimage --pack --uboot u-boot/u-boot-dtb.bin uboot.img 0x200000
+
+  > ../u-boot/tools/mkimage -n rk3399 -T rksd -d rk3399_ddr_933MHz_v1.08.bin idbloader.img
+  > cat ./rk33/rk3399_miniloader_v1.06.bin >> idbloader.img
+
+  Get uboot.img and idbloader.img in this step.
+
+Bootloader storage options
+==========================
+
+There are a few different storage options for the bootloader.
+This document explores two of these: eMMC and removable SD/MMC.
+
+Flash the image to eMMC
+=======================
+
+Flash the image with U-Boot SPL(option 1)
+-------------------------------
+Power on(or reset with RESET KEY) with MASKROM KEY preesed, and then:
+  > rkdeveloptool db rkbin/rk33/rk3399_loader_v1.08.106.bin
+  > rkdeveloptool wl 64 u-boot/idbspl.img
+  > rkdeveloptool wl 0x4000 u-boot/u-boot.itb
+  > rkdeveloptool rd
+
+Flash the image with Rockchip miniloader(option 2)
+----------------------------------------
+Power on(or reset with RESET KEY) with MASKROM KEY preesed, and then:
+  > rkdeveloptool db rkbin/rk33/rk3399_loader_v1.08.106.bin
+  > rkdeveloptool wl 0x40 idbloader.img
+  > rkdeveloptool wl 0x4000 uboot.img
+  > rkdeveloptool wl 0x6000 ./img/rk3399/trust.img
+  > rkdeveloptool rd
+
+Create a bootable SD/MMC
+========================
+
+The idbspl.img contains the first stage, and the u-boot.img the second stage.
+As explained in the Rockchip partition table reference [1], the first stage
+(aka loader1) start sector is 64, and the second stage start sector is 16384.
+
+Each sector is 512 bytes, which means the first stage offset is 32 KiB,
+and the second stage offset is 8 MiB.
+
+Note: the second stage location is actually not as per the spec,
+but defined by the SPL. Mainline SPL defines an 8 MiB offset for the second
+stage.
+
+Assuming the SD card is exposed by device /dev/mmcblk0, the commands
+to write the two stages are:
+
+  > dd if=idbspl.img of=/dev/mmcblk0 bs=1k seek=32
+  > dd if=u-boot.itb of=/dev/mmcblk0 bs=1k seek=8192
+
+Setting up the kernel and rootfs is beyond the scope of this document.
+
+And that is it
+==============
+
+You should be able to get U-Boot log in console/UART2(baurdrate 1500000)
+
+For more detail, please reference [2].
+
+[1] http://opensource.rock-chips.com/wiki_Partitions
+[2] http://opensource.rock-chips.com/wiki_Boot_option
diff --git a/board/vamrs/rock960_rk3399/rock960-rk3399.c b/board/vamrs/rock960_rk3399/rock960-rk3399.c
new file mode 100644 (file)
index 0000000..d3775b2
--- /dev/null
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2018 Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <dm/pinctrl.h>
+#include <dm/uclass-internal.h>
+#include <asm/arch/periph.h>
+#include <power/regulator.h>
+#include <spl.h>
+
+int board_init(void)
+{
+       int ret;
+
+       ret = regulators_enable_boot_on(false);
+       if (ret)
+               debug("%s: Cannot enable boot on regulator\n", __func__);
+
+       return 0;
+}
+
+void spl_board_init(void)
+{
+       struct udevice *pinctrl;
+       int ret;
+
+       ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl);
+       if (ret) {
+               debug("%s: Cannot find pinctrl device\n", __func__);
+               goto err;
+       }
+
+       /* Enable debug UART */
+       ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_UART_DBG);
+       if (ret) {
+               debug("%s: Failed to set up console UART\n", __func__);
+               goto err;
+       }
+
+       preloader_console_init();
+       return;
+err:
+       printf("%s: Error %d\n", __func__, ret);
+
+       /* No way to report error here */
+       hang();
+}
index e2973b3..b1cd1c9 100644 (file)
@@ -1380,6 +1380,14 @@ config CMD_CONITRACE
          Enable the 'conitrace' command which displays the codes received
          from the console input as hexadecimal numbers.
 
+config CMD_CLS
+       bool "Enable clear screen command 'cls'"
+       depends on CFB_CONSOLE || DM_VIDEO || LCD || VIDEO
+       default y if LCD
+       help
+         Enable the 'cls' command which clears the screen contents
+         on video frame buffer.
+
 config CMD_DISPLAY
        bool "Enable the 'display' command, for character displays"
        help
index 5ec2f9e..4998643 100644 (file)
@@ -32,6 +32,7 @@ obj-$(CONFIG_CMD_BTRFS) += btrfs.o
 obj-$(CONFIG_CMD_CACHE) += cache.o
 obj-$(CONFIG_CMD_CBFS) += cbfs.o
 obj-$(CONFIG_CMD_CLK) += clk.o
+obj-$(CONFIG_CMD_CLS) += cls.o
 obj-$(CONFIG_CMD_CONFIG) += config.o
 obj-$(CONFIG_CMD_CONITRACE) += conitrace.o
 obj-$(CONFIG_CMD_CONSOLE) += console.o
index 02bdf48..b8af784 100644 (file)
--- a/cmd/bmp.c
+++ b/cmd/bmp.c
@@ -124,8 +124,14 @@ static int do_bmp_display(cmd_tbl_t * cmdtp, int flag, int argc, char * const ar
                break;
        case 4:
                addr = simple_strtoul(argv[1], NULL, 16);
-               x = simple_strtoul(argv[2], NULL, 10);
-               y = simple_strtoul(argv[3], NULL, 10);
+               if (!strcmp(argv[2], "m"))
+                       x = BMP_ALIGN_CENTER;
+               else
+                       x = simple_strtoul(argv[2], NULL, 10);
+               if (!strcmp(argv[3], "m"))
+                       y = BMP_ALIGN_CENTER;
+               else
+                       y = simple_strtoul(argv[3], NULL, 10);
                break;
        default:
                return CMD_RET_USAGE;
@@ -249,9 +255,11 @@ int bmp_display(ulong addr, int x, int y)
        if (!ret) {
                bool align = false;
 
-# ifdef CONFIG_SPLASH_SCREEN_ALIGN
-               align = true;
-# endif /* CONFIG_SPLASH_SCREEN_ALIGN */
+               if (CONFIG_IS_ENABLED(SPLASH_SCREEN_ALIGN) ||
+                   x == BMP_ALIGN_CENTER ||
+                   y == BMP_ALIGN_CENTER)
+                       align = true;
+
                ret = video_bmp_display(dev, addr, x, y, align);
        }
 #elif defined(CONFIG_LCD)
index 979ac4a..7f88c1e 100644 (file)
@@ -351,6 +351,12 @@ static struct bootmenu_data *bootmenu_create(int delay)
        }
 
        menu->count = i;
+
+       if ((menu->active >= menu->count)||(menu->active < 0)) { //ensure active menuitem is inside menu
+               printf("active menuitem (%d) is outside menu (0..%d)\n",menu->active,menu->count-1);
+               menu->active=0;
+       }
+
        return menu;
 
 cleanup:
diff --git a/cmd/cls.c b/cmd/cls.c
new file mode 100644 (file)
index 0000000..f1ce6e8
--- /dev/null
+++ b/cmd/cls.c
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2018
+ * DENX Software Engineering, Anatolij Gustschin <agust@denx.de>
+ *
+ * cls - clear screen command
+ */
+#include <common.h>
+#include <command.h>
+#include <dm.h>
+#include <lcd.h>
+#include <video.h>
+
+static int do_video_clear(cmd_tbl_t *cmdtp, int flag, int argc,
+                         char *const argv[])
+{
+#if defined(CONFIG_DM_VIDEO)
+       struct udevice *dev;
+
+       if (uclass_first_device_err(UCLASS_VIDEO, &dev))
+               return CMD_RET_FAILURE;
+
+       if (video_clear(dev))
+               return CMD_RET_FAILURE;
+#elif defined(CONFIG_CFB_CONSOLE)
+       video_clear();
+#elif defined(CONFIG_LCD)
+       lcd_clear();
+#else
+       return CMD_RET_FAILURE;
+#endif
+       return CMD_RET_SUCCESS;
+}
+
+U_BOOT_CMD(cls,        1, 1, do_video_clear, "clear screen", "");
index e88cb13..6c29b33 100644 (file)
@@ -66,11 +66,6 @@ __weak int eeprom_write_enable(unsigned dev_addr, int state)
 
 void eeprom_init(int bus)
 {
-       /* SPI EEPROM */
-#if defined(CONFIG_MPC8XX_SPI) && !defined(CONFIG_ENV_EEPROM_IS_ON_I2C)
-       spi_init_f();
-#endif
-
        /* I2C EEPROM */
 #if defined(CONFIG_SYS_I2C)
        if (bus >= 0)
@@ -129,14 +124,6 @@ static int eeprom_rw_block(unsigned offset, uchar *addr, unsigned alen,
 {
        int ret = 0;
 
-       /* SPI */
-#if defined(CONFIG_MPC8XX_SPI) && !defined(CONFIG_ENV_EEPROM_IS_ON_I2C)
-       if (read)
-               spi_read(addr, alen, buffer, len);
-       else
-               spi_write(addr, alen, buffer, len);
-#else  /* I2C */
-
 #if defined(CONFIG_DM_I2C) && defined(CONFIG_SYS_I2C_EEPROM_BUS)
        struct udevice *dev;
 
@@ -162,7 +149,6 @@ static int eeprom_rw_block(unsigned offset, uchar *addr, unsigned alen,
                ret = i2c_read(addr[0], offset, alen - 1, buffer, len);
        else
                ret = i2c_write(addr[0], offset, alen - 1, buffer, len);
-#endif
 #endif /* CONFIG_DM_I2C && CONFIG_SYS_I2C_EEPROM_BUS */
        if (ret)
                ret = CMD_RET_FAILURE;
index 2b74a98..a12ac70 100644 (file)
--- a/cmd/ubi.c
+++ b/cmd/ubi.c
@@ -101,7 +101,6 @@ static int ubi_check(char *name)
        return 1;
 }
 
-
 static int verify_mkvol_req(const struct ubi_device *ubi,
                            const struct ubi_mkvol_req *req)
 {
@@ -415,7 +414,7 @@ static int ubi_dev_scan(struct mtd_info *info, const char *vid_header_offset)
        return 0;
 }
 
-int ubi_detach(void)
+static int ubi_detach(void)
 {
 #ifdef CONFIG_CMD_UBIFS
        /*
@@ -473,7 +472,6 @@ static int do_ubi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        if (argc < 2)
                return CMD_RET_USAGE;
 
-
        if (strcmp(argv[1], "detach") == 0) {
                if (argc < 2)
                        return CMD_RET_USAGE;
@@ -481,7 +479,6 @@ static int do_ubi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                return ubi_detach();
        }
 
-
        if (strcmp(argv[1], "part") == 0) {
                const char *vid_header_offset = NULL;
 
index 835b724..149a722 100644 (file)
@@ -24,7 +24,6 @@
 #include <os.h>
 #include <post.h>
 #include <relocate.h>
-#include <spi.h>
 #ifdef CONFIG_SPL
 #include <spl.h>
 #endif
@@ -262,16 +261,6 @@ __weak int init_func_vid(void)
 }
 #endif
 
-#if defined(CONFIG_HARD_SPI)
-static int init_func_spi(void)
-{
-       puts("SPI:   ");
-       spi_init();
-       puts("ready\n");
-       return 0;
-}
-#endif
-
 static int setup_mon_len(void)
 {
 #if defined(__ARM__) || defined(__MICROBLAZE__)
@@ -913,9 +902,6 @@ static const init_fnc_t init_sequence_f[] = {
 #if defined(CONFIG_VID) && !defined(CONFIG_SPL)
        init_func_vid,
 #endif
-#if defined(CONFIG_HARD_SPI)
-       init_func_spi,
-#endif
        announce_dram_init,
        dram_init,              /* configure available RAM banks */
 #ifdef CONFIG_POST
index 21d3b3c..5f3d27a 100644 (file)
@@ -36,7 +36,6 @@
 #include <onenand_uboot.h>
 #include <scsi.h>
 #include <serial.h>
-#include <spi.h>
 #include <stdio_dev.h>
 #include <timer.h>
 #include <trace.h>
@@ -379,20 +378,6 @@ static int initr_flash(void)
 }
 #endif
 
-#if defined(CONFIG_PPC) && !defined(CONFIG_DM_SPI)
-static int initr_spi(void)
-{
-       /* MPC8xx does this here */
-#ifdef CONFIG_MPC8XX_SPI
-#if !defined(CONFIG_ENV_IS_IN_EEPROM)
-       spi_init_f();
-#endif
-       spi_init_r();
-#endif
-       return 0;
-}
-#endif
-
 #ifdef CONFIG_CMD_NAND
 /* go init the NAND */
 static int initr_nand(void)
@@ -744,9 +729,6 @@ static init_fnc_t init_sequence_r[] = {
        /* initialize higher level parts of CPU like time base and timers */
        cpu_init_r,
 #endif
-#if defined(CONFIG_PPC) && !defined(CONFIG_DM_SPI)
-       initr_spi,
-#endif
 #ifdef CONFIG_CMD_NAND
        initr_nand,
 #endif
index 2e2bef3..cd63040 100644 (file)
@@ -242,14 +242,6 @@ void lcd_clear(void)
        lcd_sync();
 }
 
-static int do_lcd_clear(cmd_tbl_t *cmdtp, int flag, int argc,
-                       char *const argv[])
-{
-       lcd_clear();
-       return 0;
-}
-U_BOOT_CMD(cls,        1, 1, do_lcd_clear, "clear screen", "");
-
 static int lcd_init(void *lcdbase)
 {
        debug("[LCD] Initializing LCD frambuffer at %p\n", lcdbase);
@@ -389,7 +381,6 @@ static inline void lcd_logo_plot(int x, int y) {}
 
 #if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
 #ifdef CONFIG_SPLASH_SCREEN_ALIGN
-#define BMP_ALIGN_CENTER       0x7FFF
 
 static void splash_align_axis(int *axis, unsigned long panel_size,
                                        unsigned long picture_size)
index 9802bed..07b34bf 100644 (file)
@@ -24,15 +24,15 @@ static void run_preboot_environment_command(void)
 
        p = env_get("preboot");
        if (p != NULL) {
-# ifdef CONFIG_AUTOBOOT_KEYED
-               int prev = disable_ctrlc(1);    /* disable Control C checking */
-# endif
+               int prev = 0;
+
+               if (IS_ENABLED(CONFIG_AUTOBOOT_KEYED))
+                       prev = disable_ctrlc(1); /* disable Ctrl-C checking */
 
                run_command_list(p, -1, 0);
 
-# ifdef CONFIG_AUTOBOOT_KEYED
-               disable_ctrlc(prev);    /* restore Control C checking */
-# endif
+               if (IS_ENABLED(CONFIG_AUTOBOOT_KEYED))
+                       disable_ctrlc(prev);    /* restore Ctrl-C checking */
        }
 #endif /* CONFIG_PREBOOT */
 }
@@ -44,17 +44,15 @@ void main_loop(void)
 
        bootstage_mark_name(BOOTSTAGE_ID_MAIN_LOOP, "main_loop");
 
-#ifdef CONFIG_VERSION_VARIABLE
-       env_set("ver", version_string);  /* set version variable */
-#endif /* CONFIG_VERSION_VARIABLE */
+       if (IS_ENABLED(CONFIG_VERSION_VARIABLE))
+               env_set("ver", version_string);  /* set version variable */
 
        cli_init();
 
        run_preboot_environment_command();
 
-#if defined(CONFIG_UPDATE_TFTP)
-       update_tftp(0UL, NULL, NULL);
-#endif /* CONFIG_UPDATE_TFTP */
+       if (IS_ENABLED(CONFIG_UPDATE_TFTP))
+               update_tftp(0UL, NULL, NULL);
 
        s = bootdelay_process();
        if (cli_process_fdt(&s))
index 379b958..419b41c 100644 (file)
@@ -19,7 +19,6 @@ CONFIG_ARCH_MISC_INIT=y
 # CONFIG_SPL_EXT_SUPPORT is not set
 CONFIG_SPL_MTD_SUPPORT=y
 # CONFIG_SPL_NAND_SUPPORT is not set
-# CONFIG_SPL_YMODEM_SUPPORT is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_NAND=y
 # CONFIG_CMD_SETEXPR is not set
index 065efca..3cb38af 100644 (file)
@@ -18,6 +18,7 @@ CONFIG_SPL_I2C_SUPPORT=y
 # CONFIG_SPL_NAND_SUPPORT is not set
 CONFIG_SPL_WATCHDOG_SUPPORT=y
 CONFIG_SPL_YMODEM_SUPPORT=y
+CONFIG_SPL_POWER_SUPPORT=y
 CONFIG_AUTOBOOT_KEYED=y
 CONFIG_AUTOBOOT_PROMPT="Press SPACE to abort autoboot in %d seconds\n"
 CONFIG_AUTOBOOT_STOP_STR=" "
@@ -37,6 +38,10 @@ CONFIG_DEFAULT_DEVICE_TREE="am335x-pdu001"
 CONFIG_SPL_DM=y
 CONFIG_DM_GPIO=y
 CONFIG_DM_I2C=y
+CONFIG_BLK=y
+CONFIG_SPL_BLK=y
+CONFIG_DM_MMC=y
+CONFIG_SPL_DM_MMC=y
 CONFIG_MMC_OMAP_HS=y
 CONFIG_MMC_SDHCI=y
 CONFIG_PINCTRL=y
index abe90ee..4e10175 100644 (file)
@@ -30,7 +30,7 @@ CONFIG_SPECIFY_CONSOLE_INDEX=y
 CONFIG_CONS_INDEX=0
 CONFIG_DM_SERIAL=y
 CONFIG_SERIAL_SEARCH_ALL=y
-CONFIG_BCM6858_SERIAL=y
+CONFIG_BCM6345_SERIAL=y
 CONFIG_SYSRESET=y
 CONFIG_REGEX=y
 # CONFIG_GENERATE_SMBIOS_TABLE is not set
diff --git a/configs/ficus-rk3399_defconfig b/configs/ficus-rk3399_defconfig
new file mode 100644 (file)
index 0000000..e890bc2
--- /dev/null
@@ -0,0 +1,71 @@
+CONFIG_ARM=y
+CONFIG_ARCH_ROCKCHIP=y
+CONFIG_SYS_TEXT_BASE=0x00200000
+CONFIG_SPL_LIBCOMMON_SUPPORT=y
+CONFIG_SPL_LIBGENERIC_SUPPORT=y
+CONFIG_SYS_MALLOC_F_LEN=0x4000
+CONFIG_ROCKCHIP_RK3399=y
+CONFIG_TARGET_ROCK960_RK3399=y
+CONFIG_ROCKCHIP_SPL_RESERVE_IRAM=0x4000
+CONFIG_DEBUG_UART_BASE=0xFF1A0000
+CONFIG_DEBUG_UART_CLOCK=24000000
+CONFIG_SPL_STACK_R_ADDR=0x80000
+CONFIG_DEFAULT_DEVICE_TREE="rk3399-ficus"
+CONFIG_DEBUG_UART=y
+CONFIG_FIT=y
+CONFIG_SPL_LOAD_FIT=y
+CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_atf.py"
+# CONFIG_DISPLAY_CPUINFO is not set
+CONFIG_DISPLAY_BOARDINFO_LATE=y
+CONFIG_SPL_STACK_R=y
+CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x4000
+CONFIG_SPL_ATF=y
+CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+# CONFIG_CMD_SETEXPR is not set
+CONFIG_CMD_TIME=y
+CONFIG_SPL_OF_CONTROL=y
+CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_REGMAP=y
+CONFIG_SPL_REGMAP=y
+CONFIG_SYSCON=y
+CONFIG_SPL_SYSCON=y
+CONFIG_CLK=y
+CONFIG_SPL_CLK=y
+CONFIG_ROCKCHIP_GPIO=y
+CONFIG_SYS_I2C_ROCKCHIP=y
+CONFIG_MMC_DW=y
+CONFIG_MMC_DW_ROCKCHIP=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_ROCKCHIP=y
+CONFIG_DM_ETH=y
+CONFIG_ETH_DESIGNWARE=y
+CONFIG_RGMII=y
+CONFIG_GMAC_ROCKCHIP=y
+CONFIG_PINCTRL=y
+CONFIG_SPL_PINCTRL=y
+CONFIG_PINCTRL_ROCKCHIP_RK3399=y
+CONFIG_DM_PMIC=y
+CONFIG_PMIC_RK8XX=y
+CONFIG_REGULATOR_PWM=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_DM_REGULATOR_GPIO=y
+CONFIG_REGULATOR_RK8XX=y
+CONFIG_PWM_ROCKCHIP=y
+CONFIG_RAM=y
+CONFIG_SPL_RAM=y
+CONFIG_BAUDRATE=1500000
+CONFIG_DEBUG_UART_SHIFT=2
+CONFIG_SYSRESET=y
+CONFIG_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_GENERIC=y
+CONFIG_USB_STORAGE=y
+CONFIG_USE_TINY_PRINTF=y
+CONFIG_ERRNO_STR=y
diff --git a/configs/qemu-riscv32_smode_defconfig b/configs/qemu-riscv32_smode_defconfig
new file mode 100644 (file)
index 0000000..0a84ec1
--- /dev/null
@@ -0,0 +1,10 @@
+CONFIG_RISCV=y
+CONFIG_TARGET_QEMU_VIRT=y
+CONFIG_RISCV_SMODE=y
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_FIT=y
+CONFIG_DISPLAY_CPUINFO=y
+CONFIG_DISPLAY_BOARDINFO=y
+# CONFIG_CMD_MII is not set
+CONFIG_OF_PRIOR_STAGE=y
diff --git a/configs/qemu-riscv64_smode_defconfig b/configs/qemu-riscv64_smode_defconfig
new file mode 100644 (file)
index 0000000..b012443
--- /dev/null
@@ -0,0 +1,11 @@
+CONFIG_RISCV=y
+CONFIG_TARGET_QEMU_VIRT=y
+CONFIG_ARCH_RV64I=y
+CONFIG_RISCV_SMODE=y
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_FIT=y
+CONFIG_DISPLAY_CPUINFO=y
+CONFIG_DISPLAY_BOARDINFO=y
+# CONFIG_CMD_MII is not set
+CONFIG_OF_PRIOR_STAGE=y
index 149d627..1aa3cef 100644 (file)
@@ -28,6 +28,8 @@ CONFIG_CMD_FAT=y
 CONFIG_CMD_FS_GENERIC=y
 CONFIG_OF_CONTROL=y
 CONFIG_DEFAULT_DEVICE_TREE="r8a7795-salvator-x-u-boot"
+CONFIG_OF_LIST="r8a7795-salvator-x-u-boot r8a7796-salvator-x-u-boot r8a77965-salvator-x-u-boot"
+CONFIG_MULTI_DTB_FIT=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
index 8d765e2..3280a35 100644 (file)
@@ -28,6 +28,8 @@ CONFIG_CMD_FAT=y
 CONFIG_CMD_FS_GENERIC=y
 CONFIG_OF_CONTROL=y
 CONFIG_DEFAULT_DEVICE_TREE="r8a7795-h3ulcb-u-boot"
+CONFIG_OF_LIST="r8a7795-h3ulcb-u-boot r8a7796-m3ulcb-u-boot"
+CONFIG_MULTI_DTB_FIT=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
index 2d6b86f..8204771 100644 (file)
@@ -29,6 +29,8 @@ CONFIG_CMD_FAT=y
 CONFIG_CMD_FS_GENERIC=y
 CONFIG_OF_CONTROL=y
 CONFIG_DEFAULT_DEVICE_TREE="r8a77965-salvator-x-u-boot"
+CONFIG_OF_LIST="r8a7795-salvator-x-u-boot r8a7796-salvator-x-u-boot r8a77965-salvator-x-u-boot"
+CONFIG_MULTI_DTB_FIT=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
index 3525045..a57e475 100644 (file)
@@ -29,6 +29,8 @@ CONFIG_CMD_FAT=y
 CONFIG_CMD_FS_GENERIC=y
 CONFIG_OF_CONTROL=y
 CONFIG_DEFAULT_DEVICE_TREE="r8a7796-salvator-x-u-boot"
+CONFIG_OF_LIST="r8a7795-salvator-x-u-boot r8a7796-salvator-x-u-boot r8a77965-salvator-x-u-boot"
+CONFIG_MULTI_DTB_FIT=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
index b68bb7c..20b2dd9 100644 (file)
@@ -29,6 +29,8 @@ CONFIG_CMD_FAT=y
 CONFIG_CMD_FS_GENERIC=y
 CONFIG_OF_CONTROL=y
 CONFIG_DEFAULT_DEVICE_TREE="r8a7796-m3ulcb-u-boot"
+CONFIG_OF_LIST="r8a7795-h3ulcb-u-boot r8a7796-m3ulcb-u-boot"
+CONFIG_MULTI_DTB_FIT=y
 CONFIG_ENV_IS_IN_MMC=y
 CONFIG_REGMAP=y
 CONFIG_SYSCON=y
diff --git a/configs/rock960-rk3399_defconfig b/configs/rock960-rk3399_defconfig
new file mode 100644 (file)
index 0000000..bb10ee9
--- /dev/null
@@ -0,0 +1,69 @@
+CONFIG_ARM=y
+CONFIG_ARCH_ROCKCHIP=y
+CONFIG_SYS_TEXT_BASE=0x00200000
+CONFIG_SPL_LIBCOMMON_SUPPORT=y
+CONFIG_SPL_LIBGENERIC_SUPPORT=y
+CONFIG_SYS_MALLOC_F_LEN=0x4000
+CONFIG_ROCKCHIP_RK3399=y
+CONFIG_ROCKCHIP_SPL_RESERVE_IRAM=0x4000
+CONFIG_TARGET_ROCK960_RK3399=y
+CONFIG_DEBUG_UART_BASE=0xFF1A0000
+CONFIG_DEBUG_UART_CLOCK=24000000
+CONFIG_DEBUG_UART_SHIFT=2
+CONFIG_BAUDRATE=1500000
+CONFIG_SPL_STACK_R_ADDR=0x80000
+CONFIG_DEFAULT_DEVICE_TREE="rk3399-rock960"
+CONFIG_DEBUG_UART=y
+CONFIG_FIT=y
+CONFIG_SPL_LOAD_FIT=y
+CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_atf.py"
+CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-rock960.dtb"
+CONFIG_SYS_PROMPT="rock960 => "
+# CONFIG_DISPLAY_CPUINFO is not set
+CONFIG_DISPLAY_BOARDINFO_LATE=y
+CONFIG_SPL_STACK_R=y
+CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x4000
+CONFIG_SPL_ATF=y
+CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+# CONFIG_CMD_SETEXPR is not set
+CONFIG_CMD_TIME=y
+CONFIG_SPL_OF_CONTROL=y
+CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_REGMAP=y
+CONFIG_SPL_REGMAP=y
+CONFIG_SYSCON=y
+CONFIG_SPL_SYSCON=y
+CONFIG_CLK=y
+CONFIG_SPL_CLK=y
+CONFIG_ROCKCHIP_GPIO=y
+CONFIG_SYS_I2C_ROCKCHIP=y
+CONFIG_MMC_DW=y
+CONFIG_MMC_DW_ROCKCHIP=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_ROCKCHIP=y
+CONFIG_PINCTRL=y
+CONFIG_SPL_PINCTRL=y
+CONFIG_PINCTRL_ROCKCHIP_RK3399=y
+CONFIG_DM_PMIC=y
+CONFIG_PMIC_RK8XX=y
+CONFIG_REGULATOR_PWM=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_REGULATOR_RK8XX=y
+CONFIG_PWM_ROCKCHIP=y
+CONFIG_RAM=y
+CONFIG_SPL_RAM=y
+CONFIG_SYSRESET=y
+CONFIG_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_GENERIC=y
+CONFIG_USB_STORAGE=y
+CONFIG_ROCKCHIP_USB2_PHY=y
+CONFIG_USB_ETHER_ASIX=y
+CONFIG_USE_TINY_PRINTF=y
+CONFIG_ERRNO_STR=y
index 1a76785..5b65c61 100644 (file)
@@ -96,6 +96,8 @@ CONFIG_BOARD=y
 CONFIG_BOARD_SANDBOX=y
 CONFIG_PM8916_GPIO=y
 CONFIG_SANDBOX_GPIO=y
+CONFIG_DM_HWSPINLOCK=y
+CONFIG_HWSPINLOCK_SANDBOX=y
 CONFIG_DM_I2C_COMPAT=y
 CONFIG_I2C_CROS_EC_TUNNEL=y
 CONFIG_I2C_CROS_EC_LDO=y
@@ -216,3 +218,6 @@ CONFIG_UT_TIME=y
 CONFIG_UT_DM=y
 CONFIG_UT_ENV=y
 CONFIG_UT_OVERLAY=y
+CONFIG_DMA=y
+CONFIG_DMA_CHANNELS=y
+CONFIG_SANDBOX_DMA=y
index 1bf3a7c..121e962 100644 (file)
@@ -1,7 +1,7 @@
 CONFIG_ARM=y
 CONFIG_STM32=y
 CONFIG_SYS_TEXT_BASE=0x08008000
-CONFIG_SYS_MALLOC_F_LEN=0xC00
+CONFIG_SYS_MALLOC_F_LEN=0xE00
 CONFIG_STM32F7=y
 CONFIG_TARGET_STM32F746_DISCO=y
 CONFIG_ENV_VARS_UBOOT_CONFIG=y
index 3bf7538..c8409fd 100644 (file)
@@ -32,6 +32,8 @@ CONFIG_CMD_EXT4_WRITE=y
 # CONFIG_SPL_DOS_PARTITION is not set
 CONFIG_DEFAULT_DEVICE_TREE="stm32mp157c-ev1"
 CONFIG_STM32_ADC=y
+CONFIG_DM_HWSPINLOCK=y
+CONFIG_HWSPINLOCK_STM32=y
 CONFIG_DM_I2C=y
 CONFIG_SYS_I2C_STM32F7=y
 CONFIG_LED=y
index 1955ffe..38c26f6 100644 (file)
@@ -163,11 +163,6 @@ At this point you should be able to build U-Boot for your board with the
 empty SPI driver. You still have empty methods in your driver, but we will
 write these one by one.
 
-If you have spi_init() functions or the like that are called from your
-board then the build will fail. Remove these calls and make a note of the
-init that needs to be done.
-
-
 7. Set up your platform data structure
 
 This will hold the information your driver to operate, like its hardware
index 4ac823d..e9fbadd 100644 (file)
@@ -40,6 +40,8 @@ source "drivers/fpga/Kconfig"
 
 source "drivers/gpio/Kconfig"
 
+source "drivers/hwspinlock/Kconfig"
+
 source "drivers/i2c/Kconfig"
 
 source "drivers/input/Kconfig"
index 55de109..c425831 100644 (file)
@@ -113,4 +113,5 @@ obj-$(CONFIG_W1) += w1/
 obj-$(CONFIG_W1_EEPROM) += w1-eeprom/
 
 obj-$(CONFIG_MACH_PIC32) += ddr/microchip/
+obj-$(CONFIG_DM_HWSPINLOCK) += hwspinlock/
 endif
index 04b369a..6d7a514 100644 (file)
@@ -243,6 +243,10 @@ int clk_set_defaults(struct udevice *dev)
 {
        int ret;
 
+       /* If this not in SPL and pre-reloc state, don't take any action. */
+       if (!(IS_ENABLED(CONFIG_SPL_BUILD) || (gd->flags & GD_FLG_RELOC)))
+               return 0;
+
        debug("%s(%s)\n", __func__, dev_read_name(dev));
 
        ret = clk_set_default_parents(dev);
index 6a8c7b7..b7c5d34 100644 (file)
 #define RCC_MP_APB2ENSETR      0XA08
 #define RCC_MP_APB3ENSETR      0xA10
 #define RCC_MP_AHB2ENSETR      0xA18
+#define RCC_MP_AHB3ENSETR      0xA20
 #define RCC_MP_AHB4ENSETR      0xA28
 
 /* used for most of SELR register */
@@ -534,6 +535,8 @@ static const struct stm32mp1_clk_gate stm32mp1_clk_gate[] = {
        STM32MP1_CLK_SET_CLR(RCC_MP_AHB2ENSETR, 8, USBO_K, _USBO_SEL),
        STM32MP1_CLK_SET_CLR(RCC_MP_AHB2ENSETR, 16, SDMMC3_K, _SDMMC3_SEL),
 
+       STM32MP1_CLK_SET_CLR(RCC_MP_AHB3ENSETR, 11, HSEM, _UNKNOWN_SEL),
+
        STM32MP1_CLK_SET_CLR(RCC_MP_AHB4ENSETR, 0, GPIOA, _UNKNOWN_SEL),
        STM32MP1_CLK_SET_CLR(RCC_MP_AHB4ENSETR, 1, GPIOB, _UNKNOWN_SEL),
        STM32MP1_CLK_SET_CLR(RCC_MP_AHB4ENSETR, 2, GPIOC, _UNKNOWN_SEL),
index bfd9580..e113f1d 100644 (file)
@@ -146,6 +146,16 @@ void *devfdt_remap_addr_index(struct udevice *dev, int index)
        return map_physmem(addr, 0, MAP_NOCACHE);
 }
 
+void *devfdt_remap_addr_name(struct udevice *dev, const char *name)
+{
+       fdt_addr_t addr = devfdt_get_addr_name(dev, name);
+
+       if (addr == FDT_ADDR_T_NONE)
+               return NULL;
+
+       return map_physmem(addr, 0, MAP_NOCACHE);
+}
+
 void *devfdt_remap_addr(struct udevice *dev)
 {
        return devfdt_remap_addr_index(dev, 0);
index 96766c7..cdd78be 100644 (file)
@@ -69,6 +69,26 @@ void *dev_remap_addr_index(struct udevice *dev, int index)
        return map_physmem(addr, 0, MAP_NOCACHE);
 }
 
+fdt_addr_t dev_read_addr_name(struct udevice *dev, const char *name)
+{
+       int index = dev_read_stringlist_search(dev, "reg-names", name);
+
+       if (index < 0)
+               return FDT_ADDR_T_NONE;
+       else
+               return dev_read_addr_index(dev, index);
+}
+
+void *dev_remap_addr_name(struct udevice *dev, const char *name)
+{
+       fdt_addr_t addr = dev_read_addr_name(dev, name);
+
+       if (addr == FDT_ADDR_T_NONE)
+               return NULL;
+
+       return map_physmem(addr, 0, MAP_NOCACHE);
+}
+
 fdt_addr_t dev_read_addr(struct udevice *dev)
 {
        return dev_read_addr_index(dev, 0);
index 4ee6afa..8a4162e 100644 (file)
@@ -12,6 +12,20 @@ config DMA
          buses that is used to transfer data to and from memory.
          The uclass interface is defined in include/dma.h.
 
+config DMA_CHANNELS
+       bool "Enable DMA channels support"
+       depends on DMA
+       help
+         Enable channels support for DMA. Some DMA controllers have multiple
+         channels which can either transfer data to/from different devices.
+
+config SANDBOX_DMA
+       bool "Enable the sandbox DMA test driver"
+       depends on DMA && DMA_CHANNELS && SANDBOX
+       help
+         Enable support for a test DMA uclass implementation. It stimulates
+         DMA transfer by simple copying data between channels.
+
 config TI_EDMA3
        bool "TI EDMA3 driver"
        help
index 4eaef8a..aff31f9 100644 (file)
@@ -8,6 +8,7 @@ obj-$(CONFIG_DMA) += dma-uclass.o
 obj-$(CONFIG_FSLDMAFEC) += MCD_tasksInit.o MCD_dmaApi.o MCD_tasks.o
 obj-$(CONFIG_APBH_DMA) += apbh_dma.o
 obj-$(CONFIG_FSL_DMA) += fsl_dma.o
+obj-$(CONFIG_SANDBOX_DMA) += sandbox-dma-test.o
 obj-$(CONFIG_TI_KSNAV) += keystone_nav.o keystone_nav_cfg.o
 obj-$(CONFIG_TI_EDMA3) += ti-edma3.o
 obj-$(CONFIG_DMA_LPC32XX) += lpc32xx_dma.o
index a33f7d5..9c961cf 100644 (file)
 /*
  * Direct Memory Access U-Class driver
  *
- * (C) Copyright 2015
- *     Texas Instruments Incorporated, <www.ti.com>
+ * Copyright (C) 2018 Álvaro Fernández Rojas <noltari@gmail.com>
+ * Copyright (C) 2015 - 2018 Texas Instruments Incorporated <www.ti.com>
+ * Written by Mugunthan V N <mugunthanvnm@ti.com>
  *
  * Author: Mugunthan V N <mugunthanvnm@ti.com>
  */
 
 #include <common.h>
-#include <dma.h>
 #include <dm.h>
-#include <dm/uclass-internal.h>
-#include <dm/device-internal.h>
+#include <dm/read.h>
+#include <dma-uclass.h>
+#include <dt-structs.h>
 #include <errno.h>
 
+#ifdef CONFIG_DMA_CHANNELS
+static inline struct dma_ops *dma_dev_ops(struct udevice *dev)
+{
+       return (struct dma_ops *)dev->driver->ops;
+}
+
+# if CONFIG_IS_ENABLED(OF_CONTROL)
+static int dma_of_xlate_default(struct dma *dma,
+                               struct ofnode_phandle_args *args)
+{
+       debug("%s(dma=%p)\n", __func__, dma);
+
+       if (args->args_count > 1) {
+               pr_err("Invaild args_count: %d\n", args->args_count);
+               return -EINVAL;
+       }
+
+       if (args->args_count)
+               dma->id = args->args[0];
+       else
+               dma->id = 0;
+
+       return 0;
+}
+
+int dma_get_by_index(struct udevice *dev, int index, struct dma *dma)
+{
+       int ret;
+       struct ofnode_phandle_args args;
+       struct udevice *dev_dma;
+       const struct dma_ops *ops;
+
+       debug("%s(dev=%p, index=%d, dma=%p)\n", __func__, dev, index, dma);
+
+       assert(dma);
+       dma->dev = NULL;
+
+       ret = dev_read_phandle_with_args(dev, "dmas", "#dma-cells", 0, index,
+                                        &args);
+       if (ret) {
+               pr_err("%s: dev_read_phandle_with_args failed: err=%d\n",
+                      __func__, ret);
+               return ret;
+       }
+
+       ret = uclass_get_device_by_ofnode(UCLASS_DMA, args.node, &dev_dma);
+       if (ret) {
+               pr_err("%s: uclass_get_device_by_ofnode failed: err=%d\n",
+                      __func__, ret);
+               return ret;
+       }
+
+       dma->dev = dev_dma;
+
+       ops = dma_dev_ops(dev_dma);
+
+       if (ops->of_xlate)
+               ret = ops->of_xlate(dma, &args);
+       else
+               ret = dma_of_xlate_default(dma, &args);
+       if (ret) {
+               pr_err("of_xlate() failed: %d\n", ret);
+               return ret;
+       }
+
+       return dma_request(dev_dma, dma);
+}
+
+int dma_get_by_name(struct udevice *dev, const char *name, struct dma *dma)
+{
+       int index;
+
+       debug("%s(dev=%p, name=%s, dma=%p)\n", __func__, dev, name, dma);
+       dma->dev = NULL;
+
+       index = dev_read_stringlist_search(dev, "dma-names", name);
+       if (index < 0) {
+               pr_err("dev_read_stringlist_search() failed: %d\n", index);
+               return index;
+       }
+
+       return dma_get_by_index(dev, index, dma);
+}
+# endif /* OF_CONTROL */
+
+int dma_request(struct udevice *dev, struct dma *dma)
+{
+       struct dma_ops *ops = dma_dev_ops(dev);
+
+       debug("%s(dev=%p, dma=%p)\n", __func__, dev, dma);
+
+       dma->dev = dev;
+
+       if (!ops->request)
+               return 0;
+
+       return ops->request(dma);
+}
+
+int dma_free(struct dma *dma)
+{
+       struct dma_ops *ops = dma_dev_ops(dma->dev);
+
+       debug("%s(dma=%p)\n", __func__, dma);
+
+       if (!ops->free)
+               return 0;
+
+       return ops->free(dma);
+}
+
+int dma_enable(struct dma *dma)
+{
+       struct dma_ops *ops = dma_dev_ops(dma->dev);
+
+       debug("%s(dma=%p)\n", __func__, dma);
+
+       if (!ops->enable)
+               return -ENOSYS;
+
+       return ops->enable(dma);
+}
+
+int dma_disable(struct dma *dma)
+{
+       struct dma_ops *ops = dma_dev_ops(dma->dev);
+
+       debug("%s(dma=%p)\n", __func__, dma);
+
+       if (!ops->disable)
+               return -ENOSYS;
+
+       return ops->disable(dma);
+}
+
+int dma_prepare_rcv_buf(struct dma *dma, void *dst, size_t size)
+{
+       struct dma_ops *ops = dma_dev_ops(dma->dev);
+
+       debug("%s(dma=%p)\n", __func__, dma);
+
+       if (!ops->prepare_rcv_buf)
+               return -1;
+
+       return ops->prepare_rcv_buf(dma, dst, size);
+}
+
+int dma_receive(struct dma *dma, void **dst, void *metadata)
+{
+       struct dma_ops *ops = dma_dev_ops(dma->dev);
+
+       debug("%s(dma=%p)\n", __func__, dma);
+
+       if (!ops->receive)
+               return -ENOSYS;
+
+       return ops->receive(dma, dst, metadata);
+}
+
+int dma_send(struct dma *dma, void *src, size_t len, void *metadata)
+{
+       struct dma_ops *ops = dma_dev_ops(dma->dev);
+
+       debug("%s(dma=%p)\n", __func__, dma);
+
+       if (!ops->send)
+               return -ENOSYS;
+
+       return ops->send(dma, src, len, metadata);
+}
+#endif /* CONFIG_DMA_CHANNELS */
+
 int dma_get_device(u32 transfer_type, struct udevice **devp)
 {
        struct udevice *dev;
diff --git a/drivers/dma/sandbox-dma-test.c b/drivers/dma/sandbox-dma-test.c
new file mode 100644 (file)
index 0000000..8fcef18
--- /dev/null
@@ -0,0 +1,282 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Direct Memory Access U-Class Simulation driver
+ *
+ * Copyright (C) 2018 Texas Instruments Incorporated <www.ti.com>
+ *
+ * Author: Grygorii Strashko <grygorii.strashko@ti.com>
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <dm/read.h>
+#include <dma-uclass.h>
+#include <dt-structs.h>
+#include <errno.h>
+
+#define SANDBOX_DMA_CH_CNT 3
+#define SANDBOX_DMA_BUF_SIZE 1024
+
+struct sandbox_dma_chan {
+       struct sandbox_dma_dev *ud;
+       char name[20];
+       u32 id;
+       enum dma_direction dir;
+       bool in_use;
+       bool enabled;
+};
+
+struct sandbox_dma_dev {
+       struct device *dev;
+       u32 ch_count;
+       struct sandbox_dma_chan channels[SANDBOX_DMA_CH_CNT];
+       uchar   buf[SANDBOX_DMA_BUF_SIZE];
+       uchar   *buf_rx;
+       size_t  data_len;
+       u32     meta;
+};
+
+static int sandbox_dma_transfer(struct udevice *dev, int direction,
+                               void *dst, void *src, size_t len)
+{
+       memcpy(dst, src, len);
+
+       return 0;
+}
+
+static int sandbox_dma_of_xlate(struct dma *dma,
+                               struct ofnode_phandle_args *args)
+{
+       struct sandbox_dma_dev *ud = dev_get_priv(dma->dev);
+       struct sandbox_dma_chan *uc;
+
+       debug("%s(dma id=%u)\n", __func__, args->args[0]);
+
+       if (args->args[0] >= SANDBOX_DMA_CH_CNT)
+               return -EINVAL;
+
+       dma->id = args->args[0];
+
+       uc = &ud->channels[dma->id];
+
+       if (dma->id == 1)
+               uc->dir = DMA_MEM_TO_DEV;
+       else if (dma->id == 2)
+               uc->dir = DMA_DEV_TO_MEM;
+       else
+               uc->dir = DMA_MEM_TO_MEM;
+       debug("%s(dma id=%lu dir=%d)\n", __func__, dma->id, uc->dir);
+
+       return 0;
+}
+
+static int sandbox_dma_request(struct dma *dma)
+{
+       struct sandbox_dma_dev *ud = dev_get_priv(dma->dev);
+       struct sandbox_dma_chan *uc;
+
+       if (dma->id >= SANDBOX_DMA_CH_CNT)
+               return -EINVAL;
+
+       uc = &ud->channels[dma->id];
+       if (uc->in_use)
+               return -EBUSY;
+
+       uc->in_use = true;
+       debug("%s(dma id=%lu in_use=%d)\n", __func__, dma->id, uc->in_use);
+
+       return 0;
+}
+
+static int sandbox_dma_free(struct dma *dma)
+{
+       struct sandbox_dma_dev *ud = dev_get_priv(dma->dev);
+       struct sandbox_dma_chan *uc;
+
+       if (dma->id >= SANDBOX_DMA_CH_CNT)
+               return -EINVAL;
+
+       uc = &ud->channels[dma->id];
+       if (!uc->in_use)
+               return -EINVAL;
+
+       uc->in_use = false;
+       ud->buf_rx = NULL;
+       ud->data_len = 0;
+       debug("%s(dma id=%lu in_use=%d)\n", __func__, dma->id, uc->in_use);
+
+       return 0;
+}
+
+static int sandbox_dma_enable(struct dma *dma)
+{
+       struct sandbox_dma_dev *ud = dev_get_priv(dma->dev);
+       struct sandbox_dma_chan *uc;
+
+       if (dma->id >= SANDBOX_DMA_CH_CNT)
+               return -EINVAL;
+
+       uc = &ud->channels[dma->id];
+       if (!uc->in_use)
+               return -EINVAL;
+       if (uc->enabled)
+               return -EINVAL;
+
+       uc->enabled = true;
+       debug("%s(dma id=%lu enabled=%d)\n", __func__, dma->id, uc->enabled);
+
+       return 0;
+}
+
+static int sandbox_dma_disable(struct dma *dma)
+{
+       struct sandbox_dma_dev *ud = dev_get_priv(dma->dev);
+       struct sandbox_dma_chan *uc;
+
+       if (dma->id >= SANDBOX_DMA_CH_CNT)
+               return -EINVAL;
+
+       uc = &ud->channels[dma->id];
+       if (!uc->in_use)
+               return -EINVAL;
+       if (!uc->enabled)
+               return -EINVAL;
+
+       uc->enabled = false;
+       debug("%s(dma id=%lu enabled=%d)\n", __func__, dma->id, uc->enabled);
+
+       return 0;
+}
+
+static int sandbox_dma_send(struct dma *dma,
+                           void *src, size_t len, void *metadata)
+{
+       struct sandbox_dma_dev *ud = dev_get_priv(dma->dev);
+       struct sandbox_dma_chan *uc;
+
+       if (dma->id >= SANDBOX_DMA_CH_CNT)
+               return -EINVAL;
+       if (!src || !metadata)
+               return -EINVAL;
+
+       debug("%s(dma id=%lu)\n", __func__, dma->id);
+
+       uc = &ud->channels[dma->id];
+       if (uc->dir != DMA_MEM_TO_DEV)
+               return -EINVAL;
+       if (!uc->in_use)
+               return -EINVAL;
+       if (!uc->enabled)
+               return -EINVAL;
+       if (len >= SANDBOX_DMA_BUF_SIZE)
+               return -EINVAL;
+
+       memcpy(ud->buf, src, len);
+       ud->data_len = len;
+       ud->meta = *((u32 *)metadata);
+
+       debug("%s(dma id=%lu len=%zu meta=%08x)\n",
+             __func__, dma->id, len, ud->meta);
+
+       return 0;
+}
+
+static int sandbox_dma_receive(struct dma *dma, void **dst, void *metadata)
+{
+       struct sandbox_dma_dev *ud = dev_get_priv(dma->dev);
+       struct sandbox_dma_chan *uc;
+
+       if (dma->id >= SANDBOX_DMA_CH_CNT)
+               return -EINVAL;
+       if (!dst || !metadata)
+               return -EINVAL;
+
+       uc = &ud->channels[dma->id];
+       if (uc->dir != DMA_DEV_TO_MEM)
+               return -EINVAL;
+       if (!uc->in_use)
+               return -EINVAL;
+       if (!uc->enabled)
+               return -EINVAL;
+       if (!ud->data_len)
+               return 0;
+
+       if (ud->buf_rx) {
+               memcpy(ud->buf_rx, ud->buf, ud->data_len);
+               *dst = ud->buf_rx;
+       } else {
+               memcpy(*dst, ud->buf, ud->data_len);
+       }
+
+       *((u32 *)metadata) = ud->meta;
+
+       debug("%s(dma id=%lu len=%zu meta=%08x %p)\n",
+             __func__, dma->id, ud->data_len, ud->meta, *dst);
+
+       return ud->data_len;
+}
+
+static int sandbox_dma_prepare_rcv_buf(struct dma *dma, void *dst, size_t size)
+{
+       struct sandbox_dma_dev *ud = dev_get_priv(dma->dev);
+
+       ud->buf_rx = dst;
+
+       return 0;
+}
+
+static const struct dma_ops sandbox_dma_ops = {
+       .transfer       = sandbox_dma_transfer,
+       .of_xlate       = sandbox_dma_of_xlate,
+       .request        = sandbox_dma_request,
+       .free           = sandbox_dma_free,
+       .enable         = sandbox_dma_enable,
+       .disable        = sandbox_dma_disable,
+       .send           = sandbox_dma_send,
+       .receive        = sandbox_dma_receive,
+       .prepare_rcv_buf = sandbox_dma_prepare_rcv_buf,
+};
+
+static int sandbox_dma_probe(struct udevice *dev)
+{
+       struct dma_dev_priv *uc_priv = dev_get_uclass_priv(dev);
+       struct sandbox_dma_dev *ud = dev_get_priv(dev);
+       int i, ret = 0;
+
+       uc_priv->supported = DMA_SUPPORTS_MEM_TO_MEM |
+                            DMA_SUPPORTS_MEM_TO_DEV |
+                            DMA_SUPPORTS_DEV_TO_MEM;
+
+       ud->ch_count = SANDBOX_DMA_CH_CNT;
+       ud->buf_rx = NULL;
+       ud->meta = 0;
+       ud->data_len = 0;
+
+       pr_err("Number of channels: %u\n", ud->ch_count);
+
+       for (i = 0; i < ud->ch_count; i++) {
+               struct sandbox_dma_chan *uc = &ud->channels[i];
+
+               uc->ud = ud;
+               uc->id = i;
+               sprintf(uc->name, "DMA chan%d\n", i);
+               uc->in_use = false;
+               uc->enabled = false;
+       }
+
+       return ret;
+}
+
+static const struct udevice_id sandbox_dma_ids[] = {
+       { .compatible = "sandbox,dma" },
+       { }
+};
+
+U_BOOT_DRIVER(sandbox_dma) = {
+       .name   = "sandbox-dma",
+       .id     = UCLASS_DMA,
+       .of_match = sandbox_dma_ids,
+       .ops    = &sandbox_dma_ops,
+       .probe = sandbox_dma_probe,
+       .priv_auto_alloc_size = sizeof(struct sandbox_dma_dev),
+};
index 2131e10..7e11b13 100644 (file)
@@ -11,7 +11,7 @@
 #include <asm/io.h>
 #include <common.h>
 #include <dm.h>
-#include <dma.h>
+#include <dma-uclass.h>
 #include <asm/omap_common.h>
 #include <asm/ti-common/ti-edma3.h>
 
index a690c43..f160b4e 100644 (file)
 #include <linux/errno.h>
 #include <linux/io.h>
 
-#define STM32_GPIOS_PER_BANK           16
 #define MODE_BITS(gpio_pin)            (gpio_pin * 2)
 #define MODE_BITS_MASK                 3
 #define BSRR_BIT(gpio_pin, value)      BIT(gpio_pin + (value ? 0 : 16))
 
+/*
+ * convert gpio offset to gpio index taking into account gpio holes
+ * into gpio bank
+ */
+int stm32_offset_to_index(struct udevice *dev, unsigned int offset)
+{
+       struct stm32_gpio_priv *priv = dev_get_priv(dev);
+       int idx = 0;
+       int i;
+
+       for (i = 0; i < STM32_GPIOS_PER_BANK; i++) {
+               if (priv->gpio_range & BIT(i)) {
+                       if (idx == offset)
+                               return idx;
+                       idx++;
+               }
+       }
+       /* shouldn't happen */
+       return -EINVAL;
+}
+
 static int stm32_gpio_direction_input(struct udevice *dev, unsigned offset)
 {
        struct stm32_gpio_priv *priv = dev_get_priv(dev);
        struct stm32_gpio_regs *regs = priv->regs;
-       int bits_index = MODE_BITS(offset);
-       int mask = MODE_BITS_MASK << bits_index;
+       int bits_index;
+       int mask;
+       int idx;
+
+       idx = stm32_offset_to_index(dev, offset);
+       if (idx < 0)
+               return idx;
+
+       bits_index = MODE_BITS(idx);
+       mask = MODE_BITS_MASK << bits_index;
 
        clrsetbits_le32(&regs->moder, mask, STM32_GPIO_MODE_IN << bits_index);
 
@@ -37,12 +65,20 @@ static int stm32_gpio_direction_output(struct udevice *dev, unsigned offset,
 {
        struct stm32_gpio_priv *priv = dev_get_priv(dev);
        struct stm32_gpio_regs *regs = priv->regs;
-       int bits_index = MODE_BITS(offset);
-       int mask = MODE_BITS_MASK << bits_index;
+       int bits_index;
+       int mask;
+       int idx;
+
+       idx = stm32_offset_to_index(dev, offset);
+       if (idx < 0)
+               return idx;
+
+       bits_index = MODE_BITS(idx);
+       mask = MODE_BITS_MASK << bits_index;
 
        clrsetbits_le32(&regs->moder, mask, STM32_GPIO_MODE_OUT << bits_index);
 
-       writel(BSRR_BIT(offset, value), &regs->bsrr);
+       writel(BSRR_BIT(idx, value), &regs->bsrr);
 
        return 0;
 }
@@ -51,16 +87,26 @@ static int stm32_gpio_get_value(struct udevice *dev, unsigned offset)
 {
        struct stm32_gpio_priv *priv = dev_get_priv(dev);
        struct stm32_gpio_regs *regs = priv->regs;
+       int idx;
+
+       idx = stm32_offset_to_index(dev, offset);
+       if (idx < 0)
+               return idx;
 
-       return readl(&regs->idr) & BIT(offset) ? 1 : 0;
+       return readl(&regs->idr) & BIT(idx) ? 1 : 0;
 }
 
 static int stm32_gpio_set_value(struct udevice *dev, unsigned offset, int value)
 {
        struct stm32_gpio_priv *priv = dev_get_priv(dev);
        struct stm32_gpio_regs *regs = priv->regs;
+       int idx;
+
+       idx = stm32_offset_to_index(dev, offset);
+       if (idx < 0)
+               return idx;
 
-       writel(BSRR_BIT(offset, value), &regs->bsrr);
+       writel(BSRR_BIT(idx, value), &regs->bsrr);
 
        return 0;
 }
@@ -69,10 +115,18 @@ static int stm32_gpio_get_function(struct udevice *dev, unsigned int offset)
 {
        struct stm32_gpio_priv *priv = dev_get_priv(dev);
        struct stm32_gpio_regs *regs = priv->regs;
-       int bits_index = MODE_BITS(offset);
-       int mask = MODE_BITS_MASK << bits_index;
+       int bits_index;
+       int mask;
+       int idx;
        u32 mode;
 
+       idx = stm32_offset_to_index(dev, offset);
+       if (idx < 0)
+               return idx;
+
+       bits_index = MODE_BITS(idx);
+       mask = MODE_BITS_MASK << bits_index;
+
        mode = (readl(&regs->moder) & mask) >> bits_index;
        if (mode == STM32_GPIO_MODE_OUT)
                return GPIOF_OUTPUT;
@@ -96,8 +150,12 @@ static int gpio_stm32_probe(struct udevice *dev)
 {
        struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
        struct stm32_gpio_priv *priv = dev_get_priv(dev);
+       struct ofnode_phandle_args args;
+       struct clk clk;
        fdt_addr_t addr;
        const char *name;
+       int ret;
+       int i;
 
        addr = dev_read_addr(dev);
        if (addr == FDT_ADDR_T_NONE)
@@ -108,14 +166,25 @@ static int gpio_stm32_probe(struct udevice *dev)
        if (!name)
                return -EINVAL;
        uc_priv->bank_name = name;
-       uc_priv->gpio_count = dev_read_u32_default(dev, "ngpios",
-                                                  STM32_GPIOS_PER_BANK);
-       debug("%s, addr = 0x%p, bank_name = %s\n", __func__, (u32 *)priv->regs,
-             uc_priv->bank_name);
 
-#ifdef CONFIG_CLK
-       struct clk clk;
-       int ret;
+       i = 0;
+       ret = dev_read_phandle_with_args(dev, "gpio-ranges",
+                                        NULL, 3, i, &args);
+
+       while (ret != -ENOENT) {
+               priv->gpio_range |= GENMASK(args.args[2] + args.args[0] - 1,
+                                   args.args[0]);
+
+               uc_priv->gpio_count += args.args[2];
+
+               ret = dev_read_phandle_with_args(dev, "gpio-ranges", NULL, 3,
+                                                ++i, &args);
+       }
+
+       dev_dbg(dev, "addr = 0x%p bank_name = %s gpio_count = %d gpio_range = 0x%x\n",
+               (u32 *)priv->regs, uc_priv->bank_name, uc_priv->gpio_count,
+               priv->gpio_range);
+
        ret = clk_get_by_index(dev, 0, &clk);
        if (ret < 0)
                return ret;
@@ -127,7 +196,6 @@ static int gpio_stm32_probe(struct udevice *dev)
                return ret;
        }
        debug("clock enabled for device %s\n", dev->name);
-#endif
 
        return 0;
 }
diff --git a/drivers/hwspinlock/Kconfig b/drivers/hwspinlock/Kconfig
new file mode 100644 (file)
index 0000000..96d4f5d
--- /dev/null
@@ -0,0 +1,24 @@
+menu "Hardware Spinlock Support"
+
+config DM_HWSPINLOCK
+       bool "Enable U-Boot hardware spinlock support"
+       help
+         This option enables U-Boot hardware spinlock support
+
+config HWSPINLOCK_SANDBOX
+       bool "Enable Hardware Spinlock support for Sandbox"
+       depends on SANDBOX && DM_HWSPINLOCK
+       help
+         Enable hardware spinlock support in Sandbox. This is a dummy device that
+         can be probed and support all the methods of HWSPINLOCK, but does not
+         really do anything.
+
+config HWSPINLOCK_STM32
+       bool "Enable Hardware Spinlock support for STM32"
+       depends on ARCH_STM32MP && DM_HWSPINLOCK
+       help
+         Enable hardware spinlock support in STM32MP. Hardware spinlocks are
+         hardware mutex which provide a synchronisation mechanism for the
+         various processors on the SoC.
+
+endmenu
diff --git a/drivers/hwspinlock/Makefile b/drivers/hwspinlock/Makefile
new file mode 100644 (file)
index 0000000..289b12a
--- /dev/null
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
+#
+# Copyright (C) 2018, STMicroelectronics - All Rights Reserved
+
+obj-$(CONFIG_DM_HWSPINLOCK) += hwspinlock-uclass.o
+obj-$(CONFIG_HWSPINLOCK_SANDBOX) += sandbox_hwspinlock.o
+obj-$(CONFIG_HWSPINLOCK_STM32) += stm32_hwspinlock.o
diff --git a/drivers/hwspinlock/hwspinlock-uclass.c b/drivers/hwspinlock/hwspinlock-uclass.c
new file mode 100644 (file)
index 0000000..195f079
--- /dev/null
@@ -0,0 +1,144 @@
+// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
+/*
+ * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <errno.h>
+#include <hwspinlock.h>
+#include <dm/device-internal.h>
+
+static inline const struct hwspinlock_ops *
+hwspinlock_dev_ops(struct udevice *dev)
+{
+       return (const struct hwspinlock_ops *)dev->driver->ops;
+}
+
+static int hwspinlock_of_xlate_default(struct hwspinlock *hws,
+                                      struct ofnode_phandle_args *args)
+{
+       if (args->args_count > 1) {
+               debug("Invaild args_count: %d\n", args->args_count);
+               return -EINVAL;
+       }
+
+       if (args->args_count)
+               hws->id = args->args[0];
+       else
+               hws->id = 0;
+
+       return 0;
+}
+
+int hwspinlock_get_by_index(struct udevice *dev, int index,
+                           struct hwspinlock *hws)
+{
+       int ret;
+       struct ofnode_phandle_args args;
+       struct udevice *dev_hws;
+       const struct hwspinlock_ops *ops;
+
+       assert(hws);
+       hws->dev = NULL;
+
+       ret = dev_read_phandle_with_args(dev, "hwlocks", "#hwlock-cells", 1,
+                                        index, &args);
+       if (ret) {
+               dev_dbg(dev, "%s: dev_read_phandle_with_args: err=%d\n",
+                       __func__, ret);
+               return ret;
+       }
+
+       ret = uclass_get_device_by_ofnode(UCLASS_HWSPINLOCK,
+                                         args.node, &dev_hws);
+       if (ret) {
+               dev_dbg(dev,
+                       "%s: uclass_get_device_by_of_offset failed: err=%d\n",
+                       __func__, ret);
+               return ret;
+       }
+
+       hws->dev = dev_hws;
+
+       ops = hwspinlock_dev_ops(dev_hws);
+
+       if (ops->of_xlate)
+               ret = ops->of_xlate(hws, &args);
+       else
+               ret = hwspinlock_of_xlate_default(hws, &args);
+       if (ret)
+               dev_dbg(dev, "of_xlate() failed: %d\n", ret);
+
+       return ret;
+}
+
+int hwspinlock_lock_timeout(struct hwspinlock *hws, unsigned int timeout)
+{
+       const struct hwspinlock_ops *ops;
+       ulong start;
+       int ret;
+
+       assert(hws);
+
+       if (!hws->dev)
+               return -EINVAL;
+
+       ops = hwspinlock_dev_ops(hws->dev);
+       if (!ops->lock)
+               return -ENOSYS;
+
+       start = get_timer(0);
+       do {
+               ret = ops->lock(hws->dev, hws->id);
+               if (!ret)
+                       return ret;
+
+               if (ops->relax)
+                       ops->relax(hws->dev);
+       } while (get_timer(start) < timeout);
+
+       return -ETIMEDOUT;
+}
+
+int hwspinlock_unlock(struct hwspinlock *hws)
+{
+       const struct hwspinlock_ops *ops;
+
+       assert(hws);
+
+       if (!hws->dev)
+               return -EINVAL;
+
+       ops = hwspinlock_dev_ops(hws->dev);
+       if (!ops->unlock)
+               return -ENOSYS;
+
+       return ops->unlock(hws->dev, hws->id);
+}
+
+static int hwspinlock_post_bind(struct udevice *dev)
+{
+#if defined(CONFIG_NEEDS_MANUAL_RELOC)
+       struct hwspinlock_ops *ops = device_get_ops(dev);
+       static int reloc_done;
+
+       if (!reloc_done) {
+               if (ops->lock)
+                       ops->lock += gd->reloc_off;
+               if (ops->unlock)
+                       ops->unlock += gd->reloc_off;
+               if (ops->relax)
+                       ops->relax += gd->reloc_off;
+
+               reloc_done++;
+       }
+#endif
+       return 0;
+}
+
+UCLASS_DRIVER(hwspinlock) = {
+       .id             = UCLASS_HWSPINLOCK,
+       .name           = "hwspinlock",
+       .post_bind      = hwspinlock_post_bind,
+};
diff --git a/drivers/hwspinlock/sandbox_hwspinlock.c b/drivers/hwspinlock/sandbox_hwspinlock.c
new file mode 100644 (file)
index 0000000..be920f5
--- /dev/null
@@ -0,0 +1,56 @@
+// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
+/*
+ * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <hwspinlock.h>
+#include <asm/state.h>
+
+static int sandbox_lock(struct udevice *dev, int index)
+{
+       struct sandbox_state *state = state_get_current();
+
+       if (index != 0)
+               return -1;
+
+       if (state->hwspinlock)
+               return -1;
+
+       state->hwspinlock = true;
+
+       return 0;
+}
+
+static int sandbox_unlock(struct udevice *dev, int index)
+{
+       struct sandbox_state *state = state_get_current();
+
+       if (index != 0)
+               return -1;
+
+       if (!state->hwspinlock)
+               return -1;
+
+       state->hwspinlock = false;
+
+       return 0;
+}
+
+static const struct hwspinlock_ops sandbox_hwspinlock_ops = {
+       .lock = sandbox_lock,
+       .unlock = sandbox_unlock,
+};
+
+static const struct udevice_id sandbox_hwspinlock_ids[] = {
+       { .compatible = "sandbox,hwspinlock" },
+       {}
+};
+
+U_BOOT_DRIVER(hwspinlock_sandbox) = {
+       .name = "hwspinlock_sandbox",
+       .id = UCLASS_HWSPINLOCK,
+       .of_match = sandbox_hwspinlock_ids,
+       .ops = &sandbox_hwspinlock_ops,
+};
diff --git a/drivers/hwspinlock/stm32_hwspinlock.c b/drivers/hwspinlock/stm32_hwspinlock.c
new file mode 100644 (file)
index 0000000..a32bde4
--- /dev/null
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
+/*
+ * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
+ */
+
+#include <common.h>
+#include <clk.h>
+#include <dm.h>
+#include <hwspinlock.h>
+#include <asm/io.h>
+
+#define STM32_MUTEX_COREID     BIT(8)
+#define STM32_MUTEX_LOCK_BIT   BIT(31)
+#define STM32_MUTEX_NUM_LOCKS  32
+
+struct stm32mp1_hws_priv {
+       fdt_addr_t base;
+};
+
+static int stm32mp1_lock(struct udevice *dev, int index)
+{
+       struct stm32mp1_hws_priv *priv = dev_get_priv(dev);
+       u32 status;
+
+       if (index >= STM32_MUTEX_NUM_LOCKS)
+               return -EINVAL;
+
+       status = readl(priv->base + index * sizeof(u32));
+       if (status == (STM32_MUTEX_LOCK_BIT | STM32_MUTEX_COREID))
+               return -EBUSY;
+
+       writel(STM32_MUTEX_LOCK_BIT | STM32_MUTEX_COREID,
+              priv->base + index * sizeof(u32));
+
+       status = readl(priv->base + index * sizeof(u32));
+       if (status != (STM32_MUTEX_LOCK_BIT | STM32_MUTEX_COREID))
+               return -EINVAL;
+
+       return 0;
+}
+
+static int stm32mp1_unlock(struct udevice *dev, int index)
+{
+       struct stm32mp1_hws_priv *priv = dev_get_priv(dev);
+
+       if (index >= STM32_MUTEX_NUM_LOCKS)
+               return -EINVAL;
+
+       writel(STM32_MUTEX_COREID, priv->base + index * sizeof(u32));
+
+       return 0;
+}
+
+static int stm32mp1_hwspinlock_probe(struct udevice *dev)
+{
+       struct stm32mp1_hws_priv *priv = dev_get_priv(dev);
+       struct clk clk;
+       int ret;
+
+       priv->base = dev_read_addr(dev);
+       if (priv->base == FDT_ADDR_T_NONE)
+               return -EINVAL;
+
+       ret = clk_get_by_index(dev, 0, &clk);
+       if (ret)
+               return ret;
+
+       ret = clk_enable(&clk);
+       if (ret)
+               clk_free(&clk);
+
+       return ret;
+}
+
+static const struct hwspinlock_ops stm32mp1_hwspinlock_ops = {
+       .lock = stm32mp1_lock,
+       .unlock = stm32mp1_unlock,
+};
+
+static const struct udevice_id stm32mp1_hwspinlock_ids[] = {
+       { .compatible = "st,stm32-hwspinlock" },
+       {}
+};
+
+U_BOOT_DRIVER(hwspinlock_stm32mp1) = {
+       .name = "hwspinlock_stm32mp1",
+       .id = UCLASS_HWSPINLOCK,
+       .of_match = stm32mp1_hwspinlock_ids,
+       .ops = &stm32mp1_hwspinlock_ops,
+       .probe = stm32mp1_hwspinlock_probe,
+       .priv_auto_alloc_size = sizeof(struct stm32mp1_hws_priv),
+};
index 5678f8e..9a5dc46 100644 (file)
@@ -167,19 +167,8 @@ static int kbd_controller_present(void)
        return in8(I8042_STS_REG) != 0xff;
 }
 
-/*
- * Implement a weak default function for boards that optionally
- * need to skip the i8042 initialization.
- *
- * TODO(sjg@chromium.org): Use device tree for this?
- */
-int __weak board_i8042_skip(void)
-{
-       /* As default, don't skip */
-       return 0;
-}
-
-void i8042_flush(void)
+/** Flush all buffer from keyboard controller to host*/
+static void i8042_flush(void)
 {
        int timeout;
 
@@ -202,7 +191,13 @@ void i8042_flush(void)
        }
 }
 
-int i8042_disable(void)
+/**
+ * Disables the keyboard so that key strokes no longer generate scancodes to
+ * the host.
+ *
+ * @return 0 if ok, -1 if keyboard input was found while disabling
+ */
+static int i8042_disable(void)
 {
        if (kbd_input_empty() == 0)
                return -1;
@@ -266,7 +261,7 @@ static int i8042_start(struct udevice *dev)
        char *penv;
        int ret;
 
-       if (!kbd_controller_present() || board_i8042_skip()) {
+       if (!kbd_controller_present()) {
                debug("i8042 keyboard controller is not present\n");
                return -ENOENT;
        }
@@ -294,6 +289,15 @@ static int i8042_start(struct udevice *dev)
        return 0;
 }
 
+static int i8042_kbd_remove(struct udevice *dev)
+{
+       if (i8042_disable())
+               log_debug("i8042_disable() failed. fine, continue.\n");
+       i8042_flush();
+
+       return 0;
+}
+
 /**
  * Set up the i8042 keyboard. This is called by the stdio device handler
  *
@@ -348,6 +352,7 @@ U_BOOT_DRIVER(i8042_kbd) = {
        .id     = UCLASS_KEYBOARD,
        .of_match = i8042_kbd_ids,
        .probe = i8042_kbd_probe,
+       .remove = i8042_kbd_remove,
        .ops    = &i8042_kbd_ops,
        .priv_auto_alloc_size = sizeof(struct i8042_kbd_priv),
 };
index 2dcdb3d..565de04 100644 (file)
@@ -420,7 +420,7 @@ int cros_ec_read_id(struct udevice *dev, char *id, int maxlen)
        ret = ec_command_inptr(dev, EC_CMD_GET_VERSION, 0, NULL, 0,
                               (uint8_t **)&r, sizeof(*r));
        if (ret != sizeof(*r)) {
-               log_err("Got rc %d, expected %d\n", ret, sizeof(*r));
+               log_err("Got rc %d, expected %u\n", ret, (uint)sizeof(*r));
                return -1;
        }
 
@@ -1466,7 +1466,7 @@ int cros_ec_set_lid_shutdown_mask(struct udevice *dev, int enable)
        if (ret < 0)
                return ret;
 
-       // Set lid close event state in the EC SMI event mask
+       /* Set lid close event state in the EC SMI event mask */
        if (enable)
                mask |= EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_CLOSED);
        else
index 429f1a9..4fcb2d9 100644 (file)
@@ -313,13 +313,15 @@ static int process_cmd(struct ec_state *ec,
 
                switch (req->op) {
                case EC_VBNV_CONTEXT_OP_READ:
+                       /* TODO(sjg@chromium.org): Support full-size context */
                        memcpy(resp->block, ec->vbnv_context,
-                              sizeof(resp->block));
-                       len = sizeof(*resp);
+                              EC_VBNV_BLOCK_SIZE);
+                       len = 16;
                        break;
                case EC_VBNV_CONTEXT_OP_WRITE:
-                       memcpy(ec->vbnv_context, resp->block,
-                              sizeof(resp->block));
+                       /* TODO(sjg@chromium.org): Support full-size context */
+                       memcpy(ec->vbnv_context, req->block,
+                              EC_VBNV_BLOCK_SIZE);
                        len = 0;
                        break;
                default:
index d6b9cdc..f5c821e 100644 (file)
@@ -1289,6 +1289,10 @@ static int sd_set_card_speed(struct mmc *mmc, enum bus_mode mode)
        ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
        int speed;
 
+       /* SD version 1.00 and 1.01 does not support CMD 6 */
+       if (mmc->version == SD_VERSION_1_0)
+               return 0;
+
        switch (mode) {
        case SD_LEGACY:
                speed = UHS_SDR12_BUS_SPEED;
index 5ca560c..d638f70 100644 (file)
 
 #define MTD_NAME_MAX_LEN 20
 
+void board_mtdparts_default(const char **mtdids, const char **mtdparts);
+
+static const char *get_mtdids(void)
+{
+       __maybe_unused const char *mtdparts = NULL;
+       const char *mtdids = env_get("mtdids");
+
+       if (mtdids)
+               return mtdids;
+
+#if defined(CONFIG_SYS_MTDPARTS_RUNTIME)
+       board_mtdparts_default(&mtdids, &mtdparts);
+#elif defined(MTDIDS_DEFAULT)
+       mtdids = MTDIDS_DEFAULT;
+#elif defined(CONFIG_MTDIDS_DEFAULT)
+       mtdids = CONFIG_MTDIDS_DEFAULT;
+#endif
+
+       if (mtdids)
+               env_set("mtdids", mtdids);
+
+       return mtdids;
+}
 
 /**
  * mtd_search_alternate_name - Search an alternate name for @mtdname thanks to
@@ -34,7 +57,7 @@ int mtd_search_alternate_name(const char *mtdname, char *altname,
        const char *mtdids, *equal, *comma, *dev_id, *mtd_id;
        int dev_id_len, mtd_id_len;
 
-       mtdids = env_get("mtdids");
+       mtdids = get_mtdids();
        if (!mtdids)
                return -EINVAL;
 
@@ -92,30 +115,6 @@ static void mtd_probe_uclass_mtd_devs(void) { }
 #endif
 
 #if defined(CONFIG_MTD_PARTITIONS)
-extern void board_mtdparts_default(const char **mtdids,
-                                  const char **mtdparts);
-
-static const char *get_mtdids(void)
-{
-       __maybe_unused const char *mtdparts = NULL;
-       const char *mtdids = env_get("mtdids");
-
-       if (mtdids)
-               return mtdids;
-
-#if defined(CONFIG_SYS_MTDPARTS_RUNTIME)
-       board_mtdparts_default(&mtdids, &mtdparts);
-#elif defined(MTDIDS_DEFAULT)
-       mtdids = MTDIDS_DEFAULT;
-#elif defined(CONFIG_MTDIDS_DEFAULT)
-       mtdids = CONFIG_MTDIDS_DEFAULT;
-#endif
-
-       if (mtdids)
-               env_set("mtdids", mtdids);
-
-       return mtdids;
-}
 
 #define MTDPARTS_MAXLEN         512
 
@@ -150,20 +149,74 @@ static const char *get_mtdparts(void)
        return mtdparts;
 }
 
+static int mtd_del_parts(struct mtd_info *mtd, bool quiet)
+{
+       int ret;
+
+       if (!mtd_has_partitions(mtd))
+               return 0;
+
+       /* do not delete partitions if they are in use. */
+       if (mtd_partitions_used(mtd)) {
+               if (!quiet)
+                       printf("\"%s\" partitions still in use, can't delete them\n",
+                              mtd->name);
+               return -EACCES;
+       }
+
+       ret = del_mtd_partitions(mtd);
+       if (ret)
+               return ret;
+
+       return 1;
+}
+
+static bool mtd_del_all_parts_failed;
+
+static void mtd_del_all_parts(void)
+{
+       struct mtd_info *mtd;
+       int ret = 0;
+
+       mtd_del_all_parts_failed = false;
+
+       /*
+        * It is not safe to remove entries from the mtd_for_each_device loop
+        * as it uses idr indexes and the partitions removal is done in bulk
+        * (all partitions of one device at the same time), so break and
+        * iterate from start each time a new partition is found and deleted.
+        */
+       do {
+               mtd_for_each_device(mtd) {
+                       ret = mtd_del_parts(mtd, false);
+                       if (ret > 0)
+                               break;
+                       else if (ret < 0)
+                               mtd_del_all_parts_failed = true;
+               }
+       } while (ret > 0);
+}
+
 int mtd_probe_devices(void)
 {
        static char *old_mtdparts;
        static char *old_mtdids;
        const char *mtdparts = get_mtdparts();
        const char *mtdids = get_mtdids();
-       bool remaining_partitions = true;
+       const char *mtdparts_next = mtdparts;
        struct mtd_info *mtd;
 
        mtd_probe_uclass_mtd_devs();
 
-       /* Check if mtdparts/mtdids changed since last call, otherwise: exit */
+       /*
+        * Check if mtdparts/mtdids changed, if the MTD dev list was updated
+        * or if our previous attempt to delete existing partititions failed.
+        * In any of these cases we want to update the partitions, otherwise,
+        * everything is up-to-date and we can return 0 directly.
+        */
        if ((!mtdparts && !old_mtdparts && !mtdids && !old_mtdids) ||
            (mtdparts && old_mtdparts && mtdids && old_mtdids &&
+            !mtd_dev_list_updated() && !mtd_del_all_parts_failed &&
             !strcmp(mtdparts, old_mtdparts) &&
             !strcmp(mtdids, old_mtdids)))
                return 0;
@@ -174,55 +227,55 @@ int mtd_probe_devices(void)
        old_mtdparts = strdup(mtdparts);
        old_mtdids = strdup(mtdids);
 
-       /* If at least one partition is still in use, do not delete anything */
-       mtd_for_each_device(mtd) {
-               if (mtd->usecount) {
-                       printf("Partition \"%s\" already in use, aborting\n",
-                              mtd->name);
-                       return -EACCES;
-               }
-       }
+       /*
+        * Remove all old parts. Note that partition removal can fail in case
+        * one of the partition is still being used by an MTD user, so this
+        * does not guarantee that all old partitions are gone.
+        */
+       mtd_del_all_parts();
 
        /*
-        * Everything looks clear, remove all partitions. It is not safe to
-        * remove entries from the mtd_for_each_device loop as it uses idr
-        * indexes and the partitions removal is done in bulk (all partitions of
-        * one device at the same time), so break and iterate from start each
-        * time a new partition is found and deleted.
+        * Call mtd_dev_list_updated() to clear updates generated by our own
+        * parts removal loop.
         */
-       while (remaining_partitions) {
-               remaining_partitions = false;
-               mtd_for_each_device(mtd) {
-                       if (!mtd_is_partition(mtd) && mtd_has_partitions(mtd)) {
-                               del_mtd_partitions(mtd);
-                               remaining_partitions = true;
-                               break;
-                       }
-               }
-       }
+       mtd_dev_list_updated();
 
        /* If either mtdparts or mtdids is empty, then exit */
        if (!mtdparts || !mtdids)
                return 0;
 
        /* Start the parsing by ignoring the extra 'mtdparts=' prefix, if any */
-       if (strstr(mtdparts, "mtdparts="))
+       if (!strncmp(mtdparts, "mtdparts=", sizeof("mtdparts=") - 1))
                mtdparts += 9;
 
        /* For each MTD device in mtdparts */
-       while (mtdparts[0] != '\0') {
+       for (; mtdparts[0] != '\0'; mtdparts = mtdparts_next) {
                char mtd_name[MTD_NAME_MAX_LEN], *colon;
                struct mtd_partition *parts;
-               int mtd_name_len, nparts;
-               int ret;
+               unsigned int mtd_name_len;
+               int nparts, ret;
+
+               mtdparts_next = strchr(mtdparts, ';');
+               if (!mtdparts_next)
+                       mtdparts_next = mtdparts + strlen(mtdparts);
+               else
+                       mtdparts_next++;
 
                colon = strchr(mtdparts, ':');
+               if (colon > mtdparts_next)
+                       colon = NULL;
+
                if (!colon) {
                        printf("Wrong mtdparts: %s\n", mtdparts);
                        return -EINVAL;
                }
 
-               mtd_name_len = colon - mtdparts;
+               mtd_name_len = (unsigned int)(colon - mtdparts);
+               if (mtd_name_len + 1 > sizeof(mtd_name)) {
+                       printf("MTD name too long: %s\n", mtdparts);
+                       return -EINVAL;
+               }
+
                strncpy(mtd_name, mtdparts, mtd_name_len);
                mtd_name[mtd_name_len] = '\0';
                /* Move the pointer forward (including the ':') */
@@ -249,15 +302,23 @@ int mtd_probe_devices(void)
                        if (ret || IS_ERR_OR_NULL(mtd)) {
                                printf("Could not find a valid device for %s\n",
                                       mtd_name);
-                               mtdparts = strchr(mtdparts, ';');
-                               if (mtdparts)
-                                       mtdparts++;
-
+                               mtdparts = mtdparts_next;
                                continue;
                        }
                }
 
                /*
+                * Call mtd_del_parts() again, even if it's already been called
+                * in mtd_del_all_parts(). We need to know if old partitions are
+                * still around (because they are still being used by someone),
+                * and if they are, we shouldn't create new partitions, so just
+                * skip this MTD device and try the next one.
+                */
+               ret = mtd_del_parts(mtd, true);
+               if (ret < 0)
+                       continue;
+
+               /*
                 * Parse the MTD device partitions. It will update the mtdparts
                 * pointer, create an array of parts (that must be freed), and
                 * return the number of partition structures in the array.
@@ -281,6 +342,12 @@ int mtd_probe_devices(void)
                put_mtd_device(mtd);
        }
 
+       /*
+        * Call mtd_dev_list_updated() to clear updates generated by our own
+        * parts registration loop.
+        */
+       mtd_dev_list_updated();
+
        return 0;
 }
 #else
index fb6c779..cb7ca38 100644 (file)
@@ -87,14 +87,17 @@ struct idr_layer {
 
 struct idr {
        struct idr_layer id[MAX_IDR_ID];
+       bool updated;
 };
 
 #define DEFINE_IDR(name)       struct idr name;
 
 void idr_remove(struct idr *idp, int id)
 {
-       if (idp->id[id].used)
+       if (idp->id[id].used) {
                idp->id[id].used = 0;
+               idp->updated = true;
+       }
 
        return;
 }
@@ -134,6 +137,7 @@ int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask)
                if (idl->used == 0) {
                        idl->used = 1;
                        idl->ptr = ptr;
+                       idp->updated = true;
                        return i;
                }
                i++;
@@ -155,6 +159,16 @@ struct mtd_info *__mtd_next_device(int i)
 }
 EXPORT_SYMBOL_GPL(__mtd_next_device);
 
+bool mtd_dev_list_updated(void)
+{
+       if (mtd_idr.updated) {
+               mtd_idr.updated = false;
+               return true;
+       }
+
+       return false;
+}
+
 #ifndef __UBOOT__
 static LIST_HEAD(mtd_notifiers);
 
@@ -514,6 +528,13 @@ int del_mtd_device(struct mtd_info *mtd)
        struct mtd_notifier *not;
 #endif
 
+       ret = del_mtd_partitions(mtd);
+       if (ret) {
+               debug("Failed to delete MTD partitions attached to %s (err %d)\n",
+                     mtd->name, ret);
+               return ret;
+       }
+
        mutex_lock(&mtd_table_mutex);
 
        if (idr_find(&mtd_idr, mtd->index) != mtd) {
index 4d2ac81..fd8d8e5 100644 (file)
@@ -63,6 +63,18 @@ char *kstrdup(const char *s, gfp_t gfp)
 #define MTD_SIZE_REMAINING             (~0LLU)
 #define MTD_OFFSET_NOT_SPECIFIED       (~0LLU)
 
+bool mtd_partitions_used(struct mtd_info *master)
+{
+       struct mtd_info *slave;
+
+       list_for_each_entry(slave, &master->partitions, node) {
+               if (slave->usecount)
+                       return true;
+       }
+
+       return false;
+}
+
 /**
  * mtd_parse_partition - Parse @mtdparts partition definition, fill @partition
  *                       with it and update the @mtdparts string pointer.
index 4c783f1..4d2712d 100644 (file)
@@ -195,6 +195,7 @@ struct pxa3xx_nand_info {
 
        int                     cs;
        int                     use_ecc;        /* use HW ECC ? */
+       int                     force_raw;      /* prevent use_ecc to be set */
        int                     ecc_bch;        /* using BCH ECC? */
        int                     use_spare;      /* use spare ? */
        int                     need_wait;
@@ -326,14 +327,14 @@ static struct nand_ecclayout ecc_layout_2KB_bch4bit = {
 static struct nand_ecclayout ecc_layout_2KB_bch8bit = {
        .eccbytes = 64,
        .eccpos = {
-               64,  65,  66,  67,  68,  69,  70,  71,
-               72,  73,  74,  75,  76,  77,  78,  79,
-               80,  81,  82,  83,  84,  85,  86,  87,
-               88,  89,  90,  91,  92,  93,  94,  95,
-               96,  97,  98,  99,  100, 101, 102, 103,
-               104, 105, 106, 107, 108, 109, 110, 111,
-               112, 113, 114, 115, 116, 117, 118, 119,
-               120, 121, 122, 123, 124, 125, 126, 127},
+               32, 33, 34, 35, 36, 37, 38, 39,
+               40, 41, 42, 43, 44, 45, 46, 47,
+               48, 49, 50, 51, 52, 53, 54, 55,
+               56, 57, 58, 59, 60, 61, 62, 63,
+               64, 65, 66, 67, 68, 69, 70, 71,
+               72, 73, 74, 75, 76, 77, 78, 79,
+               80, 81, 82, 83, 84, 85, 86, 87,
+               88, 89, 90, 91, 92, 93, 94, 95},
        .oobfree = { {1, 4}, {6, 26} }
 };
 
@@ -579,7 +580,7 @@ static void disable_int(struct pxa3xx_nand_info *info, uint32_t int_mask)
 
 static void drain_fifo(struct pxa3xx_nand_info *info, void *data, int len)
 {
-       if (info->ecc_bch) {
+       if (info->ecc_bch && !info->force_raw) {
                u32 ts;
 
                /*
@@ -612,12 +613,22 @@ static void drain_fifo(struct pxa3xx_nand_info *info, void *data, int len)
 
 static void handle_data_pio(struct pxa3xx_nand_info *info)
 {
+       int data_len = info->step_chunk_size;
+
+       /*
+        * In raw mode, include the spare area and the ECC bytes that are not
+        * consumed by the controller in the data section. Do not reorganize
+        * here, do it in the ->read_page_raw() handler instead.
+        */
+       if (info->force_raw)
+               data_len += info->step_spare_size + info->ecc_size;
+
        switch (info->state) {
        case STATE_PIO_WRITING:
                if (info->step_chunk_size)
                        writesl(info->mmio_base + NDDB,
                                info->data_buff + info->data_buff_pos,
-                               DIV_ROUND_UP(info->step_chunk_size, 4));
+                               DIV_ROUND_UP(data_len, 4));
 
                if (info->step_spare_size)
                        writesl(info->mmio_base + NDDB,
@@ -628,7 +639,10 @@ static void handle_data_pio(struct pxa3xx_nand_info *info)
                if (info->step_chunk_size)
                        drain_fifo(info,
                                   info->data_buff + info->data_buff_pos,
-                                  DIV_ROUND_UP(info->step_chunk_size, 4));
+                                  DIV_ROUND_UP(data_len, 4));
+
+               if (info->force_raw)
+                       break;
 
                if (info->step_spare_size)
                        drain_fifo(info,
@@ -642,7 +656,7 @@ static void handle_data_pio(struct pxa3xx_nand_info *info)
        }
 
        /* Update buffer pointers for multi-page read/write */
-       info->data_buff_pos += info->step_chunk_size;
+       info->data_buff_pos += data_len;
        info->oob_buff_pos += info->step_spare_size;
 }
 
@@ -796,7 +810,8 @@ static void prepare_start_command(struct pxa3xx_nand_info *info, int command)
        case NAND_CMD_READ0:
        case NAND_CMD_READOOB:
        case NAND_CMD_PAGEPROG:
-               info->use_ecc = 1;
+               if (!info->force_raw)
+                       info->use_ecc = 1;
                break;
        case NAND_CMD_PARAM:
                info->use_spare = 0;
@@ -866,7 +881,13 @@ static int prepare_set_command(struct pxa3xx_nand_info *info, int command,
                 * which is either naked-read or last-read according to the
                 * state.
                 */
-               if (mtd->writesize == info->chunk_size) {
+               if (info->force_raw) {
+                       info->ndcb0 |= NDCB0_DBC | (NAND_CMD_READSTART << 8) |
+                                      NDCB0_LEN_OVRD |
+                                      NDCB0_EXT_CMD_TYPE(ext_cmd_type);
+                       info->ndcb3 = info->step_chunk_size +
+                                     info->step_spare_size + info->ecc_size;
+               } else if (mtd->writesize == info->chunk_size) {
                        info->ndcb0 |= NDCB0_DBC | (NAND_CMD_READSTART << 8);
                } else if (mtd->writesize > info->chunk_size) {
                        info->ndcb0 |= NDCB0_DBC | (NAND_CMD_READSTART << 8)
@@ -1216,6 +1237,7 @@ static int pxa3xx_nand_read_page_hwecc(struct mtd_info *mtd,
 {
        struct pxa3xx_nand_host *host = nand_get_controller_data(chip);
        struct pxa3xx_nand_info *info = host->info_data;
+       int bf;
 
        chip->read_buf(mtd, buf, mtd->writesize);
        chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);
@@ -1223,12 +1245,30 @@ static int pxa3xx_nand_read_page_hwecc(struct mtd_info *mtd,
        if (info->retcode == ERR_CORERR && info->use_ecc) {
                mtd->ecc_stats.corrected += info->ecc_err_cnt;
 
-       } else if (info->retcode == ERR_UNCORERR) {
+       } else if (info->retcode == ERR_UNCORERR && info->ecc_bch) {
                /*
-                * for blank page (all 0xff), HW will calculate its ECC as
-                * 0, which is different from the ECC information within
-                * OOB, ignore such uncorrectable errors
+                * Empty pages will trigger uncorrectable errors. Re-read the
+                * entire page in raw mode and check for bits not being "1".
+                * If there are more than the supported strength, then it means
+                * this is an actual uncorrectable error.
                 */
+               chip->ecc.read_page_raw(mtd, chip, buf, oob_required, page);
+               bf = nand_check_erased_ecc_chunk(buf, mtd->writesize,
+                                                chip->oob_poi, mtd->oobsize,
+                                                NULL, 0, chip->ecc.strength);
+               if (bf < 0) {
+                       mtd->ecc_stats.failed++;
+               } else if (bf) {
+                       mtd->ecc_stats.corrected += bf;
+                       info->max_bitflips = max_t(unsigned int,
+                                                  info->max_bitflips, bf);
+                       info->retcode = ERR_CORERR;
+               } else {
+                       info->retcode = ERR_NONE;
+               }
+
+       } else if (info->retcode == ERR_UNCORERR && !info->ecc_bch) {
+               /* Raw read is not supported with Hamming ECC engine */
                if (is_buf_blank(buf, mtd->writesize))
                        info->retcode = ERR_NONE;
                else
@@ -1238,6 +1278,69 @@ static int pxa3xx_nand_read_page_hwecc(struct mtd_info *mtd,
        return info->max_bitflips;
 }
 
+static int pxa3xx_nand_read_page_raw(struct mtd_info *mtd,
+                                    struct nand_chip *chip, uint8_t *buf,
+                                    int oob_required, int page)
+{
+       struct pxa3xx_nand_host *host = chip->priv;
+       struct pxa3xx_nand_info *info = host->info_data;
+       int chunk, ecc_off_buf;
+
+       if (!info->ecc_bch)
+               return -ENOTSUPP;
+
+       /*
+        * Set the force_raw boolean, then re-call ->cmdfunc() that will run
+        * pxa3xx_nand_start(), which will actually disable the ECC engine.
+        */
+       info->force_raw = true;
+       chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page);
+
+       ecc_off_buf = (info->nfullchunks * info->spare_size) +
+                     info->last_spare_size;
+       for (chunk = 0; chunk < info->nfullchunks; chunk++) {
+               chip->read_buf(mtd,
+                              buf + (chunk * info->chunk_size),
+                              info->chunk_size);
+               chip->read_buf(mtd,
+                              chip->oob_poi +
+                              (chunk * (info->spare_size)),
+                              info->spare_size);
+               chip->read_buf(mtd,
+                              chip->oob_poi + ecc_off_buf +
+                              (chunk * (info->ecc_size)),
+                              info->ecc_size - 2);
+       }
+
+       if (info->ntotalchunks > info->nfullchunks) {
+               chip->read_buf(mtd,
+                              buf + (info->nfullchunks * info->chunk_size),
+                              info->last_chunk_size);
+               chip->read_buf(mtd,
+                              chip->oob_poi +
+                              (info->nfullchunks * (info->spare_size)),
+                              info->last_spare_size);
+               chip->read_buf(mtd,
+                              chip->oob_poi + ecc_off_buf +
+                              (info->nfullchunks * (info->ecc_size)),
+                              info->ecc_size - 2);
+       }
+
+       info->force_raw = false;
+
+       return 0;
+}
+
+static int pxa3xx_nand_read_oob_raw(struct mtd_info *mtd,
+                                   struct nand_chip *chip, int page)
+{
+       /* Invalidate page cache */
+       chip->pagebuf = -1;
+
+       return chip->ecc.read_page_raw(mtd, chip, chip->buffers->databuf, true,
+                                      page);
+}
+
 static uint8_t pxa3xx_nand_read_byte(struct mtd_info *mtd)
 {
        struct nand_chip *chip = mtd_to_nand(mtd);
@@ -1488,7 +1591,7 @@ static int pxa_ecc_init(struct pxa3xx_nand_info *info,
                info->chunk_size = 1024;
                info->spare_size = 0;
                info->last_chunk_size = 1024;
-               info->last_spare_size = 64;
+               info->last_spare_size = 32;
                info->ecc_size = 32;
                ecc->mode = NAND_ECC_HW;
                ecc->size = info->chunk_size;
@@ -1669,6 +1772,8 @@ static int alloc_nand_resource(struct pxa3xx_nand_info *info)
 
                nand_set_controller_data(chip, host);
                chip->ecc.read_page     = pxa3xx_nand_read_page_hwecc;
+               chip->ecc.read_page_raw = pxa3xx_nand_read_page_raw;
+               chip->ecc.read_oob_raw  = pxa3xx_nand_read_oob_raw;
                chip->ecc.write_page    = pxa3xx_nand_write_page_hwecc;
                chip->controller        = &info->controller;
                chip->waitfunc          = pxa3xx_nand_waitfunc;
index 58d7e44..68c3600 100644 (file)
@@ -10,6 +10,7 @@
 #include <spi_flash.h>
 
 static struct mtd_info sf_mtd_info;
+static bool sf_mtd_registered;
 static char sf_mtd_name[8];
 
 static int spi_flash_mtd_erase(struct mtd_info *mtd, struct erase_info *instr)
@@ -17,6 +18,9 @@ static int spi_flash_mtd_erase(struct mtd_info *mtd, struct erase_info *instr)
        struct spi_flash *flash = mtd->priv;
        int err;
 
+       if (!flash)
+               return -ENODEV;
+
        instr->state = MTD_ERASING;
 
        err = spi_flash_erase(flash, instr->addr, instr->len);
@@ -38,6 +42,9 @@ static int spi_flash_mtd_read(struct mtd_info *mtd, loff_t from, size_t len,
        struct spi_flash *flash = mtd->priv;
        int err;
 
+       if (!flash)
+               return -ENODEV;
+
        err = spi_flash_read(flash, from, len, buf);
        if (!err)
                *retlen = len;
@@ -51,6 +58,9 @@ static int spi_flash_mtd_write(struct mtd_info *mtd, loff_t to, size_t len,
        struct spi_flash *flash = mtd->priv;
        int err;
 
+       if (!flash)
+               return -ENODEV;
+
        err = spi_flash_write(flash, to, len, buf);
        if (!err)
                *retlen = len;
@@ -73,6 +83,17 @@ static int spi_flash_mtd_number(void)
 
 int spi_flash_mtd_register(struct spi_flash *flash)
 {
+       int ret;
+
+       if (sf_mtd_registered) {
+               ret = del_mtd_device(&sf_mtd_info);
+               if (ret)
+                       return ret;
+
+               sf_mtd_registered = false;
+       }
+
+       sf_mtd_registered = false;
        memset(&sf_mtd_info, 0, sizeof(sf_mtd_info));
        sprintf(sf_mtd_name, "nor%d", spi_flash_mtd_number());
 
@@ -94,10 +115,33 @@ int spi_flash_mtd_register(struct spi_flash *flash)
        sf_mtd_info.numeraseregions = 0;
        sf_mtd_info.erasesize = flash->sector_size;
 
-       return add_mtd_device(&sf_mtd_info);
+       ret = add_mtd_device(&sf_mtd_info);
+       if (!ret)
+               sf_mtd_registered = true;
+
+       return ret;
 }
 
 void spi_flash_mtd_unregister(void)
 {
-       del_mtd_device(&sf_mtd_info);
+       int ret;
+
+       if (!sf_mtd_registered)
+               return;
+
+       ret = del_mtd_device(&sf_mtd_info);
+       if (!ret) {
+               sf_mtd_registered = false;
+               return;
+       }
+
+       /*
+        * Setting mtd->priv to NULL is the best we can do. Thanks to that,
+        * the MTD layer can still call mtd hooks without risking a
+        * use-after-free bug. Still, things should be fixed to prevent the
+        * spi_flash object from being destroyed when del_mtd_device() fails.
+        */
+       sf_mtd_info.priv = NULL;
+       printf("Failed to unregister MTD %s and the spi_flash object is going away: you're in deep trouble!",
+              sf_mtd_info.name);
 }
index 5a2e932..00f8558 100644 (file)
@@ -144,6 +144,14 @@ static int spi_flash_std_probe(struct udevice *dev)
        return spi_flash_probe_slave(flash);
 }
 
+static int spi_flash_std_remove(struct udevice *dev)
+{
+#ifdef CONFIG_SPI_FLASH_MTD
+       spi_flash_mtd_unregister();
+#endif
+       return 0;
+}
+
 static const struct dm_spi_flash_ops spi_flash_std_ops = {
        .read = spi_flash_std_read,
        .write = spi_flash_std_write,
@@ -161,6 +169,7 @@ U_BOOT_DRIVER(spi_flash_std) = {
        .id             = UCLASS_SPI_FLASH,
        .of_match       = spi_flash_std_ids,
        .probe          = spi_flash_std_probe,
+       .remove         = spi_flash_std_remove,
        .priv_auto_alloc_size = sizeof(struct spi_flash),
        .ops            = &spi_flash_std_ops,
 };
index b38f4df..aecd290 100644 (file)
@@ -77,9 +77,6 @@ static inline struct e1000_hw *e1000_hw_from_spi(struct spi_slave *spi)
        return container_of(spi, struct e1000_hw, spi);
 }
 
-/* Not sure why all of these are necessary */
-void spi_init(void)   { /* Nothing to do */ }
-
 struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
                unsigned int max_hz, unsigned int mode)
 {
index 76d65af..0086f25 100644 (file)
@@ -42,7 +42,7 @@ static int eth_raw_bus_post_bind(struct udevice *dev)
                device_probe(child);
                priv = dev_get_priv(child);
                if (priv) {
-                       memcpy(priv->host_ifname, i->if_name, IFNAMSIZ);
+                       strcpy(priv->host_ifname, i->if_name);
                        priv->host_ifindex = i->if_index;
                        priv->local = local;
                }
index eaacd40..7d9b75c 100644 (file)
@@ -331,6 +331,7 @@ int vbe_setup_video_priv(struct vesa_mode_info *vesa,
                return log_msg_ret("No x resolution", -ENXIO);
        uc_priv->xsize = vesa->x_resolution;
        uc_priv->ysize = vesa->y_resolution;
+       uc_priv->line_length = vesa->bytes_per_scanline;
        switch (vesa->bits_per_pixel) {
        case 32:
        case 24:
index 6d4117d..24affe0 100644 (file)
@@ -1,6 +1,7 @@
 #include <common.h>
 #include <dm.h>
 #include <dm/pinctrl.h>
+#include <hwspinlock.h>
 #include <asm/arch/gpio.h>
 #include <asm/gpio.h>
 #include <asm/io.h>
@@ -14,8 +15,8 @@ DECLARE_GLOBAL_DATA_PTR;
 #define OTYPE_MSK                      1
 #define AFR_MASK                       0xF
 
-#ifndef CONFIG_SPL_BUILD
 struct stm32_pinctrl_priv {
+       struct hwspinlock hws;
        int pinctrl_ngpios;
        struct list_head gpio_dev;
 };
@@ -25,7 +26,7 @@ struct stm32_gpio_bank {
        struct list_head list;
 };
 
-#define MAX_PIN_PER_BANK               16
+#ifndef CONFIG_SPL_BUILD
 
 static char pin_name[PINNAME_SIZE];
 #define PINMUX_MODE_COUNT              5
@@ -51,6 +52,39 @@ static int stm32_pinctrl_get_af(struct udevice *dev, unsigned int offset)
        return af;
 }
 
+static int stm32_populate_gpio_dev_list(struct udevice *dev)
+{
+       struct stm32_pinctrl_priv *priv = dev_get_priv(dev);
+       struct udevice *gpio_dev;
+       struct udevice *child;
+       struct stm32_gpio_bank *gpio_bank;
+       int ret;
+
+       /*
+        * parse pin-controller sub-nodes (ie gpio bank nodes) and fill
+        * a list with all gpio device reference which belongs to the
+        * current pin-controller. This list is used to find pin_name and
+        * pin muxing
+        */
+       list_for_each_entry(child, &dev->child_head, sibling_node) {
+               ret = uclass_get_device_by_name(UCLASS_GPIO, child->name,
+                                               &gpio_dev);
+               if (ret < 0)
+                       continue;
+
+               gpio_bank = malloc(sizeof(*gpio_bank));
+               if (!gpio_bank) {
+                       dev_err(dev, "Not enough memory\n");
+                       return -ENOMEM;
+               }
+
+               gpio_bank->gpio_dev = gpio_dev;
+               list_add_tail(&gpio_bank->list, &priv->gpio_dev);
+       }
+
+       return 0;
+}
+
 static int stm32_pinctrl_get_pins_count(struct udevice *dev)
 {
        struct stm32_pinctrl_priv *priv = dev_get_priv(dev);
@@ -64,6 +98,8 @@ static int stm32_pinctrl_get_pins_count(struct udevice *dev)
        if (priv->pinctrl_ngpios)
                return priv->pinctrl_ngpios;
 
+       if (list_empty(&priv->gpio_dev))
+               stm32_populate_gpio_dev_list(dev);
        /*
         * walk through all banks to retrieve the pin-controller
         * pins number
@@ -78,22 +114,34 @@ static int stm32_pinctrl_get_pins_count(struct udevice *dev)
 }
 
 static struct udevice *stm32_pinctrl_get_gpio_dev(struct udevice *dev,
-                                                 unsigned int selector)
+                                                 unsigned int selector,
+                                                 unsigned int *idx)
 {
        struct stm32_pinctrl_priv *priv = dev_get_priv(dev);
        struct stm32_gpio_bank *gpio_bank;
        struct gpio_dev_priv *uc_priv;
-       int first_pin = 0;
+       int pin_count = 0;
+
+       if (list_empty(&priv->gpio_dev))
+               stm32_populate_gpio_dev_list(dev);
 
        /* look up for the bank which owns the requested pin */
        list_for_each_entry(gpio_bank, &priv->gpio_dev, list) {
                uc_priv = dev_get_uclass_priv(gpio_bank->gpio_dev);
 
-               if (selector < (first_pin + uc_priv->gpio_count))
-                       /* we found the bank */
-                       return gpio_bank->gpio_dev;
+               if (selector < (pin_count + uc_priv->gpio_count)) {
+                       /*
+                        * we found the bank, convert pin selector to
+                        * gpio bank index
+                        */
+                       *idx = stm32_offset_to_index(gpio_bank->gpio_dev,
+                                                    selector - pin_count);
+                       if (*idx < 0)
+                               return NULL;
 
-               first_pin += uc_priv->gpio_count;
+                       return gpio_bank->gpio_dev;
+               }
+               pin_count += uc_priv->gpio_count;
        }
 
        return NULL;
@@ -104,9 +152,10 @@ static const char *stm32_pinctrl_get_pin_name(struct udevice *dev,
 {
        struct gpio_dev_priv *uc_priv;
        struct udevice *gpio_dev;
+       unsigned int gpio_idx;
 
        /* look up for the bank which owns the requested pin */
-       gpio_dev = stm32_pinctrl_get_gpio_dev(dev, selector);
+       gpio_dev = stm32_pinctrl_get_gpio_dev(dev, selector, &gpio_idx);
        if (!gpio_dev) {
                snprintf(pin_name, PINNAME_SIZE, "Error");
        } else {
@@ -114,7 +163,7 @@ static const char *stm32_pinctrl_get_pin_name(struct udevice *dev,
 
                snprintf(pin_name, PINNAME_SIZE, "%s%d",
                         uc_priv->bank_name,
-                        selector % MAX_PIN_PER_BANK);
+                        gpio_idx);
        }
 
        return pin_name;
@@ -127,23 +176,21 @@ static int stm32_pinctrl_get_pin_muxing(struct udevice *dev,
 {
        struct udevice *gpio_dev;
        const char *label;
-       int gpio_pin;
        int mode;
        int af_num;
+       unsigned int gpio_idx;
 
        /* look up for the bank which owns the requested pin */
-       gpio_dev = stm32_pinctrl_get_gpio_dev(dev, selector);
+       gpio_dev = stm32_pinctrl_get_gpio_dev(dev, selector, &gpio_idx);
 
        if (!gpio_dev)
                return -ENODEV;
 
-       /* translate pin-controller pin number to gpio pin number */
-       gpio_pin = selector % MAX_PIN_PER_BANK;
+       mode = gpio_get_raw_function(gpio_dev, gpio_idx, &label);
 
-       mode = gpio_get_raw_function(gpio_dev, gpio_pin, &label);
+       dev_dbg(dev, "selector = %d gpio_idx = %d mode = %d\n",
+               selector, gpio_idx, mode);
 
-       dev_dbg(dev, "selector = %d gpio_pin = %d mode = %d\n",
-               selector, gpio_pin, mode);
 
        switch (mode) {
        case GPIOF_UNKNOWN:
@@ -153,7 +200,7 @@ static int stm32_pinctrl_get_pin_muxing(struct udevice *dev,
                snprintf(buf, size, "%s", pinmux_mode[mode]);
                break;
        case GPIOF_FUNC:
-               af_num = stm32_pinctrl_get_af(gpio_dev, gpio_pin);
+               af_num = stm32_pinctrl_get_af(gpio_dev, gpio_idx);
                snprintf(buf, size, "%s %d", pinmux_mode[mode], af_num);
                break;
        case GPIOF_OUTPUT:
@@ -166,53 +213,44 @@ static int stm32_pinctrl_get_pin_muxing(struct udevice *dev,
        return 0;
 }
 
+#endif
+
 int stm32_pinctrl_probe(struct udevice *dev)
 {
        struct stm32_pinctrl_priv *priv = dev_get_priv(dev);
-       struct udevice *gpio_dev;
-       struct udevice *child;
-       struct stm32_gpio_bank *gpio_bank;
        int ret;
 
        INIT_LIST_HEAD(&priv->gpio_dev);
 
-       /*
-        * parse pin-controller sub-nodes (ie gpio bank nodes) and fill
-        * a list with all gpio device reference which belongs to the
-        * current pin-controller. This list is used to find pin_name and
-        * pin muxing
-        */
-       list_for_each_entry(child, &dev->child_head, sibling_node) {
-               ret = uclass_get_device_by_name(UCLASS_GPIO, child->name,
-                                               &gpio_dev);
-               if (ret < 0)
-                       continue;
-
-               gpio_bank = malloc(sizeof(*gpio_bank));
-               if (!gpio_bank) {
-                       dev_err(dev, "Not enough memory\n");
-                       return -ENOMEM;
-               }
-
-               gpio_bank->gpio_dev = gpio_dev;
-               list_add_tail(&gpio_bank->list, &priv->gpio_dev);
-       }
+       /* hwspinlock property is optional, just log the error */
+       ret = hwspinlock_get_by_index(dev, 0, &priv->hws);
+       if (ret)
+               debug("%s: hwspinlock_get_by_index may have failed (%d)\n",
+                     __func__, ret);
 
        return 0;
 }
-#endif
 
 static int stm32_gpio_config(struct gpio_desc *desc,
                             const struct stm32_gpio_ctl *ctl)
 {
        struct stm32_gpio_priv *priv = dev_get_priv(desc->dev);
        struct stm32_gpio_regs *regs = priv->regs;
+       struct stm32_pinctrl_priv *ctrl_priv;
+       int ret;
        u32 index;
 
        if (!ctl || ctl->af > 15 || ctl->mode > 3 || ctl->otype > 1 ||
            ctl->pupd > 2 || ctl->speed > 3)
                return -EINVAL;
 
+       ctrl_priv = dev_get_priv(dev_get_parent(desc->dev));
+       ret = hwspinlock_lock_timeout(&ctrl_priv->hws, 10);
+       if (ret == -ETIME) {
+               dev_err(desc->dev, "HWSpinlock timeout\n");
+               return ret;
+       }
+
        index = (desc->offset & 0x07) * 4;
        clrsetbits_le32(&regs->afr[desc->offset >> 3], AFR_MASK << index,
                        ctl->af << index);
@@ -227,6 +265,8 @@ static int stm32_gpio_config(struct gpio_desc *desc,
        index = desc->offset;
        clrsetbits_le32(&regs->otyper, OTYPE_MSK << index, ctl->otype << index);
 
+       hwspinlock_unlock(&ctrl_priv->hws);
+
        return 0;
 }
 
@@ -393,8 +433,6 @@ U_BOOT_DRIVER(pinctrl_stm32) = {
        .of_match               = stm32_pinctrl_ids,
        .ops                    = &stm32_pinctrl_ops,
        .bind                   = dm_scan_fdt_dev,
-#ifndef CONFIG_SPL_BUILD
        .probe                  = stm32_pinctrl_probe,
        .priv_auto_alloc_size   = sizeof(struct stm32_pinctrl_priv),
-#endif
 };
index 4da8e43..4511625 100644 (file)
@@ -106,10 +106,15 @@ int regulator_get_enable(struct udevice *dev)
 int regulator_set_enable(struct udevice *dev, bool enable)
 {
        const struct dm_regulator_ops *ops = dev_get_driver_ops(dev);
+       struct dm_regulator_uclass_platdata *uc_pdata;
 
        if (!ops || !ops->set_enable)
                return -ENOSYS;
 
+       uc_pdata = dev_get_uclass_platdata(dev);
+       if (!enable && uc_pdata->always_on)
+               return -EACCES;
+
        return ops->set_enable(dev, enable);
 }
 
index 3bcc61e..6252dd8 100644 (file)
@@ -506,16 +506,10 @@ config BCM283X_PL011_SERIAL
 
 config BCM6345_SERIAL
        bool "Support for BCM6345 UART"
-       depends on DM_SERIAL && ARCH_BMIPS
+       depends on DM_SERIAL
        help
          Select this to enable UART on BCM6345 SoCs.
 
-config BCM6858_SERIAL
-       bool "Support for BCM6858 UART"
-       depends on DM_SERIAL && ARCH_BCM6858
-       help
-         Select this to enable UART on BCM6358 SoCs.
-
 config FSL_LINFLEXUART
        bool "Freescale Linflex UART support"
        depends on DM_SERIAL
index b6377b1..2f8d065 100644 (file)
@@ -35,7 +35,6 @@ obj-$(CONFIG_AR933X_UART) += serial_ar933x.o
 obj-$(CONFIG_ARM_DCC) += arm_dcc.o
 obj-$(CONFIG_ATMEL_USART) += atmel_usart.o
 obj-$(CONFIG_BCM6345_SERIAL) += serial_bcm6345.o
-obj-$(CONFIG_BCM6858_SERIAL) += serial_bcm6858.o
 obj-$(CONFIG_EFI_APP) += serial_efi.o
 obj-$(CONFIG_LPC32XX_HSUART) += lpc32xx_hsuart.o
 obj-$(CONFIG_MCFUART) += mcfuart.o
index 25b9d17..f3bd8db 100644 (file)
@@ -372,6 +372,25 @@ static int ns16550_serial_setconfig(struct udevice *dev, uint serial_config)
        return 0;
 }
 
+static int ns16550_serial_getinfo(struct udevice *dev,
+                                 struct serial_device_info *info)
+{
+       struct NS16550 *const com_port = dev_get_priv(dev);
+       struct ns16550_platdata *plat = com_port->plat;
+
+       info->type = SERIAL_CHIP_16550_COMPATIBLE;
+#ifdef CONFIG_SYS_NS16550_PORT_MAPPED
+       info->addr_space = SERIAL_ADDRESS_SPACE_IO;
+#else
+       info->addr_space = SERIAL_ADDRESS_SPACE_MEMORY;
+#endif
+       info->addr = plat->base;
+       info->reg_width = plat->reg_width;
+       info->reg_shift = plat->reg_shift;
+       info->reg_offset = plat->reg_offset;
+       return 0;
+}
+
 int ns16550_serial_probe(struct udevice *dev)
 {
        struct NS16550 *const com_port = dev_get_priv(dev);
@@ -446,6 +465,7 @@ int ns16550_serial_ofdata_to_platdata(struct udevice *dev)
 
        plat->reg_offset = dev_read_u32_default(dev, "reg-offset", 0);
        plat->reg_shift = dev_read_u32_default(dev, "reg-shift", 0);
+       plat->reg_width = dev_read_u32_default(dev, "reg-io-width", 1);
 
        err = clk_get_by_index(dev, 0, &clk);
        if (!err) {
@@ -478,7 +498,8 @@ const struct dm_serial_ops ns16550_serial_ops = {
        .pending = ns16550_serial_pending,
        .getc = ns16550_serial_getc,
        .setbrg = ns16550_serial_setbrg,
-       .setconfig = ns16550_serial_setconfig
+       .setconfig = ns16550_serial_setconfig,
+       .getinfo = ns16550_serial_getinfo,
 };
 
 #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
index 4a05ea4..33102fc 100644 (file)
@@ -163,6 +163,18 @@ DEBUG_UART_FUNCS
 
 #endif /* CONFIG_DEBUG_UART_SANDBOX */
 
+static int sandbox_serial_getconfig(struct udevice *dev, uint *serial_config)
+{
+       uint config = SERIAL_DEFAULT_CONFIG;
+
+       if (!serial_config)
+               return -EINVAL;
+
+       *serial_config = config;
+
+       return 0;
+}
+
 static int sandbox_serial_setconfig(struct udevice *dev, uint serial_config)
 {
        u8 parity = SERIAL_GET_PARITY(serial_config);
@@ -176,6 +188,26 @@ static int sandbox_serial_setconfig(struct udevice *dev, uint serial_config)
        return 0;
 }
 
+static int sandbox_serial_getinfo(struct udevice *dev,
+                                 struct serial_device_info *serial_info)
+{
+       struct serial_device_info info = {
+               .type = SERIAL_CHIP_UNKNOWN,
+               .addr_space = SERIAL_ADDRESS_SPACE_IO,
+               .addr = SERIAL_DEFAULT_ADDRESS,
+               .reg_width = 1,
+               .reg_offset = 0,
+               .reg_shift = 0,
+       };
+
+       if (!serial_info)
+               return -EINVAL;
+
+       *serial_info = info;
+
+       return 0;
+}
+
 #if CONFIG_IS_ENABLED(OF_CONTROL)
 static const char * const ansi_colour[] = {
        "black", "red", "green", "yellow", "blue", "megenta", "cyan",
@@ -207,7 +239,9 @@ static const struct dm_serial_ops sandbox_serial_ops = {
        .putc = sandbox_serial_putc,
        .pending = sandbox_serial_pending,
        .getc = sandbox_serial_getc,
+       .getconfig = sandbox_serial_getconfig,
        .setconfig = sandbox_serial_setconfig,
+       .getinfo = sandbox_serial_getinfo,
 };
 
 static const struct udevice_id sandbox_serial_ids[] = {
index 3ded627..ffcd6d1 100644 (file)
@@ -294,6 +294,20 @@ void serial_setbrg(void)
                ops->setbrg(gd->cur_serial_dev, gd->baudrate);
 }
 
+int serial_getconfig(uint *config)
+{
+       struct dm_serial_ops *ops;
+
+       if (!gd->cur_serial_dev)
+               return 0;
+
+       ops = serial_get_ops(gd->cur_serial_dev);
+       if (ops->getconfig)
+               return ops->getconfig(gd->cur_serial_dev, config);
+
+       return 0;
+}
+
 int serial_setconfig(uint config)
 {
        struct dm_serial_ops *ops;
@@ -308,6 +322,25 @@ int serial_setconfig(uint config)
        return 0;
 }
 
+int serial_getinfo(struct serial_device_info *info)
+{
+       struct dm_serial_ops *ops;
+
+       if (!gd->cur_serial_dev)
+               return -ENODEV;
+
+       if (!info)
+               return -EINVAL;
+
+       info->baudrate = gd->baudrate;
+
+       ops = serial_get_ops(gd->cur_serial_dev);
+       if (ops->getinfo)
+               return ops->getinfo(gd->cur_serial_dev, info);
+
+       return -EINVAL;
+}
+
 void serial_stdio_init(void)
 {
 }
@@ -419,12 +452,16 @@ static int serial_post_probe(struct udevice *dev)
                ops->pending += gd->reloc_off;
        if (ops->clear)
                ops->clear += gd->reloc_off;
+       if (ops->getconfig)
+               ops->getconfig += gd->reloc_off;
        if (ops->setconfig)
                ops->setconfig += gd->reloc_off;
 #if CONFIG_POST & CONFIG_SYS_POST_UART
        if (ops->loop)
                ops->loop += gd->reloc_off;
 #endif
+       if (ops->getinfo)
+               ops->getinfo += gd->reloc_off;
 #endif
        /* Set the baud rate */
        if (ops->setbrg) {
index a0e709a..9ad8c77 100644 (file)
@@ -89,26 +89,26 @@ struct bcm6345_serial_priv {
 /* enable rx & tx operation on uart */
 static void bcm6345_serial_enable(void __iomem *base)
 {
-       setbits_be32(base + UART_CTL_REG, UART_CTL_BRGEN_MASK |
-                    UART_CTL_TXEN_MASK | UART_CTL_RXEN_MASK);
+       setbits_32(base + UART_CTL_REG, UART_CTL_BRGEN_MASK |
+                  UART_CTL_TXEN_MASK | UART_CTL_RXEN_MASK);
 }
 
 /* disable rx & tx operation on uart */
 static void bcm6345_serial_disable(void __iomem *base)
 {
-       clrbits_be32(base + UART_CTL_REG, UART_CTL_BRGEN_MASK |
-                    UART_CTL_TXEN_MASK | UART_CTL_RXEN_MASK);
+       clrbits_32(base + UART_CTL_REG, UART_CTL_BRGEN_MASK |
+                  UART_CTL_TXEN_MASK | UART_CTL_RXEN_MASK);
 }
 
 /* clear all unread data in rx fifo and unsent data in tx fifo */
 static void bcm6345_serial_flush(void __iomem *base)
 {
        /* empty rx and tx fifo */
-       setbits_be32(base + UART_CTL_REG, UART_CTL_RSTRXFIFO_MASK |
-                    UART_CTL_RSTTXFIFO_MASK);
+       setbits_32(base + UART_CTL_REG, UART_CTL_RSTRXFIFO_MASK |
+                  UART_CTL_RSTTXFIFO_MASK);
 
        /* read any pending char to make sure all irq status are cleared */
-       readl_be(base + UART_FIFO_REG);
+       readl(base + UART_FIFO_REG);
 }
 
 static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate)
@@ -120,40 +120,40 @@ static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate)
        bcm6345_serial_flush(base);
 
        /* set uart control config */
-       clrsetbits_be32(base + UART_CTL_REG,
-                       /* clear rx timeout */
-                       UART_CTL_RXTIMEOUT_MASK |
-                       /* clear stop bits */
-                       UART_CTL_STOPBITS_MASK |
-                       /* clear bits per symbol */
-                       UART_CTL_BITSPERSYM_MASK |
-                       /* clear xmit break */
-                       UART_CTL_XMITBRK_MASK |
-                       /* clear reserved bit */
-                       UART_CTL_RSVD_MASK |
-                       /* disable parity */
-                       UART_CTL_RXPAREN_MASK |
-                       UART_CTL_TXPAREN_MASK |
-                       /* disable loopback */
-                       UART_CTL_LOOPBACK_MASK,
-                       /* set timeout to 5 */
-                       UART_CTL_RXTIMEOUT_5 |
-                       /* set 8 bits/symbol */
-                       UART_CTL_BITSPERSYM_8 |
-                       /* set 1 stop bit */
-                       UART_CTL_STOPBITS_1 |
-                       /* set parity to even */
-                       UART_CTL_RXPAREVEN_MASK |
-                       UART_CTL_TXPAREVEN_MASK);
+       clrsetbits_32(base + UART_CTL_REG,
+                     /* clear rx timeout */
+                     UART_CTL_RXTIMEOUT_MASK |
+                     /* clear stop bits */
+                     UART_CTL_STOPBITS_MASK |
+                     /* clear bits per symbol */
+                     UART_CTL_BITSPERSYM_MASK |
+                     /* clear xmit break */
+                     UART_CTL_XMITBRK_MASK |
+                     /* clear reserved bit */
+                     UART_CTL_RSVD_MASK |
+                     /* disable parity */
+                     UART_CTL_RXPAREN_MASK |
+                     UART_CTL_TXPAREN_MASK |
+                     /* disable loopback */
+                     UART_CTL_LOOPBACK_MASK,
+                     /* set timeout to 5 */
+                     UART_CTL_RXTIMEOUT_5 |
+                     /* set 8 bits/symbol */
+                     UART_CTL_BITSPERSYM_8 |
+                     /* set 1 stop bit */
+                     UART_CTL_STOPBITS_1 |
+                     /* set parity to even */
+                     UART_CTL_RXPAREVEN_MASK |
+                     UART_CTL_TXPAREVEN_MASK);
 
        /* set uart fifo config */
-       clrsetbits_be32(base + UART_FIFO_CFG_REG,
-                       /* clear fifo config */
-                       UART_FIFO_CFG_RX_MASK |
-                       UART_FIFO_CFG_TX_MASK,
-                       /* set fifo config to 4 */
-                       UART_FIFO_CFG_RX_4 |
-                       UART_FIFO_CFG_TX_4);
+       clrsetbits_32(base + UART_FIFO_CFG_REG,
+                     /* clear fifo config */
+                     UART_FIFO_CFG_RX_MASK |
+                     UART_FIFO_CFG_TX_MASK,
+                     /* set fifo config to 4 */
+                     UART_FIFO_CFG_RX_4 |
+                     UART_FIFO_CFG_TX_4);
 
        /* set baud rate */
        val = ((clk / baudrate) >> 4);
@@ -161,10 +161,10 @@ static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate)
                val = (val >> 1);
        else
                val = (val >> 1) - 1;
-       writel_be(val, base + UART_BAUD_REG);
+       writel(val, base + UART_BAUD_REG);
 
        /* clear interrupts */
-       writel_be(0, base + UART_IR_REG);
+       writel(0, base + UART_IR_REG);
 
        /* enable uart */
        bcm6345_serial_enable(base);
@@ -175,7 +175,7 @@ static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate)
 static int bcm6345_serial_pending(struct udevice *dev, bool input)
 {
        struct bcm6345_serial_priv *priv = dev_get_priv(dev);
-       u32 val = readl_be(priv->base + UART_IR_REG);
+       u32 val = readl(priv->base + UART_IR_REG);
 
        if (input)
                return !!(val & UART_IR_STAT(UART_IR_RXNOTEMPTY));
@@ -195,11 +195,11 @@ static int bcm6345_serial_putc(struct udevice *dev, const char ch)
        struct bcm6345_serial_priv *priv = dev_get_priv(dev);
        u32 val;
 
-       val = readl_be(priv->base + UART_IR_REG);
+       val = readl(priv->base + UART_IR_REG);
        if (!(val & UART_IR_STAT(UART_IR_TXEMPTY)))
                return -EAGAIN;
 
-       writel_be(ch, priv->base + UART_FIFO_REG);
+       writel(ch, priv->base + UART_FIFO_REG);
 
        return 0;
 }
@@ -209,14 +209,13 @@ static int bcm6345_serial_getc(struct udevice *dev)
        struct bcm6345_serial_priv *priv = dev_get_priv(dev);
        u32 val;
 
-       val = readl_be(priv->base + UART_IR_REG);
+       val = readl(priv->base + UART_IR_REG);
        if (val & UART_IR_STAT(UART_IR_RXOVER))
-               setbits_be32(priv->base + UART_CTL_REG,
-                            UART_CTL_RSTRXFIFO_MASK);
+               setbits_32(priv->base + UART_CTL_REG, UART_CTL_RSTRXFIFO_MASK);
        if (!(val & UART_IR_STAT(UART_IR_RXNOTEMPTY)))
                return -EAGAIN;
 
-       val = readl_be(priv->base + UART_FIFO_REG);
+       val = readl(priv->base + UART_FIFO_REG);
        if (val & UART_FIFO_ANYERR_MASK)
                return -EAGAIN;
 
@@ -277,7 +276,7 @@ static inline void _debug_uart_init(void)
 static inline void wait_xfered(void __iomem *base)
 {
        do {
-               u32 val = readl_be(base + UART_IR_REG);
+               u32 val = readl(base + UART_IR_REG);
                if (val & UART_IR_STAT(UART_IR_TXEMPTY))
                        break;
        } while (1);
@@ -288,7 +287,7 @@ static inline void _debug_uart_putc(int ch)
        void __iomem *base = (void __iomem *)CONFIG_DEBUG_UART_BASE;
 
        wait_xfered(base);
-       writel_be(ch, base + UART_FIFO_REG);
+       writel(ch, base + UART_FIFO_REG);
        wait_xfered(base);
 }
 
diff --git a/drivers/serial/serial_bcm6858.c b/drivers/serial/serial_bcm6858.c
deleted file mode 100644 (file)
index 8aa3705..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2018 Philippe Reynes <philippe.reynes@softathome.com>
- *
- * Derived from linux/drivers/tty/serial/bcm63xx_uart.c:
- *     Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr>
- * Derived from linux/drivers/tty/serial/serial_bcm6345.c
- *     Copyright (C) 2017 Álvaro Fernández Rojas <noltari@gmail.com>
- */
-
-#include <clk.h>
-#include <dm.h>
-#include <debug_uart.h>
-#include <errno.h>
-#include <serial.h>
-#include <asm/io.h>
-#include <asm/types.h>
-
-/* UART Control register */
-#define UART_CTL_REG                   0x0
-#define UART_CTL_RXTIMEOUT_MASK                0x1f
-#define UART_CTL_RXTIMEOUT_5           0x5
-#define UART_CTL_RSTRXFIFO_SHIFT       6
-#define UART_CTL_RSTRXFIFO_MASK                (1 << UART_CTL_RSTRXFIFO_SHIFT)
-#define UART_CTL_RSTTXFIFO_SHIFT       7
-#define UART_CTL_RSTTXFIFO_MASK                (1 << UART_CTL_RSTTXFIFO_SHIFT)
-#define UART_CTL_STOPBITS_SHIFT                8
-#define UART_CTL_STOPBITS_MASK         (0xf << UART_CTL_STOPBITS_SHIFT)
-#define UART_CTL_STOPBITS_1            (0x7 << UART_CTL_STOPBITS_SHIFT)
-#define UART_CTL_BITSPERSYM_SHIFT      12
-#define UART_CTL_BITSPERSYM_MASK       (0x3 << UART_CTL_BITSPERSYM_SHIFT)
-#define UART_CTL_BITSPERSYM_8          (0x3 << UART_CTL_BITSPERSYM_SHIFT)
-#define UART_CTL_XMITBRK_SHIFT         14
-#define UART_CTL_XMITBRK_MASK          (1 << UART_CTL_XMITBRK_SHIFT)
-#define UART_CTL_RSVD_SHIFT            15
-#define UART_CTL_RSVD_MASK             (1 << UART_CTL_RSVD_SHIFT)
-#define UART_CTL_RXPAREVEN_SHIFT       16
-#define UART_CTL_RXPAREVEN_MASK                (1 << UART_CTL_RXPAREVEN_SHIFT)
-#define UART_CTL_RXPAREN_SHIFT         17
-#define UART_CTL_RXPAREN_MASK          (1 << UART_CTL_RXPAREN_SHIFT)
-#define UART_CTL_TXPAREVEN_SHIFT       18
-#define UART_CTL_TXPAREVEN_MASK                (1 << UART_CTL_TXPAREVEN_SHIFT)
-#define UART_CTL_TXPAREN_SHIFT         19
-#define UART_CTL_TXPAREN_MASK          (1 << UART_CTL_TXPAREN_SHIFT)
-#define UART_CTL_LOOPBACK_SHIFT                20
-#define UART_CTL_LOOPBACK_MASK         (1 << UART_CTL_LOOPBACK_SHIFT)
-#define UART_CTL_RXEN_SHIFT            21
-#define UART_CTL_RXEN_MASK             (1 << UART_CTL_RXEN_SHIFT)
-#define UART_CTL_TXEN_SHIFT            22
-#define UART_CTL_TXEN_MASK             (1 << UART_CTL_TXEN_SHIFT)
-#define UART_CTL_BRGEN_SHIFT           23
-#define UART_CTL_BRGEN_MASK            (1 << UART_CTL_BRGEN_SHIFT)
-
-/* UART Baudword register */
-#define UART_BAUD_REG                  0x4
-
-/* UART FIFO Config register */
-#define UART_FIFO_CFG_REG              0x8
-#define UART_FIFO_CFG_RX_SHIFT         8
-#define UART_FIFO_CFG_RX_MASK          (0xf << UART_FIFO_CFG_RX_SHIFT)
-#define UART_FIFO_CFG_RX_4             (0x4 << UART_FIFO_CFG_RX_SHIFT)
-#define UART_FIFO_CFG_TX_SHIFT         12
-#define UART_FIFO_CFG_TX_MASK          (0xf << UART_FIFO_CFG_TX_SHIFT)
-#define UART_FIFO_CFG_TX_4             (0x4 << UART_FIFO_CFG_TX_SHIFT)
-
-/* UART Interrupt register */
-#define UART_IR_REG                    0x10
-#define UART_IR_STAT(x)                        (1 << (x))
-#define UART_IR_TXEMPTY                        5
-#define UART_IR_RXOVER                 7
-#define UART_IR_RXNOTEMPTY             11
-
-/* UART FIFO register */
-#define UART_FIFO_REG                  0x14
-#define UART_FIFO_VALID_MASK           0xff
-#define UART_FIFO_FRAMEERR_SHIFT       8
-#define UART_FIFO_FRAMEERR_MASK                (1 << UART_FIFO_FRAMEERR_SHIFT)
-#define UART_FIFO_PARERR_SHIFT         9
-#define UART_FIFO_PARERR_MASK          (1 << UART_FIFO_PARERR_SHIFT)
-#define UART_FIFO_BRKDET_SHIFT         10
-#define UART_FIFO_BRKDET_MASK          (1 << UART_FIFO_BRKDET_SHIFT)
-#define UART_FIFO_ANYERR_MASK          (UART_FIFO_FRAMEERR_MASK |      \
-                                       UART_FIFO_PARERR_MASK |         \
-                                       UART_FIFO_BRKDET_MASK)
-
-struct bcm6858_serial_priv {
-       void __iomem *base;
-       ulong uartclk;
-};
-
-/* enable rx & tx operation on uart */
-static void bcm6858_serial_enable(void __iomem *base)
-{
-       setbits_le32(base + UART_CTL_REG, UART_CTL_BRGEN_MASK |
-                    UART_CTL_TXEN_MASK | UART_CTL_RXEN_MASK);
-}
-
-/* disable rx & tx operation on uart */
-static void bcm6858_serial_disable(void __iomem *base)
-{
-       clrbits_le32(base + UART_CTL_REG, UART_CTL_BRGEN_MASK |
-                    UART_CTL_TXEN_MASK | UART_CTL_RXEN_MASK);
-}
-
-/* clear all unread data in rx fifo and unsent data in tx fifo */
-static void bcm6858_serial_flush(void __iomem *base)
-{
-       /* empty rx and tx fifo */
-       setbits_le32(base + UART_CTL_REG, UART_CTL_RSTRXFIFO_MASK |
-                    UART_CTL_RSTTXFIFO_MASK);
-
-       /* read any pending char to make sure all irq status are cleared */
-       readl(base + UART_FIFO_REG);
-}
-
-static int bcm6858_serial_init(void __iomem *base, ulong clk, u32 baudrate)
-{
-       u32 val;
-
-       /* mask all irq and flush port */
-       bcm6858_serial_disable(base);
-       bcm6858_serial_flush(base);
-
-       /* set uart control config */
-       clrsetbits_le32(base + UART_CTL_REG,
-                       /* clear rx timeout */
-                       UART_CTL_RXTIMEOUT_MASK |
-                       /* clear stop bits */
-                       UART_CTL_STOPBITS_MASK |
-                       /* clear bits per symbol */
-                       UART_CTL_BITSPERSYM_MASK |
-                       /* clear xmit break */
-                       UART_CTL_XMITBRK_MASK |
-                       /* clear reserved bit */
-                       UART_CTL_RSVD_MASK |
-                       /* disable parity */
-                       UART_CTL_RXPAREN_MASK |
-                       UART_CTL_TXPAREN_MASK |
-                       /* disable loopback */
-                       UART_CTL_LOOPBACK_MASK,
-                       /* set timeout to 5 */
-                       UART_CTL_RXTIMEOUT_5 |
-                       /* set 8 bits/symbol */
-                       UART_CTL_BITSPERSYM_8 |
-                       /* set 1 stop bit */
-                       UART_CTL_STOPBITS_1 |
-                       /* set parity to even */
-                       UART_CTL_RXPAREVEN_MASK |
-                       UART_CTL_TXPAREVEN_MASK);
-
-       /* set uart fifo config */
-       clrsetbits_le32(base + UART_FIFO_CFG_REG,
-                       /* clear fifo config */
-                       UART_FIFO_CFG_RX_MASK |
-                       UART_FIFO_CFG_TX_MASK,
-                       /* set fifo config to 4 */
-                       UART_FIFO_CFG_RX_4 |
-                       UART_FIFO_CFG_TX_4);
-
-       /* set baud rate */
-       val = ((clk / baudrate) >> 4);
-       if (val & 0x1)
-               val = (val >> 1);
-       else
-               val = (val >> 1) - 1;
-       writel(val, base + UART_BAUD_REG);
-
-       /* clear interrupts */
-       writel(0, base + UART_IR_REG);
-
-       /* enable uart */
-       bcm6858_serial_enable(base);
-
-       return 0;
-}
-
-static int bcm6858_serial_pending(struct udevice *dev, bool input)
-{
-       struct bcm6858_serial_priv *priv = dev_get_priv(dev);
-       u32 val = readl(priv->base + UART_IR_REG);
-
-       if (input)
-               return !!(val & UART_IR_STAT(UART_IR_RXNOTEMPTY));
-       else
-               return !(val & UART_IR_STAT(UART_IR_TXEMPTY));
-}
-
-static int bcm6858_serial_setbrg(struct udevice *dev, int baudrate)
-{
-       struct bcm6858_serial_priv *priv = dev_get_priv(dev);
-
-       return bcm6858_serial_init(priv->base, priv->uartclk, baudrate);
-}
-
-static int bcm6858_serial_putc(struct udevice *dev, const char ch)
-{
-       struct bcm6858_serial_priv *priv = dev_get_priv(dev);
-       u32 val;
-
-       val = readl(priv->base + UART_IR_REG);
-       if (!(val & UART_IR_STAT(UART_IR_TXEMPTY)))
-               return -EAGAIN;
-
-       writel(ch, priv->base + UART_FIFO_REG);
-
-       return 0;
-}
-
-static int bcm6858_serial_getc(struct udevice *dev)
-{
-       struct bcm6858_serial_priv *priv = dev_get_priv(dev);
-       u32 val;
-
-       val = readl(priv->base + UART_IR_REG);
-       if (val & UART_IR_STAT(UART_IR_RXOVER))
-               setbits_le32(priv->base + UART_CTL_REG,
-                            UART_CTL_RSTRXFIFO_MASK);
-
-       if (!(val & UART_IR_STAT(UART_IR_RXNOTEMPTY)))
-               return -EAGAIN;
-
-       val = readl(priv->base + UART_FIFO_REG);
-       if (val & UART_FIFO_ANYERR_MASK)
-               return -EAGAIN;
-
-       return val & UART_FIFO_VALID_MASK;
-}
-
-static int bcm6858_serial_probe(struct udevice *dev)
-{
-       struct bcm6858_serial_priv *priv = dev_get_priv(dev);
-       struct clk clk;
-       int ret;
-
-       /* get address */
-       priv->base = dev_remap_addr(dev);
-       if (!priv->base)
-               return -EINVAL;
-
-       /* get clock rate */
-       ret = clk_get_by_index(dev, 0, &clk);
-       if (ret < 0)
-               return ret;
-       priv->uartclk = clk_get_rate(&clk);
-       clk_free(&clk);
-
-       /* initialize serial */
-       return bcm6858_serial_init(priv->base, priv->uartclk, CONFIG_BAUDRATE);
-}
-
-static const struct dm_serial_ops bcm6858_serial_ops = {
-       .putc = bcm6858_serial_putc,
-       .pending = bcm6858_serial_pending,
-       .getc = bcm6858_serial_getc,
-       .setbrg = bcm6858_serial_setbrg,
-};
-
-static const struct udevice_id bcm6858_serial_ids[] = {
-       { .compatible = "brcm,bcm6858-uart" },
-       { /* sentinel */ }
-};
-
-U_BOOT_DRIVER(bcm6858_serial) = {
-       .name = "bcm6858-uart",
-       .id = UCLASS_SERIAL,
-       .of_match = bcm6858_serial_ids,
-       .probe = bcm6858_serial_probe,
-       .priv_auto_alloc_size = sizeof(struct bcm6858_serial_priv),
-       .ops = &bcm6858_serial_ops,
-       .flags = DM_FLAG_PRE_RELOC,
-};
-
-#ifdef CONFIG_DEBUG_UART_BCM6858
-static inline void _debug_uart_init(void)
-{
-       void __iomem *base = (void __iomem *)CONFIG_DEBUG_UART_BASE;
-
-       bcm6858_serial_init(base, CONFIG_DEBUG_UART_CLOCK, CONFIG_BAUDRATE);
-}
-
-static inline void wait_xfered(void __iomem *base)
-{
-       do {
-               u32 val = readl(base + UART_IR_REG);
-               if (val & UART_IR_STAT(UART_IR_TXEMPTY))
-                       break;
-       } while (1);
-}
-
-static inline void _debug_uart_putc(int ch)
-{
-       void __iomem *base = (void __iomem *)CONFIG_DEBUG_UART_BASE;
-
-       wait_xfered(base);
-       writel(ch, base + UART_FIFO_REG);
-       wait_xfered(base);
-}
-
-DEBUG_UART_FUNCS
-#endif
index ee6ad9c..a31d737 100644 (file)
@@ -7,7 +7,6 @@
  */
 
 #include <common.h>
-#include <debug_uart.h>
 #include <dm.h>
 #include <dt-structs.h>
 #include <ns16550.h>
 
 #ifdef CONFIG_DEBUG_UART_OMAP
 
+#ifndef CONFIG_SYS_NS16550_IER
+#define CONFIG_SYS_NS16550_IER  0x00
+#endif
+
+#define UART_MCRVAL 0x00
+#define UART_LCRVAL UART_LCR_8N1
+
+static inline void serial_out_shift(void *addr, int shift, int value)
+{
+#ifdef CONFIG_SYS_NS16550_PORT_MAPPED
+       outb(value, (ulong)addr);
+#elif defined(CONFIG_SYS_NS16550_MEM32) && defined(CONFIG_SYS_LITTLE_ENDIAN)
+       out_le32(addr, value);
+#elif defined(CONFIG_SYS_NS16550_MEM32) && defined(CONFIG_SYS_BIG_ENDIAN)
+       out_be32(addr, value);
+#elif defined(CONFIG_SYS_NS16550_MEM32)
+       writel(value, addr);
+#elif defined(CONFIG_SYS_BIG_ENDIAN)
+       writeb(value, addr + (1 << shift) - 1);
+#else
+       writeb(value, addr);
+#endif
+}
+
+static inline int serial_in_shift(void *addr, int shift)
+{
+#ifdef CONFIG_SYS_NS16550_PORT_MAPPED
+       return inb((ulong)addr);
+#elif defined(CONFIG_SYS_NS16550_MEM32) && defined(CONFIG_SYS_LITTLE_ENDIAN)
+       return in_le32(addr);
+#elif defined(CONFIG_SYS_NS16550_MEM32) && defined(CONFIG_SYS_BIG_ENDIAN)
+       return in_be32(addr);
+#elif defined(CONFIG_SYS_NS16550_MEM32)
+       return readl(addr);
+#elif defined(CONFIG_SYS_BIG_ENDIAN)
+       return readb(addr + (1 << shift) - 1);
+#else
+       return readb(addr);
+#endif
+}
+
 #include <debug_uart.h>
 
 static inline void _debug_uart_init(void)
index 516188e..a7bb5b3 100644 (file)
@@ -116,6 +116,20 @@ config ICH_SPI
          access the SPI NOR flash on platforms embedding this Intel
          ICH IP core.
 
+config MESON_SPIFC
+       bool "Amlogic Meson SPI Flash Controller driver"
+       depends on ARCH_MESON
+       help
+         Enable the Amlogic Meson SPI Flash Controller SPIFC) driver.
+         This driver can be used to access the SPI NOR flash chips on
+         Amlogic Meson SoCs.
+
+config MPC8XX_SPI
+       bool "MPC8XX SPI Driver"
+       depends on MPC8xx
+       help
+         Enable support for SPI on MPC8XX
+
 config MT7621_SPI
        bool "MediaTek MT7621 SPI driver"
        depends on ARCH_MT7620
@@ -124,6 +138,13 @@ config MT7621_SPI
          the SPI NOR flash on platforms embedding this Ralink / MediaTek
          SPI core, like MT7621/7628/7688.
 
+config MTK_QSPI
+       bool "Mediatek QSPI driver"
+       help
+         Enable the Mediatek QSPI driver. This driver can be
+         used to access the SPI NOR flash on platforms embedding this
+         Mediatek QSPI IP core.
+
 config MVEBU_A3700_SPI
        bool "Marvell Armada 3700 SPI driver"
        select CLK_ARMADA_3720
@@ -328,12 +349,6 @@ config LPC32XX_SSP
        help
          Enable support for SPI on LPC32xx
 
-config MPC8XX_SPI
-       bool "MPC8XX SPI Driver"
-       depends on MPC8xx
-       help
-         Enable support for SPI on MPC8XX
-
 config MPC8XXX_SPI
        bool "MPC8XXX SPI Driver"
        help
index 7242ea7..392a925 100644 (file)
@@ -31,8 +31,10 @@ obj-$(CONFIG_FSL_QSPI) += fsl_qspi.o
 obj-$(CONFIG_ICH_SPI) +=  ich.o
 obj-$(CONFIG_KIRKWOOD_SPI) += kirkwood_spi.o
 obj-$(CONFIG_LPC32XX_SSP) += lpc32xx_ssp.o
+obj-$(CONFIG_MESON_SPIFC) += meson_spifc.o
 obj-$(CONFIG_MPC8XX_SPI) += mpc8xx_spi.o
 obj-$(CONFIG_MPC8XXX_SPI) += mpc8xxx_spi.o
+obj-$(CONFIG_MTK_QSPI) += mtk_qspi.o
 obj-$(CONFIG_MT7621_SPI) += mt7621_spi.o
 obj-$(CONFIG_MVEBU_A3700_SPI) += mvebu_a3700_spi.o
 obj-$(CONFIG_MXC_SPI) += mxc_spi.o
index 1db8bbe..cf4de9e 100644 (file)
@@ -34,11 +34,6 @@ static int spi_has_wdrbt(struct atmel_spi_slave *slave)
        return (ATMEL_SPI_VERSION_REV(ver) >= 0x210);
 }
 
-void spi_init()
-{
-
-}
-
 struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
                        unsigned int max_hz, unsigned int mode)
 {
index 07fa5e3..4d2c106 100644 (file)
@@ -388,11 +388,6 @@ void spi_cs_deactivate(struct spi_slave *slave)
        /* do nothing */
 }
 
-void spi_init(void)
-{
-       /* do nothing */
-}
-
 struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
                        unsigned int max_hz, unsigned int mode)
 {
index f7ed8fb..764c942 100644 (file)
@@ -390,11 +390,6 @@ static int fsl_dspi_cfg_speed(struct fsl_dspi_priv *priv, uint speed)
        return 0;
 }
 #ifndef CONFIG_DM_SPI
-void spi_init(void)
-{
-       /* Nothing to do */
-}
-
 int spi_cs_is_valid(unsigned int bus, unsigned int cs)
 {
        if (((cs >= 0) && (cs < 8)) && ((bus >= 0) && (bus < 8)))
index e994159..7444ae1 100644 (file)
@@ -118,11 +118,6 @@ void spi_free_slave(struct spi_slave *slave)
        free(fsl);
 }
 
-void spi_init(void)
-{
-
-}
-
 int spi_claim_bus(struct spi_slave *slave)
 {
        struct fsl_spi_slave *fsl = to_fsl_spi_slave(slave);
index ce12eee..4b09366 100644 (file)
@@ -47,15 +47,6 @@ static inline struct lpc32xx_spi_slave *to_lpc32xx_spi_slave(
        return container_of(slave, struct lpc32xx_spi_slave, slave);
 }
 
-/* spi_init is called during boot when CONFIG_CMD_SPI is defined */
-void spi_init(void)
-{
-       /*
-        *  nothing to do: clocking was enabled in lpc32xx_ssp_enable()
-        * and configuration will be done in spi_setup_slave()
-       */
-}
-
 /* the following is called in sequence by do_spi_xfer() */
 
 struct spi_slave *spi_setup_slave(uint bus, uint cs, uint max_hz, uint mode)
diff --git a/drivers/spi/meson_spifc.c b/drivers/spi/meson_spifc.c
new file mode 100644 (file)
index 0000000..3d55169
--- /dev/null
@@ -0,0 +1,320 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com>
+ * Copyright (C) 2018 BayLibre, SAS
+ * Author: Neil Armstrong <narmstrong@baylibre.com>
+ *
+ * Amlogic Meson SPI Flash Controller driver
+ */
+
+#include <common.h>
+#include <spi.h>
+#include <clk.h>
+#include <dm.h>
+#include <regmap.h>
+#include <errno.h>
+#include <asm/io.h>
+#include <linux/bitfield.h>
+
+/* register map */
+#define REG_CMD                        0x00
+#define REG_ADDR               0x04
+#define REG_CTRL               0x08
+#define REG_CTRL1              0x0c
+#define REG_STATUS             0x10
+#define REG_CTRL2              0x14
+#define REG_CLOCK              0x18
+#define REG_USER               0x1c
+#define REG_USER1              0x20
+#define REG_USER2              0x24
+#define REG_USER3              0x28
+#define REG_USER4              0x2c
+#define REG_SLAVE              0x30
+#define REG_SLAVE1             0x34
+#define REG_SLAVE2             0x38
+#define REG_SLAVE3             0x3c
+#define REG_C0                 0x40
+#define REG_B8                 0x60
+#define REG_MAX                        0x7c
+
+/* register fields */
+#define CMD_USER               BIT(18)
+#define CTRL_ENABLE_AHB                BIT(17)
+#define CLOCK_SOURCE           BIT(31)
+#define CLOCK_DIV_SHIFT                12
+#define CLOCK_DIV_MASK         (0x3f << CLOCK_DIV_SHIFT)
+#define CLOCK_CNT_HIGH_SHIFT   6
+#define CLOCK_CNT_HIGH_MASK    (0x3f << CLOCK_CNT_HIGH_SHIFT)
+#define CLOCK_CNT_LOW_SHIFT    0
+#define CLOCK_CNT_LOW_MASK     (0x3f << CLOCK_CNT_LOW_SHIFT)
+#define USER_DIN_EN_MS         BIT(0)
+#define USER_CMP_MODE          BIT(2)
+#define USER_CLK_NOT_INV       BIT(7)
+#define USER_UC_DOUT_SEL       BIT(27)
+#define USER_UC_DIN_SEL                BIT(28)
+#define USER_UC_MASK           ((BIT(5) - 1) << 27)
+#define USER1_BN_UC_DOUT_SHIFT 17
+#define USER1_BN_UC_DOUT_MASK  (0xff << 16)
+#define USER1_BN_UC_DIN_SHIFT  8
+#define USER1_BN_UC_DIN_MASK   (0xff << 8)
+#define USER4_CS_POL_HIGH      BIT(23)
+#define USER4_IDLE_CLK_HIGH    BIT(29)
+#define USER4_CS_ACT           BIT(30)
+#define SLAVE_TRST_DONE                BIT(4)
+#define SLAVE_OP_MODE          BIT(30)
+#define SLAVE_SW_RST           BIT(31)
+
+#define SPIFC_BUFFER_SIZE      64
+
+struct meson_spifc_priv {
+       struct regmap                   *regmap;
+       struct clk                      clk;
+};
+
+/**
+ * meson_spifc_drain_buffer() - copy data from device buffer to memory
+ * @spifc:     the Meson SPI device
+ * @buf:       the destination buffer
+ * @len:       number of bytes to copy
+ */
+static void meson_spifc_drain_buffer(struct meson_spifc_priv *spifc,
+                                    u8 *buf, int len)
+{
+       u32 data;
+       int i = 0;
+
+       while (i < len) {
+               regmap_read(spifc->regmap, REG_C0 + i, &data);
+
+               if (len - i >= 4) {
+                       *((u32 *)buf) = data;
+                       buf += 4;
+               } else {
+                       memcpy(buf, &data, len - i);
+                       break;
+               }
+               i += 4;
+       }
+}
+
+/**
+ * meson_spifc_fill_buffer() - copy data from memory to device buffer
+ * @spifc:     the Meson SPI device
+ * @buf:       the source buffer
+ * @len:       number of bytes to copy
+ */
+static void meson_spifc_fill_buffer(struct meson_spifc_priv *spifc,
+                                   const u8 *buf, int len)
+{
+       u32 data = 0;
+       int i = 0;
+
+       while (i < len) {
+               if (len - i >= 4)
+                       data = *(u32 *)buf;
+               else
+                       memcpy(&data, buf, len - i);
+
+               regmap_write(spifc->regmap, REG_C0 + i, data);
+
+               buf += 4;
+               i += 4;
+       }
+}
+
+/**
+ * meson_spifc_txrx() - transfer a chunk of data
+ * @spifc:     the Meson SPI device
+ * @dout:      data buffer for TX
+ * @din:       data buffer for RX
+ * @offset:    offset of the data to transfer
+ * @len:       length of the data to transfer
+ * @last_xfer: whether this is the last transfer of the message
+ * @last_chunk:        whether this is the last chunk of the transfer
+ * Return:     0 on success, a negative value on error
+ */
+static int meson_spifc_txrx(struct meson_spifc_priv *spifc,
+                           const u8 *dout, u8 *din, int offset,
+                           int len, bool last_xfer, bool last_chunk)
+{
+       bool keep_cs = true;
+       u32 data;
+       int ret;
+
+       if (dout)
+               meson_spifc_fill_buffer(spifc, dout + offset, len);
+
+       /* enable DOUT stage */
+       regmap_update_bits(spifc->regmap, REG_USER, USER_UC_MASK,
+                          USER_UC_DOUT_SEL);
+       regmap_write(spifc->regmap, REG_USER1,
+                    (8 * len - 1) << USER1_BN_UC_DOUT_SHIFT);
+
+       /* enable data input during DOUT */
+       regmap_update_bits(spifc->regmap, REG_USER, USER_DIN_EN_MS,
+                          USER_DIN_EN_MS);
+
+       if (last_chunk && last_xfer)
+               keep_cs = false;
+
+       regmap_update_bits(spifc->regmap, REG_USER4, USER4_CS_ACT,
+                          keep_cs ? USER4_CS_ACT : 0);
+
+       /* clear transition done bit */
+       regmap_update_bits(spifc->regmap, REG_SLAVE, SLAVE_TRST_DONE, 0);
+       /* start transfer */
+       regmap_update_bits(spifc->regmap, REG_CMD, CMD_USER, CMD_USER);
+
+       /* wait for the current operation to terminate */
+       ret = regmap_read_poll_timeout(spifc->regmap, REG_SLAVE, data,
+                                      (data & SLAVE_TRST_DONE),
+                                      0, 5 * CONFIG_SYS_HZ);
+
+       if (!ret && din)
+               meson_spifc_drain_buffer(spifc, din + offset, len);
+
+       return ret;
+}
+
+/**
+ * meson_spifc_xfer() - perform a single transfer
+ * @dev:       the SPI controller device
+ * @bitlen:    length of the transfer
+ * @dout:      data buffer for TX
+ * @din:       data buffer for RX
+ * @flags:     transfer flags
+ * Return:     0 on success, a negative value on error
+ */
+static int meson_spifc_xfer(struct udevice *slave, unsigned int bitlen,
+                           const void *dout, void *din, unsigned long flags)
+{
+       struct meson_spifc_priv *spifc = dev_get_priv(slave->parent);
+       int blen = bitlen / 8;
+       int len, done = 0, ret = 0;
+
+       if (bitlen % 8)
+               return -EINVAL;
+
+       debug("xfer len %d (%d) dout %p din %p\n", bitlen, blen, dout, din);
+
+       regmap_update_bits(spifc->regmap, REG_CTRL, CTRL_ENABLE_AHB, 0);
+
+       while (done < blen && !ret) {
+               len = min_t(int, blen - done, SPIFC_BUFFER_SIZE);
+               ret = meson_spifc_txrx(spifc, dout, din, done, len,
+                                      flags & SPI_XFER_END,
+                                      done + len >= blen);
+               done += len;
+       }
+
+       regmap_update_bits(spifc->regmap, REG_CTRL, CTRL_ENABLE_AHB,
+                          CTRL_ENABLE_AHB);
+
+       return ret;
+}
+
+/**
+ * meson_spifc_set_speed() - program the clock divider
+ * @dev:       the SPI controller device
+ * @speed:     desired speed in Hz
+ */
+static int meson_spifc_set_speed(struct udevice *dev, uint speed)
+{
+       struct meson_spifc_priv *spifc = dev_get_priv(dev);
+       unsigned long parent, value;
+       int n;
+
+       parent = clk_get_rate(&spifc->clk);
+       n = max_t(int, parent / speed - 1, 1);
+
+       debug("parent %lu, speed %u, n %d\n", parent, speed, n);
+
+       value = (n << CLOCK_DIV_SHIFT) & CLOCK_DIV_MASK;
+       value |= (n << CLOCK_CNT_LOW_SHIFT) & CLOCK_CNT_LOW_MASK;
+       value |= (((n + 1) / 2 - 1) << CLOCK_CNT_HIGH_SHIFT) &
+               CLOCK_CNT_HIGH_MASK;
+
+       regmap_write(spifc->regmap, REG_CLOCK, value);
+
+       return 0;
+}
+
+/**
+ * meson_spifc_set_mode() - setups the SPI bus mode
+ * @dev:       the SPI controller device
+ * @mode:      desired mode bitfield
+ * Return:     0 on success, -ENODEV on error
+ */
+static int meson_spifc_set_mode(struct udevice *dev, uint mode)
+{
+       struct meson_spifc_priv *spifc = dev_get_priv(dev);
+
+       if (mode & (SPI_CPHA | SPI_RX_QUAD | SPI_RX_DUAL |
+                   SPI_TX_QUAD | SPI_TX_DUAL))
+               return -ENODEV;
+
+       regmap_update_bits(spifc->regmap, REG_USER, USER_CLK_NOT_INV,
+                          mode & SPI_CPOL ? USER_CLK_NOT_INV : 0);
+
+       regmap_update_bits(spifc->regmap, REG_USER4, USER4_CS_POL_HIGH,
+                          mode & SPI_CS_HIGH ? USER4_CS_POL_HIGH : 0);
+
+       return 0;
+}
+
+/**
+ * meson_spifc_hw_init() - reset and initialize the SPI controller
+ * @spifc:     the Meson SPI device
+ */
+static void meson_spifc_hw_init(struct meson_spifc_priv *spifc)
+{
+       /* reset device */
+       regmap_update_bits(spifc->regmap, REG_SLAVE, SLAVE_SW_RST,
+                          SLAVE_SW_RST);
+       /* disable compatible mode */
+       regmap_update_bits(spifc->regmap, REG_USER, USER_CMP_MODE, 0);
+       /* set master mode */
+       regmap_update_bits(spifc->regmap, REG_SLAVE, SLAVE_OP_MODE, 0);
+}
+
+static const struct dm_spi_ops meson_spifc_ops = {
+       .xfer           = meson_spifc_xfer,
+       .set_speed      = meson_spifc_set_speed,
+       .set_mode       = meson_spifc_set_mode,
+};
+
+static int meson_spifc_probe(struct udevice *dev)
+{
+       struct meson_spifc_priv *priv = dev_get_priv(dev);
+       int ret;
+
+       ret = regmap_init_mem(dev_ofnode(dev), &priv->regmap);
+       if (ret)
+               return ret;
+
+       ret = clk_get_by_index(dev, 0, &priv->clk);
+       if (ret)
+               return ret;
+
+       ret = clk_enable(&priv->clk);
+       if (ret)
+               return ret;
+
+       meson_spifc_hw_init(priv);
+
+       return 0;
+}
+
+static const struct udevice_id meson_spifc_ids[] = {
+       { .compatible = "amlogic,meson-gxbb-spifc", },
+       { }
+};
+
+U_BOOT_DRIVER(meson_spifc) = {
+       .name           = "meson_spifc",
+       .id             = UCLASS_SPI,
+       .of_match       = meson_spifc_ids,
+       .ops            = &meson_spifc_ops,
+       .probe          = meson_spifc_probe,
+       .priv_auto_alloc_size = sizeof(struct meson_spifc_priv),
+};
diff --git a/drivers/spi/mtk_qspi.c b/drivers/spi/mtk_qspi.c
new file mode 100644 (file)
index 0000000..b510733
--- /dev/null
@@ -0,0 +1,359 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2018  MediaTek, Inc.
+ * Author : Guochun.Mao@mediatek.com
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <malloc.h>
+#include <spi.h>
+#include <asm/io.h>
+#include <linux/iopoll.h>
+#include <linux/ioport.h>
+
+/* Register Offset */
+struct mtk_qspi_regs {
+       u32 cmd;
+       u32 cnt;
+       u32 rdsr;
+       u32 rdata;
+       u32 radr[3];
+       u32 wdata;
+       u32 prgdata[6];
+       u32 shreg[10];
+       u32 cfg[2];
+       u32 shreg10;
+       u32 mode_mon;
+       u32 status[4];
+       u32 flash_time;
+       u32 flash_cfg;
+       u32 reserved_0[3];
+       u32 sf_time;
+       u32 pp_dw_data;
+       u32 reserved_1;
+       u32 delsel_0[2];
+       u32 intrstus;
+       u32 intren;
+       u32 reserved_2;
+       u32 cfg3;
+       u32 reserved_3;
+       u32 chksum;
+       u32 aaicmd;
+       u32 wrprot;
+       u32 radr3;
+       u32 dual;
+       u32 delsel_1[3];
+};
+
+struct mtk_qspi_platdata {
+       fdt_addr_t reg_base;
+       fdt_addr_t mem_base;
+};
+
+struct mtk_qspi_priv {
+       struct mtk_qspi_regs *regs;
+       unsigned long *mem_base;
+       u8 op;
+       u8 tx[3]; /* only record max 3 bytes paras, when it's address. */
+       u32 txlen; /* dout buffer length  - op code length */
+       u8 *rx;
+       u32 rxlen;
+};
+
+#define MTK_QSPI_CMD_POLLINGREG_US 500000
+#define MTK_QSPI_WRBUF_SIZE        256
+#define MTK_QSPI_COMMAND_ENABLE    0x30
+
+/* NOR flash controller commands */
+#define MTK_QSPI_RD_TRIGGER        BIT(0)
+#define MTK_QSPI_READSTATUS        BIT(1)
+#define MTK_QSPI_PRG_CMD           BIT(2)
+#define MTK_QSPI_WR_TRIGGER        BIT(4)
+#define MTK_QSPI_WRITESTATUS       BIT(5)
+#define MTK_QSPI_AUTOINC           BIT(7)
+
+#define MTK_QSPI_MAX_RX_TX_SHIFT   0x6
+#define MTK_QSPI_MAX_SHIFT         0x8
+
+#define MTK_QSPI_WR_BUF_ENABLE     0x1
+#define MTK_QSPI_WR_BUF_DISABLE    0x0
+
+static int mtk_qspi_execute_cmd(struct mtk_qspi_priv *priv, u8 cmd)
+{
+       u8 tmp;
+       u8 val = cmd & ~MTK_QSPI_AUTOINC;
+
+       writeb(cmd, &priv->regs->cmd);
+
+       return readb_poll_timeout(&priv->regs->cmd, tmp, !(val & tmp),
+                                 MTK_QSPI_CMD_POLLINGREG_US);
+}
+
+static int mtk_qspi_tx_rx(struct mtk_qspi_priv *priv)
+{
+       int len = 1 + priv->txlen + priv->rxlen;
+       int i, ret, idx;
+
+       if (len > MTK_QSPI_MAX_SHIFT)
+               return -ERR_INVAL;
+
+       writeb(len * 8, &priv->regs->cnt);
+
+       /* start at PRGDATA5, go down to PRGDATA0 */
+       idx = MTK_QSPI_MAX_RX_TX_SHIFT - 1;
+
+       /* opcode */
+       writeb(priv->op, &priv->regs->prgdata[idx]);
+       idx--;
+
+       /* program TX data */
+       for (i = 0; i < priv->txlen; i++, idx--)
+               writeb(priv->tx[i], &priv->regs->prgdata[idx]);
+
+       /* clear out rest of TX registers */
+       while (idx >= 0) {
+               writeb(0, &priv->regs->prgdata[idx]);
+               idx--;
+       }
+
+       ret = mtk_qspi_execute_cmd(priv, MTK_QSPI_PRG_CMD);
+       if (ret)
+               return ret;
+
+       /* restart at first RX byte */
+       idx = priv->rxlen - 1;
+
+       /* read out RX data */
+       for (i = 0; i < priv->rxlen; i++, idx--)
+               priv->rx[i] = readb(&priv->regs->shreg[idx]);
+
+       return 0;
+}
+
+static int mtk_qspi_read(struct mtk_qspi_priv *priv,
+                        u32 addr, u8 *buf, u32 len)
+{
+       memcpy(buf, (u8 *)priv->mem_base + addr, len);
+       return 0;
+}
+
+static void mtk_qspi_set_addr(struct mtk_qspi_priv *priv, u32 addr)
+{
+       int i;
+
+       for (i = 0; i < 3; i++) {
+               writeb(addr & 0xff, &priv->regs->radr[i]);
+               addr >>= 8;
+       }
+}
+
+static int mtk_qspi_write_single_byte(struct mtk_qspi_priv *priv,
+                                     u32 addr, u32 length, const u8 *data)
+{
+       int i, ret;
+
+       mtk_qspi_set_addr(priv, addr);
+
+       for (i = 0; i < length; i++) {
+               writeb(*data++, &priv->regs->wdata);
+               ret = mtk_qspi_execute_cmd(priv, MTK_QSPI_WR_TRIGGER);
+               if (ret < 0)
+                       return ret;
+       }
+       return 0;
+}
+
+static int mtk_qspi_write_buffer(struct mtk_qspi_priv *priv, u32 addr,
+                                const u8 *buf)
+{
+       int i, data;
+
+       mtk_qspi_set_addr(priv, addr);
+
+       for (i = 0; i < MTK_QSPI_WRBUF_SIZE; i += 4) {
+               data = buf[i + 3] << 24 | buf[i + 2] << 16 |
+                      buf[i + 1] << 8 | buf[i];
+               writel(data, &priv->regs->pp_dw_data);
+       }
+
+       return mtk_qspi_execute_cmd(priv, MTK_QSPI_WR_TRIGGER);
+}
+
+static int mtk_qspi_write(struct mtk_qspi_priv *priv,
+                         u32 addr, const u8 *buf, u32 len)
+{
+       int ret;
+
+       /* setting pre-fetch buffer for page program */
+       writel(MTK_QSPI_WR_BUF_ENABLE, &priv->regs->cfg[1]);
+       while (len >= MTK_QSPI_WRBUF_SIZE) {
+               ret = mtk_qspi_write_buffer(priv, addr, buf);
+               if (ret < 0)
+                       return ret;
+
+               len -= MTK_QSPI_WRBUF_SIZE;
+               addr += MTK_QSPI_WRBUF_SIZE;
+               buf += MTK_QSPI_WRBUF_SIZE;
+       }
+       /* disable pre-fetch buffer for page program */
+       writel(MTK_QSPI_WR_BUF_DISABLE, &priv->regs->cfg[1]);
+
+       if (len)
+               return mtk_qspi_write_single_byte(priv, addr, len, buf);
+
+       return 0;
+}
+
+static int mtk_qspi_claim_bus(struct udevice *dev)
+{
+       /* nothing to do */
+       return 0;
+}
+
+static int mtk_qspi_release_bus(struct udevice *dev)
+{
+       /* nothing to do */
+       return 0;
+}
+
+static int mtk_qspi_transfer(struct mtk_qspi_priv *priv, unsigned int bitlen,
+                            const void *dout, void *din, unsigned long flags)
+{
+       u32 bytes = DIV_ROUND_UP(bitlen, 8);
+       u32 addr;
+
+       if (!bytes)
+               return -ERR_INVAL;
+
+       if (dout) {
+               if (flags & SPI_XFER_BEGIN) {
+                       /* parse op code and potential paras first */
+                       priv->op = *(u8 *)dout;
+                       if (bytes > 1)
+                               memcpy(priv->tx, (u8 *)dout + 1,
+                                      bytes <= 4 ? bytes - 1 : 3);
+                       priv->txlen = bytes - 1;
+               }
+
+               if (flags == SPI_XFER_ONCE) {
+                       /* operations without receiving or sending data.
+                        * for example: erase, write flash register or write
+                        * enable...
+                        */
+                       priv->rx = NULL;
+                       priv->rxlen = 0;
+                       return mtk_qspi_tx_rx(priv);
+               }
+
+               if (flags & SPI_XFER_END) {
+                       /* here, dout should be data to be written.
+                        * and priv->tx should be filled 3Bytes address.
+                        */
+                       addr = priv->tx[0] << 16 | priv->tx[1] << 8 |
+                              priv->tx[2];
+                       return mtk_qspi_write(priv, addr, (u8 *)dout, bytes);
+               }
+       }
+
+       if (din) {
+               if (priv->txlen >= 3) {
+                       /* if run to here, priv->tx[] should be the address
+                        * where read data from,
+                        * and, din is the buf to receive data.
+                        */
+                       addr = priv->tx[0] << 16 | priv->tx[1] << 8 |
+                              priv->tx[2];
+                       return mtk_qspi_read(priv, addr, (u8 *)din, bytes);
+               }
+
+               /* should be reading flash's register */
+               priv->rx = (u8 *)din;
+               priv->rxlen = bytes;
+               return mtk_qspi_tx_rx(priv);
+       }
+
+       return 0;
+}
+
+static int mtk_qspi_xfer(struct udevice *dev, unsigned int bitlen,
+                        const void *dout, void *din, unsigned long flags)
+{
+       struct udevice *bus = dev->parent;
+       struct mtk_qspi_priv *priv = dev_get_priv(bus);
+
+       return  mtk_qspi_transfer(priv, bitlen, dout, din, flags);
+}
+
+static int mtk_qspi_set_speed(struct udevice *bus, uint speed)
+{
+       /* nothing to do */
+       return 0;
+}
+
+static int mtk_qspi_set_mode(struct udevice *bus, uint mode)
+{
+       /* nothing to do */
+       return 0;
+}
+
+static int mtk_qspi_ofdata_to_platdata(struct udevice *bus)
+{
+       struct resource res_reg, res_mem;
+       struct mtk_qspi_platdata *plat = bus->platdata;
+       int ret;
+
+       ret = dev_read_resource_byname(bus, "reg_base", &res_reg);
+       if (ret) {
+               debug("can't get reg_base resource(ret = %d)\n", ret);
+               return -ENOMEM;
+       }
+
+       ret = dev_read_resource_byname(bus, "mem_base", &res_mem);
+       if (ret) {
+               debug("can't get map_base resource(ret = %d)\n", ret);
+               return -ENOMEM;
+       }
+
+       plat->mem_base = res_mem.start;
+       plat->reg_base = res_reg.start;
+
+       return 0;
+}
+
+static int mtk_qspi_probe(struct udevice *bus)
+{
+       struct mtk_qspi_platdata *plat = dev_get_platdata(bus);
+       struct mtk_qspi_priv *priv = dev_get_priv(bus);
+
+       priv->regs = (struct mtk_qspi_regs *)plat->reg_base;
+       priv->mem_base = (unsigned long *)plat->mem_base;
+
+       writel(MTK_QSPI_COMMAND_ENABLE, &priv->regs->wrprot);
+
+       return 0;
+}
+
+static const struct dm_spi_ops mtk_qspi_ops = {
+       .claim_bus      = mtk_qspi_claim_bus,
+       .release_bus    = mtk_qspi_release_bus,
+       .xfer           = mtk_qspi_xfer,
+       .set_speed      = mtk_qspi_set_speed,
+       .set_mode       = mtk_qspi_set_mode,
+};
+
+static const struct udevice_id mtk_qspi_ids[] = {
+       { .compatible = "mediatek,mt7629-qspi" },
+       { }
+};
+
+U_BOOT_DRIVER(mtk_qspi) = {
+       .name     = "mtk_qspi",
+       .id       = UCLASS_SPI,
+       .of_match = mtk_qspi_ids,
+       .ops      = &mtk_qspi_ops,
+       .ofdata_to_platdata       = mtk_qspi_ofdata_to_platdata,
+       .platdata_auto_alloc_size = sizeof(struct mtk_qspi_platdata),
+       .priv_auto_alloc_size     = sizeof(struct mtk_qspi_priv),
+       .probe    = mtk_qspi_probe,
+};
index 0dccc38..b263690 100644 (file)
@@ -400,10 +400,6 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
        return mxc_spi_xfer_internal(mxcs, bitlen, dout, din, flags);
 }
 
-void spi_init(void)
-{
-}
-
 /*
  * Some SPI devices require active chip-select over multiple
  * transactions, we achieve this using a GPIO. Still, the SPI
index 006fe82..5065e40 100644 (file)
@@ -39,10 +39,6 @@ static inline struct mxs_spi_slave *to_mxs_slave(struct spi_slave *slave)
        return container_of(slave, struct mxs_spi_slave, slave);
 }
 
-void spi_init(void)
-{
-}
-
 int spi_cs_is_valid(unsigned int bus, unsigned int cs)
 {
        /* MXS SPI: 4 ports and 3 chip selects maximum */
index ecf54bb..c7fcf05 100644 (file)
@@ -461,11 +461,6 @@ static inline struct omap3_spi_priv *to_omap3_spi(struct spi_slave *slave)
        return container_of(slave, struct omap3_spi_priv, slave);
 }
 
-void spi_init(void)
-{
-       /* do nothing */
-}
-
 void spi_free_slave(struct spi_slave *slave)
 {
        struct omap3_spi_priv *priv = to_omap3_spi(slave);
index 86b71d2..32bb8c8 100644 (file)
@@ -9,16 +9,11 @@
  * Driver for ARM PL022 SPI Controller.
  */
 
-#include <asm/io.h>
 #include <clk.h>
 #include <common.h>
 #include <dm.h>
-#include <dm/platform_data/pl022_spi.h>
-#include <fdtdec.h>
-#include <linux/bitops.h>
-#include <linux/bug.h>
+#include <dm/platform_data/spi_pl022.h>
 #include <linux/io.h>
-#include <linux/kernel.h>
 #include <spi.h>
 
 #define SSP_CR0                0x000
 
 struct pl022_spi_slave {
        void *base;
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-       struct clk clk;
-#else
        unsigned int freq;
-#endif
 };
 
 /*
@@ -96,30 +87,13 @@ static int pl022_is_supported(struct pl022_spi_slave *ps)
        return 0;
 }
 
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-static int pl022_spi_ofdata_to_platdata(struct udevice *bus)
-{
-       struct pl022_spi_pdata *plat = bus->platdata;
-       const void *fdt = gd->fdt_blob;
-       int node = dev_of_offset(bus);
-
-       plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size);
-
-       return clk_get_by_index(bus, 0, &plat->clk);
-}
-#endif
-
 static int pl022_spi_probe(struct udevice *bus)
 {
        struct pl022_spi_pdata *plat = dev_get_platdata(bus);
        struct pl022_spi_slave *ps = dev_get_priv(bus);
 
        ps->base = ioremap(plat->addr, plat->size);
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-       ps->clk = plat->clk;
-#else
        ps->freq = plat->freq;
-#endif
 
        /* Check the PL022 version */
        if (!pl022_is_supported(ps))
@@ -240,11 +214,7 @@ static int pl022_spi_set_speed(struct udevice *bus, uint speed)
        u16 scr = SSP_SCR_MIN, cr0 = 0, cpsr = SSP_CPSR_MIN, best_scr = scr,
            best_cpsr = cpsr;
        u32 min, max, best_freq = 0, tmp;
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-       u32 rate = clk_get_rate(&ps->clk);
-#else
        u32 rate = ps->freq;
-#endif
        bool found = false;
 
        max = spi_rate(rate, SSP_CPSR_MIN, SSP_SCR_MIN);
@@ -316,6 +286,25 @@ static const struct dm_spi_ops pl022_spi_ops = {
 };
 
 #if !CONFIG_IS_ENABLED(OF_PLATDATA)
+static int pl022_spi_ofdata_to_platdata(struct udevice *bus)
+{
+       struct pl022_spi_pdata *plat = bus->platdata;
+       const void *fdt = gd->fdt_blob;
+       int node = dev_of_offset(bus);
+       struct clk clkdev;
+       int ret;
+
+       plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size);
+
+       ret = clk_get_by_index(bus, 0, &clkdev);
+       if (ret)
+               return ret;
+
+       plat->freq = clk_get_rate(&clkdev);
+
+       return 0;
+}
+
 static const struct udevice_id pl022_spi_ids[] = {
        { .compatible = "arm,pl022-spi" },
        { }
@@ -327,11 +316,9 @@ U_BOOT_DRIVER(pl022_spi) = {
        .id     = UCLASS_SPI,
 #if !CONFIG_IS_ENABLED(OF_PLATDATA)
        .of_match = pl022_spi_ids,
-#endif
-       .ops    = &pl022_spi_ops,
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
        .ofdata_to_platdata = pl022_spi_ofdata_to_platdata,
 #endif
+       .ops    = &pl022_spi_ops,
        .platdata_auto_alloc_size = sizeof(struct pl022_spi_pdata),
        .priv_auto_alloc_size = sizeof(struct pl022_spi_slave),
        .probe  = pl022_spi_probe,
index 64dfd74..5ae203d 100644 (file)
@@ -247,11 +247,6 @@ void spi_cs_deactivate(struct spi_slave *slave)
        sh_qspi_cs_deactivate(ss);
 }
 
-void spi_init(void)
-{
-       /* nothing to do */
-}
-
 struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
                unsigned int max_hz, unsigned int mode)
 {
index bc2bd63..c58fd0e 100644 (file)
@@ -66,10 +66,6 @@ static int write_fifo_empty_wait(struct sh_spi *ss)
        return 0;
 }
 
-void spi_init(void)
-{
-}
-
 static void sh_spi_set_cs(struct sh_spi *ss, unsigned int cs)
 {
        unsigned long val = 0;
index 0aac0c0..cc5ab5f 100644 (file)
@@ -36,13 +36,6 @@ static inline struct soft_spi_slave *to_soft_spi(struct spi_slave *slave)
 /*                         Public Functions                            */
 /*=====================================================================*/
 
-/*-----------------------------------------------------------------------
- * Initialization
- */
-void spi_init (void)
-{
-}
-
 struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
                unsigned int max_hz, unsigned int mode)
 {
index 7f6d418..38e2a7e 100644 (file)
@@ -84,7 +84,13 @@ int sandbox_sysreset_get_status(struct udevice *dev, char *buf, int size)
 
 int sandbox_sysreset_get_last(struct udevice *dev)
 {
-       return SYSRESET_COLD;
+       struct sandbox_state *state = state_get_current();
+
+       /*
+        * The first phase is a power reset, after that we assume we don't
+        * know.
+        */
+       return state->jumped_fname ? SYSRESET_WARM : SYSRESET_POWER;
 }
 
 static struct sysreset_ops sandbox_sysreset_ops = {
index c13a907..bd733f5 100644 (file)
@@ -78,7 +78,7 @@ static int enable_sequence(struct udevice *dev, int seq)
                        ret = regulator_set_enable(priv->reg, true);
                        if (ret) {
                                log_debug("Cannot enable regulator for PWM '%s'\n",
-                                         __func__, dev->name);
+                                         dev->name);
                                return log_ret(ret);
                        }
                        mdelay(120);
index b6551b6..f307cf2 100644 (file)
@@ -226,7 +226,9 @@ static int video_post_probe(struct udevice *dev)
 
        /* Set up the line and display size */
        priv->fb = map_sysmem(plat->base, plat->size);
-       priv->line_length = priv->xsize * VNBYTES(priv->bpix);
+       if (!priv->line_length)
+               priv->line_length = priv->xsize * VNBYTES(priv->bpix);
+
        priv->fb_size = priv->line_length * priv->ysize;
 
        /* Set up colors  */
index 1377e19..2898b0b 100644 (file)
@@ -7,6 +7,7 @@
 #include <bmp_layout.h>
 #include <dm.h>
 #include <mapmem.h>
+#include <splash.h>
 #include <video.h>
 #include <watchdog.h>
 #include <asm/unaligned.h>
@@ -140,8 +141,6 @@ __weak void fb_put_word(uchar **fb, uchar **from)
 }
 #endif /* CONFIG_BMP_16BPP */
 
-#define BMP_ALIGN_CENTER       0x7fff
-
 /**
  * video_splash_align_axis() - Align a single coordinate
  *
index cb41b68..042b3b5 100644 (file)
@@ -84,10 +84,6 @@ static int w1_enumerate(struct udevice *bus)
                        rn |= (tmp64 << i);
                }
 
-               /* last device or error, aborting here */
-               if ((triplet_ret & 0x03) == 0x03)
-                       last_device = true;
-
                if ((triplet_ret & 0x03) != 0x03) {
                        if (desc_bit == last_zero || last_zero < 0) {
                                last_device = 1;
index 2e14aba..b7bd243 100644 (file)
@@ -126,8 +126,6 @@ int atmel_df_pow2(int argc, char * const argv[])
                return 1;
        }
 
-       spi_init();
-
        while (1) {
                struct spi_slave *slave;
                char *line, *p;
index 4bc3030..ac8913e 100644 (file)
@@ -571,6 +571,17 @@ static int get_fs_info(fsdata *mydata)
                                mydata->sect_size, cur_part_info.blksz);
                return -1;
        }
+       if (mydata->clust_size == 0) {
+               printf("Error: FAT cluster size not set\n");
+               return -1;
+       }
+       if ((unsigned int)mydata->clust_size * mydata->sect_size >
+           MAX_CLUSTSIZE) {
+               printf("Error: FAT cluster size too big (cs=%u, max=%u)\n",
+                      (unsigned int)mydata->clust_size * mydata->sect_size,
+                      MAX_CLUSTSIZE);
+               return -1;
+       }
 
        if (mydata->fatsize == 32) {
                mydata->data_begin = mydata->rootdir_sect -
@@ -810,6 +821,9 @@ static dir_entry *extract_vfat_name(fat_itr *itr)
 
                slot2str((dir_slot *)dent, buf, &idx);
 
+               if (n + idx >= sizeof(itr->l_name))
+                       return NULL;
+
                /* shift accumulated long-name up and copy new part in: */
                memmove(itr->l_name + idx, itr->l_name, n);
                memcpy(itr->l_name, buf, idx);
index 5416041..c15050e 100644 (file)
 #endif
 
 #if !defined(CONFIG_CMD_SPI) || defined(CONFIG_DM_SPI)
-       EXPORT_FUNC(dummy, void, spi_init, void)
        EXPORT_FUNC(dummy, void, spi_setup_slave, void)
        EXPORT_FUNC(dummy, void, spi_free_slave, void)
 #else
-       EXPORT_FUNC(spi_init, void, spi_init, void)
        EXPORT_FUNC(spi_setup_slave, struct spi_slave *, spi_setup_slave,
                    unsigned int, unsigned int, unsigned int, unsigned int)
        EXPORT_FUNC(spi_free_slave, void, spi_free_slave, struct spi_slave *)
index a8e879e..657cc40 100644 (file)
@@ -287,13 +287,6 @@ int  eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned c
 # define CONFIG_SYS_DEF_EEPROM_ADDR CONFIG_SYS_I2C_EEPROM_ADDR
 #endif
 
-#if defined(CONFIG_MPC8XX_SPI)
-extern void spi_init_f (void);
-extern void spi_init_r (void);
-extern ssize_t spi_read         (uchar *, int, uchar *, int);
-extern ssize_t spi_write (uchar *, int, uchar *, int);
-#endif
-
 /* $(BOARD)/$(BOARD).c */
 int board_early_init_f (void);
 int board_fix_fdt (void *rw_fdt_blob); /* manipulate the U-Boot fdt before its relocation */
@@ -357,6 +350,8 @@ void smp_set_core_boot_addr(unsigned long addr, int corenr);
 void smp_kick_all_cpus(void);
 
 /* $(CPU)/serial.c */
+struct serial_device_info;
+
 int    serial_init   (void);
 void   serial_setbrg (void);
 void   serial_putc   (const char);
@@ -364,7 +359,9 @@ void        serial_putc_raw(const char);
 void   serial_puts   (const char *);
 int    serial_getc   (void);
 int    serial_tstc   (void);
+int    serial_getconfig(uint *config);
 int    serial_setconfig(uint config);
+int    serial_getinfo(struct serial_device_info *info);
 
 /* $(CPU)/speed.c */
 int    get_clocks (void);
index 11cb395..83d7745 100644 (file)
 
 /* DSPI and Serial Flash */
 #define CONFIG_CF_DSPI
-#define CONFIG_HARD_SPI
 #define CONFIG_SYS_SBFHDR_SIZE         0x7
 #ifdef CONFIG_CMD_SPI
 #      define CONFIG_SYS_DSPI_CS2
index f08896e..4b8ef38 100644 (file)
 /* DSPI and Serial Flash */
 #define CONFIG_CF_DSPI
 #define CONFIG_SERIAL_FLASH
-#define CONFIG_HARD_SPI
 #define CONFIG_SYS_SBFHDR_SIZE         0x7
 #ifdef CONFIG_CMD_SPI
 
index 16becbd..87cdbae 100644 (file)
 /* DSPI and Serial Flash */
 #define CONFIG_CF_DSPI
 #define CONFIG_SERIAL_FLASH
-#define CONFIG_HARD_SPI
 #define CONFIG_SYS_SBFHDR_SIZE         0x7
 #ifdef CONFIG_CMD_SPI
 
index 99b60d5..d41b7c4 100644 (file)
 
 /* DSPI and Serial Flash */
 #define CONFIG_CF_DSPI
-#define CONFIG_HARD_SPI
 #define CONFIG_SYS_SBFHDR_SIZE         0x13
 #ifdef CONFIG_CMD_SPI
 
index 524a10f..86a1233 100644 (file)
 #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
 #define CONFIG_SYS_EEPROM_BUS_NUM      1
 
-/*
- * eSPI - Enhanced SPI
- */
-#define CONFIG_HARD_SPI
-
 #if defined(CONFIG_SPI_FLASH)
 #define CONFIG_SF_DEFAULT_SPEED        10000000
 #define CONFIG_SF_DEFAULT_MODE 0
index c9ed70c..eeb19a9 100644 (file)
 #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
 #define CONFIG_SYS_EEPROM_BUS_NUM      1
 
-/*
- * eSPI - Enhanced SPI
- */
-
-#define CONFIG_HARD_SPI
-
 #define CONFIG_SF_DEFAULT_SPEED                10000000
 #define CONFIG_SF_DEFAULT_MODE         0
 
index 423ecd7..1bbe9d9 100644 (file)
 #define CONFIG_SYS_I2C_NCT72_ADDR      0x4C
 #define CONFIG_SYS_I2C_IDT6V49205B     0x69
 
-/*
- * eSPI - Enhanced SPI
- */
-#define CONFIG_HARD_SPI
-
 #define CONFIG_SF_DEFAULT_SPEED                10000000
 #define CONFIG_SF_DEFAULT_MODE         SPI_MODE_0
 
index cc6a7bf..3f7f379 100644 (file)
@@ -39,8 +39,7 @@
 #define CONFIG_SYS_CLK_FREQ    RMOBILE_XTAL_CLK
 
 #define CONFIG_EXTRA_ENV_SETTINGS      \
-       "fdt_high=0xffffffff\0"         \
-       "initrd_high=0xffffffff\0"
+       "bootm_size=0x10000000\0"
 
 /* SPL support */
 #define CONFIG_SPL_TEXT_BASE           0xe6300000
index 4adcd95..1908d35 100644 (file)
 #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2
 
 #ifndef CONFIG_TRAILBLAZER
-/*
- * eSPI - Enhanced SPI
- */
-#define CONFIG_HARD_SPI
 
 #define CONFIG_SF_DEFAULT_SPEED                10000000
 #define CONFIG_SF_DEFAULT_MODE         0
index 36ac88a..8f0e378 100644 (file)
@@ -35,8 +35,7 @@
 #define CONFIG_SYS_CLK_FREQ    RMOBILE_XTAL_CLK
 
 #define CONFIG_EXTRA_ENV_SETTINGS      \
-       "fdt_high=0xffffffff\0"         \
-       "initrd_high=0xffffffff\0"
+       "bootm_size=0x10000000\0"
 
 /* SPL support */
 #define CONFIG_SPL_TEXT_BASE           0xe6300000
index 28124dd..7e4c497 100644 (file)
  */
 #define CONFIG_TSEC1
 #define CONFIG_TSEC2
-#define CONFIG_HARD_SPI
 
 /*
  * NOR FLASH setup
 #define CONFIG_SYS_I2C_RTC_ADDR        0x51
 
 /*
- * SPI setup
- */
-#ifdef CONFIG_HARD_SPI
-#define CONFIG_SYS_GPIO1_PRELIM
-#define CONFIG_SYS_GPIO1_DIR           0x00000001
-#define CONFIG_SYS_GPIO1_DAT           0x00000001
-#endif
-
-/*
  * Ethernet setup
  */
 #ifdef CONFIG_TSEC1
index ef26a14..33c8bd4 100644 (file)
@@ -35,8 +35,7 @@
 #define CONFIG_SYS_CLK_FREQ    RMOBILE_XTAL_CLK
 
 #define CONFIG_EXTRA_ENV_SETTINGS      \
-       "fdt_high=0xffffffff\0"         \
-       "initrd_high=0xffffffff\0"
+       "bootm_size=0x10000000\0"
 
 /* SPL support */
 #define CONFIG_SPL_TEXT_BASE           0xe6300000
index 08498c6..89c5d01 100644 (file)
@@ -36,8 +36,7 @@
 #define CONFIG_SYS_CLK_FREQ    RMOBILE_XTAL_CLK
 
 #define CONFIG_EXTRA_ENV_SETTINGS      \
-       "fdt_high=0xffffffff\0"         \
-       "initrd_high=0xffffffff\0"
+       "bootm_size=0x10000000\0"
 
 /* SPL support */
 #define CONFIG_SPL_TEXT_BASE           0xe6300000
index 7d84d16..4765764 100644 (file)
@@ -43,7 +43,6 @@
 #define CONFIG_MXC_UART
 #define CONFIG_MXC_UART_BASE   UART1_BASE
 
-#define CONFIG_HARD_SPI
 #define CONFIG_DEFAULT_SPI_BUS 1
 #define CONFIG_DEFAULT_SPI_MODE        (SPI_MODE_0 | SPI_CS_HIGH)
 
index 9e59e7a..4bb3621 100644 (file)
 
 /* SPI */
 #ifdef CONFIG_CMD_SPI
-#define CONFIG_HARD_SPI
 #define CONFIG_SPI_HALF_DUPLEX
 #endif
 
index 9465fb4..459ecf3 100644 (file)
 #define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3
 #define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 5
 
-/*
- * eSPI - Enhanced SPI
- */
-#define CONFIG_HARD_SPI
-
 #if defined(CONFIG_SPI_FLASH)
 #define CONFIG_SF_DEFAULT_SPEED        10000000
 #define CONFIG_SF_DEFAULT_MODE 0
index d018c22..4f48370 100644 (file)
@@ -214,11 +214,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
 #define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3
 #define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 5
 
-/*
- * eSPI - Enhanced SPI
- */
-#define CONFIG_HARD_SPI
-
 #if defined(CONFIG_PCI)
 /*
  * General PCI
index e56dc3f..9950f80 100644 (file)
@@ -40,8 +40,7 @@
 #define CONFIG_SYS_CLK_FREQ    RMOBILE_XTAL_CLK
 
 #define CONFIG_EXTRA_ENV_SETTINGS      \
-       "fdt_high=0xffffffff\0"         \
-       "initrd_high=0xffffffff\0"
+       "bootm_size=0x10000000\0"
 
 /* SPL support */
 #define CONFIG_SPL_TEXT_BASE           0xe6300000
index 435d108..6c2fa6a 100644 (file)
@@ -59,8 +59,7 @@
 #define CONFIG_ENV_SIZE_REDUND (CONFIG_ENV_SIZE)
 
 #define CONFIG_EXTRA_ENV_SETTINGS      \
-       "fdt_high=0xffffffffffffffff\0" \
-       "initrd_high=0xffffffffffffffff\0"
+       "bootm_size=0x10000000\0"
 
 #define CONFIG_BOOTCOMMAND     \
        "tftp 0x48080000 Image; " \
diff --git a/include/configs/rock960_rk3399.h b/include/configs/rock960_rk3399.h
new file mode 100644 (file)
index 0000000..746d24c
--- /dev/null
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2018 Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+ */
+
+#ifndef __ROCK960_RK3399_H
+#define __ROCK960_RK3399_H
+
+#include <configs/rk3399_common.h>
+
+#define CONFIG_SYS_MMC_ENV_DEV         1
+
+#define SDRAM_BANK_SIZE                        (2UL << 30)
+
+#endif
index a94928b..112806c 100644 (file)
@@ -40,8 +40,7 @@
 #define CONFIG_SYS_CLK_FREQ    RMOBILE_XTAL_CLK
 
 #define CONFIG_EXTRA_ENV_SETTINGS      \
-       "fdt_high=0xffffffff\0"         \
-       "initrd_high=0xffffffff\0"
+       "bootm_size=0x10000000\0"
 
 /* SPL support */
 #define CONFIG_SPL_TEXT_BASE           0xe6300000
index c408db8..33ddc67 100644 (file)
@@ -66,7 +66,6 @@
 #define CONFIG_CF_DSPI
 #define CONFIG_SF_DEFAULT_SPEED                50000000
 #define CONFIG_SERIAL_FLASH
-#define CONFIG_HARD_SPI
 #define CONFIG_ENV_SPI_BUS             0
 #define CONFIG_ENV_SPI_CS              1
 
index b72b565..93d9805 100644 (file)
@@ -44,8 +44,7 @@
 #define CONFIG_SYS_CLK_FREQ    RMOBILE_XTAL_CLK
 
 #define CONFIG_EXTRA_ENV_SETTINGS      \
-       "fdt_high=0xffffffff\0"         \
-       "initrd_high=0xffffffff\0"
+       "bootm_size=0x10000000\0"
 
 /* SPL support */
 #define CONFIG_SPL_TEXT_BASE           0xe6300000
index 956f779..4e274bd 100644 (file)
 #define CONFIG_MXC_UART_BASE   UART1_BASE
 
 /*
- * SPI Configs
- * */
-#define CONFIG_HARD_SPI /* puts SPI: ready */
-
-/*
  * MMC Configs
  * */
 #define CONFIG_SYS_FSL_ESDHC_ADDR      MMC_SDHC1_BASE_ADDR
index 49a6ffd..c171d9b 100644 (file)
@@ -56,6 +56,19 @@ void *devfdt_remap_addr(struct udevice *dev);
 void *devfdt_remap_addr_index(struct udevice *dev, int index);
 
 /**
+ * devfdt_remap_addr_name() - Get the reg property of a device, indexed by
+ *                            name, as a memory-mapped I/O pointer
+ * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
+ *       'reg-names' property providing named-based identification. @index
+ *       indicates the value to search for in 'reg-names'.
+ *
+ * @dev: Pointer to a device
+ *
+ * @return Pointer to addr, or NULL if there is no such property
+ */
+void *devfdt_remap_addr_name(struct udevice *dev, const char *name);
+
+/**
  * devfdt_map_physmem() - Read device address from reg property of the
  *                     device node and map the address into CPU address
  *                     space.
similarity index 64%
rename from include/dm/platform_data/pl022_spi.h
rename to include/dm/platform_data/spi_pl022.h
index 77fe6da..63a58ee 100644 (file)
@@ -7,22 +7,15 @@
  * in ofdata_to_platdata.
  */
 
-#ifndef __PL022_SPI_H__
-#define __PL022_SPI_H__
+#ifndef __spi_pl022_h
+#define __spi_pl022_h
 
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-#include <clk.h>
-#endif
 #include <fdtdec.h>
 
 struct pl022_spi_pdata {
        fdt_addr_t addr;
        fdt_size_t size;
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-       struct clk clk;
-#else
        unsigned int freq;
-#endif
 };
 
-#endif
+#endif /* __spi_pl022_h */
index a27b855..efcbee1 100644 (file)
@@ -125,6 +125,31 @@ fdt_addr_t dev_read_addr_index(struct udevice *dev, int index);
 void *dev_remap_addr_index(struct udevice *dev, int index);
 
 /**
+ * dev_read_addr_name() - Get the reg property of a device, indexed by name
+ *
+ * @dev: Device to read from
+ * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
+ *       'reg-names' property providing named-based identification. @index
+ *       indicates the value to search for in 'reg-names'.
+ *
+ * @return address or FDT_ADDR_T_NONE if not found
+ */
+fdt_addr_t dev_read_addr_name(struct udevice *dev, const char* name);
+
+/**
+ * dev_remap_addr_name() - Get the reg property of a device, indexed by name,
+ *                         as a memory-mapped I/O pointer
+ *
+ * @dev: Device to read from
+ * @name: the 'reg' property can hold a list of <addr, size> pairs, with the
+ *       'reg-names' property providing named-based identification. @index
+ *       indicates the value to search for in 'reg-names'.
+ *
+ * @return pointer or NULL if not found
+ */
+void *dev_remap_addr_name(struct udevice *dev, const char* name);
+
+/**
  * dev_read_addr() - Get the reg property of a device
  *
  * @dev: Device to read from
@@ -494,6 +519,12 @@ static inline fdt_addr_t dev_read_addr_index(struct udevice *dev, int index)
        return devfdt_get_addr_index(dev, index);
 }
 
+static inline fdt_addr_t dev_read_addr_name(struct udevice *dev,
+                                           const char *name)
+{
+       return devfdt_get_addr_name(dev, name);
+}
+
 static inline fdt_addr_t dev_read_addr(struct udevice *dev)
 {
        return devfdt_get_addr(dev);
@@ -514,6 +545,11 @@ static inline void *dev_remap_addr_index(struct udevice *dev, int index)
        return devfdt_remap_addr_index(dev, index);
 }
 
+static inline void *dev_remap_addr_name(struct udevice *dev, const char *name)
+{
+       return devfdt_remap_addr_name(dev, name);
+}
+
 static inline fdt_addr_t dev_read_addr_size(struct udevice *dev,
                                            const char *propname,
                                            fdt_size_t *sizep)
index a5fcb69..037af04 100644 (file)
@@ -29,6 +29,7 @@ enum uclass_id {
        /* U-Boot uclasses start here - in alphabetical order */
        UCLASS_ADC,             /* Analog-to-digital converter */
        UCLASS_AHCI,            /* SATA disk controller */
+       UCLASS_AXI,             /* AXI bus */
        UCLASS_BLK,             /* Block device */
        UCLASS_BOARD,           /* Device information from hardware */
        UCLASS_CLK,             /* Clock source, e.g. used by peripherals */
@@ -38,15 +39,15 @@ enum uclass_id {
        UCLASS_DMA,             /* Direct Memory Access */
        UCLASS_EFI,             /* EFI managed devices */
        UCLASS_ETH,             /* Ethernet device */
+       UCLASS_FIRMWARE,        /* Firmware */
        UCLASS_FS_FIRMWARE_LOADER,              /* Generic loader */
        UCLASS_GPIO,            /* Bank of general-purpose I/O pins */
-       UCLASS_FIRMWARE,        /* Firmware */
+       UCLASS_HWSPINLOCK,      /* Hardware semaphores */
        UCLASS_I2C,             /* I2C bus */
        UCLASS_I2C_EEPROM,      /* I2C EEPROM device */
        UCLASS_I2C_GENERIC,     /* Generic I2C device */
        UCLASS_I2C_MUX,         /* I2C multiplexer */
        UCLASS_IDE,             /* IDE device */
-       UCLASS_AXI,             /* AXI bus */
        UCLASS_IRQ,             /* Interrupt controller */
        UCLASS_KEYBOARD,        /* Keyboard input device */
        UCLASS_LED,             /* Light-emitting diode (LED) */
@@ -68,8 +69,8 @@ enum uclass_id {
        UCLASS_PINCONFIG,       /* Pin configuration node device */
        UCLASS_PINCTRL,         /* Pinctrl (pin muxing/configuration) device */
        UCLASS_PMIC,            /* PMIC I/O device */
-       UCLASS_PWM,             /* Pulse-width modulator */
        UCLASS_POWER_DOMAIN,    /* (SoC) Power domains */
+       UCLASS_PWM,             /* Pulse-width modulator */
        UCLASS_PWRSEQ,          /* Power sequence device */
        UCLASS_RAM,             /* RAM controller */
        UCLASS_REGULATOR,       /* Regulator device */
@@ -81,9 +82,9 @@ enum uclass_id {
        UCLASS_SIMPLE_BUS,      /* Bus with child devices */
        UCLASS_SMEM,            /* Shared memory interface */
        UCLASS_SPI,             /* SPI bus */
-       UCLASS_SPMI,            /* System Power Management Interface bus */
        UCLASS_SPI_FLASH,       /* SPI flash */
        UCLASS_SPI_GENERIC,     /* Generic SPI flash target */
+       UCLASS_SPMI,            /* System Power Management Interface bus */
        UCLASS_SYSCON,          /* System configuration device */
        UCLASS_SYSRESET,        /* System reset device */
        UCLASS_TEE,             /* Trusted Execution Environment device */
diff --git a/include/dma-uclass.h b/include/dma-uclass.h
new file mode 100644 (file)
index 0000000..31b43fb
--- /dev/null
@@ -0,0 +1,128 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2018 Álvaro Fernández Rojas <noltari@gmail.com>
+ * Copyright (C) 2015 - 2018 Texas Instruments Incorporated <www.ti.com>
+ * Written by Mugunthan V N <mugunthanvnm@ti.com>
+ *
+ */
+
+#ifndef _DMA_UCLASS_H
+#define _DMA_UCLASS_H
+
+/* See dma.h for background documentation. */
+
+#include <dma.h>
+
+struct ofnode_phandle_args;
+
+/*
+ * struct dma_ops - Driver model DMA operations
+ *
+ * The uclass interface is implemented by all DMA devices which use
+ * driver model.
+ */
+struct dma_ops {
+#ifdef CONFIG_DMA_CHANNELS
+       /**
+        * of_xlate - Translate a client's device-tree (OF) DMA specifier.
+        *
+        * The DMA core calls this function as the first step in implementing
+        * a client's dma_get_by_*() call.
+        *
+        * If this function pointer is set to NULL, the DMA core will use a
+        * default implementation, which assumes #dma-cells = <1>, and that
+        * the DT cell contains a simple integer DMA Channel.
+        *
+        * At present, the DMA API solely supports device-tree. If this
+        * changes, other xxx_xlate() functions may be added to support those
+        * other mechanisms.
+        *
+        * @dma: The dma struct to hold the translation result.
+        * @args:       The dma specifier values from device tree.
+        * @return 0 if OK, or a negative error code.
+        */
+       int (*of_xlate)(struct dma *dma,
+                       struct ofnode_phandle_args *args);
+       /**
+        * request - Request a translated DMA.
+        *
+        * The DMA core calls this function as the second step in
+        * implementing a client's dma_get_by_*() call, following a successful
+        * xxx_xlate() call, or as the only step in implementing a client's
+        * dma_request() call.
+        *
+        * @dma: The DMA struct to request; this has been filled in by
+        *   a previoux xxx_xlate() function call, or by the caller of
+        *   dma_request().
+        * @return 0 if OK, or a negative error code.
+        */
+       int (*request)(struct dma *dma);
+       /**
+        * free - Free a previously requested dma.
+        *
+        * This is the implementation of the client dma_free() API.
+        *
+        * @dma: The DMA to free.
+        * @return 0 if OK, or a negative error code.
+        */
+       int (*free)(struct dma *dma);
+       /**
+        * enable() - Enable a DMA Channel.
+        *
+        * @dma: The DMA Channel to manipulate.
+        * @return zero on success, or -ve error code.
+        */
+       int (*enable)(struct dma *dma);
+       /**
+        * disable() - Disable a DMA Channel.
+        *
+        * @dma: The DMA Channel to manipulate.
+        * @return zero on success, or -ve error code.
+        */
+       int (*disable)(struct dma *dma);
+       /**
+        * prepare_rcv_buf() - Prepare/Add receive DMA buffer.
+        *
+        * @dma: The DMA Channel to manipulate.
+        * @dst: The receive buffer pointer.
+        * @size: The receive buffer size
+        * @return zero on success, or -ve error code.
+        */
+       int (*prepare_rcv_buf)(struct dma *dma, void *dst, size_t size);
+       /**
+        * receive() - Receive a DMA transfer.
+        *
+        * @dma: The DMA Channel to manipulate.
+        * @dst: The destination pointer.
+        * @metadata: DMA driver's specific data
+        * @return zero on success, or -ve error code.
+        */
+       int (*receive)(struct dma *dma, void **dst, void *metadata);
+       /**
+        * send() - Send a DMA transfer.
+        *
+        * @dma: The DMA Channel to manipulate.
+        * @src: The source pointer.
+        * @len: Length of the data to be sent (number of bytes).
+        * @metadata: DMA driver's specific data
+        * @return zero on success, or -ve error code.
+        */
+       int (*send)(struct dma *dma, void *src, size_t len, void *metadata);
+#endif /* CONFIG_DMA_CHANNELS */
+       /**
+        * transfer() - Issue a DMA transfer. The implementation must
+        *   wait until the transfer is done.
+        *
+        * @dev: The DMA device
+        * @direction: direction of data transfer (should be one from
+        *   enum dma_direction)
+        * @dst: The destination pointer.
+        * @src: The source pointer.
+        * @len: Length of the data to be copied (number of bytes).
+        * @return zero on success, or -ve error code.
+        */
+       int (*transfer)(struct udevice *dev, int direction, void *dst,
+                       void *src, size_t len);
+};
+
+#endif /* _DMA_UCLASS_H */
index 50e9652..d1c3d0d 100644 (file)
@@ -1,12 +1,17 @@
 /* SPDX-License-Identifier: GPL-2.0+ */
 /*
- * (C) Copyright 2015
- *     Texas Instruments Incorporated, <www.ti.com>
+ * Copyright (C) 2018 Álvaro Fernández Rojas <noltari@gmail.com>
+ * Copyright (C) 2015 - 2018 Texas Instruments Incorporated <www.ti.com>
+ * Written by Mugunthan V N <mugunthanvnm@ti.com>
+ *
  */
 
 #ifndef _DMA_H_
 #define _DMA_H_
 
+#include <linux/errno.h>
+#include <linux/types.h>
+
 /*
  * enum dma_direction - dma transfer direction indicator
  * @DMA_MEM_TO_MEM: Memcpy mode
@@ -27,28 +32,6 @@ enum dma_direction {
 #define DMA_SUPPORTS_DEV_TO_DEV        BIT(3)
 
 /*
- * struct dma_ops - Driver model DMA operations
- *
- * The uclass interface is implemented by all DMA devices which use
- * driver model.
- */
-struct dma_ops {
-       /*
-        * Get the current timer count
-        *
-        * @dev: The DMA device
-        * @direction: direction of data transfer should be one from
-                      enum dma_direction
-        * @dst: Destination pointer
-        * @src: Source pointer
-        * @len: Length of the data to be copied.
-        * @return: 0 if OK, -ve on error
-        */
-       int (*transfer)(struct udevice *dev, int direction, void *dst,
-                       void *src, size_t len);
-};
-
-/*
  * struct dma_dev_priv - information about a device used by the uclass
  *
  * @supported: mode of transfers that DMA can support, should be
@@ -58,6 +41,257 @@ struct dma_dev_priv {
        u32 supported;
 };
 
+#ifdef CONFIG_DMA_CHANNELS
+/**
+ * A DMA is a feature of computer systems that allows certain hardware
+ * subsystems to access main system memory, independent of the CPU.
+ * DMA channels are typically generated externally to the HW module
+ * consuming them, by an entity this API calls a DMA provider. This API
+ * provides a standard means for drivers to enable and disable DMAs, and to
+ * copy, send and receive data using DMA.
+ *
+ * A driver that implements UCLASS_DMA is a DMA provider. A provider will
+ * often implement multiple separate DMAs, since the hardware it manages
+ * often has this capability. dma_uclass.h describes the interface which
+ * DMA providers must implement.
+ *
+ * DMA consumers/clients are the HW modules driven by the DMA channels. This
+ * header file describes the API used by drivers for those HW modules.
+ *
+ * DMA consumer DMA_MEM_TO_DEV (transmit) usage example (based on networking).
+ * Note. dma_send() is sync operation always -  it'll start transfer and will
+ * poll for it to complete:
+ *     - get/request dma channel
+ *     struct dma dma_tx;
+ *     ret = dma_get_by_name(common->dev, "tx0", &dma_tx);
+ *     if (ret) ...
+ *
+ *     - enable dma channel
+ *     ret = dma_enable(&dma_tx);
+ *     if (ret) ...
+ *
+ *     - dma transmit DMA_MEM_TO_DEV.
+ *     struct ti_drv_packet_data packet_data;
+ *
+ *     packet_data.opt1 = val1;
+ *     packet_data.opt2 = val2;
+ *     ret = dma_send(&dma_tx, packet, length, &packet_data);
+ *     if (ret) ..
+ *
+ * DMA consumer DMA_DEV_TO_MEM (receive) usage example (based on networking).
+ * Note. dma_receive() is sync operation always - it'll start transfer
+ * (if required) and will poll for it to complete (or for any previously
+ * configured dev2mem transfer to complete):
+ *     - get/request dma channel
+ *     struct dma dma_rx;
+ *     ret = dma_get_by_name(common->dev, "rx0", &dma_rx);
+ *     if (ret) ...
+ *
+ *     - enable dma channel
+ *     ret = dma_enable(&dma_rx);
+ *     if (ret) ...
+ *
+ *     - dma receive DMA_DEV_TO_MEM.
+ *     struct ti_drv_packet_data packet_data;
+ *
+ *     len = dma_receive(&dma_rx, (void **)packet, &packet_data);
+ *     if (ret < 0) ...
+ *
+ * DMA consumer DMA_DEV_TO_MEM (receive) zero-copy usage example (based on
+ * networking). Networking subsystem allows to configure and use few receive
+ * buffers (dev2mem), as Networking RX DMA channels usually implemented
+ * as streaming interface
+ *     - get/request dma channel
+ *     struct dma dma_rx;
+ *     ret = dma_get_by_name(common->dev, "rx0", &dma_rx);
+ *     if (ret) ...
+ *
+ *     for (i = 0; i < RX_DESC_NUM; i++) {
+ *             ret = dma_prepare_rcv_buf(&dma_rx,
+ *                                       net_rx_packets[i],
+ *                                       RX_BUF_SIZE);
+ *             if (ret) ...
+ *     }
+ *
+ *     - enable dma channel
+ *     ret = dma_enable(&dma_rx);
+ *     if (ret) ...
+ *
+ *     - dma receive DMA_DEV_TO_MEM.
+ *     struct ti_drv_packet_data packet_data;
+ *
+ *     len = dma_receive(&dma_rx, (void **)packet, &packet_data);
+ *     if (ret < 0) ..
+ *
+ *     -- process packet --
+ *
+ *     - return buffer back to DAM channel
+ *     ret = dma_prepare_rcv_buf(&dma_rx,
+ *                               net_rx_packets[rx_next],
+ *                               RX_BUF_SIZE);
+ */
+
+struct udevice;
+
+/**
+ * struct dma - A handle to (allowing control of) a single DMA.
+ *
+ * Clients provide storage for DMA handles. The content of the structure is
+ * managed solely by the DMA API and DMA drivers. A DMA struct is
+ * initialized by "get"ing the DMA struct. The DMA struct is passed to all
+ * other DMA APIs to identify which DMA channel to operate upon.
+ *
+ * @dev: The device which implements the DMA channel.
+ * @id: The DMA channel ID within the provider.
+ *
+ * Currently, the DMA API assumes that a single integer ID is enough to
+ * identify and configure any DMA channel for any DMA provider. If this
+ * assumption becomes invalid in the future, the struct could be expanded to
+ * either (a) add more fields to allow DMA providers to store additional
+ * information, or (b) replace the id field with an opaque pointer, which the
+ * provider would dynamically allocated during its .of_xlate op, and process
+ * during is .request op. This may require the addition of an extra op to clean
+ * up the allocation.
+ */
+struct dma {
+       struct udevice *dev;
+       /*
+        * Written by of_xlate. We assume a single id is enough for now. In the
+        * future, we might add more fields here.
+        */
+       unsigned long id;
+};
+
+# if CONFIG_IS_ENABLED(OF_CONTROL) && CONFIG_IS_ENABLED(DMA)
+/**
+ * dma_get_by_index - Get/request a DMA by integer index.
+ *
+ * This looks up and requests a DMA. The index is relative to the client
+ * device; each device is assumed to have n DMAs associated with it somehow,
+ * and this function finds and requests one of them. The mapping of client
+ * device DMA indices to provider DMAs may be via device-tree properties,
+ * board-provided mapping tables, or some other mechanism.
+ *
+ * @dev:       The client device.
+ * @index:     The index of the DMA to request, within the client's list of
+ *             DMA channels.
+ * @dma:       A pointer to a DMA struct to initialize.
+ * @return 0 if OK, or a negative error code.
+ */
+int dma_get_by_index(struct udevice *dev, int index, struct dma *dma);
+
+/**
+ * dma_get_by_name - Get/request a DMA by name.
+ *
+ * This looks up and requests a DMA. The name is relative to the client
+ * device; each device is assumed to have n DMAs associated with it somehow,
+ * and this function finds and requests one of them. The mapping of client
+ * device DMA names to provider DMAs may be via device-tree properties,
+ * board-provided mapping tables, or some other mechanism.
+ *
+ * @dev:       The client device.
+ * @name:      The name of the DMA to request, within the client's list of
+ *             DMA channels.
+ * @dma:       A pointer to a DMA struct to initialize.
+ * @return 0 if OK, or a negative error code.
+ */
+int dma_get_by_name(struct udevice *dev, const char *name, struct dma *dma);
+# else
+static inline int dma_get_by_index(struct udevice *dev, int index,
+                                  struct dma *dma)
+{
+       return -ENOSYS;
+}
+
+static inline int dma_get_by_name(struct udevice *dev, const char *name,
+                                 struct dma *dma)
+{
+       return -ENOSYS;
+}
+# endif
+
+/**
+ * dma_request - Request a DMA by provider-specific ID.
+ *
+ * This requests a DMA using a provider-specific ID. Generally, this function
+ * should not be used, since dma_get_by_index/name() provide an interface that
+ * better separates clients from intimate knowledge of DMA providers.
+ * However, this function may be useful in core SoC-specific code.
+ *
+ * @dev: The DMA provider device.
+ * @dma: A pointer to a DMA struct to initialize. The caller must
+ *      have already initialized any field in this struct which the
+ *      DMA provider uses to identify the DMA channel.
+ * @return 0 if OK, or a negative error code.
+ */
+int dma_request(struct udevice *dev, struct dma *dma);
+
+/**
+ * dma_free - Free a previously requested DMA.
+ *
+ * @dma: A DMA struct that was previously successfully requested by
+ *      dma_request/get_by_*().
+ * @return 0 if OK, or a negative error code.
+ */
+int dma_free(struct dma *dma);
+
+/**
+ * dma_enable() - Enable (turn on) a DMA channel.
+ *
+ * @dma: A DMA struct that was previously successfully requested by
+ *      dma_request/get_by_*().
+ * @return zero on success, or -ve error code.
+ */
+int dma_enable(struct dma *dma);
+
+/**
+ * dma_disable() - Disable (turn off) a DMA channel.
+ *
+ * @dma: A DMA struct that was previously successfully requested by
+ *      dma_request/get_by_*().
+ * @return zero on success, or -ve error code.
+ */
+int dma_disable(struct dma *dma);
+
+/**
+ * dma_prepare_rcv_buf() - Prepare/add receive DMA buffer.
+ *
+ * It allows to implement zero-copy async DMA_DEV_TO_MEM (receive) transactions
+ * if supported by DMA providers.
+ *
+ * @dma: A DMA struct that was previously successfully requested by
+ *      dma_request/get_by_*().
+ * @dst: The receive buffer pointer.
+ * @size: The receive buffer size
+ * @return zero on success, or -ve error code.
+ */
+int dma_prepare_rcv_buf(struct dma *dma, void *dst, size_t size);
+
+/**
+ * dma_receive() - Receive a DMA transfer.
+ *
+ * @dma: A DMA struct that was previously successfully requested by
+ *      dma_request/get_by_*().
+ * @dst: The destination pointer.
+ * @metadata: DMA driver's channel specific data
+ * @return length of received data on success, or zero - no data,
+ * or -ve error code.
+ */
+int dma_receive(struct dma *dma, void **dst, void *metadata);
+
+/**
+ * dma_send() - Send a DMA transfer.
+ *
+ * @dma: A DMA struct that was previously successfully requested by
+ *      dma_request/get_by_*().
+ * @src: The source pointer.
+ * @len: Length of the data to be sent (number of bytes).
+ * @metadata: DMA driver's channel specific data
+ * @return zero on success, or -ve error code.
+ */
+int dma_send(struct dma *dma, void *src, size_t len, void *metadata);
+#endif /* CONFIG_DMA_CHANNELS */
+
 /*
  * dma_get_device - get a DMA device which supports transfer
  * type of transfer_type
diff --git a/include/dt-bindings/clock/am3.h b/include/dt-bindings/clock/am3.h
new file mode 100644 (file)
index 0000000..86a8806
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+ * Copyright 2017 Texas Instruments, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+#ifndef __DT_BINDINGS_CLK_AM3_H
+#define __DT_BINDINGS_CLK_AM3_H
+
+#define AM3_CLKCTRL_OFFSET     0x0
+#define AM3_CLKCTRL_INDEX(offset)      ((offset) - AM3_CLKCTRL_OFFSET)
+
+/* XXX: Compatibility part begin, remove this once compatibility support is no longer needed */
+
+/* l4_per clocks */
+#define AM3_L4_PER_CLKCTRL_OFFSET      0x14
+#define AM3_L4_PER_CLKCTRL_INDEX(offset)       ((offset) - AM3_L4_PER_CLKCTRL_OFFSET)
+#define AM3_CPGMAC0_CLKCTRL    AM3_L4_PER_CLKCTRL_INDEX(0x14)
+#define AM3_LCDC_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0x18)
+#define AM3_USB_OTG_HS_CLKCTRL AM3_L4_PER_CLKCTRL_INDEX(0x1c)
+#define AM3_TPTC0_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0x24)
+#define AM3_EMIF_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0x28)
+#define AM3_OCMCRAM_CLKCTRL    AM3_L4_PER_CLKCTRL_INDEX(0x2c)
+#define AM3_GPMC_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0x30)
+#define AM3_MCASP0_CLKCTRL     AM3_L4_PER_CLKCTRL_INDEX(0x34)
+#define AM3_UART6_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0x38)
+#define AM3_MMC1_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0x3c)
+#define AM3_ELM_CLKCTRL        AM3_L4_PER_CLKCTRL_INDEX(0x40)
+#define AM3_I2C3_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0x44)
+#define AM3_I2C2_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0x48)
+#define AM3_SPI0_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0x4c)
+#define AM3_SPI1_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0x50)
+#define AM3_L4_LS_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0x60)
+#define AM3_MCASP1_CLKCTRL     AM3_L4_PER_CLKCTRL_INDEX(0x68)
+#define AM3_UART2_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0x6c)
+#define AM3_UART3_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0x70)
+#define AM3_UART4_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0x74)
+#define AM3_UART5_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0x78)
+#define AM3_TIMER7_CLKCTRL     AM3_L4_PER_CLKCTRL_INDEX(0x7c)
+#define AM3_TIMER2_CLKCTRL     AM3_L4_PER_CLKCTRL_INDEX(0x80)
+#define AM3_TIMER3_CLKCTRL     AM3_L4_PER_CLKCTRL_INDEX(0x84)
+#define AM3_TIMER4_CLKCTRL     AM3_L4_PER_CLKCTRL_INDEX(0x88)
+#define AM3_RNG_CLKCTRL        AM3_L4_PER_CLKCTRL_INDEX(0x90)
+#define AM3_AES_CLKCTRL        AM3_L4_PER_CLKCTRL_INDEX(0x94)
+#define AM3_SHAM_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0xa0)
+#define AM3_GPIO2_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0xac)
+#define AM3_GPIO3_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0xb0)
+#define AM3_GPIO4_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0xb4)
+#define AM3_TPCC_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0xbc)
+#define AM3_D_CAN0_CLKCTRL     AM3_L4_PER_CLKCTRL_INDEX(0xc0)
+#define AM3_D_CAN1_CLKCTRL     AM3_L4_PER_CLKCTRL_INDEX(0xc4)
+#define AM3_EPWMSS1_CLKCTRL    AM3_L4_PER_CLKCTRL_INDEX(0xcc)
+#define AM3_EPWMSS0_CLKCTRL    AM3_L4_PER_CLKCTRL_INDEX(0xd4)
+#define AM3_EPWMSS2_CLKCTRL    AM3_L4_PER_CLKCTRL_INDEX(0xd8)
+#define AM3_L3_INSTR_CLKCTRL   AM3_L4_PER_CLKCTRL_INDEX(0xdc)
+#define AM3_L3_MAIN_CLKCTRL    AM3_L4_PER_CLKCTRL_INDEX(0xe0)
+#define AM3_PRUSS_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0xe8)
+#define AM3_TIMER5_CLKCTRL     AM3_L4_PER_CLKCTRL_INDEX(0xec)
+#define AM3_TIMER6_CLKCTRL     AM3_L4_PER_CLKCTRL_INDEX(0xf0)
+#define AM3_MMC2_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0xf4)
+#define AM3_MMC3_CLKCTRL       AM3_L4_PER_CLKCTRL_INDEX(0xf8)
+#define AM3_TPTC1_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0xfc)
+#define AM3_TPTC2_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0x100)
+#define AM3_SPINLOCK_CLKCTRL   AM3_L4_PER_CLKCTRL_INDEX(0x10c)
+#define AM3_MAILBOX_CLKCTRL    AM3_L4_PER_CLKCTRL_INDEX(0x110)
+#define AM3_L4_HS_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0x120)
+#define AM3_OCPWP_CLKCTRL      AM3_L4_PER_CLKCTRL_INDEX(0x130)
+#define AM3_CLKDIV32K_CLKCTRL  AM3_L4_PER_CLKCTRL_INDEX(0x14c)
+
+/* l4_wkup clocks */
+#define AM3_L4_WKUP_CLKCTRL_OFFSET     0x4
+#define AM3_L4_WKUP_CLKCTRL_INDEX(offset)      ((offset) - AM3_L4_WKUP_CLKCTRL_OFFSET)
+#define AM3_CONTROL_CLKCTRL    AM3_L4_WKUP_CLKCTRL_INDEX(0x4)
+#define AM3_GPIO1_CLKCTRL      AM3_L4_WKUP_CLKCTRL_INDEX(0x8)
+#define AM3_L4_WKUP_CLKCTRL    AM3_L4_WKUP_CLKCTRL_INDEX(0xc)
+#define AM3_DEBUGSS_CLKCTRL    AM3_L4_WKUP_CLKCTRL_INDEX(0x14)
+#define AM3_WKUP_M3_CLKCTRL    AM3_L4_WKUP_CLKCTRL_INDEX(0xb0)
+#define AM3_UART1_CLKCTRL      AM3_L4_WKUP_CLKCTRL_INDEX(0xb4)
+#define AM3_I2C1_CLKCTRL       AM3_L4_WKUP_CLKCTRL_INDEX(0xb8)
+#define AM3_ADC_TSC_CLKCTRL    AM3_L4_WKUP_CLKCTRL_INDEX(0xbc)
+#define AM3_SMARTREFLEX0_CLKCTRL       AM3_L4_WKUP_CLKCTRL_INDEX(0xc0)
+#define AM3_TIMER1_CLKCTRL     AM3_L4_WKUP_CLKCTRL_INDEX(0xc4)
+#define AM3_SMARTREFLEX1_CLKCTRL       AM3_L4_WKUP_CLKCTRL_INDEX(0xc8)
+#define AM3_WD_TIMER2_CLKCTRL  AM3_L4_WKUP_CLKCTRL_INDEX(0xd4)
+
+/* mpu clocks */
+#define AM3_MPU_CLKCTRL_OFFSET 0x4
+#define AM3_MPU_CLKCTRL_INDEX(offset)  ((offset) - AM3_MPU_CLKCTRL_OFFSET)
+#define AM3_MPU_CLKCTRL        AM3_MPU_CLKCTRL_INDEX(0x4)
+
+/* l4_rtc clocks */
+#define AM3_RTC_CLKCTRL        AM3_CLKCTRL_INDEX(0x0)
+
+/* gfx_l3 clocks */
+#define AM3_GFX_L3_CLKCTRL_OFFSET      0x4
+#define AM3_GFX_L3_CLKCTRL_INDEX(offset)       ((offset) - AM3_GFX_L3_CLKCTRL_OFFSET)
+#define AM3_GFX_CLKCTRL        AM3_GFX_L3_CLKCTRL_INDEX(0x4)
+
+/* l4_cefuse clocks */
+#define AM3_L4_CEFUSE_CLKCTRL_OFFSET   0x20
+#define AM3_L4_CEFUSE_CLKCTRL_INDEX(offset)    ((offset) - AM3_L4_CEFUSE_CLKCTRL_OFFSET)
+#define AM3_CEFUSE_CLKCTRL     AM3_L4_CEFUSE_CLKCTRL_INDEX(0x20)
+
+/* XXX: Compatibility part end */
+
+/* l4ls clocks */
+#define AM3_L4LS_CLKCTRL_OFFSET        0x38
+#define AM3_L4LS_CLKCTRL_INDEX(offset) ((offset) - AM3_L4LS_CLKCTRL_OFFSET)
+#define AM3_L4LS_UART6_CLKCTRL AM3_L4LS_CLKCTRL_INDEX(0x38)
+#define AM3_L4LS_MMC1_CLKCTRL  AM3_L4LS_CLKCTRL_INDEX(0x3c)
+#define AM3_L4LS_ELM_CLKCTRL   AM3_L4LS_CLKCTRL_INDEX(0x40)
+#define AM3_L4LS_I2C3_CLKCTRL  AM3_L4LS_CLKCTRL_INDEX(0x44)
+#define AM3_L4LS_I2C2_CLKCTRL  AM3_L4LS_CLKCTRL_INDEX(0x48)
+#define AM3_L4LS_SPI0_CLKCTRL  AM3_L4LS_CLKCTRL_INDEX(0x4c)
+#define AM3_L4LS_SPI1_CLKCTRL  AM3_L4LS_CLKCTRL_INDEX(0x50)
+#define AM3_L4LS_L4_LS_CLKCTRL AM3_L4LS_CLKCTRL_INDEX(0x60)
+#define AM3_L4LS_UART2_CLKCTRL AM3_L4LS_CLKCTRL_INDEX(0x6c)
+#define AM3_L4LS_UART3_CLKCTRL AM3_L4LS_CLKCTRL_INDEX(0x70)
+#define AM3_L4LS_UART4_CLKCTRL AM3_L4LS_CLKCTRL_INDEX(0x74)
+#define AM3_L4LS_UART5_CLKCTRL AM3_L4LS_CLKCTRL_INDEX(0x78)
+#define AM3_L4LS_TIMER7_CLKCTRL        AM3_L4LS_CLKCTRL_INDEX(0x7c)
+#define AM3_L4LS_TIMER2_CLKCTRL        AM3_L4LS_CLKCTRL_INDEX(0x80)
+#define AM3_L4LS_TIMER3_CLKCTRL        AM3_L4LS_CLKCTRL_INDEX(0x84)
+#define AM3_L4LS_TIMER4_CLKCTRL        AM3_L4LS_CLKCTRL_INDEX(0x88)
+#define AM3_L4LS_RNG_CLKCTRL   AM3_L4LS_CLKCTRL_INDEX(0x90)
+#define AM3_L4LS_GPIO2_CLKCTRL AM3_L4LS_CLKCTRL_INDEX(0xac)
+#define AM3_L4LS_GPIO3_CLKCTRL AM3_L4LS_CLKCTRL_INDEX(0xb0)
+#define AM3_L4LS_GPIO4_CLKCTRL AM3_L4LS_CLKCTRL_INDEX(0xb4)
+#define AM3_L4LS_D_CAN0_CLKCTRL        AM3_L4LS_CLKCTRL_INDEX(0xc0)
+#define AM3_L4LS_D_CAN1_CLKCTRL        AM3_L4LS_CLKCTRL_INDEX(0xc4)
+#define AM3_L4LS_EPWMSS1_CLKCTRL       AM3_L4LS_CLKCTRL_INDEX(0xcc)
+#define AM3_L4LS_EPWMSS0_CLKCTRL       AM3_L4LS_CLKCTRL_INDEX(0xd4)
+#define AM3_L4LS_EPWMSS2_CLKCTRL       AM3_L4LS_CLKCTRL_INDEX(0xd8)
+#define AM3_L4LS_TIMER5_CLKCTRL        AM3_L4LS_CLKCTRL_INDEX(0xec)
+#define AM3_L4LS_TIMER6_CLKCTRL        AM3_L4LS_CLKCTRL_INDEX(0xf0)
+#define AM3_L4LS_MMC2_CLKCTRL  AM3_L4LS_CLKCTRL_INDEX(0xf4)
+#define AM3_L4LS_SPINLOCK_CLKCTRL      AM3_L4LS_CLKCTRL_INDEX(0x10c)
+#define AM3_L4LS_MAILBOX_CLKCTRL       AM3_L4LS_CLKCTRL_INDEX(0x110)
+#define AM3_L4LS_OCPWP_CLKCTRL AM3_L4LS_CLKCTRL_INDEX(0x130)
+
+/* l3s clocks */
+#define AM3_L3S_CLKCTRL_OFFSET 0x1c
+#define AM3_L3S_CLKCTRL_INDEX(offset)  ((offset) - AM3_L3S_CLKCTRL_OFFSET)
+#define AM3_L3S_USB_OTG_HS_CLKCTRL     AM3_L3S_CLKCTRL_INDEX(0x1c)
+#define AM3_L3S_GPMC_CLKCTRL   AM3_L3S_CLKCTRL_INDEX(0x30)
+#define AM3_L3S_MCASP0_CLKCTRL AM3_L3S_CLKCTRL_INDEX(0x34)
+#define AM3_L3S_MCASP1_CLKCTRL AM3_L3S_CLKCTRL_INDEX(0x68)
+#define AM3_L3S_MMC3_CLKCTRL   AM3_L3S_CLKCTRL_INDEX(0xf8)
+
+/* l3 clocks */
+#define AM3_L3_CLKCTRL_OFFSET  0x24
+#define AM3_L3_CLKCTRL_INDEX(offset)   ((offset) - AM3_L3_CLKCTRL_OFFSET)
+#define AM3_L3_TPTC0_CLKCTRL   AM3_L3_CLKCTRL_INDEX(0x24)
+#define AM3_L3_EMIF_CLKCTRL    AM3_L3_CLKCTRL_INDEX(0x28)
+#define AM3_L3_OCMCRAM_CLKCTRL AM3_L3_CLKCTRL_INDEX(0x2c)
+#define AM3_L3_AES_CLKCTRL     AM3_L3_CLKCTRL_INDEX(0x94)
+#define AM3_L3_SHAM_CLKCTRL    AM3_L3_CLKCTRL_INDEX(0xa0)
+#define AM3_L3_TPCC_CLKCTRL    AM3_L3_CLKCTRL_INDEX(0xbc)
+#define AM3_L3_L3_INSTR_CLKCTRL        AM3_L3_CLKCTRL_INDEX(0xdc)
+#define AM3_L3_L3_MAIN_CLKCTRL AM3_L3_CLKCTRL_INDEX(0xe0)
+#define AM3_L3_TPTC1_CLKCTRL   AM3_L3_CLKCTRL_INDEX(0xfc)
+#define AM3_L3_TPTC2_CLKCTRL   AM3_L3_CLKCTRL_INDEX(0x100)
+
+/* l4hs clocks */
+#define AM3_L4HS_CLKCTRL_OFFSET        0x120
+#define AM3_L4HS_CLKCTRL_INDEX(offset) ((offset) - AM3_L4HS_CLKCTRL_OFFSET)
+#define AM3_L4HS_L4_HS_CLKCTRL AM3_L4HS_CLKCTRL_INDEX(0x120)
+
+/* pruss_ocp clocks */
+#define AM3_PRUSS_OCP_CLKCTRL_OFFSET   0xe8
+#define AM3_PRUSS_OCP_CLKCTRL_INDEX(offset)    ((offset) - AM3_PRUSS_OCP_CLKCTRL_OFFSET)
+#define AM3_PRUSS_OCP_PRUSS_CLKCTRL    AM3_PRUSS_OCP_CLKCTRL_INDEX(0xe8)
+
+/* cpsw_125mhz clocks */
+#define AM3_CPSW_125MHZ_CPGMAC0_CLKCTRL        AM3_CLKCTRL_INDEX(0x14)
+
+/* lcdc clocks */
+#define AM3_LCDC_CLKCTRL_OFFSET        0x18
+#define AM3_LCDC_CLKCTRL_INDEX(offset) ((offset) - AM3_LCDC_CLKCTRL_OFFSET)
+#define AM3_LCDC_LCDC_CLKCTRL  AM3_LCDC_CLKCTRL_INDEX(0x18)
+
+/* clk_24mhz clocks */
+#define AM3_CLK_24MHZ_CLKCTRL_OFFSET   0x14c
+#define AM3_CLK_24MHZ_CLKCTRL_INDEX(offset)    ((offset) - AM3_CLK_24MHZ_CLKCTRL_OFFSET)
+#define AM3_CLK_24MHZ_CLKDIV32K_CLKCTRL        AM3_CLK_24MHZ_CLKCTRL_INDEX(0x14c)
+
+/* l4_wkup clocks */
+#define AM3_L4_WKUP_CONTROL_CLKCTRL    AM3_CLKCTRL_INDEX(0x4)
+#define AM3_L4_WKUP_GPIO1_CLKCTRL      AM3_CLKCTRL_INDEX(0x8)
+#define AM3_L4_WKUP_L4_WKUP_CLKCTRL    AM3_CLKCTRL_INDEX(0xc)
+#define AM3_L4_WKUP_UART1_CLKCTRL      AM3_CLKCTRL_INDEX(0xb4)
+#define AM3_L4_WKUP_I2C1_CLKCTRL       AM3_CLKCTRL_INDEX(0xb8)
+#define AM3_L4_WKUP_ADC_TSC_CLKCTRL    AM3_CLKCTRL_INDEX(0xbc)
+#define AM3_L4_WKUP_SMARTREFLEX0_CLKCTRL       AM3_CLKCTRL_INDEX(0xc0)
+#define AM3_L4_WKUP_TIMER1_CLKCTRL     AM3_CLKCTRL_INDEX(0xc4)
+#define AM3_L4_WKUP_SMARTREFLEX1_CLKCTRL       AM3_CLKCTRL_INDEX(0xc8)
+#define AM3_L4_WKUP_WD_TIMER2_CLKCTRL  AM3_CLKCTRL_INDEX(0xd4)
+
+/* l3_aon clocks */
+#define AM3_L3_AON_CLKCTRL_OFFSET      0x14
+#define AM3_L3_AON_CLKCTRL_INDEX(offset)       ((offset) - AM3_L3_AON_CLKCTRL_OFFSET)
+#define AM3_L3_AON_DEBUGSS_CLKCTRL     AM3_L3_AON_CLKCTRL_INDEX(0x14)
+
+/* l4_wkup_aon clocks */
+#define AM3_L4_WKUP_AON_CLKCTRL_OFFSET 0xb0
+#define AM3_L4_WKUP_AON_CLKCTRL_INDEX(offset)  ((offset) - AM3_L4_WKUP_AON_CLKCTRL_OFFSET)
+#define AM3_L4_WKUP_AON_WKUP_M3_CLKCTRL        AM3_L4_WKUP_AON_CLKCTRL_INDEX(0xb0)
+
+/* mpu clocks */
+#define AM3_MPU_MPU_CLKCTRL    AM3_CLKCTRL_INDEX(0x4)
+
+/* l4_rtc clocks */
+#define AM3_L4_RTC_RTC_CLKCTRL AM3_CLKCTRL_INDEX(0x0)
+
+/* gfx_l3 clocks */
+#define AM3_GFX_L3_GFX_CLKCTRL AM3_CLKCTRL_INDEX(0x4)
+
+/* l4_cefuse clocks */
+#define AM3_L4_CEFUSE_CEFUSE_CLKCTRL   AM3_CLKCTRL_INDEX(0x20)
+
+#endif
diff --git a/include/dt-bindings/clock/r8a77965-cpg-mssr.h b/include/dt-bindings/clock/r8a77965-cpg-mssr.h
new file mode 100644 (file)
index 0000000..6d3b5a9
--- /dev/null
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2018 Jacopo Mondi <jacopo+renesas@jmondi.org>
+ */
+#ifndef __DT_BINDINGS_CLOCK_R8A77965_CPG_MSSR_H__
+#define __DT_BINDINGS_CLOCK_R8A77965_CPG_MSSR_H__
+
+#include <dt-bindings/clock/renesas-cpg-mssr.h>
+
+/* r8a77965 CPG Core Clocks */
+#define R8A77965_CLK_Z                 0
+#define R8A77965_CLK_ZR                        1
+#define R8A77965_CLK_ZG                        2
+#define R8A77965_CLK_ZTR               3
+#define R8A77965_CLK_ZTRD2             4
+#define R8A77965_CLK_ZT                        5
+#define R8A77965_CLK_ZX                        6
+#define R8A77965_CLK_S0D1              7
+#define R8A77965_CLK_S0D2              8
+#define R8A77965_CLK_S0D3              9
+#define R8A77965_CLK_S0D4              10
+#define R8A77965_CLK_S0D6              11
+#define R8A77965_CLK_S0D8              12
+#define R8A77965_CLK_S0D12             13
+#define R8A77965_CLK_S1D1              14
+#define R8A77965_CLK_S1D2              15
+#define R8A77965_CLK_S1D4              16
+#define R8A77965_CLK_S2D1              17
+#define R8A77965_CLK_S2D2              18
+#define R8A77965_CLK_S2D4              19
+#define R8A77965_CLK_S3D1              20
+#define R8A77965_CLK_S3D2              21
+#define R8A77965_CLK_S3D4              22
+#define R8A77965_CLK_LB                        23
+#define R8A77965_CLK_CL                        24
+#define R8A77965_CLK_ZB3               25
+#define R8A77965_CLK_ZB3D2             26
+#define R8A77965_CLK_CR                        27
+#define R8A77965_CLK_CRD2              28
+#define R8A77965_CLK_SD0H              29
+#define R8A77965_CLK_SD0               30
+#define R8A77965_CLK_SD1H              31
+#define R8A77965_CLK_SD1               32
+#define R8A77965_CLK_SD2H              33
+#define R8A77965_CLK_SD2               34
+#define R8A77965_CLK_SD3H              35
+#define R8A77965_CLK_SD3               36
+#define R8A77965_CLK_SSP2              37
+#define R8A77965_CLK_SSP1              38
+#define R8A77965_CLK_SSPRS             39
+#define R8A77965_CLK_RPC               40
+#define R8A77965_CLK_RPCD2             41
+#define R8A77965_CLK_MSO               42
+#define R8A77965_CLK_CANFD             43
+#define R8A77965_CLK_HDMI              44
+#define R8A77965_CLK_CSI0              45
+#define R8A77965_CLK_CP                        46
+#define R8A77965_CLK_CPEX              47
+#define R8A77965_CLK_R                 48
+#define R8A77965_CLK_OSC               49
+
+#endif /* __DT_BINDINGS_CLOCK_R8A77965_CPG_MSSR_H__ */
index c806fce..a596a48 100644 (file)
@@ -56,8 +56,7 @@
 #define R8A77990_CLK_LV0               45
 #define R8A77990_CLK_LV1               46
 #define R8A77990_CLK_CSI0              47
-#define R8A77990_CLK_POST3             48
-#define R8A77990_CLK_CP                        49
-#define R8A77990_CLK_CPEX              50
+#define R8A77990_CLK_CP                        48
+#define R8A77990_CLK_CPEX              49
 
 #endif /* __DT_BINDINGS_CLOCK_R8A77990_CPG_MSSR_H__ */
index 1409c73..944d85b 100644 (file)
  * (e.g. SYSCISR, Interrupt Status Register)
  */
 
-#define R8A77990_PD_CA53_CPU0           5
+#define R8A77990_PD_CA53_CPU0          5
+#define R8A77990_PD_CA53_CPU1          6
+#define R8A77990_PD_CR7                        13
+#define R8A77990_PD_A3VC               14
+#define R8A77990_PD_3DG_A              17
+#define R8A77990_PD_3DG_B              18
 #define R8A77990_PD_CA53_SCU           21
+#define R8A77990_PD_A2VC1              26
 
 /* Always-on power area */
 #define R8A77990_PD_ALWAYS_ON          32
diff --git a/include/hwspinlock.h b/include/hwspinlock.h
new file mode 100644 (file)
index 0000000..99389c1
--- /dev/null
@@ -0,0 +1,140 @@
+/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
+/*
+ * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
+ */
+
+#ifndef _HWSPINLOCK_H_
+#define _HWSPINLOCK_H_
+
+/**
+ * Implement a hwspinlock uclass.
+ * Hardware spinlocks are used to perform hardware protection of
+ * critical sections and synchronisation between multiprocessors.
+ */
+
+struct udevice;
+
+/**
+ * struct hwspinlock - A handle to (allowing control of) a single hardware
+ * spinlock.
+ *
+ * @dev: The device which implements the hardware spinlock.
+ * @id: The hardware spinlock ID within the provider.
+ */
+struct hwspinlock {
+       struct udevice *dev;
+       unsigned long id;
+};
+
+#if CONFIG_IS_ENABLED(DM_HWSPINLOCK)
+
+/**
+ * hwspinlock_get_by_index - Get a hardware spinlock by integer index
+ *
+ * This looks up and request a hardware spinlock. The index is relative to the
+ * client device; each device is assumed to have n hardware spinlock associated
+ * with it somehow, and this function finds and requests one of them.
+ *
+ * @dev:       The client device.
+ * @index:     The index of the hardware spinlock to request, within the
+ *             client's list of hardware spinlock.
+ * @hws:       A pointer to a hardware spinlock struct to initialize.
+ * @return 0 if OK, or a negative error code.
+ */
+int hwspinlock_get_by_index(struct udevice *dev,
+                           int index, struct hwspinlock *hws);
+
+/**
+ * Lock the hardware spinlock
+ *
+ * @hws:       A hardware spinlock struct that previously requested by
+ *             hwspinlock_get_by_index
+ * @timeout:   Timeout value in msecs
+ * @return: 0 if OK, -ETIMEDOUT if timeout, -ve on other errors
+ */
+int hwspinlock_lock_timeout(struct hwspinlock *hws, unsigned int timeout);
+
+/**
+ * Unlock the hardware spinlock
+ *
+ * @hws:       A hardware spinlock struct that previously requested by
+ *             hwspinlock_get_by_index
+ * @return: 0 if OK, -ve on error
+ */
+int hwspinlock_unlock(struct hwspinlock *hws);
+
+#else
+
+static inline int hwspinlock_get_by_index(struct udevice *dev,
+                                         int index,
+                                         struct hwspinlock *hws)
+{
+       return -ENOSYS;
+}
+
+static inline int hwspinlock_lock_timeout(struct hwspinlock *hws,
+                                         int timeout)
+{
+       return -ENOSYS;
+}
+
+static inline int hwspinlock_unlock(struct hwspinlock *hws)
+{
+       return -ENOSYS;
+}
+
+#endif /* CONFIG_DM_HWSPINLOCK */
+
+struct ofnode_phandle_args;
+
+/**
+ * struct hwspinlock_ops - Driver model hwspinlock operations
+ *
+ * The uclass interface is implemented by all hwspinlock devices which use
+ * driver model.
+ */
+struct hwspinlock_ops {
+       /**
+        * of_xlate - Translate a client's device-tree (OF) hardware specifier.
+        *
+        * The hardware core calls this function as the first step in
+        * implementing a client's hwspinlock_get_by_*() call.
+        *
+        * @hws:        The hardware spinlock struct to hold the translation
+        *                      result.
+        * @args:       The hardware spinlock specifier values from device tree.
+        * @return 0 if OK, or a negative error code.
+        */
+       int (*of_xlate)(struct hwspinlock *hws,
+                       struct ofnode_phandle_args *args);
+
+       /**
+        * Lock the hardware spinlock
+        *
+        * @dev:        hwspinlock Device
+        * @index:      index of the lock to be used
+        * @return 0 if OK, -ve on error
+        */
+       int (*lock)(struct udevice *dev, int index);
+
+       /**
+        * Unlock the hardware spinlock
+        *
+        * @dev:        hwspinlock Device
+        * @index:      index of the lock to be unlocked
+        * @return 0 if OK, -ve on error
+        */
+       int (*unlock)(struct udevice *dev, int index);
+
+       /**
+        * Relax - optional
+        *       Platform-specific relax method, called by hwspinlock core
+        *       while spinning on a lock, between two successive call to
+        *       lock
+        *
+        * @dev:        hwspinlock Device
+        */
+       void (*relax)(struct udevice *dev);
+};
+
+#endif /* _HWSPINLOCK_H_ */
index 2b9e5c4..8d69fa1 100644 (file)
 #define BRK            0x0100  /* make break flag for keyboard */
 #define ALT            0x0200  /* right alt */
 
-/* exports */
-
-/**
- * Flush all buffer from keyboard controller to host.
- */
-void i8042_flush(void);
-
-/**
- * Disables the keyboard so that key strokes no longer generate scancodes to
- * the host.
- *
- * @return 0 if ok, -1 if keyboard input was found while disabling
- */
-int i8042_disable(void);
-
 #endif /* _I8042_H_ */
diff --git a/include/inttypes.h b/include/inttypes.h
new file mode 100644 (file)
index 0000000..dcb6785
--- /dev/null
@@ -0,0 +1,271 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 1997-2001, 2004, 2007 Free Software Foundation, Inc.
+ *
+ * This file is taken from the GNU C Library v2.15, with the unimplemented
+ * functions removed and a few style fixes.
+ */
+
+/*
+ *     ISO C99: 7.8 Format conversion of integer types <inttypes.h>
+ */
+
+#ifndef _INTTYPES_H
+#define _INTTYPES_H    1
+
+#include <linux/compiler.h>
+
+/* Get a definition for wchar_t.  But we must not define wchar_t itself.  */
+#ifndef ____gwchar_t_defined
+# ifdef __cplusplus
+#  define __gwchar_t wchar_t
+# elif defined __WCHAR_TYPE__
+typedef __WCHAR_TYPE__ __gwchar_t;
+# else
+#  define __need_wchar_t
+#  include <linux/stddef.h>
+typedef wchar_t __gwchar_t;
+# endif
+# define ____gwchar_t_defined  1
+#endif
+
+/*
+ * The ISO C99 standard specifies that these macros must only be defined if
+ * explicitly requested
+ */
+#if !defined __cplusplus || defined __STDC_FORMAT_MACROS
+
+/* linux/types.h always uses long long for 64-bit and long for uintptr_t */
+# define __PRI64_PREFIX        "ll"
+# define __PRIPTR_PREFIX       "l"
+
+/* Macros for printing format specifiers.  */
+
+/* Decimal notation.  */
+# define PRId8         "d"
+# define PRId16                "d"
+# define PRId32                "d"
+# define PRId64                __PRI64_PREFIX "d"
+
+# define PRIdLEAST8    "d"
+# define PRIdLEAST16   "d"
+# define PRIdLEAST32   "d"
+# define PRIdLEAST64   __PRI64_PREFIX "d"
+
+# define PRIdFAST8     "d"
+# define PRIdFAST16    __PRIPTR_PREFIX "d"
+# define PRIdFAST32    __PRIPTR_PREFIX "d"
+# define PRIdFAST64    __PRI64_PREFIX "d"
+
+# define PRIi8         "i"
+# define PRIi16                "i"
+# define PRIi32                "i"
+# define PRIi64                __PRI64_PREFIX "i"
+
+# define PRIiLEAST8    "i"
+# define PRIiLEAST16   "i"
+# define PRIiLEAST32   "i"
+# define PRIiLEAST64   __PRI64_PREFIX "i"
+
+# define PRIiFAST8     "i"
+# define PRIiFAST16    __PRIPTR_PREFIX "i"
+# define PRIiFAST32    __PRIPTR_PREFIX "i"
+# define PRIiFAST64    __PRI64_PREFIX "i"
+
+/* Octal notation.  */
+# define PRIo8         "o"
+# define PRIo16                "o"
+# define PRIo32                "o"
+# define PRIo64                __PRI64_PREFIX "o"
+
+# define PRIoLEAST8    "o"
+# define PRIoLEAST16   "o"
+# define PRIoLEAST32   "o"
+# define PRIoLEAST64   __PRI64_PREFIX "o"
+
+# define PRIoFAST8     "o"
+# define PRIoFAST16    __PRIPTR_PREFIX "o"
+# define PRIoFAST32    __PRIPTR_PREFIX "o"
+# define PRIoFAST64    __PRI64_PREFIX "o"
+
+/* Unsigned integers.  */
+# define PRIu8         "u"
+# define PRIu16                "u"
+# define PRIu32                "u"
+# define PRIu64                __PRI64_PREFIX "u"
+
+# define PRIuLEAST8    "u"
+# define PRIuLEAST16   "u"
+# define PRIuLEAST32   "u"
+# define PRIuLEAST64   __PRI64_PREFIX "u"
+
+# define PRIuFAST8     "u"
+# define PRIuFAST16    __PRIPTR_PREFIX "u"
+# define PRIuFAST32    __PRIPTR_PREFIX "u"
+# define PRIuFAST64    __PRI64_PREFIX "u"
+
+/* lowercase hexadecimal notation.  */
+# define PRIx8         "x"
+# define PRIx16                "x"
+# define PRIx32                "x"
+# define PRIx64                __PRI64_PREFIX "x"
+
+# define PRIxLEAST8    "x"
+# define PRIxLEAST16   "x"
+# define PRIxLEAST32   "x"
+# define PRIxLEAST64   __PRI64_PREFIX "x"
+
+# define PRIxFAST8     "x"
+# define PRIxFAST16    __PRIPTR_PREFIX "x"
+# define PRIxFAST32    __PRIPTR_PREFIX "x"
+# define PRIxFAST64    __PRI64_PREFIX "x"
+
+/* UPPERCASE hexadecimal notation.  */
+# define PRIX8         "X"
+# define PRIX16                "X"
+# define PRIX32                "X"
+# define PRIX64                __PRI64_PREFIX "X"
+
+# define PRIXLEAST8    "X"
+# define PRIXLEAST16   "X"
+# define PRIXLEAST32   "X"
+# define PRIXLEAST64   __PRI64_PREFIX "X"
+
+# define PRIXFAST8     "X"
+# define PRIXFAST16    __PRIPTR_PREFIX "X"
+# define PRIXFAST32    __PRIPTR_PREFIX "X"
+# define PRIXFAST64    __PRI64_PREFIX "X"
+
+/* Macros for printing `intmax_t' and `uintmax_t'.  */
+# define PRIdMAX       __PRI64_PREFIX "d"
+# define PRIiMAX       __PRI64_PREFIX "i"
+# define PRIoMAX       __PRI64_PREFIX "o"
+# define PRIuMAX       __PRI64_PREFIX "u"
+# define PRIxMAX       __PRI64_PREFIX "x"
+# define PRIXMAX       __PRI64_PREFIX "X"
+
+/* Macros for printing `intptr_t' and `uintptr_t'.  */
+# define PRIdPTR       __PRIPTR_PREFIX "d"
+# define PRIiPTR       __PRIPTR_PREFIX "i"
+# define PRIoPTR       __PRIPTR_PREFIX "o"
+# define PRIuPTR       __PRIPTR_PREFIX "u"
+# define PRIxPTR       __PRIPTR_PREFIX "x"
+# define PRIXPTR       __PRIPTR_PREFIX "X"
+
+/* Macros for scanning format specifiers.  */
+
+/* Signed decimal notation.  */
+# define SCNd8         "hhd"
+# define SCNd16                "hd"
+# define SCNd32                "d"
+# define SCNd64                __PRI64_PREFIX "d"
+
+# define SCNdLEAST8    "hhd"
+# define SCNdLEAST16   "hd"
+# define SCNdLEAST32   "d"
+# define SCNdLEAST64   __PRI64_PREFIX "d"
+
+# define SCNdFAST8     "hhd"
+# define SCNdFAST16    __PRIPTR_PREFIX "d"
+# define SCNdFAST32    __PRIPTR_PREFIX "d"
+# define SCNdFAST64    __PRI64_PREFIX "d"
+
+/* Signed decimal notation.  */
+# define SCNi8         "hhi"
+# define SCNi16                "hi"
+# define SCNi32                "i"
+# define SCNi64                __PRI64_PREFIX "i"
+
+# define SCNiLEAST8    "hhi"
+# define SCNiLEAST16   "hi"
+# define SCNiLEAST32   "i"
+# define SCNiLEAST64   __PRI64_PREFIX "i"
+
+# define SCNiFAST8     "hhi"
+# define SCNiFAST16    __PRIPTR_PREFIX "i"
+# define SCNiFAST32    __PRIPTR_PREFIX "i"
+# define SCNiFAST64    __PRI64_PREFIX "i"
+
+/* Unsigned decimal notation.  */
+# define SCNu8         "hhu"
+# define SCNu16                "hu"
+# define SCNu32                "u"
+# define SCNu64                __PRI64_PREFIX "u"
+
+# define SCNuLEAST8    "hhu"
+# define SCNuLEAST16   "hu"
+# define SCNuLEAST32   "u"
+# define SCNuLEAST64   __PRI64_PREFIX "u"
+
+# define SCNuFAST8     "hhu"
+# define SCNuFAST16    __PRIPTR_PREFIX "u"
+# define SCNuFAST32    __PRIPTR_PREFIX "u"
+# define SCNuFAST64    __PRI64_PREFIX "u"
+
+/* Octal notation.  */
+# define SCNo8         "hho"
+# define SCNo16                "ho"
+# define SCNo32                "o"
+# define SCNo64                __PRI64_PREFIX "o"
+
+# define SCNoLEAST8    "hho"
+# define SCNoLEAST16   "ho"
+# define SCNoLEAST32   "o"
+# define SCNoLEAST64   __PRI64_PREFIX "o"
+
+# define SCNoFAST8     "hho"
+# define SCNoFAST16    __PRIPTR_PREFIX "o"
+# define SCNoFAST32    __PRIPTR_PREFIX "o"
+# define SCNoFAST64    __PRI64_PREFIX "o"
+
+/* Hexadecimal notation.  */
+# define SCNx8         "hhx"
+# define SCNx16                "hx"
+# define SCNx32                "x"
+# define SCNx64                __PRI64_PREFIX "x"
+
+# define SCNxLEAST8    "hhx"
+# define SCNxLEAST16   "hx"
+# define SCNxLEAST32   "x"
+# define SCNxLEAST64   __PRI64_PREFIX "x"
+
+# define SCNxFAST8     "hhx"
+# define SCNxFAST16    __PRIPTR_PREFIX "x"
+# define SCNxFAST32    __PRIPTR_PREFIX "x"
+# define SCNxFAST64    __PRI64_PREFIX "x"
+
+/* Macros for scanning `intmax_t' and `uintmax_t'.  */
+# define SCNdMAX       __PRI64_PREFIX "d"
+# define SCNiMAX       __PRI64_PREFIX "i"
+# define SCNoMAX       __PRI64_PREFIX "o"
+# define SCNuMAX       __PRI64_PREFIX "u"
+# define SCNxMAX       __PRI64_PREFIX "x"
+
+/* Macros for scanning `intptr_t' and `uintptr_t'.  */
+# define SCNdPTR       __PRIPTR_PREFIX "d"
+# define SCNiPTR       __PRIPTR_PREFIX "i"
+# define SCNoPTR       __PRIPTR_PREFIX "o"
+# define SCNuPTR       __PRIPTR_PREFIX "u"
+# define SCNxPTR       __PRIPTR_PREFIX "x"
+
+#endif /* C++ && format macros */
+
+#if __WORDSIZE == 64
+
+/* We have to define the `uintmax_t' type using `ldiv_t'.  */
+typedef struct {
+       long int quot;          /* Quotient.  */
+       long int rem;           /* Remainder.  */
+} imaxdiv_t;
+
+#else
+
+/* We have to define the `uintmax_t' type using `lldiv_t'.  */
+typedef struct {
+       long long int quot;             /* Quotient.  */
+       long long int rem;              /* Remainder.  */
+} imaxdiv_t;
+
+#endif
+
+#endif /* inttypes.h */
index 1936034..71a38e1 100644 (file)
@@ -10,8 +10,7 @@ void udelay(unsigned long usec);
 
 static inline void mdelay(unsigned long msec)
 {
-       while (msec--)
-               udelay(1000);
+       udelay(1000 * msec);
 }
 
 static inline void ndelay(unsigned long nsec)
index 04a09eb..bd88483 100644 (file)
 #define S64_MAX                ((s64)(U64_MAX>>1))
 #define S64_MIN                ((s64)(-S64_MAX - 1))
 
+/* Aliases defined by stdint.h */
+#define UINT32_MAX     U32_MAX
+#define UINT64_MAX     U64_MAX
+
 #define STACK_MAGIC    0xdeadbeef
 
 #define REPEAT_BYTE(x) ((~0ul / 0xff) * (x))
index 68e5915..cd1f557 100644 (file)
@@ -366,6 +366,8 @@ static inline bool mtd_has_partitions(const struct mtd_info *mtd)
        return !list_empty(&mtd->partitions);
 }
 
+bool mtd_partitions_used(struct mtd_info *master);
+
 int mtd_ooblayout_ecc(struct mtd_info *mtd, int section,
                      struct mtd_oob_region *oobecc);
 int mtd_ooblayout_find_eccregion(struct mtd_info *mtd, int eccbyte,
@@ -562,8 +564,23 @@ unsigned mtd_mmap_capabilities(struct mtd_info *mtd);
 /* drivers/mtd/mtdcore.h */
 int add_mtd_device(struct mtd_info *mtd);
 int del_mtd_device(struct mtd_info *mtd);
+
+#ifdef CONFIG_MTD_PARTITIONS
 int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
 int del_mtd_partitions(struct mtd_info *);
+#else
+static inline int add_mtd_partitions(struct mtd_info *mtd,
+                                    const struct mtd_partition *parts,
+                                    int nparts)
+{
+       return 0;
+}
+
+static inline int del_mtd_partitions(struct mtd_info *mtd)
+{
+       return 0;
+}
+#endif
 
 struct mtd_info *__mtd_next_device(int i);
 #define mtd_for_each_device(mtd)                       \
@@ -581,6 +598,7 @@ int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off,
 void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset,
                          const uint64_t length, uint64_t *len_incl_bad,
                          int *truncated);
+bool mtd_dev_list_updated(void);
 
 /* drivers/mtd/mtd_uboot.c */
 int mtd_search_alternate_name(const char *mtdname, char *altname,
index 5fcbcd2..22b89e4 100644 (file)
  * struct ns16550_platdata - information about a NS16550 port
  *
  * @base:              Base register address
+ * @reg_width:         IO accesses size of registers (in bytes)
  * @reg_shift:         Shift size of registers (0=byte, 1=16bit, 2=32bit...)
  * @clock:             UART base clock speed in Hz
  */
 struct ns16550_platdata {
        unsigned long base;
+       int reg_width;
        int reg_shift;
-       int clock;
        int reg_offset;
+       int clock;
        u32 fcr;
 };
 
index b2b733f..a3afb72 100644 (file)
@@ -240,6 +240,44 @@ int regmap_raw_read_range(struct regmap *map, uint range_num, uint offset,
        regmap_range_get(map, 0, type, member, valp)
 
 /**
+ * regmap_read_poll_timeout - Poll until a condition is met or a timeout occurs
+ *
+ * @map:       Regmap to read from
+ * @addr:      Offset to poll
+ * @val:       Unsigned integer variable to read the value into
+ * @cond:      Break condition (usually involving @val)
+ * @sleep_us:  Maximum time to sleep between reads in us (0 tight-loops).
+ * @timeout_ms:        Timeout in ms, 0 means never timeout
+ *
+ * Returns 0 on success and -ETIMEDOUT upon a timeout or the regmap_read
+ * error return value in case of a error read. In the two former cases,
+ * the last read value at @addr is stored in @val. Must not be called
+ * from atomic context if sleep_us or timeout_us are used.
+ *
+ * This is modelled after the regmap_read_poll_timeout macros in linux but
+ * with millisecond timeout.
+ */
+#define regmap_read_poll_timeout(map, addr, val, cond, sleep_us, timeout_ms) \
+({ \
+       unsigned long __start = get_timer(0); \
+       int __ret; \
+       for (;;) { \
+               __ret = regmap_read((map), (addr), &(val)); \
+               if (__ret) \
+                       break; \
+               if (cond) \
+                       break; \
+               if ((timeout_ms) && get_timer(__start) > (timeout_ms)) { \
+                       __ret = regmap_read((map), (addr), &(val)); \
+                       break; \
+               } \
+               if ((sleep_us)) \
+                       udelay((sleep_us)); \
+       } \
+       __ret ?: ((cond) ? 0 : -ETIMEDOUT); \
+})
+
+/**
  * regmap_update_bits() - Perform a read/modify/write using a mask
  *
  * @map:       The map returned by regmap_init_mem*()
index 0d964d5..2c3a574 100644 (file)
@@ -86,7 +86,7 @@ struct rtc_ops {
 int dm_rtc_get(struct udevice *dev, struct rtc_time *time);
 
 /**
- * dm_rtc_put() - Write a time to an RTC
+ * dm_rtc_set() - Write a time to an RTC
  *
  * @dev:       Device to read from
  * @time:      Time to write into the RTC
index 9133d07..c1a9fee 100644 (file)
@@ -75,6 +75,8 @@ enum serial_par {
 
 #define SERIAL_PAR_SHIFT       0
 #define SERIAL_PAR_MASK                (0x03 << SERIAL_PAR_SHIFT)
+#define SERIAL_SET_PARITY(parity) \
+       ((parity << SERIAL_PAR_SHIFT) & SERIAL_PAR_MASK)
 #define SERIAL_GET_PARITY(config) \
        ((config & SERIAL_PAR_MASK) >> SERIAL_PAR_SHIFT)
 
@@ -87,6 +89,8 @@ enum serial_bits {
 
 #define SERIAL_BITS_SHIFT      2
 #define SERIAL_BITS_MASK       (0x3 << SERIAL_BITS_SHIFT)
+#define SERIAL_SET_BITS(bits) \
+       ((bits << SERIAL_BITS_SHIFT) & SERIAL_BITS_MASK)
 #define SERIAL_GET_BITS(config) \
        ((config & SERIAL_BITS_MASK) >> SERIAL_BITS_SHIFT)
 
@@ -99,6 +103,8 @@ enum serial_stop {
 
 #define SERIAL_STOP_SHIFT      4
 #define SERIAL_STOP_MASK       (0x3 << SERIAL_STOP_SHIFT)
+#define SERIAL_SET_STOP(stop) \
+       ((stop << SERIAL_STOP_SHIFT) & SERIAL_STOP_MASK)
 #define SERIAL_GET_STOP(config) \
        ((config & SERIAL_STOP_MASK) >> SERIAL_STOP_SHIFT)
 
@@ -107,9 +113,43 @@ enum serial_stop {
                      bits << SERIAL_BITS_SHIFT | \
                      stop << SERIAL_STOP_SHIFT)
 
-#define SERIAL_DEFAULT_CONFIG  SERIAL_PAR_NONE << SERIAL_PAR_SHIFT | \
-                               SERIAL_8_BITS << SERIAL_BITS_SHIFT | \
-                               SERIAL_ONE_STOP << SERIAL_STOP_SHIFT
+#define SERIAL_DEFAULT_CONFIG \
+                       (SERIAL_PAR_NONE << SERIAL_PAR_SHIFT | \
+                        SERIAL_8_BITS << SERIAL_BITS_SHIFT | \
+                        SERIAL_ONE_STOP << SERIAL_STOP_SHIFT)
+
+enum serial_chip_type {
+       SERIAL_CHIP_UNKNOWN = -1,
+       SERIAL_CHIP_16550_COMPATIBLE,
+};
+
+enum adr_space_type {
+       SERIAL_ADDRESS_SPACE_MEMORY = 0,
+       SERIAL_ADDRESS_SPACE_IO,
+};
+
+/**
+ * struct serial_device_info - structure to hold serial device info
+ *
+ * @type:      type of the UART chip
+ * @addr_space:        address space to access the registers
+ * @addr:      physical address of the registers
+ * @reg_width: size (in bytes) of the IO accesses to the registers
+ * @reg_offset:        offset to apply to the @addr from the start of the registers
+ * @reg_shift: quantity to shift the register offsets by
+ * @baudrate:  baud rate
+ */
+struct serial_device_info {
+       enum serial_chip_type type;
+       enum adr_space_type addr_space;
+       ulong addr;
+       u8 reg_width;
+       u8 reg_offset;
+       u8 reg_shift;
+       unsigned int baudrate;
+};
+
+#define SERIAL_DEFAULT_ADDRESS 0xBADACCE5
 
 /**
  * struct struct dm_serial_ops - Driver model serial operations
@@ -189,6 +229,19 @@ struct dm_serial_ops {
 #endif
 
        /**
+        * getconfig() - Get the uart configuration
+        * (parity, 5/6/7/8 bits word length, stop bits)
+        *
+        * Get a current config for this device.
+        *
+        * @dev: Device pointer
+        * @parity: parity to use
+        * @bits: bits number to use
+        * @stop: stop bits number to use
+        * @return 0 if OK, -ve on error
+        */
+       int (*getconfig)(struct udevice *dev, uint *serial_config);
+       /**
         * setconfig() - Set up the uart configuration
         * (parity, 5/6/7/8 bits word length, stop bits)
         *
@@ -199,6 +252,13 @@ struct dm_serial_ops {
         * @return 0 if OK, -ve on error
         */
        int (*setconfig)(struct udevice *dev, uint serial_config);
+       /**
+        * getinfo() - Get serial device information
+        *
+        * @dev: Device pointer
+        * @info: struct serial_device_info to fill
+        */
+       int (*getinfo)(struct udevice *dev, struct serial_device_info *info);
 };
 
 /**
index 938627b..92427e5 100644 (file)
@@ -118,13 +118,6 @@ struct spi_slave {
 };
 
 /**
- * Initialization, must be called once on start up.
- *
- * TODO: I don't think we really need this.
- */
-void spi_init(void);
-
-/**
  * spi_do_alloc_slave - Allocate a new SPI slave (internal)
  *
  * Allocate and zero all fields in the spi slave, and set the bus/chip
index ee92832..ff4e627 100644 (file)
@@ -52,9 +52,9 @@ static inline bool u_boot_first_phase(void)
 /* A string name for SPL or TPL */
 #ifdef CONFIG_SPL_BUILD
 # ifdef CONFIG_TPL_BUILD
-#  define SPL_TPL_NAME "tpl"
+#  define SPL_TPL_NAME "TPL"
 # else
-#  define SPL_TPL_NAME "spl"
+#  define SPL_TPL_NAME "SPL"
 # endif
 # define SPL_TPL_PROMPT        SPL_TPL_NAME ": "
 #else
index 3d88b44..f9c2ca2 100644 (file)
@@ -210,6 +210,14 @@ int tpm_open(struct udevice *dev);
 int tpm_close(struct udevice *dev);
 
 /**
+ * tpm_clear_and_reenable() - Force clear the TPM and reenable it
+ *
+ * @dev: TPM device
+ * @return 0 on success, -ve on failure
+ */
+u32 tpm_clear_and_reenable(struct udevice *dev);
+
+/**
  * tpm_get_desc() - Get a text description of the TPM
  *
  * @dev:       Device to check
@@ -274,4 +282,15 @@ static inline cmd_tbl_t *get_tpm2_commands(unsigned int *size)
 }
 #endif
 
+/**
+ * tpm_get_version() - Find the version of a TPM
+ *
+ * This checks the uclass data for a TPM device and returns the version number
+ * it supports.
+ *
+ * @dev: TPM device
+ * @return version number (TPM_V1 or TPMV2)
+ */
+enum tpm_version tpm_get_version(struct udevice *dev);
+
 #endif /* __TPM_COMMON_H */
index 2f2e66d..ae00803 100644 (file)
@@ -128,6 +128,39 @@ enum tpm2_algorithms {
        TPM2_ALG_NULL           = 0x10,
 };
 
+/* NV index attributes */
+enum tpm_index_attrs {
+       TPMA_NV_PPWRITE         = 1UL << 0,
+       TPMA_NV_OWNERWRITE      = 1UL << 1,
+       TPMA_NV_AUTHWRITE       = 1UL << 2,
+       TPMA_NV_POLICYWRITE     = 1UL << 3,
+       TPMA_NV_COUNTER         = 1UL << 4,
+       TPMA_NV_BITS            = 1UL << 5,
+       TPMA_NV_EXTEND          = 1UL << 6,
+       TPMA_NV_POLICY_DELETE   = 1UL << 10,
+       TPMA_NV_WRITELOCKED     = 1UL << 11,
+       TPMA_NV_WRITEALL        = 1UL << 12,
+       TPMA_NV_WRITEDEFINE     = 1UL << 13,
+       TPMA_NV_WRITE_STCLEAR   = 1UL << 14,
+       TPMA_NV_GLOBALLOCK      = 1UL << 15,
+       TPMA_NV_PPREAD          = 1UL << 16,
+       TPMA_NV_OWNERREAD       = 1UL << 17,
+       TPMA_NV_AUTHREAD        = 1UL << 18,
+       TPMA_NV_POLICYREAD      = 1UL << 19,
+       TPMA_NV_NO_DA           = 1UL << 25,
+       TPMA_NV_ORDERLY         = 1UL << 26,
+       TPMA_NV_CLEAR_STCLEAR   = 1UL << 27,
+       TPMA_NV_READLOCKED      = 1UL << 28,
+       TPMA_NV_WRITTEN         = 1UL << 29,
+       TPMA_NV_PLATFORMCREATE  = 1UL << 30,
+       TPMA_NV_READ_STCLEAR    = 1UL << 31,
+
+       TPMA_NV_MASK_READ       = TPMA_NV_PPREAD | TPMA_NV_OWNERREAD |
+                               TPMA_NV_AUTHREAD | TPMA_NV_POLICYREAD,
+       TPMA_NV_MASK_WRITE      = TPMA_NV_PPWRITE | TPMA_NV_OWNERWRITE |
+                                       TPMA_NV_AUTHWRITE | TPMA_NV_POLICYWRITE,
+};
+
 /**
  * Issue a TPM2_Startup command.
  *
index 62e3236..4068de0 100644 (file)
@@ -14,7 +14,7 @@ struct dwc2_plat_otg_data {
        void            *priv;
        int             phy_of_node;
        int             (*phy_control)(int on);
-       unsigned int    regs_phy;
+       uintptr_t       regs_phy;
        uintptr_t       regs_otg;
        unsigned int    usb_phy_ctrl;
        unsigned int    usb_flags;
index 3f9139e..1d57b48 100644 (file)
@@ -61,7 +61,9 @@ enum video_log2_bpp {
  * @font_size: Font size in pixels (0 to use a default value)
  * @fb:                Frame buffer
  * @fb_size:   Frame buffer size
- * @line_length:       Length of each frame buffer line, in bytes
+ * @line_length:       Length of each frame buffer line, in bytes. This can be
+ *             set by the driver, but if not, the uclass will set it after
+ *             probing
  * @colour_fg: Foreground colour (pixel value)
  * @colour_bg: Background colour (pixel value)
  * @flush_dcache:      true to enable flushing of the data cache after
index f21ac24..84b191d 100644 (file)
@@ -9,14 +9,16 @@
  */
 
 #include <common.h>
+#include <mapmem.h>
 #include <physmem.h>
 #include <linux/compiler.h>
 
 phys_addr_t __weak arch_phys_memset(phys_addr_t s, int c, phys_size_t n)
 {
-       void *s_ptr = (void *)(uintptr_t)s;
+       void *s_ptr = map_sysmem(s, n);
 
        assert(((phys_addr_t)(uintptr_t)s) == s);
        assert(((phys_addr_t)(uintptr_t)(s + n)) == s + n);
+
        return (phys_addr_t)(uintptr_t)memset(s_ptr, c, n);
 }
index 6afe59b..86b4f41 100644 (file)
 #include <tpm-common.h>
 #include "tpm-utils.h"
 
+enum tpm_version tpm_get_version(struct udevice *dev)
+{
+       struct tpm_chip_priv *priv = dev_get_uclass_priv(dev);
+
+       return priv->version;
+}
+
 int pack_byte_string(u8 *str, size_t size, const char *format, ...)
 {
        va_list args;
@@ -112,7 +119,7 @@ int unpack_byte_string(const u8 *str, size_t size, const char *format, ...)
 
                if (offset + length > size) {
                        va_end(args);
-                       log_err("Failed to read: size=%d, offset=%x, len=%x\n",
+                       log_err("Failed to read: size=%zd, offset=%zx, len=%zx\n",
                                size, offset, length);
                        return -1;
                }
index f29e62f..3e89f84 100644 (file)
@@ -79,19 +79,19 @@ u32 tpm_clear_and_reenable(struct udevice *dev)
                return ret;
        }
 
-#if IS_ENABLED(CONFIG_TPM_V1)
-       ret = tpm_physical_enable(dev);
-       if (ret != TPM_SUCCESS) {
-               log_err("TPM: Can't set enabled state\n");
-               return ret;
-       }
+       if (tpm_get_version(dev) == TPM_V1) {
+               ret = tpm_physical_enable(dev);
+               if (ret != TPM_SUCCESS) {
+                       log_err("TPM: Can't set enabled state\n");
+                       return ret;
+               }
 
-       ret = tpm_physical_set_deactivated(dev, 0);
-       if (ret != TPM_SUCCESS) {
-               log_err("TPM: Can't set deactivated state\n");
-               return ret;
+               ret = tpm_physical_set_deactivated(dev, 0);
+               if (ret != TPM_SUCCESS) {
+                       log_err("TPM: Can't set deactivated state\n");
+                       return ret;
+               }
        }
-#endif
 
        return TPM_SUCCESS;
 }
index bd14fe2..b8addea 100644 (file)
@@ -750,7 +750,6 @@ CONFIG_G_DNL_UMS_PRODUCT_NUM
 CONFIG_G_DNL_UMS_VENDOR_NUM
 CONFIG_H264_FREQ
 CONFIG_H8300
-CONFIG_HARD_SPI
 CONFIG_HAS_ETH0
 CONFIG_HAS_ETH1
 CONFIG_HAS_ETH2
index 213e0fd..2c9081e 100644 (file)
@@ -19,6 +19,7 @@ obj-$(CONFIG_CLK) += clk.o
 obj-$(CONFIG_DM_ETH) += eth.o
 obj-$(CONFIG_FIRMWARE) += firmware.o
 obj-$(CONFIG_DM_GPIO) += gpio.o
+obj-$(CONFIG_DM_HWSPINLOCK) += hwspinlock.o
 obj-$(CONFIG_DM_I2C) += i2c.o
 obj-$(CONFIG_LED) += led.o
 obj-$(CONFIG_DM_MAILBOX) += mailbox.o
@@ -54,4 +55,5 @@ obj-$(CONFIG_DM_SERIAL) += serial.o
 obj-$(CONFIG_CPU) += cpu.o
 obj-$(CONFIG_TEE) += tee.o
 obj-$(CONFIG_VIRTIO_SANDBOX) += virtio.o
+obj-$(CONFIG_DMA) += dma.o
 endif
diff --git a/test/dm/dma.c b/test/dm/dma.c
new file mode 100644 (file)
index 0000000..b56d177
--- /dev/null
@@ -0,0 +1,123 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Direct Memory Access U-Class tests
+ *
+ * Copyright (C) 2018 Texas Instruments Incorporated <www.ti.com>
+ * Grygorii Strashko <grygorii.strashko@ti.com>
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <dm/test.h>
+#include <dma.h>
+#include <test/ut.h>
+
+static int dm_test_dma_m2m(struct unit_test_state *uts)
+{
+       struct udevice *dev;
+       struct dma dma_m2m;
+       u8 src_buf[512];
+       u8 dst_buf[512];
+       size_t len = 512;
+       int i;
+
+       ut_assertok(uclass_get_device_by_name(UCLASS_DMA, "dma", &dev));
+       ut_assertok(dma_get_by_name(dev, "m2m", &dma_m2m));
+
+       memset(dst_buf, 0, len);
+       for (i = 0; i < len; i++)
+               src_buf[i] = i;
+
+       ut_assertok(dma_memcpy(dst_buf, src_buf, len));
+
+       ut_assertok(memcmp(src_buf, dst_buf, len));
+       return 0;
+}
+DM_TEST(dm_test_dma_m2m, DM_TESTF_SCAN_FDT);
+
+static int dm_test_dma(struct unit_test_state *uts)
+{
+       struct udevice *dev;
+       struct dma dma_tx, dma_rx;
+       u8 src_buf[512];
+       u8 dst_buf[512];
+       void *dst_ptr;
+       size_t len = 512;
+       u32 meta1, meta2;
+       int i;
+
+       ut_assertok(uclass_get_device_by_name(UCLASS_DMA, "dma", &dev));
+
+       ut_assertok(dma_get_by_name(dev, "tx0", &dma_tx));
+       ut_assertok(dma_get_by_name(dev, "rx0", &dma_rx));
+
+       ut_assertok(dma_enable(&dma_tx));
+       ut_assertok(dma_enable(&dma_rx));
+
+       memset(dst_buf, 0, len);
+       for (i = 0; i < len; i++)
+               src_buf[i] = i;
+       meta1 = 0xADADDEAD;
+       meta2 = 0;
+       dst_ptr = &dst_buf;
+
+       ut_assertok(dma_send(&dma_tx, src_buf, len, &meta1));
+
+       ut_asserteq(len, dma_receive(&dma_rx, &dst_ptr, &meta2));
+       ut_asserteq(0xADADDEAD, meta2);
+
+       ut_assertok(dma_disable(&dma_tx));
+       ut_assertok(dma_disable(&dma_rx));
+
+       ut_assertok(dma_free(&dma_tx));
+       ut_assertok(dma_free(&dma_rx));
+       ut_assertok(memcmp(src_buf, dst_buf, len));
+
+       return 0;
+}
+DM_TEST(dm_test_dma, DM_TESTF_SCAN_FDT);
+
+static int dm_test_dma_rx(struct unit_test_state *uts)
+{
+       struct udevice *dev;
+       struct dma dma_tx, dma_rx;
+       u8 src_buf[512];
+       u8 dst_buf[512];
+       void *dst_ptr;
+       size_t len = 512;
+       u32 meta1, meta2;
+       int i;
+
+       ut_assertok(uclass_get_device_by_name(UCLASS_DMA, "dma", &dev));
+
+       ut_assertok(dma_get_by_name(dev, "tx0", &dma_tx));
+       ut_assertok(dma_get_by_name(dev, "rx0", &dma_rx));
+
+       ut_assertok(dma_enable(&dma_tx));
+       ut_assertok(dma_enable(&dma_rx));
+
+       memset(dst_buf, 0, len);
+       for (i = 0; i < len; i++)
+               src_buf[i] = i;
+       meta1 = 0xADADDEAD;
+       meta2 = 0;
+       dst_ptr = NULL;
+
+       ut_assertok(dma_prepare_rcv_buf(&dma_tx, dst_buf, len));
+
+       ut_assertok(dma_send(&dma_tx, src_buf, len, &meta1));
+
+       ut_asserteq(len, dma_receive(&dma_rx, &dst_ptr, &meta2));
+       ut_asserteq(0xADADDEAD, meta2);
+       ut_asserteq_ptr(dst_buf, dst_ptr);
+
+       ut_assertok(dma_disable(&dma_tx));
+       ut_assertok(dma_disable(&dma_rx));
+
+       ut_assertok(dma_free(&dma_tx));
+       ut_assertok(dma_free(&dma_rx));
+       ut_assertok(memcmp(src_buf, dst_buf, len));
+
+       return 0;
+}
+DM_TEST(dm_test_dma_rx, DM_TESTF_SCAN_FDT);
diff --git a/test/dm/hwspinlock.c b/test/dm/hwspinlock.c
new file mode 100644 (file)
index 0000000..09ec38b
--- /dev/null
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
+/*
+ * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <hwspinlock.h>
+#include <asm/state.h>
+#include <asm/test.h>
+#include <dm/test.h>
+#include <test/ut.h>
+
+/* Test that hwspinlock driver functions are called */
+static int dm_test_hwspinlock_base(struct unit_test_state *uts)
+{
+       struct sandbox_state *state = state_get_current();
+       struct hwspinlock hws;
+
+       ut_assertok(uclass_get_device(UCLASS_HWSPINLOCK, 0, &hws.dev));
+       ut_assertnonnull(hws.dev);
+       ut_asserteq(false, state->hwspinlock);
+
+       hws.id = 0;
+       ut_assertok(hwspinlock_lock_timeout(&hws, 1));
+       ut_asserteq(true, state->hwspinlock);
+
+       ut_assertok(hwspinlock_unlock(&hws));
+       ut_asserteq(false, state->hwspinlock);
+
+       ut_assertok(hwspinlock_lock_timeout(&hws, 1));
+       ut_assertok(!hwspinlock_lock_timeout(&hws, 1));
+
+       ut_assertok(hwspinlock_unlock(&hws));
+       ut_assertok(!hwspinlock_unlock(&hws));
+
+       return 0;
+}
+
+DM_TEST(dm_test_hwspinlock_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
index a8d7e68..9a70c15 100644 (file)
@@ -144,3 +144,29 @@ static int dm_test_regmap_getset(struct unit_test_state *uts)
 }
 
 DM_TEST(dm_test_regmap_getset, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
+
+/* Read polling test */
+static int dm_test_regmap_poll(struct unit_test_state *uts)
+{
+       struct udevice *dev;
+       struct regmap *map;
+       uint reg;
+       unsigned long start;
+
+       ut_assertok(uclass_get_device(UCLASS_SYSCON, 0, &dev));
+       map = syscon_get_regmap(dev);
+       ut_assertok_ptr(map);
+
+       start = get_timer(0);
+
+       ut_asserteq(-ETIMEDOUT,
+                   regmap_read_poll_timeout(map, 0, reg,
+                                            (reg == 0xcacafafa),
+                                            1, 5 * CONFIG_SYS_HZ));
+
+       ut_assert(get_timer(start) > (5 * CONFIG_SYS_HZ));
+
+       return 0;
+}
+
+DM_TEST(dm_test_regmap_poll, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
index 5c603e1..19a15d5 100644 (file)
@@ -11,7 +11,9 @@
 
 static int dm_test_serial(struct unit_test_state *uts)
 {
+       struct serial_device_info info_serial = {0};
        struct udevice *dev_serial;
+       uint value_serial;
 
        ut_assertok(uclass_get_device_by_name(UCLASS_SERIAL, "serial",
                                              &dev_serial));
@@ -22,6 +24,16 @@ static int dm_test_serial(struct unit_test_state *uts)
         * sandbox_serial driver
         */
        ut_assertok(serial_setconfig(SERIAL_DEFAULT_CONFIG));
+       ut_assertok(serial_getconfig(&value_serial));
+       ut_assert(value_serial == SERIAL_DEFAULT_CONFIG);
+       ut_assertok(serial_getinfo(&info_serial));
+       ut_assert(info_serial.type == SERIAL_CHIP_UNKNOWN);
+       ut_assert(info_serial.addr == SERIAL_DEFAULT_ADDRESS);
+       /*
+        * test with a parameter which is NULL pointer
+        */
+       ut_asserteq(-EINVAL, serial_getconfig(NULL));
+       ut_asserteq(-EINVAL, serial_getinfo(NULL));
        /*
         * test with a serial config which is not supported by
         * sandbox_serial driver: test with wrong parity
index e1b7bf5..5b2358e 100644 (file)
@@ -102,10 +102,10 @@ static int dm_test_sysreset_get_last(struct unit_test_state *uts)
 
        /* Device 2 is the cold sysreset device */
        ut_assertok(uclass_get_device(UCLASS_SYSRESET, 2, &dev));
-       ut_asserteq(SYSRESET_COLD, sysreset_get_last(dev));
+       ut_asserteq(SYSRESET_POWER, sysreset_get_last(dev));
 
        /* This is device 0, the non-DT one */
-       ut_asserteq(SYSRESET_COLD, sysreset_get_last_walk());
+       ut_asserteq(SYSRESET_POWER, sysreset_get_last_walk());
 
        return 0;
 }
index 0fbd9be..96d2528 100644 (file)
@@ -490,7 +490,6 @@ static int dm_test_fdt_translation(struct unit_test_state *uts)
 }
 DM_TEST(dm_test_fdt_translation, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
 
-/* Test devfdt_remap_addr_index() */
 static int dm_test_fdt_remap_addr_flat(struct unit_test_state *uts)
 {
        struct udevice *dev;
@@ -511,7 +510,46 @@ static int dm_test_fdt_remap_addr_flat(struct unit_test_state *uts)
 DM_TEST(dm_test_fdt_remap_addr_flat,
        DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT | DM_TESTF_FLAT_TREE);
 
-/* Test dev_remap_addr_index() */
+static int dm_test_fdt_remap_addr_index_flat(struct unit_test_state *uts)
+{
+       struct udevice *dev;
+       fdt_addr_t addr;
+       void *paddr;
+
+       ut_assertok(uclass_find_device_by_seq(UCLASS_TEST_DUMMY, 0, true, &dev));
+
+       addr = devfdt_get_addr_index(dev, 0);
+       ut_asserteq(0x8000, addr);
+
+       paddr = map_physmem(addr, 0, MAP_NOCACHE);
+       ut_assertnonnull(paddr);
+       ut_asserteq_ptr(paddr, devfdt_remap_addr_index(dev, 0));
+
+       return 0;
+}
+DM_TEST(dm_test_fdt_remap_addr_index_flat,
+       DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT | DM_TESTF_FLAT_TREE);
+
+static int dm_test_fdt_remap_addr_name_flat(struct unit_test_state *uts)
+{
+       struct udevice *dev;
+       fdt_addr_t addr;
+       void *paddr;
+
+       ut_assertok(uclass_find_device_by_seq(UCLASS_TEST_DUMMY, 0, true, &dev));
+
+       addr = devfdt_get_addr_name(dev, "sandbox-dummy-0");
+       ut_asserteq(0x8000, addr);
+
+       paddr = map_physmem(addr, 0, MAP_NOCACHE);
+       ut_assertnonnull(paddr);
+       ut_asserteq_ptr(paddr, devfdt_remap_addr_name(dev, "sandbox-dummy-0"));
+
+       return 0;
+}
+DM_TEST(dm_test_fdt_remap_addr_name_flat,
+       DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT | DM_TESTF_FLAT_TREE);
+
 static int dm_test_fdt_remap_addr_live(struct unit_test_state *uts)
 {
        struct udevice *dev;
@@ -532,6 +570,46 @@ static int dm_test_fdt_remap_addr_live(struct unit_test_state *uts)
 DM_TEST(dm_test_fdt_remap_addr_live,
        DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
 
+static int dm_test_fdt_remap_addr_index_live(struct unit_test_state *uts)
+{
+       struct udevice *dev;
+       fdt_addr_t addr;
+       void *paddr;
+
+       ut_assertok(uclass_find_device_by_seq(UCLASS_TEST_DUMMY, 0, true, &dev));
+
+       addr = dev_read_addr_index(dev, 0);
+       ut_asserteq(0x8000, addr);
+
+       paddr = map_physmem(addr, 0, MAP_NOCACHE);
+       ut_assertnonnull(paddr);
+       ut_asserteq_ptr(paddr, dev_remap_addr_index(dev, 0));
+
+       return 0;
+}
+DM_TEST(dm_test_fdt_remap_addr_index_live,
+       DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
+
+static int dm_test_fdt_remap_addr_name_live(struct unit_test_state *uts)
+{
+       struct udevice *dev;
+       fdt_addr_t addr;
+       void *paddr;
+
+       ut_assertok(uclass_find_device_by_seq(UCLASS_TEST_DUMMY, 0, true, &dev));
+
+       addr = dev_read_addr_name(dev, "sandbox-dummy-0");
+       ut_asserteq(0x8000, addr);
+
+       paddr = map_physmem(addr, 0, MAP_NOCACHE);
+       ut_assertnonnull(paddr);
+       ut_asserteq_ptr(paddr, dev_remap_addr_name(dev, "sandbox-dummy-0"));
+
+       return 0;
+}
+DM_TEST(dm_test_fdt_remap_addr_name_live,
+       DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
+
 static int dm_test_fdt_livetree_writing(struct unit_test_state *uts)
 {
        struct udevice *dev;
index e044eb3..326b2ac 100644 (file)
@@ -16,7 +16,7 @@ import sys
 import u_boot_spawn
 
 # Regexes for text we expect U-Boot to send to the console.
-pattern_u_boot_spl_signon = re.compile('(U-Boot spl \\d{4}\\.\\d{2}[^\r\n]*\\))')
+pattern_u_boot_spl_signon = re.compile('(U-Boot SPL \\d{4}\\.\\d{2}[^\r\n]*\\))')
 pattern_u_boot_main_signon = re.compile('(U-Boot \\d{4}\\.\\d{2}[^\r\n]*\\))')
 pattern_stop_autoboot_prompt = re.compile('Hit any key to stop autoboot: ')
 pattern_unknown_command = re.compile('Unknown command \'.*\' - try \'help\'')
index 4b35f40..c62ce13 100644 (file)
@@ -502,7 +502,8 @@ class Toolchains:
             trailing /
         """
         stdout = command.Output('tar', 'xvfJ', fname, '-C', dest)
-        return stdout.splitlines()[0][:-1]
+        dirs = stdout.splitlines()[1].split('/')[:2]
+        return '/'.join(dirs)
 
     def TestSettingsHasPath(self, path):
         """Check if buildman will find this toolchain
@@ -516,13 +517,14 @@ class Toolchains:
     def ListArchs(self):
         """List architectures with available toolchains to download"""
         host_arch, archives = self.LocateArchUrl('list')
-        re_arch = re.compile('[-a-z0-9.]*_([^-]*)-.*')
+        re_arch = re.compile('[-a-z0-9.]*[-_]([^-]*)-.*')
         arch_set = set()
         for archive in archives:
             # Remove the host architecture from the start
             arch = re_arch.match(archive[len(host_arch):])
             if arch:
-                arch_set.add(arch.group(1))
+                if arch.group(1) != '2.0' and arch.group(1) != '64':
+                    arch_set.add(arch.group(1))
         return sorted(arch_set)
 
     def FetchAndInstall(self, arch):