Merge tag 'mvebu-dt64-5.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/gclemen...
authorArnd Bergmann <arnd@arndb.de>
Fri, 24 Jul 2020 14:07:45 +0000 (16:07 +0200)
committerArnd Bergmann <arnd@arndb.de>
Fri, 24 Jul 2020 14:07:45 +0000 (16:07 +0200)
mvebu dt64 for 5.9 (part 1)

Add SMMU support for the Marvell AP806 based SoCs (Armada 70xx and
Armada 80xx)

* tag 'mvebu-dt64-5.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/gclement/mvebu:
  arm64: dts: marvell: add SMMU support

1106 files changed:
Documentation/ABI/testing/sysfs-bus-papr-pmem [new file with mode: 0644]
Documentation/arm64/sve.rst
Documentation/devicetree/bindings/arm/al,alpine.yaml [deleted file]
Documentation/devicetree/bindings/arm/amazon,al.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/arm/fsl.yaml
Documentation/devicetree/bindings/arm/mediatek.yaml
Documentation/devicetree/bindings/arm/renesas.yaml
Documentation/devicetree/bindings/arm/rockchip.yaml
Documentation/devicetree/bindings/arm/stm32/st,stm32-syscon.yaml
Documentation/devicetree/bindings/arm/sunxi.yaml
Documentation/devicetree/bindings/arm/tegra.yaml
Documentation/devicetree/bindings/fuse/nvidia,tegra20-fuse.txt
Documentation/devicetree/bindings/gpu/nvidia,gk20a.txt
Documentation/devicetree/bindings/i2c/nvidia,tegra20-i2c.txt
Documentation/devicetree/bindings/mfd/ti,j721e-system-controller.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/power/renesas,rcar-sysc.yaml
Documentation/devicetree/bindings/reset/renesas,rst.yaml
Documentation/devicetree/bindings/thermal/qcom-tsens.yaml
Documentation/devicetree/bindings/usb/dwc2.yaml
Documentation/devicetree/bindings/vendor-prefixes.yaml
Documentation/driver-api/media/v4l2-subdev.rst
Documentation/filesystems/dax.txt
Documentation/filesystems/ext4/verity.rst
Documentation/gpu/amdgpu.rst
Documentation/i2c/smbus-protocol.rst
Documentation/powerpc/papr_hcalls.rst
Documentation/sh/index.rst
Documentation/userspace-api/media/conf_nitpick.py
MAINTAINERS
Makefile
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/am335x-baltos-ir2110.dts
arch/arm/boot/dts/am335x-baltos-ir3220.dts
arch/arm/boot/dts/am335x-baltos-ir5221.dts
arch/arm/boot/dts/am335x-baltos-leds.dtsi
arch/arm/boot/dts/am335x-baltos.dtsi
arch/arm/boot/dts/am335x-bone-common.dtsi
arch/arm/boot/dts/am335x-bone.dts
arch/arm/boot/dts/am335x-boneblack-common.dtsi
arch/arm/boot/dts/am335x-boneblack-wireless.dts
arch/arm/boot/dts/am335x-boneblack.dts
arch/arm/boot/dts/am335x-boneblue.dts
arch/arm/boot/dts/am335x-bonegreen-common.dtsi
arch/arm/boot/dts/am335x-bonegreen-wireless.dts
arch/arm/boot/dts/am335x-bonegreen.dts
arch/arm/boot/dts/am335x-chiliboard.dts
arch/arm/boot/dts/am335x-chilisom.dtsi
arch/arm/boot/dts/am335x-evm.dts
arch/arm/boot/dts/am335x-evmsk.dts
arch/arm/boot/dts/am335x-guardian.dts
arch/arm/boot/dts/am335x-icev2.dts
arch/arm/boot/dts/am335x-lxm.dts
arch/arm/boot/dts/am335x-netcan-plus-1xx.dts
arch/arm/boot/dts/am335x-netcom-plus-2xx.dts
arch/arm/boot/dts/am335x-netcom-plus-8xx.dts
arch/arm/boot/dts/am335x-osd3358-sm-red.dts
arch/arm/boot/dts/am335x-osd335x-common.dtsi
arch/arm/boot/dts/am335x-pdu001.dts
arch/arm/boot/dts/am335x-pocketbeagle.dts
arch/arm/boot/dts/am335x-sancloud-bbe.dts
arch/arm/boot/dts/am33xx-l4.dtsi
arch/arm/boot/dts/am33xx.dtsi
arch/arm/boot/dts/am3517-craneboard.dts
arch/arm/boot/dts/am3517-evm-ui.dtsi
arch/arm/boot/dts/am3517-evm.dts
arch/arm/boot/dts/am3517.dtsi
arch/arm/boot/dts/am3874-iceboard.dts
arch/arm/boot/dts/am4372.dtsi
arch/arm/boot/dts/am437x-gp-evm.dts
arch/arm/boot/dts/am437x-idk-evm.dts
arch/arm/boot/dts/am437x-l4.dtsi
arch/arm/boot/dts/am437x-sk-evm.dts
arch/arm/boot/dts/am43x-epos-evm.dts
arch/arm/boot/dts/am57-pruss.dtsi
arch/arm/boot/dts/am5718.dtsi
arch/arm/boot/dts/am571x-idk.dts
arch/arm/boot/dts/am5728.dtsi
arch/arm/boot/dts/am5729-beagleboneai.dts
arch/arm/boot/dts/am572x-idk-common.dtsi
arch/arm/boot/dts/am572x-idk.dts
arch/arm/boot/dts/am5748.dtsi
arch/arm/boot/dts/am574x-idk.dts
arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi
arch/arm/boot/dts/am57xx-beagle-x15-revb1.dts
arch/arm/boot/dts/am57xx-beagle-x15-revc.dts
arch/arm/boot/dts/am57xx-beagle-x15.dts
arch/arm/boot/dts/am57xx-idk-common.dtsi
arch/arm/boot/dts/arm-realview-eb-mp.dtsi
arch/arm/boot/dts/arm-realview-pb1176.dts
arch/arm/boot/dts/arm-realview-pb11mp.dts
arch/arm/boot/dts/arm-realview-pbx-a9.dts
arch/arm/boot/dts/armada-370-dlink-dns327l.dts
arch/arm/boot/dts/bcm-cygnus.dtsi
arch/arm/boot/dts/bcm-hr2.dtsi
arch/arm/boot/dts/bcm-nsp.dtsi
arch/arm/boot/dts/bcm21664.dtsi
arch/arm/boot/dts/bcm2711-rpi-4-b.dts
arch/arm/boot/dts/bcm2711.dtsi
arch/arm/boot/dts/bcm4708-luxul-xap-1510.dts
arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts
arch/arm/boot/dts/bcm47081-luxul-xap-1410.dts
arch/arm/boot/dts/bcm47081-luxul-xwr-1200.dts
arch/arm/boot/dts/bcm47094-luxul-xap-1610.dts
arch/arm/boot/dts/bcm47094-luxul-xwc-2000.dts
arch/arm/boot/dts/bcm47094-luxul-xwr-3100.dts
arch/arm/boot/dts/bcm47094-luxul-xwr-3150-v1.dts
arch/arm/boot/dts/dra7-dspeve-thermal.dtsi
arch/arm/boot/dts/dra7-evm-common.dtsi
arch/arm/boot/dts/dra7-evm.dts
arch/arm/boot/dts/dra7-iva-thermal.dtsi
arch/arm/boot/dts/dra7-l4.dtsi
arch/arm/boot/dts/dra7.dtsi
arch/arm/boot/dts/dra71-evm.dts
arch/arm/boot/dts/dra71x.dtsi
arch/arm/boot/dts/dra72-evm-common.dtsi
arch/arm/boot/dts/dra72-evm-revc.dts
arch/arm/boot/dts/dra72-evm-tps65917.dtsi
arch/arm/boot/dts/dra72-evm.dts
arch/arm/boot/dts/dra72x-mmc-iodelay.dtsi
arch/arm/boot/dts/dra72x.dtsi
arch/arm/boot/dts/dra74x-mmc-iodelay.dtsi
arch/arm/boot/dts/dra74x.dtsi
arch/arm/boot/dts/dra76-evm.dts
arch/arm/boot/dts/dra76x.dtsi
arch/arm/boot/dts/exynos3250-artik5.dtsi
arch/arm/boot/dts/exynos3250.dtsi
arch/arm/boot/dts/exynos4.dtsi
arch/arm/boot/dts/exynos4210-trats.dts
arch/arm/boot/dts/exynos4210-universal_c210.dts
arch/arm/boot/dts/exynos4210.dtsi
arch/arm/boot/dts/exynos4412-origen.dts
arch/arm/boot/dts/exynos4412.dtsi
arch/arm/boot/dts/exynos5250-arndale.dts
arch/arm/boot/dts/exynos5250.dtsi
arch/arm/boot/dts/exynos5410-pinctrl.dtsi
arch/arm/boot/dts/exynos5410.dtsi
arch/arm/boot/dts/exynos5420-smdk5420.dts
arch/arm/boot/dts/exynos5420.dtsi
arch/arm/boot/dts/exynos5422-odroid-core.dtsi
arch/arm/boot/dts/exynos5800.dtsi
arch/arm/boot/dts/hi3620.dtsi
arch/arm/boot/dts/hisi-x5hd2.dtsi
arch/arm/boot/dts/imx1.dtsi
arch/arm/boot/dts/imx23.dtsi
arch/arm/boot/dts/imx25.dtsi
arch/arm/boot/dts/imx27.dtsi
arch/arm/boot/dts/imx28.dtsi
arch/arm/boot/dts/imx31.dtsi
arch/arm/boot/dts/imx35.dtsi
arch/arm/boot/dts/imx50.dtsi
arch/arm/boot/dts/imx51-ts4800.dts
arch/arm/boot/dts/imx51.dtsi
arch/arm/boot/dts/imx53-kp.dtsi
arch/arm/boot/dts/imx53-m53evk.dts
arch/arm/boot/dts/imx53-ppd.dts
arch/arm/boot/dts/imx53-tqma53.dtsi
arch/arm/boot/dts/imx53-tx53.dtsi
arch/arm/boot/dts/imx53.dtsi
arch/arm/boot/dts/imx6dl-aristainetos_4.dts
arch/arm/boot/dts/imx6dl-aristainetos_7.dts
arch/arm/boot/dts/imx6dl-mamoj.dts
arch/arm/boot/dts/imx6dl-prtrvt.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6dl-prtvt7.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6dl-yapp4-common.dtsi
arch/arm/boot/dts/imx6q-ba16.dtsi
arch/arm/boot/dts/imx6q-dhcom-pdk2.dts
arch/arm/boot/dts/imx6q-display5.dtsi
arch/arm/boot/dts/imx6q-kp.dtsi
arch/arm/boot/dts/imx6q-mccmon6.dts
arch/arm/boot/dts/imx6q-novena.dts
arch/arm/boot/dts/imx6q-pistachio.dts
arch/arm/boot/dts/imx6q-prti6q.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6q-prtwd2.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6q-tbs2910.dts
arch/arm/boot/dts/imx6q-var-dt6customboard.dts
arch/arm/boot/dts/imx6qdl-apalis.dtsi
arch/arm/boot/dts/imx6qdl-apf6dev.dtsi
arch/arm/boot/dts/imx6qdl-aristainetos2.dtsi
arch/arm/boot/dts/imx6qdl-colibri.dtsi
arch/arm/boot/dts/imx6qdl-cubox-i.dtsi
arch/arm/boot/dts/imx6qdl-emcon.dtsi
arch/arm/boot/dts/imx6qdl-gw51xx.dtsi
arch/arm/boot/dts/imx6qdl-gw52xx.dtsi
arch/arm/boot/dts/imx6qdl-gw53xx.dtsi
arch/arm/boot/dts/imx6qdl-gw54xx.dtsi
arch/arm/boot/dts/imx6qdl-gw551x.dtsi
arch/arm/boot/dts/imx6qdl-gw552x.dtsi
arch/arm/boot/dts/imx6qdl-gw553x.dtsi
arch/arm/boot/dts/imx6qdl-gw560x.dtsi
arch/arm/boot/dts/imx6qdl-gw5903.dtsi
arch/arm/boot/dts/imx6qdl-gw5904.dtsi
arch/arm/boot/dts/imx6qdl-gw5907.dtsi
arch/arm/boot/dts/imx6qdl-gw5910.dtsi
arch/arm/boot/dts/imx6qdl-gw5912.dtsi
arch/arm/boot/dts/imx6qdl-gw5913.dtsi
arch/arm/boot/dts/imx6qdl-icore.dtsi
arch/arm/boot/dts/imx6qdl-nit6xlite.dtsi
arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi
arch/arm/boot/dts/imx6qdl-nitrogen6_som2.dtsi
arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
arch/arm/boot/dts/imx6qdl-phytec-mira.dtsi
arch/arm/boot/dts/imx6qdl-prti6q.dtsi [new file with mode: 0644]
arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
arch/arm/boot/dts/imx6qdl-sabresd.dtsi
arch/arm/boot/dts/imx6qdl-savageboard.dtsi
arch/arm/boot/dts/imx6qdl-tx6.dtsi
arch/arm/boot/dts/imx6qdl-zii-rdu2.dtsi
arch/arm/boot/dts/imx6qdl.dtsi
arch/arm/boot/dts/imx6qp-sabreauto.dts
arch/arm/boot/dts/imx6qp-sabresd.dts
arch/arm/boot/dts/imx6sl-evk.dts
arch/arm/boot/dts/imx6sl.dtsi
arch/arm/boot/dts/imx6sll-evk.dts
arch/arm/boot/dts/imx6sll.dtsi
arch/arm/boot/dts/imx6sx-nitrogen6sx.dts
arch/arm/boot/dts/imx6sx-sabreauto.dts
arch/arm/boot/dts/imx6sx-sdb-mqs.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6sx-sdb.dtsi
arch/arm/boot/dts/imx6sx-softing-vining-2000.dts
arch/arm/boot/dts/imx6sx.dtsi
arch/arm/boot/dts/imx6ul-14x14-evk.dtsi
arch/arm/boot/dts/imx6ul-ccimx6ulsbcpro.dts
arch/arm/boot/dts/imx6ul-geam.dts
arch/arm/boot/dts/imx6ul-imx6ull-opos6uldev.dtsi
arch/arm/boot/dts/imx6ul-isiot.dtsi
arch/arm/boot/dts/imx6ul-kontron-n6310-s-43.dts
arch/arm/boot/dts/imx6ul-kontron-n6x1x-s.dtsi
arch/arm/boot/dts/imx6ul-pico.dtsi
arch/arm/boot/dts/imx6ul-tx6ul.dtsi
arch/arm/boot/dts/imx6ul.dtsi
arch/arm/boot/dts/imx6ull-colibri.dtsi
arch/arm/boot/dts/imx6ull-myir-mys-6ulx-eval.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6ull-myir-mys-6ulx.dtsi [new file with mode: 0644]
arch/arm/boot/dts/imx7s.dtsi
arch/arm/boot/dts/imx7ulp.dtsi
arch/arm/boot/dts/kirkwood-b3.dts
arch/arm/boot/dts/ls1021a.dtsi
arch/arm/boot/dts/meson.dtsi
arch/arm/boot/dts/meson8.dtsi
arch/arm/boot/dts/meson8b-ec100.dts
arch/arm/boot/dts/meson8b-odroidc1.dts
arch/arm/boot/dts/meson8b.dtsi
arch/arm/boot/dts/meson8m2.dtsi
arch/arm/boot/dts/mmp2-olpc-xo-1-75.dts
arch/arm/boot/dts/mmp2.dtsi
arch/arm/boot/dts/mmp3-dell-ariel.dts
arch/arm/boot/dts/mmp3.dtsi
arch/arm/boot/dts/omap2.dtsi
arch/arm/boot/dts/omap2420-h4.dts
arch/arm/boot/dts/omap2420.dtsi
arch/arm/boot/dts/omap2430-sdp.dts
arch/arm/boot/dts/omap2430.dtsi
arch/arm/boot/dts/omap3-beagle-xm-ab.dts
arch/arm/boot/dts/omap3-beagle-xm.dts
arch/arm/boot/dts/omap3-beagle.dts
arch/arm/boot/dts/omap3-cpu-thermal.dtsi
arch/arm/boot/dts/omap3-evm-37xx.dts
arch/arm/boot/dts/omap3-evm.dts
arch/arm/boot/dts/omap3-ha-common.dtsi
arch/arm/boot/dts/omap3-ha-lcd.dts
arch/arm/boot/dts/omap3-ha.dts
arch/arm/boot/dts/omap3-ldp.dts
arch/arm/boot/dts/omap3-n900.dts
arch/arm/boot/dts/omap3-tao3530.dtsi
arch/arm/boot/dts/omap3-thunder.dts
arch/arm/boot/dts/omap3-zoom3.dts
arch/arm/boot/dts/omap3.dtsi
arch/arm/boot/dts/omap3430-sdp.dts
arch/arm/boot/dts/omap34xx.dtsi
arch/arm/boot/dts/omap36xx.dtsi
arch/arm/boot/dts/omap4-cpu-thermal.dtsi
arch/arm/boot/dts/omap4-l4-abe.dtsi
arch/arm/boot/dts/omap4-l4.dtsi
arch/arm/boot/dts/omap4-panda-a4.dts
arch/arm/boot/dts/omap4-panda-common.dtsi
arch/arm/boot/dts/omap4-panda-es.dts
arch/arm/boot/dts/omap4-panda.dts
arch/arm/boot/dts/omap4-sdp-es23plus.dts
arch/arm/boot/dts/omap4-sdp.dts
arch/arm/boot/dts/omap4-var-som-om44.dtsi
arch/arm/boot/dts/omap4.dtsi
arch/arm/boot/dts/omap443x.dtsi
arch/arm/boot/dts/omap4460.dtsi
arch/arm/boot/dts/omap5-board-common.dtsi
arch/arm/boot/dts/omap5-core-thermal.dtsi
arch/arm/boot/dts/omap5-gpu-thermal.dtsi
arch/arm/boot/dts/omap5-l4-abe.dtsi
arch/arm/boot/dts/omap5-l4.dtsi
arch/arm/boot/dts/omap5-uevm.dts
arch/arm/boot/dts/omap5.dtsi
arch/arm/boot/dts/qcom-ipq8064-rb3011.dts [new file with mode: 0644]
arch/arm/boot/dts/qcom-ipq8064.dtsi
arch/arm/boot/dts/r7s72100.dtsi
arch/arm/boot/dts/r7s9210.dtsi
arch/arm/boot/dts/r8a73a4.dtsi
arch/arm/boot/dts/r8a7740.dtsi
arch/arm/boot/dts/r8a7742-iwg21d-q7-dbcm-ca.dts [new file with mode: 0644]
arch/arm/boot/dts/r8a7742-iwg21d-q7.dts
arch/arm/boot/dts/r8a7742.dtsi
arch/arm/boot/dts/r8a7743.dtsi
arch/arm/boot/dts/r8a7744.dtsi
arch/arm/boot/dts/r8a7745.dtsi
arch/arm/boot/dts/r8a77470.dtsi
arch/arm/boot/dts/r8a7778.dtsi
arch/arm/boot/dts/r8a7779.dtsi
arch/arm/boot/dts/r8a7790-lager.dts
arch/arm/boot/dts/r8a7790.dtsi
arch/arm/boot/dts/r8a7791-koelsch.dts
arch/arm/boot/dts/r8a7791-porter.dts
arch/arm/boot/dts/r8a7791.dtsi
arch/arm/boot/dts/r8a7792.dtsi
arch/arm/boot/dts/r8a7793-gose.dts
arch/arm/boot/dts/r8a7793.dtsi
arch/arm/boot/dts/r8a7794-alt.dts
arch/arm/boot/dts/r8a7794-silk.dts
arch/arm/boot/dts/r8a7794.dtsi
arch/arm/boot/dts/r9a06g032.dtsi
arch/arm/boot/dts/rk3036.dtsi
arch/arm/boot/dts/rk322x.dtsi
arch/arm/boot/dts/rk3288-rock-pi-n8.dts [new file with mode: 0644]
arch/arm/boot/dts/rk3288-veyron-jaq.dts
arch/arm/boot/dts/rk3288-veyron-jerry.dts
arch/arm/boot/dts/rk3288-veyron-mighty.dts
arch/arm/boot/dts/rk3288-veyron-minnie.dts
arch/arm/boot/dts/rk3288-veyron-pinky.dts
arch/arm/boot/dts/rk3288-veyron-sdmmc.dtsi
arch/arm/boot/dts/rk3288-veyron-speedy.dts
arch/arm/boot/dts/rk3288-vmarc-som.dtsi [new file with mode: 0644]
arch/arm/boot/dts/rk3288-vyasa.dts
arch/arm/boot/dts/rk3288.dtsi
arch/arm/boot/dts/rk3xxx.dtsi
arch/arm/boot/dts/rockchip-radxa-dalang-carrier.dtsi
arch/arm/boot/dts/rv1108.dtsi
arch/arm/boot/dts/s5pv210-aries.dtsi
arch/arm/boot/dts/s5pv210-fascinate4g.dts
arch/arm/boot/dts/s5pv210-pinctrl.dtsi
arch/arm/boot/dts/sh73a0.dtsi
arch/arm/boot/dts/socfpga.dtsi
arch/arm/boot/dts/socfpga_arria10.dtsi
arch/arm/boot/dts/socfpga_arria10_socdk.dtsi
arch/arm/boot/dts/ste-ab8500.dtsi
arch/arm/boot/dts/ste-dbx5x0.dtsi
arch/arm/boot/dts/ste-nomadik-stn8815.dtsi
arch/arm/boot/dts/ste-ux500-samsung-golden.dts
arch/arm/boot/dts/ste-ux500-samsung-skomer.dts
arch/arm/boot/dts/stm32429i-eval.dts
arch/arm/boot/dts/stm32746g-eval.dts
arch/arm/boot/dts/stm32f4-pinctrl.dtsi
arch/arm/boot/dts/stm32f429-disco.dts
arch/arm/boot/dts/stm32f429.dtsi
arch/arm/boot/dts/stm32f469-disco.dts
arch/arm/boot/dts/stm32f746.dtsi
arch/arm/boot/dts/stm32f769-disco.dts
arch/arm/boot/dts/stm32h743-pinctrl.dtsi
arch/arm/boot/dts/stm32h743.dtsi
arch/arm/boot/dts/stm32mp15-pinctrl.dtsi
arch/arm/boot/dts/stm32mp151.dtsi
arch/arm/boot/dts/stm32mp157a-dk1.dts
arch/arm/boot/dts/stm32mp157c-dk2.dts
arch/arm/boot/dts/stm32mp157c-ed1.dts
arch/arm/boot/dts/stm32mp157c-ev1.dts
arch/arm/boot/dts/stm32mp15xx-dkx.dtsi
arch/arm/boot/dts/sun8i-h3-orangepi-zero-plus2.dts
arch/arm/boot/dts/sunxi-bananapi-m2-plus-v1.2.dtsi
arch/arm/boot/dts/sunxi-libretech-all-h3-cc.dtsi
arch/arm/boot/dts/tegra114-dalmore.dts
arch/arm/boot/dts/tegra114-roth.dts
arch/arm/boot/dts/tegra114-tn7.dts
arch/arm/boot/dts/tegra114.dtsi
arch/arm/boot/dts/tegra124-apalis-eval.dts
arch/arm/boot/dts/tegra124-apalis-v1.2-eval.dts
arch/arm/boot/dts/tegra124-apalis-v1.2.dtsi
arch/arm/boot/dts/tegra124-apalis.dtsi
arch/arm/boot/dts/tegra124-jetson-tk1.dts
arch/arm/boot/dts/tegra124-nyan-big.dts
arch/arm/boot/dts/tegra124-nyan-blaze.dts
arch/arm/boot/dts/tegra124-nyan.dtsi
arch/arm/boot/dts/tegra124-venice2.dts
arch/arm/boot/dts/tegra124.dtsi
arch/arm/boot/dts/tegra20-acer-a500-picasso.dts [new file with mode: 0644]
arch/arm/boot/dts/tegra20-colibri-eval-v3.dts
arch/arm/boot/dts/tegra20-colibri-iris.dts
arch/arm/boot/dts/tegra20-cpu-opp-microvolt.dtsi
arch/arm/boot/dts/tegra20-cpu-opp.dtsi
arch/arm/boot/dts/tegra20-harmony.dts
arch/arm/boot/dts/tegra20-medcom-wide.dts
arch/arm/boot/dts/tegra20-paz00.dts
arch/arm/boot/dts/tegra20-plutux.dts
arch/arm/boot/dts/tegra20-seaboard.dts
arch/arm/boot/dts/tegra20-tamonten.dtsi
arch/arm/boot/dts/tegra20-tec.dts
arch/arm/boot/dts/tegra20-trimslice.dts
arch/arm/boot/dts/tegra20-ventana.dts
arch/arm/boot/dts/tegra20.dtsi
arch/arm/boot/dts/tegra30-apalis-eval.dts
arch/arm/boot/dts/tegra30-apalis-v1.1-eval.dts
arch/arm/boot/dts/tegra30-apalis-v1.1.dtsi
arch/arm/boot/dts/tegra30-apalis.dtsi
arch/arm/boot/dts/tegra30-asus-nexus7-grouper-E1565.dts [new file with mode: 0644]
arch/arm/boot/dts/tegra30-asus-nexus7-grouper-PM269.dts [new file with mode: 0644]
arch/arm/boot/dts/tegra30-asus-nexus7-grouper-common.dtsi [new file with mode: 0644]
arch/arm/boot/dts/tegra30-asus-nexus7-grouper-maxim-pmic.dtsi [new file with mode: 0644]
arch/arm/boot/dts/tegra30-asus-nexus7-grouper-memory-timings.dtsi [new file with mode: 0644]
arch/arm/boot/dts/tegra30-asus-nexus7-grouper-ti-pmic.dtsi [new file with mode: 0644]
arch/arm/boot/dts/tegra30-asus-nexus7-grouper.dtsi [new file with mode: 0644]
arch/arm/boot/dts/tegra30-asus-nexus7-tilapia-E1565.dts [new file with mode: 0644]
arch/arm/boot/dts/tegra30-asus-nexus7-tilapia-memory-timings.dtsi [new file with mode: 0644]
arch/arm/boot/dts/tegra30-asus-nexus7-tilapia.dtsi [new file with mode: 0644]
arch/arm/boot/dts/tegra30-beaver.dts
arch/arm/boot/dts/tegra30-cardhu-a02.dts
arch/arm/boot/dts/tegra30-cardhu-a04.dts
arch/arm/boot/dts/tegra30-cardhu.dtsi
arch/arm/boot/dts/tegra30-colibri-eval-v3.dts
arch/arm/boot/dts/tegra30-colibri.dtsi
arch/arm/boot/dts/tegra30-cpu-opp-microvolt.dtsi
arch/arm/boot/dts/tegra30-cpu-opp.dtsi
arch/arm/boot/dts/tegra30.dtsi
arch/arm/boot/dts/twl6030_omap4.dtsi
arch/arm/boot/dts/uniphier-ld4-ref.dts
arch/arm/boot/dts/uniphier-ld6b-ref.dts
arch/arm/boot/dts/uniphier-pinctrl.dtsi
arch/arm/boot/dts/uniphier-pro4-ace.dts
arch/arm/boot/dts/uniphier-pro4-ref.dts
arch/arm/boot/dts/uniphier-pro4-sanji.dts
arch/arm/boot/dts/uniphier-pro5.dtsi
arch/arm/boot/dts/uniphier-pxs2-gentil.dts
arch/arm/boot/dts/uniphier-pxs2-vodka.dts
arch/arm/boot/dts/uniphier-sld8-ref.dts
arch/arm/boot/dts/uniphier-support-card.dtsi
arch/arm/boot/dts/vf610-zii-cfu1.dts
arch/arm/boot/dts/vf610-zii-dev-rev-c.dts
arch/arm/boot/dts/vf610-zii-dev.dtsi
arch/arm/boot/dts/vf610-zii-scu4-aib.dts
arch/arm/boot/dts/vf610-zii-spb4.dts
arch/arm/boot/dts/vf610-zii-ssmb-dtu.dts
arch/arm/boot/dts/vf610-zii-ssmb-spu3.dts
arch/arm/boot/dts/vf610.dtsi
arch/arm/boot/dts/vfxxx.dtsi
arch/arm/kernel/ftrace.c
arch/arm/kernel/kgdb.c
arch/arm/kernel/traps.c
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
arch/arm/mach-omap2/omap_hwmod_43xx_data.c
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
arch/arm/mach-omap2/omap_hwmod_54xx_data.c
arch/arm/mach-omap2/omap_hwmod_7xx_data.c
arch/arm/mm/alignment.c
arch/arm64/Kconfig
arch/arm64/Kconfig.debug
arch/arm64/Makefile
arch/arm64/boot/dts/Makefile
arch/arm64/boot/dts/al/Makefile [deleted file]
arch/arm64/boot/dts/al/alpine-v2-evp.dts [deleted file]
arch/arm64/boot/dts/al/alpine-v2.dtsi [deleted file]
arch/arm64/boot/dts/allwinner/Makefile
arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts
arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dts [new file with mode: 0644]
arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi
arch/arm64/boot/dts/allwinner/sun50i-h5-bananapi-m2-plus-v1.2.dts
arch/arm64/boot/dts/allwinner/sun50i-h5-cpu-opp.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/allwinner/sun50i-h5-libretech-all-h3-cc.dts
arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-zero-plus2.dts
arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi
arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
arch/arm64/boot/dts/amazon/Makefile [new file with mode: 0644]
arch/arm64/boot/dts/amazon/alpine-v2-evp.dts [new file with mode: 0644]
arch/arm64/boot/dts/amazon/alpine-v2.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/amazon/alpine-v3-evp.dts [new file with mode: 0644]
arch/arm64/boot/dts/amazon/alpine-v3.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/amlogic/meson-axg.dtsi
arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
arch/arm64/boot/dts/amlogic/meson-gx.dtsi
arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi
arch/arm64/boot/dts/exynos/exynos5433.dtsi
arch/arm64/boot/dts/exynos/exynos7-espresso.dts
arch/arm64/boot/dts/exynos/exynos7.dtsi
arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi
arch/arm64/boot/dts/freescale/fsl-ls1028a-qds.dts
arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
arch/arm64/boot/dts/freescale/fsl-ls1043a-qds.dts
arch/arm64/boot/dts/freescale/fsl-ls1043a-rdb.dts
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi
arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi
arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi
arch/arm64/boot/dts/freescale/fsl-lx2160a-qds.dts
arch/arm64/boot/dts/freescale/fsl-lx2160a-rdb.dts
arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi
arch/arm64/boot/dts/freescale/imx8mm.dtsi
arch/arm64/boot/dts/freescale/imx8mn-evk.dts
arch/arm64/boot/dts/freescale/imx8mn-evk.dtsi
arch/arm64/boot/dts/freescale/imx8mn.dtsi
arch/arm64/boot/dts/freescale/imx8mp.dtsi
arch/arm64/boot/dts/freescale/imx8mq-zii-ultra.dtsi
arch/arm64/boot/dts/freescale/imx8mq.dtsi
arch/arm64/boot/dts/freescale/imx8qxp.dtsi
arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
arch/arm64/boot/dts/hisilicon/hi3660.dtsi
arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts
arch/arm64/boot/dts/hisilicon/hi6220.dtsi
arch/arm64/boot/dts/intel/socfpga_agilex.dtsi
arch/arm64/boot/dts/intel/socfpga_agilex_socdk.dts
arch/arm64/boot/dts/mediatek/Makefile
arch/arm64/boot/dts/mediatek/mt6358.dtsi
arch/arm64/boot/dts/mediatek/mt8173.dtsi
arch/arm64/boot/dts/mediatek/mt8183-evb.dts
arch/arm64/boot/dts/mediatek/mt8183-kukui-krane-sku176.dts [new file with mode: 0644]
arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/mediatek/mt8183.dtsi
arch/arm64/boot/dts/nvidia/Makefile
arch/arm64/boot/dts/nvidia/tegra132-norrin.dts
arch/arm64/boot/dts/nvidia/tegra132.dtsi
arch/arm64/boot/dts/nvidia/tegra186-p2771-0000.dts
arch/arm64/boot/dts/nvidia/tegra186-p3310.dtsi
arch/arm64/boot/dts/nvidia/tegra186.dtsi
arch/arm64/boot/dts/nvidia/tegra194-p2888.dtsi
arch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts
arch/arm64/boot/dts/nvidia/tegra194-p3509-0000+p3668-0000.dts [new file with mode: 0644]
arch/arm64/boot/dts/nvidia/tegra194-p3668-0000.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/nvidia/tegra194.dtsi
arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
arch/arm64/boot/dts/nvidia/tegra210-p2371-2180.dts
arch/arm64/boot/dts/nvidia/tegra210-p2530.dtsi
arch/arm64/boot/dts/nvidia/tegra210-p2597.dtsi
arch/arm64/boot/dts/nvidia/tegra210-p2894.dtsi
arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dts
arch/arm64/boot/dts/nvidia/tegra210-smaug.dts
arch/arm64/boot/dts/nvidia/tegra210.dtsi
arch/arm64/boot/dts/qcom/Makefile
arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
arch/arm64/boot/dts/qcom/ipq8074-hk01.dts
arch/arm64/boot/dts/qcom/ipq8074.dtsi
arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
arch/arm64/boot/dts/qcom/msm8916-pins.dtsi
arch/arm64/boot/dts/qcom/msm8916-samsung-a2015-common.dtsi
arch/arm64/boot/dts/qcom/msm8916-samsung-a3u-eur.dts
arch/arm64/boot/dts/qcom/msm8916-samsung-a5u-eur.dts
arch/arm64/boot/dts/qcom/msm8916.dtsi
arch/arm64/boot/dts/qcom/msm8994-angler-rev-101.dts
arch/arm64/boot/dts/qcom/msm8994-pins.dtsi [deleted file]
arch/arm64/boot/dts/qcom/msm8994.dtsi
arch/arm64/boot/dts/qcom/msm8998-clamshell.dtsi
arch/arm64/boot/dts/qcom/msm8998-lenovo-miix-630.dts
arch/arm64/boot/dts/qcom/msm8998-mtp.dtsi
arch/arm64/boot/dts/qcom/pm660.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/qcom/pm660l.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/qcom/pm8009.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/qcom/pm8150.dtsi
arch/arm64/boot/dts/qcom/pm8150b.dtsi
arch/arm64/boot/dts/qcom/pm8150l.dtsi
arch/arm64/boot/dts/qcom/pmi8998.dtsi
arch/arm64/boot/dts/qcom/qcs404.dtsi
arch/arm64/boot/dts/qcom/sc7180-idp.dts
arch/arm64/boot/dts/qcom/sc7180.dtsi
arch/arm64/boot/dts/qcom/sdm630-sony-xperia-ganges-kirin.dts [new file with mode: 0644]
arch/arm64/boot/dts/qcom/sdm630-sony-xperia-ganges.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-discovery.dts [new file with mode: 0644]
arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-pioneer.dts [new file with mode: 0644]
arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-voyager.dts [new file with mode: 0644]
arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/qcom/sdm630.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/qcom/sdm636-sony-xperia-ganges-mermaid.dts [new file with mode: 0644]
arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi
arch/arm64/boot/dts/qcom/sdm845.dtsi
arch/arm64/boot/dts/qcom/sm8150-mtp.dts
arch/arm64/boot/dts/qcom/sm8150.dtsi
arch/arm64/boot/dts/qcom/sm8250-mtp.dts
arch/arm64/boot/dts/qcom/sm8250.dtsi
arch/arm64/boot/dts/renesas/Makefile
arch/arm64/boot/dts/renesas/beacon-renesom-baseboard.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/renesas/beacon-renesom-som.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/renesas/cat875.dtsi
arch/arm64/boot/dts/renesas/hihope-common.dtsi
arch/arm64/boot/dts/renesas/hihope-rev2.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/renesas/hihope-rev4.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/renesas/hihope-rzg2-ex-lvds.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/renesas/hihope-rzg2-ex.dtsi
arch/arm64/boot/dts/renesas/r8a774a1-beacon-rzg2m-kit.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-ex-idk-1110wr.dts
arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-ex.dts
arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-rev2-ex-idk-1110wr.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-rev2-ex.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-rev2.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m.dts
arch/arm64/boot/dts/renesas/r8a774a1.dtsi
arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-ex-idk-1110wr.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-ex.dts
arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-rev2-ex-idk-1110wr.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-rev2-ex.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-rev2.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n.dts
arch/arm64/boot/dts/renesas/r8a774b1.dtsi
arch/arm64/boot/dts/renesas/r8a774c0.dtsi
arch/arm64/boot/dts/renesas/r8a774e1-hihope-rzg2h-ex.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a774e1-hihope-rzg2h.dts [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a774e1.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/renesas/r8a77951.dtsi
arch/arm64/boot/dts/renesas/r8a77960.dtsi
arch/arm64/boot/dts/renesas/r8a77961.dtsi
arch/arm64/boot/dts/renesas/r8a77965.dtsi
arch/arm64/boot/dts/renesas/r8a77970-eagle.dts
arch/arm64/boot/dts/renesas/r8a77970-v3msk.dts
arch/arm64/boot/dts/renesas/r8a77970.dtsi
arch/arm64/boot/dts/renesas/r8a77980-condor.dts
arch/arm64/boot/dts/renesas/r8a77980-v3hsk.dts
arch/arm64/boot/dts/renesas/r8a77980.dtsi
arch/arm64/boot/dts/renesas/r8a77990-ebisu.dts
arch/arm64/boot/dts/renesas/r8a77990.dtsi
arch/arm64/boot/dts/renesas/r8a77995.dtsi
arch/arm64/boot/dts/renesas/salvator-common.dtsi
arch/arm64/boot/dts/rockchip/px30-evb.dts
arch/arm64/boot/dts/rockchip/px30.dtsi
arch/arm64/boot/dts/rockchip/rk3308.dtsi
arch/arm64/boot/dts/rockchip/rk3326-odroid-go2.dts
arch/arm64/boot/dts/rockchip/rk3328-evb.dts
arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
arch/arm64/boot/dts/rockchip/rk3328.dtsi
arch/arm64/boot/dts/rockchip/rk3368-lion-haikou.dts
arch/arm64/boot/dts/rockchip/rk3368-lion.dtsi
arch/arm64/boot/dts/rockchip/rk3368.dtsi
arch/arm64/boot/dts/rockchip/rk3399-firefly.dts
arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi
arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi
arch/arm64/boot/dts/rockchip/rk3399-hugsun-x99.dts
arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi
arch/arm64/boot/dts/rockchip/rk3399-leez-p710.dts
arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi
arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts
arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi
arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dtsi
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dts
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi
arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dtsi
arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
arch/arm64/boot/dts/rockchip/rk3399.dtsi
arch/arm64/boot/dts/rockchip/rk3399pro-rock-pi-n10.dts
arch/arm64/boot/dts/rockchip/rk3399pro-vmarc-som.dtsi
arch/arm64/boot/dts/socionext/uniphier-ld11-global.dts
arch/arm64/boot/dts/socionext/uniphier-ld11-ref.dts
arch/arm64/boot/dts/socionext/uniphier-ld20-akebi96.dts
arch/arm64/boot/dts/socionext/uniphier-ld20-global.dts
arch/arm64/boot/dts/socionext/uniphier-ld20-ref.dts
arch/arm64/boot/dts/socionext/uniphier-ld20.dtsi
arch/arm64/boot/dts/socionext/uniphier-pxs3-ref.dts
arch/arm64/boot/dts/socionext/uniphier-pxs3.dtsi
arch/arm64/boot/dts/ti/Makefile
arch/arm64/boot/dts/ti/k3-am65-main.dtsi
arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi
arch/arm64/boot/dts/ti/k3-am65-wakeup.dtsi
arch/arm64/boot/dts/ti/k3-am65.dtsi
arch/arm64/boot/dts/ti/k3-am654-base-board.dts
arch/arm64/boot/dts/ti/k3-am654.dtsi
arch/arm64/boot/dts/ti/k3-j721e-common-proc-board.dts
arch/arm64/boot/dts/ti/k3-j721e-main.dtsi
arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi
arch/arm64/boot/dts/ti/k3-j721e-som-p0.dtsi
arch/arm64/boot/dts/ti/k3-j721e.dtsi
arch/arm64/configs/defconfig
arch/arm64/include/asm/pgtable.h
arch/arm64/kernel/fpsimd.c
arch/arm64/kernel/hw_breakpoint.c
arch/arm64/kernel/insn.c
arch/arm64/kernel/machine_kexec_file.c
arch/arm64/kernel/traps.c
arch/arm64/mm/init.c
arch/arm64/mm/mmu.c
arch/csky/kernel/ftrace.c
arch/ia64/include/asm/sections.h
arch/ia64/kernel/ftrace.c
arch/ia64/kernel/unwind_i.h
arch/mips/kernel/kprobes.c
arch/nds32/kernel/ftrace.c
arch/parisc/kernel/ftrace.c
arch/parisc/kernel/kgdb.c
arch/parisc/kernel/process.c
arch/parisc/lib/memcpy.c
arch/powerpc/include/asm/nohash/32/pgtable.h
arch/powerpc/include/asm/sections.h
arch/powerpc/include/uapi/asm/papr_pdsm.h [new file with mode: 0644]
arch/powerpc/kernel/exceptions-64s.S
arch/powerpc/kernel/kgdb.c
arch/powerpc/kernel/kprobes.c
arch/powerpc/kernel/module_64.c
arch/powerpc/kernel/process.c
arch/powerpc/kernel/trace/ftrace.c
arch/powerpc/kvm/book3s_64_mmu_radix.c
arch/powerpc/lib/inst.c
arch/powerpc/oprofile/backtrace.c
arch/powerpc/perf/callchain_32.c
arch/powerpc/perf/callchain_64.c
arch/powerpc/perf/core-book3s.c
arch/powerpc/platforms/cell/spu_callbacks.c
arch/powerpc/platforms/pseries/papr_scm.c
arch/powerpc/sysdev/fsl_pci.c
arch/riscv/include/asm/cmpxchg.h
arch/riscv/kernel/ftrace.c
arch/riscv/kernel/kgdb.c
arch/riscv/kernel/patch.c
arch/riscv/kernel/sys_riscv.c
arch/riscv/kernel/traps.c
arch/riscv/mm/pageattr.c
arch/s390/Kconfig
arch/s390/crypto/prng.c
arch/s390/include/asm/syscall.h
arch/s390/include/asm/vdso.h
arch/s390/kernel/asm-offsets.c
arch/s390/kernel/entry.S
arch/s390/kernel/ftrace.c
arch/s390/kernel/ipl.c
arch/s390/kernel/ptrace.c
arch/s390/kernel/time.c
arch/s390/kernel/uv.c
arch/s390/kernel/vdso64/Makefile
arch/s390/kernel/vdso64/clock_getres.S
arch/s390/mm/fault.c
arch/sh/kernel/ftrace.c
arch/sh/kernel/traps.c
arch/um/kernel/maccess.c
arch/x86/include/asm/ptrace.h
arch/x86/kernel/dumpstack.c
arch/x86/kernel/ftrace.c
arch/x86/kernel/kgdb.c
arch/x86/kernel/kprobes/core.c
arch/x86/kernel/kprobes/opt.c
arch/x86/kernel/probe_roms.c
arch/x86/kernel/traps.c
arch/x86/mm/fault.c
arch/x86/mm/init_32.c
arch/x86/mm/maccess.c
arch/x86/pci/pcbios.c
arch/x86/platform/intel-mid/sfi.c
arch/x86/purgatory/Makefile
arch/x86/xen/enlighten_pv.c
block/blk-mq-tag.c
block/blk-mq.c
block/partitions/ldm.c
block/partitions/ldm.h
crypto/algboss.c
crypto/algif_skcipher.c
crypto/drbg.c
drivers/amba/tegra-ahb.c
drivers/ata/libata-core.c
drivers/ata/libata-scsi.c
drivers/ata/sata_rcar.c
drivers/block/drbd/drbd_int.h
drivers/block/drbd/drbd_protocol.h
drivers/block/loop.c
drivers/block/rbd.c
drivers/bus/ti-sysc.c
drivers/char/hw_random/ks-sa-rng.c
drivers/char/mem.c
drivers/clk/imx/clk-imx8mp.c
drivers/clk/imx/clk-vf610.c
drivers/crypto/caam/Kconfig
drivers/crypto/caam/ctrl.c
drivers/crypto/caam/desc.h
drivers/crypto/caam/pdb.h
drivers/crypto/ccp/sev-dev.c
drivers/crypto/chelsio/chcr_crypto.h
drivers/crypto/hisilicon/sgl.c
drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
drivers/dio/dio.c
drivers/dma/milbeaut-hdmac.c
drivers/dma/milbeaut-xdmac.c
drivers/dma/moxart-dma.c
drivers/dma/tegra20-apb-dma.c
drivers/dma/ti/edma.c
drivers/dma/ti/k3-udma.c
drivers/dma/timb_dma.c
drivers/firewire/core-cdev.c
drivers/firewire/core-transaction.c
drivers/firewire/core.h
drivers/firewire/nosy.c
drivers/firewire/ohci.c
drivers/firmware/dmi-sysfs.c
drivers/firmware/google/memconsole-coreboot.c
drivers/firmware/google/vpd.c
drivers/firmware/iscsi_ibft.c
drivers/firmware/pcdp.h
drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
drivers/gpu/drm/amd/amdkfd/kfd_priv.h
drivers/gpu/drm/amd/display/dc/dsc/Makefile
drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c
drivers/gpu/drm/amd/display/dc/dsc/rc_calc.c
drivers/gpu/drm/amd/display/dc/dsc/rc_calc.h
drivers/gpu/drm/amd/display/dc/dsc/rc_calc_dpi.c
drivers/gpu/drm/amd/display/modules/color/color_gamma.c
drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c
drivers/gpu/drm/drm_encoder_slave.c
drivers/gpu/drm/i915/display/intel_ddi.c
drivers/gpu/drm/i915/display/intel_dp_mst.c
drivers/gpu/drm/i915/gt/intel_engine_cs.c
drivers/gpu/drm/i915/gt/intel_lrc.c
drivers/gpu/drm/i915/gt/intel_ring.c
drivers/gpu/drm/i915/gt/intel_workarounds.c
drivers/gpu/drm/i915/gt/selftest_hangcheck.c
drivers/gpu/drm/i915/gt/selftest_lrc.c
drivers/gpu/drm/i915/gt/selftest_mocs.c
drivers/gpu/drm/i915/gt/selftest_ring.c [new file with mode: 0644]
drivers/gpu/drm/i915/gt/selftest_rps.c
drivers/gpu/drm/i915/gt/selftest_timeline.c
drivers/gpu/drm/i915/gt/selftest_workarounds.c
drivers/gpu/drm/i915/i915_irq.c
drivers/gpu/drm/i915/i915_pmu.c
drivers/gpu/drm/i915/i915_priolist_types.h
drivers/gpu/drm/i915/i915_reg.h
drivers/gpu/drm/i915/intel_pm.c
drivers/gpu/drm/i915/selftests/i915_mock_selftests.h
drivers/hwtracing/stm/policy.c
drivers/hwtracing/stm/stm.h
drivers/i2c/i2c-core-base.c
drivers/i2c/i2c-core-smbus.c
drivers/input/serio/hp_sdc.c
drivers/md/bcache/btree.c
drivers/md/bcache/super.c
drivers/media/usb/pwc/pwc.h
drivers/mfd/mt6360-core.c
drivers/misc/kgdbts.c
drivers/net/bareudp.c
drivers/net/can/peak_canfd/peak_pciefd_main.c
drivers/net/dsa/sja1105/sja1105_ptp.c
drivers/net/ethernet/atheros/alx/main.c
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/cadence/macb_main.c
drivers/net/ethernet/ibm/ibmvnic.c
drivers/net/ethernet/intel/e1000/e1000_main.c
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
drivers/net/ethernet/mediatek/mtk_star_emac.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.h
drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c
drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c
drivers/net/ethernet/microchip/lan743x_main.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
drivers/net/ethernet/rocker/rocker_main.c
drivers/net/ethernet/xilinx/xilinx_axienet.h
drivers/nvdimm/region_devs.c
drivers/oprofile/cpu_buffer.h
drivers/phy/samsung/phy-samsung-usb2.h
drivers/pinctrl/freescale/pinctrl-imx.c
drivers/pinctrl/pinctrl-mcp23s08_spi.c
drivers/pinctrl/pinctrl-single.c
drivers/pinctrl/qcom/pinctrl-ipq6018.c
drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
drivers/pinctrl/tegra/pinctrl-tegra.c
drivers/rapidio/rio-scan.c
drivers/s390/cio/qdio.h
drivers/s390/cio/qdio_debug.c
drivers/s390/cio/qdio_main.c
drivers/s390/crypto/zcrypt_ep11misc.c
drivers/s390/virtio/virtio_ccw.c
drivers/scsi/aic94xx/aic94xx_init.c
drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
drivers/scsi/ipr.c
drivers/scsi/isci/init.c
drivers/scsi/mvsas/mv_init.c
drivers/scsi/pm8001/pm8001_init.c
drivers/scsi/ufs/ufs_bsg.c
drivers/soc/ti/knav_qmss.h
drivers/video/backlight/tosa_lcd.c
drivers/video/fbdev/hpfb.c
drivers/w1/w1_netlink.h
fs/afs/dir.c
fs/afs/dir_silly.c
fs/afs/file.c
fs/afs/flock.c
fs/afs/fs_operation.c
fs/afs/fs_probe.c
fs/afs/inode.c
fs/afs/internal.h
fs/afs/main.c
fs/afs/misc.c
fs/afs/server.c
fs/afs/write.c
fs/afs/yfsclient.c
fs/aio.c
fs/block_dev.c
fs/ext4/Makefile
fs/ext4/dir.c
fs/ext4/ext4.h
fs/ext4/extents.c
fs/ext4/ialloc.c
fs/ext4/inode.c
fs/ext4/ioctl.c
fs/ext4/mballoc.c
fs/ext4/super.c
fs/ext4/verity.c
fs/ext4/xattr.c
fs/ext4/xattr.h
fs/ext4/xattr_hurd.c [new file with mode: 0644]
fs/io-wq.c
fs/io-wq.h
fs/io_uring.c
fs/jbd2/journal.c
fs/jffs2/nodelist.h
fs/jffs2/summary.h
fs/proc/bootconfig.c
fs/proc/kcore.c
fs/squashfs/squashfs_fs.h
include/asm-generic/hugetlb.h
include/drm/drm_displayid.h
include/dt-bindings/clock/r8a774e1-cpg-mssr.h [new file with mode: 0644]
include/dt-bindings/clock/vf610-clock.h
include/dt-bindings/mux/mux-j721e-wiz.h [new file with mode: 0644]
include/dt-bindings/pinctrl/k3.h
include/dt-bindings/power/r8a774e1-sysc.h [new file with mode: 0644]
include/keys/encrypted-type.h
include/keys/rxrpc-type.h
include/linux/can/skb.h
include/linux/cb710.h
include/linux/ceph/libceph.h
include/linux/compiler_types.h
include/linux/dmaengine.h
include/linux/fs.h
include/linux/fscache-cache.h
include/linux/i2c.h
include/linux/jbd2.h
include/linux/kexec.h
include/linux/kprobes.h
include/linux/kvm_host.h
include/linux/libata.h
include/linux/overflow.h
include/linux/pgtable.h
include/linux/psp-sev.h
include/linux/sctp.h
include/linux/tifm.h
include/linux/uaccess.h
include/net/netfilter/nf_flow_table.h
include/net/tc_act/tc_ct.h
include/trace/events/block.h
include/uapi/linux/fs.h
include/uapi/linux/ndctl.h
include/uapi/linux/xattr.h
kernel/debug/debug_core.c
kernel/debug/gdbstub.c
kernel/debug/kdb/kdb_main.c
kernel/debug/kdb/kdb_support.c
kernel/dma/Kconfig
kernel/dma/pool.c
kernel/kprobes.c
kernel/kthread.c
kernel/trace/blktrace.c
kernel/trace/bpf_trace.c
kernel/trace/ftrace.c
kernel/trace/trace.c
kernel/trace/trace.h
kernel/trace/trace_entries.h
kernel/trace/trace_export.c
kernel/trace/trace_functions.c
kernel/trace/trace_kprobe.c
kernel/trace/trace_probe.c
kernel/trace/trace_probe.h
kernel/workqueue.c
lib/Kconfig.debug
lib/seq_buf.c
lib/test_lockup.c
lib/test_objagg.c
mm/debug.c
mm/gup.c
mm/maccess.c
mm/rodata_test.c
mm/slub.c
net/ceph/ceph_common.c
net/ceph/osd_client.c
net/ipv4/tcp_input.c
net/ipv6/mcast.c
net/mptcp/protocol.h
net/mptcp/subflow.c
net/netfilter/nf_conntrack_netlink.c
net/netfilter/nf_flow_table_core.c
net/netfilter/nf_tables_api.c
net/netfilter/nft_set_pipapo.c
net/netfilter/nft_set_rbtree.c
net/rds/ib.h
net/sched/act_ct.c
samples/Kconfig
samples/ftrace/sample-trace-array.c
samples/mei/mei-amt-version.c
samples/watch_queue/Makefile
scripts/Kbuild.include
scripts/Kconfig.include
scripts/decode_stacktrace.sh
scripts/headers_install.sh
scripts/recordmcount.h
security/integrity/integrity.h
security/selinux/ss/conditional.c
security/selinux/ss/services.c
sound/soc/sof/probe.h
tools/arch/x86/include/asm/cpufeatures.h
tools/arch/x86/include/asm/msr-index.h
tools/arch/x86/include/uapi/asm/kvm.h
tools/arch/x86/include/uapi/asm/unistd.h
tools/arch/x86/include/uapi/asm/vmx.h
tools/bootconfig/main.c
tools/bootconfig/test-bootconfig.sh
tools/include/uapi/asm-generic/unistd.h
tools/include/uapi/drm/i915_drm.h
tools/include/uapi/linux/fcntl.h
tools/include/uapi/linux/fs.h
tools/include/uapi/linux/fscrypt.h
tools/include/uapi/linux/kvm.h
tools/include/uapi/linux/stat.h
tools/include/uapi/linux/vhost.h
tools/lib/traceevent/event-parse.c
tools/perf/Makefile.config
tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
tools/perf/builtin-report.c
tools/perf/builtin-script.c
tools/perf/trace/beauty/statx.c
tools/perf/util/bpf-prologue.c
tools/perf/util/parse-events.y
tools/perf/util/pmu.h
tools/perf/util/probe-event.c
tools/perf/util/probe-file.c
tools/perf/util/stat-display.c
tools/testing/nvdimm/test/nfit_test.h
tools/testing/selftests/ftrace/ftracetest
tools/testing/selftests/ftrace/test.d/00basic/snapshot.tc
tools/testing/selftests/ftrace/test.d/00basic/trace_pipe.tc
tools/testing/selftests/ftrace/test.d/direct/kprobe-direct.tc
tools/testing/selftests/ftrace/test.d/dynevent/add_remove_kprobe.tc
tools/testing/selftests/ftrace/test.d/dynevent/add_remove_synth.tc
tools/testing/selftests/ftrace/test.d/dynevent/clear_select_events.tc
tools/testing/selftests/ftrace/test.d/dynevent/generic_clear_event.tc
tools/testing/selftests/ftrace/test.d/event/event-enable.tc
tools/testing/selftests/ftrace/test.d/event/event-no-pid.tc
tools/testing/selftests/ftrace/test.d/event/event-pid.tc
tools/testing/selftests/ftrace/test.d/event/subsystem-enable.tc
tools/testing/selftests/ftrace/test.d/event/toplevel-enable.tc
tools/testing/selftests/ftrace/test.d/ftrace/fgraph-filter-stack.tc
tools/testing/selftests/ftrace/test.d/ftrace/fgraph-filter.tc
tools/testing/selftests/ftrace/test.d/ftrace/func-filter-glob.tc
tools/testing/selftests/ftrace/test.d/ftrace/func-filter-notrace-pid.tc
tools/testing/selftests/ftrace/test.d/ftrace/func-filter-pid.tc
tools/testing/selftests/ftrace/test.d/ftrace/func-filter-stacktrace.tc
tools/testing/selftests/ftrace/test.d/ftrace/func_cpumask.tc
tools/testing/selftests/ftrace/test.d/ftrace/func_event_triggers.tc
tools/testing/selftests/ftrace/test.d/ftrace/func_mod_trace.tc
tools/testing/selftests/ftrace/test.d/ftrace/func_profile_stat.tc
tools/testing/selftests/ftrace/test.d/ftrace/func_profiler.tc
tools/testing/selftests/ftrace/test.d/ftrace/func_set_ftrace_file.tc
tools/testing/selftests/ftrace/test.d/ftrace/func_stack_tracer.tc
tools/testing/selftests/ftrace/test.d/ftrace/func_traceonoff_triggers.tc
tools/testing/selftests/ftrace/test.d/ftrace/tracing-error-log.tc
tools/testing/selftests/ftrace/test.d/functions
tools/testing/selftests/ftrace/test.d/instances/instance-event.tc
tools/testing/selftests/ftrace/test.d/instances/instance.tc
tools/testing/selftests/ftrace/test.d/kprobe/add_and_remove.tc
tools/testing/selftests/ftrace/test.d/kprobe/busy_check.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_comm.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_string.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_symbol.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_syntax.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_type.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_user.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_eventname.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_ftrace.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_module.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_multiprobe.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_syntax_errors.tc
tools/testing/selftests/ftrace/test.d/kprobe/kretprobe_args.tc
tools/testing/selftests/ftrace/test.d/kprobe/kretprobe_maxactive.tc
tools/testing/selftests/ftrace/test.d/kprobe/multiple_kprobes.tc
tools/testing/selftests/ftrace/test.d/kprobe/probepoint.tc
tools/testing/selftests/ftrace/test.d/kprobe/profile.tc
tools/testing/selftests/ftrace/test.d/kprobe/uprobe_syntax_errors.tc
tools/testing/selftests/ftrace/test.d/preemptirq/irqsoff_tracer.tc
tools/testing/selftests/ftrace/test.d/template
tools/testing/selftests/ftrace/test.d/tracer/wakeup.tc
tools/testing/selftests/ftrace/test.d/tracer/wakeup_rt.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-action-hist-xfail.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-field-variable-support.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-inter-event-combined-hist.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-multi-actions-accept.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-onchange-action-hist.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-onmatch-action-hist.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-onmatch-onmax-action-hist.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-onmax-action-hist.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-snapshot-action-hist.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-createremove.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-syntax.tc
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-trace-action-hist.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-hist-mod.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-hist-syntax-errors.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-hist.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-multihist.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-snapshot.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-stacktrace.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-trace-marker-hist.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-trace-marker-snapshot.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-trace-marker-synthetic-kernel.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-trace-marker-synthetic.tc
tools/testing/selftests/ftrace/test.d/trigger/trigger-traceonoff.tc
tools/testing/selftests/seccomp/seccomp_bpf.c

diff --git a/Documentation/ABI/testing/sysfs-bus-papr-pmem b/Documentation/ABI/testing/sysfs-bus-papr-pmem
new file mode 100644 (file)
index 0000000..5b10d03
--- /dev/null
@@ -0,0 +1,27 @@
+What:          /sys/bus/nd/devices/nmemX/papr/flags
+Date:          Apr, 2020
+KernelVersion: v5.8
+Contact:       linuxppc-dev <linuxppc-dev@lists.ozlabs.org>, linux-nvdimm@lists.01.org,
+Description:
+               (RO) Report flags indicating various states of a
+               papr-pmem NVDIMM device. Each flag maps to a one or
+               more bits set in the dimm-health-bitmap retrieved in
+               response to H_SCM_HEALTH hcall. The details of the bit
+               flags returned in response to this hcall is available
+               at 'Documentation/powerpc/papr_hcalls.rst' . Below are
+               the flags reported in this sysfs file:
+
+               * "not_armed"   : Indicates that NVDIMM contents will not
+                                 survive a power cycle.
+               * "flush_fail"  : Indicates that NVDIMM contents
+                                 couldn't be flushed during last
+                                 shut-down event.
+               * "restore_fail": Indicates that NVDIMM contents
+                                 couldn't be restored during NVDIMM
+                                 initialization.
+               * "encrypted"   : NVDIMM contents are encrypted.
+               * "smart_notify": There is health event for the NVDIMM.
+               * "scrubbed"    : Indicating that contents of the
+                                 NVDIMM have been scrubbed.
+               * "locked"      : Indicating that NVDIMM contents cant
+                                 be modified until next power cycle.
index 5689c74..bfd55f4 100644 (file)
@@ -186,7 +186,7 @@ prctl(PR_SVE_SET_VL, unsigned long arg)
 
     flags:
 
-       PR_SVE_SET_VL_INHERIT
+       PR_SVE_VL_INHERIT
 
            Inherit the current vector length across execve().  Otherwise, the
            vector length is reset to the system default at execve().  (See
@@ -247,7 +247,7 @@ prctl(PR_SVE_GET_VL)
 
     The following flag may be OR-ed into the result:
 
-       PR_SVE_SET_VL_INHERIT
+       PR_SVE_VL_INHERIT
 
            Vector length will be inherited across execve().
 
@@ -393,7 +393,7 @@ The regset data starts with struct user_sve_header, containing:
 * At every execve() call, the new vector length of the new process is set to
   the system default vector length, unless
 
-    * PR_SVE_SET_VL_INHERIT (or equivalently SVE_PT_VL_INHERIT) is set for the
+    * PR_SVE_VL_INHERIT (or equivalently SVE_PT_VL_INHERIT) is set for the
       calling thread, or
 
     * a deferred vector length change is pending, established via the
diff --git a/Documentation/devicetree/bindings/arm/al,alpine.yaml b/Documentation/devicetree/bindings/arm/al,alpine.yaml
deleted file mode 100644 (file)
index a70dff2..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-%YAML 1.2
----
-$id: http://devicetree.org/schemas/arm/al,alpine.yaml#
-$schema: http://devicetree.org/meta-schemas/core.yaml#
-
-title: Annapurna Labs Alpine Platform Device Tree Bindings
-
-maintainers:
-  - Tsahee Zidenberg <tsahee@annapurnalabs.com>
-  - Antoine Tenart <antoine.tenart@bootlin.com>
-
-properties:
-  compatible:
-    items:
-      - const: al,alpine
-  model:
-    items:
-      - const: "Annapurna Labs Alpine Dev Board"
-
-...
diff --git a/Documentation/devicetree/bindings/arm/amazon,al.yaml b/Documentation/devicetree/bindings/arm/amazon,al.yaml
new file mode 100644 (file)
index 0000000..a3a4d71
--- /dev/null
@@ -0,0 +1,33 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/arm/amazon,al.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Amazon's Annapurna Labs Alpine Platform Device Tree Bindings
+
+maintainers:
+  - Hanna Hawa <hhhawa@amazon.com>
+  - Talel Shenhar <talel@amazon.com>, <talelshenhar@gmail.com>
+  - Ronen Krupnik <ronenk@amazon.com>
+
+properties:
+  compatible:
+    oneOf:
+      - description: Boards with Alpine V1 SoC
+        items:
+          - const: al,alpine
+
+      - description: Boards with Alpine V2 SoC
+        items:
+          - enum:
+              - al,alpine-v2-evp
+          - const: al,alpine-v2
+
+      - description: Boards with Alpine V3 SoC
+        items:
+          - enum:
+              - amazon,al-alpine-v3-evp
+          - const: amazon,al-alpine-v3
+
+...
index 05906e2..f63895c 100644 (file)
@@ -120,6 +120,8 @@ properties:
               - fsl,imx6q-sabrelite
               - fsl,imx6q-sabresd
               - kontron,imx6q-samx6i      # Kontron i.MX6 Dual/Quad SMARC Module
+              - prt,prti6q                # Protonic PRTI6Q board
+              - prt,prtwd2                # Protonic WD2 board
               - technexion,imx6q-pico-dwarf   # TechNexion i.MX6Q Pico-Dwarf
               - technexion,imx6q-pico-hobbit  # TechNexion i.MX6Q Pico-Hobbit
               - technexion,imx6q-pico-nymph   # TechNexion i.MX6Q Pico-Nymph
@@ -172,6 +174,8 @@ properties:
               - fsl,imx6dl-sabreauto      # i.MX6 DualLite/Solo SABRE Automotive Board
               - fsl,imx6dl-sabresd        # i.MX6 DualLite SABRE Smart Device Board
               - kontron,imx6dl-samx6i     # Kontron i.MX6 Solo SMARC Module
+              - prt,prtrvt                # Protonic RVT board
+              - prt,prtvt7                # Protonic VT7 board
               - technexion,imx6dl-pico-dwarf   # TechNexion i.MX6DL Pico-Dwarf
               - technexion,imx6dl-pico-hobbit  # TechNexion i.MX6DL Pico-Hobbit
               - technexion,imx6dl-pico-nymph   # TechNexion i.MX6DL Pico-Nymph
@@ -268,6 +272,7 @@ properties:
               - armadeus,imx6ull-opos6uldev # OPOS6UL (i.MX6ULL) SoM on OPOS6ULDev board
               - fsl,imx6ull-14x14-evk     # i.MX6 UltraLiteLite 14x14 EVK Board
               - kontron,imx6ull-n6411-som # Kontron N6411 SOM
+              - myir,imx6ull-mys-6ulx-eval # MYiR Tech iMX6ULL Evaluation Board
               - toradex,colibri-imx6ull-eval            # Colibri iMX6ULL Module on Colibri Evaluation Board
               - toradex,colibri-imx6ull-wifi-eval       # Colibri iMX6ULL Wi-Fi / Bluetooth Module on Colibri Evaluation Board
           - const: fsl,imx6ull
index abc544d..3090896 100644 (file)
@@ -114,4 +114,9 @@ properties:
           - enum:
               - mediatek,mt8183-evb
           - const: mediatek,mt8183
+      - description: Google Krane (Lenovo IdeaPad Duet, 10e,...)
+        items:
+          - const: google,krane-sku176
+          - const: google,krane
+          - const: mediatek,mt8183
 ...
index b7d2e92..0d4dabb 100644 (file)
@@ -118,6 +118,7 @@ properties:
         items:
           - enum:
               - hoperun,hihope-rzg2m # HopeRun HiHope RZ/G2M platform
+              - beacon,beacon-rzg2m # Beacon EmbeddedWorks RZ/G2M Kit
           - const: renesas,r8a774a1
 
       - items:
@@ -150,6 +151,18 @@ properties:
           - const: si-linux,cat874
           - const: renesas,r8a774c0
 
+      - description: RZ/G2H (R8A774E1)
+        items:
+          - enum:
+              - hoperun,hihope-rzg2h # HopeRun HiHope RZ/G2H platform
+          - const: renesas,r8a774e1
+
+      - items:
+          - enum:
+              - hoperun,hihope-rzg2-ex # HopeRun expansion board for HiHope RZ/G2 platforms
+          - const: hoperun,hihope-rzg2h
+          - const: renesas,r8a774e1
+
       - description: R-Car M1A (R8A77781)
         items:
           - enum:
index d4a4045..db2e357 100644 (file)
@@ -435,6 +435,12 @@ properties:
           - const: radxa,rockpi4
           - const: rockchip,rk3399
 
+      - description: Radxa ROCK Pi N8
+        items:
+          - const: radxa,rockpi-n8
+          - const: vamrs,rk3288-vmarc-som
+          - const: rockchip,rk3288
+
       - description: Radxa ROCK Pi N10
         items:
           - const: radxa,rockpi-n10
index cf5db5e..6f1cd01 100644 (file)
@@ -16,6 +16,9 @@ properties:
       - items:
           - enum:
               - st,stm32mp157-syscfg
+              - st,stm32mp151-pwr-mcu
+              - st,stm32-syscfg
+              - st,stm32-power-config
           - const: syscon
 
   reg:
@@ -27,7 +30,16 @@ properties:
 required:
   - compatible
   - reg
-  - clocks
+
+if:
+  properties:
+    compatible:
+      contains:
+        enum:
+          - st,stm32mp157-syscfg
+then:
+  required:
+    - clocks
 
 additionalProperties: false
 
index 87817ff..efc9118 100644 (file)
@@ -657,6 +657,11 @@ properties:
           - const: pine64,pinephone-1.1
           - const: allwinner,sun50i-a64
 
+      - description: Pine64 PinePhone (1.2)
+        items:
+          - const: pine64,pinephone-1.2
+          - const: allwinner,sun50i-a64
+
       - description: Pine64 PineTab
         items:
           - const: pine64,pinetab
index 60b38eb..e0b3deb 100644 (file)
@@ -34,6 +34,9 @@ properties:
               - toradex,colibri_t20-iris
           - const: toradex,colibri_t20
           - const: nvidia,tegra20
+      - items:
+          - const: acer,picasso
+          - const: nvidia,tegra20
       - items:
           - enum:
               - nvidia,beaver
@@ -59,6 +62,13 @@ properties:
               - toradex,colibri_t30-eval-v3
           - const: toradex,colibri_t30
           - const: nvidia,tegra30
+      - items:
+          - const: asus,grouper
+          - const: nvidia,tegra30
+      - items:
+          - const: asus,tilapia
+          - const: asus,grouper
+          - const: nvidia,tegra30
       - items:
           - enum:
               - nvidia,dalmore
@@ -101,3 +111,11 @@ properties:
           - enum:
               - nvidia,p2972-0000
           - const: nvidia,tegra194
+      - description: Jetson Xavier NX
+        items:
+          - const: nvidia,p3668-0000
+          - const: nvidia,tegra194
+      - description: Jetson Xavier NX Developer Kit
+        items:
+          - const: nvidia,p3509-0000+p3668-0000
+          - const: nvidia,tegra194
index 41372d4..2aaf661 100644 (file)
@@ -4,8 +4,9 @@ Required properties:
 - compatible : For Tegra20, must contain "nvidia,tegra20-efuse".  For Tegra30,
   must contain "nvidia,tegra30-efuse".  For Tegra114, must contain
   "nvidia,tegra114-efuse".  For Tegra124, must contain "nvidia,tegra124-efuse".
-  Otherwise, must contain "nvidia,<chip>-efuse", plus one of the above, where
-  <chip> is tegra132.
+  For Tegra132 must contain "nvidia,tegra132-efuse", "nvidia,tegra124-efuse".
+  For Tegra210 must contain "nvidia,tegra210-efuse". For Tegra186 must contain
+  "nvidia,tegra186-efuse". For Tegra194 must contain "nvidia,tegra194-efuse".
   Details:
   nvidia,tegra20-efuse: Tegra20 requires using APB DMA to read the fuse data
        due to a hardware bug. Tegra20 also lacks certain information which is
index f32bbba..662a3c8 100644 (file)
@@ -6,6 +6,7 @@ Required properties:
   - nvidia,gk20a
   - nvidia,gm20b
   - nvidia,gp10b
+  - nvidia,gv11b
 - reg: Physical base address and length of the controller's registers.
   Must contain two entries:
   - first entry for bar0
@@ -25,6 +26,9 @@ Required properties:
 If the compatible string is "nvidia,gm20b", then the following clock
 is also required:
   - ref
+If the compatible string is "nvidia,gv11b", then the following clock is also
+required:
+  - fuse
 - resets: Must contain an entry for each entry in reset-names.
   See ../reset/reset.txt for details.
 - reset-names: Must include the following entries:
@@ -88,3 +92,24 @@ Example for GP10B:
                power-domains = <&bpmp TEGRA186_POWER_DOMAIN_GPU>;
                iommus = <&smmu TEGRA186_SID_GPU>;
        };
+
+Example for GV11B:
+
+       gpu@17000000 {
+               compatible = "nvidia,gv11b";
+               reg = <0x17000000 0x10000000>,
+                     <0x18000000 0x10000000>;
+               interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
+                            <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-names = "stall", "nonstall";
+               clocks = <&bpmp TEGRA194_CLK_GPCCLK>,
+                        <&bpmp TEGRA194_CLK_GPU_PWR>,
+                        <&bpmp TEGRA194_CLK_FUSE>;
+               clock-names = "gpu", "pwr", "fuse";
+               resets = <&bpmp TEGRA194_RESET_GPU>;
+               reset-names = "gpu";
+               dma-coherent;
+
+               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_GPU>;
+               iommus = <&smmu TEGRA194_SID_GPU>;
+       };
index 18c0de3..3f2f990 100644 (file)
@@ -35,12 +35,12 @@ Required properties:
        Due to above changes, Tegra114 I2C driver makes incompatible with
        previous hardware driver. Hence, tegra114 I2C controller is compatible
        with "nvidia,tegra114-i2c".
-  nvidia,tegra210-i2c-vi: Tegra210 has one I2C controller that is part of the
-       host1x domain and typically used for camera use-cases. This VI I2C
-       controller is mostly compatible with the programming model of the
-       regular I2C controllers with a few exceptions. The I2C registers start
-       at an offset of 0xc00 (instead of 0), registers are 16 bytes apart
-       (rather than 4) and the controller does not support slave mode.
+  nvidia,tegra210-i2c-vi: Tegra210 has one I2C controller that is on host1x bus
+       and is part of VE power domain and typically used for camera use-cases.
+       This VI I2C controller is mostly compatible with the programming model
+       of the regular I2C controllers with a few exceptions. The I2C registers
+       start at an offset of 0xc00 (instead of 0), registers are 16 bytes
+       apart (rather than 4) and the controller does not support slave mode.
 - reg: Should contain I2C controller registers physical address and length.
 - interrupts: Should contain I2C controller interrupts.
 - address-cells: Address cells for I2C device address.
@@ -53,10 +53,17 @@ Required properties:
   - fast-clk
   Tegra114:
   - div-clk
+  Tegra210:
+  - div-clk
+  - slow (only for nvidia,tegra210-i2c-vi compatible node)
 - resets: Must contain an entry for each entry in reset-names.
   See ../reset/reset.txt for details.
 - reset-names: Must include the following entries:
   - i2c
+- power-domains: Only for nvidia,tegra210-i2c-vi compatible node and must
+  include venc powergate node as vi i2c is part of VE power domain.
+  tegra210-i2c-vi:
+  - pd_venc
 - dmas: Must contain an entry for each entry in clock-names.
   See ../dma/dma.txt for details.
 - dma-names: Must include the following entries:
diff --git a/Documentation/devicetree/bindings/mfd/ti,j721e-system-controller.yaml b/Documentation/devicetree/bindings/mfd/ti,j721e-system-controller.yaml
new file mode 100644 (file)
index 0000000..03d0a23
--- /dev/null
@@ -0,0 +1,74 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+# Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/ti,j721e-system-controller.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TI J721e System Controller Registers R/W Device Tree Bindings
+
+description: |
+  This represents the Control Module registers (CTRL_MMR0) on the SoC.
+  System controller node represents a register region containing a set
+  of miscellaneous registers. The registers are not cohesive enough to
+  represent as any specific type of device. The typical use-case is
+  for some other node's driver, or platform-specific code, to acquire
+  a reference to the syscon node (e.g. by phandle, node path, or
+  search using a specific compatible value), interrogate the node (or
+  associated OS driver) to determine the location of the registers,
+  and access the registers directly.
+
+maintainers:
+  - Kishon Vijay Abraham I <kishon@ti.com>
+  - Roger Quadros <rogerq@ti.com
+
+properties:
+  compatible:
+    anyOf:
+      - items:
+        - enum:
+           - ti,j721e-system-controller
+        - const: syscon
+        - const: simple-mfd
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 1
+
+  ranges: true
+
+# Optional children
+
+  "^serdes-ln-ctrl@[0-9a-f]+$":
+    type: object
+    description: |
+      This is the SERDES lane control mux. It should follow the bindings
+      specified in
+      Documentation/devicetree/bindings/mux/reg-mux.txt
+
+required:
+  - compatible
+  - reg
+  - "#address-cells"
+  - "#size-cells"
+  - ranges
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    scm_conf: scm-conf@100000 {
+        compatible = "ti,j721e-system-controller", "syscon", "simple-mfd";
+        reg = <0x00100000 0x1c000>;
+        #address-cells = <1>;
+        #size-cells = <1>;
+        ranges;
+
+        serdes_ln_ctrl: serdes-ln-ctrl@4080 {
+            compatible = "mmio-mux";
+            reg = <0x00004080 0x50>;
+        };
+    };
+...
index 55b6ab2..ec2aaee 100644 (file)
@@ -25,6 +25,7 @@ properties:
       - renesas,r8a774a1-sysc # RZ/G2M
       - renesas,r8a774b1-sysc # RZ/G2N
       - renesas,r8a774c0-sysc # RZ/G2E
+      - renesas,r8a774e1-sysc # RZ/G2H
       - renesas,r8a7779-sysc  # R-Car H1
       - renesas,r8a7790-sysc  # R-Car H2
       - renesas,r8a7791-sysc  # R-Car M2-W
index 4c2b429..2849ce4 100644 (file)
@@ -31,6 +31,7 @@ properties:
       - renesas,r8a774a1-rst      # RZ/G2M
       - renesas,r8a774b1-rst      # RZ/G2N
       - renesas,r8a774c0-rst      # RZ/G2E
+      - renesas,r8a774e1-rst      # RZ/G2H
       - renesas,r8a7778-reset-wdt # R-Car M1A
       - renesas,r8a7779-reset-wdt # R-Car H1
       - renesas,r8a7790-rst       # R-Car H2
index d7be931..53a60c1 100644 (file)
@@ -40,6 +40,8 @@ properties:
               - qcom,msm8998-tsens
               - qcom,sc7180-tsens
               - qcom,sdm845-tsens
+              - qcom,sm8150-tsens
+              - qcom,sm8250-tsens
           - const: qcom,tsens-v2
 
   reg:
index 9352a8e..4ff632d 100644 (file)
@@ -44,7 +44,9 @@ properties:
       - const: st,stm32f4x9-hsotg
       - const: st,stm32f7-hsotg
       - const: st,stm32mp15-fsotg
-      - const: st,stm32mp15-hsotg
+      - items:
+          - const: st,stm32mp15-hsotg
+          - const: snps,dwc2
       - const: samsung,s3c6400-hsotg
 
   reg:
@@ -93,7 +95,7 @@ properties:
   vusb_a-supply:
     description: phandle to voltage regulator of analog section.
 
-  vusb33d-supply:
+  usb33d-supply:
     description: reference to the VBUS and ID sensing comparators supply, in
       order to perform OTG operation, used on STM32MP15 SoCs.
 
index 9aeab66..9f7af78 100644 (file)
@@ -27,6 +27,8 @@ patternProperties:
     description: Abilis Systems
   "^abracon,.*":
     description: Abracon Corporation
+  "^acer,.*":
+    description: Acer Inc.
   "^acme,.*":
     description: Acme Systems srl
   "^actions,.*":
index 6e71f67..bc7e1fc 100644 (file)
@@ -451,7 +451,7 @@ The bridge driver also has some helper functions it can use:
                                        "module_foo", "chipid", 0x36, NULL);
 
 This loads the given module (can be ``NULL`` if no module needs to be loaded)
-and calls :c:func:`i2c_new_device` with the given ``i2c_adapter`` and
+and calls :c:func:`i2c_new_client_device` with the given ``i2c_adapter`` and
 chip/address arguments. If all goes well, then it registers the subdev with
 the v4l2_device.
 
index 8e26707..8fdb78f 100644 (file)
@@ -25,7 +25,7 @@ size when creating the filesystem.
 Currently 3 filesystems support DAX: ext2, ext4 and xfs.  Enabling DAX on them
 is different.
 
-Enabling DAX on ext4 and ext2
+Enabling DAX on ext2
 -----------------------------
 
 When mounting the filesystem, use the "-o dax" option on the command line or
@@ -33,8 +33,8 @@ add 'dax' to the options in /etc/fstab.  This works to enable DAX on all files
 within the filesystem.  It is equivalent to the '-o dax=always' behavior below.
 
 
-Enabling DAX on xfs
--------------------
+Enabling DAX on xfs and ext4
+----------------------------
 
 Summary
 -------
index 3e4c0ee..e99ff3f 100644 (file)
@@ -39,3 +39,6 @@ is encrypted as well as the data itself.
 
 Verity files cannot have blocks allocated past the end of the verity
 metadata.
+
+Verity and DAX are not compatible and attempts to set both of these flags
+on a file will fail.
index 4cc7432..1711235 100644 (file)
@@ -197,11 +197,14 @@ pp_power_profile_mode
 .. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
    :doc: pp_power_profile_mode
 
-busy_percent
-~~~~~~~~~~~~
+*_busy_percent
+~~~~~~~~~~~~~~
 
 .. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
-   :doc: busy_percent
+   :doc: gpu_busy_percent
+
+.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+   :doc: mem_busy_percent
 
 GPU Product Information
 =======================
index c2e2963..64689d1 100644 (file)
@@ -57,7 +57,7 @@ SMBus Quick Command
 
 This sends a single bit to the device, at the place of the Rd/Wr bit::
 
-  A Addr Rd/Wr [A] P
+  S Addr Rd/Wr [A] P
 
 Functionality flag: I2C_FUNC_SMBUS_QUICK
 
index 3493631..48fcf12 100644 (file)
@@ -220,13 +220,51 @@ from the LPAR memory.
 **H_SCM_HEALTH**
 
 | Input: drcIndex
-| Out: *health-bitmap, health-bit-valid-bitmap*
+| Out: *health-bitmap (r4), health-bit-valid-bitmap (r5)*
 | Return Value: *H_Success, H_Parameter, H_Hardware*
 
 Given a DRC Index return the info on predictive failure and overall health of
-the NVDIMM. The asserted bits in the health-bitmap indicate a single predictive
-failure and health-bit-valid-bitmap indicate which bits in health-bitmap are
-valid.
+the PMEM device. The asserted bits in the health-bitmap indicate one or more states
+(described in table below) of the PMEM device and health-bit-valid-bitmap indicate
+which bits in health-bitmap are valid. The bits are reported in
+reverse bit ordering for example a value of 0xC400000000000000
+indicates bits 0, 1, and 5 are valid.
+
+Health Bitmap Flags:
+
++------+-----------------------------------------------------------------------+
+|  Bit |               Definition                                              |
++======+=======================================================================+
+|  00  | PMEM device is unable to persist memory contents.                     |
+|      | If the system is powered down, nothing will be saved.                 |
++------+-----------------------------------------------------------------------+
+|  01  | PMEM device failed to persist memory contents. Either contents were   |
+|      | not saved successfully on power down or were not restored properly on |
+|      | power up.                                                             |
++------+-----------------------------------------------------------------------+
+|  02  | PMEM device contents are persisted from previous IPL. The data from   |
+|      | the last boot were successfully restored.                             |
++------+-----------------------------------------------------------------------+
+|  03  | PMEM device contents are not persisted from previous IPL. There was no|
+|      | data to restore from the last boot.                                   |
++------+-----------------------------------------------------------------------+
+|  04  | PMEM device memory life remaining is critically low                   |
++------+-----------------------------------------------------------------------+
+|  05  | PMEM device will be garded off next IPL due to failure                |
++------+-----------------------------------------------------------------------+
+|  06  | PMEM device contents cannot persist due to current platform health    |
+|      | status. A hardware failure may prevent data from being saved or       |
+|      | restored.                                                             |
++------+-----------------------------------------------------------------------+
+|  07  | PMEM device is unable to persist memory contents in certain conditions|
++------+-----------------------------------------------------------------------+
+|  08  | PMEM device is encrypted                                              |
++------+-----------------------------------------------------------------------+
+|  09  | PMEM device has successfully completed a requested erase or secure    |
+|      | erase procedure.                                                      |
++------+-----------------------------------------------------------------------+
+|10:63 | Reserved / Unused                                                     |
++------+-----------------------------------------------------------------------+
 
 **H_SCM_PERFORMANCE_STATS**
 
index bc8db7b..0bd405a 100644 (file)
@@ -16,18 +16,6 @@ Store Queue API
 .. kernel-doc:: arch/sh/kernel/cpu/sh4/sq.c
    :export:
 
-SH-5
-----
-
-TLB Interfaces
-~~~~~~~~~~~~~~
-
-.. kernel-doc:: arch/sh/mm/tlb-sh5.c
-   :internal:
-
-.. kernel-doc:: arch/sh/include/asm/tlb_64.h
-   :internal:
-
 Machine Specific Interfaces
 ===========================
 
index d0c50d7..0a8e236 100644 (file)
@@ -27,7 +27,7 @@ nitpick_ignore = [
     ("c:func", "copy_to_user"),
     ("c:func", "determine_valid_ioctls"),
     ("c:func", "ERR_PTR"),
-    ("c:func", "i2c_new_device"),
+    ("c:func", "i2c_new_client_device"),
     ("c:func", "ioctl"),
     ("c:func", "IS_ERR"),
     ("c:func", "KERNEL_VERSION"),
index 68f21d4..74ddb41 100644 (file)
@@ -1617,7 +1617,7 @@ L:        linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 S:     Maintained
 F:     arch/arm/boot/dts/alpine*
 F:     arch/arm/mach-alpine/
-F:     arch/arm64/boot/dts/al/
+F:     arch/arm64/boot/dts/amazon/
 F:     drivers/*/*alpine*
 
 ARM/ARTPEC MACHINE SUPPORT
@@ -11369,14 +11369,6 @@ L:     dmaengine@vger.kernel.org
 S:     Supported
 F:     drivers/dma/at_xdmac.c
 
-MICROSEMI ETHERNET SWITCH DRIVER
-M:     Alexandre Belloni <alexandre.belloni@bootlin.com>
-M:     Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
-L:     netdev@vger.kernel.org
-S:     Supported
-F:     drivers/net/ethernet/mscc/
-F:     include/soc/mscc/ocelot*
-
 MICROSEMI MIPS SOCS
 M:     Alexandre Belloni <alexandre.belloni@bootlin.com>
 M:     Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
@@ -12335,6 +12327,18 @@ M:     Peter Zijlstra <peterz@infradead.org>
 S:     Supported
 F:     tools/objtool/
 
+OCELOT ETHERNET SWITCH DRIVER
+M:     Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
+M:     Vladimir Oltean <vladimir.oltean@nxp.com>
+M:     Claudiu Manoil <claudiu.manoil@nxp.com>
+M:     Alexandre Belloni <alexandre.belloni@bootlin.com>
+L:     netdev@vger.kernel.org
+S:     Supported
+F:     drivers/net/dsa/ocelot/*
+F:     drivers/net/ethernet/mscc/
+F:     include/soc/mscc/ocelot*
+F:     net/dsa/tag_ocelot.c
+
 OCXL (Open Coherent Accelerator Processor Interface OpenCAPI) DRIVER
 M:     Frederic Barrat <fbarrat@linux.ibm.com>
 M:     Andrew Donnellan <ajd@linux.ibm.com>
@@ -14192,6 +14196,15 @@ L:     dmaengine@vger.kernel.org
 S:     Supported
 F:     drivers/dma/qcom/hidma*
 
+QUALCOMM I2C CCI DRIVER
+M:     Loic Poulain <loic.poulain@linaro.org>
+M:     Robert Foss <robert.foss@linaro.org>
+L:     linux-i2c@vger.kernel.org
+L:     linux-arm-msm@vger.kernel.org
+S:     Maintained
+F:     Documentation/devicetree/bindings/i2c/i2c-qcom-cci.txt
+F:     drivers/i2c/busses/i2c-qcom-cci.c
+
 QUALCOMM IOMMU
 M:     Rob Clark <robdclark@gmail.com>
 L:     iommu@lists.linux-foundation.org
@@ -14534,7 +14547,7 @@ F:      Documentation/devicetree/bindings/i2c/renesas,iic-emev2.txt
 F:     drivers/i2c/busses/i2c-emev2.c
 
 RENESAS ETHERNET DRIVERS
-R:     Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
+R:     Sergei Shtylyov <sergei.shtylyov@gmail.com>
 L:     netdev@vger.kernel.org
 L:     linux-renesas-soc@vger.kernel.org
 F:     Documentation/devicetree/bindings/net/renesas,*.txt
@@ -18254,14 +18267,6 @@ S:     Maintained
 F:     drivers/input/serio/userio.c
 F:     include/uapi/linux/userio.h
 
-VITESSE FELIX ETHERNET SWITCH DRIVER
-M:     Vladimir Oltean <vladimir.oltean@nxp.com>
-M:     Claudiu Manoil <claudiu.manoil@nxp.com>
-L:     netdev@vger.kernel.org
-S:     Maintained
-F:     drivers/net/dsa/ocelot/*
-F:     net/dsa/tag_ocelot.c
-
 VIVID VIRTUAL VIDEO DRIVER
 M:     Hans Verkuil <hverkuil@xs4all.nl>
 L:     linux-media@vger.kernel.org
index ae5d822..ac2c61c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
 VERSION = 5
 PATCHLEVEL = 8
 SUBLEVEL = 0
-EXTRAVERSION = -rc1
+EXTRAVERSION = -rc2
 NAME = Kleptomaniac Octopus
 
 # *DOCUMENTATION*
@@ -828,7 +828,7 @@ endif
 
 ifdef CONFIG_DEBUG_INFO_COMPRESSED
 DEBUG_CFLAGS   += -gz=zlib
-KBUILD_AFLAGS  += -Wa,--compress-debug-sections=zlib
+KBUILD_AFLAGS  += -gz=zlib
 KBUILD_LDFLAGS += --compress-debug-sections=zlib
 endif
 
@@ -1336,16 +1336,6 @@ dt_binding_check: scripts_dtc
 # ---------------------------------------------------------------------------
 # Modules
 
-# install modules.builtin regardless of CONFIG_MODULES
-PHONY += _builtin_inst_
-_builtin_inst_:
-       @mkdir -p $(MODLIB)/
-       @cp -f modules.builtin $(MODLIB)/
-       @cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
-
-PHONY += install
-install: _builtin_inst_
-
 ifdef CONFIG_MODULES
 
 # By default, build modules as well
@@ -1389,7 +1379,7 @@ PHONY += modules_install
 modules_install: _modinst_ _modinst_post
 
 PHONY += _modinst_
-_modinst_: _builtin_inst_
+_modinst_:
        @rm -rf $(MODLIB)/kernel
        @rm -f $(MODLIB)/source
        @mkdir -p $(MODLIB)/kernel
@@ -1399,6 +1389,8 @@ _modinst_: _builtin_inst_
                ln -s $(CURDIR) $(MODLIB)/build ; \
        fi
        @sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order
+       @cp -f modules.builtin $(MODLIB)/
+       @cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
 
 # This depmod is only for convenience to give the initial
index e6a1cac..e71ff27 100644 (file)
@@ -455,6 +455,8 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
        imx6dl-pico-hobbit.dtb \
        imx6dl-pico-nymph.dtb \
        imx6dl-pico-pi.dtb \
+       imx6dl-prtrvt.dtb \
+       imx6dl-prtvt7.dtb \
        imx6dl-rex-basic.dtb \
        imx6dl-riotboard.dtb \
        imx6dl-sabreauto.dtb \
@@ -543,6 +545,8 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
        imx6q-pico-nymph.dtb \
        imx6q-pico-pi.dtb \
        imx6q-pistachio.dtb \
+       imx6q-prti6q.dtb \
+       imx6q-prtwd2.dtb \
        imx6q-rex-pro.dtb \
        imx6q-sabreauto.dtb \
        imx6q-sabrelite.dtb \
@@ -592,6 +596,7 @@ dtb-$(CONFIG_SOC_IMX6SX) += \
        imx6sx-sdb-reva.dtb \
        imx6sx-sdb-sai.dtb \
        imx6sx-sdb.dtb \
+       imx6sx-sdb-mqs.dtb \
        imx6sx-softing-vining-2000.dtb \
        imx6sx-udoo-neo-basic.dtb \
        imx6sx-udoo-neo-extended.dtb \
@@ -617,6 +622,7 @@ dtb-$(CONFIG_SOC_IMX6UL) += \
        imx6ull-14x14-evk.dtb \
        imx6ull-colibri-eval-v3.dtb \
        imx6ull-colibri-wifi-eval-v3.dtb \
+       imx6ull-myir-mys-6ulx-eval.dtb \
        imx6ull-opos6uldev.dtb \
        imx6ull-phytec-segin-ff-rdk-nand.dtb \
        imx6ull-phytec-segin-ff-rdk-emmc.dtb \
@@ -890,6 +896,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \
        qcom-ipq4019-ap.dk07.1-c1.dtb \
        qcom-ipq4019-ap.dk07.1-c2.dtb \
        qcom-ipq8064-ap148.dtb \
+       qcom-ipq8064-rb3011.dtb \
        qcom-msm8660-surf.dtb \
        qcom-msm8960-cdp.dtb \
        qcom-msm8974-fairphone-fp2.dtb \
@@ -927,6 +934,7 @@ dtb-$(CONFIG_ARCH_RENESAS) += \
        r8a73a4-ape6evm.dtb \
        r8a7740-armadillo800eva.dtb \
        r8a7742-iwg21d-q7.dtb \
+       r8a7742-iwg21d-q7-dbcm-ca.dtb \
        r8a7743-iwg20d-q7.dtb \
        r8a7743-iwg20d-q7-dbcm-ca.dtb \
        r8a7743-sk-rzg1m.dtb \
@@ -974,6 +982,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += \
        rk3288-popmetal.dtb \
        rk3288-r89.dtb \
        rk3288-rock2-square.dtb \
+       rk3288-rock-pi-n8.dtb \
        rk3288-tinker.dtb \
        rk3288-tinker-s.dtb \
        rk3288-veyron-brain.dtb \
@@ -1197,6 +1206,7 @@ dtb-$(CONFIG_MACH_SUNIV) += \
 dtb-$(CONFIG_ARCH_TANGO) += \
        tango4-vantage-1172.dtb
 dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += \
+       tegra20-acer-a500-picasso.dtb \
        tegra20-harmony.dtb \
        tegra20-colibri-eval-v3.dtb \
        tegra20-colibri-iris.dtb \
@@ -1210,6 +1220,9 @@ dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += \
 dtb-$(CONFIG_ARCH_TEGRA_3x_SOC) += \
        tegra30-apalis-eval.dtb \
        tegra30-apalis-v1.1-eval.dtb \
+       tegra30-asus-nexus7-grouper-PM269.dtb \
+       tegra30-asus-nexus7-grouper-E1565.dtb \
+       tegra30-asus-nexus7-tilapia-E1565.dtb \
        tegra30-beaver.dtb \
        tegra30-cardhu-a02.dtb \
        tegra30-cardhu-a04.dtb \
index 386d5f8..56915b6 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
index b0df725..d8d6039 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
index d6aa46e..8096d45 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
index 4e11a16..9a79f72 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
index 05e7b5d..28f001b 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
index 6c9187b..2d51d4b 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 / {
index 43bfbce..b5d85ef 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 91f93bc..7fdb628 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include <dt-bindings/display/tda998x.h>
index 3124d94..af941b7 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index d392866..b4feb85 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
                opp-supported-hw = <0x06 0x0100>;
        };
 };
+
+&gpio0 {
+       gpio-line-names =
+               "[ethernet]",
+               "[ethernet]",
+               "P9_22 [spi0_sclk]",
+               "P9_21 [spi0_d0]",
+               "P9_18 [spi0_d1]",
+               "P9_17 [spi0_cs0]",
+               "[sd card]",
+               "P9_42A [ecappwm0]",
+               "P8_35 [hdmi]",
+               "P8_33 [hdmi]",
+               "P8_31 [hdmi]",
+               "P8_32 [hdmi]",
+               "P9_20 [i2c2_sda]",
+               "P9_19 [i2c2_scl]",
+               "P9_26 [uart1_rxd]",
+               "P9_24 [uart1_txd]",
+               "[ethernet]",
+               "[ethernet]",
+               "[usb]",
+               "[hdmi]",
+               "P9_41B",
+               "[ethernet]",
+               "P8_19 [ehrpwm2a]",
+               "P8_13 [ehrpwm2b]",
+               "[NC]",
+               "[NC]",
+               "P8_14",
+               "P8_17",
+               "[ethernet]",
+               "[ethernet]",
+               "P9_11 [uart4_rxd]",
+               "P9_13 [uart4_txd]";
+};
+
+&gpio1 {
+       gpio-line-names =
+               "P8_25 [emmc]",
+               "[emmc]",
+               "P8_5 [emmc]",
+               "P8_6 [emmc]",
+               "P8_23 [emmc]",
+               "P8_22 [emmc]",
+               "P8_3 [emmc]",
+               "P8_4 [emmc]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "P8_12",
+               "P8_11",
+               "P8_16",
+               "P8_15",
+               "P9_15A",
+               "P9_23",
+               "P9_14 [ehrpwm1a]",
+               "P9_16 [ehrpwm1b]",
+               "[emmc]",
+               "[usr0 led]",
+               "[usr1 led]",
+               "[usr2 led]",
+               "[usr3 led]",
+               "[hdmi]",
+               "[usb]",
+               "[hdmi audio]",
+               "P9_12",
+               "P8_26",
+               "P8_21 [emmc]",
+               "P8_20 [emmc]";
+};
+
+&gpio2 {
+       gpio-line-names =
+               "P9_15B",
+               "P8_18",
+               "P8_7",
+               "P8_8",
+               "P8_10",
+               "P8_9",
+               "P8_45 [hdmi]",
+               "P8_46 [hdmi]",
+               "P8_43 [hdmi]",
+               "P8_44 [hdmi]",
+               "P8_41 [hdmi]",
+               "P8_42 [hdmi]",
+               "P8_39 [hdmi]",
+               "P8_40 [hdmi]",
+               "P8_37 [hdmi]",
+               "P8_38 [hdmi]",
+               "P8_36 [hdmi]",
+               "P8_34 [hdmi]",
+               "[ethernet]",
+               "[ethernet]",
+               "[ethernet]",
+               "[ethernet]",
+               "P8_27 [hdmi]",
+               "P8_29 [hdmi]",
+               "P8_28 [hdmi]",
+               "P8_30 [hdmi]",
+               "[emmc]",
+               "[emmc]",
+               "[emmc]",
+               "[emmc]",
+               "[emmc]",
+               "[emmc]";
+};
+
+&gpio3 {
+       gpio-line-names =
+               "[ethernet]",
+               "[ethernet]",
+               "[ethernet]",
+               "[ethernet]",
+               "[ethernet]",
+               "[i2c0]",
+               "[i2c0]",
+               "[emu]",
+               "[emu]",
+               "[ethernet]",
+               "[ethernet]",
+               "[NC]",
+               "[NC]",
+               "[usb]",
+               "P9_31 [spi1_sclk]",
+               "P9_29 [spi1_d0]",
+               "P9_30 [spi1_d1]",
+               "P9_28 [spi1_cs0]",
+               "P9_42B [ecappwm0]",
+               "P9_27",
+               "P9_41A",
+               "P9_25",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]";
+};
index 5811fb8..395ef90 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 7a88266..9f7fb63 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 &ldo3_reg {
index 4092cd1..449e6a5 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index c12bb07..18cc0f4 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index b14a275..5660b5f 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2015 Jablotron s.r.o. -- http://www.jablotron.com/
+ * Copyright (C) 2015 Jablotron s.r.o. -- https://www.jablotron.com/
  * Author: Rostislav Lisovy <lisovy@jablotron.cz>
  */
 /dts-v1/;
index b31e2f7..43b61e4 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2015 Jablotron s.r.o. -- http://www.jablotron.com/
+ * Copyright (C) 2015 Jablotron s.r.o. -- https://www.jablotron.com/
  * Author: Rostislav Lisovy <lisovy@jablotron.cz>
  */
 #include "am33xx.dtsi"
index 68252da..3528856 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 32f515a..5735749 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
index 0ebe9e2..1918766 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  * Copyright (C) 2018 Robert Bosch Power Tools GmbH
  */
 /dts-v1/;
index 021eb57..b958ab5 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
index fef5828..49f1c37 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014 NovaTech LLC - http://www.novatechweb.com
+ * Copyright (C) 2014 NovaTech LLC - https://www.novatechweb.com
  */
 /dts-v1/;
 
index 1e4dbc8..8303b83 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
index 9a6cd8e..f8e0e95 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
index 2298563..a4e1375 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
index 1d29020..f841afb 100644 (file)
@@ -1,5 +1,5 @@
 //SPDX-License-Identifier: GPL-2.0
-/* Copyright (C) 2018 Octavo Systems LLC - http://www.octavosystems.com/
+/* Copyright (C) 2018 Octavo Systems LLC - https://www.octavosystems.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
         * below to "crossed" and uncomment the video-ports -property
         * in tda19988 node.
         * AM335x errata for wiring:
-        * http://www.ti.com/lit/er/sprz360i/sprz360i.pdf
+        * https://www.ti.com/lit/er/sprz360i/sprz360i.pdf
         */
 
        blue-and-red-wiring = "straight";
index a8b6842..2888b15 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  *
  * Author: Robert Nelson <robertcnelson@gmail.com>
  */
index e4dcfa0..d41a5ff 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright (C) 2018 EETS GmbH - http://www.eets.ch/
  *
- * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/
+ * Copyright (C) 2011, Texas Instruments, Incorporated - https://www.ti.com/
  *
  * SPDX-License-Identifier:  GPL-2.0+
  */
index 4da7190..cb54137 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  *
  * Author: Robert Nelson <robertcnelson@gmail.com>
  */
        };
 };
 
+&gpio0 {
+       gpio-line-names =
+               "[NC]",
+               "[NC]",
+               "P1.08 [SPI0_CLK]",
+               "P1.10 [SPI0_MISO]",
+               "P1.12 [SPI0_MOSI]",
+               "P1.06 [SPI0_CS]",
+               "[MMC0_CD]",
+               "P2.29 [SPI1_CLK]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "P1.26 [I2C2_SDA]",
+               "P1.28 [I2C2_SCL]",
+               "P2.11 [I2C1_SDA]",
+               "P2.09 [I2C1_SCL]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "P2.31 [SPI1_CS]",
+               "P1.20 [PRU0.16]",
+               "[NC]",
+               "[NC]",
+               "P2.03",
+               "[NC]",
+               "[NC]",
+               "P1.34",
+               "P2.19",
+               "[NC]",
+               "[NC]",
+               "P2.05 [UART4_RX]",
+               "P2.07 [UART4_TX]";
+};
+
+&gpio1 {
+       gpio-line-names =
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "P2.25 [SPI1_MOSI]",
+               "P1.32 [UART0_RX]",
+               "P1.30 [UART0_TX]",
+               "P2.24",
+               "P2.33",
+               "P2.22",
+               "P2.18",
+               "[NC]",
+               "[NC]",
+               "P2.01 [PWM1A]",
+               "[NC]",
+               "P2.10",
+               "[USR LED 0]",
+               "[USR LED 1]",
+               "[USR LED 2]",
+               "[USR LED 3]",
+               "P2.06",
+               "P2.04",
+               "P2.02",
+               "P2.08",
+               "[NC]",
+               "[NC]",
+               "[NC]";
+};
+
+&gpio2 {
+       gpio-line-names =
+               "P2.20",
+               "P2.17",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[EEPROM_WP]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[SYSBOOT]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "P2.35 [AIN5]",
+               "P1.02 [AIN6]",
+               "P1.35 [PRU1.10]",
+               "P1.04 [PRU1.11]",
+               "[MMC0_DAT3]",
+               "[MMC0_DAT2]",
+               "[MMC0_DAT1]",
+               "[MMC0_DAT0]",
+               "[MMC0_CLK]",
+               "[MMC0_CMD]";
+};
+
+&gpio3 {
+       gpio-line-names =
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[I2C0_SDA]",
+               "[I2C0_SCL]",
+               "[JTAG]",
+               "[JTAG]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "P1.03 [USB1]",
+               "P1.36 [PWM0A]",
+               "P1.33 [PRU0.1]",
+               "P2.32 [PRU0.2]",
+               "P2.30 [PRU0.3]",
+               "P1.31 [PRU0.4]",
+               "P2.34 [PRU0.5]",
+               "P2.28 [PRU0.6]",
+               "P1.29 [PRU0.7]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]",
+               "[NC]";
+};
+
 &am33xx_pinmux {
+
+       pinctrl-names = "default";
+
+       pinctrl-0 =   < &P2_03_gpio &P1_34_gpio &P2_19_gpio &P2_24_gpio
+                       &P2_33_gpio &P2_22_gpio &P2_18_gpio &P2_10_gpio
+                       &P2_06_gpio &P2_04_gpio &P2_02_gpio &P2_08_gpio
+                       &P2_17_gpio >;
+
+       /* P2_03 (ZCZ ball T10) gpio0_23 0x824 PIN 9 */
+       P2_03_gpio: pinmux_P2_03_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_AD9, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P1_34 (ZCZ ball T11) gpio0_26 0x828 PIN 10 */
+       P1_34_gpio: pinmux_P1_34_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_AD10, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P2_19 (ZCZ ball U12) gpio0_27 0x82c PIN 11 */
+       P2_19_gpio: pinmux_P2_19_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_AD11, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P2_24 (ZCZ ball T12) gpio1_12 0x830 PIN 12 */
+       P2_24_gpio: pinmux_P2_24_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_AD12, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P2_33 (ZCZ ball R12) gpio1_13 0x834 PIN 13 */
+       P2_33_gpio: pinmux_P2_33_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_AD13, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P2_22 (ZCZ ball V13) gpio1_14 0x838 PIN 14 */
+       P2_22_gpio: pinmux_P2_22_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_AD14, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P2_18 (ZCZ ball U13) gpio1_15 0x83c PIN 15 */
+       P2_18_gpio: pinmux_P2_18_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_AD15, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P2_10 (ZCZ ball R14) gpio1_20 0x850 PIN 20 */
+       P2_10_gpio: pinmux_P2_10_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_A4, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P2_06 (ZCZ ball U16) gpio1_25 0x864 PIN 25 */
+       P2_06_gpio: pinmux_P2_06_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_A9, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P2_04 (ZCZ ball T16) gpio1_26 0x868 PIN 26 */
+       P2_04_gpio: pinmux_P2_04_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_A10, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P2_02 (ZCZ ball V17) gpio1_27 0x86c PIN 27 */
+       P2_02_gpio: pinmux_P2_02_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_A11, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
+       /* P2_08 (ZCZ ball U18) gpio1_28 0x878 PIN 30 */
+       P2_08_gpio: pinmux_P2_08_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_BEN1, PIN_INPUT_PULLDOWN, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x00  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x00  0x00  0x10  0x18>;
+       };
+
+       /* P2_17 (ZCZ ball V12) gpio2_1 0x88c PIN 35 */
+       P2_17_gpio: pinmux_P2_17_gpio {
+               pinctrl-single,pins = <
+                       AM33XX_PADCONF(AM335X_PIN_GPMC_CLK, PIN_INPUT_PULLUP, MUX_MODE7)
+               >;
+               pinctrl-single,bias-pullup   =   < 0x10  0x10  0x00  0x18>;
+               pinctrl-single,bias-pulldown   = < 0x10  0x00  0x10  0x18>;
+       };
+
        i2c2_pins: pinmux-i2c2-pins {
                pinctrl-single,pins = <
                        AM33XX_PADCONF(AM335X_PIN_UART1_RTSN, PIN_INPUT_PULLUP, MUX_MODE3)      /* (D17) uart1_rtsn.I2C2_SCL */
index e5fdb7a..275ba33 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 7ff11d6..2c1ec06 100644 (file)
 
                        gpio0: gpio@0 {
                                compatible = "ti,omap4-gpio";
+                               gpio-ranges =   <&am33xx_pinmux  0  82 8>,
+                                               <&am33xx_pinmux  8  52 4>,
+                                               <&am33xx_pinmux 12  94 4>,
+                                               <&am33xx_pinmux 16  71 2>,
+                                               <&am33xx_pinmux 18 135 1>,
+                                               <&am33xx_pinmux 19 108 2>,
+                                               <&am33xx_pinmux 21  73 1>,
+                                               <&am33xx_pinmux 22   8 2>,
+                                               <&am33xx_pinmux 26  10 2>,
+                                               <&am33xx_pinmux 28  74 1>,
+                                               <&am33xx_pinmux 29  81 1>,
+                                               <&am33xx_pinmux 30  28 2>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 
                        gpio1: gpio@0 {
                                compatible = "ti,omap4-gpio";
+                               gpio-ranges =   <&am33xx_pinmux  0  0  8>,
+                                               <&am33xx_pinmux  8 90  4>,
+                                               <&am33xx_pinmux 12 12 16>,
+                                               <&am33xx_pinmux 28 30  4>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 
                        gpio2: gpio@0 {
                                compatible = "ti,omap4-gpio";
+                                gpio-ranges =  <&am33xx_pinmux  0 34 18>,
+                                               <&am33xx_pinmux 18 77  4>,
+                                               <&am33xx_pinmux 22 56 10>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
 
                        gpio3: gpio@0 {
                                compatible = "ti,omap4-gpio";
+                               gpio-ranges =   <&am33xx_pinmux  0  66 5>,
+                                               <&am33xx_pinmux  5  98 2>,
+                                               <&am33xx_pinmux  7  75 2>,
+                                               <&am33xx_pinmux 13 141 1>,
+                                               <&am33xx_pinmux 14 100 8>;
                                gpio-controller;
                                #gpio-cells = <2>;
                                interrupt-controller;
index 3b177c9..089e275 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for AM33XX SoC
  *
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index eb3517d..3642cfc 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * See craneboard.org for more details
  *
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 48631a4..250c40d 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2018 Logic PD, Inc - http://www.logicpd.com/
+ * Copyright (C) 2018 Logic PD, Inc - https://www.logicpd.com/
  */
 
 #include <dt-bindings/input/input.h>
index 92466b9..04f20e7 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index dc8927f..de33c4f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for am3517 SoC
  *
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
 
 #include "omap3.dtsi"
 
+/* AM3517 doesn't appear to have the crypto engines defined in omap3.dtsi */
+/delete-node/ &aes1_target;
+/delete-node/ &aes2_target;
+
 / {
        aliases {
                serial3 = &uart4;
index 1b4b2b0..1bb5701 100644 (file)
@@ -2,8 +2,8 @@
 /*
  * Device tree for Winterland IceBoard
  *
- * http://mcgillcosmology.com
- * http://threespeedlogic.com
+ * https://mcgillcosmology.com
+ * https://threespeedlogic.com
  *
  * This is an ARM + FPGA instrumentation board used at telescopes in
  * Antarctica (the South Pole Telescope), Chile (POLARBEAR), and at the DRAO
index b4861f7..3de8e9a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for AM4372 SoC
  *
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
                clocks = <&mpu_periphclk>;
        };
 
-       l2-cache-controller@48242000 {
+       cache-controller@48242000 {
                compatible = "arm,pl310-cache";
                reg = <0x48242000 0x1000>;
                cache-unified;
index d692e3b..205269d 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /* AM437x GP EVM */
index a958f9e..8b986c4 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2014 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /dts-v1/;
index 0d0f9fe..8289333 100644 (file)
 
                target-module@80000 {                   /* 0x48380000, ap 123 42.0 */
                        compatible = "ti,sysc-omap4", "ti,sysc";
-                       ti,hwmods = "usb_otg_ss0";
                        reg = <0x80000 0x4>,
                              <0x80010 0x4>;
                        reg-names = "rev", "sysc";
 
                target-module@c0000 {                   /* 0x483c0000, ap 127 7a.0 */
                        compatible = "ti,sysc-omap4", "ti,sysc";
-                       ti,hwmods = "usb_otg_ss1";
                        reg = <0xc0000 0x4>,
                              <0xc0010 0x4>;
                        reg-names = "rev", "sysc";
index 4d5a7ca..5f8da0f 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2014 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /* AM437x SK EVM */
index 27259fd..4686853 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /* AM43x EPOS EVM */
index b1c583d..032c1ac 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2020 Texas Instruments Incorporated - https://www.ti.com/
  *
  * Common PRUSS data for TI AM57xx platforms
  */
index a80c2e3..ebf4d3c 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2019 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "dra72x.dtsi"
index 99a408a..391a92e 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2015-2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2015-2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 9a3810f..5e0bdf1 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2019 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "dra74x.dtsi"
index 9877d77..d3e345d 100644 (file)
@@ -8,6 +8,7 @@
 #include "dra74x.dtsi"
 #include "am57xx-commercial-grade.dtsi"
 #include "dra74x-mmc-iodelay.dtsi"
+#include "dra74-ipu-dsp-common.dtsi"
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/pinctrl/dra.h>
        status = "okay";
 };
 
-&mailbox1 {
-       status = "okay";
-};
-
-&mailbox2 {
-       status = "okay";
-};
-
-&mailbox3 {
-       status = "okay";
-};
-
-&mailbox4 {
-       status = "okay";
-};
-
-&mailbox5 {
-       status = "okay";
-};
-
-&mailbox6 {
-       status = "okay";
-};
-
-&mailbox7 {
-       status = "okay";
-};
-
-&mailbox8 {
-       status = "okay";
-};
-
-&mailbox9 {
-       status = "okay";
-};
-
-&mailbox10 {
-       status = "okay";
-};
-
-&mailbox11 {
-       status = "okay";
-};
-
-&mailbox12 {
-       status = "okay";
-};
-
-&mailbox13 {
-       status = "okay";
-};
-
 &cpu_alert0 {
        temperature = <55000>; /* milliCelsius */
 };
                opp-shared;
        };
 };
+
+&ipu2 {
+       status = "okay";
+       memory-region = <&ipu2_memory_region>;
+};
+
+&ipu1 {
+       status = "okay";
+       memory-region = <&ipu1_memory_region>;
+};
+
+&dsp1 {
+       status = "okay";
+       memory-region = <&dsp1_memory_region>;
+};
+
+&dsp2 {
+       status = "okay";
+       memory-region = <&dsp2_memory_region>;
+};
index 37ce2d7..1d66278 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2017 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include <dt-bindings/gpio/gpio.h>
index c3d9669..1a3af4b 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2015-2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2015-2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /dts-v1/;
index 2b65317..2cb5774 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2019 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "dra76x.dtsi"
index 85c95cc..c9275d0 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2017 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 
index 94135fc..b3a0206 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014-2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2014-2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 39d1c4f..83e174e 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014-2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2014-2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "am57xx-beagle-x15-common.dtsi"
index 4187a97..656dd84 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014-2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2014-2017 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "am57xx-beagle-x15-common.dtsi"
index a5c24ed..0a8b165 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014-2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2014-2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "am57xx-beagle-x15-common.dtsi"
index 2c0aab3..1c77006 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2015-2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2015-2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "am57xx-industrial-grade.dtsi"
index 29b636f..26783d0 100644 (file)
@@ -59,7 +59,7 @@
                        interrupts = <0 10 IRQ_TYPE_LEVEL_HIGH>;
                };
 
-               L2: l2-cache {
+               L2: cache-controller {
                        compatible = "arm,l220-cache";
                        reg = <0x1f002000 0x1000>;
                        interrupt-parent = <&intc>;
index 2625ce6..f925782 100644 (file)
                              <0x10120000 0x100>;
                };
 
-               L2: l2-cache {
+               L2: cache-controller {
                        compatible = "arm,l220-cache";
                        reg = <0x10110000 0x1000>;
                        interrupt-parent = <&intc_dc1176>;
index c69cf7d..9748e0f 100644 (file)
@@ -92,7 +92,7 @@
                      <0x1f000100 0x100>;
        };
 
-       L2: l2-cache {
+       L2: cache-controller {
                compatible = "arm,l220-cache";
                reg = <0x1f002000 0x1000>;
                interrupt-parent = <&intc_tc11mp>;
index 90d00b4..85d3968 100644 (file)
@@ -60,7 +60,7 @@
                };
        };
 
-       L2: l2-cache {
+       L2: cache-controller {
                compatible = "arm,pl310-cache";
                reg = <0x1f002000 0x1000>;
                cache-unified;
index baa459d..2008c6e 100644 (file)
 &mdio {
        phy0: ethernet-phy@0 { /* Marvell 88E1318 */
                reg = <0>;
-               marvell,reg-init = <0x0 0x16 0x0 0x0002>,
-                               <0x0 0x19 0x0 0x0077>,
-                               <0x0 0x18 0x0 0x5747>;
+               marvell,reg-init = <0x2 0x19 0x0 0x0077>,
+                                  <0x2 0x18 0x0 0x5747>;
        };
 };
 
index 1bc45cf..35bdd09 100644 (file)
@@ -91,7 +91,7 @@
                              <0x20100 0x100>;
                };
 
-               L2: l2-cache@22000 {
+               L2: cache-controller@22000 {
                        compatible = "arm,pl310-cache";
                        reg = <0x22000 0x1000>;
                        cache-unified;
index 5e5f5ca..cbebed5 100644 (file)
                              <0x20100 0x100>;
                };
 
-               L2: l2-cache@22000 {
+               L2: cache-controller@22000 {
                        compatible = "arm,pl310-cache";
                        reg = <0x22000 0x1000>;
                        cache-unified;
index da6d70f..1c4a46e 100644 (file)
                              <0x20100 0x100>;
                };
 
-               L2: l2-cache@22000 {
+               L2: cache-controller@22000 {
                        compatible = "arm,pl310-cache";
                        reg = <0x22000 0x1000>;
                        cache-unified;
index 3cf66fa..58ec1b2 100644 (file)
@@ -90,7 +90,7 @@
                reg-io-width = <4>;
        };
 
-       L2: l2-cache@3ff20000 {
+       L2: cache-controller@3ff20000 {
                compatible = "arm,pl310-cache";
                reg = <0x3ff20000 0x1000>;
                cache-unified;
index c7f1d97..222d782 100644 (file)
 };
 
 &firmware {
+       firmware_clocks: clocks {
+               compatible = "raspberrypi,firmware-clocks";
+               #clock-cells = <1>;
+       };
+
        expgpio: gpio {
                compatible = "raspberrypi,firmware-gpio";
                gpio-controller;
index a91cf68..00bcaed 100644 (file)
 
        interrupt-parent = <&gicv2>;
 
+       clk_108MHz: clk-108M {
+               #clock-cells = <0>;
+               compatible = "fixed-clock";
+               clock-frequency = <108000000>;
+               clock-output-names = "108MHz-clock";
+       };
+
        soc {
                /*
                 * Defined ranges:
                hvs@7e400000 {
                        interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
                };
+
+               dvp: clock@7ef00000 {
+                       compatible = "brcm,brcm2711-dvp";
+                       reg = <0x7ef00000 0x10>;
+                       clocks = <&clk_108MHz>;
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+               };
        };
 
        /*
index e58c807..810fc32 100644 (file)
 &usb3_phy {
        status = "okay";
 };
+
+&srab {
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       label = "poe";
+               };
+
+               port@4 {
+                       reg = <4>;
+                       label = "lan";
+               };
+
+               port@5 {
+                       reg = <5>;
+                       label = "cpu";
+                       ethernet = <&gmac0>;
+               };
+       };
+};
index 766db61..7604b44 100644 (file)
 &usb3_phy {
        status = "okay";
 };
+
+&srab {
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@4 {
+                       reg = <4>;
+                       label = "lan";
+               };
+
+               port@5 {
+                       reg = <5>;
+                       label = "cpu";
+                       ethernet = <&gmac0>;
+               };
+       };
+};
index b9d9501..1ec6558 100644 (file)
 &usb3_phy {
        status = "okay";
 };
+
+&srab {
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@4 {
+                       reg = <4>;
+                       label = "poe";
+               };
+
+               port@5 {
+                       reg = <5>;
+                       label = "cpu";
+                       ethernet = <&gmac0>;
+               };
+       };
+};
index 0052e1b..04bfd58 100644 (file)
 &usb3_phy {
        status = "okay";
 };
+
+&srab {
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       label = "lan4";
+               };
+
+               port@1 {
+                       reg = <1>;
+                       label = "lan3";
+               };
+
+               port@2 {
+                       reg = <2>;
+                       label = "lan2";
+               };
+
+               port@3 {
+                       reg = <3>;
+                       label = "lan1";
+               };
+
+               port@4 {
+                       reg = <4>;
+                       label = "wan";
+               };
+
+               port@5 {
+                       reg = <5>;
+                       label = "cpu";
+                       ethernet = <&gmac0>;
+               };
+       };
+};
index b47fb07..068e384 100644 (file)
 &spi_nor {
        status = "okay";
 };
+
+&srab {
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       label = "poe";
+               };
+
+               port@1 {
+                       reg = <1>;
+                       label = "lan";
+               };
+
+               port@5 {
+                       reg = <5>;
+                       label = "cpu";
+                       ethernet = <&gmac0>;
+               };
+       };
+};
index 3343253..67a5982 100644 (file)
 &spi_nor {
        status = "okay";
 };
+
+&srab {
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       label = "lan";
+               };
+
+               port@5 {
+                       reg = <5>;
+                       label = "cpu";
+                       ethernet = <&gmac0>;
+               };
+       };
+};
index ac75154..a21b2d1 100644 (file)
 &usb3_phy {
        status = "okay";
 };
+
+&srab {
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       label = "lan4";
+               };
+
+               port@1 {
+                       reg = <1>;
+                       label = "lan3";
+               };
+
+               port@2 {
+                       reg = <2>;
+                       label = "lan2";
+               };
+
+               port@3 {
+                       reg = <3>;
+                       label = "lan1";
+               };
+
+               port@4 {
+                       reg = <4>;
+                       label = "wan";
+               };
+
+               port@5 {
+                       reg = <5>;
+                       label = "cpu";
+                       ethernet = <&gmac0>;
+               };
+       };
+};
index 6d28b7d..4d5c5aa 100644 (file)
 &spi_nor {
        status = "okay";
 };
+
+&srab {
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       label = "lan4";
+               };
+
+               port@1 {
+                       reg = <1>;
+                       label = "lan3";
+               };
+
+               port@2 {
+                       reg = <2>;
+                       label = "lan2";
+               };
+
+               port@3 {
+                       reg = <3>;
+                       label = "lan1";
+               };
+
+               port@4 {
+                       reg = <4>;
+                       label = "wan";
+               };
+
+               port@5 {
+                       reg = <5>;
+                       label = "cpu";
+                       ethernet = <&gmac0>;
+               };
+       };
+};
index 1c39a84..e755693 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for DRA7x SoC DSPEVE thermal
  *
- * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index f89a64c..8c80b5b 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2017 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "dra74-ipu-dsp-common.dtsi"
index 7aeb30d..a952d93 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index dd74a53..a707732 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for DRA7x SoC IVA thermal
  *
- * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index 62ca895..c83a3d7 100644 (file)
 
                target-module@80000 {                   /* 0x48880000, ap 83 0e.1 */
                        compatible = "ti,sysc-omap4", "ti,sysc";
-                       ti,hwmods = "usb_otg_ss1";
                        reg = <0x80000 0x4>,
                              <0x80010 0x4>;
                        reg-names = "rev", "sysc";
 
                target-module@c0000 {                   /* 0x488c0000, ap 79 06.0 */
                        compatible = "ti,sysc-omap4", "ti,sysc";
-                       ti,hwmods = "usb_otg_ss2";
                        reg = <0xc0000 0x4>,
                              <0xc0010 0x4>;
                        reg-names = "rev", "sysc";
 
                usb3_tm: target-module@100000 {         /* 0x48900000, ap 85 04.0 */
                        compatible = "ti,sysc-omap4", "ti,sysc";
-                       ti,hwmods = "usb_otg_ss3";
                        reg = <0x100000 0x4>,
                              <0x100010 0x4>;
                        reg-names = "rev", "sysc";
 
                usb4_tm: target-module@140000 {         /* 0x48940000, ap 75 3c.0 */
                        compatible = "ti,sysc-omap4", "ti,sysc";
-                       ti,hwmods = "usb_otg_ss4";
                        reg = <0x140000 0x4>,
                              <0x140010 0x4>;
                        reg-names = "rev", "sysc";
index 099546b..cca6b12 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  *
  * Based on "omap4.dtsi"
  */
index a5d275e..10da51b 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "dra71x.dtsi"
index 695a08e..cad0e4a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2019 Texas Instruments Incorporated - https://www.ti.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
index c84b63b..9273a7d 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014-2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2014-2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 6e70858..54dab0f 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 #include "dra72-evm-common.dtsi"
 #include "dra72x-mmc-iodelay.dtsi"
index 5ff9c43..7b433f5 100644 (file)
@@ -1,11 +1,11 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /*
  * Integrated Power Management Chip
- * http://www.ti.com/lit/ds/symlink/tps65917-q1.pdf
+ * https://www.ti.com/lit/ds/symlink/tps65917-q1.pdf
  */
 
 &tps65917 {
index 951152f..6ea9936 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014-2016 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2014-2016 Texas Instruments Incorporated - https://www.ti.com/
  */
 #include "dra72-evm-common.dtsi"
 #include "dra72x-mmc-iodelay.dtsi"
index edad87c..a9dce91 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * MMC IOdelay values for TI's DRA72x, DRA71x and AM571x SoCs.
  *
- * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2017 Texas Instruments Incorporated - https://www.ti.com/
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
index ae23ec1..d403acc 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2014 Texas Instruments Incorporated - https://www.ti.com/
  *
  * Based on "omap4.dtsi"
  */
index 214b9e6..e86da7a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * MMC IOdelay values for TI's DRA74x, DRA75x and AM572x SoCs.
  *
- * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2017 Texas Instruments Incorporated - https://www.ti.com/
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
index 46d8e76..e1850d6 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2014 Texas Instruments Incorporated - https://www.ti.com/
  *
  * Based on "omap4.dtsi"
  */
                        reg = <0x41500000 0x100>;
                };
 
-               omap_dwc3_4: omap_dwc3_4@48940000 {
-                       compatible = "ti,dwc3";
-                       ti,hwmods = "usb_otg_ss4";
-                       reg = <0x48940000 0x10000>;
-                       interrupts = <GIC_SPI 346 IRQ_TYPE_LEVEL_HIGH>;
+               target-module@48940000 {
+                       compatible = "ti,sysc-omap4", "ti,sysc";
+                       reg = <0x48940000 0x4>,
+                             <0x48940010 0x4>;
+                       reg-names = "rev", "sysc";
+                       ti,sysc-mask = <SYSC_OMAP4_DMADISABLE>;
+                       ti,sysc-midle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>,
+                                       <SYSC_IDLE_SMART>,
+                                       <SYSC_IDLE_SMART_WKUP>;
+                       ti,sysc-sidle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>,
+                                       <SYSC_IDLE_SMART>,
+                                       <SYSC_IDLE_SMART_WKUP>;
+                       clocks = <&l3init_clkctrl DRA7_L3INIT_USB_OTG_SS4_CLKCTRL 0>;
+                       clock-names = "fck";
                        #address-cells = <1>;
                        #size-cells = <1>;
-                       utmi-mode = <2>;
-                       ranges;
-                       status = "disabled";
-                       usb4: usb@48950000 {
-                               compatible = "snps,dwc3";
-                               reg = <0x48950000 0x17000>;
-                               interrupts = <GIC_SPI 345 IRQ_TYPE_LEVEL_HIGH>,
-                                            <GIC_SPI 345 IRQ_TYPE_LEVEL_HIGH>,
-                                            <GIC_SPI 346 IRQ_TYPE_LEVEL_HIGH>;
-                               interrupt-names = "peripheral",
-                                                 "host",
-                                                 "otg";
-                               maximum-speed = "high-speed";
-                               dr_mode = "otg";
+                       ranges = <0x0 0x48940000 0x20000>;
+
+                       omap_dwc3_4: omap_dwc3_4@0 {
+                               compatible = "ti,dwc3";
+                               reg = <0 0x10000>;
+                               interrupts = <GIC_SPI 346 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               utmi-mode = <2>;
+                               ranges;
+                               status = "disabled";
+                               usb4: usb@10000 {
+                                       compatible = "snps,dwc3";
+                                       reg = <0x10000 0x17000>;
+                                       interrupts = <GIC_SPI 345 IRQ_TYPE_LEVEL_HIGH>,
+                                                    <GIC_SPI 345 IRQ_TYPE_LEVEL_HIGH>,
+                                                    <GIC_SPI 346 IRQ_TYPE_LEVEL_HIGH>;
+                                       interrupt-names = "peripheral",
+                                                         "host",
+                                                         "otg";
+                                       maximum-speed = "high-speed";
+                                       dr_mode = "otg";
+                               };
                        };
                };
 
index 820a0ec..803981c 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2017 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 42b8a20..b69c7d4 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2017 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "dra74x.dtsi"
index b27a820..6c2f320 100644 (file)
 };
 
 &pinctrl_1 {
+       bten: bten {
+               samsung,pins ="gpx1-7";
+               samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+               samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
+               samsung,pin-con-pdn = <EXYNOS_PIN_PDN_PREV>;
+               samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_DOWN>;
+       };
+
        wlanen: wlanen {
                samsung,pins = "gpx2-3";
                samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
                samsung,pins = "gpx3-5";
                samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
        };
+
+       bthostwake: bthostwake {
+               samsung,pins = "gpx3-6";
+               samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
+               samsung,pin-pud = <EXYNOS_PIN_PULL_UP>;
+               samsung,pin-con-pdn = <EXYNOS_PIN_PDN_INPUT>;
+               samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_NONE>;
+       };
+
+       btwake: btwake {
+               samsung,pins = "gpx3-7";
+               samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+               samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
+               samsung,pin-con-pdn = <EXYNOS_PIN_PDN_OUT0>;
+               samsung,pin-pud-pdn = <EXYNOS_PIN_PULL_DOWN>;
+       };
 };
 
 &rtc {
        status = "okay";
 };
 
+&serial_0 {
+       assigned-clocks = <&cmu CLK_SCLK_UART0>;
+       assigned-clock-rates = <100000000>;
+       status = "okay";
+
+       bluetooth {
+               compatible = "brcm,bcm4330-bt";
+               pinctrl-names = "default";
+               pinctrl-0 = <&bten &btwake &bthostwake>;
+               max-speed = <3000000>;
+               shutdown-gpios = <&gpx1 7 GPIO_ACTIVE_HIGH>;
+               device-wakeup-gpios = <&gpx3 7 GPIO_ACTIVE_HIGH>;
+               host-wakeup-gpios = <&gpx3 6 GPIO_ACTIVE_HIGH>;
+               clocks = <&s2mps14_osc S2MPS11_CLK_BT>;
+       };
+};
+
 &tmu {
        status = "okay";
 };
index 044e5da..d3fb45a 100644 (file)
                        status = "disabled";
                };
 
-               amba {
-                       compatible = "simple-bus";
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       ranges;
-
-                       pdma0: pdma@12680000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x12680000 0x1000>;
-                               interrupts = <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&cmu CLK_PDMA0>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
-
-                       pdma1: pdma@12690000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x12690000 0x1000>;
-                               interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&cmu CLK_PDMA1>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
+               pdma0: pdma@12680000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x12680000 0x1000>;
+                       interrupts = <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cmu CLK_PDMA0>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
+               };
+
+               pdma1: pdma@12690000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x12690000 0x1000>;
+                       interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cmu CLK_PDMA1>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
                };
 
                adc: adc@126c0000 {
index d2779a7..a1e5444 100644 (file)
                        status = "disabled";
                };
 
-               amba: amba {
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "simple-bus";
-                       interrupt-parent = <&gic>;
-                       ranges;
-
-                       pdma0: pdma@12680000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x12680000 0x1000>;
-                               interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_PDMA0>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
-
-                       pdma1: pdma@12690000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x12690000 0x1000>;
-                               interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_PDMA1>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
-
-                       mdma1: mdma@12850000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x12850000 0x1000>;
-                               interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_MDMA>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <1>;
-                       };
+               pdma0: pdma@12680000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x12680000 0x1000>;
+                       interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_PDMA0>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
+               };
+
+               pdma1: pdma@12690000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x12690000 0x1000>;
+                       interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_PDMA1>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
+               };
+
+               mdma1: mdma@12850000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x12850000 0x1000>;
+                       interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_MDMA>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <1>;
                };
 
                fimd: fimd@11c00000 {
index 3d791db..5cc96f0 100644 (file)
                stdout-path = "serial2:115200n8";
        };
 
-       regulators {
-               compatible = "simple-bus";
-
-               vemmc_reg: regulator-0 {
-                       compatible = "regulator-fixed";
-                       regulator-name = "VMEM_VDD_2.8V";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpk0 2 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vemmc_reg: regulator-0 {
+               compatible = "regulator-fixed";
+               regulator-name = "VMEM_VDD_2.8V";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpk0 2 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               tsp_reg: regulator-1 {
-                       compatible = "regulator-fixed";
-                       regulator-name = "TSP_FIXED_VOLTAGES";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpl0 3 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       tsp_reg: regulator-1 {
+               compatible = "regulator-fixed";
+               regulator-name = "TSP_FIXED_VOLTAGES";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpl0 3 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               cam_af_28v_reg: regulator-2 {
-                       compatible = "regulator-fixed";
-                       regulator-name = "8M_AF_2.8V_EN";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpk1 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       cam_af_28v_reg: regulator-2 {
+               compatible = "regulator-fixed";
+               regulator-name = "8M_AF_2.8V_EN";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpk1 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               cam_io_en_reg: regulator-3 {
-                       compatible = "regulator-fixed";
-                       regulator-name = "CAM_IO_EN";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpe2 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       cam_io_en_reg: regulator-3 {
+               compatible = "regulator-fixed";
+               regulator-name = "CAM_IO_EN";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpe2 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               cam_io_12v_reg: regulator-4 {
-                       compatible = "regulator-fixed";
-                       regulator-name = "8M_1.2V_EN";
-                       regulator-min-microvolt = <1200000>;
-                       regulator-max-microvolt = <1200000>;
-                       gpio = <&gpe2 5 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       cam_io_12v_reg: regulator-4 {
+               compatible = "regulator-fixed";
+               regulator-name = "8M_1.2V_EN";
+               regulator-min-microvolt = <1200000>;
+               regulator-max-microvolt = <1200000>;
+               gpio = <&gpe2 5 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vt_core_15v_reg: regulator-5 {
-                       compatible = "regulator-fixed";
-                       regulator-name = "VT_CORE_1.5V";
-                       regulator-min-microvolt = <1500000>;
-                       regulator-max-microvolt = <1500000>;
-                       gpio = <&gpe2 2 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vt_core_15v_reg: regulator-5 {
+               compatible = "regulator-fixed";
+               regulator-name = "VT_CORE_1.5V";
+               regulator-min-microvolt = <1500000>;
+               regulator-max-microvolt = <1500000>;
+               gpio = <&gpe2 2 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
        };
 
        gpio-keys {
index 02fde1a..99ce53b 100644 (file)
        };
 };
 
-&amba {
-       mdma0: mdma@12840000 {
-               compatible = "arm,pl330", "arm,primecell";
-               reg = <0x12840000 0x1000>;
-               interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
-               clocks = <&clock CLK_MDMA>;
-               clock-names = "apb_pclk";
-               #dma-cells = <1>;
-               #dma-channels = <8>;
-               #dma-requests = <1>;
-               power-domains = <&pd_lcd0>;
-       };
-};
-
 &camera {
        status = "okay";
 
        /delete-property/dma-names;
 };
 
+&soc {
+       mdma0: mdma@12840000 {
+               compatible = "arm,pl330", "arm,primecell";
+               reg = <0x12840000 0x1000>;
+               interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&clock CLK_MDMA>;
+               clock-names = "apb_pclk";
+               #dma-cells = <1>;
+               #dma-channels = <8>;
+               #dma-requests = <1>;
+               power-domains = <&pd_lcd0>;
+       };
+};
+
 &sysram {
        smp-sram@0 {
                status = "disabled";
index b446623..33435ce 100644 (file)
@@ -97,7 +97,7 @@
                        label = "LCD1";
                };
 
-               l2c: l2-cache-controller@10502000 {
+               l2c: cache-controller@10502000 {
                        compatible = "arm,pl310-cache";
                        reg = <0x10502000 0x1000>;
                        cache-unified;
index dc865be..8b11ad3 100644 (file)
                reg = <0x0203F000 0x1000>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               mmc_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "VMEM_VDD_2.8V";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpx1 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       mmc_reg: regulator-0 {
+               compatible = "regulator-fixed";
+               regulator-name = "VMEM_VDD_2.8V";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpx1 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
        };
 
        display-timings {
index 4886894..7002832 100644 (file)
                        label = "ISP";
                };
 
-               l2c: l2-cache-controller@10502000 {
+               l2c: cache-controller@10502000 {
                        compatible = "arm,pl310-cache";
                        reg = <0x10502000 0x1000>;
                        cache-unified;
index c4cc761..59872d8 100644 (file)
                };
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               main_dc_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "MAIN_DC";
-                       regulator-always-on;
-               };
+       main_dc_reg: regulator-0 {
+               compatible = "regulator-fixed";
+               regulator-name = "MAIN_DC";
+               regulator-always-on;
+       };
 
-               mmc_reg: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "VDD_MMC";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       regulator-always-on;
-               };
+       mmc_reg: regulator-1 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_MMC";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               regulator-always-on;
+       };
 
-               reg_hdmi_en: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "hdmi-en";
-                       regulator-always-on;
-               };
+       reg_hdmi_en: regulator-2 {
+               compatible = "regulator-fixed";
+               regulator-name = "hdmi-en";
+               regulator-always-on;
+       };
 
-               vcc_1v2_reg: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "VCC_1V2";
-                       regulator-min-microvolt = <1200000>;
-                       regulator-max-microvolt = <1200000>;
-                       regulator-always-on;
-               };
+       vcc_1v2_reg: regulator-3 {
+               compatible = "regulator-fixed";
+               regulator-name = "VCC_1V2";
+               regulator-min-microvolt = <1200000>;
+               regulator-max-microvolt = <1200000>;
+               regulator-always-on;
+       };
 
-               vcc_1v8_reg: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "VCC_1V8";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       regulator-always-on;
-               };
+       vcc_1v8_reg: regulator-4 {
+               compatible = "regulator-fixed";
+               regulator-name = "VCC_1V8";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
+       };
 
-               vcc_3v3_reg: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "VCC_3V3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       vcc_3v3_reg: regulator-5 {
+               compatible = "regulator-fixed";
+               regulator-name = "VCC_3V3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
        };
 
        sound {
index b6135af..e3dbe41 100644 (file)
                        samsung,pmureg-phandle = <&pmu_system_controller>;
                };
 
-               amba {
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "simple-bus";
-                       interrupt-parent = <&gic>;
-                       ranges;
-
-                       pdma0: pdma@121a0000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x121A0000 0x1000>;
-                               interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_PDMA0>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
-
-                       pdma1: pdma@121b0000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x121B0000 0x1000>;
-                               interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_PDMA1>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
-
-                       mdma0: mdma@10800000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x10800000 0x1000>;
-                               interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_MDMA0>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <1>;
-                       };
-
-                       mdma1: mdma@11c10000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x11C10000 0x1000>;
-                               interrupts = <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_MDMA1>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <1>;
-                       };
+               pdma0: pdma@121a0000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x121A0000 0x1000>;
+                       interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_PDMA0>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
+               };
+
+               pdma1: pdma@121b0000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x121B0000 0x1000>;
+                       interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_PDMA1>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
+               };
+
+               mdma0: mdma@10800000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x10800000 0x1000>;
+                       interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_MDMA0>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <1>;
+               };
+
+               mdma1: mdma@11c10000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x11C10000 0x1000>;
+                       interrupts = <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_MDMA1>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <1>;
                };
 
                gsc_0:  gsc@13e00000 {
index 369a8a7..e5d0a2a 100644 (file)
@@ -3,7 +3,7 @@
  * Exynos5410 SoC pin-mux and pin-config device tree source
  *
  * Copyright (c) 2013 Hardkernel Co., Ltd.
- *              http://www.hardkernel.com
+ *              https://www.hardkernel.com
  */
 
 #include <dt-bindings/pinctrl/samsung.h>
index 2eab80b..abe75b9 100644 (file)
                        interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
                };
 
-               amba {
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "simple-bus";
-                       interrupt-parent = <&gic>;
-                       ranges;
-
-                       pdma0: pdma@121a0000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x121a0000 0x1000>;
-                               interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_PDMA0>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
+               pdma0: pdma@121a0000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x121a0000 0x1000>;
+                       interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_PDMA0>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
+               };
 
-                       pdma1: pdma@121b0000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x121b0000 0x1000>;
-                               interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_PDMA1>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
+               pdma1: pdma@121b0000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x121b0000 0x1000>;
+                       interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_PDMA1>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
                };
 
                audi2s0: i2s@3830000 {
index e3f2afe..83fa800 100644 (file)
                };
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd: fixed-regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "vdd-supply";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       regulator-always-on;
-               };
+       vdd: regulator-0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-supply";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
+       };
 
-               dbvdd: fixed-regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "dbvdd-supply";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       dbvdd: regulator-1 {
+               compatible = "regulator-fixed";
+               regulator-name = "dbvdd-supply";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
 
-               spkvdd: fixed-regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "spkvdd-supply";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       spkvdd: regulator-2 {
+               compatible = "regulator-fixed";
+               regulator-name = "spkvdd-supply";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
        };
 
-       usb300_vbus_reg: regulator-usb300 {
+       usb300_vbus_reg: regulator-3 {
                compatible = "regulator-fixed";
                regulator-name = "VBUS0";
                regulator-min-microvolt = <5000000>;
@@ -76,7 +67,7 @@
                enable-active-high;
        };
 
-       usb301_vbus_reg: regulator-usb301 {
+       usb301_vbus_reg: regulator-4 {
                compatible = "regulator-fixed";
                regulator-name = "VBUS1";
                regulator-min-microvolt = <5000000>;
index b672080..c76460b 100644 (file)
                        power-domains = <&mau_pd>;
                };
 
-               amba {
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "simple-bus";
-                       interrupt-parent = <&gic>;
-                       ranges;
-
-                       adma: adma@3880000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x03880000 0x1000>;
-                               interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock_audss EXYNOS_ADMA>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <6>;
-                               #dma-requests = <16>;
-                               power-domains = <&mau_pd>;
-                       };
-
-                       pdma0: pdma@121a0000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x121A0000 0x1000>;
-                               interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_PDMA0>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
-
-                       pdma1: pdma@121b0000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x121B0000 0x1000>;
-                               interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_PDMA1>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
-
-                       mdma0: mdma@10800000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x10800000 0x1000>;
-                               interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_MDMA0>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <1>;
-                       };
+               adma: adma@3880000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x03880000 0x1000>;
+                       interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock_audss EXYNOS_ADMA>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <6>;
+                       #dma-requests = <16>;
+                       power-domains = <&mau_pd>;
+               };
 
-                       mdma1: mdma@11c10000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x11C10000 0x1000>;
-                               interrupts = <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock CLK_MDMA1>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <1>;
-                               /*
-                                * MDMA1 can support both secure and non-secure
-                                * AXI transactions. When this is enabled in
-                                * the kernel for boards that run in secure
-                                * mode, we are getting imprecise external
-                                * aborts causing the kernel to oops.
-                                */
-                               status = "disabled";
-                       };
+               pdma0: pdma@121a0000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x121A0000 0x1000>;
+                       interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_PDMA0>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
+               };
+
+               pdma1: pdma@121b0000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x121B0000 0x1000>;
+                       interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_PDMA1>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
+               };
+
+               mdma0: mdma@10800000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x10800000 0x1000>;
+                       interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_MDMA0>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <1>;
+               };
+
+               mdma1: mdma@11c10000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x11C10000 0x1000>;
+                       interrupts = <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock CLK_MDMA1>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <1>;
+                       /*
+                        * MDMA1 can support both secure and non-secure
+                        * AXI transactions. When this is enabled in
+                        * the kernel for boards that run in secure
+                        * mode, we are getting imprecise external
+                        * aborts causing the kernel to oops.
+                        */
+                       status = "disabled";
                };
 
                i2s0: i2s@3830000 {
index ab27ff8..afe0905 100644 (file)
        status = "okay";
 };
 
-&bus_fsys {
-       operating-points-v2 = <&bus_fsys2_opp_table>;
-       devfreq = <&bus_wcore>;
-       status = "okay";
-};
-
 &bus_fsys2 {
        operating-points-v2 = <&bus_fsys2_opp_table>;
        devfreq = <&bus_wcore>;
index dfb99ab..526729d 100644 (file)
 &cluster_a15_opp_table {
        opp-2000000000 {
                opp-hz = /bits/ 64 <2000000000>;
-               opp-microvolt = <1312500>;
+               opp-microvolt = <1312500 1312500 1500000>;
                clock-latency-ns = <140000>;
        };
        opp-1900000000 {
                opp-hz = /bits/ 64 <1900000000>;
-               opp-microvolt = <1262500>;
+               opp-microvolt = <1262500 1262500 1500000>;
                clock-latency-ns = <140000>;
        };
        opp-1800000000 {
                opp-hz = /bits/ 64 <1800000000>;
-               opp-microvolt = <1237500>;
+               opp-microvolt = <1237500 1237500 1500000>;
                clock-latency-ns = <140000>;
        };
        opp-1700000000 {
index 9c207a6..f0af1bf 100644 (file)
@@ -71,7 +71,7 @@
                interrupt-parent = <&gic>;
                ranges = <0 0xfc000000 0x2000000>;
 
-               L2: l2-cache {
+               L2: cache-controller {
                        compatible = "arm,pl310-cache";
                        reg = <0x100000 0x100000>;
                        interrupts = <0 15 4>;
index 696e698..3ee7967 100644 (file)
                        interrupts = <1 13 0xf01>;
                };
 
-               l2: l2-cache {
+               l2: cache-controller {
                        compatible = "arm,pl310-cache";
                        reg = <0x00a10000 0x100000>;
                        interrupts = <0 15 4>;
index b30448c..9b94098 100644 (file)
                        };
 
                        pwm: pwm@208000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx1-pwm";
                                reg = <0x00208000 0x1000>;
                                interrupts = <34>;
index c5edff3..18289f6 100644 (file)
                                status = "disabled";
                        };
 
-                       ocotp@8002c000 {
+                       efuse@8002c000 {
                                compatible = "fsl,imx23-ocotp", "fsl,ocotp";
                                #address-cells = <1>;
                                #size-cells = <1>;
index 1123e68..1ab19f1 100644 (file)
 
                        pwm2: pwm@53fa0000 {
                                compatible = "fsl,imx25-pwm", "fsl,imx27-pwm";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                reg = <0x53fa0000 0x4000>;
                                clocks = <&clks 106>, <&clks 52>;
                                clock-names = "ipg", "per";
 
                        pwm3: pwm@53fa8000 {
                                compatible = "fsl,imx25-pwm", "fsl,imx27-pwm";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                reg = <0x53fa8000 0x4000>;
                                clocks = <&clks 107>, <&clks 52>;
                                clock-names = "ipg", "per";
                                interrupts = <22>;
                        };
 
-                       esdhc1: esdhc@53fb4000 {
+                       esdhc1: mmc@53fb4000 {
                                compatible = "fsl,imx25-esdhc";
                                reg = <0x53fb4000 0x4000>;
                                interrupts = <9>;
                                status = "disabled";
                        };
 
-                       esdhc2: esdhc@53fb8000 {
+                       esdhc2: mmc@53fb8000 {
                                compatible = "fsl,imx25-esdhc";
                                reg = <0x53fb8000 0x4000>;
                                interrupts = <8>;
 
                        pwm4: pwm@53fc8000 {
                                compatible = "fsl,imx25-pwm", "fsl,imx27-pwm";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                reg = <0x53fc8000 0x4000>;
                                clocks = <&clks 108>, <&clks 52>;
                                clock-names = "ipg", "per";
 
                        pwm1: pwm@53fe0000 {
                                compatible = "fsl,imx25-pwm", "fsl,imx27-pwm";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                reg = <0x53fe0000 0x4000>;
                                clocks = <&clks 105>, <&clks 52>;
                                clock-names = "ipg", "per";
                                interrupts = <26>;
                        };
 
-                       iim: iim@53ff0000 {
+                       iim: efuse@53ff0000 {
                                compatible = "fsl,imx25-iim", "fsl,imx27-iim";
                                reg = <0x53ff0000 0x4000>;
                                interrupts = <19>;
index 002cd22..fc0b318 100644 (file)
                        };
 
                        pwm: pwm@10006000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx27-pwm";
                                reg = <0x10006000 0x1000>;
                                interrupts = <23>;
                                status = "disabled";
                        };
 
-                       sdhci1: sdhci@10013000 {
+                       sdhci1: mmc@10013000 {
                                compatible = "fsl,imx27-mmc", "fsl,imx21-mmc";
                                reg = <0x10013000 0x1000>;
                                interrupts = <11>;
                                status = "disabled";
                        };
 
-                       sdhci2: sdhci@10014000 {
+                       sdhci2: mmc@10014000 {
                                compatible = "fsl,imx27-mmc", "fsl,imx21-mmc";
                                reg = <0x10014000 0x1000>;
                                interrupts = <10>;
                                status = "disabled";
                        };
 
-                       sdhci3: sdhci@1001e000 {
+                       sdhci3: mmc@1001e000 {
                                compatible = "fsl,imx27-mmc", "fsl,imx21-mmc";
                                reg = <0x1001e000 0x1000>;
                                interrupts = <9>;
                                #clock-cells = <1>;
                        };
 
-                       iim: iim@10028000 {
+                       iim: efuse@10028000 {
                                compatible = "fsl,imx27-iim";
                                reg = <0x10028000 0x1000>;
                                interrupts = <62>;
index a1cbbeb..a2b799c 100644 (file)
                                status = "disabled";
                        };
 
-                       ocotp: ocotp@8002c000 {
+                       ocotp: efuse@8002c000 {
                                compatible = "fsl,imx28-ocotp", "fsl,ocotp";
                                #address-cells = <1>;
                                #size-cells = <1>;
index 18270ec..45333f7 100644 (file)
                        reg = <0x50000000 0x100000>;
                        ranges;
 
-                       sdhci1: sdhci@50004000 {
+                       sdhci1: mmc@50004000 {
                                compatible = "fsl,imx31-mmc";
                                reg = <0x50004000 0x4000>;
                                interrupts = <9>;
                                status = "disabled";
                        };
 
-                       sdhci2: sdhci@50008000 {
+                       sdhci2: mmc@50008000 {
                                compatible = "fsl,imx31-mmc";
                                reg = <0x50008000 0x4000>;
                                interrupts = <8>;
                                status = "disabled";
                        };
 
-                       iim: iim@5001c000 {
+                       iim: efuse@5001c000 {
                                compatible = "fsl,imx31-iim", "fsl,imx27-iim";
                                reg = <0x5001c000 0x1000>;
                                interrupts = <19>;
                                interrupts = <26>;
                                clocks = <&clks 10>, <&clks 42>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                status = "disabled";
                        };
                };
index 2ebf2c1..aba1625 100644 (file)
@@ -59,7 +59,7 @@
                interrupt-parent = <&avic>;
                ranges;
 
-               L2: l2-cache@30000000 {
+               L2: cache-controller@30000000 {
                        compatible = "arm,l210-cache";
                        reg = <0x30000000 0x1000>;
                        cache-unified;
                                #interrupt-cells = <2>;
                        };
 
-                       esdhc1: esdhc@53fb4000 {
+                       esdhc1: mmc@53fb4000 {
                                compatible = "fsl,imx35-esdhc";
                                reg = <0x53fb4000 0x4000>;
                                interrupts = <7>;
                                status = "disabled";
                        };
 
-                       esdhc2: esdhc@53fb8000 {
+                       esdhc2: mmc@53fb8000 {
                                compatible = "fsl,imx35-esdhc";
                                reg = <0x53fb8000 0x4000>;
                                interrupts = <8>;
                                status = "disabled";
                        };
 
-                       esdhc3: esdhc@53fbc000 {
+                       esdhc3: mmc@53fbc000 {
                                compatible = "fsl,imx35-esdhc";
                                reg = <0x53fbc000 0x4000>;
                                interrupts = <9>;
                                status = "disabled";
                        };
 
-                       iim@53ff0000 {
+                       efuse@53ff0000 {
                                compatible = "fsl,imx35-iim";
                                reg = <0x53ff0000 0x4000>;
                                interrupts = <19>;
index 1f4ecbc..b6b2e6a 100644 (file)
                                reg = <0x50000000 0x40000>;
                                ranges;
 
-                               esdhc1: esdhc@50004000 {
+                               esdhc1: mmc@50004000 {
                                        compatible = "fsl,imx50-esdhc", "fsl,imx53-esdhc";
                                        reg = <0x50004000 0x4000>;
                                        interrupts = <1>;
                                        status = "disabled";
                                };
 
-                               esdhc2: esdhc@50008000 {
+                               esdhc2: mmc@50008000 {
                                        compatible = "fsl,imx50-esdhc", "fsl,imx53-esdhc";
                                        reg = <0x50008000 0x4000>;
                                        interrupts = <2>;
                                        status = "disabled";
                                };
 
-                               esdhc3: esdhc@50020000 {
+                               esdhc3: mmc@50020000 {
                                        compatible = "fsl,imx50-esdhc", "fsl,imx53-esdhc";
                                        reg = <0x50020000 0x4000>;
                                        interrupts = <3>;
                                        status = "disabled";
                                };
 
-                               esdhc4: esdhc@50024000 {
+                               esdhc4: mmc@50024000 {
                                        compatible = "fsl,imx50-esdhc", "fsl,imx53-esdhc";
                                        reg = <0x50024000 0x4000>;
                                        interrupts = <4>;
                        };
 
                        pwm1: pwm@53fb4000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx50-pwm", "fsl,imx27-pwm";
                                reg = <0x53fb4000 0x4000>;
                                clocks = <&clks IMX5_CLK_PWM1_IPG_GATE>,
                        };
 
                        pwm2: pwm@53fb8000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx50-pwm", "fsl,imx27-pwm";
                                reg = <0x53fb8000 0x4000>;
                                clocks = <&clks IMX5_CLK_PWM2_IPG_GATE>,
index 4344632..6ecb83e 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm_backlight>;
        status = "okay";
index d3583aa..985e1be 100644 (file)
                                reg = <0x70000000 0x40000>;
                                ranges;
 
-                               esdhc1: esdhc@70004000 {
+                               esdhc1: mmc@70004000 {
                                        compatible = "fsl,imx51-esdhc";
                                        reg = <0x70004000 0x4000>;
                                        interrupts = <1>;
                                        status = "disabled";
                                };
 
-                               esdhc2: esdhc@70008000 {
+                               esdhc2: mmc@70008000 {
                                        compatible = "fsl,imx51-esdhc";
                                        reg = <0x70008000 0x4000>;
                                        interrupts = <2>;
                                        status = "disabled";
                                };
 
-                               esdhc3: esdhc@70020000 {
+                               esdhc3: mmc@70020000 {
                                        compatible = "fsl,imx51-esdhc";
                                        reg = <0x70020000 0x4000>;
                                        interrupts = <3>;
                                        status = "disabled";
                                };
 
-                               esdhc4: esdhc@70024000 {
+                               esdhc4: mmc@70024000 {
                                        compatible = "fsl,imx51-esdhc";
                                        reg = <0x70024000 0x4000>;
                                        interrupts = <4>;
                        };
 
                        pwm1: pwm@73fb4000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx51-pwm", "fsl,imx27-pwm";
                                reg = <0x73fb4000 0x4000>;
                                clocks = <&clks IMX5_CLK_PWM1_IPG_GATE>,
                        };
 
                        pwm2: pwm@73fb8000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx51-pwm", "fsl,imx27-pwm";
                                reg = <0x73fb8000 0x4000>;
                                clocks = <&clks IMX5_CLK_PWM2_IPG_GATE>,
                                reg = <0x83f00000 0x60>;
                        };
 
-                       iim: iim@83f98000 {
+                       iim: efuse@83f98000 {
                                compatible = "fsl,imx51-iim", "fsl,imx27-iim";
                                reg = <0x83f98000 0x4000>;
                                interrupts = <69>;
index 8b25416..4508f34 100644 (file)
        >;
 };
 
+&pwm1 {
+       #pwm-cells = <2>;
+};
+
+&pwm2 {
+       #pwm-cells = <2>;
+};
+
 &uart1 {
        status = "okay";
 };
index daab56a..a1a6228 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
index 5ff9a17..f7dcdf9 100644 (file)
                power-supply = <&reg_3v3_lcd>;
        };
 
-       leds {
+       leds-brightness {
                compatible = "pwm-leds";
 
                alarm-brightness {
                };
        };
 
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_alarmled_pins>;
+
+               alarm1 {
+                       label = "alarm:red";
+                       gpios = <&gpio7 3 GPIO_ACTIVE_HIGH>;
+               };
+
+               alarm2 {
+                       label = "alarm:yellow";
+                       gpios = <&gpio7 7 GPIO_ACTIVE_HIGH>;
+               };
+
+               alarm3 {
+                       label = "alarm:blue";
+                       gpios = <&gpio7 8 GPIO_ACTIVE_HIGH>;
+               };
+
+               alarm4 {
+                       label = "alarm:silenced";
+                       gpios = <&gpio7 13 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
        gpio-poweroff {
                compatible = "gpio-poweroff";
                gpios = <&gpio3 9 GPIO_ACTIVE_HIGH>;
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
 };
 
 &pwm2 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm2>;
        status = "okay";
                        MX53_PAD_NANDF_CS3__GPIO6_16            0x0
                        /* POWER_AND_BOOT_STATUS_INDICATOR */
                        MX53_PAD_PATA_INTRQ__GPIO7_2            0x1e4
-                       /* ACTIVATE_ALARM_LIGHT_RED */
-                       MX53_PAD_PATA_DIOR__GPIO7_3             0x0
-                       /* ACTIVATE_ALARM_LIGHT_YELLOW */
-                       MX53_PAD_PATA_DA_1__GPIO7_7             0x0
-                       /* ACTIVATE_ALARM_LIGHT_CYAN */
-                       MX53_PAD_PATA_DA_2__GPIO7_8             0x0
                        /* RUNNING_ON_BATTERY_INDICATOR_GREEN */
                        MX53_PAD_GPIO_16__GPIO7_11              0x0
                        /* BATTERY_STATUS_INDICATOR_AMBER */
                        MX53_PAD_GPIO_17__GPIO7_12              0x0
-                       /* AUDIO_ALARMS_SILENCED_INDICATOR */
-                       MX53_PAD_GPIO_18__GPIO7_13              0x0
                >;
        };
 
                        MX53_PAD_KEY_COL4__USBOH3_USBOTG_OC     0x180
                >;
        };
+
+       pinctrl_alarmled_pins: qmx6alarmledgrp {
+               fsl,pins = <
+                       /* ACTIVATE_ALARM_LIGHT_RED */
+                       MX53_PAD_PATA_DIOR__GPIO7_3             0x0
+                       /* ACTIVATE_ALARM_LIGHT_YELLOW */
+                       MX53_PAD_PATA_DA_1__GPIO7_7             0x0
+                       /* ACTIVATE_ALARM_LIGHT_CYAN */
+                       MX53_PAD_PATA_DA_2__GPIO7_8             0x0
+                       /* AUDIO_ALARMS_SILENCED_INDICATOR */
+                       MX53_PAD_GPIO_18__GPIO7_13              0x0
+               >;
+       };
 };
index ea90fd9..9a6cb13 100644 (file)
        };
 };
 
+&pwm1 {
+       #pwm-cells = <2>;
+};
+
+&pwm2 {
+       #pwm-cells = <2>;
+};
+
 &uart1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart1>;
index 4ab1359..7c9730f 100644 (file)
 &pwm2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm2>;
-       #pwm-cells = <3>;
 };
 
 &sdma {
index afa57bf..500eeaa 100644 (file)
                                reg = <0x50000000 0x40000>;
                                ranges;
 
-                               esdhc1: esdhc@50004000 {
+                               esdhc1: mmc@50004000 {
                                        compatible = "fsl,imx53-esdhc";
                                        reg = <0x50004000 0x4000>;
                                        interrupts = <1>;
                                        status = "disabled";
                                };
 
-                               esdhc2: esdhc@50008000 {
+                               esdhc2: mmc@50008000 {
                                        compatible = "fsl,imx53-esdhc";
                                        reg = <0x50008000 0x4000>;
                                        interrupts = <2>;
                                        status = "disabled";
                                };
 
-                               esdhc3: esdhc@50020000 {
+                               esdhc3: mmc@50020000 {
                                        compatible = "fsl,imx53-esdhc";
                                        reg = <0x50020000 0x4000>;
                                        interrupts = <3>;
                                        status = "disabled";
                                };
 
-                               esdhc4: esdhc@50024000 {
+                               esdhc4: mmc@50024000 {
                                        compatible = "fsl,imx53-esdhc";
                                        reg = <0x50024000 0x4000>;
                                        interrupts = <4>;
                        };
 
                        pwm1: pwm@53fb4000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx53-pwm", "fsl,imx27-pwm";
                                reg = <0x53fb4000 0x4000>;
                                clocks = <&clks IMX5_CLK_PWM1_IPG_GATE>,
                        };
 
                        pwm2: pwm@53fb8000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx53-pwm", "fsl,imx27-pwm";
                                reg = <0x53fb8000 0x4000>;
                                clocks = <&clks IMX5_CLK_PWM2_IPG_GATE>,
                                reg = <0x63f00000 0x60>;
                        };
 
-                       iim: iim@63f98000 {
+                       iim: efuse@63f98000 {
                                compatible = "fsl,imx53-iim", "fsl,imx27-iim";
                                reg = <0x63f98000 0x4000>;
                                interrupts = <69>;
index 37f80ab..809ca56 100644 (file)
@@ -79,5 +79,6 @@
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        status = "okay";
 };
index 8d8c8c2..4d58cb4 100644 (file)
@@ -69,5 +69,6 @@
 };
 
 &pwm3 {
+       #pwm-cells = <2>;
        status = "okay";
 };
index 385ce7b..0289519 100644 (file)
 };
 
 &pwm3 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm3>;
        status = "okay";
diff --git a/arch/arm/boot/dts/imx6dl-prtrvt.dts b/arch/arm/boot/dts/imx6dl-prtrvt.dts
new file mode 100644 (file)
index 0000000..fa88245
--- /dev/null
@@ -0,0 +1,184 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Copyright (c) 2014 Protonic Holland
+ */
+
+/dts-v1/;
+#include "imx6dl.dtsi"
+#include "imx6qdl-prti6q.dtsi"
+#include <dt-bindings/leds/common.h>
+
+/ {
+       model = "Protonic RVT board";
+       compatible = "prt,prtrvt", "fsl,imx6dl";
+
+       memory@10000000 {
+               device_type = "memory";
+               reg = <0x10000000 0x10000000>;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_leds>;
+
+               led-debug0 {
+                       function = LED_FUNCTION_STATUS;
+                       gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "heartbeat";
+               };
+       };
+};
+
+&can1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_can1 &pinctrl_can1phy>;
+       status = "okay";
+};
+
+&ecspi1 {
+       cs-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <20000000>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+       };
+};
+
+&ecspi3 {
+       cs-gpios = <&gpio4 24 GPIO_ACTIVE_HIGH>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_ecspi3>;
+       status = "okay";
+
+       nfc@0 {
+               compatible = "ti,trf7970a";
+               reg = <0>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_nfc>;
+               spi-max-frequency = <2000000>;
+               interrupts-extended = <&gpio5 14 IRQ_TYPE_LEVEL_LOW>;
+               ti,enable-gpios = <&gpio5 12 GPIO_ACTIVE_LOW>,
+                                 <&gpio5 11 GPIO_ACTIVE_LOW>;
+               vin-supply = <&reg_3v3>;
+               vin-voltage-override = <3100000>;
+               autosuspend-delay = <30000>;
+               irq-status-read-quirk;
+               en2-rf-quirk;
+               t5t-rmb-extra-byte-quirk;
+               status = "okay";
+       };
+};
+
+&i2c3 {
+       adc@49 {
+               compatible = "ti,ads1015";
+               reg = <0x49>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               /* nc */
+               channel@4 {
+                       reg = <4>;
+                       ti,gain = <3>;
+                       ti,datarate = <3>;
+               };
+
+               /* nc */
+               channel@5 {
+                       reg = <5>;
+                       ti,gain = <3>;
+                       ti,datarate = <3>;
+               };
+
+               /* can1_l */
+               channel@6 {
+                       reg = <6>;
+                       ti,gain = <3>;
+                       ti,datarate = <3>;
+               };
+
+               /* can1_h */
+               channel@7 {
+                       reg = <7>;
+                       ti,gain = <3>;
+                       ti,datarate = <3>;
+               };
+       };
+
+       rtc@51 {
+               compatible = "nxp,pcf8563";
+               reg = <0x51>;
+       };
+};
+
+&pcie {
+       status = "okay";
+};
+
+&usbh1 {
+       status = "disabled";
+};
+
+&vpu {
+       status = "disabled";
+};
+
+&iomuxc {
+       pinctrl_can1phy: can1phy {
+               fsl,pins = <
+                       /* CAN1_SR */
+                       MX6QDL_PAD_KEY_COL3__GPIO4_IO12 0x13070
+                       /* CAN1_TERM */
+                       MX6QDL_PAD_GPIO_0__GPIO1_IO00   0x1b0b0
+               >;
+       };
+
+       pinctrl_ecspi1: ecspi1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_D17__ECSPI1_MISO         0x100b1
+                       MX6QDL_PAD_EIM_D18__ECSPI1_MOSI         0x100b1
+                       MX6QDL_PAD_EIM_D16__ECSPI1_SCLK         0x100b1
+                       /* CS */
+                       MX6QDL_PAD_EIM_D19__GPIO3_IO19          0x000b1
+               >;
+       };
+
+       pinctrl_ecspi3: ecspi3grp {
+               fsl,pins = <
+                       MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK      0x100b1
+                       MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI      0x100b1
+                       MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO      0x100b1
+                       MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24       0x000b1
+               >;
+       };
+
+       pinctrl_leds: ledsgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_8__GPIO1_IO08           0x1b0b0
+               >;
+       };
+
+       pinctrl_nfc: nfcgrp {
+               fsl,pins = <
+                       /* NFC_ASK_OOK */
+                       MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09      0x100b1
+                       /* NFC_PWR_EN */
+                       MX6QDL_PAD_DISP0_DAT16__GPIO5_IO10      0x100b1
+                       /* NFC_EN2 */
+                       MX6QDL_PAD_DISP0_DAT17__GPIO5_IO11      0x100b1
+                       /* NFC_EN */
+                       MX6QDL_PAD_DISP0_DAT18__GPIO5_IO12      0x100b1
+                       /* NFC_MOD */
+                       MX6QDL_PAD_DISP0_DAT19__GPIO5_IO13      0x100b1
+                       /* NFC_IRQ */
+                       MX6QDL_PAD_DISP0_DAT20__GPIO5_IO14      0x100b1
+               >;
+       };
+};
diff --git a/arch/arm/boot/dts/imx6dl-prtvt7.dts b/arch/arm/boot/dts/imx6dl-prtvt7.dts
new file mode 100644 (file)
index 0000000..306b4f7
--- /dev/null
@@ -0,0 +1,411 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Copyright (c) 2016 Protonic Holland
+ */
+
+/dts-v1/;
+#include "imx6dl.dtsi"
+#include "imx6qdl-prti6q.dtsi"
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/sound/fsl-imx-audmux.h>
+
+/ {
+       model = "Protonic VT7";
+       compatible = "prt,prtvt7", "fsl,imx6dl";
+
+       memory@10000000 {
+               device_type = "memory";
+               reg = <0x10000000 0x20000000>;
+       };
+
+       backlight_lcd: backlight-lcd {
+               compatible = "pwm-backlight";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_backlight>;
+               pwms = <&pwm1 0 500000>;
+               brightness-levels = <0 20 81 248 1000>;
+               default-brightness-level = <20>;
+               num-interpolated-steps = <21>;
+               power-supply = <&reg_bl_12v0>;
+               enable-gpios = <&gpio4 28 GPIO_ACTIVE_HIGH>;
+       };
+
+       keys {
+               compatible = "gpio-keys";
+               autorepeat;
+
+               esc {
+                       label = "GPIO Key ESC";
+                       linux,code = <KEY_ESC>;
+                       gpios = <&gpio_pca 0 GPIO_ACTIVE_LOW>;
+               };
+
+               up {
+                       label = "GPIO Key UP";
+                       linux,code = <KEY_UP>;
+                       gpios = <&gpio_pca 1 GPIO_ACTIVE_LOW>;
+               };
+
+               down {
+                       label = "GPIO Key DOWN";
+                       linux,code = <KEY_DOWN>;
+                       gpios = <&gpio_pca 4 GPIO_ACTIVE_LOW>;
+               };
+
+               enter {
+                       label = "GPIO Key Enter";
+                       linux,code = <KEY_ENTER>;
+                       gpios = <&gpio_pca 3 GPIO_ACTIVE_LOW>;
+               };
+
+               cycle {
+                       label = "GPIO Key CYCLE";
+                       linux,code = <KEY_CYCLEWINDOWS>;
+                       gpios = <&gpio_pca 2 GPIO_ACTIVE_LOW>;
+               };
+
+               f1 {
+                       label = "GPIO Key F1";
+                       linux,code = <KEY_F1>;
+                       gpios = <&gpio_pca 14 GPIO_ACTIVE_LOW>;
+               };
+
+               f2 {
+                       label = "GPIO Key F2";
+                       linux,code = <KEY_F2>;
+                       gpios = <&gpio_pca 13 GPIO_ACTIVE_LOW>;
+               };
+
+               f3 {
+                       label = "GPIO Key F3";
+                       linux,code = <KEY_F3>;
+                       gpios = <&gpio_pca 12 GPIO_ACTIVE_LOW>;
+               };
+
+               f4 {
+                       label = "GPIO Key F4";
+                       linux,code = <KEY_F4>;
+                       gpios = <&gpio_pca 11 GPIO_ACTIVE_LOW>;
+               };
+
+               f5 {
+                       label = "GPIO Key F5";
+                       linux,code = <KEY_F5>;
+                       gpios = <&gpio_pca 10 GPIO_ACTIVE_LOW>;
+               };
+
+               f6 {
+                       label = "GPIO Key F6";
+                       linux,code = <KEY_F6>;
+                       gpios = <&gpio_pca 5 GPIO_ACTIVE_LOW>;
+               };
+
+               f7 {
+                       label = "GPIO Key F7";
+                       linux,code = <KEY_F7>;
+                       gpios = <&gpio_pca 6 GPIO_ACTIVE_LOW>;
+               };
+
+               f8 {
+                       label = "GPIO Key F8";
+                       linux,code = <KEY_F8>;
+                       gpios = <&gpio_pca 7 GPIO_ACTIVE_LOW>;
+               };
+
+               f9 {
+                       label = "GPIO Key F9";
+                       linux,code = <KEY_F9>;
+                       gpios = <&gpio_pca 8 GPIO_ACTIVE_LOW>;
+               };
+
+               f10 {
+                       label = "GPIO Key F10";
+                       linux,code = <KEY_F10>;
+                       gpios = <&gpio_pca 9 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_leds>;
+
+               led-debug0 {
+                       function = LED_FUNCTION_STATUS;
+                       gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "heartbeat";
+               };
+       };
+
+       reg_bl_12v0: regulator-bl-12v0 {
+               compatible = "regulator-fixed";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_reg_bl_12v0>;
+               regulator-name = "bl-12v0";
+               regulator-min-microvolt = <12000000>;
+               regulator-max-microvolt = <12000000>;
+               gpio = <&gpio1 7 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       reg_1v8: regulator-1v8 {
+               compatible = "regulator-fixed";
+               regulator-name = "1v8";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
+       sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "prti6q-sgtl5000";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,widgets =
+                       "Microphone", "Microphone Jack",
+                       "Line", "Line In Jack",
+                       "Headphone", "Headphone Jack",
+                       "Speaker", "External Speaker";
+               simple-audio-card,routing =
+                       "MIC_IN", "Microphone Jack",
+                       "LINE_IN", "Line In Jack",
+                       "Headphone Jack", "HP_OUT",
+                       "External Speaker", "LINE_OUT";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&ssi1>;
+                       system-clock-frequency = <0>;
+               };
+
+               simple-audio-card,codec {
+                       sound-dai = <&sgtl5000>;
+                       bitclock-master;
+                       frame-master;
+               };
+       };
+};
+
+&audmux {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_audmux>;
+       status = "okay";
+
+       mux-ssi1 {
+               fsl,audmux-port = <0>;
+               fsl,port-config = <
+                       IMX_AUDMUX_V2_PTCR_SYN          0
+                       IMX_AUDMUX_V2_PTCR_TFSEL(2)     0
+                       IMX_AUDMUX_V2_PTCR_TCSEL(2)     0
+                       IMX_AUDMUX_V2_PTCR_TFSDIR       0
+                       IMX_AUDMUX_V2_PTCR_TCLKDIR IMX_AUDMUX_V2_PDCR_RXDSEL(2)
+               >;
+       };
+
+       mux-pins3 {
+               fsl,audmux-port = <2>;
+               fsl,port-config = <
+                       IMX_AUDMUX_V2_PTCR_SYN IMX_AUDMUX_V2_PDCR_RXDSEL(0)
+                       0                      IMX_AUDMUX_V2_PDCR_TXRXEN
+               >;
+       };
+};
+
+&can1 {
+       pinctrl-0 = <&pinctrl_can1 &pinctrl_can1phy>;
+};
+
+&clks {
+       assigned-clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>;
+       assigned-clock-parents = <&clks IMX6QDL_CLK_PLL5_VIDEO_DIV>;
+};
+
+&ecspi2 {
+       cs-gpios = <&gpio2 26 GPIO_ACTIVE_HIGH>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_ecspi2>;
+       status = "okay";
+};
+
+&i2c1 {
+       sgtl5000: audio-codec@a {
+               compatible = "fsl,sgtl5000";
+               reg = <0xa>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_codec>;
+               #sound-dai-cells = <0>;
+               clocks = <&clks 201>;
+               VDDA-supply = <&reg_3v3>;
+               VDDIO-supply = <&reg_3v3>;
+               VDDD-supply = <&reg_1v8>;
+       };
+};
+
+&i2c3 {
+       rtc@51 {
+               compatible = "nxp,pcf8563";
+               reg = <0x51>;
+       };
+
+       gpio_pca: gpio@74 {
+               compatible = "nxp,pca9539";
+               reg = <0x74>;
+               interrupts-extended = <&gpio4 5 IRQ_TYPE_LEVEL_LOW>;
+               #gpio-cells = <2>;
+               gpio-controller;
+       };
+};
+
+&ipu1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_ipu1_csi0>;
+       status = "okay";
+};
+
+&pwm1 {
+       #pwm-cells = <2>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_pwm1>;
+       status = "okay";
+};
+
+&snvs_poweroff {
+       status = "okay";
+};
+
+&snvs_pwrkey {
+       status = "okay";
+};
+
+&ssi1 {
+       #sound-dai-cells = <0>;
+       fsl,mode = "ac97-slave";
+       status = "okay";
+};
+
+&usbh1 {
+       status = "disabled";
+};
+
+&vpu {
+       status = "disabled";
+};
+
+&iomuxc {
+       pinctrl_audmux: audmuxgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_CSI0_MCLK__CCM_CLKO1         0x030b0
+                       MX6QDL_PAD_CSI0_DAT7__AUD3_RXD          0x130b0
+                       MX6QDL_PAD_CSI0_DAT4__AUD3_TXC          0x130b0
+                       MX6QDL_PAD_CSI0_DAT5__AUD3_TXD          0x110b0
+                       MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS         0x130b0
+               >;
+       };
+
+       pinctrl_backlight: backlightgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_DISP0_DAT7__GPIO4_IO28       0x1b0b0
+               >;
+       };
+
+       pinctrl_can1phy: can1phy {
+               fsl,pins = <
+                       /* CAN1_SR */
+                       MX6QDL_PAD_KEY_COL3__GPIO4_IO12         0x13070
+                       /* CAN1_TERM */
+                       MX6QDL_PAD_GPIO_0__GPIO1_IO00           0x1b0b0
+               >;
+       };
+
+       pinctrl_codec: codecgrp {
+               fsl,pins = <
+                       /* AUDIO_nRESET */
+                       MX6QDL_PAD_CSI0_VSYNC__GPIO5_IO21       0x1f0b0
+               >;
+       };
+
+       pinctrl_ecspi2: ecspi2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_OE__ECSPI2_MISO          0x100b1
+                       MX6QDL_PAD_EIM_CS0__ECSPI2_SCLK         0x100b1
+                       MX6QDL_PAD_EIM_CS1__ECSPI2_MOSI         0x100b1
+                       MX6QDL_PAD_EIM_RW__GPIO2_IO26           0x000b1
+               >;
+       };
+
+       pinctrl_ipu1_csi0: ipu1csi0grp {
+               fsl,pins = <
+                       MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12 0x1b0b0
+                       MX6QDL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13 0x1b0b0
+                       MX6QDL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14 0x1b0b0
+                       MX6QDL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15 0x1b0b0
+                       MX6QDL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16 0x1b0b0
+                       MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17 0x1b0b0
+                       MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18 0x1b0b0
+                       MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19 0x1b0b0
+                       MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK 0x1b0b0
+                       /* ITU656_nRESET */
+                       MX6QDL_PAD_GPIO_2__GPIO1_IO02           0x1b0b0
+                       /* ITU656_nPDN */
+                       MX6QDL_PAD_CSI0_DATA_EN__GPIO5_IO20     0x1b0b0
+               >;
+       };
+
+       pinctrl_ipu1_disp: ipudisp1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK 0xb0
+                       MX6QDL_PAD_DI0_PIN15__IPU1_DI0_PIN15       0xb0
+
+                       MX6QDL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00 0xb0
+                       MX6QDL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01 0xb0
+                       MX6QDL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02 0xb0
+                       MX6QDL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03 0xb0
+                       MX6QDL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04 0xb0
+                       MX6QDL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05 0xb0
+                       MX6QDL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06 0xb0
+                       MX6QDL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07 0xb0
+
+                       MX6QDL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08 0xb0
+                       MX6QDL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09 0xb0
+                       MX6QDL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10 0xb0
+                       MX6QDL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11 0xb0
+                       MX6QDL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12 0xb0
+                       MX6QDL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13 0xb0
+                       MX6QDL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14 0xb0
+                       MX6QDL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15 0xb0
+
+                       MX6QDL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16 0xb0
+                       MX6QDL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17 0xb0
+                       MX6QDL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18 0xb0
+                       MX6QDL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19 0xb0
+                       MX6QDL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20 0xb0
+                       MX6QDL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21 0xb0
+                       MX6QDL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22 0xb0
+                       MX6QDL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23 0xb0
+               >;
+       };
+
+       pinctrl_leds: ledsgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_8__GPIO1_IO08           0x1b0b0
+               >;
+       };
+
+       pinctrl_pwm1: pwm1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_9__PWM1_OUT             0x1b0b0
+               >;
+       };
+
+       pinctrl_reg_bl_12v0: 12blgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_7__GPIO1_IO07           0x1b0b0
+               >;
+       };
+
+       pinctrl_tsc: tscgrp {
+
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_D20__GPIO3_IO20          0x1b0b0
+                       MX6QDL_PAD_EIM_EB2__GPIO2_IO30          0x1b0b0
+               >;
+       };
+};
index 2b9423d..c4a235d 100644 (file)
 };
 
 &pwm1 {
-       #pwm-cells = <3>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "disabled";
index 37c6340..fc81f2f 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
index a2dd7e5..a685b1c 100644 (file)
 &pwm1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
-       #pwm-cells = <3>;
        status = "okay";
 };
 
index 83524bb..fef5d72 100644 (file)
 };
 
 &pwm2 {
-       #pwm-cells = <3>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm2>;
        status = "okay";
index 24c8169..1ade0bf 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
 };
 
 &pwm2 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm2>;
        status = "okay";
index a4d2954..55692c7 100644 (file)
 };
 
 &pwm2 {
-       #pwm-cells = <3>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm2>;
        status = "okay";
index 69f170f..52e3567 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        status = "okay";
 };
 
index a31b17e..7a33e54 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
diff --git a/arch/arm/boot/dts/imx6q-prti6q.dts b/arch/arm/boot/dts/imx6q-prti6q.dts
new file mode 100644 (file)
index 0000000..de6cbaa
--- /dev/null
@@ -0,0 +1,543 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Copyright (c) 2014 Protonic Holland
+ */
+
+/dts-v1/;
+#include "imx6q.dtsi"
+#include "imx6qdl-prti6q.dtsi"
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/sound/fsl-imx-audmux.h>
+
+/ {
+       model = "Protonic PRTI6Q board";
+       compatible = "prt,prti6q", "fsl,imx6q";
+
+       memory@10000000 {
+               device_type = "memory";
+               reg = <0x10000000 0xf0000000>;
+       };
+
+       backlight_lcd: backlight-lcd {
+               compatible = "pwm-backlight";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_backlight>;
+               pwms = <&pwm1 0 5000000>;
+               brightness-levels = <0 16 64 255>;
+               num-interpolated-steps = <16>;
+               default-brightness-level = <1>;
+               power-supply = <&reg_3v3>;
+               enable-gpios = <&gpio4 28 GPIO_ACTIVE_HIGH>;
+       };
+
+       can_osc: can-osc {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <25000000>;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_leds>;
+
+               led-debug0 {
+                       function = LED_FUNCTION_STATUS;
+                       gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "heartbeat";
+               };
+
+               led-debug1 {
+                       function = LED_FUNCTION_SD;
+                       gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "disk-activity";
+               };
+       };
+
+       panel {
+               compatible = "kyo,tcg121xglp";
+               backlight = <&backlight_lcd>;
+
+               port {
+                       panel_in: endpoint {
+                               remote-endpoint = <&lvds0_out>;
+                       };
+               };
+       };
+
+       reg_1v8: regulator-1v8 {
+               compatible = "regulator-fixed";
+               regulator-name = "1v8";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
+       reg_wifi: regulator-wifi {
+               compatible = "regulator-fixed";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_wifi_npd>;
+               enable-active-high;
+               gpio = <&gpio1 26 GPIO_ACTIVE_HIGH>;
+               regulator-max-microvolt = <1800000>;
+               regulator-min-microvolt = <1800000>;
+               regulator-name = "regulator-WL12xx";
+               startup-delay-us = <70000>;
+       };
+
+       sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "prti6q-sgtl5000";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,widgets =
+                       "Microphone", "Microphone Jack",
+                       "Line", "Line In Jack",
+                       "Headphone", "Headphone Jack",
+                       "Speaker", "External Speaker";
+               simple-audio-card,routing =
+                       "MIC_IN", "Microphone Jack",
+                       "LINE_IN", "Line In Jack",
+                       "Headphone Jack", "HP_OUT",
+                       "External Speaker", "LINE_OUT";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&ssi1>;
+                       system-clock-frequency = <0>;
+               };
+
+               simple-audio-card,codec {
+                       sound-dai = <&sgtl5000>;
+                       bitclock-master;
+                       frame-master;
+               };
+       };
+
+       sound-spdif {
+               compatible = "fsl,imx-audio-spdif";
+               model = "imx-spdif";
+               spdif-controller = <&spdif>;
+               spdif-in;
+               spdif-out;
+       };
+};
+
+&audmux {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_audmux>;
+       status = "okay";
+
+       mux-ssi1 {
+               fsl,audmux-port = <0>;
+               fsl,port-config = <
+                       IMX_AUDMUX_V2_PTCR_SYN          0
+                       IMX_AUDMUX_V2_PTCR_TFSEL(2)     0
+                       IMX_AUDMUX_V2_PTCR_TCSEL(2)     0
+                       IMX_AUDMUX_V2_PTCR_TFSDIR       0
+                       IMX_AUDMUX_V2_PTCR_TCLKDIR IMX_AUDMUX_V2_PDCR_RXDSEL(2)
+               >;
+       };
+
+       mux-pins3 {
+               fsl,audmux-port = <2>;
+               fsl,port-config = <
+                       IMX_AUDMUX_V2_PTCR_SYN IMX_AUDMUX_V2_PDCR_RXDSEL(0)
+                       0                      IMX_AUDMUX_V2_PDCR_TXRXEN
+               >;
+       };
+};
+
+&can1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_can1>;
+       status = "okay";
+};
+
+&can2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_can2>;
+       status = "okay";
+};
+
+&ecspi1 {
+       cs-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <20000000>;
+       };
+};
+
+&ecspi2 {
+       cs-gpios = <&gpio2 26 GPIO_ACTIVE_HIGH>, <&gpio4 25 GPIO_ACTIVE_HIGH>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>;
+       status = "okay";
+
+       can@0 {
+               compatible = "microchip,mcp2515";
+               reg = <0>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_can3>;
+               clocks = <&can_osc>;
+               interrupts-extended = <&gpio3 20 IRQ_TYPE_LEVEL_LOW>;
+               spi-max-frequency = <5000000>;
+       };
+
+       adc@1 {
+               compatible = "ti,adc128s052";
+               reg = <1>;
+               spi-max-frequency = <2000000>;
+               vref-supply = <&reg_3v3>;
+       };
+};
+
+&ecspi3 {
+       cs-gpios = <&gpio4 24 GPIO_ACTIVE_HIGH>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_ecspi3>;
+       status = "okay";
+};
+
+&fec {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_enet>;
+       phy-mode = "rgmii-id";
+       phy-handle = <&rgmii_phy>;
+       status = "okay";
+
+       mdio {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               /* Microchip KSZ9031RNX PHY */
+               rgmii_phy: ethernet-phy@4 {
+                       reg = <4>;
+                       interrupts-extended = <&gpio1 28 IRQ_TYPE_LEVEL_LOW>;
+                       reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
+                       reset-assert-us = <10000>;
+                       reset-deassert-us = <300>;
+               };
+       };
+};
+
+&hdmi {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_hdmi>;
+       ddc-i2c-bus = <&i2c2>;
+       status = "okay";
+};
+
+&i2c1 {
+       sgtl5000: audio-codec@a {
+               compatible = "fsl,sgtl5000";
+               reg = <0xa>;
+               #sound-dai-cells = <0>;
+               clocks = <&clks 201>;
+               VDDA-supply = <&reg_3v3>;
+               VDDIO-supply = <&reg_3v3>;
+               VDDD-supply = <&reg_1v8>;
+       };
+};
+
+/* DDC */
+&i2c2 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c2>;
+       status = "okay";
+};
+
+&i2c3 {
+       adc@49 {
+               compatible = "ti,ads1015";
+               reg = <0x49>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               /* can2_l */
+               channel@4 {
+                       reg = <4>;
+                       ti,gain = <3>;
+                       ti,datarate = <3>;
+               };
+
+               /* can2_h */
+               channel@5 {
+                       reg = <5>;
+                       ti,gain = <3>;
+                       ti,datarate = <3>;
+               };
+
+               /* can1_l */
+               channel@6 {
+                       reg = <6>;
+                       ti,gain = <3>;
+                       ti,datarate = <3>;
+               };
+
+               /* can1_h */
+               channel@7 {
+                       reg = <7>;
+                       ti,gain = <3>;
+                       ti,datarate = <3>;
+               };
+       };
+};
+
+&pcie {
+       status = "okay";
+};
+
+&pwm1 {
+       #pwm-cells = <2>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_pwm1>;
+       status = "okay";
+};
+
+&ldb {
+       status = "okay";
+
+       lvds-channel@0 {
+               status = "okay";
+
+               port@4 {
+                       reg = <4>;
+
+                       lvds0_out: endpoint {
+                               remote-endpoint = <&panel_in>;
+                       };
+               };
+       };
+};
+
+&sata {
+       status = "okay";
+};
+
+&snvs_poweroff {
+       status = "okay";
+};
+
+&spdif {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_spdif>;
+       status = "okay";
+};
+
+&ssi1 {
+       #sound-dai-cells = <0>;
+       fsl,mode = "ac97-slave";
+       status = "okay";
+};
+
+&uart2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart2>;
+       status = "okay";
+};
+
+&uart5 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart5>;
+       status = "okay";
+};
+
+&usbotg {
+       pinctrl-0 = <&pinctrl_usbotg &pinctrl_usbotg_id>;
+};
+
+&usdhc2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc2>;
+       non-removable;
+       vmmc-supply = <&reg_wifi>;
+       cap-power-off-card;
+       keep-power-in-suspend;
+       status = "okay";
+
+       wifi {
+               compatible = "ti,wl1271";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_wifi>;
+               interrupts-extended = <&gpio1 30 IRQ_TYPE_LEVEL_HIGH>;
+               ref-clock-frequency = "38400000";
+               tcxo-clock-frequency = "19200000";
+       };
+};
+
+&iomuxc {
+       pinctrl_audmux: audmuxgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_CSI0_MCLK__CCM_CLKO1         0x030b0
+                       MX6QDL_PAD_CSI0_DAT7__AUD3_RXD          0x130b0
+                       MX6QDL_PAD_CSI0_DAT4__AUD3_TXC          0x130b0
+                       MX6QDL_PAD_CSI0_DAT5__AUD3_TXD          0x110b0
+                       MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS         0x130b0
+               >;
+       };
+
+       pinctrl_backlight: backlightgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_DISP0_DAT7__GPIO4_IO28       0x1b0b0
+               >;
+       };
+
+       pinctrl_can2: can2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_KEY_COL4__FLEXCAN2_TX        0x1b008
+                       MX6QDL_PAD_KEY_ROW4__FLEXCAN2_RX        0x1b008
+               >;
+       };
+
+       pinctrl_can3: can3grp {
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_D20__GPIO3_IO20          0x1b0b1
+               >;
+       };
+
+       pinctrl_ecspi1: ecspi1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_D17__ECSPI1_MISO         0x100b1
+                       MX6QDL_PAD_EIM_D18__ECSPI1_MOSI         0x100b1
+                       MX6QDL_PAD_EIM_D16__ECSPI1_SCLK         0x100b1
+                       /* CS */
+                       MX6QDL_PAD_EIM_D19__GPIO3_IO19          0x000b1
+               >;
+       };
+
+       pinctrl_ecspi2: ecspi2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_OE__ECSPI2_MISO          0x100b1
+                       MX6QDL_PAD_EIM_CS0__ECSPI2_SCLK         0x100b1
+                       MX6QDL_PAD_EIM_CS1__ECSPI2_MOSI         0x100b1
+                       MX6QDL_PAD_EIM_RW__GPIO2_IO26           0x000b1
+               >;
+       };
+
+       pinctrl_ecspi2_cs: ecspi2csgrp {
+               fsl,pins = <
+                       /* ADC128S022 CS */
+                       MX6QDL_PAD_DISP0_DAT4__GPIO4_IO25       0x1b0b1
+               >;
+       };
+
+       pinctrl_ecspi3: ecspi3grp {
+               fsl,pins = <
+                       MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK      0x100b1
+                       MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI      0x100b1
+                       MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO      0x100b1
+                       MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24       0x000b1
+               >;
+       };
+
+       pinctrl_enet: enetgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_RGMII_RXC__RGMII_RXC         0x1b030
+                       MX6QDL_PAD_RGMII_RD0__RGMII_RD0         0x1b030
+                       MX6QDL_PAD_RGMII_RD1__RGMII_RD1         0x1b030
+                       MX6QDL_PAD_RGMII_RD2__RGMII_RD2         0x1b030
+                       MX6QDL_PAD_RGMII_RD3__RGMII_RD3         0x1b030
+                       MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL   0x1b030
+                       MX6QDL_PAD_RGMII_TXC__RGMII_TXC         0x10030
+                       MX6QDL_PAD_RGMII_TD0__RGMII_TD0         0x10030
+                       MX6QDL_PAD_RGMII_TD1__RGMII_TD1         0x10030
+                       MX6QDL_PAD_RGMII_TD2__RGMII_TD2         0x10030
+                       MX6QDL_PAD_RGMII_TD3__RGMII_TD3         0x10030
+                       MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL   0x10030
+                       MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK    0x10030
+                       MX6QDL_PAD_ENET_MDIO__ENET_MDIO         0x10030
+                       MX6QDL_PAD_ENET_MDC__ENET_MDC           0x10030
+
+                       /* Phy reset */
+                       MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25      0x1b0b0
+                       MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28       0x1b0b1
+               >;
+       };
+
+       pinctrl_hdmi: hdmigrp {
+               fsl,pins = <
+                       /* NOTE: DDC is done via I2C2, so DON'T
+                        * configure DDC pins for HDMI!
+                        */
+                       MX6QDL_PAD_EIM_A25__HDMI_TX_CEC_LINE    0x1f8b0
+               >;
+       };
+
+       /* DDC */
+       pinctrl_i2c2: i2c2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_KEY_COL3__I2C2_SCL   0x4001b8b1
+                       MX6QDL_PAD_KEY_ROW3__I2C2_SDA   0x4001b8b1
+               >;
+       };
+
+       pinctrl_leds: ledsgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_8__GPIO1_IO08           0x1b0b0
+                       MX6QDL_PAD_GPIO_9__GPIO1_IO09           0x1b0b0
+               >;
+       };
+
+       pinctrl_pwm1: pwm1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_DISP0_DAT8__PWM1_OUT         0x1b0b0
+               >;
+       };
+
+       pinctrl_spdif: spdifgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_16__SPDIF_IN            0x1b0b0
+                       MX6QDL_PAD_GPIO_19__SPDIF_OUT           0x1b0b0
+               >;
+       };
+
+       pinctrl_uart2: uart2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_D26__UART2_RX_DATA       0x1b0b1
+                       MX6QDL_PAD_EIM_D27__UART2_TX_DATA       0x1b0b1
+                       MX6QDL_PAD_EIM_D28__UART2_DTE_CTS_B     0x1b0b1
+                       MX6QDL_PAD_EIM_D29__UART2_DTE_RTS_B     0x1b0b1
+               >;
+       };
+
+       pinctrl_uart5: uart5grp {
+               fsl,pins = <
+                       MX6QDL_PAD_KEY_COL1__UART5_TX_DATA      0x1b0b1
+                       MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA      0x1b0b1
+               >;
+       };
+
+       pinctrl_usbotg_id: usbotgidgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID       0x1f058
+               >;
+       };
+
+       pinctrl_usdhc2: usdhc2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_SD2_CMD__SD2_CMD             0x170b9
+                       MX6QDL_PAD_SD2_CLK__SD2_CLK             0x100b9
+                       MX6QDL_PAD_SD2_DAT0__SD2_DATA0          0x170b9
+                       MX6QDL_PAD_SD2_DAT1__SD2_DATA1          0x170b9
+                       MX6QDL_PAD_SD2_DAT2__SD2_DATA2          0x170b9
+                       MX6QDL_PAD_SD2_DAT3__SD2_DATA3          0x170b9
+               >;
+       };
+
+       pinctrl_wifi: wifigrp {
+               fsl,pins = <
+                       /* WL12xx IRQ */
+                       MX6QDL_PAD_ENET_TXD0__GPIO1_IO30        0x10880
+               >;
+       };
+
+       pinctrl_wifi_npd: wifinpd {
+               fsl,pins = <
+                       MX6QDL_PAD_ENET_RXD1__GPIO1_IO26        0x1b8b0
+               >;
+       };
+};
diff --git a/arch/arm/boot/dts/imx6q-prtwd2.dts b/arch/arm/boot/dts/imx6q-prtwd2.dts
new file mode 100644 (file)
index 0000000..dffafbc
--- /dev/null
@@ -0,0 +1,188 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2018 Protonic Holland
+ */
+
+/dts-v1/;
+#include "imx6q.dtsi"
+#include "imx6qdl-prti6q.dtsi"
+#include <dt-bindings/leds/common.h>
+
+/ {
+       model = "Protonic WD2 board";
+       compatible = "prt,prtwd2", "fsl,imx6q";
+
+       memory@10000000 {
+               device_type = "memory";
+               reg = <0x10000000 0x20000000>;
+       };
+
+       memory@80000000 {
+               device_type = "memory";
+               reg = <0x80000000 0x20000000>;
+       };
+
+       usdhc2_wifi_pwrseq: usdhc2_wifi_pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_wifi_npd>;
+               reset-gpios = <&gpio6 10 GPIO_ACTIVE_LOW>;
+       };
+
+       /* PRTWD2 rev 1 bitbang I2C for Ethernet Switch */
+       i2c@4 {
+               compatible = "i2c-gpio";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_i2c4>;
+               sda-gpios = <&gpio1 22 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+               scl-gpios = <&gpio1 31 GPIO_ACTIVE_HIGH>;
+               i2c-gpio,delay-us = <20>;       /* ~10 kHz */
+               i2c-gpio,scl-output-only;
+               #address-cells = <1>;
+               #size-cells = <0>;
+       };
+};
+
+&can1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_can1 &pinctrl_can1phy>;
+       status = "okay";
+};
+
+&fec {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_enet>;
+       phy-mode = "rmii";
+       clocks = <&clks IMX6QDL_CLK_ENET>,
+                <&clks IMX6QDL_CLK_ENET>;
+       clock-names = "ipg", "ahb";
+       status = "okay";
+
+       fixed-link {
+               speed = <100>;
+               pause;
+               full-duplex;
+       };
+};
+
+&i2c3 {
+       adc@49 {
+               compatible = "ti,ads1015";
+               reg = <0x49>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               /* V in */
+               channel@4 {
+                       reg = <4>;
+                       ti,gain = <1>;
+                       ti,datarate = <3>;
+               };
+
+               /* I charge */
+               channel@5 {
+                       reg = <5>;
+                       ti,gain = <1>;
+                       ti,datarate = <3>;
+               };
+
+               /* V bus  */
+               channel@6 {
+                       reg = <6>;
+                       ti,gain = <1>;
+                       ti,datarate = <3>;
+               };
+
+               /* nc */
+               channel@7 {
+                       reg = <7>;
+                       ti,gain = <1>;
+                       ti,datarate = <3>;
+               };
+       };
+};
+
+&usdhc2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc2>;
+       no-1-8-v;
+       non-removable;
+       mmc-pwrseq = <&usdhc2_wifi_pwrseq>;
+       #address-cells = <1>;
+       #size-cells = <0>;
+       status = "okay";
+
+       wifi@1 {
+               compatible = "brcm,bcm4329-fmac";
+               reg = <1>;
+       };
+};
+
+&iomuxc {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usb_eth_chg>;
+
+       pinctrl_can1phy: can1phy {
+               fsl,pins = <
+                       /* CAN1_SR */
+                       MX6QDL_PAD_KEY_COL3__GPIO4_IO12 0x13070
+               >;
+       };
+
+       pinctrl_enet: enetgrp {
+               fsl,pins = <
+                       /* MX6QDL_ENET_PINGRP4 */
+                       MX6QDL_PAD_ENET_RXD0__ENET_RX_DATA0     0x1b0b0
+                       MX6QDL_PAD_ENET_RXD1__ENET_RX_DATA1     0x1b0b0
+                       MX6QDL_PAD_ENET_RX_ER__ENET_RX_ER       0x130b0
+                       MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN       0x1b0b0
+                       MX6QDL_PAD_ENET_TXD0__ENET_TX_DATA0     0x1b0b0
+                       MX6QDL_PAD_ENET_TXD1__ENET_TX_DATA1     0x1b0b0
+                       MX6QDL_PAD_ENET_CRS_DV__ENET_RX_EN      0x1b0b0
+
+                       MX6QDL_PAD_GPIO_16__ENET_REF_CLK        0x1b0b0
+                       /* Phy reset */
+                       MX6QDL_PAD_CSI0_DAT4__GPIO5_IO22        0x1b0b0
+                       /* nINTRP */
+                       MX6QDL_PAD_CSI0_DAT5__GPIO5_IO23        0x1b0b0
+
+                       MX6QDL_PAD_ENET_MDIO__ENET_MDIO         0x10030
+                       MX6QDL_PAD_ENET_MDC__ENET_MDC           0x10030
+               >;
+       };
+
+       pinctrl_i2c4: i2c4grp {
+               fsl,pins = <
+                       MX6QDL_PAD_ENET_MDIO__GPIO1_IO22        0x1f8b0
+                       MX6QDL_PAD_ENET_MDC__GPIO1_IO31         0x1f8b0
+               >;
+       };
+
+       pinctrl_usb_eth_chg: usbethchggrp {
+               fsl,pins = <
+                       /* USB charging control */
+                       MX6QDL_PAD_NANDF_CS0__GPIO6_IO11        0x130b0
+                       MX6QDL_PAD_NANDF_CS1__GPIO6_IO14        0x130b0
+                       MX6QDL_PAD_NANDF_CS2__GPIO6_IO15        0x130b0
+                       MX6QDL_PAD_NANDF_CS3__GPIO6_IO16        0x130b0
+                       >;
+       };
+
+       pinctrl_usdhc2: usdhc2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_SD2_CMD__SD2_CMD             0x170b9
+                       MX6QDL_PAD_SD2_CLK__SD2_CLK             0x100b9
+                       MX6QDL_PAD_SD2_DAT0__SD2_DATA0          0x170b9
+                       MX6QDL_PAD_SD2_DAT1__SD2_DATA1          0x170b9
+                       MX6QDL_PAD_SD2_DAT2__SD2_DATA2          0x170b9
+                       MX6QDL_PAD_SD2_DAT3__SD2_DATA3          0x170b9
+               >;
+       };
+
+       pinctrl_wifi_npd: wifinpd {
+               fsl,pins = <
+                       /* WL_REG_ON */
+                       MX6QDL_PAD_NANDF_RB0__GPIO6_IO10        0x13069
+               >;
+       };
+};
index bfff87c..861e05d 100644 (file)
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_enet>;
        phy-mode = "rgmii-id";
-       phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
+       phy-handle = <&phy>;
        status = "okay";
+
+       mdio {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               phy: ethernet-phy@4 {
+                       reg = <4>;
+                       qca,clk-out-frequency = <125000000>;
+                       reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
+                       reset-assert-us = <10000>;
+               };
+       };
 };
 
 &hdmi {
index c54362f..a57c2e3 100644 (file)
 };
 
 &pwm2 {
+       #pwm-cells = <2>;
        status = "okay";
 };
 
index e34be8f..dbdd7db 100644 (file)
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "disabled";
index b8e74ab..2577eb4 100644 (file)
 };
 
 &pwm3 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm3>;
        status = "okay";
index 3767508..d38630d 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
index 240b86d..0930194 100644 (file)
 
 /* Colibri PWM<A> */
 &pwm3 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm3>;
        status = "disabled";
 };
 
 &usbotg {
-       pinctrl-names = "default";
        disable-over-current;
        dr_mode = "peripheral";
        status = "disabled";
index e3be453..6704279 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        status = "okay";
 };
 
index 70d2661..35e230f 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        status = "okay";
 };
 
 &pwm3 {
+       #pwm-cells = <2>;
        status = "okay";
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        status = "okay";
 };
 
index 419a7cd..7705285 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        /* these are used by bootloader for disabling nodes */
                bootargs = "console=ttymxc1,115200";
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_an1";
+                       };
+
+                       channel@23 {
+                               gw,mode = <1>;
+                               reg = <0x23>;
+                               label = "vdd_2p5";
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
+               compatible = "nxp,pca9555";
+               reg = <0x23>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
+       };
+
        eeprom1: eeprom@50 {
                compatible = "atmel,24c02";
                reg = <0x50>;
                pagesize = <16>;
        };
 
-       gpio: pca9555@23 {
-               compatible = "nxp,pca9555";
-               reg = <0x23>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
-
        rtc: ds1672@68 {
                compatible = "dallas,ds1672";
                reg = <0x68>;
                fsl,pins = <
                        MX6QDL_PAD_EIM_D21__I2C1_SCL            0x4001b8b1
                        MX6QDL_PAD_EIM_D28__I2C1_SDA            0x4001b8b1
+                       MX6QDL_PAD_GPIO_4__GPIO1_IO04           0x0001b0b0 /* GSC_IRQ# */
                >;
        };
 
index 60563ff..a46ea98 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        /* these are used by bootloader for disabling nodes */
                default-brightness-level = <7>;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_1p0";
+                       };
+
+                       channel@23 {
+                               gw,mode = <1>;
+                               reg = <0x23>;
+                               label = "vdd_2p5";
+                       };
+
+                       channel@29 {
+                               gw,mode = <1>;
+                               reg = <0x29>;
+                               label = "vdd_an1";
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
+               compatible = "nxp,pca9555";
+               reg = <0x23>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
+       };
+
        eeprom1: eeprom@50 {
                compatible = "atmel,24c02";
                reg = <0x50>;
                pagesize = <16>;
        };
 
-       gpio: pca9555@23 {
-               compatible = "nxp,pca9555";
-               reg = <0x23>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
-
        rtc: ds1672@68 {
                compatible = "dallas,ds1672";
                reg = <0x68>;
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "okay";
                fsl,pins = <
                        MX6QDL_PAD_EIM_D21__I2C1_SCL            0x4001b8b1
                        MX6QDL_PAD_EIM_D28__I2C1_SDA            0x4001b8b1
+                       MX6QDL_PAD_GPIO_4__GPIO1_IO04           0xb0b1
                >;
        };
 
index 8942bec..a28e794 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        /* these are used by bootloader for disabling nodes */
                default-brightness-level = <7>;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_1p0";
+                       };
+
+                       channel@23 {
+                               gw,mode = <1>;
+                               reg = <0x23>;
+                               label = "vdd_2p5";
+                       };
+
+                       channel@26 {
+                               gw,mode = <1>;
+                               reg = <0x26>;
+                               label = "vdd_gps";
+                       };
+
+                       channel@29 {
+                               gw,mode = <1>;
+                               reg = <0x29>;
+                               label = "vdd_an1";
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
+               compatible = "nxp,pca9555";
+               reg = <0x23>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
+       };
+
        eeprom1: eeprom@50 {
                compatible = "atmel,24c02";
                reg = <0x50>;
                pagesize = <16>;
        };
 
-       gpio: pca9555@23 {
-               compatible = "nxp,pca9555";
-               reg = <0x23>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
-
        rtc: ds1672@68 {
                compatible = "dallas,ds1672";
                reg = <0x68>;
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "okay";
                fsl,pins = <
                        MX6QDL_PAD_EIM_D21__I2C1_SCL            0x4001b8b1
                        MX6QDL_PAD_EIM_D28__I2C1_SDA            0x4001b8b1
+                       MX6QDL_PAD_GPIO_4__GPIO1_IO04           0xb0b1
                >;
        };
 
index c40583d..b5f934b 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 #include <dt-bindings/sound/fsl-imx-audmux.h>
 
 / {
                default-brightness-level = <7>;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_1p0";
+                       };
+
+                       channel@23 {
+                               gw,mode = <1>;
+                               reg = <0x23>;
+                               label = "vdd_2p5";
+                       };
+
+                       channel@26 {
+                               gw,mode = <1>;
+                               reg = <0x26>;
+                               label = "vdd_gps";
+                       };
+               };
+
+               fan-controller@2c {
+                       compatible = "gw,gsc-fan";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x2c>;
+               };
+       };
+
+       gsc_gpio: gpio@23 {
+               compatible = "nxp,pca9555";
+               reg = <0x23>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
+       };
+
        eeprom1: eeprom@50 {
                compatible = "atmel,24c02";
                reg = <0x50>;
                pagesize = <16>;
        };
 
-       gpio: pca9555@23 {
-               compatible = "nxp,pca9555";
-               reg = <0x23>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
-
        rtc: ds1672@68 {
                compatible = "dallas,ds1672";
                reg = <0x68>;
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default", "state_dio";
        pinctrl-0 = <&pinctrl_pwm4_backlight>;
        pinctrl-1 = <&pinctrl_pwm4_dio>;
                fsl,pins = <
                        MX6QDL_PAD_EIM_D21__I2C1_SCL            0x4001b8b1
                        MX6QDL_PAD_EIM_D28__I2C1_SDA            0x4001b8b1
+                       MX6QDL_PAD_GPIO_4__GPIO1_IO04           0xb0b1
                >;
        };
 
index c38e86e..ea41875 100644 (file)
@@ -47,6 +47,7 @@
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/media/tda1997x.h>
+#include <dt-bindings/input/linux-event-codes.h>
 #include <dt-bindings/sound/fsl-imx-audmux.h>
 
 / {
                bootargs = "console=ttymxc1,115200";
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8a";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_1p0b";
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
+               compatible = "nxp,pca9555";
+               reg = <0x23>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
+       };
+
        eeprom1: eeprom@50 {
                compatible = "atmel,24c02";
                reg = <0x50>;
                pagesize = <16>;
        };
 
-       gpio: pca9555@23 {
-               compatible = "nxp,pca9555";
-               reg = <0x23>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
-
        rtc: ds1672@68 {
                compatible = "dallas,ds1672";
                reg = <0x68>;
                fsl,pins = <
                        MX6QDL_PAD_EIM_D21__I2C1_SCL            0x4001b8b1
                        MX6QDL_PAD_EIM_D28__I2C1_SDA            0x4001b8b1
+                       MX6QDL_PAD_GPIO_4__GPIO1_IO04           0xb0b1
                >;
        };
 
index bb35971..0da6e6f 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        /* these are used by bootloader for disabling nodes */
                bootargs = "console=ttymxc1,115200";
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_1p0";
+                       };
+
+                       channel@23 {
+                               gw,mode = <1>;
+                               reg = <0x23>;
+                               label = "vdd_2p5";
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
+               compatible = "nxp,pca9555";
+               reg = <0x23>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
+       };
+
        eeprom1: eeprom@50 {
                compatible = "atmel,24c02";
                reg = <0x50>;
                pagesize = <16>;
        };
 
-       gpio: pca9555@23 {
-               compatible = "nxp,pca9555";
-               reg = <0x23>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
-
        rtc: ds1672@68 {
                compatible = "dallas,ds1672";
                reg = <0x68>;
                fsl,pins = <
                        MX6QDL_PAD_EIM_D21__I2C1_SCL            0x4001b8b1
                        MX6QDL_PAD_EIM_D28__I2C1_SDA            0x4001b8b1
+                       MX6QDL_PAD_GPIO_4__GPIO1_IO04           0xb0b1
                >;
        };
 
index ee85031..db30de5 100644 (file)
@@ -46,6 +46,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        /* these are used by bootloader for disabling nodes */
                stdout-path = &uart2;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
-       gpio: pca9555@23 {
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8a";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_1p0b";
+                       };
+
+                       channel@26 {
+                               gw,mode = <1>;
+                               reg = <0x26>;
+                               label = "vdd_an1";
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
                compatible = "nxp,pca9555";
                reg = <0x23>;
                gpio-controller;
                #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
        };
 
        eeprom1: eeprom@50 {
                fsl,pins = <
                        MX6QDL_PAD_EIM_D21__I2C1_SCL            0x4001b8b1
                        MX6QDL_PAD_EIM_D28__I2C1_SDA            0x4001b8b1
+                       MX6QDL_PAD_GPIO_4__GPIO1_IO04           0xb0b1
                >;
        };
 
index 69ca70d..d6b0745 100644 (file)
                default-on;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_an1";
+                       };
+
+                       channel@23 {
+                               gw,mode = <1>;
+                               reg = <0x23>;
+                               label = "vdd_2p5";
+                       };
+
+                       channel@26 {
+                               gw,mode = <1>;
+                               reg = <0x26>;
+                               label = "vdd_gps";
+                       };
+
+                       channel@29 {
+                               gw,mode = <1>;
+                               reg = <0x29>;
+                               label = "vdd_an2";
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
+               compatible = "nxp,pca9555";
+               reg = <0x23>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
+       };
+
        eeprom1: eeprom@50 {
                compatible = "atmel,24c02";
                reg = <0x50>;
                pagesize = <16>;
        };
 
-       pca9555: gpio@23 {
-               compatible = "nxp,pca9555";
-               reg = <0x23>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
-
        ds1672: rtc@68 {
                compatible = "dallas,ds1672";
                reg = <0x68>;
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "okay";
                fsl,pins = <
                        MX6QDL_PAD_EIM_D21__I2C1_SCL            0x4001b8b1
                        MX6QDL_PAD_EIM_D28__I2C1_SDA            0x4001b8b1
+                       MX6QDL_PAD_GPIO_4__GPIO1_IO04           0xb0b1
                >;
        };
 
index aee9221..fbe6c32 100644 (file)
@@ -46,6 +46,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        chosen {
                default-brightness-level = <100>;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
-       pca9555: gpio@23 {
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_an1";
+                       };
+
+                       channel@23 {
+                               gw,mode = <1>;
+                               reg = <0x23>;
+                               label = "vdd_2p5";
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
                compatible = "nxp,pca9555";
                reg = <0x23>;
                gpio-controller;
                #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
        };
 
        eeprom1: eeprom@50 {
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
index 76d6cf5..23c6e40 100644 (file)
@@ -46,6 +46,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        /* these are used by bootloader for disabling nodes */
                default-brightness-level = <7>;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
-       pca9555: gpio@23 {
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_an1";
+                       };
+
+                       channel@23 {
+                               gw,mode = <1>;
+                               reg = <0x23>;
+                               label = "vdd_2p5";
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
                compatible = "nxp,pca9555";
                reg = <0x23>;
                gpio-controller;
                #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
        };
 
        eeprom1: eeprom@50 {
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "okay";
                fsl,pins = <
                        MX6QDL_PAD_EIM_D21__I2C1_SCL            0x4001b8b1
                        MX6QDL_PAD_EIM_D28__I2C1_SDA            0x4001b8b1
+                       MX6QDL_PAD_GPIO_4__GPIO1_IO04           0x0001b0b0 /* GSC_IRQ# */
                >;
        };
 
index 0bdebdd..b1ff7c8 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        /* these are used by bootloader for disabling nodes */
                stdout-path = &uart2;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
-       gpio@23 {
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_an1";
+                       };
+
+                       channel@23 {
+                               gw,mode = <1>;
+                               reg = <0x23>;
+                               label = "vdd_2p5";
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
                compatible = "nxp,pca9555";
                reg = <0x23>;
                gpio-controller;
                #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
        };
 
        eeprom@50 {
                pagesize = <16>;
        };
 
-       rtc@68 {
+       ds1672@68 {
                compatible = "dallas,ds1672";
                reg = <0x68>;
        };
index 0857de5..11f84ee 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        /* these are used by bootloader for disabling nodes */
                reg = <0x10000000 0x20000000>;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
-       gpio@23 {
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@6 {
+                               gw,mode = <0>;
+                               reg = <0x06>;
+                               label = "temp";
+                       };
+
+                       channel@8 {
+                               gw,mode = <3>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@82 {
+                               gw,mode = <2>;
+                               reg = <0x82>;
+                               label = "vdd_vin";
+                               gw,voltage-divider-ohms = <22100 1000>;
+                               gw,voltage-offset-microvolt = <800000>;
+                       };
+
+                       channel@84 {
+                               gw,mode = <2>;
+                               reg = <0x84>;
+                               label = "vdd_5p0";
+                               gw,voltage-divider-ohms = <22100 10000>;
+                       };
+
+                       channel@86 {
+                               gw,mode = <2>;
+                               reg = <0x86>;
+                               label = "vdd_3p3";
+                               gw,voltage-divider-ohms = <10000 10000>;
+                       };
+
+                       channel@88 {
+                               gw,mode = <2>;
+                               reg = <0x88>;
+                               label = "vdd_2p5";
+                               gw,voltage-divider-ohms = <10000 10000>;
+                       };
+
+                       channel@8c {
+                               gw,mode = <2>;
+                               reg = <0x8c>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@8e {
+                               gw,mode = <2>;
+                               reg = <0x8e>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@90 {
+                               gw,mode = <2>;
+                               reg = <0x90>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@92 {
+                               gw,mode = <2>;
+                               reg = <0x92>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@98 {
+                               gw,mode = <2>;
+                               reg = <0x98>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@9a {
+                               gw,mode = <2>;
+                               reg = <0x9a>;
+                               label = "vdd_1p0";
+                               gw,voltage-divider-ohms = <10000 10000>;
+                       };
+
+                       channel@9c {
+                               gw,mode = <2>;
+                               reg = <0x9c>;
+                               label = "vdd_an1";
+                               gw,voltage-divider-ohms = <10000 10000>;
+                       };
+
+                       channel@a2 {
+                               gw,mode = <2>;
+                               reg = <0xa2>;
+                               label = "vdd_gsc";
+                               gw,voltage-divider-ohms = <10000 10000>;
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
                compatible = "nxp,pca9555";
                reg = <0x23>;
                gpio-controller;
                #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
        };
 
        eeprom@50 {
index 8c57fd2..0a1ffff 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        /* these are used by bootloader for disabling nodes */
                stdout-path = &uart2;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
-       gpio@23 {
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@0 {
+                               gw,mode = <0>;
+                               reg = <0x00>;
+                               label = "temp";
+                       };
+
+                       channel@2 {
+                               gw,mode = <1>;
+                               reg = <0x02>;
+                               label = "vdd_vin";
+                       };
+
+                       channel@5 {
+                               gw,mode = <1>;
+                               reg = <0x05>;
+                               label = "vdd_3p3";
+                       };
+
+                       channel@8 {
+                               gw,mode = <1>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@b {
+                               gw,mode = <1>;
+                               reg = <0x0b>;
+                               label = "vdd_5p0";
+                       };
+
+                       channel@e {
+                               gw,mode = <1>;
+                               reg = <0xe>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@11 {
+                               gw,mode = <1>;
+                               reg = <0x11>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@14 {
+                               gw,mode = <1>;
+                               reg = <0x14>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@17 {
+                               gw,mode = <1>;
+                               reg = <0x17>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@1d {
+                               gw,mode = <1>;
+                               reg = <0x1d>;
+                               label = "vdd_1p8";
+                       };
+
+                       channel@20 {
+                               gw,mode = <1>;
+                               reg = <0x20>;
+                               label = "vdd_1p0";
+                       };
+
+                       channel@23 {
+                               gw,mode = <1>;
+                               reg = <0x23>;
+                               label = "vdd_2p5";
+                       };
+               };
+
+               fan-controller@a {
+                       compatible = "gw,gsc-fan";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0a>;
+               };
+       };
+
+       gsc_gpio: gpio@23 {
                compatible = "nxp,pca9555";
                reg = <0x23>;
                gpio-controller;
                #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
        };
 
        eeprom@50 {
index 635c203..d62a8da 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
 
 / {
        /* these are used by bootloader for disabling nodes */
                stdout-path = &uart2;
        };
 
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               user-pb {
+                       label = "user_pb";
+                       gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+               };
+
+               user-pb1x {
+                       label = "user_pb1x";
+                       linux,code = <BTN_1>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <0>;
+               };
+
+               key-erased {
+                       label = "key-erased";
+                       linux,code = <BTN_2>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <1>;
+               };
+
+               eeprom-wp {
+                       label = "eeprom_wp";
+                       linux,code = <BTN_3>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <2>;
+               };
+
+               tamper {
+                       label = "tamper";
+                       linux,code = <BTN_4>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <5>;
+               };
+
+               switch-hold {
+                       label = "switch_hold";
+                       linux,code = <BTN_5>;
+                       interrupt-parent = <&gsc>;
+                       interrupts = <7>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c1>;
        status = "okay";
 
-       gpio@23 {
+       gsc: gsc@20 {
+               compatible = "gw,gsc";
+               reg = <0x20>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 GPIO_ACTIVE_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               #size-cells = <0>;
+
+               adc {
+                       compatible = "gw,gsc-adc";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       channel@6 {
+                               gw,mode = <0>;
+                               reg = <0x06>;
+                               label = "temp";
+                       };
+
+                       channel@8 {
+                               gw,mode = <3>;
+                               reg = <0x08>;
+                               label = "vdd_bat";
+                       };
+
+                       channel@82 {
+                               gw,mode = <2>;
+                               reg = <0x82>;
+                               label = "vdd_vin";
+                               gw,voltage-divider-ohms = <22100 1000>;
+                               gw,voltage-offset-microvolt = <800000>;
+                       };
+
+                       channel@84 {
+                               gw,mode = <2>;
+                               reg = <0x84>;
+                               label = "vdd_5p0";
+                               gw,voltage-divider-ohms = <22100 10000>;
+                       };
+
+                       channel@86 {
+                               gw,mode = <2>;
+                               reg = <0x86>;
+                               label = "vdd_3p3";
+                               gw,voltage-divider-ohms = <10000 10000>;
+                       };
+
+                       channel@88 {
+                               gw,mode = <2>;
+                               reg = <0x88>;
+                               label = "vdd_2p5";
+                               gw,voltage-divider-ohms = <10000 10000>;
+                       };
+
+                       channel@8c {
+                               gw,mode = <2>;
+                               reg = <0x8c>;
+                               label = "vdd_arm";
+                       };
+
+                       channel@8e {
+                               gw,mode = <2>;
+                               reg = <0x8e>;
+                               label = "vdd_soc";
+                       };
+
+                       channel@90 {
+                               gw,mode = <2>;
+                               reg = <0x90>;
+                               label = "vdd_1p5";
+                       };
+
+                       channel@92 {
+                               gw,mode = <2>;
+                               reg = <0x92>;
+                               label = "vdd_1p0";
+                       };
+
+                       channel@98 {
+                               gw,mode = <2>;
+                               reg = <0x98>;
+                               label = "vdd_3p0";
+                       };
+
+                       channel@9a {
+                               gw,mode = <2>;
+                               reg = <0x9a>;
+                               label = "vdd_an1";
+                               gw,voltage-divider-ohms = <10000 10000>;
+                       };
+
+                       channel@a2 {
+                               gw,mode = <2>;
+                               reg = <0xa2>;
+                               label = "vdd_gsc";
+                               gw,voltage-divider-ohms = <10000 10000>;
+                       };
+               };
+       };
+
+       gsc_gpio: gpio@23 {
                compatible = "nxp,pca9555";
                reg = <0x23>;
                gpio-controller;
                #gpio-cells = <2>;
+               interrupt-parent = <&gsc>;
+               interrupts = <4>;
        };
 
        eeprom@50 {
index 756f3a9..f2f475e 100644 (file)
 };
 
 &pwm3 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm3>;
        status = "okay";
index 2418cf8..d526f01 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "okay";
index c3415aa..185a1a3 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
 };
 
 &pwm2 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm2>;
        status = "okay";
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "okay";
index ed53f07..4bbe54e 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "okay";
index 8b0e432..c63e1bc 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "okay";
index 9ebd438..0199385 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
diff --git a/arch/arm/boot/dts/imx6qdl-prti6q.dtsi b/arch/arm/boot/dts/imx6qdl-prti6q.dtsi
new file mode 100644 (file)
index 0000000..19578f6
--- /dev/null
@@ -0,0 +1,163 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Copyright (c) 2014 Protonic Holland
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       chosen {
+               stdout-path = &uart4;
+       };
+
+       reg_3v3: regulator-3v3 {
+               compatible = "regulator-fixed";
+               regulator-name = "3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       reg_usb_h1_vbus: regulator-h1-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "h1-vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+       };
+
+       reg_usb_otg_vbus: regulator-otg-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "otg-vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+};
+
+&can1 {
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&i2c1 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c1>;
+       status = "okay";
+};
+
+&i2c3 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c3>;
+       status = "okay";
+
+       temperature-sensor@70 {
+               compatible = "ti,tmp103";
+               reg = <0x70>;
+       };
+};
+
+&uart4 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart4>;
+       status = "okay";
+};
+
+&usbh1 {
+       vbus-supply = <&reg_usb_h1_vbus>;
+       phy_type = "utmi";
+       dr_mode = "host";
+       status = "okay";
+};
+
+&usbotg {
+       vbus-supply = <&reg_usb_otg_vbus>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usbotg>;
+       phy_type = "utmi";
+       dr_mode = "host";
+       disable-over-current;
+       status = "okay";
+};
+
+&usdhc1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc1>;
+       cd-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>;
+       status = "okay";
+};
+
+&usdhc3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc3>;
+       bus-width = <8>;
+       non-removable;
+       status = "okay";
+};
+
+&iomuxc {
+       pinctrl_can1: can1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX        0x1b008
+                       MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX        0x1b008
+               >;
+       };
+
+       pinctrl_i2c1: i2c1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_CSI0_DAT8__I2C1_SDA          0x4001f8b1
+                       MX6QDL_PAD_CSI0_DAT9__I2C1_SCL          0x4001f8b1
+               >;
+       };
+
+       pinctrl_i2c3: i2c3grp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_5__I2C3_SCL             0x4001b8b1
+                       MX6QDL_PAD_GPIO_6__I2C3_SDA             0x4001b8b1
+               >;
+       };
+
+       pinctrl_uart4: uart4grp {
+               fsl,pins = <
+                       MX6QDL_PAD_KEY_COL0__UART4_TX_DATA      0x1b0b1
+                       MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA      0x1b0b1
+               >;
+       };
+
+       pinctrl_usdhc1: usdhc1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_SD1_CMD__SD1_CMD             0x170f9
+                       MX6QDL_PAD_SD1_CLK__SD1_CLK             0x100f9
+                       MX6QDL_PAD_SD1_DAT0__SD1_DATA0          0x170f9
+                       MX6QDL_PAD_SD1_DAT1__SD1_DATA1          0x170f9
+                       MX6QDL_PAD_SD1_DAT2__SD1_DATA2          0x170f9
+                       MX6QDL_PAD_SD1_DAT3__SD1_DATA3          0x170f9
+                       MX6QDL_PAD_GPIO_1__GPIO1_IO01           0x1b0b0
+               >;
+       };
+
+       pinctrl_usdhc3: usdhc3grp {
+               fsl,pins = <
+                       MX6QDL_PAD_SD3_CMD__SD3_CMD             0x17099
+                       MX6QDL_PAD_SD3_CLK__SD3_CLK             0x10099
+                       MX6QDL_PAD_SD3_DAT0__SD3_DATA0          0x17099
+                       MX6QDL_PAD_SD3_DAT1__SD3_DATA1          0x17099
+                       MX6QDL_PAD_SD3_DAT2__SD3_DATA2          0x17099
+                       MX6QDL_PAD_SD3_DAT3__SD3_DATA3          0x17099
+                       MX6QDL_PAD_SD3_DAT4__SD3_DATA4          0x17099
+                       MX6QDL_PAD_SD3_DAT5__SD3_DATA5          0x17099
+                       MX6QDL_PAD_SD3_DAT6__SD3_DATA6          0x17099
+                       MX6QDL_PAD_SD3_DAT7__SD3_DATA7          0x17099
+                       MX6QDL_PAD_SD3_RST__SD3_RESET           0x1b0b1
+               >;
+       };
+
+       pinctrl_usbotg: usbotggrp {
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_D21__USB_OTG_OC  0x1b0b0
+                       MX6QDL_PAD_EIM_D22__GPIO3_IO22  0x1b0b0
+               >;
+       };
+};
index cf62846..55f736d 100644 (file)
 };
 
 &pwm3 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm3>;
        status = "okay";
index 8468216..95f9dda 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
 };
 
 &pwm3 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm3>;
        status = "okay";
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "okay";
index 28b35cc..68b3e68 100644 (file)
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_enet>;
        phy-mode = "rgmii-id";
-       phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
+       phy-handle = <&phy>;
        fsl,magic-packet;
        status = "okay";
+
+       mdio {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               phy: ethernet-phy@1 {
+                       reg = <1>;
+                       qca,clk-out-frequency = <125000000>;
+                       reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
+                       reset-assert-us = <10000>;
+               };
+       };
 };
 
 &hdmi {
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
index a616e3c..02e6d36 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
index c68cb90..362e65c 100644 (file)
 &pwm1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
-       #pwm-cells = <3>;
        status = "disabled";
 };
 
 &pwm2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm2>;
-       #pwm-cells = <3>;
        status = "okay";
 };
 
index 20350e8..5af9ce9 100644 (file)
        mdio {
                #address-cells = <1>;
                #size-cells = <0>;
+               clock-frequency = <12500000>;
+               suppress-preamble;
                status = "okay";
 
                switch: switch@0 {
index 32114cf..43edbf1 100644 (file)
                };
        };
 
-       tempmon: tempmon {
-               compatible = "fsl,imx6q-tempmon";
-               interrupt-parent = <&gpc>;
-               interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>;
-               fsl,tempmon = <&anatop>;
-               nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
-               nvmem-cell-names = "calib", "temp_grade";
-               clocks = <&clks IMX6QDL_CLK_PLL3_USB_OTG>;
-               #thermal-sensor-cells = <0>;
-       };
-
        ldb: ldb {
                #address-cells = <1>;
                #size-cells = <0>;
                        interrupt-parent = <&intc>;
                };
 
-               L2: l2-cache@a02000 {
+               L2: cache-controller@a02000 {
                        compatible = "arm,pl310-cache";
                        reg = <0x00a02000 0x1000>;
                        interrupts = <0 92 IRQ_TYPE_LEVEL_HIGH>;
                        };
 
                        pwm1: pwm@2080000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm";
                                reg = <0x02080000 0x4000>;
                                interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
                        };
 
                        pwm2: pwm@2084000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm";
                                reg = <0x02084000 0x4000>;
                                interrupts = <0 84 IRQ_TYPE_LEVEL_HIGH>;
                        };
 
                        pwm3: pwm@2088000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm";
                                reg = <0x02088000 0x4000>;
                                interrupts = <0 85 IRQ_TYPE_LEVEL_HIGH>;
                        };
 
                        pwm4: pwm@208c000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx6q-pwm", "fsl,imx27-pwm";
                                reg = <0x0208c000 0x4000>;
                                interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;
                                        anatop-min-voltage = <725000>;
                                        anatop-max-voltage = <1450000>;
                                };
+
+                               tempmon: tempmon {
+                                       compatible = "fsl,imx6q-tempmon";
+                                       interrupt-parent = <&gpc>;
+                                       interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>;
+                                       fsl,tempmon = <&anatop>;
+                                       nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
+                                       nvmem-cell-names = "calib", "temp_grade";
+                                       clocks = <&clks IMX6QDL_CLK_PLL3_USB_OTG>;
+                                       #thermal-sensor-cells = <0>;
+                               };
                        };
 
                        usbphy1: usbphy@20c9000 {
                                reg = <0x020dc000 0x4000>;
                                interrupt-controller;
                                #interrupt-cells = <3>;
-                               interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>,
-                                            <0 90 IRQ_TYPE_LEVEL_HIGH>;
+                               interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>;
                                interrupt-parent = <&intc>;
                                clocks = <&clks IMX6QDL_CLK_IPG>;
                                clock-names = "ipg";
                                             <0 126 IRQ_TYPE_LEVEL_HIGH>;
                        };
 
-                       usdhc1: usdhc@2190000 {
+                       usdhc1: mmc@2190000 {
                                compatible = "fsl,imx6q-usdhc";
                                reg = <0x02190000 0x4000>;
                                interrupts = <0 22 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc2: usdhc@2194000 {
+                       usdhc2: mmc@2194000 {
                                compatible = "fsl,imx6q-usdhc";
                                reg = <0x02194000 0x4000>;
                                interrupts = <0 23 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc3: usdhc@2198000 {
+                       usdhc3: mmc@2198000 {
                                compatible = "fsl,imx6q-usdhc";
                                reg = <0x02198000 0x4000>;
                                interrupts = <0 24 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc4: usdhc@219c000 {
+                       usdhc4: mmc@219c000 {
                                compatible = "fsl,imx6q-usdhc";
                                reg = <0x0219c000 0x4000>;
                                interrupts = <0 25 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       ocotp: ocotp-ctrl@21bc000 {
+                       ocotp: efuse@21bc000 {
                                compatible = "fsl,imx6q-ocotp", "syscon";
                                reg = <0x021bc000 0x4000>;
                                clocks = <&clks IMX6QDL_CLK_IIM>;
index d4caeeb..639d9dd 100644 (file)
        status = "disabled";
 };
 
+&sata {
+       status = "okay";
+};
+
 &vgen3_reg {
        regulator-always-on;
 };
index f1b9cb1..480e731 100644 (file)
@@ -53,3 +53,7 @@
 &pcie {
        status = "disabled";
 };
+
+&sata {
+       status = "okay";
+};
index bc86cfa..b1b069e 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
index 911d8cf..1c7180f 100644 (file)
                };
        };
 
-       tempmon: tempmon {
-               compatible = "fsl,imx6q-tempmon";
-               interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>;
-               interrupt-parent = <&gpc>;
-               fsl,tempmon = <&anatop>;
-               nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
-               nvmem-cell-names = "calib", "temp_grade";
-               clocks = <&clks IMX6SL_CLK_PLL3_USB_OTG>;
-       };
-
        pmu {
                compatible = "arm,cortex-a9-pmu";
                interrupt-parent = <&gpc>;
                        interrupt-parent = <&intc>;
                };
 
-               L2: l2-cache@a02000 {
+               L2: cache-controller@a02000 {
                        compatible = "arm,pl310-cache";
                        reg = <0x00a02000 0x1000>;
                        interrupts = <0 92 IRQ_TYPE_LEVEL_HIGH>;
                        };
 
                        pwm1: pwm@2080000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm";
                                reg = <0x02080000 0x4000>;
                                interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH>;
                        };
 
                        pwm2: pwm@2084000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm";
                                reg = <0x02084000 0x4000>;
                                interrupts = <0 84 IRQ_TYPE_LEVEL_HIGH>;
                        };
 
                        pwm3: pwm@2088000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm";
                                reg = <0x02088000 0x4000>;
                                interrupts = <0 85 IRQ_TYPE_LEVEL_HIGH>;
                        };
 
                        pwm4: pwm@208c000 {
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                compatible = "fsl,imx6sl-pwm", "fsl,imx27-pwm";
                                reg = <0x0208c000 0x4000>;
                                interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;
                                        anatop-min-voltage = <725000>;
                                        anatop-max-voltage = <1450000>;
                                };
+
+                               tempmon: tempmon {
+                                       compatible = "fsl,imx6q-tempmon";
+                                       interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>;
+                                       interrupt-parent = <&gpc>;
+                                       fsl,tempmon = <&anatop>;
+                                       nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
+                                       nvmem-cell-names = "calib", "temp_grade";
+                                       clocks = <&clks IMX6SL_CLK_PLL3_USB_OTG>;
+                               };
                        };
 
                        usbphy1: usbphy@20c9000 {
                                status = "disabled";
                        };
 
-                       usdhc1: usdhc@2190000 {
+                       usdhc1: mmc@2190000 {
                                compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc";
                                reg = <0x02190000 0x4000>;
                                interrupts = <0 22 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc2: usdhc@2194000 {
+                       usdhc2: mmc@2194000 {
                                compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc";
                                reg = <0x02194000 0x4000>;
                                interrupts = <0 23 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc3: usdhc@2198000 {
+                       usdhc3: mmc@2198000 {
                                compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc";
                                reg = <0x02198000 0x4000>;
                                interrupts = <0 24 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc4: usdhc@219c000 {
+                       usdhc4: mmc@219c000 {
                                compatible = "fsl,imx6sl-usdhc", "fsl,imx6q-usdhc";
                                reg = <0x0219c000 0x4000>;
                                interrupts = <0 25 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       ocotp: ocotp-ctrl@21bc000 {
+                       ocotp: efuse@21bc000 {
                                compatible = "fsl,imx6sl-ocotp", "syscon";
                                reg = <0x021bc000 0x4000>;
                                clocks = <&clks IMX6SL_CLK_OCOTP>;
index 5ace9e6..c755cbd 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
index edd3abb..fb5d3bc 100644 (file)
                clock-output-names = "ipp_di1";
        };
 
-       tempmon: temperature-sensor {
-               compatible = "fsl,imx6sll-tempmon", "fsl,imx6sx-tempmon";
-               interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
-               interrupt-parent = <&gpc>;
-               fsl,tempmon = <&anatop>;
-               nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
-               nvmem-cell-names = "calib", "temp_grade";
-               clocks = <&clks IMX6SLL_CLK_PLL3_USB_OTG>;
-       };
-
        soc {
                #address-cells = <1>;
                #size-cells = <1>;
                        interrupt-parent = <&intc>;
                };
 
-               L2: l2-cache@a02000 {
+               L2: cache-controller@a02000 {
                        compatible = "arm,pl310-cache";
                        reg = <0x00a02000 0x1000>;
                        interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
                                        status = "disabled";
                                };
 
-                               ssi1: ssi-controller@2028000 {
+                               ssi1: ssi@2028000 {
                                        compatible = "fsl,imx6sl-ssi", "fsl,imx51-ssi";
                                        reg = <0x02028000 0x4000>;
                                        interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
                                        status = "disabled";
                                };
 
-                               ssi2: ssi-controller@202c000 {
+                               ssi2: ssi@202c000 {
                                        compatible = "fsl,imx6sl-ssi", "fsl,imx51-ssi";
                                        reg = <0x0202c000 0x4000>;
                                        interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
                                        status = "disabled";
                                };
 
-                               ssi3: ssi-controller@2030000 {
+                               ssi3: ssi@2030000 {
                                        compatible = "fsl,imx6sl-ssi", "fsl,imx51-ssi";
                                        reg = <0x02030000 0x4000>;
                                        interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
                                clocks = <&clks IMX6SLL_CLK_PWM1>,
                                         <&clks IMX6SLL_CLK_PWM1>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        pwm2: pwm@2084000 {
                                clocks = <&clks IMX6SLL_CLK_PWM2>,
                                         <&clks IMX6SLL_CLK_PWM2>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        pwm3: pwm@2088000 {
                                clocks = <&clks IMX6SLL_CLK_PWM3>,
                                         <&clks IMX6SLL_CLK_PWM3>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        pwm4: pwm@208c000 {
                                clocks = <&clks IMX6SLL_CLK_PWM4>,
                                         <&clks IMX6SLL_CLK_PWM4>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        gpt1: timer@2098000 {
                                        anatop-max-voltage = <3400000>;
                                        anatop-enable-bit = <0>;
                                };
+
+                               tempmon: temperature-sensor {
+                                       compatible = "fsl,imx6sll-tempmon", "fsl,imx6sx-tempmon";
+                                       interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
+                                       interrupt-parent = <&gpc>;
+                                       fsl,tempmon = <&anatop>;
+                                       nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
+                                       nvmem-cell-names = "calib", "temp_grade";
+                                       clocks = <&clks IMX6SLL_CLK_PLL3_USB_OTG>;
+                               };
                        };
 
                        usbphy1: usb-phy@20c9000 {
                                clocks = <&clks IMX6SLL_CLK_MMDC_P0_IPG>;
                        };
 
-                       ocotp: ocotp-ctrl@21bc000 {
+                       ocotp: efuse@21bc000 {
                                #address-cells = <1>;
                                #size-cells = <1>;
                                compatible = "fsl,imx6sll-ocotp", "syscon";
index d84ea69..66af78e 100644 (file)
 };
 
 &pwm4 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
        status = "okay";
index 8259244..76a4c06 100644 (file)
                enable-active-high;
                vin-supply = <&reg_can_en>;
        };
+
+       reg_cs42888: cs42888_supply {
+               compatible = "regulator-fixed";
+               regulator-name = "cs42888_supply";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
+
+       sound-cs42888 {
+               compatible = "fsl,imx6-sabreauto-cs42888",
+                            "fsl,imx-audio-cs42888";
+               model = "imx-cs42888";
+               audio-cpu = <&esai>;
+               audio-asrc = <&asrc>;
+               audio-codec = <&cs42888>;
+               audio-routing =
+                       "Line Out Jack", "AOUT1L",
+                       "Line Out Jack", "AOUT1R",
+                       "Line Out Jack", "AOUT2L",
+                       "Line Out Jack", "AOUT2R",
+                       "Line Out Jack", "AOUT3L",
+                       "Line Out Jack", "AOUT3R",
+                       "Line Out Jack", "AOUT4L",
+                       "Line Out Jack", "AOUT4R",
+                       "AIN1L", "Line In Jack",
+                       "AIN1R", "Line In Jack",
+                       "AIN2L", "Line In Jack",
+                       "AIN2R", "Line In Jack";
+       };
+
+       sound-spdif {
+               compatible = "fsl,imx-audio-spdif";
+               model = "imx-spdif";
+               spdif-controller = <&spdif>;
+               spdif-in;
+       };
 };
 
 &anaclk2 {
        clock-frequency = <24576000>;
 };
 
+&clks {
+       assigned-clocks = <&clks IMX6SX_PLL4_BYPASS_SRC>,
+                         <&clks IMX6SX_PLL4_BYPASS>,
+                         <&clks IMX6SX_CLK_PLL4_POST_DIV>;
+       assigned-clock-parents = <&clks IMX6SX_CLK_LVDS2_IN>,
+                                <&clks IMX6SX_PLL4_BYPASS_SRC>;
+       assigned-clock-rates = <0>, <0>, <24576000>;
+};
+
+&esai {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_esai>;
+       assigned-clocks = <&clks IMX6SX_CLK_ESAI_SEL>,
+                       <&clks IMX6SX_CLK_ESAI_EXTAL>;
+       assigned-clock-parents = <&clks IMX6SX_CLK_PLL4_AUDIO_DIV>;
+       assigned-clock-rates = <0>, <24576000>;
+       status = "okay";
+};
+
 &fec1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_enet1>;
                >;
        };
 
+       pinctrl_esai: esaigrp {
+               fsl,pins = <
+                       MX6SX_PAD_CSI_DATA00__ESAI_TX_CLK   0x1b030
+                       MX6SX_PAD_CSI_DATA01__ESAI_TX_FS    0x1b030
+                       MX6SX_PAD_CSI_HSYNC__ESAI_TX0       0x1b030
+                       MX6SX_PAD_CSI_DATA04__ESAI_TX1      0x1b030
+                       MX6SX_PAD_CSI_DATA06__ESAI_TX2_RX3  0x1b030
+                       MX6SX_PAD_CSI_DATA07__ESAI_TX3_RX2  0x1b030
+                       MX6SX_PAD_CSI_DATA02__ESAI_RX_CLK   0x1b030
+                       MX6SX_PAD_CSI_DATA03__ESAI_RX_FS    0x1b030
+                       MX6SX_PAD_CSI_VSYNC__ESAI_TX5_RX0   0x1b030
+                       MX6SX_PAD_CSI_DATA05__ESAI_TX4_RX1  0x1b030
+               >;
+       };
+
        pinctrl_flexcan1: flexcan1grp {
                fsl,pins = <
                        MX6SX_PAD_QSPI1B_DQS__CAN1_TX   0x1b020
                >;
        };
 
+       pinctrl_spdif: spdifgrp {
+               fsl,pins = <
+                       MX6SX_PAD_ENET2_COL__SPDIF_IN           0x1b0b0
+               >;
+       };
+
        pinctrl_uart1: uart1grp {
                fsl,pins = <
                        MX6SX_PAD_GPIO1_IO04__UART1_DCE_TX              0x1b0b1
        pinctrl-0 = <&pinctrl_i2c2>;
        status = "okay";
 
+       cs42888: cs42888@48 {
+               compatible = "cirrus,cs42888";
+               reg = <0x48>;
+               clocks = <&anaclk2 0>;
+               clock-names = "mclk";
+               VA-supply = <&reg_cs42888>;
+               VD-supply = <&reg_cs42888>;
+               VLS-supply = <&reg_cs42888>;
+               VLC-supply = <&reg_cs42888>;
+       };
+
        touchscreen@4 {
                compatible = "eeti,egalax_ts";
                reg = <0x04>;
        };
 };
 
+&spdif {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_spdif>;
+       assigned-clocks = <&clks IMX6SX_CLK_SPDIF_PODF>;
+       assigned-clock-rates = <24576000>;
+       status = "okay";
+};
+
 &wdog1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_wdog>;
diff --git a/arch/arm/boot/dts/imx6sx-sdb-mqs.dts b/arch/arm/boot/dts/imx6sx-sdb-mqs.dts
new file mode 100644 (file)
index 0000000..a4ab2d3
--- /dev/null
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0
+//
+// Copyright (C) 2014 Freescale Semiconductor, Inc.
+
+#include "imx6sx-sdb.dts"
+/ {
+
+       sound {
+               status = "disabled";
+       };
+
+       sound-mqs {
+               compatible = "fsl,imx6sx-sdb-mqs",
+                            "fsl,imx-audio-mqs";
+               model = "mqs-audio";
+               audio-cpu = <&sai1>;
+               audio-asrc = <&asrc>;
+               audio-codec = <&mqs>;
+       };
+};
+
+&usdhc2 {
+       /* pin conflict with mqs*/
+       status = "disabled";
+};
+
+&mqs {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_mqs>;
+       clocks = <&clks IMX6SX_CLK_SAI1>;
+       clock-names = "mclk";
+       status = "okay";
+};
+
+&sai1 {
+       pinctrl-0 = <>;
+       status = "okay";
+};
+
+&ssi2 {
+       status = "disabled";
+};
+
+&sdma {
+       gpr = <&gpr>;
+       /* SDMA event remap for SAI1 */
+       fsl,sdma-event-remap = <0 15 1>, <0 16 1>;
+};
index 3e5fb72..661f803 100644 (file)
                        };
                };
        };
+
+       sound-spdif {
+               compatible = "fsl,imx-audio-spdif",
+                          "fsl,imx6sx-sdb-spdif";
+               model = "imx-spdif";
+               spdif-controller = <&spdif>;
+               spdif-out;
+       };
+
 };
 
 &audmux {
 };
 
 &pwm3 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm3>;
        status = "okay";
        status = "disabled";
 };
 
+&spdif {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_spdif>;
+       assigned-clocks = <&clks IMX6SX_CLK_SPDIF_PODF>;
+       assigned-clock-rates = <24576000>;
+       status = "okay";
+};
+
 &ssi2 {
        status = "okay";
 };
                        >;
                };
 
+               pinctrl_mqs: mqsgrp {
+                       fsl,pins = <
+                               MX6SX_PAD_SD2_CLK__MQS_RIGHT 0x120b0
+                               MX6SX_PAD_SD2_CMD__MQS_LEFT  0x120b0
+                       >;
+               };
+
                pinctrl_pcie: pciegrp {
                        fsl,pins = <
                                MX6SX_PAD_ENET1_COL__GPIO2_IO_0 0x10b0
                        >;
                };
 
+               pinctrl_spdif: spdifgrp {
+                       fsl,pins = <
+                               MX6SX_PAD_SD4_DATA4__SPDIF_OUT          0x1b0b0
+                       >;
+               };
+
                pinctrl_uart1: uart1grp {
                        fsl,pins = <
                                MX6SX_PAD_GPIO1_IO04__UART1_DCE_TX      0x1b0b1
index 6b728b0..d25e27d 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
 };
 
 &pwm2 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm2>;
        status = "okay";
 };
 
 &pwm6 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm6>;
        status = "okay";
index 94e3df4..b480dfa 100644 (file)
                clock-output-names = "anaclk2";
        };
 
-       tempmon: tempmon {
-               compatible = "fsl,imx6sx-tempmon", "fsl,imx6q-tempmon";
-               interrupt-parent = <&gpc>;
-               interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
-               fsl,tempmon = <&anatop>;
-               nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
-               nvmem-cell-names = "calib", "temp_grade";
-               clocks = <&clks IMX6SX_CLK_PLL3_USB_OTG>;
+       mqs: mqs {
+               compatible = "fsl,imx6sx-mqs";
+               gpr = <&gpr>;
+               status = "disabled";
        };
 
        pmu {
                        interrupt-parent = <&intc>;
                };
 
-               L2: l2-cache@a02000 {
+               L2: cache-controller@a02000 {
                        compatible = "arm,pl310-cache";
                        reg = <0x00a02000 0x1000>;
                        interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
                                };
 
                                esai: esai@2024000 {
+                                       compatible = "fsl,imx6sx-esai", "fsl,imx35-esai";
                                        reg = <0x02024000 0x4000>;
                                        interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
                                        clocks = <&clks IMX6SX_CLK_ESAI_IPG>,
                                                 <&clks IMX6SX_CLK_SPBA>;
                                        clock-names = "core", "mem", "extal",
                                                      "fsys", "spba";
+                                       dmas = <&sdma 23 21 0>,
+                                              <&sdma 24 21 0>;
+                                       dma-names = "rx", "tx";
                                        status = "disabled";
                                };
 
                                };
 
                                asrc: asrc@2034000 {
+                                       compatible = "fsl,imx6sx-asrc", "fsl,imx53-asrc";
                                        reg = <0x02034000 0x4000>;
                                        interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
-                                       clocks = <&clks IMX6SX_CLK_ASRC_MEM>,
-                                                <&clks IMX6SX_CLK_ASRC_IPG>,
-                                                <&clks IMX6SX_CLK_SPDIF>,
-                                                <&clks IMX6SX_CLK_SPBA>;
-                                       clock-names = "mem", "ipg", "asrck", "spba";
-                                       dmas = <&sdma 17 20 1>, <&sdma 18 20 1>,
-                                              <&sdma 19 20 1>, <&sdma 20 20 1>,
-                                              <&sdma 21 20 1>, <&sdma 22 20 1>;
+                                       clocks = <&clks IMX6SX_CLK_ASRC_IPG>,
+                                               <&clks IMX6SX_CLK_ASRC_MEM>, <&clks 0>,
+                                               <&clks 0>, <&clks 0>, <&clks 0>, <&clks 0>,
+                                               <&clks 0>, <&clks 0>, <&clks 0>, <&clks 0>,
+                                               <&clks 0>, <&clks 0>, <&clks 0>, <&clks 0>,
+                                               <&clks IMX6SX_CLK_SPDIF>, <&clks 0>, <&clks 0>,
+                                               <&clks IMX6SX_CLK_SPBA>;
+                                       clock-names = "mem", "ipg", "asrck_0",
+                                               "asrck_1", "asrck_2", "asrck_3", "asrck_4",
+                                               "asrck_5", "asrck_6", "asrck_7", "asrck_8",
+                                               "asrck_9", "asrck_a", "asrck_b", "asrck_c",
+                                               "asrck_d", "asrck_e", "asrck_f", "spba";
+                                       dmas = <&sdma 17 23 1>, <&sdma 18 23 1>,
+                                              <&sdma 19 23 1>, <&sdma 20 23 1>,
+                                              <&sdma 21 23 1>, <&sdma 22 23 1>;
                                        dma-names = "rxa", "rxb", "rxc",
                                                    "txa", "txb", "txc";
+                                       fsl,asrc-rate  = <48000>;
+                                       fsl,asrc-width = <16>;
                                        status = "okay";
                                };
                        };
                                clocks = <&clks IMX6SX_CLK_PWM1>,
                                         <&clks IMX6SX_CLK_PWM1>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        pwm2: pwm@2084000 {
                                clocks = <&clks IMX6SX_CLK_PWM2>,
                                         <&clks IMX6SX_CLK_PWM2>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        pwm3: pwm@2088000 {
                                clocks = <&clks IMX6SX_CLK_PWM3>,
                                         <&clks IMX6SX_CLK_PWM3>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        pwm4: pwm@208c000 {
                                clocks = <&clks IMX6SX_CLK_PWM4>,
                                         <&clks IMX6SX_CLK_PWM4>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        flexcan1: can@2090000 {
                                        anatop-min-voltage = <725000>;
                                        anatop-max-voltage = <1450000>;
                                };
+
+                               tempmon: tempmon {
+                                       compatible = "fsl,imx6sx-tempmon", "fsl,imx6q-tempmon";
+                                       interrupt-parent = <&gpc>;
+                                       interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
+                                       fsl,tempmon = <&anatop>;
+                                       nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
+                                       nvmem-cell-names = "calib", "temp_grade";
+                                       clocks = <&clks IMX6SX_CLK_PLL3_USB_OTG>;
+                               };
                        };
 
                        usbphy1: usbphy@20c9000 {
                                status = "disabled";
                        };
 
-                       usdhc1: usdhc@2190000 {
+                       usdhc1: mmc@2190000 {
                                compatible = "fsl,imx6sx-usdhc", "fsl,imx6sl-usdhc";
                                reg = <0x02190000 0x4000>;
                                interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc2: usdhc@2194000 {
+                       usdhc2: mmc@2194000 {
                                compatible = "fsl,imx6sx-usdhc", "fsl,imx6sl-usdhc";
                                reg = <0x02194000 0x4000>;
                                interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc3: usdhc@2198000 {
+                       usdhc3: mmc@2198000 {
                                compatible = "fsl,imx6sx-usdhc", "fsl,imx6sl-usdhc";
                                reg = <0x02198000 0x4000>;
                                interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc4: usdhc@219c000 {
+                       usdhc4: mmc@219c000 {
                                compatible = "fsl,imx6sx-usdhc", "fsl,imx6sl-usdhc";
                                reg = <0x0219c000 0x4000>;
                                interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       ocotp: ocotp-ctrl@21bc000 {
+                       ocotp: efuse@21bc000 {
                                #address-cells = <1>;
                                #size-cells = <1>;
                                compatible = "fsl,imx6sx-ocotp", "syscon";
                                clocks = <&clks IMX6SX_CLK_PWM5>,
                                         <&clks IMX6SX_CLK_PWM5>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        pwm6: pwm@22a8000 {
                                clocks = <&clks IMX6SX_CLK_PWM6>,
                                         <&clks IMX6SX_CLK_PWM6>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        pwm7: pwm@22ac000 {
                                clocks = <&clks IMX6SX_CLK_PWM7>,
                                         <&clks IMX6SX_CLK_PWM7>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
 
                        pwm8: pwm@22b0000 {
                                clocks = <&clks IMX6SX_CLK_PWM8>,
                                         <&clks IMX6SX_CLK_PWM8>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                        };
                };
 
index 265bf41..64c2d1e 100644 (file)
 };
 
 &pwm1 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm1>;
        status = "okay";
index 5d3805b..a0bbec5 100644 (file)
 };
 
 &pwm5 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm5>;
        status = "okay";
index 9f63706..a0097da 100644 (file)
 };
 
 &pwm8 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm8>;
        status = "okay";
index 1896635..935a77d 100644 (file)
 };
 
 &pwm3 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm3>;
        status = "okay";
index cc9adce..14fc482 100644 (file)
 };
 
 &pwm8 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm8>;
        status = "okay";
index 5bad296..5bfad46 100644 (file)
@@ -41,6 +41,7 @@
 };
 
 &pwm7 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm7>;
        status = "okay";
index f05e918..239124f 100644 (file)
 };
 
 &pwm8 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm8>;
        status = "okay";
index df1da98..357ffb2 100644 (file)
 };
 
 &pwm3 {
+       #pwm-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm3>;
        status = "okay";
index bb6dbfd..938a32c 100644 (file)
 &pwm5 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm5>;
-       #pwm-cells = <3>;
        status = "okay";
 };
 
index 5379a03..2b088f2 100644 (file)
                clock-output-names = "ipp_di1";
        };
 
-       tempmon: tempmon {
-               compatible = "fsl,imx6ul-tempmon", "fsl,imx6sx-tempmon";
-               interrupt-parent = <&gpc>;
-               interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
-               fsl,tempmon = <&anatop>;
-               nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
-               nvmem-cell-names = "calib", "temp_grade";
-               clocks = <&clks IMX6UL_CLK_PLL3_USB_OTG>;
-       };
-
        pmu {
                compatible = "arm,cortex-a7-pmu";
                interrupt-parent = <&gpc>;
                                        dma-names = "rx", "tx";
                                        status = "disabled";
                                };
+
+                               asrc: asrc@2034000 {
+                                       compatible = "fsl,imx6ul-asrc", "fsl,imx53-asrc";
+                                       reg = <0x2034000 0x4000>;
+                                       interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
+                                       clocks = <&clks IMX6UL_CLK_ASRC_IPG>,
+                                               <&clks IMX6UL_CLK_ASRC_MEM>, <&clks 0>,
+                                               <&clks 0>, <&clks 0>, <&clks 0>, <&clks 0>,
+                                               <&clks 0>, <&clks 0>, <&clks 0>, <&clks 0>,
+                                               <&clks 0>, <&clks 0>, <&clks 0>, <&clks 0>,
+                                               <&clks IMX6UL_CLK_SPDIF>, <&clks 0>, <&clks 0>,
+                                               <&clks IMX6UL_CLK_SPBA>;
+                                       clock-names = "mem", "ipg", "asrck_0",
+                                               "asrck_1", "asrck_2", "asrck_3", "asrck_4",
+                                               "asrck_5", "asrck_6", "asrck_7", "asrck_8",
+                                               "asrck_9", "asrck_a", "asrck_b", "asrck_c",
+                                               "asrck_d", "asrck_e", "asrck_f", "spba";
+                                       dmas = <&sdma 17 23 1>, <&sdma 18 23 1>, <&sdma 19 23 1>,
+                                               <&sdma 20 23 1>, <&sdma 21 23 1>, <&sdma 22 23 1>;
+                                       dma-names = "rxa", "rxb", "rxc",
+                                                   "txa", "txb", "txc";
+                                       fsl,asrc-rate  = <48000>;
+                                       fsl,asrc-width = <16>;
+                                       status = "okay";
+                               };
                        };
 
                        tsc: tsc@2040000 {
                                clocks = <&clks IMX6UL_CLK_PWM1>,
                                         <&clks IMX6UL_CLK_PWM1>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                status = "disabled";
                        };
 
                                clocks = <&clks IMX6UL_CLK_PWM2>,
                                         <&clks IMX6UL_CLK_PWM2>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                status = "disabled";
                        };
 
                                clocks = <&clks IMX6UL_CLK_PWM3>,
                                         <&clks IMX6UL_CLK_PWM3>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                status = "disabled";
                        };
 
                                clocks = <&clks IMX6UL_CLK_PWM4>,
                                         <&clks IMX6UL_CLK_PWM4>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                status = "disabled";
                        };
 
                                        anatop-min-voltage = <725000>;
                                        anatop-max-voltage = <1450000>;
                                };
+
+                               tempmon: tempmon {
+                                       compatible = "fsl,imx6ul-tempmon", "fsl,imx6sx-tempmon";
+                                       interrupt-parent = <&gpc>;
+                                       interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
+                                       fsl,tempmon = <&anatop>;
+                                       nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
+                                       nvmem-cell-names = "calib", "temp_grade";
+                                       clocks = <&clks IMX6UL_CLK_PLL3_USB_OTG>;
+                               };
                        };
 
                        usbphy1: usbphy@20c9000 {
                                clocks = <&clks IMX6UL_CLK_PWM5>,
                                         <&clks IMX6UL_CLK_PWM5>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                status = "disabled";
                        };
 
                                clocks = <&clks IMX6UL_CLK_PWM6>,
                                         <&clks IMX6UL_CLK_PWM6>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                status = "disabled";
                        };
 
                                clocks = <&clks IMX6UL_CLK_PWM7>,
                                         <&clks IMX6UL_CLK_PWM7>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                status = "disabled";
                        };
 
                                clocks = <&clks IMX6UL_CLK_PWM8>,
                                         <&clks IMX6UL_CLK_PWM8>;
                                clock-names = "ipg", "per";
-                               #pwm-cells = <2>;
+                               #pwm-cells = <3>;
                                status = "disabled";
                        };
                };
                                status = "disabled";
                        };
 
-                       usdhc1: usdhc@2190000 {
+                       usdhc1: mmc@2190000 {
                                compatible = "fsl,imx6ul-usdhc", "fsl,imx6sx-usdhc";
                                reg = <0x02190000 0x4000>;
                                interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc2: usdhc@2194000 {
+                       usdhc2: mmc@2194000 {
                                compatible = "fsl,imx6ul-usdhc", "fsl,imx6sx-usdhc";
                                reg = <0x02194000 0x4000>;
                                interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       ocotp: ocotp-ctrl@21bc000 {
+                       ocotp: efuse@21bc000 {
                                #address-cells = <1>;
                                #size-cells = <1>;
                                compatible = "fsl,imx6ul-ocotp", "syscon";
index 9145c53..6cf9593 100644 (file)
 &pwm4 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm4>;
-       #pwm-cells = <3>;
 };
 
 &pwm5 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm5>;
-       #pwm-cells = <3>;
 };
 
 &pwm6 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm6>;
-       #pwm-cells = <3>;
 };
 
 &pwm7 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm7>;
-       #pwm-cells = <3>;
 };
 
 &sdma {
diff --git a/arch/arm/boot/dts/imx6ull-myir-mys-6ulx-eval.dts b/arch/arm/boot/dts/imx6ull-myir-mys-6ulx-eval.dts
new file mode 100644 (file)
index 0000000..ecbb2cc
--- /dev/null
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Linumiz
+ * Author: Parthiban Nallathambi <parthiban@linumiz.com>
+ */
+
+/dts-v1/;
+#include "imx6ull.dtsi"
+#include "imx6ull-myir-mys-6ulx.dtsi"
+
+/ {
+       model = "MYiR i.MX6ULL MYS-6ULX Single Board Computer with NAND";
+       compatible = "myir,imx6ull-mys-6ulx-eval", "fsl,imx6ull";
+};
+
+&gpmi {
+       status = "okay";
+};
diff --git a/arch/arm/boot/dts/imx6ull-myir-mys-6ulx.dtsi b/arch/arm/boot/dts/imx6ull-myir-mys-6ulx.dtsi
new file mode 100644 (file)
index 0000000..d03694f
--- /dev/null
@@ -0,0 +1,238 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Linumiz
+ * Author: Parthiban Nallathambi <parthiban@linumiz.com>
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/pwm/pwm.h>
+
+/ {
+       model = "MYiR MYS-6ULX Single Board Computer";
+       compatible = "fsl,imx6ull";
+
+       chosen {
+               stdout-path = &uart1;
+       };
+
+       reg_vdd_5v: regulator-vdd-5v {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_5V";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       reg_vdd_3v3: regulator-vdd-3v3 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_3V3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               vin-supply = <&reg_vdd_5v>;
+       };
+};
+
+&fec1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_enet1>;
+       phy-mode = "rmii";
+       phy-handle = <&ethphy0>;
+       phy-supply = <&reg_vdd_3v3>;
+       status = "okay";
+
+       mdio: mdio {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               ethphy0: ethernet-phy@0 {
+                       reg = <0>;
+                       interrupt-parent = <&gpio5>;
+                       interrupts = <5 IRQ_TYPE_LEVEL_LOW>;
+                       clocks = <&clks IMX6UL_CLK_ENET_REF>;
+                       clock-names = "rmii-ref";
+               };
+       };
+};
+
+&gpmi {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_gpmi_nand>;
+       nand-on-flash-bbt;
+       status = "disabled";
+};
+
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart1>;
+       status = "okay";
+};
+
+&usbotg1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usb_otg1_id>;
+       dr_mode = "otg";
+       status = "okay";
+};
+
+&usbotg2 {
+       dr_mode = "host";
+       disable-over-current;
+       status = "okay";
+};
+
+&usdhc1 {
+       pinctrl-names = "default", "state_100mhz", "state_200mhz";
+       pinctrl-0 = <&pinctrl_usdhc1>;
+       pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
+       pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
+       cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
+       no-1-8-v;
+       keep-power-in-suspend;
+       wakeup-source;
+       vmmc-supply = <&reg_vdd_3v3>;
+       status = "okay";
+};
+
+&usdhc2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc2>;
+       pinctrl-1 = <&pinctrl_usdhc2_100mhz>;
+       pinctrl-2 = <&pinctrl_usdhc2_200mhz>;
+       bus-width = <8>;
+       non-removable;
+       keep-power-in-suspend;
+       vmmc-supply = <&reg_vdd_3v3>;
+};
+
+&iomuxc {
+       pinctrl_enet1: enet1grp {
+               fsl,pins = <
+                       MX6UL_PAD_GPIO1_IO06__ENET1_MDIO        0x1b0b0
+                       MX6UL_PAD_GPIO1_IO07__ENET1_MDC         0x1b0b0
+                       MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN      0x1b0b0
+                       MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER      0x1b0b0
+                       MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0
+                       MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0
+                       MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN      0x1b0b0
+                       MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0
+                       MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0
+                       MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1  0x4001b031
+                       MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05      0x1b0b0
+               >;
+       };
+
+       pinctrl_gpmi_nand: gpminandgrp {
+               fsl,pins = <
+                       MX6UL_PAD_NAND_CLE__RAWNAND_CLE         0x0b0b1
+                       MX6UL_PAD_NAND_ALE__RAWNAND_ALE         0x0b0b1
+                       MX6UL_PAD_NAND_WP_B__RAWNAND_WP_B       0x0b0b1
+                       MX6UL_PAD_NAND_READY_B__RAWNAND_READY_B 0x0b000
+                       MX6UL_PAD_NAND_CE0_B__RAWNAND_CE0_B     0x0b0b1
+                       MX6UL_PAD_NAND_RE_B__RAWNAND_RE_B       0x0b0b1
+                       MX6UL_PAD_NAND_WE_B__RAWNAND_WE_B       0x0b0b1
+                       MX6UL_PAD_NAND_DATA00__RAWNAND_DATA00   0x0b0b1
+                       MX6UL_PAD_NAND_DATA01__RAWNAND_DATA01   0x0b0b1
+                       MX6UL_PAD_NAND_DATA02__RAWNAND_DATA02   0x0b0b1
+                       MX6UL_PAD_NAND_DATA03__RAWNAND_DATA03   0x0b0b1
+                       MX6UL_PAD_NAND_DATA04__RAWNAND_DATA04   0x0b0b1
+                       MX6UL_PAD_NAND_DATA05__RAWNAND_DATA05   0x0b0b1
+                       MX6UL_PAD_NAND_DATA06__RAWNAND_DATA06   0x0b0b1
+                       MX6UL_PAD_NAND_DATA07__RAWNAND_DATA07   0x0b0b1
+               >;
+       };
+
+       pinctrl_uart1: uart1grp {
+               fsl,pins = <
+                       MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX   0x1b0b1
+                       MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX   0x1b0b1
+               >;
+       };
+
+       pinctrl_usb_otg1_id: usbotg1idgrp {
+               fsl,pins = <
+                       MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID    0x17059
+               >;
+       };
+
+       pinctrl_usdhc1: usdhc1grp {
+               fsl,pins = <
+                       MX6UL_PAD_SD1_CMD__USDHC1_CMD           0x17059
+                       MX6UL_PAD_SD1_CLK__USDHC1_CLK           0x10059
+                       MX6UL_PAD_SD1_DATA0__USDHC1_DATA0       0x17059
+                       MX6UL_PAD_SD1_DATA1__USDHC1_DATA1       0x17059
+                       MX6UL_PAD_SD1_DATA2__USDHC1_DATA2       0x17059
+                       MX6UL_PAD_SD1_DATA3__USDHC1_DATA3       0x17059
+                       MX6UL_PAD_UART1_RTS_B__GPIO1_IO19       0x17059
+               >;
+       };
+
+       pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
+               fsl,pins = <
+                       MX6UL_PAD_SD1_CMD__USDHC1_CMD           0x170b9
+                       MX6UL_PAD_SD1_CLK__USDHC1_CLK           0x100b9
+                       MX6UL_PAD_SD1_DATA0__USDHC1_DATA0       0x170b9
+                       MX6UL_PAD_SD1_DATA1__USDHC1_DATA1       0x170b9
+                       MX6UL_PAD_SD1_DATA2__USDHC1_DATA2       0x170b9
+                       MX6UL_PAD_SD1_DATA3__USDHC1_DATA3       0x170b9
+               >;
+       };
+
+       pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
+               fsl,pins = <
+                       MX6UL_PAD_SD1_CMD__USDHC1_CMD           0x170f9
+                       MX6UL_PAD_SD1_CLK__USDHC1_CLK           0x100f9
+                       MX6UL_PAD_SD1_DATA0__USDHC1_DATA0       0x170f9
+                       MX6UL_PAD_SD1_DATA1__USDHC1_DATA1       0x170f9
+                       MX6UL_PAD_SD1_DATA2__USDHC1_DATA2       0x170f9
+                       MX6UL_PAD_SD1_DATA3__USDHC1_DATA3       0x170f9
+               >;
+       };
+
+       pinctrl_usdhc2: usdhc2grp {
+               fsl,pins = <
+                       MX6UL_PAD_NAND_RE_B__USDHC2_CLK         0x10069
+                       MX6UL_PAD_NAND_WE_B__USDHC2_CMD         0x17059
+                       MX6UL_PAD_NAND_DATA00__USDHC2_DATA0     0x17059
+                       MX6UL_PAD_NAND_DATA01__USDHC2_DATA1     0x17059
+                       MX6UL_PAD_NAND_DATA02__USDHC2_DATA2     0x17059
+                       MX6UL_PAD_NAND_DATA03__USDHC2_DATA3     0x17059
+                       MX6UL_PAD_NAND_DATA04__USDHC2_DATA4     0x17059
+                       MX6UL_PAD_NAND_DATA05__USDHC2_DATA5     0x17059
+                       MX6UL_PAD_NAND_DATA06__USDHC2_DATA6     0x17059
+                       MX6UL_PAD_NAND_DATA07__USDHC2_DATA7     0x17059
+               >;
+       };
+
+       pinctrl_usdhc2_100mhz: usdhc2grp100mhz {
+               fsl,pins = <
+                       MX6UL_PAD_NAND_RE_B__USDHC2_CLK         0x100b9
+                       MX6UL_PAD_NAND_WE_B__USDHC2_CMD         0x170b9
+                       MX6UL_PAD_NAND_DATA00__USDHC2_DATA0     0x170b9
+                       MX6UL_PAD_NAND_DATA01__USDHC2_DATA1     0x170b9
+                       MX6UL_PAD_NAND_DATA02__USDHC2_DATA2     0x170b9
+                       MX6UL_PAD_NAND_DATA03__USDHC2_DATA3     0x170b9
+                       MX6UL_PAD_NAND_DATA04__USDHC2_DATA4     0x170b9
+                       MX6UL_PAD_NAND_DATA05__USDHC2_DATA5     0x170b9
+                       MX6UL_PAD_NAND_DATA06__USDHC2_DATA6     0x170b9
+                       MX6UL_PAD_NAND_DATA07__USDHC2_DATA7     0x170b9
+               >;
+       };
+
+       pinctrl_usdhc2_200mhz: usdhc2grp200mhz {
+               fsl,pins = <
+                       MX6UL_PAD_NAND_RE_B__USDHC2_CLK         0x100f9
+                       MX6UL_PAD_NAND_WE_B__USDHC2_CMD         0x170f9
+                       MX6UL_PAD_NAND_DATA00__USDHC2_DATA0     0x170f9
+                       MX6UL_PAD_NAND_DATA01__USDHC2_DATA1     0x170f9
+                       MX6UL_PAD_NAND_DATA02__USDHC2_DATA2     0x170f9
+                       MX6UL_PAD_NAND_DATA03__USDHC2_DATA3     0x170f9
+                       MX6UL_PAD_NAND_DATA04__USDHC2_DATA4     0x170f9
+                       MX6UL_PAD_NAND_DATA05__USDHC2_DATA5     0x170f9
+                       MX6UL_PAD_NAND_DATA06__USDHC2_DATA6     0x170f9
+                       MX6UL_PAD_NAND_DATA07__USDHC2_DATA7     0x170f9
+               >;
+       };
+};
index f6bb35d..1cfaf41 100644 (file)
                };
        };
 
-       tempmon: tempmon {
-               compatible = "fsl,imx7d-tempmon";
-               interrupt-parent = <&gpc>;
-               interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
-               fsl,tempmon = <&anatop>;
-               nvmem-cells = <&tempmon_calib>, <&fuse_grade>;
-               nvmem-cell-names = "calib", "temp_grade";
-               clocks = <&clks IMX7D_PLL_SYS_MAIN_CLK>;
-       };
-
        timer {
                compatible = "arm,armv7-timer";
                interrupt-parent = <&intc>;
                                };
                        };
 
-                       ocotp: ocotp-ctrl@30350000 {
+                       ocotp: efuse@30350000 {
                                #address-cells = <1>;
                                #size-cells = <1>;
                                compatible = "fsl,imx7d-ocotp", "syscon";
                                        anatop-max-voltage = <1300000>;
                                        anatop-enable-bit = <0>;
                                };
+
+                               tempmon: tempmon {
+                                       compatible = "fsl,imx7d-tempmon";
+                                       interrupt-parent = <&gpc>;
+                                       interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
+                                       fsl,tempmon = <&anatop>;
+                                       nvmem-cells = <&tempmon_calib>, <&fuse_grade>;
+                                       nvmem-cell-names = "calib", "temp_grade";
+                                       clocks = <&clks IMX7D_PLL_SYS_MAIN_CLK>;
+                               };
                        };
 
                        snvs: snvs@30370000 {
                                reg = <0x30b30200 0x200>;
                        };
 
-                       usdhc1: usdhc@30b40000 {
+                       usdhc1: mmc@30b40000 {
                                compatible = "fsl,imx7d-usdhc", "fsl,imx6sl-usdhc";
                                reg = <0x30b40000 0x10000>;
                                interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc2: usdhc@30b50000 {
+                       usdhc2: mmc@30b50000 {
                                compatible = "fsl,imx7d-usdhc", "fsl,imx6sl-usdhc";
                                reg = <0x30b50000 0x10000>;
                                interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
 
-                       usdhc3: usdhc@30b60000 {
+                       usdhc3: mmc@30b60000 {
                                compatible = "fsl,imx7d-usdhc", "fsl,imx6sl-usdhc";
                                reg = <0x30b60000 0x10000>;
                                interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
index f7c4878..3674396 100644 (file)
                        reg = <0x410a3000 0x1000>;
                };
 
-               ocotp: ocotp-ctrl@410a6000 {
+               ocotp: efuse@410a6000 {
                        compatible = "fsl,imx7ulp-ocotp", "syscon";
                        reg = <0x410a6000 0x4000>;
                        clocks = <&scg1 IMX7ULP_CLK_DUMMY>;
index 17f48f8..a7636fe 100644 (file)
@@ -9,7 +9,7 @@
  * L2 cache. If your B3 silently fails to boot, u-boot is probably too
  * old. Either upgrade, or consider the following email:
  *
- * http://lists.debian.org/debian-arm/2012/08/msg00128.html
+ * https://lists.debian.org/debian-arm/2012/08/msg00128.html
  */
 
 /dts-v1/;
index 760a68c..069af9a 100644 (file)
@@ -59,6 +59,7 @@
                ethernet0 = &enet0;
                ethernet1 = &enet1;
                ethernet2 = &enet2;
+               rtc1 = &ftm_alarm0;
                serial0 = &lpuart0;
                serial1 = &lpuart1;
                serial2 = &lpuart2;
                        fsl,tmr-prsc    = <2>;
                        fsl,tmr-add     = <0xaaaaaaab>;
                        fsl,tmr-fiper1  = <999999995>;
-                       fsl,tmr-fiper2  = <99990>;
+                       fsl,tmr-fiper2  = <999999995>;
                        fsl,max-adj     = <499999999>;
                        fsl,extts-fifo;
                };
                        big-endian;
                };
 
+               rcpm: power-controller@1ee2140 {
+                       compatible = "fsl,ls1021a-rcpm", "fsl,qoriq-rcpm-2.1+";
+                       reg = <0x0 0x1ee2140 0x0 0x8>;
+                       #fsl,rcpm-wakeup-cells = <2>;
+               };
+
+               ftm_alarm0: timer0@29d0000 {
+                       compatible = "fsl,ls1021a-ftm-alarm";
+                       reg = <0x0 0x29d0000 0x0 0x10000>;
+                       reg-names = "ftm";
+                       fsl,rcpm-wakeup = <&rcpm 0x20000 0x0>;
+                       interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+                       big-endian;
+               };
        };
 };
index ae89dea..4640579 100644 (file)
                                status = "disabled";
                        };
 
+                       sdhc: mmc@8e00 {
+                               compatible = "amlogic,meson-mx-sdhc";
+                               reg = <0x8e00 0x42>;
+                               interrupts = <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>;
+                               status = "disabled";
+                       };
+
                        gpio_intc: interrupt-controller@9880 {
                                compatible = "amlogic,meson-gpio-intc";
                                reg = <0x9880 0x10>;
index eedb925..277c0bb 100644 (file)
@@ -6,6 +6,7 @@
 #include <dt-bindings/clock/meson8-ddr-clkc.h>
 #include <dt-bindings/clock/meson8b-clkc.h>
 #include <dt-bindings/gpio/meson8-gpio.h>
+#include <dt-bindings/power/meson8-power.h>
 #include <dt-bindings/reset/amlogic,meson8b-clkc-reset.h>
 #include <dt-bindings/reset/amlogic,meson8b-reset.h>
 #include "meson.dtsi"
                        };
                };
 
+               sdxc_b_pins: sdxc-b {
+                       mux {
+                               groups = "sdxc_d0_b", "sdxc_d13_b",
+                                        "sdxc_clk_b", "sdxc_cmd_b";
+                               function = "sdxc_b";
+                               bias-pull-up;
+                       };
+               };
+
                spi_nor_pins: nor {
                        mux {
                                groups = "nor_d", "nor_q", "nor_c", "nor_cs";
 &ethmac {
        clocks = <&clkc CLKID_ETH>;
        clock-names = "stmmaceth";
+
+       power-domains = <&pwrc PWRC_MESON8_ETHERNET_MEM_ID>;
 };
 
 &gpio_intc {
                #clock-cells = <1>;
                #reset-cells = <1>;
        };
+
+       pwrc: power-controller {
+               compatible = "amlogic,meson8-pwrc";
+               #power-domain-cells = <1>;
+               amlogic,ao-sysctrl = <&pmu>;
+               clocks = <&clkc CLKID_VPU>;
+               clock-names = "vpu";
+               assigned-clocks = <&clkc CLKID_VPU>;
+               assigned-clock-rates = <364285714>;
+       };
 };
 
 &hwrng {
        nvmem-cell-names = "temperature_calib";
 };
 
+&sdhc {
+       compatible = "amlogic,meson8-sdhc", "amlogic,meson-mx-sdhc";
+       clocks = <&xtal>,
+                <&clkc CLKID_FCLK_DIV4>,
+                <&clkc CLKID_FCLK_DIV3>,
+                <&clkc CLKID_FCLK_DIV5>,
+                <&clkc CLKID_SDHC>;
+       clock-names = "clkin0", "clkin1", "clkin2", "clkin3", "pclk";
+};
+
 &sdio {
        compatible = "amlogic,meson8-sdio", "amlogic,meson-mx-sdio";
        clocks = <&clkc CLKID_SDIO>, <&clkc CLKID_CLK81>;
index 163a200..ed06102 100644 (file)
                reg = <0x40000000 0x40000000>;
        };
 
+       emmc_pwrseq: emmc-pwrseq {
+               compatible = "mmc-pwrseq-emmc";
+               reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
+       };
+
        gpio-keys {
                compatible = "gpio-keys-polled";
                #address-cells = <1>;
        vref-supply = <&vcc_1v8>;
 };
 
+&sdhc {
+       status = "okay";
+
+       pinctrl-0 = <&sdxc_c_pins>;
+       pinctrl-names = "default";
+
+       bus-width = <8>;
+       max-frequency = <50000000>;
+
+       cap-mmc-highspeed;
+       disable-wp;
+       non-removable;
+       no-sdio;
+
+       mmc-pwrseq = <&emmc_pwrseq>;
+
+       vmmc-supply = <&vcc_3v3>;
+       vqmmc-supply = <&vcc_3v3>;
+};
+
 &sdio {
        status = "okay";
 
index cb21ac9..0c26467 100644 (file)
@@ -15,6 +15,7 @@
        aliases {
                serial0 = &uart_AO;
                mmc0 = &sd_card_slot;
+               mmc1 = &sdhc;
        };
 
        chosen {
                reg = <0x40000000 0x40000000>;
        };
 
+       emmc_pwrseq: emmc-pwrseq {
+               compatible = "mmc-pwrseq-emmc";
+               reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
+       };
+
        leds {
                compatible = "gpio-leds";
                blue {
        vref-supply = <&vcc_1v8>;
 };
 
+&sdhc {
+       status = "okay";
+
+       pinctrl-0 = <&sdxc_c_pins>;
+       pinctrl-names = "default";
+
+       bus-width = <8>;
+       max-frequency = <100000000>;
+
+       disable-wp;
+       cap-mmc-highspeed;
+       mmc-hs200-1_8v;
+       no-sdio;
+
+       mmc-pwrseq = <&emmc_pwrseq>;
+
+       vmmc-supply = <&vcc_3v3>;
+       vqmmc-supply = <&vcc_1v8>;
+};
+
 &sdio {
        status = "okay";
 
index ba36168..2401cdf 100644 (file)
@@ -7,6 +7,7 @@
 #include <dt-bindings/clock/meson8-ddr-clkc.h>
 #include <dt-bindings/clock/meson8b-clkc.h>
 #include <dt-bindings/gpio/meson8b-gpio.h>
+#include <dt-bindings/power/meson8-power.h>
 #include <dt-bindings/reset/amlogic,meson8b-reset.h>
 #include <dt-bindings/reset/amlogic,meson8b-clkc-reset.h>
 #include "meson.dtsi"
                        };
                };
 
+               sdxc_c_pins: sdxc-c {
+                       mux {
+                               groups = "sdxc_d0_c", "sdxc_d13_c",
+                                        "sdxc_d47_c", "sdxc_clk_c",
+                                        "sdxc_cmd_c";
+                               function = "sdxc_c";
+                               bias-pull-up;
+                       };
+               };
+
                pwm_c1_pins: pwm-c1 {
                        mux {
                                groups = "pwm_c1";
 
        resets = <&reset RESET_ETHERNET>;
        reset-names = "stmmaceth";
+
+       power-domains = <&pwrc PWRC_MESON8_ETHERNET_MEM_ID>;
 };
 
 &gpio_intc {
                #clock-cells = <1>;
                #reset-cells = <1>;
        };
+
+       pwrc: power-controller {
+               compatible = "amlogic,meson8b-pwrc";
+               #power-domain-cells = <1>;
+               amlogic,ao-sysctrl = <&pmu>;
+               resets = <&reset RESET_DBLK>,
+                        <&reset RESET_PIC_DC>,
+                        <&reset RESET_HDMI_APB>,
+                        <&reset RESET_HDMI_SYSTEM_RESET>,
+                        <&reset RESET_VENCI>,
+                        <&reset RESET_VENCP>,
+                        <&reset RESET_VDAC_4>,
+                        <&reset RESET_VENCL>,
+                        <&reset RESET_VIU>,
+                        <&reset RESET_VENC>,
+                        <&reset RESET_RDMA>;
+               reset-names = "dblk", "pic_dc", "hdmi_apb", "hdmi_system",
+                             "venci", "vencp", "vdac", "vencl", "viu",
+                             "venc", "rdma";
+               clocks = <&clkc CLKID_VPU>;
+               clock-names = "vpu";
+               assigned-clocks = <&clkc CLKID_VPU>;
+               assigned-clock-rates = <182142857>;
+       };
 };
 
 &hwrng {
        nvmem-cell-names = "temperature_calib";
 };
 
+&sdhc {
+       compatible = "amlogic,meson8-sdhc", "amlogic,meson-mx-sdhc";
+       clocks = <&xtal>,
+                <&clkc CLKID_FCLK_DIV4>,
+                <&clkc CLKID_FCLK_DIV3>,
+                <&clkc CLKID_FCLK_DIV5>,
+                <&clkc CLKID_SDHC>;
+       clock-names = "clkin0", "clkin1", "clkin2", "clkin3", "pclk";
+};
+
 &sdio {
        compatible = "amlogic,meson8b-sdio", "amlogic,meson-mx-sdio";
        clocks = <&clkc CLKID_SDIO>, <&clkc CLKID_CLK81>;
index 2397ba0..6725dd9 100644 (file)
        };
 };
 
+&pwrc {
+       compatible = "amlogic,meson8m2-pwrc";
+       resets = <&reset RESET_DBLK>,
+                <&reset RESET_PIC_DC>,
+                <&reset RESET_HDMI_APB>,
+                <&reset RESET_HDMI_SYSTEM_RESET>,
+                <&reset RESET_VENCI>,
+                <&reset RESET_VENCP>,
+                <&reset RESET_VDAC_4>,
+                <&reset RESET_VENCL>,
+                <&reset RESET_VIU>,
+                <&reset RESET_VENC>,
+                <&reset RESET_RDMA>;
+       reset-names = "dblk", "pic_dc", "hdmi_apb", "hdmi_system", "venci",
+                     "vencp", "vdac", "vencl", "viu", "venc", "rdma";
+       assigned-clocks = <&clkc CLKID_VPU>;
+       assigned-clock-rates = <364000000>;
+};
+
 &saradc {
        compatible = "amlogic,meson8m2-saradc", "amlogic,meson-saradc";
 };
 
+&sdhc {
+       compatible = "amlogic,meson8m2-sdhc", "amlogic,meson-mx-sdhc";
+};
+
 &usb0_phy {
        compatible = "amlogic,meson8m2-usb2-phy", "amlogic,meson-mx-usb2-phy";
 };
index 6cfa0d4..f1a4115 100644 (file)
                        linux,code = <SW_TABLET_MODE>;
                        wakeup-source;
                };
-
-               microphone_insert {
-                       label = "Microphone Plug";
-                       gpios = <&gpio 96 GPIO_ACTIVE_HIGH>;
-                       linux,input-type = <EV_SW>;
-                       linux,code = <SW_MICROPHONE_INSERT>;
-                       debounce-interval = <100>;
-                       wakeup-source;
-               };
-
-               headphone_insert {
-                       label = "Headphone Plug";
-                       gpios = <&gpio 97 GPIO_ACTIVE_HIGH>;
-                       linux,input-type = <EV_SW>;
-                       linux,code = <SW_HEADPHONE_INSERT>;
-                       debounce-interval = <100>;
-                       wakeup-source;
-               };
        };
 
-       camera_i2c {
+       i2c {
                compatible = "i2c-gpio";
-               gpios = <&gpio 109 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>,
-                       <&gpio 108 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+               sda-gpios = <&gpio 109 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+               scl-gpios = <&gpio 108 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
                #address-cells = <1>;
                #size-cells = <0>;
                i2c-gpio,timeout-ms = <1000>;
                reset-gpios = <&gpio 58 GPIO_ACTIVE_HIGH>;
        };
 
+       sound-card {
+               compatible = "audio-graph-card";
+               label = "OLPC XO";
+               dais = <&sspa0_dai>;
+               routing = "Headphones", "HPOL",
+                         "Headphones", "HPOR",
+                         "MIC2", "Mic Jack";
+               widgets = "Headphone", "Headphones", "Microphone", "Mic Jack";
+               hp-det-gpio = <&gpio 97 GPIO_ACTIVE_HIGH>;
+               mic-det-gpio = <&gpio 96 GPIO_ACTIVE_HIGH>;
+       };
+
        soc {
                axi@d4200000 {
                        ap-sp@d4290000 {
                compatible = "realtek,alc5631";
                reg = <0x1a>;
                status = "okay";
+
+               port {
+                       rt5631_0: endpoint {
+                               mclk-fs = <256>;
+                               clocks = <&audio_clk 0>;
+                               remote-endpoint = <&sspa0_0>;
+                       };
+               };
        };
 };
 
 };
 
 &ssp3 {
-       #address-cells = <0>;
+       /delete-property/ #address-cells;
+       /delete-property/ #size-cells;
        spi-slave;
        status = "okay";
        ready-gpio = <&gpio 125 GPIO_ACTIVE_HIGH>;
                };
        };
 };
+
+&asram {
+       status = "okay";
+};
+
+&adma0 {
+       status = "okay";
+};
+
+&audio_clk {
+       status = "okay";
+};
+
+&sspa0 {
+       status = "okay";
+       dmas = <&adma0 0>, <&adma0 1>;
+       dma-names = "tx", "rx";
+
+       sspa0_dai: port {
+               sspa0_0: endpoint {
+                       remote-endpoint = <&rt5631_0>;
+                       frame-master;
+                       bitclock-master;
+                       dai-format = "i2s";
+               };
+       };
+};
+
+&gpu {
+       status = "okay";
+};
index 4306f3a..445bdcd 100644 (file)
@@ -5,6 +5,7 @@
  */
 
 #include <dt-bindings/clock/marvell,mmp2.h>
+#include <dt-bindings/power/marvell,mmp2.h>
 
 / {
        #address-cells = <1>;
                        reg = <0xd4200000 0x00200000>;
                        ranges;
 
+                       gpu: gpu@d420d000 {
+                               compatible = "vivante,gc";
+                               reg = <0xd420d000 0x4000>;
+                               interrupts = <8>;
+                               status = "disabled";
+                               clocks = <&soc_clocks MMP2_CLK_GPU_3D>,
+                                        <&soc_clocks MMP2_CLK_GPU_BUS>;
+                               clock-names = "core", "bus";
+                               power-domains = <&soc_clocks MMP2_POWER_DOMAIN_GPU>;
+                       };
+
                        intc: interrupt-controller@d4282000 {
                                compatible = "mrvl,mmp2-intc";
                                interrupt-controller;
                                clock-output-names = "mclk";
                                status = "disabled";
                        };
+
+                       adma0: dma-controller@d42a0800 {
+                               compatible = "marvell,adma-1.0";
+                               reg = <0xd42a0800 0x100>;
+                               interrupts = <48>;
+                               #dma-cells = <1>;
+                               asram = <&asram>;
+                               iram = <&asram>;
+                               status = "disabled";
+                       };
+
+                       adma1: dma-controller@d42a0900 {
+                               compatible = "marvell,adma-1.0";
+                               reg = <0xd42a0900 0x100>;
+                               interrupts = <48>;
+                               #dma-cells = <1>;
+                               status = "disabled";
+                       };
+
+                       audio_clk: clocks@d42a0c30 {
+                               compatible = "marvell,mmp2-audio-clock";
+                               reg = <0xd42a0c30 0x10>;
+                               clock-names = "audio", "vctcxo", "i2s0", "i2s1";
+                               clocks = <&soc_clocks MMP2_CLK_AUDIO>,
+                                        <&soc_clocks MMP2_CLK_VCTCXO>,
+                                        <&soc_clocks MMP2_CLK_I2S0>,
+                                        <&soc_clocks MMP2_CLK_I2S1>;
+                               power-domains = <&soc_clocks MMP2_POWER_DOMAIN_AUDIO>;
+                               #clock-cells = <1>;
+                               status = "disabled";
+                       };
+
+                       sspa0: audio-controller@d42a0c00 {
+                               compatible = "marvell,mmp-sspa";
+                               reg = <0xd42a0c00 0x30>,
+                                     <0xd42a0c80 0x30>;
+                               interrupts = <2>;
+                               clock-names = "audio", "bitclk";
+                               clocks = <&soc_clocks MMP2_CLK_AUDIO>,
+                                        <&audio_clk 1>;
+                               power-domains = <&soc_clocks MMP2_POWER_DOMAIN_AUDIO>;
+                               #sound-dai-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       sspa1: audio-controller@d42a0d00 {
+                               compatible = "marvell,mmp-sspa";
+                               reg = <0xd42a0d00 0x30>,
+                                     <0xd42a0d80 0x30>;
+                               interrupts = <3>;
+                               clock-names = "audio", "bitclk";
+                               clocks = <&soc_clocks MMP2_CLK_AUDIO>,
+                                        <&audio_clk 2>;
+                               power-domains = <&soc_clocks MMP2_POWER_DOMAIN_AUDIO>;
+                               #sound-dai-cells = <0>;
+                               status = "disabled";
+                       };
                };
 
                apb@d4000000 {  /* APB */
                        reg = <0xd4000000 0x00200000>;
                        ranges;
 
+                       dma-controller@d4000000 {
+                               compatible = "marvell,pdma-1.0";
+                               reg = <0xd4000000 0x10000>;
+                               interrupts = <48>;
+                               #dma-channels = <16>;
+                               status = "disabled";
+                       };
+
                        timer0: timer@d4014000 {
                                compatible = "mrvl,mmp-timer";
                                reg = <0xd4014000 0x100>;
                        };
                };
 
+               asram: sram@e0000000 {
+                       compatible = "mmio-sram";
+                       reg = <0xe0000000 0x10000>;
+                       ranges = <0 0xe0000000 0x10000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       status = "disabled";
+               };
+
                soc_clocks: clocks {
                        compatible = "marvell,mmp2-clock";
-                       reg = <0xd4050000 0x1000>,
+                       reg = <0xd4050000 0x2000>,
                              <0xd4282800 0x400>,
                              <0xd4015000 0x1000>;
                        reg-names = "mpmu", "apmu", "apbc";
                        #clock-cells = <1>;
                        #reset-cells = <1>;
+                       #power-domain-cells = <1>;
                };
        };
 };
index b0ec14c..fe3b1cd 100644 (file)
        cs-gpios = <&gpio 56 GPIO_ACTIVE_LOW>;
        status = "okay";
 };
+
+&gpu_2d {
+       status = "okay";
+};
+
+&gpu_3d {
+       status = "okay";
+};
index 57231d4..cc4efd0 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/clock/marvell,mmp2.h>
+#include <dt-bindings/power/marvell,mmp2.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 
 / {
                                clock-output-names = "mclk";
                                status = "disabled";
                        };
+
+                       gpu_3d: gpu@d420d000 {
+                               compatible = "vivante,gc";
+                               reg = <0xd420d000 0x2000>;
+                               interrupt-parent = <&gpu_mux>;
+                               interrupts = <0>;
+                               status = "disabled";
+                               clocks = <&soc_clocks MMP3_CLK_GPU_3D>,
+                                        <&soc_clocks MMP3_CLK_GPU_BUS>;
+                               clock-names = "core", "bus";
+                               power-domains = <&soc_clocks MMP2_POWER_DOMAIN_GPU>;
+                       };
+
+                       gpu_2d: gpu@d420f000 {
+                               compatible = "vivante,gc";
+                               reg = <0xd420f000 0x2000>;
+                               interrupt-parent = <&gpu_mux>;
+                               interrupts = <2>;
+                               status = "disabled";
+                               clocks = <&soc_clocks MMP3_CLK_GPU_2D>,
+                                        <&soc_clocks MMP3_CLK_GPU_BUS>;
+                               clock-names = "core", "bus";
+                               power-domains = <&soc_clocks MMP2_POWER_DOMAIN_GPU>;
+                       };
                };
 
                apb@d4000000 {
index 8a5cb44..f9c2a99 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP2 SoC
  *
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index 7d66027..af964f1 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 6c5c7c0..494bf69 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP2420 SoC
  *
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index f7e3248..7d27e90 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 6a1f5bb..d19d8ba 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP243x SoC
  *
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index e498495..cb6968a 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "omap3-beagle-xm.dts"
index 125ed93..05077f3 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index dfa1586..79bc710 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 235ecfd..aee46fa 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP3 SoC CPU thermal
  *
- * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2017 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index e0c0382..c933219 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 6a94815..5cc0cf7 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 3313285..a010585 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  * Copyright (C) 2014 Stefan Roese <sr@denx.de>
  */
 
index c9ecbc4..b3f7f99 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  * Copyright (C) 2014 Stefan Roese <sr@denx.de>
  */
 
index 35c4e15..19e471e 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  * Copyright (C) 2014 Stefan Roese <sr@denx.de>
  */
 
index ec9ba04..9c6a927 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 4089d97..0905b68 100644 (file)
  * but it is not widely used and to prevent kernel crash rather AES is disabled.
  * There is also no runtime detection code if AES is disabled in L3 firewall...
  */
-&aes {
+&aes1_target {
+       status = "disabled";
+};
+
+&aes2_target {
        status = "disabled";
 };
 
index f24e232..580bfa1 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  * Copyright (C) 2014 Stefan Roese <sr@denx.de>
  */
 /dts-v1/;
@@ -8,7 +8,11 @@
 #include "omap34xx.dtsi"
 
 /* Secure omaps have some devices inaccessible depending on the firmware */
-&aes {
+&aes1_target {
+       status = "disabled";
+};
+
+&aes2_target {
        status = "disabled";
 };
 
index 64221e3..f7930f1 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  * Copyright (C) 2014 Stefan Roese <sr@denx.de>
  */
 
index d240e39..0482676 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 1296d06..cf22a7e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP3 SoC
  *
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
                        };
                };
 
-               aes: aes@480c5000 {
-                       compatible = "ti,omap3-aes";
-                       ti,hwmods = "aes";
-                       reg = <0x480c5000 0x50>;
-                       interrupts = <0>;
-                       dmas = <&sdma 65 &sdma 66>;
-                       dma-names = "tx", "rx";
+               aes1_target: target-module@480a6000 {
+                       compatible = "ti,sysc-omap2", "ti,sysc";
+                       reg = <0x480a6044 0x4>,
+                             <0x480a6048 0x4>,
+                             <0x480a604c 0x4>;
+                       reg-names = "rev", "sysc", "syss";
+                       ti,sysc-mask = <(SYSC_OMAP2_AUTOIDLE)>;
+                       ti,sysc-sidle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>,
+                                       <SYSC_IDLE_SMART>;
+                       ti,syss-mask = <1>;
+                       clocks = <&aes1_ick>;
+                       clock-names = "ick";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0 0x480a6000 0x2000>;
+
+                       aes1: aes1@0 {
+                               compatible = "ti,omap3-aes";
+                               reg = <0 0x50>;
+                               interrupts = <0>;
+                               dmas = <&sdma 9 &sdma 10>;
+                               dma-names = "tx", "rx";
+                       };
+               };
+
+               aes2_target: target-module@480c5000 {
+                       compatible = "ti,sysc-omap2", "ti,sysc";
+                       reg = <0x480c5044 0x4>,
+                             <0x480c5048 0x4>,
+                             <0x480c504c 0x4>;
+                       reg-names = "rev", "sysc", "syss";
+                       ti,sysc-mask = <(SYSC_OMAP2_AUTOIDLE)>;
+                       ti,sysc-sidle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>,
+                                       <SYSC_IDLE_SMART>;
+                       ti,syss-mask = <1>;
+                       clocks = <&aes2_ick>;
+                       clock-names = "ick";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0 0x480c5000 0x2000>;
+
+                       aes2: aes2@0 {
+                               compatible = "ti,omap3-aes";
+                               reg = <0 0x50>;
+                               interrupts = <0>;
+                               dmas = <&sdma 65 &sdma 66>;
+                               dma-names = "tx", "rx";
+                       };
                };
 
                prm: prm@48306000 {
index 7bfde8a..c5b9037 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index c4dd980..9c3ee4a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP34xx/OMAP35xx SoC
  *
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index 71f3c8f..9c3beef 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP3 SoC
  *
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index ab7f87a..03d054b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP4/5 SoC CPU thermal
  *
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  * Contact: Eduardo Valentin <eduardo.valentin@ti.com>
  *
  * This file is licensed under the terms of the GNU General Public License
index a6feb20..b2cf5f4 100644 (file)
                                compatible = "ti,omap4430-timer";
                                reg = <0x00000000 0x80>,
                                      <0x49038000 0x80>;
-                               clocks = <&abe_clkctrl OMAP4_TIMER5_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&abe_clkctrl OMAP4_TIMER5_CLKCTRL 24>,
+                                        <&syc_clk_div_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-dsp;
                        };
                                compatible = "ti,omap4430-timer";
                                reg = <0x00000000 0x80>,
                                      <0x4903a000 0x80>;
-                               clocks = <&abe_clkctrl OMAP4_TIMER6_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&abe_clkctrl OMAP4_TIMER6_CLKCTRL 24>,
+                                        <&syc_clk_div_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-dsp;
                        };
                                compatible = "ti,omap4430-timer";
                                reg = <0x00000000 0x80>,
                                      <0x4903c000 0x80>;
-                               clocks = <&abe_clkctrl OMAP4_TIMER7_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&abe_clkctrl OMAP4_TIMER7_CLKCTRL 24>,
+                                        <&syc_clk_div_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-dsp;
                        };
                                compatible = "ti,omap4430-timer";
                                reg = <0x00000000 0x80>,
                                      <0x4903e000 0x80>;
-                               clocks = <&abe_clkctrl OMAP4_TIMER8_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&abe_clkctrl OMAP4_TIMER8_CLKCTRL 24>,
+                                        <&syc_clk_div_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-pwm;
                                ti,timer-dsp;
index fcc5212..de742bf 100644 (file)
 
                target-module@62000 {                   /* 0x4a062000, ap 11 16.0 */
                        compatible = "ti,sysc-omap2", "ti,sysc";
-                       ti,hwmods = "usb_tll_hs";
                        reg = <0x62000 0x4>,
                              <0x62010 0x4>,
                              <0x62014 0x4>;
 
                target-module@64000 {                   /* 0x4a064000, ap 86 1e.0 */
                        compatible = "ti,sysc-omap4", "ti,sysc";
-                       ti,hwmods = "usb_host_hs";
                        reg = <0x64000 0x4>,
                              <0x64010 0x4>,
                              <0x64014 0x4>;
                        timer1: timer@0 {
                                compatible = "ti,omap3430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4_wkup_clkctrl OMAP4_TIMER1_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4_wkup_clkctrl OMAP4_TIMER1_CLKCTRL 24>,
+                                        <&sys_clkin_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-alwon;
                        };
                        timer2: timer@0 {
                                compatible = "ti,omap3430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4_per_clkctrl OMAP4_TIMER2_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4_per_clkctrl OMAP4_TIMER2_CLKCTRL 24>,
+                                        <&sys_clkin_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
                        };
                };
                        timer3: timer@0 {
                                compatible = "ti,omap4430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4_per_clkctrl OMAP4_TIMER3_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4_per_clkctrl OMAP4_TIMER3_CLKCTRL 24>,
+                                        <&sys_clkin_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
                        };
                };
                        timer4: timer@0 {
                                compatible = "ti,omap4430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4_per_clkctrl OMAP4_TIMER4_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4_per_clkctrl OMAP4_TIMER4_CLKCTRL 24>,
+                                        <&sys_clkin_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
                        };
                };
                        timer9: timer@0 {
                                compatible = "ti,omap4430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4_per_clkctrl OMAP4_TIMER9_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4_per_clkctrl OMAP4_TIMER9_CLKCTRL 24>,
+                                        <&sys_clkin_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-pwm;
                        };
                        timer10: timer@0 {
                                compatible = "ti,omap3430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4_per_clkctrl OMAP4_TIMER10_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4_per_clkctrl OMAP4_TIMER10_CLKCTRL 24>,
+                                        <&sys_clkin_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-pwm;
                        };
                        timer11: timer@0 {
                                compatible = "ti,omap4430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4_per_clkctrl OMAP4_TIMER11_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4_per_clkctrl OMAP4_TIMER11_CLKCTRL 24>,
+                                        <&sys_clkin_ck>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-pwm;
                        };
index 6408307..8fd076e 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 55ea8b6..3e78cae 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2011-2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011-2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 #include <dt-bindings/input/input.h>
 #include "elpida_ecb240abacn.dtsi"
                reg = <0x80000000 0x40000000>; /* 1 GB */
        };
 
+       reserved-memory {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               dsp_memory_region: dsp-memory@98000000 {
+                       compatible = "shared-dma-pool";
+                       reg = <0x98000000 0x800000>;
+                       reusable;
+                       status = "okay";
+               };
+
+               ipu_memory_region: ipu-memory@98800000 {
+                       compatible = "shared-dma-pool";
+                       reg = <0x98800000 0x7000000>;
+                       reusable;
+                       status = "okay";
+               };
+       };
+
        chosen {
                stdout-path = &uart3;
        };
                };
        };
 };
+
+&dsp {
+       status = "okay";
+       memory-region = <&dsp_memory_region>;
+       ti,timers = <&timer5>;
+       ti,watchdog-timers = <&timer6>;
+};
+
+&ipu {
+       status = "okay";
+       memory-region = <&ipu_memory_region>;
+       ti,timers = <&timer3>;
+       ti,watchdog-timers = <&timer9>, <&timer11>;
+};
index 9dd307b..cfa85aa 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index fb2f477..529d5bc 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
index 4215452..869f627 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  */
 #include "omap4-sdp.dts"
 
index 91480ac..79e7a41 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
 
        /*
         * Temperature Sensor
-        * http://www.ti.com/lit/ds/symlink/tmp105.pdf
+        * https://www.ti.com/lit/ds/symlink/tmp105.pdf
         */
        tmp105@48 {
                compatible = "ti,tmp105";
 
        /*
         * 3-Axis Digital Compass
-        * http://www.sparkfun.com/datasheets/Sensors/Magneto/HMC5843.pdf
+        * https://www.sparkfun.com/datasheets/Sensors/Magneto/HMC5843.pdf
         */
        hmc5843@1e {
                compatible = "honeywell,hmc5843";
index 41de32b..334cbba 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (C) 2014 Joachim Eastwood <manabian@gmail.com>
- * Copyright (C) 2012 Variscite Ltd. - http://www.variscite.com
+ * Copyright (C) 2012 Variscite Ltd. - https://www.variscite.com
  */
 #include "omap4460.dtsi"
 #include "omap4-mcpdm.dtsi"
index 6c2b07f..847a7ef 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include <dt-bindings/bus/ti-sysc.h>
@@ -26,6 +26,8 @@
                serial1 = &uart2;
                serial2 = &uart3;
                serial3 = &uart4;
+               rproc0 = &dsp;
+               rproc1 = &ipu;
        };
 
        cpus {
@@ -71,7 +73,7 @@
                interrupt-parent = <&gic>;
        };
 
-       L2: l2-cache-controller@48242000 {
+       L2: cache-controller@48242000 {
                compatible = "arm,pl310-cache";
                reg = <0x48242000 0x1000>;
                cache-unified;
                        sram = <&ocmcram>;
                };
 
-               dsp {
-                       compatible = "ti,omap3-c64";
-               };
-
                iva {
                        compatible = "ti,ivahd";
                        ti,hwmods = "iva";
                        hw-caps-temp-alert;
                };
 
+               dsp: dsp {
+                       compatible = "ti,omap4-dsp";
+                       ti,bootreg = <&scm_conf 0x304 0>;
+                       iommus = <&mmu_dsp>;
+                       resets = <&prm_tesla 0>;
+                       clocks = <&tesla_clkctrl OMAP4_DSP_CLKCTRL 0>;
+                       firmware-name = "omap4-dsp-fw.xe64T";
+                       mboxes = <&mailbox &mbox_dsp>;
+                       status = "disabled";
+               };
+
+               ipu: ipu@55020000 {
+                       compatible = "ti,omap4-ipu";
+                       reg = <0x55020000 0x10000>;
+                       reg-names = "l2ram";
+                       iommus = <&mmu_ipu>;
+                       resets = <&prm_core 0>, <&prm_core 1>;
+                       clocks = <&ducati_clkctrl OMAP4_IPU_CLKCTRL 0>;
+                       firmware-name = "omap4-ipu-fw.xem3";
+                       mboxes = <&mailbox &mbox_ipu>;
+                       status = "disabled";
+               };
+
                aes1_target: target-module@4b501000 {
                        compatible = "ti,sysc-omap2", "ti,sysc";
                        reg = <0x4b501080 0x4>,
index cbcdcb4..8ed510a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP443x SoC
  *
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index 2223dc0..2d3e549 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP4460 SoC
  *
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  *
  * 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
index 68ac046..edf1906 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 #include "omap5.dtsi"
 #include <dt-bindings/interrupt-controller/irq.h>
index de8a3d4..02e7633 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP543x SoC CORE thermal
  *
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  * Contact: Eduardo Valentin <eduardo.valentin@ti.com>
  *
  * This file is licensed under the terms of the GNU General Public License
index bc3090f..bf8fa93 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Device Tree Source for OMAP543x SoC GPU thermal
  *
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  * Contact: Eduardo Valentin <eduardo.valentin@ti.com>
  *
  * This file is licensed under the terms of the GNU General Public License
index bafd6ad..25b7fce 100644 (file)
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>,
                                      <0x49038000 0x80>;
-                               clocks = <&abe_clkctrl OMAP5_TIMER5_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&abe_clkctrl OMAP5_TIMER5_CLKCTRL 24>,
+                                        <&dss_syc_gfclk_div>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-dsp;
                                ti,timer-pwm;
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>,
                                      <0x4903a000 0x80>;
-                               clocks = <&abe_clkctrl OMAP5_TIMER6_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&abe_clkctrl OMAP5_TIMER6_CLKCTRL 24>,
+                                        <&dss_syc_gfclk_div>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-dsp;
                                ti,timer-pwm;
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>,
                                      <0x4903c000 0x80>;
-                               clocks = <&abe_clkctrl OMAP5_TIMER7_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&abe_clkctrl OMAP5_TIMER7_CLKCTRL 24>,
+                                        <&dss_syc_gfclk_div>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-dsp;
                        };
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>,
                                      <0x4903e000 0x80>;
-                               clocks = <&abe_clkctrl OMAP5_TIMER8_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&abe_clkctrl OMAP5_TIMER8_CLKCTRL 24>,
+                                        <&dss_syc_gfclk_div>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-dsp;
                                ti,timer-pwm;
index 5217805..f3d3a16 100644 (file)
 
                target-module@20000 {                   /* 0x4a020000, ap 109 08.0 */
                        compatible = "ti,sysc-omap4", "ti,sysc";
-                       ti,hwmods = "usb_otg_ss";
                        reg = <0x20000 0x4>,
                              <0x20010 0x4>;
                        reg-names = "rev", "sysc";
 
                target-module@62000 {                   /* 0x4a062000, ap 11 0e.0 */
                        compatible = "ti,sysc-omap2", "ti,sysc";
-                       ti,hwmods = "usb_tll_hs";
                        reg = <0x62000 0x4>,
                              <0x62010 0x4>,
                              <0x62014 0x4>;
 
                target-module@64000 {                   /* 0x4a064000, ap 71 1e.0 */
                        compatible = "ti,sysc-omap4", "ti,sysc";
-                       ti,hwmods = "usb_host_hs";
                        reg = <0x64000 0x4>,
                              <0x64010 0x4>;
                        reg-names = "rev", "sysc";
                        timer2: timer@0 {
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4per_clkctrl OMAP5_TIMER2_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4per_clkctrl OMAP5_TIMER2_CLKCTRL 24>,
+                                        <&sys_clkin>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
                        };
                };
                        timer3: timer@0 {
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4per_clkctrl OMAP5_TIMER3_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4per_clkctrl OMAP5_TIMER3_CLKCTRL 24>,
+                                        <&sys_clkin>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
                        };
                };
                        timer4: timer@0 {
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4per_clkctrl OMAP5_TIMER4_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4per_clkctrl OMAP5_TIMER4_CLKCTRL 24>,
+                                        <&sys_clkin>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
                        };
                };
                        timer9: timer@0 {
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4per_clkctrl OMAP5_TIMER9_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4per_clkctrl OMAP5_TIMER9_CLKCTRL 24>,
+                                        <&sys_clkin>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-pwm;
                        };
                        timer10: timer@0 {
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4per_clkctrl OMAP5_TIMER10_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4per_clkctrl OMAP5_TIMER10_CLKCTRL 24>,
+                                        <&sys_clkin>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-pwm;
                        };
                        timer11: timer@0 {
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&l4per_clkctrl OMAP5_TIMER11_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&l4per_clkctrl OMAP5_TIMER11_CLKCTRL 24>,
+                                        <&sys_clkin>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-pwm;
                        };
                        timer1: timer@0 {
                                compatible = "ti,omap5430-timer";
                                reg = <0x0 0x80>;
-                               clocks = <&wkupaon_clkctrl OMAP5_TIMER1_CLKCTRL 24>;
-                               clock-names = "fck";
+                               clocks = <&wkupaon_clkctrl OMAP5_TIMER1_CLKCTRL 24>,
+                                        <&sys_clkin>;
+                               clock-names = "fck", "timer_sys_ck";
                                interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
                                ti,timer-alwon;
                        };
index 9441e9a..51d5fca 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 /dts-v1/;
 
                reg = <0 0x80000000 0 0x7f000000>; /* 2032 MB */
        };
 
+       reserved-memory {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               dsp_memory_region: dsp-memory@95000000 {
+                       compatible = "shared-dma-pool";
+                       reg = <0 0x95000000 0 0x800000>;
+                       reusable;
+                       status = "okay";
+               };
+
+               ipu_memory_region: ipu-memory@95800000 {
+                       compatible = "shared-dma-pool";
+                       reg = <0 0x95800000 0 0x3800000>;
+                       reusable;
+                       status = "okay";
+               };
+       };
+
        aliases {
                ethernet = &ethernet;
        };
 &wlcore {
        compatible = "ti,wl1837";
 };
+
+&dsp {
+       status = "okay";
+       memory-region = <&dsp_memory_region>;
+       ti,timers = <&timer5>;
+       ti,watchdog-timers = <&timer6>;
+};
+
+&ipu {
+       status = "okay";
+       memory-region = <&ipu_memory_region>;
+       ti,timers = <&timer3>;
+       ti,watchdog-timers = <&timer9>, <&timer11>;
+};
index fb889c5..5da9cff 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
  *
  * Based on "omap4.dtsi"
  */
@@ -31,6 +31,8 @@
                serial3 = &uart4;
                serial4 = &uart5;
                serial5 = &uart6;
+               rproc0 = &dsp;
+               rproc1 = &ipu;
        };
 
        cpus {
                        };
                };
 
+               dsp: dsp {
+                       compatible = "ti,omap5-dsp";
+                       ti,bootreg = <&scm_conf 0x304 0>;
+                       iommus = <&mmu_dsp>;
+                       resets = <&prm_dsp 0>;
+                       clocks = <&dsp_clkctrl OMAP5_MMU_DSP_CLKCTRL 0>;
+                       firmware-name = "omap5-dsp-fw.xe64T";
+                       mboxes = <&mailbox &mbox_dsp>;
+                       status = "disabled";
+               };
+
+               ipu: ipu@55020000 {
+                       compatible = "ti,omap5-ipu";
+                       reg = <0x55020000 0x10000>;
+                       reg-names = "l2ram";
+                       iommus = <&mmu_ipu>;
+                       resets = <&prm_core 0>, <&prm_core 1>;
+                       clocks = <&ipu_clkctrl OMAP5_MMU_IPU_CLKCTRL 0>;
+                       firmware-name = "omap5-ipu-fw.xem4";
+                       mboxes = <&mailbox &mbox_ipu>;
+                       status = "disabled";
+               };
+
                dmm@4e000000 {
                        compatible = "ti,omap5-dmm";
                        reg = <0x4e000000 0x800>;
diff --git a/arch/arm/boot/dts/qcom-ipq8064-rb3011.dts b/arch/arm/boot/dts/qcom-ipq8064-rb3011.dts
new file mode 100644 (file)
index 0000000..282b89c
--- /dev/null
@@ -0,0 +1,308 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "qcom-ipq8064.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+       model = "MikroTik RB3011UiAS-RM";
+       compatible = "mikrotik,rb3011";
+
+       aliases {
+               serial0 = &gsbi7_serial;
+               ethernet0 = &gmac0;
+               ethernet1 = &gmac3;
+               mdio-gpio0 = &mdio0;
+               mdio-gpio1 = &mdio1;
+       };
+
+       chosen {
+               bootargs = "loglevel=8 console=ttyMSM0,115200";
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory@0 {
+               reg = <0x42000000 0x3e000000>;
+               device_type = "memory";
+       };
+
+       mdio0: mdio@0 {
+               status = "okay";
+               compatible = "virtual,mdio-gpio";
+               gpios = <&qcom_pinmux 1 GPIO_ACTIVE_HIGH>,
+                       <&qcom_pinmux 0 GPIO_ACTIVE_HIGH>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pinctrl-0 = <&mdio0_pins>;
+               pinctrl-names = "default";
+
+               switch0: switch@10 {
+                       compatible = "qca,qca8337";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       dsa,member = <0 0>;
+
+                       pinctrl-0 = <&sw0_reset_pin>;
+                       pinctrl-names = "default";
+
+                       reset-gpios = <&qcom_pinmux 16 GPIO_ACTIVE_LOW>;
+                       reg = <0x10>;
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               switch0cpu: port@0 {
+                                       reg = <0>;
+                                       label = "cpu";
+                                       ethernet = <&gmac0>;
+                                       phy-mode = "rgmii-id";
+                                       fixed-link {
+                                               speed = <1000>;
+                                               full-duplex;
+                                       };
+                               };
+
+                               port@1 {
+                                       reg = <1>;
+                                       label = "sw1";
+                               };
+
+                               port@2 {
+                                       reg = <2>;
+                                       label = "sw2";
+                               };
+
+                               port@3 {
+                                       reg = <3>;
+                                       label = "sw3";
+                               };
+
+                               port@4 {
+                                       reg = <4>;
+                                       label = "sw4";
+                               };
+
+                               port@5 {
+                                       reg = <5>;
+                                       label = "sw5";
+                               };
+                       };
+               };
+       };
+
+       mdio1: mdio@1 {
+               status = "okay";
+               compatible = "virtual,mdio-gpio";
+               gpios = <&qcom_pinmux 11 GPIO_ACTIVE_HIGH>,
+                       <&qcom_pinmux 10 GPIO_ACTIVE_HIGH>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pinctrl-0 = <&mdio1_pins>;
+               pinctrl-names = "default";
+
+               switch1: switch@14 {
+                       compatible = "qca,qca8337";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       dsa,member = <1 0>;
+
+                       pinctrl-0 = <&sw1_reset_pin>;
+                       pinctrl-names = "default";
+
+                       reset-gpios = <&qcom_pinmux 17 GPIO_ACTIVE_LOW>;
+                       reg = <0x10>;
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               switch1cpu: port@0 {
+                                       reg = <0>;
+                                       label = "cpu";
+                                       ethernet = <&gmac3>;
+                                       phy-mode = "sgmii";
+                                       fixed-link {
+                                               speed = <1000>;
+                                               full-duplex;
+                                       };
+                               };
+
+                               port@1 {
+                                       reg = <1>;
+                                       label = "sw6";
+                               };
+
+                               port@2 {
+                                       reg = <2>;
+                                       label = "sw7";
+                               };
+
+                               port@3 {
+                                       reg = <3>;
+                                       label = "sw8";
+                               };
+
+                               port@4 {
+                                       reg = <4>;
+                                       label = "sw9";
+                               };
+
+                               port@5 {
+                                       reg = <5>;
+                                       label = "sw10";
+                               };
+                       };
+               };
+       };
+
+       soc {
+               gsbi5: gsbi@1a200000 {
+                       qcom,mode = <GSBI_PROT_SPI>;
+                       status = "okay";
+
+                       spi4: spi@1a280000 {
+                               status = "okay";
+                               spi-max-frequency = <50000000>;
+
+                               pinctrl-0 = <&spi_pins>;
+                               pinctrl-names = "default";
+
+                               cs-gpios = <&qcom_pinmux 20 GPIO_ACTIVE_HIGH>;
+
+                               norflash: s25fl016k@0 {
+                                       compatible = "jedec,spi-nor";
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+                                       spi-max-frequency = <50000000>;
+                                       reg = <0>;
+
+                                       partition@0 {
+                                               label = "RouterBoot";
+                                               reg = <0x0 0x40000>;
+                                       };
+                               };
+                       };
+               };
+
+               gpio_keys {
+                       compatible = "gpio-keys";
+                       pinctrl-0 = <&buttons_pins>;
+                       pinctrl-names = "default";
+
+                       button@1 {
+                               label = "reset";
+                               linux,code = <KEY_RESTART>;
+                               gpios = <&qcom_pinmux 66 GPIO_ACTIVE_LOW>;
+                               linux,input-type = <1>;
+                               debounce-interval = <60>;
+                       };
+               };
+
+               leds {
+                       compatible = "gpio-leds";
+                       pinctrl-0 = <&leds_pins>;
+                       pinctrl-names = "default";
+
+                       led@7 {
+                               label = "rb3011:green:user";
+                               gpios = <&qcom_pinmux 33 GPIO_ACTIVE_HIGH>;
+                               default-state = "off";
+                       };
+               };
+
+       };
+};
+
+&gmac0 {
+       status = "okay";
+
+       phy-mode = "rgmii";
+       qcom,id = <0>;
+       phy-handle = <&switch0cpu>;
+
+       fixed-link {
+               speed = <1000>;
+               full-duplex;
+       };
+};
+
+&gmac3 {
+       status = "okay";
+
+       phy-mode = "sgmii";
+       qcom,id = <3>;
+       phy-handle = <&switch1cpu>;
+
+       fixed-link {
+               speed = <1000>;
+               full-duplex;
+       };
+};
+
+&gsbi7 {
+       status = "okay";
+       qcom,mode = <GSBI_PROT_I2C_UART>;
+};
+
+&gsbi7_serial {
+       status = "okay";
+};
+
+&qcom_pinmux {
+       buttons_pins: buttons_pins {
+               mux {
+                       pins = "gpio66";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+       };
+
+       leds_pins: leds_pins {
+               mux {
+                       pins = "gpio33";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+       };
+
+       mdio0_pins: mdio0_pins {
+               mux {
+                       pins = "gpio0", "gpio1";
+                       function = "gpio";
+                       drive-strength = <8>;
+                       bias-disable;
+               };
+       };
+
+       mdio1_pins: mdio1_pins {
+               mux {
+                       pins = "gpio10", "gpio11";
+                       function = "gpio";
+                       drive-strength = <8>;
+                       bias-disable;
+               };
+       };
+
+       sw0_reset_pin: sw0_reset_pin {
+               mux {
+                       pins = "gpio16";
+                       drive-strength = <16>;
+                       function = "gpio";
+                       bias-disable;
+                       input-disable;
+               };
+       };
+
+       sw1_reset_pin: sw1_reset_pin {
+               mux {
+                       pins = "gpio17";
+                       drive-strength = <16>;
+                       function = "gpio";
+                       bias-disable;
+                       input-disable;
+               };
+       };
+};
index b912da9..c514814 100644 (file)
                        qcom,controller-type = "pmic-arbiter";
                };
 
+               qfprom: qfprom@700000 {
+                       compatible = "qcom,qfprom";
+                       reg = <0x00700000 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+               };
+
                gcc: clock-controller@900000 {
                        compatible = "qcom,gcc-ipq8064";
                        reg = <0x00900000 0x4000>;
                        perst-gpio = <&qcom_pinmux 63 GPIO_ACTIVE_LOW>;
                };
 
+               nss_common: syscon@03000000 {
+                       compatible = "syscon";
+                       reg = <0x03000000 0x0000FFFF>;
+               };
+
+               qsgmii_csr: syscon@1bb00000 {
+                       compatible = "syscon";
+                       reg = <0x1bb00000 0x000001FF>;
+               };
+
+               stmmac_axi_setup: stmmac-axi-config {
+                       snps,wr_osr_lmt = <7>;
+                       snps,rd_osr_lmt = <7>;
+                       snps,blen = <16 0 0 0 0 0 0>;
+               };
+
+               gmac0: ethernet@37000000 {
+                       device_type = "network";
+                       compatible = "qcom,ipq806x-gmac";
+                       reg = <0x37000000 0x200000>;
+                       interrupts = <GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "macirq";
+
+                       snps,axi-config = <&stmmac_axi_setup>;
+                       snps,pbl = <32>;
+                       snps,aal = <1>;
+
+                       qcom,nss-common = <&nss_common>;
+                       qcom,qsgmii-csr = <&qsgmii_csr>;
+
+                       clocks = <&gcc GMAC_CORE1_CLK>;
+                       clock-names = "stmmaceth";
+
+                       resets = <&gcc GMAC_CORE1_RESET>;
+                       reset-names = "stmmaceth";
+
+                       status = "disabled";
+               };
+
+               gmac1: ethernet@37200000 {
+                       device_type = "network";
+                       compatible = "qcom,ipq806x-gmac";
+                       reg = <0x37200000 0x200000>;
+                       interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "macirq";
+
+                       snps,axi-config = <&stmmac_axi_setup>;
+                       snps,pbl = <32>;
+                       snps,aal = <1>;
+
+                       qcom,nss-common = <&nss_common>;
+                       qcom,qsgmii-csr = <&qsgmii_csr>;
+
+                       clocks = <&gcc GMAC_CORE2_CLK>;
+                       clock-names = "stmmaceth";
+
+                       resets = <&gcc GMAC_CORE2_RESET>;
+                       reset-names = "stmmaceth";
+
+                       status = "disabled";
+               };
+
+               gmac2: ethernet@37400000 {
+                       device_type = "network";
+                       compatible = "qcom,ipq806x-gmac";
+                       reg = <0x37400000 0x200000>;
+                       interrupts = <GIC_SPI 226 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "macirq";
+
+                       snps,axi-config = <&stmmac_axi_setup>;
+                       snps,pbl = <32>;
+                       snps,aal = <1>;
+
+                       qcom,nss-common = <&nss_common>;
+                       qcom,qsgmii-csr = <&qsgmii_csr>;
+
+                       clocks = <&gcc GMAC_CORE3_CLK>;
+                       clock-names = "stmmaceth";
+
+                       resets = <&gcc GMAC_CORE3_RESET>;
+                       reset-names = "stmmaceth";
+
+                       status = "disabled";
+               };
+
+               gmac3: ethernet@37600000 {
+                       device_type = "network";
+                       compatible = "qcom,ipq806x-gmac";
+                       reg = <0x37600000 0x200000>;
+                       interrupts = <GIC_SPI 229 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "macirq";
+
+                       snps,axi-config = <&stmmac_axi_setup>;
+                       snps,pbl = <32>;
+                       snps,aal = <1>;
+
+                       qcom,nss-common = <&nss_common>;
+                       qcom,qsgmii-csr = <&qsgmii_csr>;
+
+                       clocks = <&gcc GMAC_CORE4_CLK>;
+                       clock-names = "stmmaceth";
+
+                       resets = <&gcc GMAC_CORE4_RESET>;
+                       reset-names = "stmmaceth";
+
+                       status = "disabled";
+               };
+
                vsdcc_fixed: vsdcc-regulator {
                        compatible = "regulator-fixed";
                        regulator-name = "SDCC Power";
index 0a567d8..b9b1388 100644 (file)
                        status = "disabled";
                };
 
-               sdhi0: sd@e804e000 {
+               sdhi0: mmc@e804e000 {
                        compatible = "renesas,sdhi-r7s72100";
                        reg = <0xe804e000 0x100>;
                        interrupts = <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>,
                        status = "disabled";
                };
 
-               sdhi1: sd@e804e800 {
+               sdhi1: mmc@e804e800 {
                        compatible = "renesas,sdhi-r7s72100";
                        reg = <0xe804e800 0x100>;
                        interrupts = <GIC_SPI 273 IRQ_TYPE_LEVEL_HIGH>,
index cace438..838920a 100644 (file)
                        status = "disabled";
                };
 
-               sdhi0: sd@e8228000 {
+               sdhi0: mmc@e8228000 {
                        compatible = "renesas,sdhi-r7s9210";
                        reg = <0xe8228000 0x8c0>;
                        interrupts = <GIC_SPI 322 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };
 
-               sdhi1: sd@e822a000 {
+               sdhi1: mmc@e822a000 {
                        compatible = "renesas,sdhi-r7s9210";
                        reg = <0xe822a000 0x8c0>;
                        interrupts = <GIC_SPI 324 IRQ_TYPE_LEVEL_HIGH>;
index a3ba722..b92e725 100644 (file)
                status = "disabled";
        };
 
-       sdhi0: sd@ee100000 {
+       sdhi0: mmc@ee100000 {
                compatible = "renesas,sdhi-r8a73a4";
                reg = <0 0xee100000 0 0x100>;
                interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
                status = "disabled";
        };
 
-       sdhi1: sd@ee120000 {
+       sdhi1: mmc@ee120000 {
                compatible = "renesas,sdhi-r8a73a4";
                reg = <0 0xee120000 0 0x100>;
                interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
                status = "disabled";
        };
 
-       sdhi2: sd@ee140000 {
+       sdhi2: mmc@ee140000 {
                compatible = "renesas,sdhi-r8a73a4";
                reg = <0 0xee140000 0 0x100>;
                interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
index 0588d44..8048303 100644 (file)
                status = "disabled";
        };
 
-       sdhi0: sd@e6850000 {
+       sdhi0: mmc@e6850000 {
                compatible = "renesas,sdhi-r8a7740";
                reg = <0xe6850000 0x100>;
                interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
                status = "disabled";
        };
 
-       sdhi1: sd@e6860000 {
+       sdhi1: mmc@e6860000 {
                compatible = "renesas,sdhi-r8a7740";
                reg = <0xe6860000 0x100>;
                interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
                status = "disabled";
        };
 
-       sdhi2: sd@e6870000 {
+       sdhi2: mmc@e6870000 {
                compatible = "renesas,sdhi-r8a7740";
                reg = <0xe6870000 0x100>;
                interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
diff --git a/arch/arm/boot/dts/r8a7742-iwg21d-q7-dbcm-ca.dts b/arch/arm/boot/dts/r8a7742-iwg21d-q7-dbcm-ca.dts
new file mode 100644 (file)
index 0000000..1479ced
--- /dev/null
@@ -0,0 +1,97 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the iWave-RZ/G1H Qseven board development
+ * platform with camera daughter board
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+
+/dts-v1/;
+#include "r8a7742-iwg21d-q7.dts"
+
+/ {
+       model = "iWave Systems RZ/G1H Qseven development platform with camera add-on";
+       compatible = "iwave,g21d", "iwave,g21m", "renesas,r8a7742";
+
+       aliases {
+               serial0 = &scif0;
+               serial1 = &scif1;
+               serial3 = &scifb1;
+               serial5 = &hscif0;
+               ethernet1 = &ether;
+       };
+};
+
+&avb {
+       /* Pins shared with VIN0, keep status disabled */
+       status = "disabled";
+};
+
+&ether {
+       pinctrl-0 = <&ether_pins>;
+       pinctrl-names = "default";
+
+       phy-handle = <&phy1>;
+       renesas,ether-link-active-low;
+       status = "okay";
+
+       phy1: ethernet-phy@1 {
+               reg = <1>;
+               micrel,led-mode = <1>;
+       };
+};
+
+&hscif0 {
+       pinctrl-0 = <&hscif0_pins>;
+       pinctrl-names = "default";
+       uart-has-rtscts;
+       status = "okay";
+};
+
+&pfc {
+       ether_pins: ether {
+               groups = "eth_mdio", "eth_rmii";
+               function = "eth";
+       };
+
+       hscif0_pins: hscif0 {
+               groups = "hscif0_data", "hscif0_ctrl";
+               function = "hscif0";
+       };
+
+       scif0_pins: scif0 {
+               groups = "scif0_data";
+               function = "scif0";
+       };
+
+       scif1_pins: scif1 {
+               groups = "scif1_data";
+               function = "scif1";
+       };
+
+       scifb1_pins: scifb1 {
+               groups = "scifb1_data";
+               function = "scifb1";
+       };
+};
+
+&scif0 {
+       pinctrl-0 = <&scif0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&scif1 {
+       pinctrl-0 = <&scif1_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&scifb1 {
+       pinctrl-0 = <&scifb1_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       rts-gpios = <&gpio4 21 GPIO_ACTIVE_LOW>;
+       cts-gpios = <&gpio4 17 GPIO_ACTIVE_LOW>;
+};
index 1f5c35c..e90aaf1 100644 (file)
@@ -5,6 +5,29 @@
  * Copyright (C) 2020 Renesas Electronics Corp.
  */
 
+/*
+ * SSI-SGTL5000
+ *
+ * This command is required when Playback/Capture
+ *
+ *      amixer set "DVC Out" 100%
+ *      amixer set "DVC In" 100%
+ *
+ * You can use Mute
+ *
+ *      amixer set "DVC Out Mute" on
+ *      amixer set "DVC In Mute" on
+ *
+ * You can use Volume Ramp
+ *
+ *      amixer set "DVC Out Ramp Up Rate"   "0.125 dB/64 steps"
+ *      amixer set "DVC Out Ramp Down Rate" "0.125 dB/512 steps"
+ *      amixer set "DVC Out Ramp" on
+ *      aplay xxx.wav &
+ *      amixer set "DVC Out"  80%  // Volume Down
+ *      amixer set "DVC Out" 100%  // Volume Up
+ */
+
 /dts-v1/;
 #include "r8a7742-iwg21m.dtsi"
 
 
        aliases {
                serial2 = &scifa2;
+               serial4 = &scifb2;
+               ethernet0 = &avb;
        };
 
        chosen {
                bootargs = "ignore_loglevel root=/dev/mmcblk0p1 rw rootwait";
                stdout-path = "serial2:115200n8";
        };
+
+       audio_clock: audio_clock {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <26000000>;
+       };
+
+       reg_1p5v: 1p5v {
+               compatible = "regulator-fixed";
+               regulator-name = "1P5V";
+               regulator-min-microvolt = <1500000>;
+               regulator-max-microvolt = <1500000>;
+               regulator-always-on;
+       };
+
+       rsnd_sgtl5000: sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,bitclock-master = <&sndcodec>;
+               simple-audio-card,frame-master = <&sndcodec>;
+
+               sndcpu: simple-audio-card,cpu {
+                       sound-dai = <&rcar_sound>;
+               };
+
+               sndcodec: simple-audio-card,codec {
+                       sound-dai = <&sgtl5000>;
+               };
+       };
+
+       vcc_sdhi2: regulator-vcc-sdhi2 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "SDHI2 Vcc";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpio = <&gpio1 27 GPIO_ACTIVE_LOW>;
+       };
+
+       vccq_sdhi2: regulator-vccq-sdhi2 {
+               compatible = "regulator-gpio";
+
+               regulator-name = "SDHI2 VccQ";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
+               gpios-states = <1>;
+               states = <3300000 1>, <1800000 0>;
+       };
+};
+
+&avb {
+       pinctrl-0 = <&avb_pins>;
+       pinctrl-names = "default";
+
+       phy-handle = <&phy3>;
+       phy-mode = "gmii";
+       renesas,no-ether-link;
+       status = "okay";
+
+       phy3: ethernet-phy@3 {
+               reg = <3>;
+               micrel,led-mode = <1>;
+       };
+};
+
+&i2c2 {
+       pinctrl-0 = <&i2c2_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+       clock-frequency = <400000>;
+
+       sgtl5000: codec@a {
+               compatible = "fsl,sgtl5000";
+               #sound-dai-cells = <0>;
+               reg = <0x0a>;
+               clocks = <&audio_clock>;
+               VDDA-supply = <&reg_3p3v>;
+               VDDIO-supply = <&reg_3p3v>;
+               VDDD-supply = <&reg_1p5v>;
+       };
 };
 
 &pfc {
+       avb_pins: avb {
+               groups = "avb_mdio", "avb_gmii";
+               function = "avb";
+       };
+
+       i2c2_pins: i2c2 {
+               groups = "i2c2_b";
+               function = "i2c2";
+       };
+
        scifa2_pins: scifa2 {
                groups = "scifa2_data_c";
                function = "scifa2";
        };
+
+       scifb2_pins: scifb2 {
+               groups = "scifb2_data", "scifb2_ctrl";
+               function = "scifb2";
+       };
+
+       sdhi2_pins: sd2 {
+               groups = "sdhi2_data4", "sdhi2_ctrl";
+               function = "sdhi2";
+               power-source = <3300>;
+       };
+
+       sdhi2_pins_uhs: sd2_uhs {
+               groups = "sdhi2_data4", "sdhi2_ctrl";
+               function = "sdhi2";
+               power-source = <1800>;
+       };
+
+       sound_pins: sound {
+               groups = "ssi34_ctrl", "ssi3_data", "ssi4_data";
+               function = "ssi";
+       };
+};
+
+&rcar_sound {
+       pinctrl-0 = <&sound_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       /* Single DAI */
+       #sound-dai-cells = <0>;
+
+       rcar_sound,dai {
+               dai0 {
+                       playback = <&ssi4 &src4 &dvc1>;
+                       capture = <&ssi3 &src3 &dvc0>;
+               };
+       };
+};
+
+&rwdt {
+       timeout-sec = <60>;
+       status = "okay";
 };
 
 &scifa2 {
 
        status = "okay";
 };
+
+&scifb2 {
+       pinctrl-0 = <&scifb2_pins>;
+       pinctrl-names = "default";
+
+       uart-has-rtscts;
+       status = "okay";
+};
+
+&sdhi2 {
+       pinctrl-0 = <&sdhi2_pins>;
+       pinctrl-1 = <&sdhi2_pins_uhs>;
+       pinctrl-names = "default", "state_uhs";
+
+       vmmc-supply = <&vcc_sdhi2>;
+       vqmmc-supply = <&vccq_sdhi2>;
+       cd-gpios = <&gpio3 22 GPIO_ACTIVE_LOW>;
+       wp-gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>;
+       sd-uhs-sdr50;
+       status = "okay";
+};
+
+&ssi4 {
+       shared-pin;
+};
index 305d808..9743b42 100644 (file)
        #address-cells = <2>;
        #size-cells = <2>;
 
+       /*
+        * 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>;
+       };
+
        cpus {
                #address-cells = <1>;
                #size-cells = <0>;
+               enable-method = "renesas,apmu";
 
                cpu0: cpu@0 {
                        device_type = "cpu";
                #size-cells = <2>;
                ranges;
 
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a7742-wdt",
+                                    "renesas,rcar-gen2-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
+               };
+
                gpio0: gpio@e6050000 {
                        compatible = "renesas,gpio-r8a7742",
                                     "renesas,rcar-gen2-gpio";
                        #reset-cells = <1>;
                };
 
+               apmu@e6151000 {
+                       compatible = "renesas,r8a7742-apmu", "renesas,apmu";
+                       reg = <0 0xe6151000 0 0x188>;
+                       cpus = <&cpu4 &cpu5 &cpu6 &cpu7>;
+               };
+
+               apmu@e6152000 {
+                       compatible = "renesas,r8a7742-apmu", "renesas,apmu";
+                       reg = <0 0xe6152000 0 0x188>;
+                       cpus = <&cpu0 &cpu1 &cpu2 &cpu3>;
+               };
+
                rst: reset-controller@e6160000 {
                        compatible = "renesas,r8a7742-rst";
                        reg = <0 0xe6160000 0 0x0100>;
                        resets = <&cpg 407>;
                };
 
+               thermal: thermal@e61f0000 {
+                       compatible = "renesas,thermal-r8a7742",
+                                    "renesas,rcar-gen2-thermal";
+                       reg = <0 0xe61f0000 0 0x10>, <0 0xe61f0100 0 0x38>;
+                       interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 522>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 522>;
+                       #thermal-sensor-cells = <0>;
+               };
+
                icram0: sram@e63a0000 {
                        compatible = "mmio-sram";
                        reg = <0 0xe63a0000 0 0x12000>;
                        ranges = <0 0 0xe6300000 0x40000>;
                };
 
+               i2c0: i2c@e6508000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7742",
+                                    "renesas,rcar-gen2-i2c";
+                       reg = <0 0xe6508000 0 0x40>;
+                       interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 931>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 931>;
+                       i2c-scl-internal-delay-ns = <110>;
+                       status = "disabled";
+               };
+
+               i2c1: i2c@e6518000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7742",
+                                    "renesas,rcar-gen2-i2c";
+                       reg = <0 0xe6518000 0 0x40>;
+                       interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 930>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 930>;
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c2: i2c@e6530000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7742",
+                                    "renesas,rcar-gen2-i2c";
+                       reg = <0 0xe6530000 0 0x40>;
+                       interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 929>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 929>;
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c3: i2c@e6540000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7742",
+                                    "renesas,rcar-gen2-i2c";
+                       reg = <0 0xe6540000 0 0x40>;
+                       interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 928>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 928>;
+                       i2c-scl-internal-delay-ns = <110>;
+                       status = "disabled";
+               };
+
+               iic0: i2c@e6500000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a7742",
+                                    "renesas,rcar-gen2-iic",
+                                    "renesas,rmobile-iic";
+                       reg = <0 0xe6500000 0 0x425>;
+                       interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 318>;
+                       dmas = <&dmac0 0x61>, <&dmac0 0x62>,
+                              <&dmac1 0x61>, <&dmac1 0x62>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 318>;
+                       status = "disabled";
+               };
+
+               iic1: i2c@e6510000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a7742",
+                                    "renesas,rcar-gen2-iic",
+                                    "renesas,rmobile-iic";
+                       reg = <0 0xe6510000 0 0x425>;
+                       interrupts = <GIC_SPI 175 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 323>;
+                       dmas = <&dmac0 0x65>, <&dmac0 0x66>,
+                              <&dmac1 0x65>, <&dmac1 0x66>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 323>;
+                       status = "disabled";
+               };
+
+               iic2: i2c@e6520000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a7742",
+                                    "renesas,rcar-gen2-iic",
+                                    "renesas,rmobile-iic";
+                       reg = <0 0xe6520000 0 0x425>;
+                       interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 300>;
+                       dmas = <&dmac0 0x69>, <&dmac0 0x6a>,
+                              <&dmac1 0x69>, <&dmac1 0x6a>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 300>;
+                       status = "disabled";
+               };
+
+               iic3: i2c@e60b0000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a7742";
+                       reg = <0 0xe60b0000 0 0x425>;
+                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 926>;
+                       dmas = <&dmac0 0x77>, <&dmac0 0x78>,
+                              <&dmac1 0x77>, <&dmac1 0x78>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 926>;
+                       status = "disabled";
+               };
+
+               hsusb: usb@e6590000 {
+                       compatible = "renesas,usbhs-r8a7742",
+                                    "renesas,rcar-gen2-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";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 704>;
+                       renesas,buswait = <4>;
+                       phys = <&usb0 1>;
+                       phy-names = "usb";
+                       status = "disabled";
+               };
+
+               usbphy: usb-phy@e6590100 {
+                       compatible = "renesas,usb-phy-r8a7742",
+                                    "renesas,rcar-gen2-usb-phy";
+                       reg = <0 0xe6590100 0 0x100>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       clocks = <&cpg CPG_MOD 704>;
+                       clock-names = "usbhs";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 704>;
+                       status = "disabled";
+
+                       usb0: usb-channel@0 {
+                               reg = <0>;
+                               #phy-cells = <1>;
+                       };
+                       usb2: usb-channel@2 {
+                               reg = <2>;
+                               #phy-cells = <1>;
+                       };
+               };
+
+               usb_dmac0: dma-controller@e65a0000 {
+                       compatible = "renesas,r8a7742-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 R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 330>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac1: dma-controller@e65b0000 {
+                       compatible = "renesas,r8a7742-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 R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 331>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
                dmac0: dma-controller@e6700000 {
                        compatible = "renesas,dmac-r8a7742",
                                     "renesas,rcar-dmac";
                        dma-channels = <15>;
                };
 
+               avb: ethernet@e6800000 {
+                       compatible = "renesas,etheravb-r8a7742",
+                                    "renesas,etheravb-rcar-gen2";
+                       reg = <0 0xe6800000 0 0x800>, <0 0xee0e8000 0 0x4000>;
+                       interrupts = <GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 812>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 812>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
                scifa0: serial@e6c40000 {
                        compatible = "renesas,scifa-r8a7742",
                                     "renesas,rcar-gen2-scifa", "renesas,scifa";
                        status = "disabled";
                };
 
+               msiof0: spi@e6e20000 {
+                       compatible = "renesas,msiof-r8a7742",
+                                    "renesas,rcar-gen2-msiof";
+                       reg = <0 0xe6e20000 0 0x0064>;
+                       interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 0>;
+                       dmas = <&dmac0 0x51>, <&dmac0 0x52>,
+                              <&dmac1 0x51>, <&dmac1 0x52>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 0>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof1: spi@e6e10000 {
+                       compatible = "renesas,msiof-r8a7742",
+                                    "renesas,rcar-gen2-msiof";
+                       reg = <0 0xe6e10000 0 0x0064>;
+                       interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 208>;
+                       dmas = <&dmac0 0x55>, <&dmac0 0x56>,
+                              <&dmac1 0x55>, <&dmac1 0x56>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 208>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof2: spi@e6e00000 {
+                       compatible = "renesas,msiof-r8a7742",
+                                    "renesas,rcar-gen2-msiof";
+                       reg = <0 0xe6e00000 0 0x0064>;
+                       interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 205>;
+                       dmas = <&dmac0 0x41>, <&dmac0 0x42>,
+                              <&dmac1 0x41>, <&dmac1 0x42>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 205>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof3: spi@e6c90000 {
+                       compatible = "renesas,msiof-r8a7742",
+                                    "renesas,rcar-gen2-msiof";
+                       reg = <0 0xe6c90000 0 0x0064>;
+                       interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 215>;
+                       dmas = <&dmac0 0x45>, <&dmac0 0x46>,
+                              <&dmac1 0x45>, <&dmac1 0x46>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 215>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               rcar_sound: sound@ec500000 {
+                       /*
+                        * #sound-dai-cells is required
+                        *
+                        * Single DAI : #sound-dai-cells = <0>;         <&rcar_sound>;
+                        * Multi  DAI : #sound-dai-cells = <1>;         <&rcar_sound N>;
+                        */
+                       compatible = "renesas,rcar_sound-r8a7742",
+                                    "renesas,rcar_sound-gen2";
+                       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*/
+                       reg-names = "scu", "adg", "ssiu", "ssi", "audmapp";
+
+                       clocks = <&cpg CPG_MOD 1005>,
+                                <&cpg CPG_MOD 1006>, <&cpg CPG_MOD 1007>,
+                                <&cpg CPG_MOD 1008>, <&cpg CPG_MOD 1009>,
+                                <&cpg CPG_MOD 1010>, <&cpg CPG_MOD 1011>,
+                                <&cpg CPG_MOD 1012>, <&cpg CPG_MOD 1013>,
+                                <&cpg CPG_MOD 1014>, <&cpg CPG_MOD 1015>,
+                                <&cpg CPG_MOD 1022>, <&cpg CPG_MOD 1023>,
+                                <&cpg CPG_MOD 1024>, <&cpg CPG_MOD 1025>,
+                                <&cpg CPG_MOD 1026>, <&cpg CPG_MOD 1027>,
+                                <&cpg CPG_MOD 1028>, <&cpg CPG_MOD 1029>,
+                                <&cpg CPG_MOD 1030>, <&cpg CPG_MOD 1031>,
+                                <&cpg CPG_MOD 1021>, <&cpg CPG_MOD 1020>,
+                                <&cpg CPG_MOD 1021>, <&cpg CPG_MOD 1020>,
+                                <&cpg CPG_MOD 1019>, <&cpg CPG_MOD 1018>,
+                                <&audio_clk_a>, <&audio_clk_b>, <&audio_clk_c>,
+                                <&cpg CPG_CORE R8A7742_CLK_M2>;
+                       clock-names = "ssi-all",
+                                     "ssi.9", "ssi.8", "ssi.7", "ssi.6",
+                                     "ssi.5", "ssi.4", "ssi.3", "ssi.2",
+                                     "ssi.1", "ssi.0",
+                                     "src.9", "src.8", "src.7", "src.6",
+                                     "src.5", "src.4", "src.3", "src.2",
+                                     "src.1", "src.0",
+                                     "ctu.0", "ctu.1",
+                                     "mix.0", "mix.1",
+                                     "dvc.0", "dvc.1",
+                                     "clk_a", "clk_b", "clk_c", "clk_i";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 1005>,
+                                <&cpg 1006>, <&cpg 1007>,
+                                <&cpg 1008>, <&cpg 1009>,
+                                <&cpg 1010>, <&cpg 1011>,
+                                <&cpg 1012>, <&cpg 1013>,
+                                <&cpg 1014>, <&cpg 1015>;
+                       reset-names = "ssi-all",
+                                     "ssi.9", "ssi.8", "ssi.7", "ssi.6",
+                                     "ssi.5", "ssi.4", "ssi.3", "ssi.2",
+                                     "ssi.1", "ssi.0";
+
+                       status = "disabled";
+
+                       rcar_sound,dvc {
+                               dvc0: dvc-0 {
+                                       dmas = <&audma1 0xbc>;
+                                       dma-names = "tx";
+                               };
+                               dvc1: dvc-1 {
+                                       dmas = <&audma1 0xbe>;
+                                       dma-names = "tx";
+                               };
+                       };
+
+                       rcar_sound,mix {
+                               mix0: mix-0 { };
+                               mix1: mix-1 { };
+                       };
+
+                       rcar_sound,ctu {
+                               ctu00: ctu-0 { };
+                               ctu01: ctu-1 { };
+                               ctu02: ctu-2 { };
+                               ctu03: ctu-3 { };
+                               ctu10: ctu-4 { };
+                               ctu11: ctu-5 { };
+                               ctu12: ctu-6 { };
+                               ctu13: ctu-7 { };
+                       };
+
+                       rcar_sound,src {
+                               src0: src-0 {
+                                       interrupts = <GIC_SPI 352 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x85>, <&audma1 0x9a>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src1: src-1 {
+                                       interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x87>, <&audma1 0x9c>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src2: src-2 {
+                                       interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x89>, <&audma1 0x9e>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src3: src-3 {
+                                       interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x8b>, <&audma1 0xa0>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src4: src-4 {
+                                       interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x8d>, <&audma1 0xb0>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src5: src-5 {
+                                       interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x8f>, <&audma1 0xb2>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src6: src-6 {
+                                       interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x91>, <&audma1 0xb4>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src7: src-7 {
+                                       interrupts = <GIC_SPI 359 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x93>, <&audma1 0xb6>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src8: src-8 {
+                                       interrupts = <GIC_SPI 360 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x95>, <&audma1 0xb8>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src9: src-9 {
+                                       interrupts = <GIC_SPI 361 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x97>, <&audma1 0xba>;
+                                       dma-names = "rx", "tx";
+                               };
+                       };
+
+                       rcar_sound,ssi {
+                               ssi0: ssi-0 {
+                                       interrupts = <GIC_SPI 370 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x01>, <&audma1 0x02>,
+                                              <&audma0 0x15>, <&audma1 0x16>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi1: ssi-1 {
+                                        interrupts = <GIC_SPI 371 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x03>, <&audma1 0x04>,
+                                              <&audma0 0x49>, <&audma1 0x4a>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi2: ssi-2 {
+                                       interrupts = <GIC_SPI 372 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x05>, <&audma1 0x06>,
+                                              <&audma0 0x63>, <&audma1 0x64>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi3: ssi-3 {
+                                       interrupts = <GIC_SPI 373 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x07>, <&audma1 0x08>,
+                                              <&audma0 0x6f>, <&audma1 0x70>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi4: ssi-4 {
+                                       interrupts = <GIC_SPI 374 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x09>, <&audma1 0x0a>,
+                                              <&audma0 0x71>, <&audma1 0x72>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi5: ssi-5 {
+                                       interrupts = <GIC_SPI 375 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x0b>, <&audma1 0x0c>,
+                                              <&audma0 0x73>, <&audma1 0x74>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi6: ssi-6 {
+                                       interrupts = <GIC_SPI 376 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x0d>, <&audma1 0x0e>,
+                                              <&audma0 0x75>, <&audma1 0x76>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi7: ssi-7 {
+                                       interrupts = <GIC_SPI 377 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x0f>, <&audma1 0x10>,
+                                              <&audma0 0x79>, <&audma1 0x7a>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi8: ssi-8 {
+                                       interrupts = <GIC_SPI 378 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x11>, <&audma1 0x12>,
+                                              <&audma0 0x7b>, <&audma1 0x7c>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi9: ssi-9 {
+                                       interrupts = <GIC_SPI 379 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x13>, <&audma1 0x14>,
+                                              <&audma0 0x7d>, <&audma1 0x7e>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                       };
+               };
+
+               audma0: dma-controller@ec700000 {
+                       compatible = "renesas,dmac-r8a7742",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xec700000 0 0x10000>;
+                       interrupts = <GIC_SPI 346 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>;
+                       interrupt-names = "error",
+                                         "ch0", "ch1", "ch2", "ch3",
+                                         "ch4", "ch5", "ch6", "ch7",
+                                         "ch8", "ch9", "ch10", "ch11",
+                                         "ch12";
+                       clocks = <&cpg CPG_MOD 502>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 502>;
+                       #dma-cells = <1>;
+                       dma-channels = <13>;
+               };
+
+               audma1: dma-controller@ec720000 {
+                       compatible = "renesas,dmac-r8a7742",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xec720000 0 0x10000>;
+                       interrupts = <GIC_SPI 347 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>,
+                                    <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>;
+                       interrupt-names = "error",
+                                         "ch0", "ch1", "ch2", "ch3",
+                                         "ch4", "ch5", "ch6", "ch7",
+                                         "ch8", "ch9", "ch10", "ch11",
+                                         "ch12";
+                       clocks = <&cpg CPG_MOD 501>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 501>;
+                       #dma-cells = <1>;
+                       dma-channels = <13>;
+               };
+
+               xhci: usb@ee000000 {
+                       compatible = "renesas,xhci-r8a7742",
+                                    "renesas,rcar-gen2-xhci";
+                       reg = <0 0xee000000 0 0xc00>;
+                       interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 328>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 328>;
+                       phys = <&usb2 1>;
+                       phy-names = "usb";
+                       status = "disabled";
+               };
+
+               pci0: pci@ee090000 {
+                       compatible = "renesas,pci-r8a7742",
+                                    "renesas,pci-rcar-gen2";
+                       device_type = "pci";
+                       reg = <0 0xee090000 0 0xc00>,
+                             <0 0xee080000 0 0x1100>;
+                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 703>;
+                       status = "disabled";
+
+                       bus-range = <0 0>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       #interrupt-cells = <1>;
+                       ranges = <0x02000000 0 0xee080000 0 0xee080000 0 0x00010000>;
+                       interrupt-map-mask = <0xf800 0 0 0x7>;
+                       interrupt-map = <0x0000 0 0 1 &gic GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x0800 0 0 1 &gic GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x1000 0 0 2 &gic GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+
+                       usb@1,0 {
+                               reg = <0x800 0 0 0 0>;
+                               phys = <&usb0 0>;
+                               phy-names = "usb";
+                       };
+
+                       usb@2,0 {
+                               reg = <0x1000 0 0 0 0>;
+                               phys = <&usb0 0>;
+                               phy-names = "usb";
+                       };
+               };
+
+               pci1: pci@ee0b0000 {
+                       compatible = "renesas,pci-r8a7742",
+                                    "renesas,pci-rcar-gen2";
+                       device_type = "pci";
+                       reg = <0 0xee0b0000 0 0xc00>,
+                             <0 0xee0a0000 0 0x1100>;
+                       interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 703>;
+                       status = "disabled";
+
+                       bus-range = <1 1>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       #interrupt-cells = <1>;
+                       ranges = <0x02000000 0 0xee0a0000 0 0xee0a0000 0 0x00010000>;
+                       interrupt-map-mask = <0xf800 0 0 0x7>;
+                       interrupt-map = <0x0000 0 0 1 &gic GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x0800 0 0 1 &gic GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x1000 0 0 2 &gic GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               pci2: pci@ee0d0000 {
+                       compatible = "renesas,pci-r8a7742",
+                                    "renesas,pci-rcar-gen2";
+                       device_type = "pci";
+                       clocks = <&cpg CPG_MOD 703>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 703>;
+                       reg = <0 0xee0d0000 0 0xc00>,
+                             <0 0xee0c0000 0 0x1100>;
+                       interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
+                       status = "disabled";
+
+                       bus-range = <2 2>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       #interrupt-cells = <1>;
+                       ranges = <0x02000000 0 0xee0c0000 0 0xee0c0000 0 0x00010000>;
+                       interrupt-map-mask = <0xf800 0 0 0x7>;
+                       interrupt-map = <0x0000 0 0 1 &gic GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x0800 0 0 1 &gic GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x1000 0 0 2 &gic GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
+
+                       usb@1,0 {
+                               reg = <0x20800 0 0 0 0>;
+                               phys = <&usb2 0>;
+                               phy-names = "usb";
+                       };
+
+                       usb@2,0 {
+                               reg = <0x21000 0 0 0 0>;
+                               phys = <&usb2 0>;
+                               phy-names = "usb";
+                       };
+               };
+
+               sdhi0: mmc@ee100000 {
+                       compatible = "renesas,sdhi-r8a7742",
+                                    "renesas,rcar-gen2-sdhi";
+                       reg = <0 0xee100000 0 0x328>;
+                       interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 314>;
+                       dmas = <&dmac0 0xcd>, <&dmac0 0xce>,
+                              <&dmac1 0xcd>, <&dmac1 0xce>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       max-frequency = <195000000>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 314>;
+                       status = "disabled";
+               };
+
+               sdhi1: mmc@ee120000 {
+                       compatible = "renesas,sdhi-r8a7742",
+                                    "renesas,rcar-gen2-sdhi";
+                       reg = <0 0xee120000 0 0x328>;
+                       interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 313>;
+                       dmas = <&dmac0 0xc9>, <&dmac0 0xca>,
+                              <&dmac1 0xc9>, <&dmac1 0xca>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       max-frequency = <195000000>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 313>;
+                       status = "disabled";
+               };
+
+               sdhi2: mmc@ee140000 {
+                       compatible = "renesas,sdhi-r8a7742",
+                                    "renesas,rcar-gen2-sdhi";
+                       reg = <0 0xee140000 0 0x100>;
+                       interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 312>;
+                       dmas = <&dmac0 0xc1>, <&dmac0 0xc2>,
+                              <&dmac1 0xc1>, <&dmac1 0xc2>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       max-frequency = <97500000>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 312>;
+                       status = "disabled";
+               };
+
+               sdhi3: mmc@ee160000 {
+                       compatible = "renesas,sdhi-r8a7742",
+                                    "renesas,rcar-gen2-sdhi";
+                       reg = <0 0xee160000 0 0x100>;
+                       interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 311>;
+                       dmas = <&dmac0 0xd3>, <&dmac0 0xd4>,
+                              <&dmac1 0xd3>, <&dmac1 0xd4>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       max-frequency = <97500000>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 311>;
+                       status = "disabled";
+               };
+
+               mmcif0: mmc@ee200000 {
+                       compatible = "renesas,mmcif-r8a7742",
+                                    "renesas,sh-mmcif";
+                       reg = <0 0xee200000 0 0x80>;
+                       interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 315>;
+                       dmas = <&dmac0 0xd1>, <&dmac0 0xd2>,
+                              <&dmac1 0xd1>, <&dmac1 0xd2>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 315>;
+                       reg-io-width = <4>;
+                       status = "disabled";
+                       max-frequency = <97500000>;
+               };
+
                mmcif1: mmc@ee220000 {
                        compatible = "renesas,mmcif-r8a7742",
                                     "renesas,sh-mmcif";
                        max-frequency = <97500000>;
                };
 
+               sata0: sata@ee300000 {
+                       compatible = "renesas,sata-r8a7742",
+                                    "renesas,rcar-gen2-sata";
+                       reg = <0 0xee300000 0 0x200000>;
+                       interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 815>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 815>;
+                       status = "disabled";
+               };
+
+               sata1: sata@ee500000 {
+                       compatible = "renesas,sata-r8a7742",
+                                    "renesas,rcar-gen2-sata";
+                       reg = <0 0xee500000 0 0x200000>;
+                       interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 814>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 814>;
+                       status = "disabled";
+               };
+
+               ether: ethernet@ee700000 {
+                       compatible = "renesas,ether-r8a7742",
+                                    "renesas,rcar-gen2-ether";
+                       reg = <0 0xee700000 0 0x400>;
+                       interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 813>;
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 813>;
+                       phy-mode = "rmii";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
                gic: interrupt-controller@f1001000 {
                        compatible = "arm,gic-400";
                        #interrupt-cells = <3>;
                        compatible = "renesas,prr";
                        reg = <0 0xff000044 0 4>;
                };
+
+               cmt0: timer@ffca0000 {
+                       compatible = "renesas,r8a7742-cmt0",
+                                    "renesas,rcar-gen2-cmt0";
+                       reg = <0 0xffca0000 0 0x1004>;
+                       interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 124>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 124>;
+                       status = "disabled";
+               };
+
+               cmt1: timer@e6130000 {
+                       compatible = "renesas,r8a7742-cmt1",
+                                    "renesas,rcar-gen2-cmt1";
+                       reg = <0 0xe6130000 0 0x1004>;
+                       interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 329>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A7742_PD_ALWAYS_ON>;
+                       resets = <&cpg 329>;
+                       status = "disabled";
+               };
+       };
+
+       thermal-zones {
+               cpu_thermal: cpu-thermal {
+                       polling-delay-passive = <0>;
+                       polling-delay = <0>;
+
+                       thermal-sensors = <&thermal>;
+
+                       trips {
+                               cpu-crit {
+                                       temperature = <95000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+                       };
+                       cooling-maps {
+                       };
+               };
        };
 
        timer {
index fff1237..896916a 100644 (file)
                        };
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a7743",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee100000 0 0x328>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee140000 {
+               sdhi1: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a7743",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee140000 0 0x100>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee160000 {
+               sdhi2: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a7743",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee160000 0 0x100>;
index 5050ac1..6b56aa2 100644 (file)
                        };
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a7744",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee100000 0 0x328>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee140000 {
+               sdhi1: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a7744",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee140000 0 0x100>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee160000 {
+               sdhi2: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a7744",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee160000 0 0x100>;
index b0d1fc2..636248f 100644 (file)
                        };
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a7745",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee100000 0 0x328>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee140000 {
+               sdhi1: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a7745",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee140000 0 0x100>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee160000 {
+               sdhi2: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a7745",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee160000 0 0x100>;
index f551531..6baa126 100644 (file)
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a77470",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee100000 0 0x328>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee300000 {
+               sdhi1: mmc@ee300000 {
                        compatible = "renesas,sdhi-mmc-r8a77470";
                        reg = <0 0xee300000 0 0x2000>;
                        interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee160000 {
+               sdhi2: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a77470",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee160000 0 0x328>;
index 593c6df..1612b00 100644 (file)
@@ -78,7 +78,8 @@
                        <0xfe780010 4>,
                        <0xfe780024 4>,
                        <0xfe780044 4>,
-                       <0xfe780064 4>;
+                       <0xfe780064 4>,
+                       <0xfe780000 4>;
                interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
                status = "disabled";
        };
 
-       sdhi0: sd@ffe4c000 {
+       sdhi0: mmc@ffe4c000 {
                compatible = "renesas,sdhi-r8a7778",
                             "renesas,rcar-gen1-sdhi";
                reg = <0xffe4c000 0x100>;
                status = "disabled";
        };
 
-       sdhi1: sd@ffe4d000 {
+       sdhi1: mmc@ffe4d000 {
                compatible = "renesas,sdhi-r8a7778",
                             "renesas,rcar-gen1-sdhi";
                reg = <0xffe4d000 0x100>;
                status = "disabled";
        };
 
-       sdhi2: sd@ffe4f000 {
+       sdhi2: mmc@ffe4f000 {
                compatible = "renesas,sdhi-r8a7778",
                             "renesas,rcar-gen1-sdhi";
                reg = <0xffe4f000 0x100>;
index c0999e2..c5634da 100644 (file)
                status = "disabled";
        };
 
-       sdhi0: sd@ffe4c000 {
+       sdhi0: mmc@ffe4c000 {
                compatible = "renesas,sdhi-r8a7779",
                             "renesas,rcar-gen1-sdhi";
                reg = <0xffe4c000 0x100>;
                status = "disabled";
        };
 
-       sdhi1: sd@ffe4d000 {
+       sdhi1: mmc@ffe4d000 {
                compatible = "renesas,sdhi-r8a7779",
                             "renesas,rcar-gen1-sdhi";
                reg = <0xffe4d000 0x100>;
                status = "disabled";
        };
 
-       sdhi2: sd@ffe4e000 {
+       sdhi2: mmc@ffe4e000 {
                compatible = "renesas,sdhi-r8a7779",
                             "renesas,rcar-gen1-sdhi";
                reg = <0xffe4e000 0x100>;
                status = "disabled";
        };
 
-       sdhi3: sd@ffe4f000 {
+       sdhi3: mmc@ffe4f000 {
                compatible = "renesas,sdhi-r8a7779",
                             "renesas,rcar-gen1-sdhi";
                reg = <0xffe4f000 0x100>;
index bfe778c..09a152b 100644 (file)
                composite-in@20 {
                        compatible = "adi,adv7180";
                        reg = <0x20>;
-                       remote = <&vin1>;
 
                        port {
                                adv7180: endpoint {
index 166d556..769ba2a 100644 (file)
                        };
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a7790",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee100000 0 0x328>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee120000 {
+               sdhi1: mmc@ee120000 {
                        compatible = "renesas,sdhi-r8a7790",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee120000 0 0x328>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee140000 {
+               sdhi2: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a7790",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee140000 0 0x100>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
+               sdhi3: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a7790",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee160000 0 0x100>;
index fc74c6c..f603cba 100644 (file)
                composite-in@20 {
                        compatible = "adi,adv7180";
                        reg = <0x20>;
-                       remote = <&vin1>;
 
                        port {
                                adv7180: endpoint {
index 114bf1c..c6d563f 100644 (file)
                composite-in@20 {
                        compatible = "adi,adv7180";
                        reg = <0x20>;
-                       remote = <&vin0>;
 
                        port {
                                adv7180: endpoint {
index 225676f..499cf38 100644 (file)
                        };
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a7791",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee100000 0 0x328>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee140000 {
+               sdhi1: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a7791",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee140000 0 0x100>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee160000 {
+               sdhi2: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a7791",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee160000 0 0x100>;
index 4627eef..597848a 100644 (file)
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a7792",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee100000 0 0x328>;
index 79baf06..abf487e 100644 (file)
                composite-in@20 {
                        compatible = "adi,adv7180cp";
                        reg = <0x20>;
-                       remote = <&vin1>;
 
-                       port {
+                       ports {
                                #address-cells = <1>;
                                #size-cells = <0>;
 
                        interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
                        default-input = <0>;
 
-                       port {
+                       ports {
                                #address-cells = <1>;
                                #size-cells = <0>;
 
index 1b62a7e..6d50709 100644 (file)
                        dma-channels = <13>;
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a7793",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee100000 0 0x328>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee140000 {
+               sdhi1: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a7793",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee140000 0 0x100>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee160000 {
+               sdhi2: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a7793",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee160000 0 0x100>;
index 935935c..3f1cc5b 100644 (file)
                composite-in@20 {
                        compatible = "adi,adv7180";
                        reg = <0x20>;
-                       remote = <&vin0>;
 
                        port {
                                adv7180: endpoint {
index b8b0941..677596f 100644 (file)
                composite-in@20 {
                        compatible = "adi,adv7180";
                        reg = <0x20>;
-                       remote = <&vin0>;
 
                        port {
                                adv7180: endpoint {
index 8d7f879..5f34039 100644 (file)
                        };
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a7794",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee100000 0 0x328>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee140000 {
+               sdhi1: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a7794",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee140000 0 0x100>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee160000 {
+               sdhi2: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a7794",
                                     "renesas,rcar-gen2-sdhi";
                        reg = <0 0xee160000 0 0x100>;
index 4c1ab49..ee59cc8 100644 (file)
                };
 
                gic: interrupt-controller@44101000 {
-                       compatible = "arm,cortex-a7-gic", "arm,gic-400";
+                       compatible = "arm,gic-400", "arm,cortex-a7-gic";
                        interrupt-controller;
                        #interrupt-cells = <3>;
                        reg = <0x44101000 0x1000>, /* Distributer */
index d9a0c9a..0935670 100644 (file)
@@ -67,6 +67,7 @@
                                     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                        arm,pl330-broken-no-flushp;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC2>;
                        clock-names = "apb_pclk";
                };
index b0fd92b..48e6e8d 100644 (file)
                        interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC>;
                        clock-names = "apb_pclk";
                };
                resets = <&cru SRST_TSADC>;
                reset-names = "tsadc-apb";
                pinctrl-names = "init", "default", "sleep";
-               pinctrl-0 = <&otp_gpio>;
+               pinctrl-0 = <&otp_pin>;
                pinctrl-1 = <&otp_out>;
-               pinctrl-2 = <&otp_gpio>;
+               pinctrl-2 = <&otp_pin>;
                #thermal-sensor-cells = <0>;
                rockchip,hw-tshut-temp = <95000>;
                status = "disabled";
                };
 
                tsadc {
-                       otp_gpio: otp-gpio {
+                       otp_pin: otp-pin {
                                rockchip,pins = <0 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
 
diff --git a/arch/arm/boot/dts/rk3288-rock-pi-n8.dts b/arch/arm/boot/dts/rk3288-rock-pi-n8.dts
new file mode 100644 (file)
index 0000000..b195930
--- /dev/null
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd
+ * Copyright (c) 2019 Vamrs Limited
+ * Copyright (c) 2019 Amarula Solutions(India)
+ */
+
+/dts-v1/;
+#include "rk3288.dtsi"
+#include <arm/rockchip-radxa-dalang-carrier.dtsi>
+#include "rk3288-vmarc-som.dtsi"
+
+/ {
+       model = "Radxa ROCK Pi N8";
+       compatible = "radxa,rockpi-n8", "vamrs,rk3288-vmarc-som",
+                    "rockchip,rk3288";
+};
index 171ba61..af77ab2 100644 (file)
        };
 };
 
+&sdio0 {
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       btmrvl: btmrvl@2 {
+               compatible = "marvell,sd8897-bt";
+               reg = <2>;
+               interrupt-parent = <&gpio4>;
+               interrupts = <RK_PD7 IRQ_TYPE_LEVEL_LOW>;
+               marvell,wakeup-pin = /bits/ 16 <13>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&bt_host_wake_l>;
+       };
+};
+
 &sdmmc {
        disable-wp;
        pinctrl-names = "default";
-       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_pin
                        &sdmmc_bus4>;
 };
 
index 66f00d2..2c916c5 100644 (file)
 &sdmmc {
        disable-wp;
        pinctrl-names = "default";
-       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_pin
                        &sdmmc_bus4>;
 };
 
index 27fbc07..fa695a8 100644 (file)
@@ -18,8 +18,8 @@
 };
 
 &sdmmc {
-       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
-                       &sdmmc_wp_gpio &sdmmc_bus4>;
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_pin
+                       &sdmmc_wp_pin &sdmmc_bus4>;
        wp-gpios = <&gpio7 10 GPIO_ACTIVE_HIGH>;
 
        /delete-property/ disable-wp;
@@ -27,7 +27,7 @@
 
 &pinctrl {
        sdmmc {
-               sdmmc_wp_gpio: sdmmc-wp-gpio {
+               sdmmc_wp_pin: sdmmc-wp-pin {
                        rockchip,pins = <7 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
index 383fad1..f8b69e0 100644 (file)
 &sdmmc {
        disable-wp;
        pinctrl-names = "default";
-       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_pin
                        &sdmmc_bus4>;
 };
 
index 71e6629..4e9fdb0 100644 (file)
        };
 
        sdmmc {
-               sdmmc_wp_gpio: sdmmc-wp-gpio {
+               sdmmc_wp_pin: sdmmc-wp-pin {
                        rockchip,pins = <7 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
 
 &sdmmc {
        pinctrl-names = "default";
-       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
-                    &sdmmc_wp_gpio &sdmmc_bus4>;
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_pin
+                    &sdmmc_wp_pin &sdmmc_bus4>;
        wp-gpios = <&gpio7 RK_PB2 GPIO_ACTIVE_HIGH>;
 };
 
index fe950f9..27fb06c 100644 (file)
@@ -41,7 +41,7 @@
                };
 
                /* This is where we actually hook up CD */
-               sdmmc_cd_gpio: sdmmc-cd-gpio {
+               sdmmc_cd_pin: sdmmc-cd-pin {
                        rockchip,pins = <7 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
index e354c61..4a3ea93 100644 (file)
@@ -54,7 +54,7 @@
 &sdmmc {
        disable-wp;
        pinctrl-names = "default";
-       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_pin
                        &sdmmc_bus4>;
 };
 
diff --git a/arch/arm/boot/dts/rk3288-vmarc-som.dtsi b/arch/arm/boot/dts/rk3288-vmarc-som.dtsi
new file mode 100644 (file)
index 0000000..4a373f5
--- /dev/null
@@ -0,0 +1,322 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd
+ * Copyright (c) 2019 Vamrs Limited
+ * Copyright (c) 2019 Amarula Solutions(India)
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/pinctrl/rockchip.h>
+
+/ {
+       compatible = "vamrs,rk3288-vmarc-som", "rockchip,rk3288";
+
+       vccio_flash: vccio-flash-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vccio_flash";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               vin-supply = <&vcc_io>;
+       };
+};
+
+&emmc {
+       bus-width = <8>;
+       cap-mmc-highspeed;
+       disable-wp;
+       non-removable;
+       pinctrl-names = "default";
+       pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_pwr &emmc_bus8>;
+       vmmc-supply = <&vcc_io>;
+       vqmmc-supply = <&vccio_flash>;
+       status = "okay";
+};
+
+&gmac {
+       assigned-clocks = <&cru SCLK_MAC>;
+       phy-supply = <&vcc_io>;
+       snps,reset-gpio = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
+};
+
+&hdmi {
+       ddc-i2c-bus = <&i2c5>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&hdmi_cec_c0>;
+};
+
+&i2c0 {
+       clock-frequency = <400000>;
+       status = "okay";
+
+       rk808: pmic@1b {
+               compatible = "rockchip,rk808";
+               reg = <0x1b>;
+               interrupt-parent = <&gpio0>;
+               interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pmic_int &global_pwroff>;
+               rockchip,system-power-controller;
+               wakeup-source;
+               #clock-cells = <1>;
+               clock-output-names = "rk808-clkout1", "rk808-clkout2";
+
+               vcc1-supply = <&vcc5v0_sys>;
+               vcc2-supply = <&vcc5v0_sys>;
+               vcc3-supply = <&vcc5v0_sys>;
+               vcc4-supply = <&vcc5v0_sys>;
+               vcc6-supply = <&vcc5v0_sys>;
+               vcc7-supply = <&vcc5v0_sys>;
+               vcc8-supply = <&vcc_io>;
+               vcc9-supply = <&vcc_io>;
+               vcc10-supply = <&vcc5v0_sys>;
+               vcc11-supply = <&vcc5v0_sys>;
+               vcc12-supply = <&vcc_io>;
+               vddio-supply = <&vcc_io>;
+
+               regulators {
+                       vdd_cpu: DCDC_REG1 {
+                               regulator-name = "vdd_arm";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <750000>;
+                               regulator-max-microvolt = <1400000>;
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vdd_gpu: DCDC_REG2 {
+                               regulator-name = "vdd_gpu";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <850000>;
+                               regulator-max-microvolt = <1250000>;
+                               regulator-ramp-delay = <6000>;
+                               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_io: DCDC_REG4 {
+                               regulator-name = "vcc_io";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3300000>;
+                               };
+                       };
+
+                       vcc_tp: LDO_REG1 {
+                               regulator-name = "vcc_tp";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcca_codec: LDO_REG2 {
+                               regulator-name = "vcca_codec";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3300000>;
+                               };
+                       };
+
+                       vdd_10: LDO_REG3 {
+                               regulator-name = "vdd_10";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1000000>;
+                               regulator-max-microvolt = <1000000>;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1000000>;
+                               };
+                       };
+
+                       vcc_wl: LDO_REG4 {
+                               regulator-name = "vcc_wl";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                               };
+                       };
+
+                       vccio_sd: LDO_REG5 {
+                               regulator-name = "vccio_sd";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3300000>;
+                               };
+                       };
+
+                       vdd10_lcd: LDO_REG6 {
+                               regulator-name = "vdd10_lcd";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1000000>;
+                               regulator-max-microvolt = <1000000>;
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_18: LDO_REG7 {
+                               regulator-name = "vcc_18";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc18_lcd: LDO_REG8 {
+                               regulator-name = "vcc18_lcd";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_sd: SWITCH_REG1 {
+                               regulator-name = "vcc_sd";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+
+                       vcc_lcd: SWITCH_REG2 {
+                               regulator-name = "vcc_lcd";
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                               };
+                       };
+               };
+       };
+};
+
+&i2c5 {
+       status = "okay";
+};
+
+&io_domains {
+       bb-supply = <&vcc_io>;
+       flash0-supply = <&vccio_flash>;
+       gpio1830-supply = <&vcc_18>;
+       gpio30-supply = <&vcc_io>;
+       sdcard-supply = <&vccio_sd>;
+       status = "okay";
+};
+
+&pinctrl {
+       pcfg_pull_none_drv_8ma: pcfg-pull-none-drv-8ma {
+               drive-strength = <8>;
+       };
+
+       pcfg_pull_up_drv_8ma: pcfg-pull-up-drv-8ma {
+               bias-pull-up;
+               drive-strength = <8>;
+       };
+
+       pmic {
+               pmic_int: pmic-int {
+                       rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       sdmmc {
+               sdmmc_bus4: sdmmc-bus4 {
+                       rockchip,pins =
+                               <6 RK_PC0 1 &pcfg_pull_up_drv_8ma>,
+                               <6 RK_PC1 1 &pcfg_pull_up_drv_8ma>,
+                               <6 RK_PC2 1 &pcfg_pull_up_drv_8ma>,
+                               <6 RK_PC3 1 &pcfg_pull_up_drv_8ma>;
+               };
+
+               sdmmc_clk: sdmmc-clk {
+                       rockchip,pins = <6 RK_PC4 1 &pcfg_pull_none_drv_8ma>;
+               };
+
+               sdmmc_cmd: sdmmc-cmd {
+                       rockchip,pins = <6 RK_PC5 1 &pcfg_pull_up_drv_8ma>;
+               };
+       };
+
+       vbus_host {
+               usb1_en_oc: usb1-en-oc {
+                       rockchip,pins = <0 RK_PC1 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       vbus_typec {
+               usb0_en_oc: usb0-en-oc {
+                       rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+};
+
+&usbphy {
+       status = "okay";
+};
+
+&usb_host0_ehci {
+       status = "okay";
+};
+
+&usb_host0_ohci {
+       status = "okay";
+};
+
+&usb_host1 {
+       status = "okay";
+};
+
+&usb_otg {
+       status = "okay";
+};
+
+&vbus_host {
+       enable-active-high;
+       gpio = <&gpio0 RK_PC1 GPIO_ACTIVE_HIGH>; /* USB1_EN_OC# */
+};
+
+&vbus_typec {
+       enable-active-high;
+       gpio = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; /* USB0_EN_OC# */
+};
index 385dd59..1a20854 100644 (file)
@@ -99,8 +99,6 @@
                pinctrl-0 = <&otg_vbus_drv>;
                regulator-min-microvolt = <5000000>;
                regulator-max-microvolt = <5000000>;
-               regulator-always-on;
-               regulator-boot-on;
                vin-supply = <&vsus_5v>;
        };
 
 };
 
 &usb_otg {
+       vbus-supply = <&vusb1_5v>;
        status = "okay";
 };
 
index 2e1edd8..68d5a58 100644 (file)
                                     <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                        arm,pl330-broken-no-flushp;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC2>;
                        clock-names = "apb_pclk";
                };
                                     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                        arm,pl330-broken-no-flushp;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC1>;
                        clock-names = "apb_pclk";
                        status = "disabled";
                                     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                        arm,pl330-broken-no-flushp;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC1>;
                        clock-names = "apb_pclk";
                };
                resets = <&cru SRST_TSADC>;
                reset-names = "tsadc-apb";
                pinctrl-names = "init", "default", "sleep";
-               pinctrl-0 = <&otp_gpio>;
+               pinctrl-0 = <&otp_pin>;
                pinctrl-1 = <&otp_out>;
-               pinctrl-2 = <&otp_gpio>;
+               pinctrl-2 = <&otp_pin>;
                #thermal-sensor-cells = <1>;
                rockchip,grf = <&grf>;
                rockchip,hw-tshut-temp = <95000>;
                status = "disabled";
        };
 
-       /* NOTE: ohci@ff520000 doesn't actually work on hardware */
+       /* NOTE: doesn't work on RK3288, but was fixed on RK3288W */
+       usb_host0_ohci: usb@ff520000 {
+               compatible = "generic-ohci";
+               reg = <0x0 0xff520000 0x0 0x100>;
+               interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&cru HCLK_USBHOST0>;
+               phys = <&usbphy1>;
+               phy-names = "usb";
+               status = "disabled";
+       };
 
        usb_host1: usb@ff540000 {
                compatible = "rockchip,rk3288-usb", "rockchip,rk3066-usb",
                };
 
                tsadc {
-                       otp_gpio: otp-gpio {
+                       otp_pin: otp-pin {
                                rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
 
index d929b60..859a747 100644 (file)
@@ -45,6 +45,7 @@
                                     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                        arm,pl330-broken-no-flushp;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMA1>;
                        clock-names = "apb_pclk";
                };
@@ -56,6 +57,7 @@
                                     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                        arm,pl330-broken-no-flushp;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMA1>;
                        clock-names = "apb_pclk";
                        status = "disabled";
@@ -68,6 +70,7 @@
                                     <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                        arm,pl330-broken-no-flushp;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMA2>;
                        clock-names = "apb_pclk";
                };
index df3712a..26b53ea 100644 (file)
@@ -8,36 +8,66 @@
 #include <dt-bindings/pwm/pwm.h>
 
 / {
-       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 {
-       status = "okay";
+       vcc12v_dcin: vcc12v-dcin-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc12v_dcin";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <12000000>;
+               regulator-max-microvolt = <12000000>;
+       };
+
+       vcc5v0_sys: vcc5v0-sys-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc5v0_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               vin-supply = <&vcc12v_dcin>;
+       };
+
+       vbus_host: vbus-host {
+               compatible = "regulator-fixed";
+               pinctrl-names = "default";
+               pinctrl-0 = <&usb1_en_oc>;
+               regulator-name = "vbus_host"; /* HOST-5V */
+               regulator-always-on;
+               vin-supply = <&vcc5v0_sys>;
+       };
+
+       vbus_typec: vbus-typec {
+               compatible = "regulator-fixed";
+               pinctrl-names = "default";
+               pinctrl-0 = <&usb0_en_oc>;
+               regulator-name = "vbus_typec";
+               regulator-always-on;
+               vin-supply = <&vcc5v0_sys>;
+       };
 };
 
-&i2c1 {
+&gmac {
+       assigned-clock-parents = <&clkin_gmac>;
+       clock_in_out = "input";
+       phy-mode = "rgmii";
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgmii_pins>;
+       snps,reset-active-low;
+       snps,reset-delays-us = <0 10000 50000>;
+       tx_delay = <0x28>;
+       rx_delay = <0x11>;
        status = "okay";
-       i2c-scl-rising-time-ns = <140>;
-       i2c-scl-falling-time-ns = <30>;
 };
 
-&i2c2 {
+&hdmi {
        status = "okay";
-       clock-frequency = <400000>;
-
-       hym8563: hym8563@51 {
-               compatible = "haoyu,hym8563";
-               reg = <0x51>;
-               #clock-cells = <0>;
-               clock-frequency = <32768>;
-               clock-output-names = "hym8563";
-               pinctrl-names = "default";
-               pinctrl-0 = <&hym8563_int>;
-               interrupt-parent = <&gpio4>;
-               interrupts = <30 IRQ_TYPE_LEVEL_LOW>;
-       };
 };
 
 &pwm0 {
        bus-width = <4>;
        cap-mmc-highspeed;
        cap-sd-highspeed;
-       cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
        disable-wp;
        vqmmc-supply = <&vccio_sd>;
-       max-frequency = <150000000>;
        pinctrl-names = "default";
        pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
        status = "okay";
        status = "okay";
 };
 
-&pinctrl {
-       hym8563 {
-               hym8563_int: hym8563-int {
-                       rockchip,pins =
-                               <4 RK_PD6 0 &pcfg_pull_up>;
-               };
-       };
+&vopb {
+       status = "okay";
+};
+
+&vopb_mmu {
+       status = "okay";
+};
+
+&vopl {
+       status = "okay";
+};
+
+&vopl_mmu {
+       status = "okay";
 };
index f9cfe2c..a1a08cb 100644 (file)
@@ -97,6 +97,7 @@
                        interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                        arm,pl330-broken-no-flushp;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC>;
                        clock-names = "apb_pclk";
                };
                clocks = <&cru SCLK_TSADC>, <&cru PCLK_TSADC>;
                clock-names = "tsadc", "apb_pclk";
                pinctrl-names = "init", "default", "sleep";
-               pinctrl-0 = <&otp_gpio>;
+               pinctrl-0 = <&otp_pin>;
                pinctrl-1 = <&otp_out>;
-               pinctrl-2 = <&otp_gpio>;
+               pinctrl-2 = <&otp_pin>;
                resets = <&cru SRST_TSADC>;
                reset-names = "tsadc-apb";
                rockchip,hw-tshut-temp = <120000>;
                                                <0 RK_PC6 3 &pcfg_pull_none>;
                        };
 
-                       i2c2m1_gpio: i2c2m1-gpio {
+                       i2c2m1_pins: i2c2m1-pins {
                                rockchip,pins = <0 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>,
                                                <0 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
                                                <1 RK_PD4 2 &pcfg_pull_none>;
                        };
 
-                       i2c2m05v_gpio: i2c2m05v-gpio {
+                       i2c2m05v_pins: i2c2m05v-pins {
                                rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>,
                                                <1 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
                                rockchip,pins = <0 RK_PB7 1 &pcfg_pull_none>;
                        };
 
-                       otp_gpio: otp-gpio {
+                       otp_pin: otp-pin {
                                rockchip,pins = <0 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
                };
                                rockchip,pins = <3 RK_PA3 1 &pcfg_pull_none>;
                        };
 
-                       uart0_rts_gpio: uart0-rts-gpio {
+                       uart0_rts_pin: uart0-rts-pin {
                                rockchip,pins = <3 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
                };
index cf85802..822207f 100644 (file)
                pinctrl-0 = <&touchkey_vdd_ena>;
        };
 
+       gp2a_vled: regulator-fixed-2 {
+               compatible = "regulator-fixed";
+               regulator-name = "VLED";
+               enable-active-high;
+               gpio = <&gpj1 4 GPIO_ACTIVE_HIGH>;
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&gp2a_power>;
+       };
+
        wifi_pwrseq: wifi-pwrseq {
                compatible = "mmc-pwrseq-simple";
                reset-gpios = <&gpg1 2 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&accel_i2c_pins>;
 
-               status = "disabled";
+               accelerometer@38 {
+                       compatible = "bosch,bma023";
+                       reg = <0x38>;
 
-               /* bma023 accelerometer, no mainline binding */
+                       vdd-supply = <&ldo9_reg>;
+                       vddio-supply = <&ldo9_reg>;
+               };
        };
 
        i2c_pmic: i2c-gpio-2 {
                pinctrl-names = "default";
                pinctrl-0 = <&fg_i2c_pins>;
 
-               fuelgauge@36 {
+               fg: fuelgauge@36 {
                        compatible = "maxim,max17040";
-                       interrupt-parent = <&vic0>;
-                       interrupts = <7>;
                        reg = <0x36>;
                };
        };
                pinctrl-names = "default";
                pinctrl-0 = <&prox_i2c_pins>;
 
-               status = "disabled";
+               light-sensor@44 {
+                       compatible = "sharp,gp2ap002a00f";
+                       reg = <0x44>;
+                       interrupt-parent = <&gph0>;
+                       interrupts = <2 IRQ_TYPE_EDGE_FALLING>;
+                       vdd-supply = <&gp2a_vled>;
+                       vio-supply = <&gp2a_vled>;
+                       io-channels = <&gp2a_shunt>;
+                       io-channel-names = "alsout";
+                       sharp,proximity-far-hysteresis = /bits/ 8 <0x40>;
+                       sharp,proximity-close-hysteresis = /bits/ 8 <0x20>;
 
-               /* Sharp gp2a prox/light sensor, incomplete mainline binding */
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&gp2a_irq>;
+               };
        };
 
        i2c_magnetometer: i2c-gpio-7 {
        vdd-supply = <&ldo4_reg>;
 
        status = "okay";
+
+       gp2a_shunt: current-sense-shunt {
+               compatible = "current-sense-shunt";
+               io-channels = <&adc 9>;
+               shunt-resistor-micro-ohms = <47000000>; /* 47 ohms */
+               #io-channel-cells = <0>;
+               io-channel-ranges;
+       };
 };
 
 &fimd {
 };
 
 &pinctrl0 {
+       bt_reset: bt-reset {
+               samsung,pins = "gpb-3";
+               samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+               samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>;
+               samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
+       };
+
        wlan_bt_en: wlan-bt-en {
                samsung,pins = "gpb-5";
                samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
                samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>;
        };
 
+       bt_wake: bt-wake {
+               samsung,pins = "gpg3-4";
+               samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+               samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>;
+       };
+
+       gp2a_irq: gp2a-irq {
+               samsung,pins = "gph0-2";
+               samsung,pin-function = <EXYNOS_PIN_FUNC_F>;
+               samsung,pin-pud = <S3C64XX_PIN_PULL_DOWN>;
+               samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
+       };
+
        pmic_dvs_pins: pmic-dvs-pins {
                samsung,pins = "gph0-3", "gph0-4", "gph0-5";
                samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
                samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
        };
 
+       gp2a_power: gp2a-power {
+               samsung,pins = "gpj1-4";
+               samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+               samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>;
+               samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
+       };
+
        touchkey_i2c_pins: touchkey-i2c-pins {
                samsung,pins = "gpj3-0", "gpj3-1";
                samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>;
 };
 
 &uart0 {
+       assigned-clocks = <&clocks MOUT_UART0>, <&clocks SCLK_UART0>;
+       assigned-clock-rates = <0>, <111166667>;
+       assigned-clock-parents = <&clocks MOUT_MPLL>;
+
        status = "okay";
 
        bluetooth {
-               compatible = "brcm,bcm43438-bt";
-               max-speed = <115200>;
+               compatible = "brcm,bcm4329-bt";
+               max-speed = <3000000>;
                pinctrl-names = "default";
-               pinctrl-0 = <&uart0_data &uart0_fctl &bt_host_wake>;
+               pinctrl-0 = <&uart0_data &uart0_fctl &bt_host_wake
+                            &bt_reset &bt_wake>;
                shutdown-gpios = <&gpb 3 GPIO_ACTIVE_HIGH>;
                device-wakeup-gpios = <&gpg3 4 GPIO_ACTIVE_HIGH>;
-               host-wakeup-gpios = <&gph2 5 GPIO_ACTIVE_HIGH>;
+               interrupt-parent = <&gph2>;
+               interrupts = <5 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-names = "host-wake";
        };
 };
 
index 5e1b818..65eed01 100644 (file)
        };
 };
 
+&fg {
+       compatible = "maxim,max77836-battery";
+
+       interrupt-parent = <&gph3>;
+       interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&fg_irq>;
+};
+
 &pinctrl0 {
        pinctrl-names = "default";
        pinctrl-0 = <&sleep_cfg>;
 
+       fg_irq: fg-irq {
+               samsung,pins = "gph3-3";
+               samsung,pin-function = <EXYNOS_PIN_FUNC_F>;
+               samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>;
+               samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
+       };
+
        /* Based on vendor kernel v2.6.35.7 */
        sleep_cfg: sleep-cfg {
                PIN_SLP(gpa0-0, PREV, NONE);
index 5e8b662..b8c5172 100644 (file)
        gph3: gph3 {
                gpio-controller;
                #gpio-cells = <2>;
+
+               interrupt-controller;
                #interrupt-cells = <2>;
        };
 
index 01fd063..a4d6312 100644 (file)
                status = "disabled";
        };
 
-       sdhi0: sd@ee100000 {
+       sdhi0: mmc@ee100000 {
                compatible = "renesas,sdhi-sh73a0";
                reg = <0xee100000 0x100>;
                interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
        };
 
        /* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
-       sdhi1: sd@ee120000 {
+       sdhi1: mmc@ee120000 {
                compatible = "renesas,sdhi-sh73a0";
                reg = <0xee120000 0x100>;
                interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>,
                status = "disabled";
        };
 
-       sdhi2: sd@ee140000 {
+       sdhi2: mmc@ee140000 {
                compatible = "renesas,sdhi-sh73a0";
                reg = <0xee140000 0x100>;
                interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>,
                compatible = "renesas,fsi2-sh73a0", "renesas,sh_fsi2";
                reg = <0xec230000 0x400>;
                interrupts = <GIC_SPI 146 0x4>;
+               clocks = <&mstp3_clks SH73A0_CLK_FSI>;
                power-domains = <&pd_a4mp>;
                status = "disabled";
        };
index c2b54af..a5fde36 100644 (file)
                        num-cs = <4>;
                        clocks = <&spi_m_clk>;
                        resets = <&rst SPIM0_RESET>;
+                       reset-names = "spi";
                        status = "disabled";
                };
 
                        num-cs = <4>;
                        clocks = <&spi_m_clk>;
                        resets = <&rst SPIM1_RESET>;
+                       reset-names = "spi";
                        status = "disabled";
                };
 
index 3b8571b..fe58268 100644 (file)
                        /*32bit_access;*/
                        clocks = <&spi_m_clk>;
                        resets = <&rst SPIM0_RESET>;
+                       reset-names = "spi";
                        status = "disabled";
                };
 
                        rx-dma-channel = <&pdma 17>;
                        clocks = <&spi_m_clk>;
                        resets = <&rst SPIM1_RESET>;
+                       reset-names = "spi";
                        status = "disabled";
                };
 
index 0efbecc..7edebe2 100644 (file)
                compatible = "ltc2977";
                reg = <0x5c>;
        };
+
+       temp@4c {
+               compatible = "maxim,max1619";
+               reg = <0x4c>;
+       };
 };
 
 &uart1 {
index 3cd6ee6..aab5719 100644 (file)
                                        compatible = "stericsson,ab8500-sysctrl";
                                };
 
-                               ab8500-pwm {
+                               ab8500-pwm-1 {
+                                       compatible = "stericsson,ab8500-pwm";
+                                       clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
+                                       clock-names = "intclk";
+                               };
+
+                               ab8500-pwm-2 {
+                                       compatible = "stericsson,ab8500-pwm";
+                                       clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
+                                       clock-names = "intclk";
+                               };
+
+                               ab8500-pwm-3 {
                                        compatible = "stericsson,ab8500-pwm";
                                        clocks = <&ab8500_clock AB8500_SYSCLK_INT>;
                                        clock-names = "intclk";
index 3e10da3..05fd544 100644 (file)
                        reg = <0x80150000 0x2000>;
                };
 
-               L2: l2-cache {
+               L2: cache-controller {
                        compatible = "arm,pl310-cache";
                        reg = <0xa0412000 0x1000>;
                        interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
index f78b4ea..4f38aee 100644 (file)
@@ -15,7 +15,7 @@
                    <0x08000000 0x04000000>;
        };
 
-       L2: l2-cache {
+       L2: cache-controller {
                compatible = "arm,l210-cache";
                reg = <0x10210000 0x1000>;
                interrupt-parent = <&vica>;
index 5b499c0..1e26b71 100644 (file)
                stdout-path = &serial2;
        };
 
+       i2c-gpio-0 {
+               compatible = "i2c-gpio";
+               sda-gpios = <&gpio2 14 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+               scl-gpios = <&gpio2 13 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&i2c_gpio_0_default>;
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               touchkey@20 {
+                       compatible = "coreriver,tc360-touchkey";
+                       reg = <0x20>;
+                       vdd-supply = <&ab8500_ldo_aux4_reg>;
+                       vcc-supply = <&ab8500_ldo_aux6_reg>;
+
+                       interrupt-parent = <&gpio2>;
+                       interrupts = <15 IRQ_TYPE_EDGE_FALLING>;
+
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&touchkey_default>;
+                       linux,keycodes = <KEY_MENU KEY_BACK>;
+               };
+       };
+
        i2c-gpio-1 {
                compatible = "i2c-gpio";
                sda-gpios = <&gpio4 24 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
                };
        };
 
+       i2c-gpio-0 {
+               i2c_gpio_0_default: i2c_gpio_0 {
+                       golden_cfg1 {
+                               pins = "GPIO77",        /* TOUCHKEY_SCL */
+                                      "GPIO78";        /* TOUCHKEY_SDA */
+                               ste,config = <&gpio_in_nopull>;
+                       };
+               };
+       };
+
        i2c-gpio-1 {
                i2c_gpio_1_default: i2c_gpio_1 {
                        golden_cfg1 {
                };
        };
 
+       touchkey {
+               touchkey_default: touchkey_default {
+                       golden_cfg1 {
+                               pins = "GPIO79";        /* TOUCHKEY_INT */
+                               ste,config = <&gpio_in_nopull>;
+                       };
+               };
+       };
+
        sdi0 {
                sd_level_translator_default: sd_level_translator_default {
                        golden_cfg1 {
index 8edef16..d6f6ac0 100644 (file)
                                interrupt-parent = <&gpio7>;
                                interrupts = <0 IRQ_TYPE_EDGE_RISING>;
 
-                               mount-matrix = "0", "1", "0",
-                                              "-1", "0", "0",
+                               mount-matrix = "0", "-1", "0",
+                                             "1", "0", "0",
                                               "0", "0", "1";
                                vdd-supply = <&ab8500_ldo_aux1_reg>;
                                vddio-supply = <&ab8500_ldo_aux8_reg>;
index c27fa35..67e7648 100644 (file)
 
        leds {
                compatible = "gpio-leds";
-               green {
+               led-green {
                        gpios = <&gpiog 6 1>;
                        linux,default-trigger = "heartbeat";
                };
-               orange {
+               led-orange {
                        gpios = <&gpiog 7 1>;
                };
-               red {
+               led-red {
                        gpios = <&gpiog 10 1>;
                };
-               blue {
+               led-blue {
                        gpios = <&gpiog 12 1>;
                };
        };
 
 &ltdc {
        status = "okay";
-       pinctrl-0 = <&ltdc_pins>;
+       pinctrl-0 = <&ltdc_pins_a>;
        pinctrl-names = "default";
 
        port {
index 4ea3f98..ca8c192 100644 (file)
 
        leds {
                compatible = "gpio-leds";
-               green {
+               led-green {
                        gpios = <&gpiof 10 1>;
                        linux,default-trigger = "heartbeat";
                };
-               orange {
+               led-orange {
                        gpios = <&stmfx_pinctrl 17 1>;
                };
-               red {
+               led-red {
                        gpios = <&gpiob 7 1>;
                };
-               blue {
+               led-blue {
                        gpios = <&stmfx_pinctrl 19 1>;
                };
        };
index 392fa14..4774163 100644 (file)
                                };
                        };
 
-                       pwm1_pins: pwm-1 {
+                       pwm1_pins: pwm1-0 {
                                pins {
                                        pinmux = <STM32_PINMUX('A', 8, AF1)>, /* TIM1_CH1 */
                                                 <STM32_PINMUX('B', 13, AF1)>, /* TIM1_CH1N */
                                };
                        };
 
-                       pwm3_pins: pwm-3 {
+                       pwm3_pins: pwm3-0 {
                                pins {
                                        pinmux = <STM32_PINMUX('B', 4, AF2)>, /* TIM3_CH1 */
                                                 <STM32_PINMUX('B', 5, AF2)>; /* TIM3_CH2 */
                                };
                        };
 
-                       ltdc_pins: ltdc-0 {
+                       ltdc_pins_a: ltdc-0 {
                                pins {
                                        pinmux = <STM32_PINMUX('I', 12, AF14)>, /* LCD_HSYNC */
                                                 <STM32_PINMUX('I', 13, AF14)>, /* LCD_VSYNC */
                                };
                        };
 
+                       ltdc_pins_b: ltdc-1 {
+                               pins {
+                                       pinmux = <STM32_PINMUX('C', 6,  AF14)>,
+                                               /* LCD_HSYNC */
+                                                <STM32_PINMUX('A', 4,  AF14)>,
+                                                /* LCD_VSYNC */
+                                                <STM32_PINMUX('G', 7,  AF14)>,
+                                                /* LCD_CLK */
+                                                <STM32_PINMUX('C', 10, AF14)>,
+                                                /* LCD_R2 */
+                                                <STM32_PINMUX('B', 0,  AF9)>,
+                                                /* LCD_R3 */
+                                                <STM32_PINMUX('A', 11, AF14)>,
+                                                /* LCD_R4 */
+                                                <STM32_PINMUX('A', 12, AF14)>,
+                                                /* LCD_R5 */
+                                                <STM32_PINMUX('B', 1,  AF9)>,
+                                                /* LCD_R6*/
+                                                <STM32_PINMUX('G', 6,  AF14)>,
+                                                /* LCD_R7 */
+                                                <STM32_PINMUX('A', 6,  AF14)>,
+                                                /* LCD_G2 */
+                                                <STM32_PINMUX('G', 10, AF9)>,
+                                                /* LCD_G3 */
+                                                <STM32_PINMUX('B', 10, AF14)>,
+                                                /* LCD_G4 */
+                                                <STM32_PINMUX('D', 6,  AF14)>,
+                                                /* LCD_B2 */
+                                                <STM32_PINMUX('G', 11, AF14)>,
+                                                /* LCD_B3*/
+                                                <STM32_PINMUX('B', 11, AF14)>,
+                                                /* LCD_G5 */
+                                                <STM32_PINMUX('C', 7,  AF14)>,
+                                                /* LCD_G6 */
+                                                <STM32_PINMUX('D', 3,  AF14)>,
+                                                /* LCD_G7 */
+                                                <STM32_PINMUX('G', 12, AF9)>,
+                                                /* LCD_B4 */
+                                                <STM32_PINMUX('A', 3,  AF14)>,
+                                                /* LCD_B5 */
+                                                <STM32_PINMUX('B', 8,  AF14)>,
+                                                /* LCD_B6 */
+                                                <STM32_PINMUX('B', 9,  AF14)>,
+                                                /* LCD_B7 */
+                                                <STM32_PINMUX('F', 10, AF14)>;
+                                                /* LCD_DE */
+                                       slew-rate = <2>;
+                               };
+                       };
+
+                       spi5_pins: spi5-0 {
+                               pins1 {
+                                       pinmux = <STM32_PINMUX('F', 7, AF5)>,
+                                               /* SPI5_CLK */
+                                                <STM32_PINMUX('F', 9, AF5)>;
+                                               /* SPI5_MOSI */
+                                       bias-disable;
+                                       drive-push-pull;
+                                       slew-rate = <0>;
+                               };
+                               pins2 {
+                                       pinmux = <STM32_PINMUX('F', 8, AF5)>;
+                                               /* SPI5_MISO */
+                                       bias-disable;
+                               };
+                       };
+
+                       i2c3_pins: i2c3-0 {
+                               pins {
+                                       pinmux = <STM32_PINMUX('C', 9, AF4)>,
+                                               /* I2C3_SDA */
+                                                <STM32_PINMUX('A', 8, AF4)>;
+                                               /* I2C3_SCL */
+                                       bias-disable;
+                                       drive-open-drain;
+                                       slew-rate = <3>;
+                               };
+                       };
+
                        dcmi_pins: dcmi-0 {
                                pins {
                                        pinmux = <STM32_PINMUX('A', 4, AF13)>, /* DCMI_HSYNC */
index 30c0f67..3dc068b 100644 (file)
@@ -49,6 +49,8 @@
 #include "stm32f429.dtsi"
 #include "stm32f429-pinctrl.dtsi"
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/gpio/gpio.h>
 
 / {
        model = "STMicroelectronics STM32F429i-DISCO board";
 
        leds {
                compatible = "gpio-leds";
-               red {
+               led-red {
                        gpios = <&gpiog 14 0>;
                };
-               green {
+               led-green {
                        gpios = <&gpiog 13 0>;
                        linux,default-trigger = "heartbeat";
                };
        status = "okay";
 };
 
+&i2c3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c3_pins>;
+       clock-frequency = <100000>;
+       status = "okay";
+
+       stmpe811@41 {
+               compatible = "st,stmpe811";
+               reg = <0x41>;
+               interrupts = <15 IRQ_TYPE_EDGE_FALLING>;
+               interrupt-parent = <&gpioa>;
+               /* 3.25 MHz ADC clock speed */
+               st,adc-freq = <1>;
+               /* 12-bit ADC */
+               st,mod-12b = <1>;
+               /* internal ADC reference */
+               st,ref-sel = <0>;
+               /* ADC converstion time: 80 clocks */
+               st,sample-time = <4>;
+
+               stmpe_touchscreen {
+                       compatible = "st,stmpe-ts";
+                       /* 8 sample average control */
+                       st,ave-ctrl = <3>;
+                       /* 7 length fractional part in z */
+                       st,fraction-z = <7>;
+                       /*
+                        * 50 mA typical 80 mA max touchscreen drivers
+                        * current limit value
+                        */
+                       st,i-drive = <1>;
+                       /* 1 ms panel driver settling time */
+                       st,settling = <3>;
+                       /* 5 ms touch detect interrupt delay */
+                       st,touch-det-delay = <5>;
+               };
+
+               stmpe_adc {
+                       compatible = "st,stmpe-adc";
+                       /* forbid to use ADC channels 3-0 (touch) */
+                       st,norequest-mask = <0x0F>;
+               };
+       };
+};
+
+&ltdc {
+       status = "okay";
+       pinctrl-0 = <&ltdc_pins_b>;
+       pinctrl-names = "default";
+
+       port {
+               ltdc_out_rgb: endpoint {
+                       remote-endpoint = <&panel_in_rgb>;
+               };
+       };
+};
+
 &rtc {
        assigned-clocks = <&rcc 1 CLK_RTC>;
        assigned-clock-parents = <&rcc 1 CLK_LSI>;
        status = "okay";
 };
 
+&spi5 {
+       status = "okay";
+       pinctrl-0 = <&spi5_pins>;
+       pinctrl-names = "default";
+       #address-cells = <1>;
+       #size-cells = <0>;
+       cs-gpios = <&gpioc 1 GPIO_ACTIVE_LOW>, <&gpioc 2 GPIO_ACTIVE_LOW>;
+
+       l3gd20: l3gd20@0 {
+               compatible = "st,l3gd20-gyro";
+               spi-max-frequency = <10000000>;
+               st,drdy-int-pin = <2>;
+               interrupt-parent = <&gpioa>;
+               interrupts = <1 IRQ_TYPE_EDGE_RISING>,
+                               <2 IRQ_TYPE_EDGE_RISING>;
+               reg = <0>;
+               status = "okay";
+       };
+
+       display: display@1{
+               /* Connect panel-ilitek-9341 to ltdc */
+               compatible = "st,sf-tc240t-9370-t";
+               reg = <1>;
+               spi-3wire;
+               spi-max-frequency = <10000000>;
+               dc-gpios = <&gpiod 13 0>;
+               port {
+                       panel_in_rgb: endpoint {
+                       remote-endpoint = <&ltdc_out_rgb>;
+                       };
+               };
+       };
+};
+
 &usart1 {
        pinctrl-0 = <&usart1_pins_a>;
        pinctrl-names = "default";
index 393f43c..ad715a0 100644 (file)
                        assigned-clock-parents = <&rcc 1 CLK_LSE>;
                        interrupt-parent = <&exti>;
                        interrupts = <17 1>;
-                       interrupt-names = "alarm";
                        st,syscfg = <&pwrcfg 0x00 0x100>;
                        status = "disabled";
                };
                        status = "disabled";
                };
 
+               i2c3: i2c@40005c00 {
+                       compatible = "st,stm32f4-i2c";
+                       reg = <0x40005c00 0x400>;
+                       interrupts = <72>,
+                                    <73>;
+                       resets = <&rcc STM32F4_APB1_RESET(I2C3)>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(I2C3)>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
                dac: dac@40007400 {
                        compatible = "st,stm32f4-dac-core";
                        reg = <0x40007400 0x400>;
                        status = "disabled";
                };
 
-               syscfg: system-config@40013800 {
-                       compatible = "syscon";
+               syscfg: syscon@40013800 {
+                       compatible = "st,stm32-syscfg", "syscon";
                        reg = <0x40013800 0x400>;
                };
 
                        reg = <0x40015000 0x400>;
                        interrupts = <85>;
                        clocks = <&rcc 0 STM32F4_APB2_CLOCK(SPI5)>;
+                       dmas = <&dma2 3 2 0x400 0x0>,
+                               <&dma2 4 2 0x400 0x0>;
+                       dma-names = "rx", "tx";
                        status = "disabled";
                };
 
                };
 
                pwrcfg: power-config@40007000 {
-                       compatible = "syscon";
+                       compatible = "st,stm32-power-config", "syscon";
                        reg = <0x40007000 0x400>;
                };
 
index 9397db0..2e1b3bb 100644 (file)
 
        leds {
                compatible = "gpio-leds";
-               green {
+               led-green {
                        gpios = <&gpiog 6 GPIO_ACTIVE_LOW>;
                        linux,default-trigger = "heartbeat";
                };
-               orange {
+               led-orange {
                        gpios = <&gpiod 4 GPIO_ACTIVE_LOW>;
                };
-               red {
+               led-red {
                        gpios = <&gpiod 5 GPIO_ACTIVE_LOW>;
                };
-               blue {
+               led-blue {
                        gpios = <&gpiok 3 GPIO_ACTIVE_LOW>;
                };
        };
index 93c0637..640ff54 100644 (file)
                        assigned-clock-parents = <&rcc 1 CLK_LSE>;
                        interrupt-parent = <&exti>;
                        interrupts = <17 1>;
-                       interrupt-names = "alarm";
                        st,syscfg = <&pwrcfg 0x00 0x100>;
                        status = "disabled";
                };
                        status = "disabled";
                };
 
-               syscfg: system-config@40013800 {
-                       compatible = "syscon";
+               syscfg: syscon@40013800 {
+                       compatible = "st,stm32-syscfg", "syscon";
                        reg = <0x40013800 0x400>;
                };
 
                };
 
                pwrcfg: power-config@40007000 {
-                       compatible = "syscon";
+                       compatible = "st,stm32-power-config", "syscon";
                        reg = <0x40007000 0x400>;
                };
 
index 1626e00..0ce7fbc 100644 (file)
 
        leds {
                compatible = "gpio-leds";
-               green {
+               led-green {
                        gpios = <&gpioj 5 GPIO_ACTIVE_HIGH>;
                        linux,default-trigger = "heartbeat";
                };
-               red {
+               led-red {
                        gpios = <&gpioj 13 GPIO_ACTIVE_HIGH>;
                };
        };
index e44e7ba..fa5dcb6 100644 (file)
                                #interrupt-cells = <2>;
                        };
 
-                       i2c1_pins_a: i2c1@0 {
+                       i2c1_pins_a: i2c1-0 {
                                pins {
                                        pinmux = <STM32_PINMUX('B', 6, AF4)>, /* I2C1_SCL */
                                                 <STM32_PINMUX('B', 7, AF4)>; /* I2C1_SDA */
                                };
                        };
 
-                       ethernet_rmii: rmii@0 {
+                       ethernet_rmii: rmii-0 {
                                pins {
                                        pinmux = <STM32_PINMUX('G', 11, AF11)>,
                                                 <STM32_PINMUX('G', 13, AF11)>,
                                };
                        };
 
-                       usart1_pins: usart1@0 {
+                       usart1_pins: usart1-0 {
                                pins1 {
                                        pinmux = <STM32_PINMUX('B', 14, AF4)>; /* USART1_TX */
                                        bias-disable;
                                };
                        };
 
-                       usart2_pins: usart2@0 {
+                       usart2_pins: usart2-0 {
                                pins1 {
                                        pinmux = <STM32_PINMUX('D', 5, AF7)>; /* USART2_TX */
                                        bias-disable;
                                };
                        };
 
-                       usbotg_hs_pins_a: usbotg-hs@0 {
+                       usbotg_hs_pins_a: usbotg-hs-0 {
                                pins {
                                        pinmux = <STM32_PINMUX('H', 4, AF10)>,  /* ULPI_NXT */
                                                         <STM32_PINMUX('I', 11, AF10)>, /* ULPI_DIR> */
index 9b7fc68..69e2f1e 100644 (file)
                        interrupts = <1>, <2>, <3>, <6>, <7>, <8>, <9>, <10>, <23>, <40>, <41>, <62>, <76>;
                };
 
-               syscfg: system-config@58000400 {
-                       compatible = "syscon";
+               syscfg: syscon@58000400 {
+                       compatible = "st,stm32-syscfg", "syscon";
                        reg = <0x58000400 0x400>;
                };
 
                        assigned-clock-parents = <&rcc LSE_CK>;
                        interrupt-parent = <&exti>;
                        interrupts = <17 IRQ_TYPE_EDGE_RISING>;
-                       interrupt-names = "alarm";
                        st,syscfg = <&pwrcfg 0x00 0x100>;
                        status = "disabled";
                };
                };
 
                pwrcfg: power-config@58024800 {
-                       compatible = "syscon";
+                       compatible = "st,stm32-power-config", "syscon";
                        reg = <0x58024800 0x400>;
                };
 
index 7eb8587..b5a6642 100644 (file)
                                 <STM32_PINMUX('E', 2, ANALOG)>, /* ETH_RGMII_TXD3 */
                                 <STM32_PINMUX('B', 11, ANALOG)>, /* ETH_RGMII_TX_CTL */
                                 <STM32_PINMUX('C', 1, ANALOG)>, /* ETH_MDC */
-                                <STM32_PINMUX('A', 2, ANALOG)>, /* ETH_MDIO */
-                                <STM32_PINMUX('C', 4, ANALOG)>, /* ETH_RGMII_RXD0 */
+                                <STM32_PINMUX('A', 2, ANALOG)>, /* ETH_MDIO */
+                                <STM32_PINMUX('C', 4, ANALOG)>, /* ETH_RGMII_RXD0 */
                                 <STM32_PINMUX('C', 5, ANALOG)>, /* ETH_RGMII_RXD1 */
                                 <STM32_PINMUX('H', 6, ANALOG)>, /* ETH_RGMII_RXD2 */
                                 <STM32_PINMUX('H', 7, ANALOG)>, /* ETH_RGMII_RXD3 */
        i2c5_pins_b: i2c5-1 {
                pins {
                        pinmux = <STM32_PINMUX('D', 0, AF4)>, /* I2C5_SCL */
-                                <STM32_PINMUX('D', 1, AF4)>; /* I2C5_SDA */
+                                <STM32_PINMUX('D', 1, AF4)>; /* I2C5_SDA */
                        bias-disable;
                        drive-open-drain;
                        slew-rate = <0>;
        i2c5_sleep_pins_b: i2c5-sleep-1 {
                pins {
                        pinmux = <STM32_PINMUX('D', 0, ANALOG)>, /* I2C5_SCL */
-                                <STM32_PINMUX('D', 1, ANALOG)>; /* I2C5_SDA */
+                                <STM32_PINMUX('D', 1, ANALOG)>; /* I2C5_SDA */
                };
        };
 
                };
        };
 
-
        sai2a_pins_b: sai2a-1 {
                pins1 {
                        pinmux = <STM32_PINMUX('I', 6, AF10)>,  /* SAI2_SD_A */
                };
        };
 
+       uart4_pins_a: uart4-0 {
+               pins1 {
+                       pinmux = <STM32_PINMUX('G', 11, AF6)>; /* UART4_TX */
+                       bias-disable;
+                       drive-push-pull;
+                       slew-rate = <0>;
+               };
+               pins2 {
+                       pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
+                       bias-disable;
+               };
+       };
+
+       uart4_idle_pins_a: uart4-idle-0 {
+                  pins1 {
+                        pinmux = <STM32_PINMUX('G', 11, ANALOG)>; /* UART4_TX */
+                  };
+                  pins2 {
+                        pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
+                        bias-disable;
+                  };
+       };
+
+       uart4_sleep_pins_a: uart4-sleep-0 {
+                  pins {
+                       pinmux = <STM32_PINMUX('G', 11, ANALOG)>, /* UART4_TX */
+                                <STM32_PINMUX('B', 2, ANALOG)>; /* UART4_RX */
+                   };
+       };
+
+       uart4_pins_b: uart4-1 {
+               pins1 {
+                       pinmux = <STM32_PINMUX('D', 1, AF8)>; /* UART4_TX */
+                       bias-disable;
+                       drive-push-pull;
+                       slew-rate = <0>;
+               };
+               pins2 {
+                       pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
+                       bias-disable;
+               };
+       };
+
+       uart4_pins_c: uart4-2 {
+               pins1 {
+                       pinmux = <STM32_PINMUX('G', 11, AF6)>; /* UART4_TX */
+                       bias-disable;
+                       drive-push-pull;
+                       slew-rate = <0>;
+               };
+               pins2 {
+                       pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
+                       bias-disable;
+               };
+       };
+
+       uart7_pins_a: uart7-0 {
+               pins1 {
+                       pinmux = <STM32_PINMUX('E', 8, AF7)>; /* UART7_TX */
+                       bias-disable;
+                       drive-push-pull;
+                       slew-rate = <0>;
+               };
+               pins2 {
+                       pinmux = <STM32_PINMUX('E', 7, AF7)>, /* UART7_RX */
+                                <STM32_PINMUX('E', 10, AF7)>, /* UART7_CTS */
+                                <STM32_PINMUX('E', 9, AF7)>; /* UART7_RTS */
+                       bias-disable;
+               };
+       };
+
+       uart7_pins_b: uart7-1 {
+               pins1 {
+                       pinmux = <STM32_PINMUX('F', 7, AF7)>; /* UART7_TX */
+                       bias-disable;
+                       drive-push-pull;
+                       slew-rate = <0>;
+               };
+               pins2 {
+                       pinmux = <STM32_PINMUX('F', 6, AF7)>; /* UART7_RX */
+                       bias-disable;
+               };
+       };
+
+       uart7_pins_c: uart7-2 {
+               pins1 {
+                       pinmux = <STM32_PINMUX('E', 8, AF7)>; /* UART7_TX */
+                       bias-disable;
+                       drive-push-pull;
+                       slew-rate = <0>;
+               };
+               pins2 {
+                       pinmux = <STM32_PINMUX('E', 7, AF7)>; /* UART7_RX */
+                       bias-disable;
+               };
+       };
+
+       uart7_idle_pins_c: uart7-idle-2 {
+               pins1 {
+                       pinmux = <STM32_PINMUX('E', 8, ANALOG)>; /* UART7_TX */
+               };
+               pins2 {
+                       pinmux = <STM32_PINMUX('E', 7, AF7)>; /* UART7_RX */
+                       bias-disable;
+               };
+       };
+
+       uart7_sleep_pins_c: uart7-sleep-2 {
+               pins {
+                       pinmux = <STM32_PINMUX('E', 8, ANALOG)>, /* UART7_TX */
+                                <STM32_PINMUX('E', 7, ANALOG)>; /* UART7_RX */
+               };
+       };
+
+       uart8_pins_a: uart8-0 {
+               pins1 {
+                       pinmux = <STM32_PINMUX('E', 1, AF8)>; /* UART8_TX */
+                       bias-disable;
+                       drive-push-pull;
+                       slew-rate = <0>;
+               };
+               pins2 {
+                       pinmux = <STM32_PINMUX('E', 0, AF8)>; /* UART8_RX */
+                       bias-disable;
+               };
+       };
+
+       spi4_pins_a: spi4-0 {
+               pins {
+                       pinmux = <STM32_PINMUX('E', 12, AF5)>, /* SPI4_SCK */
+                                <STM32_PINMUX('E', 6, AF5)>;  /* SPI4_MOSI */
+                       bias-disable;
+                       drive-push-pull;
+                       slew-rate = <1>;
+               };
+               pins2 {
+                       pinmux = <STM32_PINMUX('E', 13, AF5)>; /* SPI4_MISO */
+                       bias-disable;
+               };
+       };
+
        usart2_pins_a: usart2-0 {
                pins1 {
                        pinmux = <STM32_PINMUX('F', 5, AF7)>, /* USART2_TX */
                };
        };
 
-       usart3_pins_a: usart3-0 {
+       usart2_pins_c: usart2-2 {
                pins1 {
-                       pinmux = <STM32_PINMUX('B', 10, AF7)>; /* USART3_TX */
+                       pinmux = <STM32_PINMUX('D', 5, AF7)>, /* USART2_TX */
+                                <STM32_PINMUX('D', 4, AF7)>; /* USART2_RTS */
                        bias-disable;
                        drive-push-pull;
-                       slew-rate = <0>;
+                       slew-rate = <3>;
                };
                pins2 {
-                       pinmux = <STM32_PINMUX('B', 12, AF8)>; /* USART3_RX */
+                       pinmux = <STM32_PINMUX('D', 6, AF7)>, /* USART2_RX */
+                                <STM32_PINMUX('D', 3, AF7)>; /* USART2_CTS_NSS */
                        bias-disable;
                };
        };
 
-       uart4_pins_a: uart4-0 {
+       usart2_idle_pins_c: usart2-idle-2 {
                pins1 {
-                       pinmux = <STM32_PINMUX('G', 11, AF6)>; /* UART4_TX */
-                       bias-disable;
-                       drive-push-pull;
-                       slew-rate = <0>;
+                       pinmux = <STM32_PINMUX('D', 5, ANALOG)>, /* USART2_TX */
+                                <STM32_PINMUX('D', 4, ANALOG)>, /* USART2_RTS */
+                                <STM32_PINMUX('D', 3, ANALOG)>; /* USART2_CTS_NSS */
                };
                pins2 {
-                       pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
+                       pinmux = <STM32_PINMUX('D', 6, AF7)>; /* USART2_RX */
                        bias-disable;
                };
        };
 
-       uart4_pins_b: uart4-1 {
+       usart2_sleep_pins_c: usart2-sleep-2 {
+               pins {
+                       pinmux = <STM32_PINMUX('D', 5, ANALOG)>, /* USART2_TX */
+                                <STM32_PINMUX('D', 4, ANALOG)>, /* USART2_RTS */
+                                <STM32_PINMUX('D', 6, ANALOG)>, /* USART2_RX */
+                                <STM32_PINMUX('D', 3, ANALOG)>; /* USART2_CTS_NSS */
+               };
+       };
+
+       usart3_pins_a: usart3-0 {
                pins1 {
-                       pinmux = <STM32_PINMUX('D', 1, AF8)>; /* UART4_TX */
+                       pinmux = <STM32_PINMUX('B', 10, AF7)>; /* USART3_TX */
                        bias-disable;
                        drive-push-pull;
                        slew-rate = <0>;
                };
                pins2 {
-                       pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
+                       pinmux = <STM32_PINMUX('B', 12, AF8)>; /* USART3_RX */
                        bias-disable;
                };
        };
 
-       uart4_pins_c: uart4-2 {
+       usart3_pins_b: usart3-1 {
                pins1 {
-                       pinmux = <STM32_PINMUX('G', 11, AF6)>; /* UART4_TX */
+                       pinmux = <STM32_PINMUX('B', 10, AF7)>, /* USART3_TX */
+                                <STM32_PINMUX('G', 8, AF8)>; /* USART3_RTS */
                        bias-disable;
                        drive-push-pull;
                        slew-rate = <0>;
                };
                pins2 {
-                       pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
+                       pinmux = <STM32_PINMUX('B', 12, AF8)>, /* USART3_RX */
+                                <STM32_PINMUX('I', 10, AF8)>; /* USART3_CTS_NSS */
                        bias-disable;
                };
        };
 
-       uart7_pins_a: uart7-0 {
+       usart3_idle_pins_b: usart3-idle-1 {
                pins1 {
-                       pinmux = <STM32_PINMUX('E', 8, AF7)>; /* UART4_TX */
-                       bias-disable;
-                       drive-push-pull;
-                       slew-rate = <0>;
+                       pinmux = <STM32_PINMUX('B', 10, ANALOG)>, /* USART3_TX */
+                                <STM32_PINMUX('G', 8, ANALOG)>, /* USART3_RTS */
+                                <STM32_PINMUX('I', 10, ANALOG)>; /* USART3_CTS_NSS */
                };
                pins2 {
-                       pinmux = <STM32_PINMUX('E', 7, AF7)>, /* UART4_RX */
-                                <STM32_PINMUX('E', 10, AF7)>, /* UART4_CTS */
-                                <STM32_PINMUX('E', 9, AF7)>; /* UART4_RTS */
+                       pinmux = <STM32_PINMUX('B', 12, AF8)>; /* USART3_RX */
                        bias-disable;
                };
        };
 
-       uart7_pins_b: uart7-1 {
+       usart3_sleep_pins_b: usart3-sleep-1 {
+               pins {
+                       pinmux = <STM32_PINMUX('B', 10, ANALOG)>, /* USART3_TX */
+                                <STM32_PINMUX('G', 8, ANALOG)>, /* USART3_RTS */
+                                <STM32_PINMUX('I', 10, ANALOG)>, /* USART3_CTS_NSS */
+                                <STM32_PINMUX('B', 12, ANALOG)>; /* USART3_RX */
+               };
+       };
+
+       usart3_pins_c: usart3-2 {
                pins1 {
-                       pinmux = <STM32_PINMUX('F', 7, AF7)>; /* UART7_TX */
+                       pinmux = <STM32_PINMUX('B', 10, AF7)>, /* USART3_TX */
+                                <STM32_PINMUX('G', 8, AF8)>; /* USART3_RTS */
                        bias-disable;
                        drive-push-pull;
                        slew-rate = <0>;
                };
                pins2 {
-                       pinmux = <STM32_PINMUX('F', 6, AF7)>; /* UART7_RX */
+                       pinmux = <STM32_PINMUX('B', 12, AF8)>, /* USART3_RX */
+                                <STM32_PINMUX('B', 13, AF7)>; /* USART3_CTS_NSS */
                        bias-disable;
                };
        };
 
-       uart8_pins_a: uart8-0 {
+       usart3_idle_pins_c: usart3-idle-2 {
                pins1 {
-                       pinmux = <STM32_PINMUX('E', 1, AF8)>; /* UART8_TX */
-                       bias-disable;
-                       drive-push-pull;
-                       slew-rate = <0>;
+                       pinmux = <STM32_PINMUX('B', 10, ANALOG)>, /* USART3_TX */
+                                <STM32_PINMUX('G', 8, ANALOG)>, /* USART3_RTS */
+                                <STM32_PINMUX('B', 13, ANALOG)>; /* USART3_CTS_NSS */
                };
                pins2 {
-                       pinmux = <STM32_PINMUX('E', 0, AF8)>; /* UART8_RX */
+                       pinmux = <STM32_PINMUX('B', 12, AF8)>; /* USART3_RX */
                        bias-disable;
                };
        };
 
+       usart3_sleep_pins_c: usart3-sleep-2 {
+               pins {
+                       pinmux = <STM32_PINMUX('B', 10, ANALOG)>, /* USART3_TX */
+                                <STM32_PINMUX('G', 8, ANALOG)>, /* USART3_RTS */
+                                <STM32_PINMUX('B', 13, ANALOG)>, /* USART3_CTS_NSS */
+                                <STM32_PINMUX('B', 12, ANALOG)>; /* USART3_RX */
+               };
+       };
+
        usbotg_hs_pins_a: usbotg-hs-0 {
                pins {
                        pinmux = <STM32_PINMUX('A', 10, ANALOG)>; /* OTG_ID */
                        bias-disable;
                };
        };
-
-       spi4_pins_a: spi4-0 {
-               pins {
-                       pinmux = <STM32_PINMUX('E', 12, AF5)>, /* SPI4_SCK */
-                                <STM32_PINMUX('E', 6, AF5)>;  /* SPI4_MOSI */
-                       bias-disable;
-                       drive-push-pull;
-                       slew-rate = <1>;
-               };
-               pins2 {
-                       pinmux = <STM32_PINMUX('E', 13, AF5)>; /* SPI4_MISO */
-                       bias-disable;
-               };
-       };
 };
index 36f38a9..bfe2902 100644 (file)
                };
 
                pwr_mcu: pwr_mcu@50001014 {
-                       compatible = "syscon";
+                       compatible = "st,stm32mp151-pwr-mcu", "syscon";
                        reg = <0x50001014 0x4>;
                };
 
                        dma-names = "tx", "rx";
                        clocks = <&rcc QSPI_K>;
                        resets = <&rcc QSPI_R>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
                        status = "disabled";
                };
 
index d03d4cd..4c8be9c 100644 (file)
@@ -18,6 +18,8 @@
        aliases {
                ethernet0 = &ethernet0;
                serial0 = &uart4;
+               serial1 = &usart3;
+               serial2 = &uart7;
        };
 
        chosen {
index 9a8a267..0456365 100644 (file)
@@ -19,6 +19,9 @@
        aliases {
                ethernet0 = &ethernet0;
                serial0 = &uart4;
+               serial1 = &usart3;
+               serial2 = &uart7;
+               serial3 = &usart2;
        };
 
        chosen {
                };
        };
 };
+
+&usart2 {
+       pinctrl-names = "default", "sleep", "idle";
+       pinctrl-0 = <&usart2_pins_c>;
+       pinctrl-1 = <&usart2_sleep_pins_c>;
+       pinctrl-2 = <&usart2_idle_pins_c>;
+       status = "disabled";
+};
index 32ccd50..ca109dc 100644 (file)
 };
 
 &uart4 {
-       pinctrl-names = "default";
+       pinctrl-names = "default", "sleep", "idle";
        pinctrl-0 = <&uart4_pins_a>;
+       pinctrl-1 = <&uart4_sleep_pins_a>;
+       pinctrl-2 = <&uart4_idle_pins_a>;
        status = "okay";
 };
 
index b190565..85628e1 100644 (file)
@@ -19,6 +19,7 @@
 
        aliases {
                serial0 = &uart4;
+               serial1 = &usart3;
                ethernet0 = &ethernet0;
        };
 
        };
 };
 
+&usart3 {
+       pinctrl-names = "default", "sleep", "idle";
+       pinctrl-0 = <&usart3_pins_b>;
+       pinctrl-1 = <&usart3_sleep_pins_b>;
+       pinctrl-2 = <&usart3_idle_pins_b>;
+       /*
+        * HW flow control USART3_RTS is optional, and isn't default wired to
+        * the connector. SB23 needs to be soldered in order to use it, and R77
+        * (ETH_CLK) should be removed.
+        */
+       uart-has-rtscts;
+       status = "disabled";
+};
+
 &usbh_ehci {
        phys = <&usbphyc_port0>;
        status = "okay";
index 70db923..a530774 100644 (file)
@@ -62,7 +62,7 @@
 
        led {
                compatible = "gpio-leds";
-               blue {
+               led-blue {
                        label = "heartbeat";
                        gpios = <&gpiod 11 GPIO_ACTIVE_HIGH>;
                        linux,default-trigger = "heartbeat";
        };
 };
 
+&i2c5 {
+       pinctrl-names = "default", "sleep";
+       pinctrl-0 = <&i2c5_pins_a>;
+       pinctrl-1 = <&i2c5_sleep_pins_a>;
+       i2c-scl-rising-time-ns = <185>;
+       i2c-scl-falling-time-ns = <20>;
+       clock-frequency = <400000>;
+       /* spare dmas for other usage */
+       /delete-property/dmas;
+       /delete-property/dma-names;
+       status = "disabled";
+};
+
 &i2s2 {
        clocks = <&rcc SPI2>, <&rcc SPI2_K>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
        clock-names = "pclk", "i2sclk", "x8k", "x11k";
 };
 
 &uart4 {
-       pinctrl-names = "default";
+       pinctrl-names = "default", "sleep", "idle";
        pinctrl-0 = <&uart4_pins_a>;
+       pinctrl-1 = <&uart4_sleep_pins_a>;
+       pinctrl-2 = <&uart4_idle_pins_a>;
        status = "okay";
 };
 
+&uart7 {
+       pinctrl-names = "default", "sleep", "idle";
+       pinctrl-0 = <&uart7_pins_c>;
+       pinctrl-1 = <&uart7_sleep_pins_c>;
+       pinctrl-2 = <&uart7_idle_pins_c>;
+       status = "disabled";
+};
+
+&usart3 {
+       pinctrl-names = "default", "sleep", "idle";
+       pinctrl-0 = <&usart3_pins_c>;
+       pinctrl-1 = <&usart3_sleep_pins_c>;
+       pinctrl-2 = <&usart3_idle_pins_c>;
+       uart-has-rtscts;
+       status = "disabled";
+};
+
 &usbh_ehci {
        phys = <&usbphyc_port0>;
        status = "okay";
 };
 
 &usbotg_hs {
-       dr_mode = "peripheral";
        phys = <&usbphyc_port1 0>;
        phy-names = "usb2-phy";
+       usb-role-switch;
        status = "okay";
 };
 
index b8f46e2..251bbab 100644 (file)
                };
        };
 
+       leds {
+               compatible = "gpio-leds";
+
+               pwr {
+                       label = "orangepi:green:pwr";
+                       gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;
+                       default-state = "on";
+               };
+
+               status {
+                       label = "orangepi:red:status";
+                       gpios = <&pio 0 17 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
        reg_vcc3v3: vcc3v3 {
                compatible = "regulator-fixed";
                regulator-name = "vcc3v3";
        status = "okay";
 };
 
+&ehci0 {
+       status = "okay";
+};
+
 &hdmi {
        status = "okay";
 };
        status = "okay";
 };
 
+&ohci0 {
+       status = "okay";
+};
+
 &uart0 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_pa_pins>;
        status = "okay";
 };
+
+&usb_otg {
+       /*
+        * According to schematics CN1 MicroUSB port can be used to take
+        * external 5V to power up the board VBUS. On the contrary CN1 MicroUSB
+        * port cannot provide power externally even if the board is powered
+        * via GPIO pins. It thus makes sense to force peripheral mode.
+        */
+       dr_mode = "peripheral";
+       status = "okay";
+};
+
+&usbphy {
+       status = "okay";
+};
index 22466af..235994a 100644 (file)
                regulator-type = "voltage";
                regulator-boot-on;
                regulator-always-on;
-               regulator-min-microvolt = <1100000>;
-               regulator-max-microvolt = <1300000>;
+               regulator-min-microvolt = <1108475>;
+               regulator-max-microvolt = <1308475>;
                regulator-ramp-delay = <50>; /* 4ms */
                gpios = <&r_pio 0 1 GPIO_ACTIVE_HIGH>; /* PL1 */
                gpios-states = <0x1>;
-               states = <1100000 0>, <1300000 1>;
+               states = <1108475 0>, <1308475 1>;
        };
 };
 
 &cpu0 {
        cpu-supply = <&reg_vdd_cpux>;
 };
+
+&cpu1 {
+       cpu-supply = <&reg_vdd_cpux>;
+};
+
+&cpu2 {
+       cpu-supply = <&reg_vdd_cpux>;
+};
+
+&cpu3 {
+       cpu-supply = <&reg_vdd_cpux>;
+};
index 19b3b23..c44fd72 100644 (file)
        cpu-supply = <&reg_vdd_cpux>;
 };
 
+&cpu1 {
+       cpu-supply = <&reg_vdd_cpux>;
+};
+
+&cpu2 {
+       cpu-supply = <&reg_vdd_cpux>;
+};
+
+&cpu3 {
+       cpu-supply = <&reg_vdd_cpux>;
+};
+
 &de {
        status = "okay";
 };
index 08be733..c04162d 100644 (file)
                battery: smart-battery@b {
                        compatible = "ti,bq20z45", "sbs,sbs-battery";
                        reg = <0xb>;
-                       battery-name = "battery";
                        sbs,i2c-retry-count = <2>;
                        sbs,poll-retry-count = <100>;
                        power-supplies = <&charger>;
                };
        };
 
-       sdhci@78000400 {
+       mmc@78000400 {
                cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio TEGRA_GPIO(Q, 4) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
                status = "okay";
        };
 
-       sdhci@78000600 {
+       mmc@78000600 {
                bus-width = <8>;
                status = "okay";
                non-removable;
                default-brightness-level = <6>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
                };
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_ac_bat_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "vdd_ac_bat";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       vdd_ac_bat_reg: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_ac_bat";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               dvdd_ts_reg: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "dvdd_ts";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(H, 5) GPIO_ACTIVE_HIGH>;
-               };
+       dvdd_ts_reg: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "dvdd_ts";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(H, 5) GPIO_ACTIVE_HIGH>;
+       };
 
-               usb1_vbus_reg: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "usb1_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
-                       gpio-open-drain;
-                       vin-supply = <&tps65090_dcdc1_reg>;
-               };
+       usb1_vbus_reg: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
+               gpio-open-drain;
+               vin-supply = <&tps65090_dcdc1_reg>;
+       };
 
-               usb3_vbus_reg: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "usb2_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
-                       gpio-open-drain;
-                       vin-supply = <&tps65090_dcdc1_reg>;
-               };
+       usb3_vbus_reg: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb2_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
+               gpio-open-drain;
+               vin-supply = <&tps65090_dcdc1_reg>;
+       };
 
-               vdd_hdmi_reg: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "vdd_hdmi_5v0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       vin-supply = <&tps65090_dcdc1_reg>;
-               };
+       vdd_hdmi_reg: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_hdmi_5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               vin-supply = <&tps65090_dcdc1_reg>;
+       };
 
-               vdd_cam_1v8_reg: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg = <6>;
-                       regulator-name = "vdd_cam_1v8_reg";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       enable-active-high;
-                       gpio = <&palmas_gpio 6 0>;
-               };
+       vdd_cam_1v8_reg: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_cam_1v8_reg";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               enable-active-high;
+               gpio = <&palmas_gpio 6 0>;
+       };
 
-               vdd_5v0_hdmi: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
-                       regulator-name = "VDD_5V0_HDMI_CON";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&tps65090_dcdc1_reg>;
-               };
+       vdd_5v0_hdmi: regulator@7 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_5V0_HDMI_CON";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&tps65090_dcdc1_reg>;
        };
 
        sound {
index 3d38355..0796017 100644 (file)
@@ -37,7 +37,7 @@
                dsi@54300000 {
                        status = "okay";
 
-                       vdd-supply = <&vdd_1v2_ap>;
+                       avdd-dsi-csi-supply = <&vdd_1v2_ap>;
 
                        panel@0 {
                                compatible = "lg,lh500wx1-sd03";
        };
 
        /* SD card */
-       sdhci@78000400 {
+       mmc@78000400 {
                status = "okay";
                bus-width = <4>;
                vqmmc-supply = <&vddio_sdmmc3>;
        };
 
        /* eMMC */
-       sdhci@78000600 {
+       mmc@78000600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                enable-gpios = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_HIGH>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
                };
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               lcd_bl_en: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "lcd_bl_en";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-boot-on;
-               };
+       lcd_bl_en: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "lcd_bl_en";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-boot-on;
+       };
 
-               vdd_lcd: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "vdd_lcd_1v8";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       vin-supply = <&vdd_1v8>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(U, 4) GPIO_ACTIVE_HIGH>;
-                       regulator-boot-on;
-               };
+       vdd_lcd: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_lcd_1v8";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               vin-supply = <&vdd_1v8>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(U, 4) GPIO_ACTIVE_HIGH>;
+               regulator-boot-on;
+       };
 
-               regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "vdd_1v8_ts";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       gpio = <&gpio TEGRA_GPIO(K, 3) GPIO_ACTIVE_LOW>;
-                       regulator-boot-on;
-               };
+       regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v8_ts";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               gpio = <&gpio TEGRA_GPIO(K, 3) GPIO_ACTIVE_LOW>;
+               regulator-boot-on;
+       };
 
-               regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "vdd_3v3_ts";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(H, 5) GPIO_ACTIVE_HIGH>;
-                       regulator-boot-on;
-               };
+       regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_3v3_ts";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(H, 5) GPIO_ACTIVE_HIGH>;
+               regulator-boot-on;
+       };
 
-               regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "vdd_1v8_com";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       vin-supply = <&vdd_1v8>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(X, 1) GPIO_ACTIVE_HIGH>;
-                       regulator-boot-on;
-               };
+       regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v8_com";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               vin-supply = <&vdd_1v8>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(X, 1) GPIO_ACTIVE_HIGH>;
+               regulator-boot-on;
+       };
 
-               regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "vdd_3v3_com";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       vin-supply = <&vdd_3v3_sys>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(X, 7) GPIO_ACTIVE_HIGH>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
+       regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_3v3_com";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&vdd_3v3_sys>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(X, 7) GPIO_ACTIVE_HIGH>;
+               regulator-always-on;
+               regulator-boot-on;
        };
 };
index bfdd1bf..745d234 100644 (file)
@@ -37,7 +37,7 @@
                dsi@54300000 {
                        status = "okay";
 
-                       vdd-supply = <&vdd_1v2_ap>;
+                       avdd-dsi-csi-supply = <&vdd_1v2_ap>;
 
                        panel@0 {
                                compatible = "lg,ld070wx3-sl01";
        };
 
        /* eMMC */
-       sdhci@78000600 {
+       mmc@78000600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                power-supply = <&lcd_bl_en>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
                };
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               /* FIXME: output of BQ24192 */
-               vs_sys: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "VS_SYS";
-                       regulator-min-microvolt = <4200000>;
-                       regulator-max-microvolt = <4200000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
+       /* FIXME: output of BQ24192 */
+       vs_sys: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "VS_SYS";
+               regulator-min-microvolt = <4200000>;
+               regulator-max-microvolt = <4200000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-               lcd_bl_en: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "VDD_LCD_BL";
-                       regulator-min-microvolt = <16500000>;
-                       regulator-max-microvolt = <16500000>;
-                       gpio = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vs_sys>;
-                       regulator-boot-on;
-               };
+       lcd_bl_en: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_LCD_BL";
+               regulator-min-microvolt = <16500000>;
+               regulator-max-microvolt = <16500000>;
+               gpio = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vs_sys>;
+               regulator-boot-on;
+       };
 
-               vdd_lcd: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "VD_LCD_1V8";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       gpio = <&palmas_gpio 4 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_1v8>;
-                       regulator-boot-on;
-               };
+       vdd_lcd: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "VD_LCD_1V8";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               gpio = <&palmas_gpio 4 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_1v8>;
+               regulator-boot-on;
        };
 };
index 450a1f1..fb99b3e 100644 (file)
        };
 
        host1x@50000000 {
-               compatible = "nvidia,tegra114-host1x", "simple-bus";
+               compatible = "nvidia,tegra114-host1x";
                reg = <0x50000000 0x00028000>;
                interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>, /* syncpt */
                             <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* general */
+               interrupt-names = "syncpt", "host1x";
                clocks = <&tegra_car TEGRA114_CLK_HOST1X>;
+               clock-names = "host1x";
                resets = <&tegra_car 28>;
                reset-names = "host1x";
                iommus = <&mc TEGRA_SWGROUP_HC>;
@@ -33,7 +35,7 @@
                ranges = <0x54000000 0x54000000 0x01000000>;
 
                gr2d@54140000 {
-                       compatible = "nvidia,tegra114-gr2d", "nvidia,tegra20-gr2d";
+                       compatible = "nvidia,tegra114-gr2d";
                        reg = <0x54140000 0x00040000>;
                        interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&tegra_car TEGRA114_CLK_GR2D>;
@@ -44,7 +46,7 @@
                };
 
                gr3d@54180000 {
-                       compatible = "nvidia,tegra114-gr3d", "nvidia,tegra20-gr3d";
+                       compatible = "nvidia,tegra114-gr3d";
                        reg = <0x54180000 0x00040000>;
                        clocks = <&tegra_car TEGRA114_CLK_GR3D>;
                        resets = <&tegra_car 24>;
@@ -54,7 +56,7 @@
                };
 
                dc@54200000 {
-                       compatible = "nvidia,tegra114-dc", "nvidia,tegra20-dc";
+                       compatible = "nvidia,tegra114-dc";
                        reg = <0x54200000 0x00040000>;
                        interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&tegra_car TEGRA114_CLK_DISP1>,
@@ -73,7 +75,7 @@
                };
 
                dc@54240000 {
-                       compatible = "nvidia,tegra114-dc", "nvidia,tegra20-dc";
+                       compatible = "nvidia,tegra114-dc";
                        reg = <0x54240000 0x00040000>;
                        interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&tegra_car TEGRA114_CLK_DISP2>,
 
        apbmisc@70000800 {
                compatible = "nvidia,tegra114-apbmisc", "nvidia,tegra20-apbmisc";
-               reg = <0x70000800 0x64   /* Chip revision */
-                      0x70000008 0x04>; /* Strapping options */
+               reg = <0x70000800 0x64>, /* Chip revision */
+                     <0x70000008 0x04>; /* Strapping options */
        };
 
        pinmux: pinmux@70000868 {
                compatible = "nvidia,tegra114-pinmux";
-               reg = <0x70000868 0x148         /* Pad control registers */
-                      0x70003000 0x40c>;       /* Mux registers */
+               reg = <0x70000868 0x148>, /* Pad control registers */
+                     <0x70003000 0x40c>; /* Mux registers */
        };
 
        /*
                #nvidia,mipi-calibrate-cells = <1>;
        };
 
-       sdhci@78000000 {
-               compatible = "nvidia,tegra114-sdhci", "nvidia,tegra30-sdhci";
+       mmc@78000000 {
+               compatible = "nvidia,tegra114-sdhci";
                reg = <0x78000000 0x200>;
                interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA114_CLK_SDMMC1>;
+               clock-names = "sdhci";
                resets = <&tegra_car 14>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@78000200 {
-               compatible = "nvidia,tegra114-sdhci", "nvidia,tegra30-sdhci";
+       mmc@78000200 {
+               compatible = "nvidia,tegra114-sdhci";
                reg = <0x78000200 0x200>;
                interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA114_CLK_SDMMC2>;
+               clock-names = "sdhci";
                resets = <&tegra_car 9>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@78000400 {
-               compatible = "nvidia,tegra114-sdhci", "nvidia,tegra30-sdhci";
+       mmc@78000400 {
+               compatible = "nvidia,tegra114-sdhci";
                reg = <0x78000400 0x200>;
                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA114_CLK_SDMMC3>;
+               clock-names = "sdhci";
                resets = <&tegra_car 69>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@78000600 {
-               compatible = "nvidia,tegra114-sdhci", "nvidia,tegra30-sdhci";
+       mmc@78000600 {
+               compatible = "nvidia,tegra114-sdhci";
                reg = <0x78000600 0x200>;
                interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA114_CLK_SDMMC4>;
+               clock-names = "sdhci";
                resets = <&tegra_car 15>;
                reset-names = "sdhci";
                status = "disabled";
 
        phy1: usb-phy@7d000000 {
                compatible = "nvidia,tegra114-usb-phy", "nvidia,tegra30-usb-phy";
-               reg = <0x7d000000 0x4000 0x7d000000 0x4000>;
+               reg = <0x7d000000 0x4000>,
+                     <0x7d000000 0x4000>;
                phy_type = "utmi";
                clocks = <&tegra_car TEGRA114_CLK_USBD>,
                         <&tegra_car TEGRA114_CLK_PLL_U>,
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 22>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <0>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
 
        phy3: usb-phy@7d008000 {
                compatible = "nvidia,tegra114-usb-phy", "nvidia,tegra30-usb-phy";
-               reg = <0x7d008000 0x4000 0x7d000000 0x4000>;
+               reg = <0x7d008000 0x4000>,
+                     <0x7d000000 0x4000>;
                phy_type = "utmi";
                clocks = <&tegra_car TEGRA114_CLK_USB3>,
                         <&tegra_car TEGRA114_CLK_PLL_U>,
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 59>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <0>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
index ceb3f63..28c29b6 100644 (file)
        };
 
        /* Apalis MMC1 */
-       sdhci@700b0000 {
+       mmc@700b0000 {
                status = "okay";
                bus-width = <4>;
                /* MMC1_CD# */
        };
 
        /* Apalis SD1 */
-       sdhci@700b0400 {
+       mmc@700b0400 {
                status = "okay";
                bus-width = <4>;
                /* SD1_CD# */
index 826b776..f3afde4 100644 (file)
        };
 
        /* Apalis MMC1 */
-       sdhci@700b0000 {
+       mmc@700b0000 {
                status = "okay";
                bus-width = <4>;
                /* MMC1_CD# */
        };
 
        /* Apalis SD1 */
-       sdhci@700b0400 {
+       mmc@700b0400 {
                status = "okay";
                bus-width = <4>;
                /* SD1_CD# */
index de499f7..1e30fa4 100644 (file)
@@ -40,7 +40,7 @@
                        phy-names = "pcie-0";
                        status = "okay";
 
-                       pcie@0 {
+                       ethernet@0,0 {
                                reg = <0 0 0 0 0>;
                                local-mac-address = [00 00 00 00 00 00];
                        };
                sgtl5000: codec@a {
                        compatible = "fsl,sgtl5000";
                        reg = <0x0a>;
+                       #sound-dai-cells = <0>;
                        VDDA-supply = <&reg_module_3v3_audio>;
                        VDDD-supply = <&reg_1v8_vddio>;
                        VDDIO-supply = <&reg_1v8_vddio>;
        };
 
        /* eMMC */
-       sdhci@700b0600 {
+       mmc@700b0600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
index d70a86d..608896f 100644 (file)
@@ -39,7 +39,7 @@
                        phy-names = "pcie-0";
                        status = "okay";
 
-                       pcie@0 {
+                       ethernet@0,0 {
                                reg = <0 0 0 0 0>;
                                local-mac-address = [00 00 00 00 00 00];
                        };
                sgtl5000: codec@a {
                        compatible = "fsl,sgtl5000";
                        reg = <0x0a>;
+                       #sound-dai-cells = <0>;
                        VDDA-supply = <&reg_module_3v3_audio>;
                        VDDD-supply = <&reg_1v8_vddio>;
                        VDDIO-supply = <&reg_1v8_vddio>;
        };
 
        /* eMMC */
-       sdhci@700b0600 {
+       mmc@700b0600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
index 1b567e2..414cd1c 100644 (file)
                };
 
                ports {
+                       /* Micro A/B */
+                       usb2-0 {
+                               status = "okay";
+                               mode = "host";
+                       };
+
                        /* Mini PCIe */
                        usb2-1 {
                                status = "okay";
        };
 
        /* SD card */
-       sdhci@700b0400 {
+       mmc@700b0400 {
                status = "okay";
                cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>;
                power-gpios = <&gpio TEGRA_GPIO(R, 0) GPIO_ACTIVE_HIGH>;
        };
 
        /* eMMC */
-       sdhci@700b0600 {
+       mmc@700b0600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                vbus-supply = <&vdd_usb3_vbus>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        cpus {
                };
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_mux: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "+VDD_MUX";
-                       regulator-min-microvolt = <12000000>;
-                       regulator-max-microvolt = <12000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
+       vdd_mux: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "+VDD_MUX";
+               regulator-min-microvolt = <12000000>;
+               regulator-max-microvolt = <12000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-               vdd_5v0_sys: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "+5V_SYS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_5v0_sys: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_SYS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_3v3_sys: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "+3.3V_SYS";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_3v3_sys: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_SYS";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_3v3_run: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "+3.3V_RUN";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_sys>;
-               };
+       vdd_3v3_run: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_RUN";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 
-               vdd_3v3_hdmi: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "+3.3V_AVDD_HDMI_AP_GATED";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       vin-supply = <&vdd_3v3_run>;
-               };
+       vdd_3v3_hdmi: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_AVDD_HDMI_AP_GATED";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&vdd_3v3_run>;
+       };
 
-               vdd_usb1_vbus: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
-                       regulator-name = "+USB0_VBUS_SW";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_usb1_vbus: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "+USB0_VBUS_SW";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_usb3_vbus: regulator@8 {
-                       compatible = "regulator-fixed";
-                       reg = <8>;
-                       regulator-name = "+5V_USB_HS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(N, 5) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_usb3_vbus: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_USB_HS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(N, 5) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_3v3_lp0: regulator@10 {
-                       compatible = "regulator-fixed";
-                       reg = <10>;
-                       regulator-name = "+3.3V_LP0";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_sys>;
-               };
+       vdd_3v3_lp0: regulator@7 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_LP0";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 
-               vdd_hdmi_pll: regulator@11 {
-                       compatible = "regulator-fixed";
-                       reg = <11>;
-                       regulator-name = "+1.05V_RUN_AVDD_HDMI_PLL";
-                       regulator-min-microvolt = <1050000>;
-                       regulator-max-microvolt = <1050000>;
-                       gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_LOW>;
-                       vin-supply = <&vdd_1v05_run>;
-               };
+       vdd_hdmi_pll: regulator@8 {
+               compatible = "regulator-fixed";
+               regulator-name = "+1.05V_RUN_AVDD_HDMI_PLL";
+               regulator-min-microvolt = <1050000>;
+               regulator-max-microvolt = <1050000>;
+               gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_LOW>;
+               vin-supply = <&vdd_1v05_run>;
+       };
 
-               vdd_5v0_hdmi: regulator@12 {
-                       compatible = "regulator-fixed";
-                       reg = <12>;
-                       regulator-name = "+5V_HDMI_CON";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_5v0_hdmi: regulator@9 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_HDMI_CON";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               /* Molex power connector */
-               vdd_5v0_sata: regulator@13 {
-                       compatible = "regulator-fixed";
-                       reg = <13>;
-                       regulator-name = "+5V_SATA";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(EE, 2) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       /* Molex power connector */
+       vdd_5v0_sata: regulator@10 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_SATA";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(EE, 2) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_12v0_sata: regulator@14 {
-                       compatible = "regulator-fixed";
-                       reg = <14>;
-                       regulator-name = "+12V_SATA";
-                       regulator-min-microvolt = <12000000>;
-                       regulator-max-microvolt = <12000000>;
-                       gpio = <&gpio TEGRA_GPIO(EE, 2) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_12v0_sata: regulator@11 {
+               compatible = "regulator-fixed";
+               regulator-name = "+12V_SATA";
+               regulator-min-microvolt = <12000000>;
+               regulator-max-microvolt = <12000000>;
+               gpio = <&gpio TEGRA_GPIO(EE, 2) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_mux>;
        };
 
        sound {
index d97791b..1d2aac2 100644 (file)
        panel: panel {
                compatible = "auo,b133xtn01";
 
+               power-supply = <&vdd_3v3_panel>;
                backlight = <&backlight>;
                ddc-i2c-bus = <&dpaux>;
        };
 
-       sdhci@700b0400 { /* SD Card on this bus */
+       mmc@700b0400 { /* SD Card on this bus */
                wp-gpios = <&gpio TEGRA_GPIO(Q, 4) GPIO_ACTIVE_LOW>;
        };
 
index 2a029ee..677babd 100644 (file)
@@ -18,6 +18,7 @@
        panel: panel {
                compatible = "samsung,ltn140at29-301";
 
+               power-supply = <&vdd_3v3_panel>;
                backlight = <&backlight>;
                ddc-i2c-bus = <&dpaux>;
        };
index 9b1af50..5f71add 100644 (file)
@@ -48,6 +48,9 @@
                sor@54540000 {
                        status = "okay";
 
+                       avdd-io-hdmi-dp-supply = <&vdd_3v3_hdmi>;
+                       vdd-hdmi-dp-pll-supply = <&vdd_hdmi_pll>;
+
                        nvidia,dpaux = <&dpaux>;
                        nvidia,panel = <&panel>;
                };
                reset-gpios = <&gpio TEGRA_GPIO(X, 7) GPIO_ACTIVE_LOW>;
        };
 
-       sdhci@700b0000 { /* WiFi/BT on this bus */
+       mmc@700b0000 { /* WiFi/BT on this bus */
                status = "okay";
                bus-width = <4>;
                no-1-8-v;
                keep-power-in-suspend;
        };
 
-       sdhci@700b0400 { /* SD Card on this bus */
+       mmc@700b0400 { /* SD Card on this bus */
                status = "okay";
                cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>;
                power-gpios = <&gpio TEGRA_GPIO(R, 0) GPIO_ACTIVE_HIGH>;
                vqmmc-supply = <&vddio_sdmmc3>;
        };
 
-       sdhci@700b0600 { /* eMMC on this bus */
+       mmc@700b0600 { /* eMMC on this bus */
                status = "okay";
                bus-width = <8>;
                no-1-8-v;
                         256>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        cpus {
                };
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_mux: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "+VDD_MUX";
-                       regulator-min-microvolt = <12000000>;
-                       regulator-max-microvolt = <12000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
+       vdd_mux: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "+VDD_MUX";
+               regulator-min-microvolt = <12000000>;
+               regulator-max-microvolt = <12000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-               vdd_5v0_sys: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "+5V_SYS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_5v0_sys: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_SYS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_3v3_sys: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "+3.3V_SYS";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_3v3_sys: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_SYS";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_3v3_run: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "+3.3V_RUN";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_sys>;
-               };
+       vdd_3v3_run: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_RUN";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 
-               vdd_3v3_hdmi: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "+3.3V_AVDD_HDMI_AP_GATED";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       vin-supply = <&vdd_3v3_run>;
-               };
+       vdd_3v3_hdmi: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_AVDD_HDMI_AP_GATED";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&vdd_3v3_run>;
+       };
 
-               vdd_led: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "+VDD_LED";
-                       gpio = <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_led: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "+VDD_LED";
+               gpio = <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_5v0_ts: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg = <6>;
-                       regulator-name = "+5V_VDD_TS_SW";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-boot-on;
-                       gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_5v0_ts: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_VDD_TS_SW";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-boot-on;
+               gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_usb1_vbus: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
-                       regulator-name = "+5V_USB_HS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_usb1_vbus: regulator@7 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_USB_HS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_usb3_vbus: regulator@8 {
-                       compatible = "regulator-fixed";
-                       reg = <8>;
-                       regulator-name = "+5V_USB_SS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(N, 5) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_usb3_vbus: regulator@8 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_USB_SS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(N, 5) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_3v3_panel: regulator@9 {
-                       compatible = "regulator-fixed";
-                       reg = <9>;
-                       regulator-name = "+3.3V_PANEL";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       gpio = <&pmic 4 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_run>;
-               };
+       vdd_3v3_panel: regulator@9 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_PANEL";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&pmic 4 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_run>;
+       };
 
-               vdd_3v3_lp0: regulator@10 {
-                       compatible = "regulator-fixed";
-                       reg = <10>;
-                       regulator-name = "+3.3V_LP0";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       /*
-                        * TODO: find a way to wire this up with the USB EHCI
-                        * controllers so that it can be enabled on demand.
-                        */
-                       regulator-always-on;
-                       gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_sys>;
-               };
+       vdd_3v3_lp0: regulator@10 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_LP0";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               /*
+                * TODO: find a way to wire this up with the USB EHCI
+                * controllers so that it can be enabled on demand.
+                */
+               regulator-always-on;
+               gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 
-               vdd_hdmi_pll: regulator@11 {
-                       compatible = "regulator-fixed";
-                       reg = <11>;
-                       regulator-name = "+1.05V_RUN_AVDD_HDMI_PLL";
-                       regulator-min-microvolt = <1050000>;
-                       regulator-max-microvolt = <1050000>;
-                       gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_LOW>;
-                       vin-supply = <&vdd_1v05_run>;
-               };
+       vdd_hdmi_pll: regulator@11 {
+               compatible = "regulator-fixed";
+               regulator-name = "+1.05V_RUN_AVDD_HDMI_PLL";
+               regulator-min-microvolt = <1050000>;
+               regulator-max-microvolt = <1050000>;
+               gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_LOW>;
+               vin-supply = <&vdd_1v05_run>;
+       };
 
-               vdd_5v0_hdmi: regulator@12 {
-                       compatible = "regulator-fixed";
-                       reg = <12>;
-                       regulator-name = "+5V_HDMI_CON";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_5v0_hdmi: regulator@12 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_HDMI_CON";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
        };
 
        sound {
index 73361db..e6b54ac 100644 (file)
                };
        };
 
-       sdhci@700b0400 {
+       mmc@700b0400 {
                cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_HIGH>;
                power-gpios = <&gpio TEGRA_GPIO(R, 0) GPIO_ACTIVE_HIGH>;
                wp-gpios = <&gpio TEGRA_GPIO(Q, 4) GPIO_ACTIVE_LOW>;
                vqmmc-supply = <&vddio_sdmmc3>;
        };
 
-       sdhci@700b0600 {
+       mmc@700b0600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                default-brightness-level = <6>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
 
        panel: panel {
                compatible = "lg,lp129qe";
-
+               power-supply = <&vdd_3v3_panel>;
                backlight = <&backlight>;
                ddc-i2c-bus = <&dpaux>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_mux: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "+VDD_MUX";
-                       regulator-min-microvolt = <12000000>;
-                       regulator-max-microvolt = <12000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
+       vdd_mux: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "+VDD_MUX";
+               regulator-min-microvolt = <12000000>;
+               regulator-max-microvolt = <12000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-               vdd_5v0_sys: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "+5V_SYS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_5v0_sys: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_SYS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_3v3_sys: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "+3.3V_SYS";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_3v3_sys: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_SYS";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_3v3_run: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "+3.3V_RUN";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_sys>;
-               };
+       vdd_3v3_run: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_RUN";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 
-               vdd_3v3_hdmi: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "+3.3V_AVDD_HDMI_AP_GATED";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       vin-supply = <&vdd_3v3_run>;
-               };
+       vdd_3v3_hdmi: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_AVDD_HDMI_AP_GATED";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&vdd_3v3_run>;
+       };
 
-               vdd_led: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "+VDD_LED";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       gpio = <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_led: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "+VDD_LED";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_5v0_ts: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg = <6>;
-                       regulator-name = "+5V_VDD_TS_SW";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-boot-on;
-                       gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_5v0_ts: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_VDD_TS_SW";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-boot-on;
+               gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_usb1_vbus: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
-                       regulator-name = "+5V_USB_HS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_usb1_vbus: regulator@7 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_USB_HS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_usb3_vbus: regulator@8 {
-                       compatible = "regulator-fixed";
-                       reg = <8>;
-                       regulator-name = "+5V_USB_SS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(N, 5) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_usb3_vbus: regulator@8 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_USB_SS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(N, 5) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_3v3_panel: regulator@9 {
-                       compatible = "regulator-fixed";
-                       reg = <9>;
-                       regulator-name = "+3.3V_PANEL";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       gpio = <&pmic 4 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_run>;
-               };
+       vdd_3v3_panel: regulator@9 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_PANEL";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&pmic 4 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_run>;
+       };
 
-               vdd_3v3_lp0: regulator@10 {
-                       compatible = "regulator-fixed";
-                       reg = <10>;
-                       regulator-name = "+3.3V_LP0";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       /*
-                        * TODO: find a way to wire this up with the USB EHCI
-                        * controllers so that it can be enabled on demand.
-                        */
-                       regulator-always-on;
-                       gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_sys>;
-               };
+       vdd_3v3_lp0: regulator@10 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_LP0";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               /*
+                * TODO: find a way to wire this up with the USB EHCI
+                * controllers so that it can be enabled on demand.
+                */
+               regulator-always-on;
+               gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 
-               vdd_hdmi_pll: regulator@11 {
-                       compatible = "regulator-fixed";
-                       reg = <11>;
-                       regulator-name = "+1.05V_RUN_AVDD_HDMI_PLL";
-                       regulator-min-microvolt = <1050000>;
-                       regulator-max-microvolt = <1050000>;
-                       gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_LOW>;
-                       vin-supply = <&vdd_1v05_run>;
-               };
+       vdd_hdmi_pll: regulator@11 {
+               compatible = "regulator-fixed";
+               regulator-name = "+1.05V_RUN_AVDD_HDMI_PLL";
+               regulator-min-microvolt = <1050000>;
+               regulator-max-microvolt = <1050000>;
+               gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_LOW>;
+               vin-supply = <&vdd_1v05_run>;
+       };
 
-               vdd_5v0_hdmi: regulator@12 {
-                       compatible = "regulator-fixed";
-                       reg = <12>;
-                       regulator-name = "+5V_HDMI_CON";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_5v0_hdmi: regulator@12 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_HDMI_CON";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
        };
 
        sound {
index 94cac13..64f488b 100644 (file)
@@ -22,9 +22,9 @@
        pcie@1003000 {
                compatible = "nvidia,tegra124-pcie";
                device_type = "pci";
-               reg = <0x0 0x01003000 0x0 0x00000800   /* PADS registers */
-                      0x0 0x01003800 0x0 0x00000800   /* AFI registers */
-                      0x0 0x02000000 0x0 0x10000000>; /* configuration space */
+               reg = <0x0 0x01003000 0x0 0x00000800>, /* PADS registers */
+                     <0x0 0x01003800 0x0 0x00000800>, /* AFI registers */
+                     <0x0 0x02000000 0x0 0x10000000>; /* configuration space */
                reg-names = "pads", "afi", "cs";
                interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
                             <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                #address-cells = <3>;
                #size-cells = <2>;
 
-               ranges = <0x82000000 0 0x01000000 0x0 0x01000000 0 0x00001000   /* port 0 configuration space */
-                         0x82000000 0 0x01001000 0x0 0x01001000 0 0x00001000   /* port 1 configuration space */
-                         0x81000000 0 0x0        0x0 0x12000000 0 0x00010000   /* downstream I/O (64 KiB) */
-                         0x82000000 0 0x13000000 0x0 0x13000000 0 0x0d000000   /* non-prefetchable memory (208 MiB) */
-                         0xc2000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
+               ranges = <0x02000000 0 0x01000000 0x0 0x01000000 0 0x00001000>, /* port 0 configuration space */
+                        <0x02000000 0 0x01001000 0x0 0x01001000 0 0x00001000>, /* port 1 configuration space */
+                        <0x01000000 0 0x0        0x0 0x12000000 0 0x00010000>, /* downstream I/O (64 KiB) */
+                        <0x02000000 0 0x13000000 0x0 0x13000000 0 0x0d000000>, /* non-prefetchable memory (208 MiB) */
+                        <0x42000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
 
                clocks = <&tegra_car TEGRA124_CLK_PCIE>,
                         <&tegra_car TEGRA124_CLK_AFI>,
        };
 
        host1x@50000000 {
-               compatible = "nvidia,tegra124-host1x", "simple-bus";
+               compatible = "nvidia,tegra124-host1x";
                reg = <0x0 0x50000000 0x0 0x00034000>;
                interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>, /* syncpt */
                             <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* general */
+               interrupt-names = "syncpt", "host1x";
                clocks = <&tegra_car TEGRA124_CLK_HOST1X>;
+               clock-names = "host1x";
                resets = <&tegra_car 28>;
                reset-names = "host1x";
                iommus = <&mc TEGRA_SWGROUP_HC>;
                        compatible = "nvidia,tegra124-dc";
                        reg = <0x0 0x54200000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&tegra_car TEGRA124_CLK_DISP1>,
-                                <&tegra_car TEGRA124_CLK_PLL_P>;
-                       clock-names = "dc", "parent";
+                       clocks = <&tegra_car TEGRA124_CLK_DISP1>;
+                       clock-names = "dc";
                        resets = <&tegra_car 27>;
                        reset-names = "dc";
 
                        compatible = "nvidia,tegra124-dc";
                        reg = <0x0 0x54240000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&tegra_car TEGRA124_CLK_DISP2>,
-                                <&tegra_car TEGRA124_CLK_PLL_P>;
-                       clock-names = "dc", "parent";
+                       clocks = <&tegra_car TEGRA124_CLK_DISP2>;
+                       clock-names = "dc";
                        resets = <&tegra_car 26>;
                        reset-names = "dc";
 
                        resets = <&tegra_car 181>;
                        reset-names = "dpaux";
                        status = "disabled";
+
+                       i2c-bus {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                       };
                };
        };
 
                interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
 
                #iommu-cells = <1>;
+               #reset-cells = <1>;
        };
 
        emc: external-memory-controller@7001b000 {
                         <&tegra_car TEGRA124_CLK_XUSB_HOST_SRC>,
                         <&tegra_car TEGRA124_CLK_XUSB_FALCON_SRC>,
                         <&tegra_car TEGRA124_CLK_XUSB_SS>,
-                        <&tegra_car TEGRA124_CLK_XUSB_SS_DIV2>,
                         <&tegra_car TEGRA124_CLK_XUSB_SS_SRC>,
+                        <&tegra_car TEGRA124_CLK_XUSB_SS_DIV2>,
                         <&tegra_car TEGRA124_CLK_XUSB_HS_SRC>,
                         <&tegra_car TEGRA124_CLK_XUSB_FS_SRC>,
                         <&tegra_car TEGRA124_CLK_PLL_U_480M>,
                         <&tegra_car TEGRA124_CLK_PLL_E>;
                clock-names = "xusb_host", "xusb_host_src",
                              "xusb_falcon_src", "xusb_ss",
-                             "xusb_ss_div2", "xusb_ss_src",
+                             "xusb_ss_src", "xusb_ss_div2",
                              "xusb_hs_src", "xusb_fs_src",
                              "pll_u_480m", "clk_m", "pll_e";
                resets = <&tegra_car 89>, <&tegra_car 156>,
                };
        };
 
-       sdhci@700b0000 {
+       mmc@700b0000 {
                compatible = "nvidia,tegra124-sdhci";
                reg = <0x0 0x700b0000 0x0 0x200>;
                interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA124_CLK_SDMMC1>;
+               clock-names = "sdhci";
                resets = <&tegra_car 14>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@700b0200 {
+       mmc@700b0200 {
                compatible = "nvidia,tegra124-sdhci";
                reg = <0x0 0x700b0200 0x0 0x200>;
                interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA124_CLK_SDMMC2>;
+               clock-names = "sdhci";
                resets = <&tegra_car 9>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@700b0400 {
+       mmc@700b0400 {
                compatible = "nvidia,tegra124-sdhci";
                reg = <0x0 0x700b0400 0x0 0x200>;
                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA124_CLK_SDMMC3>;
+               clock-names = "sdhci";
                resets = <&tegra_car 69>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@700b0600 {
+       mmc@700b0600 {
                compatible = "nvidia,tegra124-sdhci";
                reg = <0x0 0x700b0600 0x0 0x200>;
                interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA124_CLK_SDMMC4>;
+               clock-names = "sdhci";
                resets = <&tegra_car 15>;
                reset-names = "sdhci";
                status = "disabled";
 
        soctherm: thermal-sensor@700e2000 {
                compatible = "nvidia,tegra124-soctherm";
-               reg = <0x0 0x700e2000 0x0 0x600 /* SOC_THERM reg_base */
-                       0x0 0x60006000 0x0 0x400>; /* CAR reg_base */
+               reg = <0x0 0x700e2000 0x0 0x600>, /* SOC_THERM reg_base */
+                     <0x0 0x60006000 0x0 0x400>; /* CAR reg_base */
                reg-names = "soctherm-reg", "car-reg";
                interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA124_CLK_TSENSOR>,
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 22>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <0>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 58>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <0>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 59>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <0>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
diff --git a/arch/arm/boot/dts/tegra20-acer-a500-picasso.dts b/arch/arm/boot/dts/tegra20-acer-a500-picasso.dts
new file mode 100644 (file)
index 0000000..2d683c9
--- /dev/null
@@ -0,0 +1,1438 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+
+#include <dt-bindings/input/gpio-keys.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/thermal/thermal.h>
+
+#include "tegra20.dtsi"
+#include "tegra20-cpu-opp.dtsi"
+#include "tegra20-cpu-opp-microvolt.dtsi"
+
+/ {
+       model = "Acer Iconia Tab A500";
+       compatible = "acer,picasso", "nvidia,tegra20";
+
+       aliases {
+               rtc0 = &pmic;
+               rtc1 = "/rtc@7000e000";
+
+               serial0 = &uartd; /* Docking station */
+               serial1 = &uartc; /* Bluetooth */
+               serial2 = &uartb; /* GPS */
+       };
+
+       /*
+        * The decompressor and also some bootloaders rely on a
+        * pre-existing /chosen node to be available to insert the
+        * command line and merge other ATAGS info.
+        */
+       chosen {};
+
+       memory@0 {
+               reg = <0x00000000 0x40000000>;
+       };
+
+       reserved-memory {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               ramoops@2ffe0000 {
+                       compatible = "ramoops";
+                       reg = <0x2ffe0000 0x10000>;     /* 64kB */
+                       console-size = <0x8000>;        /* 32kB */
+                       record-size = <0x400>;          /*  1kB */
+                       ecc-size = <16>;
+               };
+
+               linux,cma@30000000 {
+                       compatible = "shared-dma-pool";
+                       alloc-ranges = <0x30000000 0x10000000>;
+                       size = <0x10000000>; /* 256MiB */
+                       linux,cma-default;
+                       reusable;
+               };
+       };
+
+       host1x@50000000 {
+               dc@54200000 {
+                       rgb {
+                               status = "okay";
+
+                               port@0 {
+                                       lcd_output: endpoint {
+                                               remote-endpoint = <&lvds_encoder_input>;
+                                               bus-width = <18>;
+                                       };
+                               };
+                       };
+               };
+
+               hdmi@54280000 {
+                       status = "okay";
+
+                       vdd-supply = <&hdmi_vdd_reg>;
+                       pll-supply = <&hdmi_pll_reg>;
+                       hdmi-supply = <&vdd_5v0_sys>;
+
+                       nvidia,ddc-i2c-bus = <&hdmi_ddc>;
+                       nvidia,hpd-gpio = <&gpio TEGRA_GPIO(N, 7)
+                               GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       pinmux@70000014 {
+               pinctrl-names = "default";
+               pinctrl-0 = <&state_default>;
+
+               state_default: pinmux {
+                       ata {
+                               nvidia,pins = "ata";
+                               nvidia,function = "ide";
+                       };
+                       atb {
+                               nvidia,pins = "atb", "gma", "gme";
+                               nvidia,function = "sdio4";
+                       };
+                       atc {
+                               nvidia,pins = "atc";
+                               nvidia,function = "nand";
+                       };
+                       atd {
+                               nvidia,pins = "atd", "ate", "gmb", "spia",
+                                       "spib", "spic";
+                               nvidia,function = "gmi";
+                       };
+                       cdev1 {
+                               nvidia,pins = "cdev1";
+                               nvidia,function = "plla_out";
+                       };
+                       cdev2 {
+                               nvidia,pins = "cdev2";
+                               nvidia,function = "pllp_out4";
+                       };
+                       crtp {
+                               nvidia,pins = "crtp", "lm1";
+                               nvidia,function = "crt";
+                       };
+                       csus {
+                               nvidia,pins = "csus";
+                               nvidia,function = "vi_sensor_clk";
+                       };
+                       dap1 {
+                               nvidia,pins = "dap1";
+                               nvidia,function = "dap1";
+                       };
+                       dap2 {
+                               nvidia,pins = "dap2";
+                               nvidia,function = "dap2";
+                       };
+                       dap3 {
+                               nvidia,pins = "dap3";
+                               nvidia,function = "dap3";
+                       };
+                       dap4 {
+                               nvidia,pins = "dap4";
+                               nvidia,function = "dap4";
+                       };
+                       dta {
+                               nvidia,pins = "dta", "dtb", "dtc", "dtd", "dte";
+                               nvidia,function = "vi";
+                       };
+                       dtf {
+                               nvidia,pins = "dtf";
+                               nvidia,function = "i2c3";
+                       };
+                       gmc {
+                               nvidia,pins = "gmc";
+                               nvidia,function = "uartd";
+                       };
+                       gmd {
+                               nvidia,pins = "gmd";
+                               nvidia,function = "sflash";
+                       };
+                       gpu {
+                               nvidia,pins = "gpu";
+                               nvidia,function = "pwm";
+                       };
+                       gpu7 {
+                               nvidia,pins = "gpu7";
+                               nvidia,function = "rtck";
+                       };
+                       gpv {
+                               nvidia,pins = "gpv", "slxa";
+                               nvidia,function = "pcie";
+                       };
+                       hdint {
+                               nvidia,pins = "hdint";
+                               nvidia,function = "hdmi";
+                       };
+                       i2cp {
+                               nvidia,pins = "i2cp";
+                               nvidia,function = "i2cp";
+                       };
+                       irrx {
+                               nvidia,pins = "irrx", "irtx";
+                               nvidia,function = "uartb";
+                       };
+                       kbca {
+                               nvidia,pins = "kbca", "kbcb", "kbcc", "kbcd",
+                                       "kbce", "kbcf";
+                               nvidia,function = "kbc";
+                       };
+                       lcsn {
+                               nvidia,pins = "lcsn", "ldc", "lm0", "lpw1",
+                                       "lsdi", "lvp0";
+                               nvidia,function = "rsvd4";
+                       };
+                       ld0 {
+                               nvidia,pins = "ld0", "ld1", "ld2", "ld3", "ld4",
+                                       "ld5", "ld6", "ld7", "ld8", "ld9",
+                                       "ld10", "ld11", "ld12", "ld13", "ld14",
+                                       "ld15", "ld16", "ld17", "ldi", "lhp0",
+                                       "lhp1", "lhp2", "lhs", "lpp", "lsc0",
+                                       "lsc1", "lsck", "lsda", "lspi", "lvp1",
+                                       "lvs";
+                               nvidia,function = "displaya";
+                       };
+                       owc {
+                               nvidia,pins = "owc", "spdi", "spdo", "uac";
+                               nvidia,function = "rsvd2";
+                       };
+                       pmc {
+                               nvidia,pins = "pmc";
+                               nvidia,function = "pwr_on";
+                       };
+                       rm {
+                               nvidia,pins = "rm";
+                               nvidia,function = "i2c1";
+                       };
+                       sdb {
+                               nvidia,pins = "sdb", "sdc", "sdd", "slxc", "slxk";
+                               nvidia,function = "sdio3";
+                       };
+                       sdio1 {
+                               nvidia,pins = "sdio1";
+                               nvidia,function = "sdio1";
+                       };
+                       slxd {
+                               nvidia,pins = "slxd";
+                               nvidia,function = "spdif";
+                       };
+                       spid {
+                               nvidia,pins = "spid", "spie", "spif";
+                               nvidia,function = "spi1";
+                       };
+                       spig {
+                               nvidia,pins = "spig", "spih";
+                               nvidia,function = "spi2_alt";
+                       };
+                       uaa {
+                               nvidia,pins = "uaa", "uab", "uda";
+                               nvidia,function = "ulpi";
+                       };
+                       uad {
+                               nvidia,pins = "uad";
+                               nvidia,function = "irda";
+                       };
+                       uca {
+                               nvidia,pins = "uca", "ucb";
+                               nvidia,function = "uartc";
+                       };
+                       conf_ata {
+                               nvidia,pins = "ata", "atb", "atc", "atd",
+                                       "cdev1", "cdev2", "csus", "dap1",
+                                       "dap4", "dte", "dtf", "gma", "gmc",
+                                       "gme", "gpu", "gpu7", "gpv", "i2cp",
+                                       "irrx", "irtx", "pta", "rm",
+                                       "sdc", "sdd", "slxc", "slxd", "slxk",
+                                       "spdi", "spdo", "uac", "uad", "uda";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                       };
+                       conf_ate {
+                               nvidia,pins = "ate", "dap2", "dap3",
+                                       "gmd", "owc", "spia", "spib", "spic",
+                                       "spid", "spie";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                       };
+                       conf_ck32 {
+                               nvidia,pins = "ck32", "ddrc", "pmca", "pmcb",
+                                       "pmcc", "pmcd", "pmce", "xm2c", "xm2d";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                       };
+                       conf_crtp {
+                               nvidia,pins = "crtp", "gmb", "slxa", "spig",
+                                       "spih";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                       };
+                       conf_dta {
+                               nvidia,pins = "dta", "dtb", "dtc", "dtd", "kbcb";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                       };
+                       conf_dte {
+                               nvidia,pins = "spif";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                       };
+                       conf_hdint {
+                               nvidia,pins = "hdint", "lcsn", "ldc", "lm1",
+                                       "lpw1", "lsck", "lsda", "lsdi",
+                                       "lvp0";
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                       };
+                       conf_kbca {
+                               nvidia,pins = "kbca", "kbcc", "kbcd",
+                                       "kbce", "kbcf", "sdio1", "uaa",
+                                       "uab", "uca", "ucb";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                       };
+                       conf_lc {
+                               nvidia,pins = "lc", "ls";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                       };
+                       conf_ld0 {
+                               nvidia,pins = "ld0", "ld1", "ld2", "ld3", "ld4",
+                                       "ld5", "ld6", "ld7", "ld8", "ld9",
+                                       "ld10", "ld11", "ld12", "ld13", "ld14",
+                                       "ld15", "ld16", "ld17", "ldi", "lhp0",
+                                       "lhp1", "lhp2", "lhs", "lm0", "lpp",
+                                       "lpw0", "lpw2", "lsc0", "lsc1", "lspi",
+                                       "lvp1", "lvs", "pmc", "sdb";
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                       };
+                       conf_ld17_0 {
+                               nvidia,pins = "ld17_0";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                       };
+                       drive_ddc {
+                               nvidia,pins = "drive_ddc",
+                                               "drive_vi1",
+                                               "drive_sdio1";
+                               nvidia,schmitt = <TEGRA_PIN_ENABLE>;
+                               nvidia,low-power-mode = <TEGRA_PIN_LP_DRIVE_DIV_4>;
+                       };
+                       drive_dbg {
+                               nvidia,pins = "drive_dbg",
+                                               "drive_vi2",
+                                               "drive_at1",
+                                               "drive_ao1";
+                               nvidia,schmitt = <TEGRA_PIN_ENABLE>;
+                               nvidia,low-power-mode = <TEGRA_PIN_LP_DRIVE_DIV_4>;
+                               nvidia,slew-rate-rising = <TEGRA_PIN_SLEW_RATE_FASTEST>;
+                               nvidia,slew-rate-falling = <TEGRA_PIN_SLEW_RATE_FASTEST>;
+                       };
+               };
+
+               state_i2cmux_ddc: pinmux_i2cmux_ddc {
+                       ddc {
+                               nvidia,pins = "ddc";
+                               nvidia,function = "i2c2";
+                       };
+                       pta {
+                               nvidia,pins = "pta";
+                               nvidia,function = "rsvd4";
+                       };
+               };
+
+               state_i2cmux_pta: pinmux_i2cmux_pta {
+                       ddc {
+                               nvidia,pins = "ddc";
+                               nvidia,function = "rsvd4";
+                       };
+                       pta {
+                               nvidia,pins = "pta";
+                               nvidia,function = "i2c2";
+                       };
+               };
+
+               state_i2cmux_idle: pinmux_i2cmux_idle {
+                       ddc {
+                               nvidia,pins = "ddc";
+                               nvidia,function = "rsvd4";
+                       };
+                       pta {
+                               nvidia,pins = "pta";
+                               nvidia,function = "rsvd4";
+                       };
+               };
+       };
+
+       tegra_i2s1: i2s@70002800 {
+               status = "okay";
+       };
+
+       uartb: serial@70006040 {
+               compatible = "nvidia,tegra20-hsuart";
+               /* GPS BCM4751 */
+       };
+
+       uartc: serial@70006200 {
+               compatible = "nvidia,tegra20-hsuart";
+               status = "okay";
+
+               /* Azurewave AW-NH665 BCM4329B1 */
+               bluetooth {
+                       compatible = "brcm,bcm4329-bt";
+
+                       /* PLLP 216MHz / 16 / 4 */
+                       max-speed = <3375000>;
+
+                       clocks = <&rtc_32k_wifi>;
+                       clock-names = "txco";
+
+                       vbat-supply  = <&vdd_3v3_sys>;
+                       vddio-supply = <&vdd_1v8_sys>;
+
+                       device-wakeup-gpios = <&gpio TEGRA_GPIO(U, 1) GPIO_ACTIVE_HIGH>;
+                       host-wakeup-gpios =   <&gpio TEGRA_GPIO(U, 6) GPIO_ACTIVE_HIGH>;
+                       shutdown-gpios =      <&gpio TEGRA_GPIO(U, 0) GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       uartd: serial@70006300 {
+               /* Docking station */
+       };
+
+       i2c@7000c000 {
+               clock-frequency = <400000>;
+               status = "okay";
+
+               wm8903: audio-codec@1a {
+                       compatible = "wlf,wm8903";
+                       reg = <0x1a>;
+
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(X, 3) IRQ_TYPE_LEVEL_HIGH>;
+
+                       gpio-controller;
+                       #gpio-cells = <2>;
+
+                       gpio-cfg = <
+                               0x0000 /* MIC_LR_OUT#    GPIO, output, low */
+                               0x0000 /* FM2018-enable  GPIO, output, low */
+                               0x0000 /* Speaker-enable GPIO, output, low */
+                               0x0200 /* Interrupt, output */
+                               0x01a0 /* BCLK, input, active high */
+                       >;
+
+                       AVDD-supply  = <&vdd_1v8_sys>;
+                       CPVDD-supply = <&vdd_1v8_sys>;
+                       DBVDD-supply = <&vdd_1v8_sys>;
+                       DCVDD-supply = <&vdd_1v8_sys>;
+               };
+
+               touchscreen@4c {
+                       compatible = "atmel,maxtouch";
+                       reg = <0x4c>;
+
+                       atmel,cfg_name = "maxtouch-acer-iconia-tab-a500.cfg";
+
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(V, 6) IRQ_TYPE_LEVEL_LOW>;
+
+                       reset-gpios = <&gpio TEGRA_GPIO(Q, 7) GPIO_ACTIVE_HIGH>;
+
+                       avdd-supply = <&vdd_3v3_sys>;
+                       vdd-supply  = <&vdd_3v3_sys>;
+               };
+
+               gyroscope@68 {
+                       compatible = "invensense,mpu3050";
+                       reg = <0x68>;
+
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(Z, 4) IRQ_TYPE_EDGE_RISING>;
+
+                       vdd-supply    = <&vdd_3v3_sys>;
+                       vlogic-supply = <&vdd_1v8_sys>;
+
+                       mount-matrix =   "0",  "1",  "0",
+                                        "1",  "0",  "0",
+                                        "0",  "0", "-1";
+
+                       i2c-gate {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               accelerometer@f {
+                                       compatible = "kionix,kxtf9";
+                                       reg = <0x0f>;
+
+                                       interrupt-parent = <&gpio>;
+                                       interrupts = <TEGRA_GPIO(S, 7) IRQ_TYPE_EDGE_RISING>;
+
+                                       mount-matrix =   "0",  "1",  "0",
+                                                        "1",  "0",  "0",
+                                                        "0",  "0", "-1";
+                               };
+                       };
+               };
+       };
+
+       i2c@7000c400 {
+               clock-frequency = <10000>;
+               status = "okay";
+       };
+
+       i2cmux {
+               compatible = "i2c-mux-pinctrl";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               i2c-parent = <&{/i2c@7000c400}>;
+
+               pinctrl-names = "ddc", "pta", "idle";
+               pinctrl-0 = <&state_i2cmux_ddc>;
+               pinctrl-1 = <&state_i2cmux_pta>;
+               pinctrl-2 = <&state_i2cmux_idle>;
+
+               hdmi_ddc: i2c@0 {
+                       reg = <0>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               panel_ddc: i2c@1 {
+                       reg = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+       };
+
+       pwm: pwm@7000a000 {
+               status = "okay";
+       };
+
+       i2c@7000d000 {
+               clock-frequency = <100000>;
+               status = "okay";
+
+               magnetometer@c {
+                       compatible = "ak,ak8975";
+                       reg = <0x0c>;
+
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(N, 5) IRQ_TYPE_EDGE_RISING>;
+
+                       vdd-supply = <&vdd_3v3_sys>;
+                       vid-supply = <&vdd_1v8_sys>;
+
+                       mount-matrix =  "1",  "0",  "0",
+                                       "0", "-1",  "0",
+                                       "0",  "0", "-1";
+               };
+
+               pmic: pmic@34 {
+                       compatible = "ti,tps6586x";
+                       reg = <0x34>;
+
+                       interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+
+                       #gpio-cells = <2>;
+                       gpio-controller;
+
+                       sys-supply       = <&vdd_5v0_sys>;
+                       vin-sm0-supply   = <&sys_reg>;
+                       vin-sm1-supply   = <&sys_reg>;
+                       vin-sm2-supply   = <&sys_reg>;
+                       vinldo01-supply  = <&sm2_reg>;
+                       vinldo23-supply  = <&sm2_reg>;
+                       vinldo4-supply   = <&sm2_reg>;
+                       vinldo678-supply = <&sm2_reg>;
+                       vinldo9-supply   = <&sm2_reg>;
+
+                       regulators {
+                               sys_reg: sys {
+                                       regulator-name = "vdd_sys";
+                                       regulator-always-on;
+                               };
+
+                               vdd_core: sm0 {
+                                       regulator-name = "vdd_sm0,vdd_core";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1300000>;
+                                       regulator-coupled-with = <&rtc_vdd &vdd_cpu>;
+                                       regulator-coupled-max-spread = <170000 550000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+
+                                       nvidia,tegra-core-regulator;
+                               };
+
+                               vdd_cpu: sm1 {
+                                       regulator-name = "vdd_sm1,vdd_cpu";
+                                       regulator-min-microvolt = <750000>;
+                                       regulator-max-microvolt = <1125000>;
+                                       regulator-coupled-with = <&vdd_core &rtc_vdd>;
+                                       regulator-coupled-max-spread = <550000 550000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+
+                                       nvidia,tegra-cpu-regulator;
+                               };
+
+                               sm2_reg: sm2 {
+                                       regulator-name = "vdd_sm2,vin_ldo*";
+                                       regulator-min-microvolt = <3700000>;
+                                       regulator-max-microvolt = <3700000>;
+                                       regulator-always-on;
+                               };
+
+                               /* LDO0 is not connected to anything */
+
+                               ldo1 {
+                                       regulator-name = "vdd_ldo1,avdd_pll*";
+                                       regulator-min-microvolt = <1100000>;
+                                       regulator-max-microvolt = <1100000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               rtc_vdd: ldo2 {
+                                       regulator-name = "vdd_ldo2,vdd_rtc";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1300000>;
+                                       regulator-coupled-with = <&vdd_core &vdd_cpu>;
+                                       regulator-coupled-max-spread = <170000 550000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+
+                                       nvidia,tegra-rtc-regulator;
+                               };
+
+                               ldo3 {
+                                       regulator-name = "vdd_ldo3,avdd_usb*";
+                                       regulator-min-microvolt = <3300000>;
+                                       regulator-max-microvolt = <3300000>;
+                                       regulator-always-on;
+                               };
+
+                               ldo4 {
+                                       regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <1800000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               vcore_emmc: ldo5 {
+                                       regulator-name = "vdd_ldo5,vcore_mmc";
+                                       regulator-min-microvolt = <2850000>;
+                                       regulator-max-microvolt = <2850000>;
+                                       regulator-always-on;
+                               };
+
+                               avdd_vdac_reg: ldo6 {
+                                       regulator-name = "vdd_ldo6,avdd_vdac";
+                                       regulator-min-microvolt = <2850000>;
+                                       regulator-max-microvolt = <2850000>;
+                               };
+
+                               hdmi_vdd_reg: ldo7 {
+                                       regulator-name = "vdd_ldo7,avdd_hdmi";
+                                       regulator-min-microvolt = <3300000>;
+                                       regulator-max-microvolt = <3300000>;
+                               };
+
+                               hdmi_pll_reg: ldo8 {
+                                       regulator-name = "vdd_ldo8,avdd_hdmi_pll";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <1800000>;
+                               };
+
+                               ldo9 {
+                                       regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx";
+                                       regulator-min-microvolt = <2850000>;
+                                       regulator-max-microvolt = <2850000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               ldo_rtc {
+                                       regulator-name = "vdd_rtc_out,vdd_cell";
+                                       regulator-min-microvolt = <3300000>;
+                                       regulator-max-microvolt = <3300000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+                       };
+               };
+
+               nct1008: temperature-sensor@4c {
+                       compatible = "onnn,nct1008";
+                       reg = <0x4c>;
+                       vcc-supply = <&vdd_3v3_sys>;
+                       #thermal-sensor-cells = <1>;
+               };
+       };
+
+       pmc@7000e400 {
+               nvidia,invert-interrupt;
+               nvidia,suspend-mode = <1>;
+               nvidia,cpu-pwr-good-time = <2000>;
+               nvidia,cpu-pwr-off-time = <100>;
+               nvidia,core-pwr-good-time = <3845 3845>;
+               nvidia,core-pwr-off-time = <458>;
+               nvidia,sys-clock-req-active-high;
+       };
+
+       usb@c5000000 {
+               compatible = "nvidia,tegra20-udc";
+               status = "okay";
+               dr_mode = "peripheral";
+       };
+
+       usb-phy@c5000000 {
+               status = "okay";
+               dr_mode = "peripheral";
+               nvidia,xcvr-setup-use-fuses;
+               nvidia,xcvr-lsfslew = <2>;
+               nvidia,xcvr-lsrslew = <2>;
+               vbus-supply = <&vdd_vbus1>;
+       };
+
+       usb@c5008000 {
+               status = "okay";
+       };
+
+       usb-phy@c5008000 {
+               status = "okay";
+               nvidia,xcvr-setup-use-fuses;
+               nvidia,xcvr-lsfslew = <2>;
+               nvidia,xcvr-lsrslew = <2>;
+               vbus-supply = <&vdd_vbus3>;
+       };
+
+       brcm_wifi_pwrseq: wifi-pwrseq {
+               compatible = "mmc-pwrseq-simple";
+
+               clocks = <&rtc_32k_wifi>;
+               clock-names = "ext_clock";
+
+               reset-gpios = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_LOW>;
+               post-power-on-delay-ms = <300>;
+               power-off-delay-us = <300>;
+       };
+
+       mmc@c8000000 {
+               status = "okay";
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               max-frequency = <25000000>;
+               keep-power-in-suspend;
+               bus-width = <4>;
+               non-removable;
+
+               mmc-pwrseq = <&brcm_wifi_pwrseq>;
+               vmmc-supply = <&vdd_3v3_sys>;
+               vqmmc-supply = <&vdd_3v3_sys>;
+
+               /* Azurewave AW-NH611 BCM4329 */
+               wifi@1 {
+                       reg = <1>;
+                       compatible = "brcm,bcm4329-fmac";
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(S, 0) IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "host-wake";
+               };
+       };
+
+       mmc@c8000400 {
+               status = "okay";
+               bus-width = <4>;
+               cd-gpios = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
+               power-gpios = <&gpio TEGRA_GPIO(I, 6) GPIO_ACTIVE_HIGH>;
+               vmmc-supply = <&vdd_3v3_sys>;
+               vqmmc-supply = <&vdd_3v3_sys>;
+       };
+
+       mmc@c8000600 {
+               status = "okay";
+               bus-width = <8>;
+               vmmc-supply = <&vcore_emmc>;
+               vqmmc-supply = <&vdd_3v3_sys>;
+               non-removable;
+       };
+
+       mains: ac-adapter-detect {
+               compatible = "gpio-charger";
+               charger-type = "mains";
+               gpios = <&gpio TEGRA_GPIO(V, 3) GPIO_ACTIVE_LOW>;
+       };
+
+       backlight: backlight {
+               compatible = "pwm-backlight";
+
+               enable-gpios = <&gpio TEGRA_GPIO(D, 4) GPIO_ACTIVE_HIGH>;
+               power-supply = <&vdd_3v3_sys>;
+               pwms = <&pwm 2 41667>;
+
+               brightness-levels = <7 255>;
+               num-interpolated-steps = <248>;
+               default-brightness-level = <20>;
+       };
+
+       /* PMIC has a built-in 32KHz oscillator which is used by PMC */
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <32768>;
+               clock-output-names = "tps658621-out32k";
+       };
+
+       /*
+        * This standalone onboard fixed-clock always-ON 32KHz
+        * oscillator is used as a reference clock-source by the
+        * Azurewave WiFi/BT module.
+        */
+       rtc_32k_wifi: clock@1 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <32768>;
+               clock-output-names = "kk3270032";
+       };
+
+       cpus {
+               cpu0: cpu@0 {
+                       cpu-supply = <&vdd_cpu>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       #cooling-cells = <2>;
+               };
+
+               cpu@1 {
+                       cpu-supply = <&vdd_cpu>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+               };
+       };
+
+       display-panel {
+               compatible = "auo,b101ew05", "panel-lvds";
+
+               ddc-i2c-bus = <&panel_ddc>;
+               power-supply = <&vdd_pnl>;
+               backlight = <&backlight>;
+
+               width-mm = <218>;
+               height-mm = <135>;
+
+               data-mapping = "jeida-18";
+
+               panel-timing {
+                       clock-frequency = <71200000>;
+                       hactive = <1280>;
+                       vactive = <800>;
+                       hfront-porch = <8>;
+                       hback-porch = <18>;
+                       hsync-len = <184>;
+                       vsync-len = <3>;
+                       vfront-porch = <4>;
+                       vback-porch = <8>;
+               };
+
+               port {
+                       panel_input: endpoint {
+                               remote-endpoint = <&lvds_encoder_output>;
+                       };
+               };
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+
+               power {
+                       label = "Power";
+                       gpios = <&gpio TEGRA_GPIO(I, 3) GPIO_ACTIVE_HIGH>;
+                       linux,code = <KEY_POWER>;
+                       debounce-interval = <10>;
+                       wakeup-event-action = <EV_ACT_ASSERTED>;
+                       wakeup-source;
+               };
+
+               rotation-lock {
+                       label = "Rotate-lock";
+                       gpios = <&gpio TEGRA_GPIO(Q, 2) GPIO_ACTIVE_HIGH>;
+                       linux,code = <SW_ROTATE_LOCK>;
+                       linux,input-type = <EV_SW>;
+                       debounce-interval = <10>;
+               };
+
+               volume-up {
+                       label = "Volume Up";
+                       gpios = <&gpio TEGRA_GPIO(Q, 4) GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_VOLUMEUP>;
+                       debounce-interval = <10>;
+                       wakeup-event-action = <EV_ACT_ASSERTED>;
+                       wakeup-source;
+               };
+
+               volume-down {
+                       label = "Volume Down";
+                       gpios = <&gpio TEGRA_GPIO(Q, 5) GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_VOLUMEDOWN>;
+                       debounce-interval = <10>;
+                       wakeup-event-action = <EV_ACT_ASSERTED>;
+                       wakeup-source;
+               };
+       };
+
+       haptic-feedback {
+               compatible = "gpio-vibrator";
+               enable-gpios = <&gpio TEGRA_GPIO(V, 5) GPIO_ACTIVE_HIGH>;
+               vcc-supply = <&vdd_3v3_sys>;
+       };
+
+       lvds-encoder {
+               compatible = "ti,sn75lvds83", "lvds-encoder";
+
+               powerdown-gpios = <&gpio TEGRA_GPIO(B, 2) GPIO_ACTIVE_LOW>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+
+                               lvds_encoder_input: endpoint {
+                                       remote-endpoint = <&lcd_output>;
+                               };
+                       };
+
+                       port@1 {
+                               reg = <1>;
+
+                               lvds_encoder_output: endpoint {
+                                       remote-endpoint = <&panel_input>;
+                               };
+                       };
+               };
+       };
+
+       vdd_5v0_sys: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
+
+       vdd_3v3_sys: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_3v3_vs";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       vdd_1v8_sys: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v8_vs";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       vdd_pnl: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_panel";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-enable-ramp-delay = <300000>;
+               gpio = <&gpio TEGRA_GPIO(C, 6) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       vdd_vbus1: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_usb1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               gpio = <&gpio TEGRA_GPIO(D, 0) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       vdd_vbus3: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_usb3_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               gpio = <&gpio TEGRA_GPIO(D, 3) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       sound {
+               compatible = "nvidia,tegra-audio-wm8903-picasso",
+                            "nvidia,tegra-audio-wm8903";
+               nvidia,model = "Acer Iconia Tab A500 WM8903";
+
+               nvidia,audio-routing =
+                       "Headphone Jack", "HPOUTR",
+                       "Headphone Jack", "HPOUTL",
+                       "Int Spk", "LINEOUTL",
+                       "Int Spk", "LINEOUTR",
+                       "Mic Jack", "MICBIAS",
+                       "IN2L", "Mic Jack",
+                       "IN2R", "Mic Jack",
+                       "IN1L", "Int Mic",
+                       "IN1R", "Int Mic";
+
+               nvidia,i2s-controller = <&tegra_i2s1>;
+               nvidia,audio-codec = <&wm8903>;
+
+               nvidia,spkr-en-gpios = <&wm8903 2 GPIO_ACTIVE_HIGH>;
+               nvidia,hp-det-gpios = <&gpio TEGRA_GPIO(W, 2) GPIO_ACTIVE_HIGH>;
+               nvidia,int-mic-en-gpios = <&wm8903 1 GPIO_ACTIVE_HIGH>;
+               nvidia,headset;
+
+               clocks = <&tegra_car TEGRA20_CLK_PLL_A>,
+                        <&tegra_car TEGRA20_CLK_PLL_A_OUT0>,
+                        <&tegra_car TEGRA20_CLK_CDEV1>;
+               clock-names = "pll_a", "pll_a_out0", "mclk";
+       };
+
+       thermal-zones {
+               nct1008-local {
+                       polling-delay-passive = <1000>; /* milliseconds */
+                       polling-delay = <0>; /* milliseconds */
+
+                       thermal-sensors = <&nct1008 0>;
+               };
+
+               nct1008-remote {
+                       polling-delay-passive = <1000>; /* milliseconds */
+                       polling-delay = <5000>; /* milliseconds */
+
+                       thermal-sensors = <&nct1008 1>;
+
+                       trips {
+                               trip0: cpu-alert0 {
+                                       /* start throttling at 50C */
+                                       temperature = <50000>;
+                                       hysteresis = <3000>;
+                                       type = "passive";
+                               };
+
+                               trip1: cpu-crit {
+                                       /* shut down at 60C */
+                                       temperature = <60000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&trip0>;
+                                       cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+       };
+
+       memory-controller@7000f400 {
+               nvidia,use-ram-code;
+
+               emc-tables@0 {
+                       nvidia,ram-code = <0>; /* elpida-8gb */
+
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       emc-table@25000 {
+                               reg = <25000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <25000>;
+                               nvidia,emc-registers = <0x00000002 0x00000006
+                                       0x00000003 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000004
+                                       0x00000003 0x00000008 0x0000000b 0x0000004d
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000004
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000068 0x00000000 0x00000003
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x00070000 0x00000000 0x00000000 0x00000003
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@50000 {
+                               reg = <50000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <50000>;
+                               nvidia,emc-registers = <0x00000003 0x00000007
+                                       0x00000003 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x0000009f
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000007
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x000000d0 0x00000000 0x00000000
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x00070000 0x00000000 0x00000000 0x00000005
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@75000 {
+                               reg = <75000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <75000>;
+                               nvidia,emc-registers = <0x00000005 0x0000000a
+                                       0x00000004 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x000000ff
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x0000000b
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000138 0x00000000 0x00000000
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x00070000 0x00000000 0x00000000 0x00000007
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@150000 {
+                               reg = <150000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <150000>;
+                               nvidia,emc-registers = <0x00000009 0x00000014
+                                       0x00000007 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x0000021f
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000015
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000270 0x00000000 0x00000001
+                                       0x00000000 0x00000000 0x00000282 0xa07c04ae
+                                       0x007dd510 0x00000000 0x00000000 0x0000000e
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@300000 {
+                               reg = <300000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <300000>;
+                               nvidia,emc-registers = <0x00000012 0x00000027
+                                       0x0000000d 0x00000006 0x00000007 0x00000005
+                                       0x00000003 0x00000009 0x00000006 0x00000006
+                                       0x00000003 0x00000003 0x00000002 0x00000006
+                                       0x00000003 0x00000009 0x0000000c 0x0000045f
+                                       0x00000000 0x00000004 0x00000004 0x00000006
+                                       0x00000008 0x00000001 0x0000000e 0x0000002a
+                                       0x00000003 0x0000000f 0x00000007 0x00000005
+                                       0x00000002 0x000004e1 0x00000005 0x00000002
+                                       0x00000000 0x00000000 0x00000282 0xe059048b
+                                       0x007e1510 0x00000000 0x00000000 0x0000001b
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+               };
+
+               emc-tables@1 {
+                       nvidia,ram-code = <1>; /* elpida-4gb */
+
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       emc-table@25000 {
+                               reg = <25000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <25000>;
+                               nvidia,emc-registers = <0x00000002 0x00000006
+                                       0x00000003 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000004
+                                       0x00000003 0x00000008 0x0000000b 0x0000004d
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000004
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000068 0x00000000 0x00000003
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x0007c000 0x00000000 0x00000000 0x00000003
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@50000 {
+                               reg = <50000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <50000>;
+                               nvidia,emc-registers = <0x00000003 0x00000007
+                                       0x00000003 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x0000009f
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000007
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x000000d0 0x00000000 0x00000000
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x0007c000 0x00000000 0x00000000 0x00000005
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@75000 {
+                               reg = <75000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <75000>;
+                               nvidia,emc-registers = <0x00000005 0x0000000a
+                                       0x00000004 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x000000ff
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x0000000b
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000138 0x00000000 0x00000000
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x0007c000 0x00000000 0x00000000 0x00000007
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@150000 {
+                               reg = <150000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <150000>;
+                               nvidia,emc-registers = <0x00000009 0x00000014
+                                       0x00000007 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x0000021f
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000015
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000270 0x00000000 0x00000001
+                                       0x00000000 0x00000000 0x00000282 0xa07c04ae
+                                       0x007e4010 0x00000000 0x00000000 0x0000000e
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@300000 {
+                               reg = <300000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <300000>;
+                               nvidia,emc-registers = <0x00000012 0x00000027
+                                       0x0000000d 0x00000006 0x00000007 0x00000005
+                                       0x00000003 0x00000009 0x00000006 0x00000006
+                                       0x00000003 0x00000003 0x00000002 0x00000006
+                                       0x00000003 0x00000009 0x0000000c 0x0000045f
+                                       0x00000000 0x00000004 0x00000004 0x00000006
+                                       0x00000008 0x00000001 0x0000000e 0x0000002a
+                                       0x00000003 0x0000000f 0x00000007 0x00000005
+                                       0x00000002 0x000004e1 0x00000005 0x00000002
+                                       0x00000000 0x00000000 0x00000282 0xe059048b
+                                       0x007e0010 0x00000000 0x00000000 0x0000001b
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+               };
+
+               emc-tables@2 {
+                       nvidia,ram-code = <2>; /* hynix-8gb */
+
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       emc-table@25000 {
+                               reg = <25000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <25000>;
+                               nvidia,emc-registers = <0x00000002 0x00000006
+                                       0x00000003 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000004
+                                       0x00000003 0x00000008 0x0000000b 0x0000004d
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000004
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000068 0x00000000 0x00000003
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x00070000 0x00000000 0x00000000 0x00000003
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@50000 {
+                               reg = <50000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <50000>;
+                               nvidia,emc-registers = <0x00000003 0x00000007
+                                       0x00000003 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x0000009f
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000007
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x000000d0 0x00000000 0x00000000
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x00070000 0x00000000 0x00000000 0x00000005
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@75000 {
+                               reg = <75000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <75000>;
+                               nvidia,emc-registers = <0x00000005 0x0000000a
+                                       0x00000004 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x000000ff
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x0000000b
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000138 0x00000000 0x00000000
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x00070000 0x00000000 0x00000000 0x00000007
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@150000 {
+                               reg = <150000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <150000>;
+                               nvidia,emc-registers = <0x00000009 0x00000014
+                                       0x00000007 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x0000021f
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000015
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000270 0x00000000 0x00000001
+                                       0x00000000 0x00000000 0x00000282 0xa07c04ae
+                                       0x007dd010 0x00000000 0x00000000 0x0000000e
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@300000 {
+                               reg = <300000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <300000>;
+                               nvidia,emc-registers = <0x00000012 0x00000027
+                                       0x0000000d 0x00000006 0x00000007 0x00000005
+                                       0x00000003 0x00000009 0x00000006 0x00000006
+                                       0x00000003 0x00000003 0x00000002 0x00000006
+                                       0x00000003 0x00000009 0x0000000c 0x0000045f
+                                       0x00000000 0x00000004 0x00000004 0x00000006
+                                       0x00000008 0x00000001 0x0000000e 0x0000002a
+                                       0x00000003 0x0000000f 0x00000007 0x00000005
+                                       0x00000002 0x000004e1 0x00000005 0x00000002
+                                       0x00000000 0x00000000 0x00000282 0xe059048b
+                                       0x007e2010 0x00000000 0x00000000 0x0000001b
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+               };
+
+               emc-tables@3 {
+                       nvidia,ram-code = <3>; /* hynix-4gb */
+
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       emc-table@25000 {
+                               reg = <25000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <25000>;
+                               nvidia,emc-registers = <0x00000002 0x00000006
+                                       0x00000003 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000004
+                                       0x00000003 0x00000008 0x0000000b 0x0000004d
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000004
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000068 0x00000000 0x00000003
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x0007c000 0x00000000 0x00000000 0x00000003
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@50000 {
+                               reg = <50000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <50000>;
+                               nvidia,emc-registers = <0x00000003 0x00000007
+                                       0x00000003 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x0000009f
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000007
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x000000d0 0x00000000 0x00000000
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x0007c000 0x00078000 0x00000000 0x00000005
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@75000 {
+                               reg = <75000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <75000>;
+                               nvidia,emc-registers = <0x00000005 0x0000000a
+                                       0x00000004 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x000000ff
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x0000000b
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000138 0x00000000 0x00000000
+                                       0x00000000 0x00000000 0x00000282 0xa0ae04ae
+                                       0x0007c000 0x00000000 0x00000000 0x00000007
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@150000 {
+                               reg = <150000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <150000>;
+                               nvidia,emc-registers = <0x00000009 0x00000014
+                                       0x00000007 0x00000003 0x00000006 0x00000004
+                                       0x00000002 0x00000009 0x00000003 0x00000003
+                                       0x00000002 0x00000002 0x00000002 0x00000005
+                                       0x00000003 0x00000008 0x0000000b 0x0000021f
+                                       0x00000000 0x00000003 0x00000003 0x00000003
+                                       0x00000008 0x00000001 0x0000000a 0x00000015
+                                       0x00000003 0x00000008 0x00000004 0x00000006
+                                       0x00000002 0x00000270 0x00000000 0x00000001
+                                       0x00000000 0x00000000 0x00000282 0xa07c04ae
+                                       0x007e4010 0x00000000 0x00000000 0x0000000e
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+
+                       emc-table@300000 {
+                               reg = <300000>;
+                               compatible = "nvidia,tegra20-emc-table";
+                               clock-frequency = <300000>;
+                               nvidia,emc-registers = <0x00000012 0x00000027
+                                       0x0000000d 0x00000006 0x00000007 0x00000005
+                                       0x00000003 0x00000009 0x00000006 0x00000006
+                                       0x00000003 0x00000003 0x00000002 0x00000006
+                                       0x00000003 0x00000009 0x0000000c 0x0000045f
+                                       0x00000000 0x00000004 0x00000004 0x00000006
+                                       0x00000008 0x00000001 0x0000000e 0x0000002a
+                                       0x00000003 0x0000000f 0x00000007 0x00000005
+                                       0x00000002 0x000004e1 0x00000005 0x00000002
+                                       0x00000000 0x00000000 0x00000282 0xe059048b
+                                       0x007e0010 0x00000000 0x00000000 0x0000001b
+                                       0x00000000 0x00000000 0x00000000 0x00000000>;
+                       };
+               };
+       };
+};
index 37ad508..a05fb38 100644 (file)
        };
 
        /* SD/MMC */
-       sdhci@c8000600 {
+       mmc@c8000600 {
                status = "okay";
                bus-width = <4>;
                cd-gpios = <&gpio TEGRA_GPIO(C, 7) GPIO_ACTIVE_LOW>; /* MMCD */
index af47408..425494b 100644 (file)
        };
 
        /* SD/MMC */
-       sdhci@c8000600 {
+       mmc@c8000600 {
                status = "okay";
                bus-width = <4>;
                cd-gpios = <&gpio TEGRA_GPIO(C, 7) GPIO_ACTIVE_LOW>; /* MMCD */
index e85ffdb..dce85d3 100644 (file)
 
 / {
        cpu0_opp_table: cpu_opp_table0 {
-               opp@216000000_750 {
+               opp@216000000,750 {
                        opp-microvolt = <750000 750000 1125000>;
                };
 
-               opp@216000000_800 {
+               opp@216000000,800 {
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@312000000_750 {
+               opp@312000000,750 {
                        opp-microvolt = <750000 750000 1125000>;
                };
 
-               opp@312000000_800 {
+               opp@312000000,800 {
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@456000000_750 {
+               opp@456000000,750 {
                        opp-microvolt = <750000 750000 1125000>;
                };
 
-               opp@456000000_800 {
+               opp@456000000,800 {
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@456000000_800_2_2 {
+               opp@456000000,800,2,2 {
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@456000000_800_3_2 {
+               opp@456000000,800,3,2 {
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@456000000_825 {
+               opp@456000000,825 {
                        opp-microvolt = <825000 825000 1125000>;
                };
 
-               opp@608000000_750 {
+               opp@608000000,750 {
                        opp-microvolt = <750000 750000 1125000>;
                };
 
-               opp@608000000_800 {
+               opp@608000000,800 {
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@608000000_800_3_2 {
+               opp@608000000,800,3,2 {
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@608000000_825 {
+               opp@608000000,825 {
                        opp-microvolt = <825000 825000 1125000>;
                };
 
-               opp@608000000_850 {
+               opp@608000000,850 {
                        opp-microvolt = <850000 850000 1125000>;
                };
 
-               opp@608000000_900 {
+               opp@608000000,900 {
                        opp-microvolt = <900000 900000 1125000>;
                };
 
-               opp@760000000_775 {
+               opp@760000000,775 {
                        opp-microvolt = <775000 775000 1125000>;
                };
 
-               opp@760000000_800 {
+               opp@760000000,800 {
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@760000000_850 {
+               opp@760000000,850 {
                        opp-microvolt = <850000 850000 1125000>;
                };
 
-               opp@760000000_875 {
+               opp@760000000,875 {
                        opp-microvolt = <875000 875000 1125000>;
                };
 
-               opp@760000000_875_1_1 {
+               opp@760000000,875,1,1 {
                        opp-microvolt = <875000 875000 1125000>;
                };
 
-               opp@760000000_875_0_2 {
+               opp@760000000,875,0,2 {
                        opp-microvolt = <875000 875000 1125000>;
                };
 
-               opp@760000000_875_1_2 {
+               opp@760000000,875,1,2 {
                        opp-microvolt = <875000 875000 1125000>;
                };
 
-               opp@760000000_900 {
+               opp@760000000,900 {
                        opp-microvolt = <900000 900000 1125000>;
                };
 
-               opp@760000000_975 {
+               opp@760000000,975 {
                        opp-microvolt = <975000 975000 1125000>;
                };
 
-               opp@816000000_800 {
+               opp@816000000,800 {
                        opp-microvolt = <800000 800000 1125000>;
                };
 
-               opp@816000000_850 {
+               opp@816000000,850 {
                        opp-microvolt = <850000 850000 1125000>;
                };
 
-               opp@816000000_875 {
+               opp@816000000,875 {
                        opp-microvolt = <875000 875000 1125000>;
                };
 
-               opp@816000000_950 {
+               opp@816000000,950 {
                        opp-microvolt = <950000 950000 1125000>;
                };
 
-               opp@816000000_1000 {
+               opp@816000000,1000 {
                        opp-microvolt = <1000000 1000000 1125000>;
                };
 
-               opp@912000000_850 {
+               opp@912000000,850 {
                        opp-microvolt = <850000 850000 1125000>;
                };
 
-               opp@912000000_900 {
+               opp@912000000,900 {
                        opp-microvolt = <900000 900000 1125000>;
                };
 
-               opp@912000000_925 {
+               opp@912000000,925 {
                        opp-microvolt = <925000 925000 1125000>;
                };
 
-               opp@912000000_950 {
+               opp@912000000,950 {
                        opp-microvolt = <950000 950000 1125000>;
                };
 
-               opp@912000000_950_0_2 {
+               opp@912000000,950,0,2 {
                        opp-microvolt = <950000 950000 1125000>;
                };
 
-               opp@912000000_950_2_2 {
+               opp@912000000,950,2,2 {
                        opp-microvolt = <950000 950000 1125000>;
                };
 
-               opp@912000000_1000 {
+               opp@912000000,1000 {
                        opp-microvolt = <1000000 1000000 1125000>;
                };
 
-               opp@912000000_1050 {
+               opp@912000000,1050 {
                        opp-microvolt = <1050000 1050000 1125000>;
                };
 
-               opp@1000000000_875 {
+               opp@1000000000,875 {
                        opp-microvolt = <875000 875000 1125000>;
                };
 
-               opp@1000000000_900 {
+               opp@1000000000,900 {
                        opp-microvolt = <900000 900000 1125000>;
                };
 
-               opp@1000000000_950 {
+               opp@1000000000,950 {
                        opp-microvolt = <950000 950000 1125000>;
                };
 
-               opp@1000000000_975 {
+               opp@1000000000,975 {
                        opp-microvolt = <975000 975000 1125000>;
                };
 
-               opp@1000000000_1000 {
+               opp@1000000000,1000 {
                        opp-microvolt = <1000000 1000000 1125000>;
                };
 
-               opp@1000000000_1000_0_2 {
+               opp@1000000000,1000,0,2 {
                        opp-microvolt = <1000000 1000000 1125000>;
                };
 
-               opp@1000000000_1025 {
+               opp@1000000000,1025 {
                        opp-microvolt = <1025000 1025000 1125000>;
                };
 
-               opp@1000000000_1100 {
+               opp@1000000000,1100 {
                        opp-microvolt = <1100000 1100000 1125000>;
                };
 
-               opp@1200000000_1000 {
+               opp@1200000000,1000 {
                        opp-microvolt = <1000000 1000000 1125000>;
                };
 
-               opp@1200000000_1050 {
+               opp@1200000000,1050 {
                        opp-microvolt = <1050000 1050000 1125000>;
                };
 
-               opp@1200000000_1100 {
+               opp@1200000000,1100 {
                        opp-microvolt = <1100000 1100000 1125000>;
                };
 
-               opp@1200000000_1125 {
+               opp@1200000000,1125 {
                        opp-microvolt = <1125000 1125000 1125000>;
                };
        };
index c878f42..9b8fedb 100644 (file)
                compatible = "operating-points-v2";
                opp-shared;
 
-               opp@216000000_750 {
+               opp@216000000,750 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x0F 0x0003>;
                        opp-hz = /bits/ 64 <216000000>;
                };
 
-               opp@216000000_800 {
+               opp@216000000,800 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x0F 0x0004>;
                        opp-hz = /bits/ 64 <216000000>;
                };
 
-               opp@312000000_750 {
+               opp@312000000,750 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x0F 0x0003>;
                        opp-hz = /bits/ 64 <312000000>;
                };
 
-               opp@312000000_800 {
+               opp@312000000,800 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x0F 0x0004>;
                        opp-hz = /bits/ 64 <312000000>;
                };
 
-               opp@456000000_750 {
+               opp@456000000,750 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x0C 0x0003>;
                        opp-hz = /bits/ 64 <456000000>;
                };
 
-               opp@456000000_800 {
+               opp@456000000,800 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x03 0x0006>;
                        opp-hz = /bits/ 64 <456000000>;
                };
 
-               opp@456000000_800_2_2 {
+               opp@456000000,800,2,2 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0004>;
                        opp-hz = /bits/ 64 <456000000>;
                };
 
-               opp@456000000_800_3_2 {
+               opp@456000000,800,3,2 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x08 0x0004>;
                        opp-hz = /bits/ 64 <456000000>;
                };
 
-               opp@456000000_825 {
+               opp@456000000,825 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x03 0x0001>;
                        opp-hz = /bits/ 64 <456000000>;
                };
 
-               opp@608000000_750 {
+               opp@608000000,750 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x08 0x0003>;
                        opp-hz = /bits/ 64 <608000000>;
                };
 
-               opp@608000000_800 {
+               opp@608000000,800 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0006>;
                        opp-hz = /bits/ 64 <608000000>;
                };
 
-               opp@608000000_800_3_2 {
+               opp@608000000,800,3,2 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x08 0x0004>;
                        opp-hz = /bits/ 64 <608000000>;
                };
 
-               opp@608000000_825 {
+               opp@608000000,825 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0001>;
                        opp-hz = /bits/ 64 <608000000>;
                };
 
-               opp@608000000_850 {
+               opp@608000000,850 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x03 0x0006>;
                        opp-hz = /bits/ 64 <608000000>;
                };
 
-               opp@608000000_900 {
+               opp@608000000,900 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x03 0x0001>;
                        opp-hz = /bits/ 64 <608000000>;
                };
 
-               opp@760000000_775 {
+               opp@760000000,775 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x08 0x0003>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_800 {
+               opp@760000000,800 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x08 0x0004>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_850 {
+               opp@760000000,850 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0006>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_875 {
+               opp@760000000,875 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0001>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_875_1_1 {
+               opp@760000000,875,1,1 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x02 0x0002>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_875_0_2 {
+               opp@760000000,875,0,2 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x01 0x0004>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_875_1_2 {
+               opp@760000000,875,1,2 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x02 0x0004>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900 {
+               opp@760000000,900 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x01 0x0002>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_975 {
+               opp@760000000,975 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x03 0x0001>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@816000000_800 {
+               opp@816000000,800 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x08 0x0007>;
                        opp-hz = /bits/ 64 <816000000>;
                };
 
-               opp@816000000_850 {
+               opp@816000000,850 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0002>;
                        opp-hz = /bits/ 64 <816000000>;
                };
 
-               opp@816000000_875 {
+               opp@816000000,875 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0005>;
                        opp-hz = /bits/ 64 <816000000>;
                };
 
-               opp@816000000_950 {
+               opp@816000000,950 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x03 0x0006>;
                        opp-hz = /bits/ 64 <816000000>;
                };
 
-               opp@816000000_1000 {
+               opp@816000000,1000 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x03 0x0001>;
                        opp-hz = /bits/ 64 <816000000>;
                };
 
-               opp@912000000_850 {
+               opp@912000000,850 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x08 0x0007>;
                        opp-hz = /bits/ 64 <912000000>;
                };
 
-               opp@912000000_900 {
+               opp@912000000,900 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0002>;
                        opp-hz = /bits/ 64 <912000000>;
                };
 
-               opp@912000000_925 {
+               opp@912000000,925 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0001>;
                        opp-hz = /bits/ 64 <912000000>;
                };
 
-               opp@912000000_950 {
+               opp@912000000,950 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x02 0x0006>;
                        opp-hz = /bits/ 64 <912000000>;
                };
 
-               opp@912000000_950_0_2 {
+               opp@912000000,950,0,2 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x01 0x0004>;
                        opp-hz = /bits/ 64 <912000000>;
                };
 
-               opp@912000000_950_2_2 {
+               opp@912000000,950,2,2 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0004>;
                        opp-hz = /bits/ 64 <912000000>;
                };
 
-               opp@912000000_1000 {
+               opp@912000000,1000 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x01 0x0002>;
                        opp-hz = /bits/ 64 <912000000>;
                };
 
-               opp@912000000_1050 {
+               opp@912000000,1050 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x03 0x0001>;
                        opp-hz = /bits/ 64 <912000000>;
                };
 
-               opp@1000000000_875 {
+               opp@1000000000,875 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x08 0x0007>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_900 {
+               opp@1000000000,900 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0002>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_950 {
+               opp@1000000000,950 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0004>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975 {
+               opp@1000000000,975 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0001>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_1000 {
+               opp@1000000000,1000 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x02 0x0006>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_1000_0_2 {
+               opp@1000000000,1000,0,2 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x01 0x0004>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_1025 {
+               opp@1000000000,1025 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x01 0x0002>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_1100 {
+               opp@1000000000,1100 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x03 0x0001>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1200000000_1000 {
+               opp@1200000000,1000 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x08 0x0004>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1050 {
+               opp@1200000000,1050 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x04 0x0004>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1100 {
+               opp@1200000000,1100 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x02 0x0004>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1125 {
+               opp@1200000000,1125 {
                        clock-latency-ns = <400000>;
                        opp-supported-hw = <0x01 0x0004>;
                        opp-hz = /bits/ 64 <1200000000>;
index 02cd67e..86494cb 100644 (file)
                status = "okay";
        };
 
-       sdhci@c8000200 {
+       mmc@c8000200 {
                status = "okay";
                cd-gpios = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio TEGRA_GPIO(H, 1) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
        };
 
-       sdhci@c8000600 {
+       mmc@c8000600 {
                status = "okay";
                cd-gpios = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio TEGRA_GPIO(H, 3) GPIO_ACTIVE_HIGH>;
                default-brightness-level = <6>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
                backlight = <&backlight>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_5v0_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "vdd_5v0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       vdd_5v0_reg: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "vdd_1v5";
-                       regulator-min-microvolt = <1500000>;
-                       regulator-max-microvolt = <1500000>;
-                       gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
-               };
+       regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v5";
+               regulator-min-microvolt = <1500000>;
+               regulator-max-microvolt = <1500000>;
+               gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
+       };
 
-               regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "vdd_1v2";
-                       regulator-min-microvolt = <1200000>;
-                       regulator-max-microvolt = <1200000>;
-                       gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v2";
+               regulator-min-microvolt = <1200000>;
+               regulator-max-microvolt = <1200000>;
+               gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               pci_vdd_reg: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "vdd_1v05";
-                       regulator-min-microvolt = <1050000>;
-                       regulator-max-microvolt = <1050000>;
-                       gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       pci_vdd_reg: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v05";
+               regulator-min-microvolt = <1050000>;
+               regulator-max-microvolt = <1050000>;
+               gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_pnl_reg: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "vdd_pnl";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpio TEGRA_GPIO(C, 6) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vdd_pnl_reg: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_pnl";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpio TEGRA_GPIO(C, 6) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_bl_reg: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "vdd_bl";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpio TEGRA_GPIO(W, 0) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vdd_bl_reg: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_bl";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpio TEGRA_GPIO(W, 0) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_5v0_hdmi: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg = <6>;
-                       regulator-name = "VDDIO_HDMI";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(T, 2) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_reg>;
-               };
+       vdd_5v0_hdmi: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDDIO_HDMI";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(T, 2) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_reg>;
        };
 
        sound {
index c73510c..a348ca3 100644 (file)
@@ -59,7 +59,7 @@
        panel: panel {
                compatible = "innolux,n156bge-l21";
 
-               power-supply =  <&vdd_1v8_reg>, <&vdd_3v3_reg>;
+               power-supply =  <&vdd_1v8_reg>; // <&vdd_3v3_reg>;
                enable-gpios = <&gpio TEGRA_GPIO(B, 2) GPIO_ACTIVE_HIGH>;
 
                backlight = <&backlight>;
                clock-names = "pll_a", "pll_a_out0", "mclk";
        };
 
-       regulators {
-               vcc_24v_reg: regulator@100 {
-                       compatible = "regulator-fixed";
-                       reg = <100>;
-                       regulator-name = "vcc_24v";
-                       regulator-min-microvolt = <24000000>;
-                       regulator-max-microvolt = <24000000>;
-                       regulator-always-on;
-               };
+       vcc_24v_reg: regulator@100 {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc_24v";
+               regulator-min-microvolt = <24000000>;
+               regulator-max-microvolt = <24000000>;
+               regulator-always-on;
+       };
 
-               vdd_5v0_reg: regulator@101 {
-                       compatible = "regulator-fixed";
-                       reg = <101>;
-                       regulator-name = "vdd_5v0";
-                       vin-supply = <&vcc_24v_reg>;
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       vdd_5v0_reg: regulator@101 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_5v0";
+               vin-supply = <&vcc_24v_reg>;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               vdd_3v3_reg: regulator@102 {
-                       compatible = "regulator-fixed";
-                       reg = <102>;
-                       regulator-name = "vdd_3v3";
-                       vin-supply = <&vcc_24v_reg>;
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       vdd_3v3_reg: regulator@102 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_3v3";
+               vin-supply = <&vcc_24v_reg>;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
 
-               vdd_1v8_reg: regulator@103 {
-                       compatible = "regulator-fixed";
-                       reg = <103>;
-                       regulator-name = "vdd_1v8";
-                       vin-supply = <&vdd_3v3_reg>;
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       regulator-always-on;
-               };
+       vdd_1v8_reg: regulator@103 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v8";
+               vin-supply = <&vdd_3v3_reg>;
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
        };
 };
index cce3a3f..ada2bed 100644 (file)
        memory-controller@7000f400 {
                nvidia,use-ram-code;
 
-               emc-tables@hynix {
+               emc-tables@0 {
                        nvidia,ram-code = <0x0>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                status = "okay";
        };
 
-       sdhci@c8000000 {
+       mmc@c8000000 {
                status = "okay";
                cd-gpios = <&gpio TEGRA_GPIO(V, 5) GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio TEGRA_GPIO(H, 1) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
        };
 
-       sdhci@c8000600 {
+       mmc@c8000600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                backlight-boot-off;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
        gpio-leds {
                compatible = "gpio-leds";
 
-               wifi {
+               led-0 {
                        label = "wifi-led";
                        gpios = <&gpio TEGRA_GPIO(D, 0) GPIO_ACTIVE_HIGH>;
                        linux,default-trigger = "rfkill0";
                backlight = <&backlight>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               p5valw_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "+5valw";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       p5valw_reg: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5valw";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               vdd_pnl_reg: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "+3VS,vdd_pnl";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-boot-on;
-                       gpio = <&gpio TEGRA_GPIO(A, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vdd_pnl_reg: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3VS,vdd_pnl";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               gpio = <&gpio TEGRA_GPIO(A, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
        };
 
        sound {
index 429e460..378f23b 100644 (file)
                clock-names = "pll_a", "pll_a_out0", "mclk";
        };
 
-       regulators {
-               vcc_24v_reg: regulator@100 {
-                       compatible = "regulator-fixed";
-                       reg = <100>;
-                       regulator-name = "vcc_24v";
-                       regulator-min-microvolt = <24000000>;
-                       regulator-max-microvolt = <24000000>;
-                       regulator-always-on;
-               };
+       vcc_24v_reg: regulator@100 {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc_24v";
+               regulator-min-microvolt = <24000000>;
+               regulator-max-microvolt = <24000000>;
+               regulator-always-on;
+       };
 
-               vdd_5v0_reg: regulator@101 {
-                       compatible = "regulator-fixed";
-                       reg = <101>;
-                       regulator-name = "vdd_5v0";
-                       vin-supply = <&vcc_24v_reg>;
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       vdd_5v0_reg: regulator@101 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_5v0";
+               vin-supply = <&vcc_24v_reg>;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               vdd_3v3_reg: regulator@102 {
-                       compatible = "regulator-fixed";
-                       reg = <102>;
-                       regulator-name = "vdd_3v3";
-                       vin-supply = <&vcc_24v_reg>;
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       vdd_3v3_reg: regulator@102 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_3v3";
+               vin-supply = <&vcc_24v_reg>;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
 
-               vdd_1v8_reg: regulator@103 {
-                       compatible = "regulator-fixed";
-                       reg = <103>;
-                       regulator-name = "vdd_1v8";
-                       vin-supply = <&vdd_3v3_reg>;
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       regulator-always-on;
-               };
+       vdd_1v8_reg: regulator@103 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v8";
+               vin-supply = <&vdd_3v3_reg>;
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
        };
 };
index 376ecb6..c24d4a3 100644 (file)
                        #size-cells = <0>;
 
                        smart-battery@b {
-                               compatible = "ti,bq20z75", "smart-battery-1.1";
+                               compatible = "ti,bq20z75", "sbs,sbs-battery";
                                reg = <0xb>;
-                               ti,i2c-retry-count = <2>;
-                               ti,poll-retry-count = <10>;
+                               sbs,i2c-retry-count = <2>;
+                               sbs,poll-retry-count = <10>;
                        };
                };
        };
                status = "okay";
        };
 
-       sdhci@c8000000 {
+       mmc@c8000000 {
                status = "okay";
                power-gpios = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
                keep-power-in-suspend;
        };
 
-       sdhci@c8000400 {
+       mmc@c8000400 {
                status = "okay";
                cd-gpios = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio TEGRA_GPIO(H, 1) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
        };
 
-       sdhci@c8000600 {
+       mmc@c8000600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                default-brightness-level = <6>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
                ddc-i2c-bus = <&lvds_ddc>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_5v0_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "vdd_5v0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       vdd_5v0_reg: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "vdd_1v5";
-                       regulator-min-microvolt = <1500000>;
-                       regulator-max-microvolt = <1500000>;
-                       gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
-               };
+       regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v5";
+               regulator-min-microvolt = <1500000>;
+               regulator-max-microvolt = <1500000>;
+               gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
+       };
 
-               regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "vdd_1v2";
-                       regulator-min-microvolt = <1200000>;
-                       regulator-max-microvolt = <1200000>;
-                       gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v2";
+               regulator-min-microvolt = <1200000>;
+               regulator-max-microvolt = <1200000>;
+               gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vbus_reg: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "vdd_vbus_wup1";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(D, 0) 0>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
+       vbus_reg: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_vbus_wup1";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(D, 0) 0>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-               vdd_pnl_reg: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "vdd_pnl";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpio TEGRA_GPIO(C, 6) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vdd_pnl_reg: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_pnl";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpio TEGRA_GPIO(C, 6) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_bl_reg: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "vdd_bl";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpio TEGRA_GPIO(W, 0) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vdd_bl_reg: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_bl";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpio TEGRA_GPIO(W, 0) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_hdmi: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg = <6>;
-                       regulator-name = "VDDIO_HDMI";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(V, 5) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_reg>;
-               };
+       vdd_hdmi: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDDIO_HDMI";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(V, 5) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_reg>;
        };
 
        sound {
index 20137fc..95e6bcc 100644 (file)
                status = "okay";
        };
 
-       sdhci@c8000600 {
+       mmc@c8000600 {
                cd-gpios = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio TEGRA_GPIO(H, 3) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
                status = "okay";
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               pci_vdd_reg: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "vdd_1v05";
-                       regulator-min-microvolt = <1050000>;
-                       regulator-max-microvolt = <1050000>;
-                       gpio = <&pmic 2 0>;
-                       enable-active-high;
-               };
+       pci_vdd_reg: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v05";
+               regulator-min-microvolt = <1050000>;
+               regulator-max-microvolt = <1050000>;
+               gpio = <&pmic 2 0>;
+               enable-active-high;
        };
 };
index 4dec277..44ced60 100644 (file)
                clock-names = "pll_a", "pll_a_out0", "mclk";
        };
 
-       regulators {
-               vcc_24v_reg: regulator@100 {
-                       compatible = "regulator-fixed";
-                       reg = <100>;
-                       regulator-name = "vcc_24v";
-                       regulator-min-microvolt = <24000000>;
-                       regulator-max-microvolt = <24000000>;
-                       regulator-always-on;
-               };
+       vcc_24v_reg: regulator@100 {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc_24v";
+               regulator-min-microvolt = <24000000>;
+               regulator-max-microvolt = <24000000>;
+               regulator-always-on;
+       };
 
-               vdd_5v0_reg: regulator@101 {
-                       compatible = "regulator-fixed";
-                       reg = <101>;
-                       regulator-name = "vdd_5v0";
-                       vin-supply = <&vcc_24v_reg>;
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       vdd_5v0_reg: regulator@101 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_5v0";
+               vin-supply = <&vcc_24v_reg>;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               vdd_3v3_reg: regulator@102 {
-                       compatible = "regulator-fixed";
-                       reg = <102>;
-                       regulator-name = "vdd_3v3";
-                       vin-supply = <&vcc_24v_reg>;
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       vdd_3v3_reg: regulator@102 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_3v3";
+               vin-supply = <&vcc_24v_reg>;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
 
-               vdd_1v8_reg: regulator@103 {
-                       compatible = "regulator-fixed";
-                       reg = <103>;
-                       regulator-name = "vdd_1v8";
-                       vin-supply = <&vdd_3v3_reg>;
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       regulator-always-on;
-               };
+       vdd_1v8_reg: regulator@103 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v8";
+               vin-supply = <&vdd_3v3_reg>;
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
        };
 };
index 8debd3d..4bc87bc 100644 (file)
                status = "okay";
        };
 
-       sdhci@c8000000 {
+       mmc@c8000000 {
                status = "okay";
                broken-cd;
                bus-width = <4>;
        };
 
-       sdhci@c8000600 {
+       mmc@c8000600 {
                status = "okay";
                cd-gpios = <&gpio TEGRA_GPIO(P, 1) GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
                gpios = <&gpio TEGRA_GPIO(X, 7) GPIO_ACTIVE_LOW>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               hdmi_vdd_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "avdd_hdmi";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       hdmi_vdd_reg: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "avdd_hdmi";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
 
-               hdmi_pll_reg: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "avdd_hdmi_pll";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       regulator-always-on;
-               };
+       hdmi_pll_reg: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "avdd_hdmi_pll";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
+       };
 
-               vbus_reg: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "usb1_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(V, 2) 0>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
+       vbus_reg: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(V, 2) 0>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-               pci_clk_reg: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "pci_clk";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       pci_clk_reg: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "pci_clk";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
 
-               pci_vdd_reg: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "pci_vdd";
-                       regulator-min-microvolt = <1050000>;
-                       regulator-max-microvolt = <1050000>;
-                       regulator-always-on;
-               };
+       pci_vdd_reg: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "pci_vdd";
+               regulator-min-microvolt = <1050000>;
+               regulator-max-microvolt = <1050000>;
+               regulator-always-on;
        };
 
        sound {
index 0226491..b158771 100644 (file)
                status = "okay";
        };
 
-       sdhci@c8000000 {
+       mmc@c8000000 {
                status = "okay";
                power-gpios = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
                keep-power-in-suspend;
        };
 
-       sdhci@c8000400 {
+       mmc@c8000400 {
                status = "okay";
                cd-gpios = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio TEGRA_GPIO(H, 1) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
        };
 
-       sdhci@c8000600 {
+       mmc@c8000600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                default-brightness-level = <6>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
                ddc-i2c-bus = <&lvds_ddc>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_5v0_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "vdd_5v0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       vdd_5v0_reg: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "vdd_1v5";
-                       regulator-min-microvolt = <1500000>;
-                       regulator-max-microvolt = <1500000>;
-                       gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
-               };
+       regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v5";
+               regulator-min-microvolt = <1500000>;
+               regulator-max-microvolt = <1500000>;
+               gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
+       };
 
-               regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "vdd_1v2";
-                       regulator-min-microvolt = <1200000>;
-                       regulator-max-microvolt = <1200000>;
-                       gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_1v2";
+               regulator-min-microvolt = <1200000>;
+               regulator-max-microvolt = <1200000>;
+               gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_pnl_reg: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "vdd_pnl";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpio TEGRA_GPIO(C, 6) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vdd_pnl_reg: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_pnl";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpio TEGRA_GPIO(C, 6) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_bl_reg: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "vdd_bl";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       gpio = <&gpio TEGRA_GPIO(W, 0) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vdd_bl_reg: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_bl";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&gpio TEGRA_GPIO(W, 0) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
        };
 
        sound {
index c3b8ad5..72a4211 100644 (file)
                reg = <0 0>;
        };
 
-       iram@40000000 {
+       sram@40000000 {
                compatible = "mmio-sram";
                reg = <0x40000000 0x40000>;
                #address-cells = <1>;
                #size-cells = <1>;
                ranges = <0 0x40000000 0x40000>;
 
-               vde_pool: vde@400 {
+               vde_pool: sram@400 {
                        reg = <0x400 0x3fc00>;
                        pool;
                };
        };
 
        host1x@50000000 {
-               compatible = "nvidia,tegra20-host1x", "simple-bus";
+               compatible = "nvidia,tegra20-host1x";
                reg = <0x50000000 0x00024000>;
                interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>, /* syncpt */
                             <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* general */
+               interrupt-names = "syncpt", "host1x";
                clocks = <&tegra_car TEGRA20_CLK_HOST1X>;
+               clock-names = "host1x";
                resets = <&tegra_car 28>;
                reset-names = "host1x";
 
                dsi@54300000 {
                        compatible = "nvidia,tegra20-dsi";
                        reg = <0x54300000 0x00040000>;
-                       clocks = <&tegra_car TEGRA20_CLK_DSI>;
+                       clocks = <&tegra_car TEGRA20_CLK_DSI>,
+                                <&tegra_car TEGRA20_CLK_PLL_D_OUT0>;
+                       clock-names = "dsi", "parent";
                        resets = <&tegra_car 48>;
                        reset-names = "dsi";
                        status = "disabled";
 
        intc: interrupt-controller@50041000 {
                compatible = "arm,cortex-a9-gic";
-               reg = <0x50041000 0x1000
-                      0x50040100 0x0100>;
+               reg = <0x50041000 0x1000>,
+                     <0x50040100 0x0100>;
                interrupt-controller;
                #interrupt-cells = <3>;
                interrupt-parent = <&intc>;
 
        vde@6001a000 {
                compatible = "nvidia,tegra20-vde";
-               reg = <0x6001a000 0x1000   /* Syntax Engine */
-                      0x6001b000 0x1000   /* Video Bitstream Engine */
-                      0x6001c000  0x100   /* Macroblock Engine */
-                      0x6001c200  0x100   /* Post-processing Engine */
-                      0x6001c400  0x100   /* Motion Compensation Engine */
-                      0x6001c600  0x100   /* Transform Engine */
-                      0x6001c800  0x100   /* Pixel prediction block */
-                      0x6001ca00  0x100   /* Video DMA */
-                      0x6001d800  0x300>; /* Video frame controls */
+               reg = <0x6001a000 0x1000>, /* Syntax Engine */
+                     <0x6001b000 0x1000>, /* Video Bitstream Engine */
+                     <0x6001c000  0x100>, /* Macroblock Engine */
+                     <0x6001c200  0x100>, /* Post-processing Engine */
+                     <0x6001c400  0x100>, /* Motion Compensation Engine */
+                     <0x6001c600  0x100>, /* Transform Engine */
+                     <0x6001c800  0x100>, /* Pixel prediction block */
+                     <0x6001ca00  0x100>, /* Video DMA */
+                     <0x6001d800  0x300>; /* Video frame controls */
                reg-names = "sxe", "bsev", "mbe", "ppe", "mce",
                            "tfe", "ppb", "vdma", "frameid";
                iram = <&vde_pool>; /* IRAM region */
 
        apbmisc@70000800 {
                compatible = "nvidia,tegra20-apbmisc";
-               reg = <0x70000800 0x64   /* Chip revision */
-                      0x70000008 0x04>; /* Strapping options */
+               reg = <0x70000800 0x64>, /* Chip revision */
+                     <0x70000008 0x04>; /* Strapping options */
        };
 
        pinmux: pinmux@70000014 {
                compatible = "nvidia,tegra20-pinmux";
-               reg = <0x70000014 0x10   /* Tri-state registers */
-                      0x70000080 0x20   /* Mux registers */
-                      0x700000a0 0x14   /* Pull-up/down registers */
-                      0x70000868 0xa8>; /* Pad control registers */
+               reg = <0x70000014 0x10>, /* Tri-state registers */
+                     <0x70000080 0x20>, /* Mux registers */
+                     <0x700000a0 0x14>, /* Pull-up/down registers */
+                     <0x70000868 0xa8>; /* Pad control registers */
        };
 
        das@70000c00 {
 
        mc: memory-controller@7000f000 {
                compatible = "nvidia,tegra20-mc-gart";
-               reg = <0x7000f000 0x400         /* controller registers */
-                      0x58000000 0x02000000>;  /* GART aperture */
+               reg = <0x7000f000 0x00000400>, /* controller registers */
+                     <0x58000000 0x02000000>; /* GART aperture */
                clocks = <&tegra_car TEGRA20_CLK_MC>;
                clock-names = "mc";
                interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
        pcie@80003000 {
                compatible = "nvidia,tegra20-pcie";
                device_type = "pci";
-               reg = <0x80003000 0x00000800   /* PADS registers */
-                      0x80003800 0x00000200   /* AFI registers */
-                      0x90000000 0x10000000>; /* configuration space */
+               reg = <0x80003000 0x00000800>, /* PADS registers */
+                     <0x80003800 0x00000200>, /* AFI registers */
+                     <0x90000000 0x10000000>; /* configuration space */
                reg-names = "pads", "afi", "cs";
-               interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH   /* controller interrupt */
-                             GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
+               interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
+                            <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                interrupt-names = "intr", "msi";
 
                #interrupt-cells = <1>;
                #address-cells = <3>;
                #size-cells = <2>;
 
-               ranges = <0x82000000 0 0x80000000 0x80000000 0 0x00001000   /* port 0 registers */
-                         0x82000000 0 0x80001000 0x80001000 0 0x00001000   /* port 1 registers */
-                         0x81000000 0 0          0x82000000 0 0x00010000   /* downstream I/O */
-                         0x82000000 0 0xa0000000 0xa0000000 0 0x08000000   /* non-prefetchable memory */
-                         0xc2000000 0 0xa8000000 0xa8000000 0 0x18000000>; /* prefetchable memory */
+               ranges = <0x02000000 0 0x80000000 0x80000000 0 0x00001000>, /* port 0 registers */
+                        <0x02000000 0 0x80001000 0x80001000 0 0x00001000>, /* port 1 registers */
+                        <0x01000000 0 0          0x82000000 0 0x00010000>, /* downstream I/O */
+                        <0x02000000 0 0xa0000000 0xa0000000 0 0x08000000>, /* non-prefetchable memory */
+                        <0x42000000 0 0xa8000000 0xa8000000 0 0x18000000>; /* prefetchable memory */
 
                clocks = <&tegra_car TEGRA20_CLK_PEX>,
                         <&tegra_car TEGRA20_CLK_AFI>,
 
        phy1: usb-phy@c5000000 {
                compatible = "nvidia,tegra20-usb-phy";
-               reg = <0xc5000000 0x4000 0xc5000000 0x4000>;
+               reg = <0xc5000000 0x4000>,
+                     <0xc5000000 0x4000>;
                phy_type = "utmi";
                clocks = <&tegra_car TEGRA20_CLK_USBD>,
                         <&tegra_car TEGRA20_CLK_PLL_U>,
                clock-names = "reg", "pll_u", "timer", "utmi-pads";
                resets = <&tegra_car 22>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,has-legacy-mode;
                nvidia,hssync-start-delay = <9>;
                nvidia,idle-wait-delay = <17>;
                clock-names = "reg", "pll_u", "ulpi-link";
                resets = <&tegra_car 58>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                status = "disabled";
        };
 
 
        phy3: usb-phy@c5008000 {
                compatible = "nvidia,tegra20-usb-phy";
-               reg = <0xc5008000 0x4000 0xc5000000 0x4000>;
+               reg = <0xc5008000 0x4000>,
+                     <0xc5000000 0x4000>;
                phy_type = "utmi";
                clocks = <&tegra_car TEGRA20_CLK_USB3>,
                         <&tegra_car TEGRA20_CLK_PLL_U>,
                clock-names = "reg", "pll_u", "timer", "utmi-pads";
                resets = <&tegra_car 59>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <9>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
                status = "disabled";
        };
 
-       sdhci@c8000000 {
+       mmc@c8000000 {
                compatible = "nvidia,tegra20-sdhci";
                reg = <0xc8000000 0x200>;
                interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA20_CLK_SDMMC1>;
+               clock-names = "sdhci";
                resets = <&tegra_car 14>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@c8000200 {
+       mmc@c8000200 {
                compatible = "nvidia,tegra20-sdhci";
                reg = <0xc8000200 0x200>;
                interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA20_CLK_SDMMC2>;
+               clock-names = "sdhci";
                resets = <&tegra_car 9>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@c8000400 {
+       mmc@c8000400 {
                compatible = "nvidia,tegra20-sdhci";
                reg = <0xc8000400 0x200>;
                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA20_CLK_SDMMC3>;
+               clock-names = "sdhci";
                resets = <&tegra_car 69>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@c8000600 {
+       mmc@c8000600 {
                compatible = "nvidia,tegra20-sdhci";
                reg = <0xc8000600 0x200>;
                interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA20_CLK_SDMMC4>;
+               clock-names = "sdhci";
                resets = <&tegra_car 15>;
                reset-names = "sdhci";
                status = "disabled";
index b39c268..9f653ef 100644 (file)
        };
 
        /* Apalis SD1 */
-       sdhci@78000000 {
+       mmc@78000000 {
                status = "okay";
                bus-width = <4>;
                /* SD1_CD# */
        };
 
        /* Apalis MMC1 */
-       sdhci@78000400 {
+       mmc@78000400 {
                status = "okay";
                bus-width = <8>;
                /* MMC1_CD# */
index e29dca9..86e138e 100644 (file)
        };
 
        /* Apalis SD1 */
-       sdhci@78000000 {
+       mmc@78000000 {
                status = "okay";
                bus-width = <4>;
                /* SD1_CD# */
        };
 
        /* Apalis MMC1 */
-       sdhci@78000400 {
+       mmc@78000400 {
                status = "okay";
                bus-width = <8>;
                /* MMC1_CD# */
                regulator-max-microvolt = <3300000>;
                regulator-type = "voltage";
                gpios = <&gpio TEGRA_GPIO(J, 5) GPIO_ACTIVE_HIGH>;
-               states = <1800000 0x0
-                         3300000 0x1>;
+               states = <1800000 0x0>,
+                        <3300000 0x1>;
                startup-delay-us = <100000>;
                vin-supply = <&vddio_sdmmc_1v8_reg>;
        };
index 387b174..6a3a72f 100644 (file)
@@ -37,7 +37,7 @@
                        status = "okay";
                        nvidia,num-lanes = <1>;
 
-                       pcie@0 {
+                       ethernet@0,0 {
                                reg = <0 0 0 0 0>;
                                local-mac-address = [00 00 00 00 00 00];
                        };
                sgtl5000: codec@a {
                        compatible = "fsl,sgtl5000";
                        reg = <0x0a>;
+                       #sound-dai-cells = <0>;
                        VDDA-supply = <&reg_module_3v3_audio>;
                        VDDD-supply = <&reg_1v8_vio>;
                        VDDIO-supply = <&reg_module_3v3>;
        };
 
        /* eMMC */
-       sdhci@78000600 {
+       mmc@78000600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
index 6648506..6544ce7 100644 (file)
@@ -36,7 +36,7 @@
                        status = "okay";
                        nvidia,num-lanes = <1>;
 
-                       pcie@0 {
+                       ethernet@0,0 {
                                reg = <0 0 0 0 0>;
                                local-mac-address = [00 00 00 00 00 00];
                        };
                sgtl5000: codec@a {
                        compatible = "fsl,sgtl5000";
                        reg = <0x0a>;
+                       #sound-dai-cells = <0>;
                        VDDA-supply = <&reg_module_3v3_audio>;
                        VDDD-supply = <&reg_1v8_vio>;
                        VDDIO-supply = <&reg_module_3v3>;
        };
 
        /* eMMC */
-       sdhci@78000600 {
+       mmc@78000600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
diff --git a/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-E1565.dts b/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-E1565.dts
new file mode 100644 (file)
index 0000000..a25b856
--- /dev/null
@@ -0,0 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+
+#include "tegra30-asus-nexus7-grouper-maxim-pmic.dtsi"
+#include "tegra30-asus-nexus7-grouper.dtsi"
+
+/ {
+       model = "ASUS Google Nexus 7 (Project Nakasi / ME370T) E1565";
+};
diff --git a/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-PM269.dts b/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-PM269.dts
new file mode 100644 (file)
index 0000000..06ef13e
--- /dev/null
@@ -0,0 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+
+#include "tegra30-asus-nexus7-grouper-ti-pmic.dtsi"
+#include "tegra30-asus-nexus7-grouper.dtsi"
+
+/ {
+       model = "ASUS Google Nexus 7 (Project Nakasi / ME370T) PM269";
+};
diff --git a/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-common.dtsi b/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-common.dtsi
new file mode 100644 (file)
index 0000000..3922517
--- /dev/null
@@ -0,0 +1,1232 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <dt-bindings/input/gpio-keys.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/thermal/thermal.h>
+
+#include "tegra30.dtsi"
+#include "tegra30-cpu-opp.dtsi"
+#include "tegra30-cpu-opp-microvolt.dtsi"
+
+/ {
+       aliases {
+               rtc0 = &pmic;
+               rtc1 = "/rtc@7000e000";
+
+               serial1 = &uartc; /* Bluetooth */
+               serial2 = &uartb; /* GPS */
+       };
+
+       /*
+        * The decompressor and also some bootloaders rely on a
+        * pre-existing /chosen node to be available to insert the
+        * command line and merge other ATAGS info.
+        */
+       chosen {};
+
+       memory@80000000 {
+               reg = <0x80000000 0x40000000>;
+       };
+
+       reserved-memory {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               linux,cma@80000000 {
+                       compatible = "shared-dma-pool";
+                       alloc-ranges = <0x80000000 0x30000000>;
+                       size = <0x10000000>; /* 256MiB */
+                       linux,cma-default;
+                       reusable;
+               };
+
+               ramoops@bfdf0000 {
+                       compatible = "ramoops";
+                       reg = <0xbfdf0000 0x10000>;     /* 64kB */
+                       console-size = <0x8000>;        /* 32kB */
+                       record-size = <0x400>;          /*  1kB */
+                       ecc-size = <16>;
+               };
+
+               trustzone@bfe00000 {
+                       reg = <0xbfe00000 0x200000>;
+                       no-map;
+               };
+       };
+
+       host1x@50000000 {
+               dc@54200000 {
+                       rgb {
+                               status = "okay";
+
+                               port@0 {
+                                       lcd_output: endpoint {
+                                               remote-endpoint = <&lvds_encoder_input>;
+                                               bus-width = <24>;
+                                       };
+                               };
+                       };
+               };
+       };
+
+       gpio@6000d000 {
+               init-mode {
+                       gpio-hog;
+                       gpios = <TEGRA_GPIO(DD, 7) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(CC, 6) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(R, 0) GPIO_ACTIVE_HIGH>;
+                       output-low;
+               };
+
+               init-low-power-mode {
+                       gpio-hog;
+                       gpios = <TEGRA_GPIO(I, 6) GPIO_ACTIVE_HIGH>;
+                       input;
+               };
+       };
+
+       pinmux@70000868 {
+               pinctrl-names = "default";
+               pinctrl-0 = <&state_default>;
+
+               state_default: pinmux {
+                       clk_32k_out_pa0 {
+                               nvidia,pins = "clk_32k_out_pa0";
+                               nvidia,function = "blink";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       uart3_cts_n_pa1 {
+                               nvidia,pins = "uart3_cts_n_pa1",
+                                               "uart3_rxd_pw7";
+                               nvidia,function = "uartc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       dap2_fs_pa2 {
+                               nvidia,pins = "dap2_fs_pa2",
+                                               "dap2_sclk_pa3",
+                                               "dap2_din_pa4",
+                                               "dap2_dout_pa5";
+                               nvidia,function = "i2s1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       sdmmc3_clk_pa6 {
+                               nvidia,pins = "sdmmc3_clk_pa6";
+                               nvidia,function = "sdmmc3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       sdmmc3_cmd_pa7 {
+                               nvidia,pins = "sdmmc3_cmd_pa7",
+                                               "sdmmc3_dat3_pb4",
+                                               "sdmmc3_dat2_pb5",
+                                               "sdmmc3_dat1_pb6",
+                                               "sdmmc3_dat0_pb7",
+                                               "sdmmc3_dat4_pd1",
+                                               "sdmmc3_dat6_pd3",
+                                               "sdmmc3_dat7_pd4";
+                               nvidia,function = "sdmmc3";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       gmi_a17_pb0 {
+                               nvidia,pins = "gmi_a17_pb0",
+                                               "gmi_a18_pb1";
+                               nvidia,function = "uartd";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       lcd_pwr0_pb2 {
+                               nvidia,pins = "lcd_pwr0_pb2",
+                                               "lcd_pwr1_pc1",
+                                               "lcd_m1_pw1";
+                               nvidia,function = "displaya";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       lcd_pclk_pb3 {
+                               nvidia,pins = "lcd_pclk_pb3",
+                                               "lcd_d0_pe0",
+                                               "lcd_d1_pe1",
+                                               "lcd_d2_pe2",
+                                               "lcd_d3_pe3",
+                                               "lcd_d4_pe4",
+                                               "lcd_d5_pe5",
+                                               "lcd_d6_pe6",
+                                               "lcd_d7_pe7",
+                                               "lcd_d8_pf0",
+                                               "lcd_d9_pf1",
+                                               "lcd_d10_pf2",
+                                               "lcd_d11_pf3",
+                                               "lcd_d12_pf4",
+                                               "lcd_d13_pf5",
+                                               "lcd_d14_pf6",
+                                               "lcd_d15_pf7",
+                                               "lcd_de_pj1",
+                                               "lcd_hsync_pj3",
+                                               "lcd_vsync_pj4",
+                                               "lcd_d16_pm0",
+                                               "lcd_d17_pm1",
+                                               "lcd_d18_pm2",
+                                               "lcd_d19_pm3",
+                                               "lcd_d20_pm4",
+                                               "lcd_d21_pm5",
+                                               "lcd_d22_pm6",
+                                               "lcd_d23_pm7",
+                                               "lcd_cs0_n_pn4",
+                                               "lcd_sdout_pn5",
+                                               "lcd_dc0_pn6",
+                                               "lcd_cs1_n_pw0",
+                                               "lcd_sdin_pz2",
+                                               "lcd_sck_pz4";
+                               nvidia,function = "displaya";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       uart3_rts_n_pc0 {
+                               nvidia,pins = "uart3_rts_n_pc0",
+                                               "uart3_txd_pw6";
+                               nvidia,function = "uartc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       uart2_txd_pc2 {
+                               nvidia,pins = "uart2_txd_pc2",
+                                               "uart2_rts_n_pj6";
+                               nvidia,function = "uartb";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       uart2_rxd_pc3 {
+                               nvidia,pins = "uart2_rxd_pc3",
+                                               "uart2_cts_n_pj5";
+                               nvidia,function = "uartb";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       gen1_i2c_scl_pc4 {
+                               nvidia,pins = "gen1_i2c_scl_pc4",
+                                               "gen1_i2c_sda_pc5";
+                               nvidia,function = "i2c1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                               nvidia,open-drain = <TEGRA_PIN_ENABLE>;
+                       };
+                       gmi_wp_n_pc7 {
+                               nvidia,pins = "gmi_wp_n_pc7",
+                                               "gmi_wait_pi7",
+                                               "gmi_cs4_n_pk2",
+                                               "gmi_cs3_n_pk4";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_ad12_ph4 {
+                               nvidia,pins = "gmi_ad12_ph4",
+                                               "gmi_cs0_n_pj0",
+                                               "gmi_cs1_n_pj2",
+                                               "gmi_cs2_n_pk3";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       sdmmc3_dat5_pd0 {
+                               nvidia,pins = "sdmmc3_dat5_pd0";
+                               nvidia,function = "sdmmc3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_ad0_pg0 {
+                               nvidia,pins = "gmi_ad0_pg0",
+                                               "gmi_ad1_pg1",
+                                               "gmi_ad14_ph6",
+                                               "pu1";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_ad2_pg2 {
+                               nvidia,pins = "gmi_ad2_pg2",
+                                               "gmi_ad3_pg3",
+                                               "gmi_ad6_pg6",
+                                               "gmi_ad7_pg7";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_ad4_pg4 {
+                               nvidia,pins = "gmi_ad4_pg4",
+                                               "gmi_ad5_pg5";
+                               nvidia,function = "nand";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       gmi_ad8_ph0 {
+                               nvidia,pins = "gmi_ad8_ph0";
+                               nvidia,function = "pwm0";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_ad9_ph1 {
+                               nvidia,pins = "gmi_ad9_ph1";
+                               nvidia,function = "rsvd4";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_ad10_ph2 {
+                               nvidia,pins = "gmi_ad10_ph2";
+                               nvidia,function = "pwm2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_ad11_ph3 {
+                               nvidia,pins = "gmi_ad11_ph3";
+                               nvidia,function = "pwm3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_ad13_ph5 {
+                               nvidia,pins = "gmi_ad13_ph5",
+                                               "gmi_wr_n_pi0",
+                                               "gmi_oe_n_pi1",
+                                               "gmi_adv_n_pk0";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_ad15_ph7 {
+                               nvidia,pins = "gmi_ad15_ph7";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_dqs_pi2 {
+                               nvidia,pins = "gmi_dqs_pi2",
+                                               "pu2",
+                                               "pv1";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       gmi_rst_n_pi4 {
+                               nvidia,pins = "gmi_rst_n_pi4";
+                               nvidia,function = "nand";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_iordy_pi5 {
+                               nvidia,pins = "gmi_iordy_pi5";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       gmi_cs7_n_pi6 {
+                               nvidia,pins = "gmi_cs7_n_pi6",
+                                               "gmi_clk_pk1";
+                               nvidia,function = "nand";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_a16_pj7 {
+                               nvidia,pins = "gmi_a16_pj7",
+                                               "gmi_a19_pk7";
+                               nvidia,function = "uartd";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       spdif_out_pk5 {
+                               nvidia,pins = "spdif_out_pk5";
+                               nvidia,function = "spdif";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       spdif_in_pk6 {
+                               nvidia,pins = "spdif_in_pk6";
+                               nvidia,function = "spdif";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       dap1_fs_pn0 {
+                               nvidia,pins = "dap1_fs_pn0",
+                                               "dap1_din_pn1",
+                                               "dap1_dout_pn2",
+                                               "dap1_sclk_pn3";
+                               nvidia,function = "i2s0";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       hdmi_int_pn7 {
+                               nvidia,pins = "hdmi_int_pn7";
+                               nvidia,function = "hdmi";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       ulpi_data7_po0 {
+                               nvidia,pins = "ulpi_data7_po0";
+                               nvidia,function = "uarta";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       ulpi_data3_po4 {
+                               nvidia,pins = "ulpi_data3_po4";
+                               nvidia,function = "ulpi";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       dap3_fs_pp0 {
+                               nvidia,pins = "dap3_fs_pp0";
+                               nvidia,function = "i2s2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       dap4_fs_pp4 {
+                               nvidia,pins = "dap4_fs_pp4",
+                                               "dap4_din_pp5",
+                                               "dap4_dout_pp6",
+                                               "dap4_sclk_pp7";
+                               nvidia,function = "i2s3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       kb_col0_pq0 {
+                               nvidia,pins = "kb_col0_pq0",
+                                               "kb_col1_pq1",
+                                               "kb_row1_pr1";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       kb_col2_pq2 {
+                               nvidia,pins = "kb_col2_pq2",
+                                               "kb_col3_pq3";
+                               nvidia,function = "rsvd4";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       kb_col4_pq4 {
+                               nvidia,pins = "kb_col4_pq4",
+                                               "kb_col5_pq5",
+                                               "kb_col7_pq7",
+                                               "kb_row2_pr2",
+                                               "kb_row4_pr4",
+                                               "kb_row5_pr5",
+                                               "kb_row14_ps6";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       kb_row0_pr0 {
+                               nvidia,pins = "kb_row0_pr0";
+                               nvidia,function = "rsvd4";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       kb_row6_pr6 {
+                               nvidia,pins = "kb_row6_pr6",
+                                               "kb_row8_ps0",
+                                               "kb_row9_ps1",
+                                               "kb_row10_ps2";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       kb_row11_ps3 {
+                               nvidia,pins = "kb_row11_ps3",
+                                               "kb_row12_ps4";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       gen2_i2c_scl_pt5 {
+                               nvidia,pins = "gen2_i2c_scl_pt5",
+                                               "gen2_i2c_sda_pt6";
+                               nvidia,function = "i2c2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                               nvidia,open-drain = <TEGRA_PIN_ENABLE>;
+                       };
+                       sdmmc4_cmd_pt7 {
+                               nvidia,pins = "sdmmc4_cmd_pt7",
+                                               "sdmmc4_dat0_paa0",
+                                               "sdmmc4_dat1_paa1",
+                                               "sdmmc4_dat2_paa2",
+                                               "sdmmc4_dat3_paa3",
+                                               "sdmmc4_dat4_paa4",
+                                               "sdmmc4_dat5_paa5",
+                                               "sdmmc4_dat6_paa6",
+                                               "sdmmc4_dat7_paa7";
+                               nvidia,function = "sdmmc4";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       pu0 {
+                               nvidia,pins = "pu0",
+                                               "pu6";
+                               nvidia,function = "rsvd4";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       jtag_rtck_pu7 {
+                               nvidia,pins = "jtag_rtck_pu7";
+                               nvidia,function = "rtck";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       pv0 {
+                               nvidia,pins = "pv0";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       ddc_scl_pv4 {
+                               nvidia,pins = "ddc_scl_pv4",
+                                               "ddc_sda_pv5";
+                               nvidia,function = "i2c4";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       crt_hsync_pv6 {
+                               nvidia,pins = "crt_hsync_pv6",
+                                               "crt_vsync_pv7";
+                               nvidia,function = "crt";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       spi2_cs1_n_pw2 {
+                               nvidia,pins = "spi2_cs1_n_pw2",
+                                               "spi2_miso_px1",
+                                               "spi2_sck_px2";
+                               nvidia,function = "spi2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       clk1_out_pw4 {
+                               nvidia,pins = "clk1_out_pw4";
+                               nvidia,function = "extperiph1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       clk2_out_pw5 {
+                               nvidia,pins = "clk2_out_pw5";
+                               nvidia,function = "extperiph2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       spi2_cs0_n_px3 {
+                               nvidia,pins = "spi2_cs0_n_px3";
+                               nvidia,function = "spi6";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       spi1_mosi_px4 {
+                               nvidia,pins = "spi1_mosi_px4",
+                                               "spi1_cs0_n_px6";
+                               nvidia,function = "spi1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       ulpi_clk_py0 {
+                               nvidia,pins = "ulpi_clk_py0",
+                                               "ulpi_dir_py1";
+                               nvidia,function = "ulpi";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       sdmmc1_dat3_py4 {
+                               nvidia,pins = "sdmmc1_dat3_py4",
+                                               "sdmmc1_dat2_py5",
+                                               "sdmmc1_dat1_py6",
+                                               "sdmmc1_dat0_py7",
+                                               "sdmmc1_cmd_pz1";
+                               nvidia,function = "sdmmc1";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       sdmmc1_clk_pz0 {
+                               nvidia,pins = "sdmmc1_clk_pz0";
+                               nvidia,function = "sdmmc1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       lcd_wr_n_pz3 {
+                               nvidia,pins = "lcd_wr_n_pz3";
+                               nvidia,function = "displaya";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       sys_clk_req_pz5 {
+                               nvidia,pins = "sys_clk_req_pz5";
+                               nvidia,function = "sysclk";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       pwr_i2c_scl_pz6 {
+                               nvidia,pins = "pwr_i2c_scl_pz6",
+                                               "pwr_i2c_sda_pz7";
+                               nvidia,function = "i2cpwr";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                               nvidia,open-drain = <TEGRA_PIN_ENABLE>;
+                       };
+                       pbb0 {
+                               nvidia,pins = "pbb0",
+                                               "pcc1";
+                               nvidia,function = "rsvd2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       cam_i2c_scl_pbb1 {
+                               nvidia,pins = "cam_i2c_scl_pbb1",
+                                               "cam_i2c_sda_pbb2";
+                               nvidia,function = "i2c3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                               nvidia,open-drain = <TEGRA_PIN_ENABLE>;
+                       };
+                       pbb3 {
+                               nvidia,pins = "pbb3";
+                               nvidia,function = "vgp3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       pbb4 {
+                               nvidia,pins = "pbb4";
+                               nvidia,function = "vgp4";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       pbb5 {
+                               nvidia,pins = "pbb5";
+                               nvidia,function = "vgp5";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       pbb6 {
+                               nvidia,pins = "pbb6";
+                               nvidia,function = "vgp6";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       pbb7 {
+                               nvidia,pins = "pbb7",
+                                               "pcc2";
+                               nvidia,function = "i2s4";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       cam_mclk_pcc0 {
+                               nvidia,pins = "cam_mclk_pcc0";
+                               nvidia,function = "vi_alt3";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       sdmmc4_rst_n_pcc3 {
+                               nvidia,pins = "sdmmc4_rst_n_pcc3";
+                               nvidia,function = "rsvd2";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       sdmmc4_clk_pcc4 {
+                               nvidia,pins = "sdmmc4_clk_pcc4";
+                               nvidia,function = "sdmmc4";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       clk2_req_pcc5 {
+                               nvidia,pins = "clk2_req_pcc5";
+                               nvidia,function = "dap";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       pex_l2_rst_n_pcc6 {
+                               nvidia,pins = "pex_l2_rst_n_pcc6",
+                                               "pex_l2_clkreq_n_pcc7";
+                               nvidia,function = "pcie";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       pex_wake_n_pdd3 {
+                               nvidia,pins = "pex_wake_n_pdd3",
+                                               "pex_l2_prsnt_n_pdd7";
+                               nvidia,function = "pcie";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       clk3_out_pee0 {
+                               nvidia,pins = "clk3_out_pee0";
+                               nvidia,function = "extperiph3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       clk1_req_pee2 {
+                               nvidia,pins = "clk1_req_pee2";
+                               nvidia,function = "dap";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       hdmi_cec_pee3 {
+                               nvidia,pins = "hdmi_cec_pee3";
+                               nvidia,function = "cec";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                               nvidia,open-drain = <TEGRA_PIN_DISABLE>;
+                       };
+                       owr {
+                               nvidia,pins = "owr";
+                               nvidia,function = "owr";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       drive_dap1 {
+                               nvidia,pins = "drive_dap1",
+                                               "drive_dap2",
+                                               "drive_dbg",
+                                               "drive_at5",
+                                               "drive_gme",
+                                               "drive_ddc",
+                                               "drive_ao1",
+                                               "drive_uart3";
+                               nvidia,high-speed-mode = <0>;
+                               nvidia,schmitt = <TEGRA_PIN_ENABLE>;
+                               nvidia,low-power-mode = <TEGRA_PIN_LP_DRIVE_DIV_1>;
+                               nvidia,pull-down-strength = <31>;
+                               nvidia,pull-up-strength = <31>;
+                               nvidia,slew-rate-rising = <TEGRA_PIN_SLEW_RATE_FASTEST>;
+                               nvidia,slew-rate-falling = <TEGRA_PIN_SLEW_RATE_FASTEST>;
+                       };
+                       drive_sdio1 {
+                               nvidia,pins = "drive_sdio1",
+                                               "drive_sdio3";
+                               nvidia,high-speed-mode = <0>;
+                               nvidia,schmitt = <TEGRA_PIN_DISABLE>;
+                               nvidia,pull-down-strength = <46>;
+                               nvidia,pull-up-strength = <42>;
+                               nvidia,slew-rate-rising = <TEGRA_PIN_SLEW_RATE_FAST>;
+                               nvidia,slew-rate-falling = <TEGRA_PIN_SLEW_RATE_FAST>;
+                       };
+                       drive_gma {
+                               nvidia,pins = "drive_gma",
+                                               "drive_gmb",
+                                               "drive_gmc",
+                                               "drive_gmd";
+                               nvidia,pull-down-strength = <9>;
+                               nvidia,pull-up-strength = <9>;
+                               nvidia,slew-rate-rising = <TEGRA_PIN_SLEW_RATE_SLOWEST>;
+                               nvidia,slew-rate-falling = <TEGRA_PIN_SLEW_RATE_SLOWEST>;
+                       };
+               };
+       };
+
+       uartb: serial@70006040 {
+               compatible = "nvidia,tegra30-hsuart";
+               /* GPS BCM4751 */
+       };
+
+       uartc: serial@70006200 {
+               compatible = "nvidia,tegra30-hsuart";
+               status = "okay";
+
+               nvidia,adjust-baud-rates = <0 9600 100>,
+                                          <9600 115200 200>,
+                                          <1000000 4000000 136>;
+
+               /* Azurewave AW-NH665 BCM4330B1 */
+               bluetooth {
+                       compatible = "brcm,bcm4330-bt";
+
+                       max-speed = <4000000>;
+
+                       clocks = <&tegra_pmc TEGRA_PMC_CLK_BLINK>;
+                       clock-names = "txco";
+
+                       vbat-supply  = <&vdd_3v3_sys>;
+                       vddio-supply = <&vdd_1v8>;
+
+                       device-wakeup-gpios = <&gpio TEGRA_GPIO(U, 1) GPIO_ACTIVE_HIGH>;
+                       host-wakeup-gpios =   <&gpio TEGRA_GPIO(U, 6) GPIO_ACTIVE_HIGH>;
+                       shutdown-gpios =      <&gpio TEGRA_GPIO(U, 0) GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       pwm: pwm@7000a000 {
+               status = "okay";
+       };
+
+       i2c@7000c400 {
+               clock-frequency = <400000>;
+               status = "okay";
+       };
+
+       i2c@7000c500 {
+               clock-frequency = <100000>;
+               status = "okay";
+
+               compass@e {
+                       compatible = "asahi-kasei,ak8974";
+                       reg = <0x0e>;
+
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(W, 0) IRQ_TYPE_EDGE_RISING>;
+
+                       avdd-supply = <&vdd_3v3_sys>;
+                       dvdd-supply = <&vdd_1v8>;
+
+                       mount-matrix =   "0", "-1",  "0",
+                                       "-1",  "0",  "0",
+                                        "0",  "0", "-1";
+               };
+
+               light-sensor@1c {
+                       compatible = "dynaimage,al3010";
+                       reg = <0x1c>;
+
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(Z, 2) IRQ_TYPE_LEVEL_HIGH>;
+
+                       vdd-supply = <&vdd_3v3_sys>;
+               };
+
+               accelerometer@68 {
+                       compatible = "invensense,mpu6050";
+                       reg = <0x68>;
+
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(X, 1) IRQ_TYPE_EDGE_RISING>;
+
+                       vdd-supply   = <&vdd_3v3_sys>;
+                       vddio-supply = <&vdd_1v8>;
+
+                       mount-matrix =   "0", "-1",  "0",
+                                       "-1",  "0",  "0",
+                                        "0",  "0", "-1";
+               };
+       };
+
+       i2c@7000d000 {
+               clock-frequency = <100000>;
+               status = "okay";
+
+               rt5640: audio-codec@1c {
+                       compatible = "realtek,rt5640";
+                       reg = <0x1c>;
+
+                       realtek,dmic1-data-pin = <1>;
+               };
+
+               nct72: temperature-sensor@4c {
+                       compatible = "onnn,nct1008";
+                       reg = <0x4c>;
+                       vcc-supply = <&vdd_3v3_sys>;
+                       #thermal-sensor-cells = <1>;
+               };
+
+               battery@55 {
+                       compatible = "ti,bq27541";
+                       reg = <0x55>;
+               };
+       };
+
+       pmc@7000e400 {
+               status = "okay";
+               nvidia,invert-interrupt;
+               nvidia,suspend-mode = <1>;
+               nvidia,cpu-pwr-good-time = <2000>;
+               nvidia,cpu-pwr-off-time = <200>;
+               nvidia,core-pwr-good-time = <3845 3845>;
+               nvidia,core-pwr-off-time = <0>;
+               nvidia,core-power-req-active-high;
+               nvidia,sys-clock-req-active-high;
+       };
+
+       ahub@70080000 {
+               i2s@70080400 {
+                       status = "okay";
+               };
+       };
+
+       brcm_wifi_pwrseq: wifi-pwrseq {
+               compatible = "mmc-pwrseq-simple";
+
+               clocks = <&tegra_pmc TEGRA_PMC_CLK_BLINK>;
+               clock-names = "ext_clock";
+
+               reset-gpios = <&gpio TEGRA_GPIO(D, 4) GPIO_ACTIVE_LOW>;
+               post-power-on-delay-ms = <300>;
+               power-off-delay-us = <300>;
+       };
+
+       mmc@78000400 {
+               status = "okay";
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               keep-power-in-suspend;
+               bus-width = <4>;
+               non-removable;
+
+               mmc-pwrseq = <&brcm_wifi_pwrseq>;
+               vmmc-supply = <&vdd_3v3_sys>;
+               vqmmc-supply = <&vdd_1v8>;
+
+               /* Azurewave AW-NH665 BCM4330 */
+               wifi@1 {
+                       reg = <1>;
+                       compatible = "brcm,bcm4329-fmac";
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(O, 4) IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "host-wake";
+               };
+       };
+
+       mmc@78000600 {
+               status = "okay";
+               bus-width = <8>;
+               vmmc-supply = <&vcore_emmc>;
+               vqmmc-supply = <&vdd_1v8>;
+               non-removable;
+       };
+
+       usb@7d000000 {
+               compatible = "nvidia,tegra30-udc";
+               status = "okay";
+               dr_mode = "peripheral";
+       };
+
+       usb-phy@7d000000 {
+               status = "okay";
+               dr_mode = "peripheral";
+               nvidia,hssync-start-delay = <0>;
+               nvidia,xcvr-lsfslew = <2>;
+               nvidia,xcvr-lsrslew = <2>;
+       };
+
+       backlight: backlight {
+               compatible = "pwm-backlight";
+
+               power-supply = <&vdd_5v0_sys>;
+               pwms = <&pwm 0 50000>;
+
+               brightness-levels = <1 255>;
+               num-interpolated-steps = <254>;
+               default-brightness-level = <15>;
+       };
+
+       /* PMIC has a built-in 32KHz oscillator which is used by PMC */
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <32768>;
+               clock-output-names = "pmic-oscillator";
+       };
+
+       cpus {
+               cpu0: cpu@0 {
+                       cpu-supply = <&vdd_cpu>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       #cooling-cells = <2>;
+               };
+
+               cpu@1 {
+                       cpu-supply = <&vdd_cpu>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+               };
+
+               cpu@2 {
+                       cpu-supply = <&vdd_cpu>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+               };
+
+               cpu@3 {
+                       cpu-supply = <&vdd_cpu>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+               };
+       };
+
+       display-panel {
+               compatible = "hydis,hv070wx2-1e0", "chunghwa,claa070wp03xg",
+                            "panel-lvds";
+
+               power-supply = <&vdd_pnl>;
+               backlight = <&backlight>;
+
+               width-mm = <94>;
+               height-mm = <150>;
+               rotation = <180>;
+
+               data-mapping = "jeida-24";
+
+               port {
+                       panel_input: endpoint {
+                               remote-endpoint = <&lvds_encoder_output>;
+                       };
+               };
+       };
+
+       firmware {
+               trusted-foundations {
+                       compatible = "tlm,trusted-foundations";
+                       tlm,version-major = <0x0>;
+                       tlm,version-minor = <0x0>;
+               };
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+
+               hall-sensor {
+                       label = "Lid";
+                       gpios = <&gpio TEGRA_GPIO(S, 6) GPIO_ACTIVE_LOW>;
+                       linux,input-type = <EV_SW>;
+                       linux,code = <SW_LID>;
+                       debounce-interval = <500>;
+                       wakeup-event-action = <EV_ACT_DEASSERTED>;
+                       wakeup-source;
+               };
+
+               power {
+                       label = "Power";
+                       gpios = <&gpio TEGRA_GPIO(V, 0) GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_POWER>;
+                       debounce-interval = <10>;
+                       wakeup-event-action = <EV_ACT_ASSERTED>;
+                       wakeup-source;
+               };
+
+               volume-up {
+                       label = "Volume Up";
+                       gpios = <&gpio TEGRA_GPIO(Q, 2) GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_VOLUMEUP>;
+                       debounce-interval = <10>;
+                       wakeup-event-action = <EV_ACT_ASSERTED>;
+                       wakeup-source;
+               };
+
+               volume-down {
+                       label = "Volume Down";
+                       gpios = <&gpio TEGRA_GPIO(Q, 3) GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_VOLUMEDOWN>;
+                       debounce-interval = <10>;
+                       wakeup-event-action = <EV_ACT_ASSERTED>;
+                       wakeup-source;
+               };
+       };
+
+       lvds-encoder {
+               compatible = "ti,sn75lvds83", "lvds-encoder";
+
+               powerdown-gpios = <&gpio TEGRA_GPIO(N, 6) GPIO_ACTIVE_LOW>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+
+                               lvds_encoder_input: endpoint {
+                                       remote-endpoint = <&lcd_output>;
+                               };
+                       };
+
+                       port@1 {
+                               reg = <1>;
+
+                               lvds_encoder_output: endpoint {
+                                       remote-endpoint = <&panel_input>;
+                               };
+                       };
+               };
+       };
+
+       vdd_5v0_sys: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_3v3_sys: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       vdd_pnl: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_panel";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-enable-ramp-delay = <300000>;
+               gpio = <&gpio TEGRA_GPIO(W, 1) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
+
+       vcc_3v3_ts: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "ldo_s-1167_3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       sound {
+               compatible = "nvidia,tegra-audio-rt5640-grouper",
+                            "nvidia,tegra-audio-rt5640";
+               nvidia,model = "ASUS Google Nexus 7 ALC5642";
+
+               nvidia,audio-routing =
+                       "Headphones", "HPOR",
+                       "Headphones", "HPOL",
+                       "Speakers", "SPORP",
+                       "Speakers", "SPORN",
+                       "Speakers", "SPOLP",
+                       "Speakers", "SPOLN",
+                       "DMIC1", "Mic Jack";
+
+               nvidia,i2s-controller = <&tegra_i2s1>;
+               nvidia,audio-codec = <&rt5640>;
+
+               nvidia,hp-det-gpios = <&gpio TEGRA_GPIO(W, 2) GPIO_ACTIVE_LOW>;
+
+               clocks = <&tegra_car TEGRA30_CLK_PLL_A>,
+                        <&tegra_car TEGRA30_CLK_PLL_A_OUT0>,
+                        <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+               clock-names = "pll_a", "pll_a_out0", "mclk";
+
+               assigned-clocks = <&tegra_car TEGRA30_CLK_EXTERN1>,
+                                 <&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
+
+               assigned-clock-parents = <&tegra_car TEGRA30_CLK_PLL_A_OUT0>,
+                                        <&tegra_car TEGRA30_CLK_EXTERN1>;
+       };
+
+       thermal-zones {
+               nct72-local {
+                       polling-delay-passive = <1000>; /* milliseconds */
+                       polling-delay = <0>; /* milliseconds */
+
+                       thermal-sensors = <&nct72 0>;
+               };
+
+               nct72-remote {
+                       polling-delay-passive = <1000>; /* milliseconds */
+                       polling-delay = <5000>; /* milliseconds */
+
+                       thermal-sensors = <&nct72 1>;
+
+                       trips {
+                               trip0: cpu-alert0 {
+                                       /* start throttling at 50C */
+                                       temperature = <50000>;
+                                       hysteresis = <3000>;
+                                       type = "passive";
+                               };
+
+                               trip1: cpu-crit {
+                                       /* shut down at 60C */
+                                       temperature = <60000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&trip0>;
+                                       cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-maxim-pmic.dtsi b/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-maxim-pmic.dtsi
new file mode 100644 (file)
index 0000000..b25b3fa
--- /dev/null
@@ -0,0 +1,185 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/mfd/max77620.h>
+
+/ {
+       i2c@7000d000 {
+               pmic: pmic@3c {
+                       compatible = "maxim,max77663";
+                       reg = <0x3c>;
+
+                       interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+
+                       #gpio-cells = <2>;
+                       gpio-controller;
+
+                       system-power-controller;
+
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&max77620_default>;
+
+                       max77620_default: pinmux {
+                               gpio4 {
+                                       pins = "gpio4";
+                                       function = "32k-out1";
+                               };
+                       };
+
+                       cpu-pwr-req {
+                               gpio-hog;
+                               gpios = <6 GPIO_ACTIVE_HIGH>;
+                               input;
+                       };
+
+                       fps {
+                               fps0 {
+                                       maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN0>;
+                               };
+
+                               fps1 {
+                                       maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN1>;
+                               };
+
+                               fps2 {
+                                       maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN0>;
+                               };
+                       };
+
+                       regulators {
+                               in-sd0-supply = <&vdd_5v0_sys>;
+                               in-sd1-supply = <&vdd_5v0_sys>;
+                               in-sd2-supply = <&vdd_5v0_sys>;
+                               in-sd3-supply = <&vdd_5v0_sys>;
+                               in-sd4-supply = <&vdd_5v0_sys>;
+
+                               in-ldo0-1-supply = <&vdd_1v35>;
+                               in-ldo2-supply   = <&vdd_3v3_sys>;
+                               in-ldo3-5-supply = <&vdd_3v3_sys>;
+                               in-ldo4-6-supply = <&vdd_5v0_sys>;
+                               in-ldo7-8-supply = <&vdd_1v35>;
+
+                               vdd_cpu: sd0 {
+                                       regulator-name = "vdd_cpu";
+                                       regulator-min-microvolt = <800000>;
+                                       regulator-max-microvolt = <1250000>;
+                                       regulator-coupled-with = <&vdd_core>;
+                                       regulator-coupled-max-spread = <300000>;
+                                       regulator-max-step-microvolt = <100000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+
+                                       nvidia,tegra-cpu-regulator;
+                               };
+
+                               vdd_core: sd1 {
+                                       regulator-name = "vdd_core";
+                                       regulator-min-microvolt = <950000>;
+                                       regulator-max-microvolt = <1350000>;
+                                       regulator-coupled-with = <&vdd_cpu>;
+                                       regulator-coupled-max-spread = <300000>;
+                                       regulator-max-step-microvolt = <100000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+
+                                       nvidia,tegra-core-regulator;
+                               };
+
+                               vdd_1v8: sd2 {
+                                       regulator-name = "vdd_gen1v8";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <1800000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               vdd_1v35: sd3 {
+                                       regulator-name = "vdd_ddr3l_1v35";
+                                       regulator-min-microvolt = <1350000>;
+                                       regulator-max-microvolt = <1350000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               ldo0 {
+                                       regulator-name = "vdd_ddr_hs";
+                                       regulator-min-microvolt = <1000000>;
+                                       regulator-max-microvolt = <1000000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               ldo2 {
+                                       regulator-name = "vdd_ddr_rx";
+                                       regulator-min-microvolt = <2800000>;
+                                       regulator-max-microvolt = <2800000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               vcore_emmc: ldo3 {
+                                       regulator-name = "vcore_emmc";
+                                       regulator-min-microvolt = <2850000>;
+                                       regulator-max-microvolt = <3100000>;
+                                       regulator-always-on;
+                               };
+
+                               ldo4 {
+                                       regulator-name = "vdd_rtc";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1200000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               ldo5 {
+                                       regulator-name = "vdd_camera";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <1800000>;
+                               };
+
+                               ldo6 {
+                                       regulator-name = "vddio_sdmmc";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <3300000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               ldo7 {
+                                       regulator-name = "avdd_dsi_csi";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1200000>;
+                               };
+
+                               ldo8 {
+                                       regulator-name = "avdd_pll";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1200000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+                       };
+               };
+       };
+
+       vdd_3v3_sys: regulator@1 {
+               gpio = <&pmic 3 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "avdd_usb";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
+};
diff --git a/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-memory-timings.dtsi b/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-memory-timings.dtsi
new file mode 100644 (file)
index 0000000..bc0f6f2
--- /dev/null
@@ -0,0 +1,1565 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/ {
+       memory-controller@7000f000 {
+               emc-timings-0 {
+                       nvidia,ram-code = <0>; /* Elpida EDJ2108EDBG-DJL-F */
+
+                       timing-25500000 {
+                               clock-frequency = <25500000>;
+
+                               nvidia,emem-configuration = <
+                                       0x00020001 /* MC_EMEM_ARB_CFG */
+                                       0xc0000020 /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x00000000 /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x06020102 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x000a0502 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x74830303 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+
+                       timing-51000000 {
+                               clock-frequency = <51000000>;
+
+                               nvidia,emem-configuration = <
+                                       0x00010001 /* MC_EMEM_ARB_CFG */
+                                       0xc0000020 /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x00000000 /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x06020102 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x000a0502 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x73430303 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+
+                       timing-102000000 {
+                               clock-frequency = <102000000>;
+
+                               nvidia,emem-configuration = <
+                                       0x00000001 /* MC_EMEM_ARB_CFG */
+                                       0xc0000030 /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x00000000 /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x06020102 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x000a0503 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x72830504 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+
+                       timing-204000000 {
+                               clock-frequency = <204000000>;
+
+                               nvidia,emem-configuration = <
+                                       0x00000003 /* MC_EMEM_ARB_CFG */
+                                       0xc0000025 /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000005 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x06020102 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x000a0505 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x72440a06 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+
+                       timing-333500000 {
+                               clock-frequency = <333500000>;
+
+                               nvidia,emem-configuration = <
+                                       0x00000005 /* MC_EMEM_ARB_CFG */
+                                       0xc000003d /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x00000004 /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x00000004 /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x00000007 /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x06030202 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x000b0608 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x70850f09 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+
+                       timing-667000000 {
+                               clock-frequency = <667000000>;
+
+                               nvidia,emem-configuration = <
+                                       0x0000000a /* MC_EMEM_ARB_CFG */
+                                       0xc0000079 /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000004 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000010 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x0000000b /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x0000000a /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x0000000b /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000004 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x08040202 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x00130b10 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x70ea1f11 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+               };
+
+               emc-timings-1 {
+                       nvidia,ram-code = <1>; /* Hynix H5TC2G83CFR */
+
+                       timing-25500000 {
+                               clock-frequency = <25500000>;
+
+                               nvidia,emem-configuration = <
+                                       0x00020001 /* MC_EMEM_ARB_CFG */
+                                       0xc0000020 /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x00000000 /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x06020102 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x000a0502 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x74830303 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+
+                       timing-51000000 {
+                               clock-frequency = <51000000>;
+
+                               nvidia,emem-configuration = <
+                                       0x00010001 /* MC_EMEM_ARB_CFG */
+                                       0xc0000020 /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x00000000 /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x06020102 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x000a0502 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x73430303 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+
+                       timing-102000000 {
+                               clock-frequency = <102000000>;
+
+                               nvidia,emem-configuration = <
+                                       0x00000001 /* MC_EMEM_ARB_CFG */
+                                       0xc0000030 /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x00000000 /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x06020102 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x000a0503 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x72830504 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+
+                       timing-204000000 {
+                               clock-frequency = <204000000>;
+
+                               nvidia,emem-configuration = <
+                                       0x00000003 /* MC_EMEM_ARB_CFG */
+                                       0xc0000025 /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000005 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x06020102 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x000a0505 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x72440a06 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+
+                       timing-333500000 {
+                               clock-frequency = <333500000>;
+
+                               nvidia,emem-configuration = <
+                                       0x00000005 /* MC_EMEM_ARB_CFG */
+                                       0xc000003d /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x00000004 /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x00000004 /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x00000007 /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000006 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x06030202 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x000b0608 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x70850f09 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+
+                       timing-667000000 {
+                               clock-frequency = <667000000>;
+
+                               nvidia,emem-configuration = <
+                                       0x0000000a /* MC_EMEM_ARB_CFG */
+                                       0xc0000079 /* MC_EMEM_ARB_OUTSTANDING_REQ */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RCD */
+                                       0x00000004 /* MC_EMEM_ARB_TIMING_RP */
+                                       0x00000010 /* MC_EMEM_ARB_TIMING_RC */
+                                       0x0000000b /* MC_EMEM_ARB_TIMING_RAS */
+                                       0x0000000a /* MC_EMEM_ARB_TIMING_FAW */
+                                       0x00000001 /* MC_EMEM_ARB_TIMING_RRD */
+                                       0x00000003 /* MC_EMEM_ARB_TIMING_RAP2PRE */
+                                       0x0000000b /* MC_EMEM_ARB_TIMING_WAP2PRE */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_R2R */
+                                       0x00000002 /* MC_EMEM_ARB_TIMING_W2W */
+                                       0x00000004 /* MC_EMEM_ARB_TIMING_R2W */
+                                       0x00000008 /* MC_EMEM_ARB_TIMING_W2R */
+                                       0x08040202 /* MC_EMEM_ARB_DA_TURNS */
+                                       0x00130b10 /* MC_EMEM_ARB_DA_COVERS */
+                                       0x70ea1f11 /* MC_EMEM_ARB_MISC0 */
+                                       0x001f0000 /* MC_EMEM_ARB_RING1_THROTTLE */
+                               >;
+                       };
+               };
+       };
+
+       memory-controller@7000f400 {
+               emc-timings-0 {
+                       nvidia,ram-code = <0>; /* Elpida EDJ2108EDBG-DJL-F */
+
+                       timing-25500000 {
+                               clock-frequency = <25500000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100003>;
+                               nvidia,emc-mode-2 = <0x80200008>;
+                               nvidia,emc-mode-reset = <0x80001221>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-dyn-self-ref;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x00000001 /* EMC_RC */
+                                       0x00000004 /* EMC_RFC */
+                                       0x00000000 /* EMC_RAS */
+                                       0x00000000 /* EMC_RP */
+                                       0x00000002 /* EMC_R2W */
+                                       0x0000000a /* EMC_W2R */
+                                       0x00000005 /* EMC_R2P */
+                                       0x0000000b /* EMC_W2P */
+                                       0x00000000 /* EMC_RD_RCD */
+                                       0x00000000 /* EMC_WR_RCD */
+                                       0x00000003 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000005 /* EMC_WDV */
+                                       0x00000005 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000b /* EMC_RDV */
+                                       0x000000c0 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000030 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x00000002 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000f /* EMC_RW2PDEN */
+                                       0x00000005 /* EMC_TXSR */
+                                       0x00000005 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x00000001 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x000000c7 /* EMC_TREFBW */
+                                       0x00000006 /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00004288 /* EMC_FBIO_CFG5 */
+                                       0x007800a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800211c /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f108 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x08000168 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000000 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00000000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000040 /* EMC_ZCAL_WAIT_CNT */
+                                       0x000c000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x80000287 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff00 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-51000000 {
+                               clock-frequency = <51000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100003>;
+                               nvidia,emc-mode-2 = <0x80200008>;
+                               nvidia,emc-mode-reset = <0x80001221>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-dyn-self-ref;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x00000002 /* EMC_RC */
+                                       0x00000008 /* EMC_RFC */
+                                       0x00000001 /* EMC_RAS */
+                                       0x00000000 /* EMC_RP */
+                                       0x00000002 /* EMC_R2W */
+                                       0x0000000a /* EMC_W2R */
+                                       0x00000005 /* EMC_R2P */
+                                       0x0000000b /* EMC_W2P */
+                                       0x00000000 /* EMC_RD_RCD */
+                                       0x00000000 /* EMC_WR_RCD */
+                                       0x00000003 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000005 /* EMC_WDV */
+                                       0x00000005 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000b /* EMC_RDV */
+                                       0x00000181 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000060 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x00000002 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000f /* EMC_RW2PDEN */
+                                       0x00000009 /* EMC_TXSR */
+                                       0x00000009 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x00000002 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x0000018e /* EMC_TREFBW */
+                                       0x00000006 /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00004288 /* EMC_FBIO_CFG5 */
+                                       0x007800a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800211c /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f108 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x08000168 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000000 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00000000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000040 /* EMC_ZCAL_WAIT_CNT */
+                                       0x000c000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x8000040b /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff00 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-102000000 {
+                               clock-frequency = <102000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100003>;
+                               nvidia,emc-mode-2 = <0x80200008>;
+                               nvidia,emc-mode-reset = <0x80001221>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-dyn-self-ref;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x00000005 /* EMC_RC */
+                                       0x00000010 /* EMC_RFC */
+                                       0x00000003 /* EMC_RAS */
+                                       0x00000001 /* EMC_RP */
+                                       0x00000002 /* EMC_R2W */
+                                       0x0000000a /* EMC_W2R */
+                                       0x00000005 /* EMC_R2P */
+                                       0x0000000b /* EMC_W2P */
+                                       0x00000001 /* EMC_RD_RCD */
+                                       0x00000001 /* EMC_WR_RCD */
+                                       0x00000003 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000005 /* EMC_WDV */
+                                       0x00000005 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000b /* EMC_RDV */
+                                       0x00000303 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x000000c0 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x00000002 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000f /* EMC_RW2PDEN */
+                                       0x00000012 /* EMC_TXSR */
+                                       0x00000012 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x00000004 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x0000031c /* EMC_TREFBW */
+                                       0x00000006 /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00004288 /* EMC_FBIO_CFG5 */
+                                       0x007800a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800211c /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f108 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x08000168 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000000 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00000000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000040 /* EMC_ZCAL_WAIT_CNT */
+                                       0x000c000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x80000713 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff00 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-204000000 {
+                               clock-frequency = <204000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100003>;
+                               nvidia,emc-mode-2 = <0x80200008>;
+                               nvidia,emc-mode-reset = <0x80001221>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-dyn-self-ref;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x0000000a /* EMC_RC */
+                                       0x00000020 /* EMC_RFC */
+                                       0x00000007 /* EMC_RAS */
+                                       0x00000002 /* EMC_RP */
+                                       0x00000002 /* EMC_R2W */
+                                       0x0000000a /* EMC_W2R */
+                                       0x00000005 /* EMC_R2P */
+                                       0x0000000b /* EMC_W2P */
+                                       0x00000002 /* EMC_RD_RCD */
+                                       0x00000002 /* EMC_WR_RCD */
+                                       0x00000003 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000005 /* EMC_WDV */
+                                       0x00000005 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000b /* EMC_RDV */
+                                       0x00000607 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000181 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x00000002 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000f /* EMC_RW2PDEN */
+                                       0x00000023 /* EMC_TXSR */
+                                       0x00000023 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x00000007 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x00000638 /* EMC_TREFBW */
+                                       0x00000006 /* EMC_QUSE_EXTRA */
+                                       0x00000006 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00004288 /* EMC_FBIO_CFG5 */
+                                       0x004400a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800211c /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f108 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x08000168 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000000 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00020000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000100 /* EMC_ZCAL_WAIT_CNT */
+                                       0x000c000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x80000d22 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff00 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-333500000 {
+                               clock-frequency = <333500000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100002>;
+                               nvidia,emc-mode-2 = <0x80200000>;
+                               nvidia,emc-mode-reset = <0x80000321>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+
+                               nvidia,emc-configuration = <
+                                       0x0000000f /* EMC_RC */
+                                       0x00000034 /* EMC_RFC */
+                                       0x0000000a /* EMC_RAS */
+                                       0x00000003 /* EMC_RP */
+                                       0x00000003 /* EMC_R2W */
+                                       0x00000008 /* EMC_W2R */
+                                       0x00000002 /* EMC_R2P */
+                                       0x00000009 /* EMC_W2P */
+                                       0x00000003 /* EMC_RD_RCD */
+                                       0x00000003 /* EMC_WR_RCD */
+                                       0x00000002 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000004 /* EMC_WDV */
+                                       0x00000006 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000c /* EMC_RDV */
+                                       0x000009e9 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x0000027a /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000001 /* EMC_PDEX2WR */
+                                       0x00000008 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000e /* EMC_RW2PDEN */
+                                       0x00000039 /* EMC_TXSR */
+                                       0x00000200 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x0000000a /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x00000a2a /* EMC_TREFBW */
+                                       0x00000000 /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00007088 /* EMC_FBIO_CFG5 */
+                                       0x002600a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800013d /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f508 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x080001e8 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000021 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00020000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000100 /* EMC_ZCAL_WAIT_CNT */
+                                       0x018b000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x800014d4 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff89 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-667000000 {
+                               clock-frequency = <667000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100002>;
+                               nvidia,emc-mode-2 = <0x80200018>;
+                               nvidia,emc-mode-reset = <0x80000b71>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x0000001f /* EMC_RC */
+                                       0x00000069 /* EMC_RFC */
+                                       0x00000017 /* EMC_RAS */
+                                       0x00000007 /* EMC_RP */
+                                       0x00000005 /* EMC_R2W */
+                                       0x0000000c /* EMC_W2R */
+                                       0x00000003 /* EMC_R2P */
+                                       0x00000011 /* EMC_W2P */
+                                       0x00000007 /* EMC_RD_RCD */
+                                       0x00000007 /* EMC_WR_RCD */
+                                       0x00000002 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000007 /* EMC_WDV */
+                                       0x0000000b /* EMC_QUSE */
+                                       0x00000009 /* EMC_QRST */
+                                       0x0000000b /* EMC_QSAFE */
+                                       0x00000011 /* EMC_RDV */
+                                       0x00001412 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000504 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x0000000e /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x0000000c /* EMC_AR2PDEN */
+                                       0x00000016 /* EMC_RW2PDEN */
+                                       0x00000072 /* EMC_TXSR */
+                                       0x00000200 /* EMC_TXSRDLL */
+                                       0x00000005 /* EMC_TCKE */
+                                       0x00000015 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000006 /* EMC_TCLKSTABLE */
+                                       0x00000007 /* EMC_TCLKSTOP */
+                                       0x00001453 /* EMC_TREFBW */
+                                       0x0000000c /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00005088 /* EMC_FBIO_CFG5 */
+                                       0xf00b0191 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS0 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS1 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS2 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS3 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS4 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS5 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS6 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ0 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ1 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ2 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0600013d /* EMC_XM2DQSPADCTRL2 */
+                                       0x22220000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f501 /* EMC_XM2COMPPADCTRL */
+                                       0x07077404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000000 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x080001e8 /* EMC_XM2QUSEPADCTRL */
+                                       0x0a000021 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00020000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000100 /* EMC_ZCAL_WAIT_CNT */
+                                       0x0156000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x800028a5 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xf8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff49 /* EMC_CFG_RSV */
+                               >;
+                       };
+               };
+
+               emc-timings-1 {
+                       nvidia,ram-code = <1>; /* Hynix H5TC2G83CFR */
+
+                       timing-25500000 {
+                               clock-frequency = <25500000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100003>;
+                               nvidia,emc-mode-2 = <0x80200008>;
+                               nvidia,emc-mode-reset = <0x80001221>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-dyn-self-ref;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x00000001 /* EMC_RC */
+                                       0x00000004 /* EMC_RFC */
+                                       0x00000000 /* EMC_RAS */
+                                       0x00000000 /* EMC_RP */
+                                       0x00000002 /* EMC_R2W */
+                                       0x0000000a /* EMC_W2R */
+                                       0x00000005 /* EMC_R2P */
+                                       0x0000000b /* EMC_W2P */
+                                       0x00000000 /* EMC_RD_RCD */
+                                       0x00000000 /* EMC_WR_RCD */
+                                       0x00000003 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000005 /* EMC_WDV */
+                                       0x00000005 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000b /* EMC_RDV */
+                                       0x000000c0 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000030 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x00000002 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000f /* EMC_RW2PDEN */
+                                       0x00000005 /* EMC_TXSR */
+                                       0x00000005 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x00000001 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x000000c7 /* EMC_TREFBW */
+                                       0x00000006 /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00004288 /* EMC_FBIO_CFG5 */
+                                       0x007800a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800211c /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f108 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x08000168 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000000 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00000000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000040 /* EMC_ZCAL_WAIT_CNT */
+                                       0x000c000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x80000287 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff00 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-51000000 {
+                               clock-frequency = <51000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100003>;
+                               nvidia,emc-mode-2 = <0x80200008>;
+                               nvidia,emc-mode-reset = <0x80001221>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-dyn-self-ref;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x00000002 /* EMC_RC */
+                                       0x00000008 /* EMC_RFC */
+                                       0x00000001 /* EMC_RAS */
+                                       0x00000000 /* EMC_RP */
+                                       0x00000002 /* EMC_R2W */
+                                       0x0000000a /* EMC_W2R */
+                                       0x00000005 /* EMC_R2P */
+                                       0x0000000b /* EMC_W2P */
+                                       0x00000000 /* EMC_RD_RCD */
+                                       0x00000000 /* EMC_WR_RCD */
+                                       0x00000003 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000005 /* EMC_WDV */
+                                       0x00000005 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000b /* EMC_RDV */
+                                       0x00000181 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000060 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x00000002 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000f /* EMC_RW2PDEN */
+                                       0x00000009 /* EMC_TXSR */
+                                       0x00000009 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x00000002 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x0000018e /* EMC_TREFBW */
+                                       0x00000006 /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00004288 /* EMC_FBIO_CFG5 */
+                                       0x007800a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800211c /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f108 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x08000168 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000000 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00000000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000040 /* EMC_ZCAL_WAIT_CNT */
+                                       0x000c000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x8000040b /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff00 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-102000000 {
+                               clock-frequency = <102000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100003>;
+                               nvidia,emc-mode-2 = <0x80200008>;
+                               nvidia,emc-mode-reset = <0x80001221>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-dyn-self-ref;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x00000005 /* EMC_RC */
+                                       0x00000010 /* EMC_RFC */
+                                       0x00000003 /* EMC_RAS */
+                                       0x00000001 /* EMC_RP */
+                                       0x00000002 /* EMC_R2W */
+                                       0x0000000a /* EMC_W2R */
+                                       0x00000005 /* EMC_R2P */
+                                       0x0000000b /* EMC_W2P */
+                                       0x00000001 /* EMC_RD_RCD */
+                                       0x00000001 /* EMC_WR_RCD */
+                                       0x00000003 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000005 /* EMC_WDV */
+                                       0x00000005 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000b /* EMC_RDV */
+                                       0x00000303 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x000000c0 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x00000002 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000f /* EMC_RW2PDEN */
+                                       0x00000012 /* EMC_TXSR */
+                                       0x00000012 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x00000004 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x0000031c /* EMC_TREFBW */
+                                       0x00000006 /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00004288 /* EMC_FBIO_CFG5 */
+                                       0x007800a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x000fc000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800211c /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f108 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x08000168 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000000 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00000000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000040 /* EMC_ZCAL_WAIT_CNT */
+                                       0x000c000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x80000713 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff00 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-204000000 {
+                               clock-frequency = <204000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100003>;
+                               nvidia,emc-mode-2 = <0x80200008>;
+                               nvidia,emc-mode-reset = <0x80001221>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-dyn-self-ref;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x0000000a /* EMC_RC */
+                                       0x00000020 /* EMC_RFC */
+                                       0x00000007 /* EMC_RAS */
+                                       0x00000002 /* EMC_RP */
+                                       0x00000002 /* EMC_R2W */
+                                       0x0000000a /* EMC_W2R */
+                                       0x00000005 /* EMC_R2P */
+                                       0x0000000b /* EMC_W2P */
+                                       0x00000002 /* EMC_RD_RCD */
+                                       0x00000002 /* EMC_WR_RCD */
+                                       0x00000003 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000005 /* EMC_WDV */
+                                       0x00000005 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000b /* EMC_RDV */
+                                       0x00000607 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000181 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x00000002 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000f /* EMC_RW2PDEN */
+                                       0x00000023 /* EMC_TXSR */
+                                       0x00000023 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x00000007 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x00000638 /* EMC_TREFBW */
+                                       0x00000006 /* EMC_QUSE_EXTRA */
+                                       0x00000006 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00004288 /* EMC_FBIO_CFG5 */
+                                       0x004400a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x00080000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800211c /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f108 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x08000168 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000000 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00020000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000100 /* EMC_ZCAL_WAIT_CNT */
+                                       0x000c000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x80000d22 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff00 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-333500000 {
+                               clock-frequency = <333500000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100002>;
+                               nvidia,emc-mode-2 = <0x80200000>;
+                               nvidia,emc-mode-reset = <0x80000321>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+
+                               nvidia,emc-configuration = <
+                                       0x0000000f /* EMC_RC */
+                                       0x00000034 /* EMC_RFC */
+                                       0x0000000a /* EMC_RAS */
+                                       0x00000003 /* EMC_RP */
+                                       0x00000003 /* EMC_R2W */
+                                       0x00000008 /* EMC_W2R */
+                                       0x00000002 /* EMC_R2P */
+                                       0x00000009 /* EMC_W2P */
+                                       0x00000003 /* EMC_RD_RCD */
+                                       0x00000003 /* EMC_WR_RCD */
+                                       0x00000002 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000004 /* EMC_WDV */
+                                       0x00000006 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000c /* EMC_RDV */
+                                       0x000009e9 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x0000027a /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000001 /* EMC_PDEX2WR */
+                                       0x00000008 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000e /* EMC_RW2PDEN */
+                                       0x00000039 /* EMC_TXSR */
+                                       0x00000200 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x0000000a /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x00000a2a /* EMC_TREFBW */
+                                       0x00000000 /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00007088 /* EMC_FBIO_CFG5 */
+                                       0x002600a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0600013d /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f508 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x080001e8 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000021 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00020000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000100 /* EMC_ZCAL_WAIT_CNT */
+                                       0x018b000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x800014d4 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xf8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff89 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-667000000 {
+                               clock-frequency = <667000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100002>;
+                               nvidia,emc-mode-2 = <0x80200018>;
+                               nvidia,emc-mode-reset = <0x80000b71>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x00000020 /* EMC_RC */
+                                       0x0000006a /* EMC_RFC */
+                                       0x00000017 /* EMC_RAS */
+                                       0x00000007 /* EMC_RP */
+                                       0x00000005 /* EMC_R2W */
+                                       0x0000000c /* EMC_W2R */
+                                       0x00000003 /* EMC_R2P */
+                                       0x00000011 /* EMC_W2P */
+                                       0x00000007 /* EMC_RD_RCD */
+                                       0x00000007 /* EMC_WR_RCD */
+                                       0x00000002 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000007 /* EMC_WDV */
+                                       0x0000000a /* EMC_QUSE */
+                                       0x00000009 /* EMC_QRST */
+                                       0x0000000b /* EMC_QSAFE */
+                                       0x00000011 /* EMC_RDV */
+                                       0x00001412 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000504 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x0000000e /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x0000000c /* EMC_AR2PDEN */
+                                       0x00000016 /* EMC_RW2PDEN */
+                                       0x00000072 /* EMC_TXSR */
+                                       0x00000200 /* EMC_TXSRDLL */
+                                       0x00000005 /* EMC_TCKE */
+                                       0x00000015 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000006 /* EMC_TCLKSTABLE */
+                                       0x00000007 /* EMC_TCLKSTOP */
+                                       0x00001453 /* EMC_TREFBW */
+                                       0x0000000b /* EMC_QUSE_EXTRA */
+                                       0x00000006 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00005088 /* EMC_FBIO_CFG5 */
+                                       0xf00b0191 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS0 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS1 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS2 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS3 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS4 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS5 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS6 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ0 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ1 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ2 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0400013d /* EMC_XM2DQSPADCTRL2 */
+                                       0x22220000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f501 /* EMC_XM2COMPPADCTRL */
+                                       0x07077404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000000 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x080001e8 /* EMC_XM2QUSEPADCTRL */
+                                       0x0a000021 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00020000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000100 /* EMC_ZCAL_WAIT_CNT */
+                                       0x0155000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x800028a5 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff49 /* EMC_CFG_RSV */
+                               >;
+                       };
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-ti-pmic.dtsi b/arch/arm/boot/dts/tegra30-asus-nexus7-grouper-ti-pmic.dtsi
new file mode 100644 (file)
index 0000000..bfc06b9
--- /dev/null
@@ -0,0 +1,149 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       i2c@7000d000 {
+               pmic: pmic@2d {
+                       compatible = "ti,tps65911";
+                       reg = <0x2d>;
+
+                       interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+
+                       ti,en-gpio-sleep = <0 0 1 0 0 0 0 0 0>;
+                       ti,system-power-controller;
+                       ti,sleep-keep-ck32k;
+                       ti,sleep-enable;
+
+                       #gpio-cells = <2>;
+                       gpio-controller;
+
+                       vcc1-supply = <&vdd_5v0_sys>;
+                       vcc2-supply = <&vdd_5v0_sys>;
+                       vcc3-supply = <&vdd_1v8>;
+                       vcc4-supply = <&vdd_5v0_sys>;
+                       vcc5-supply = <&vdd_5v0_sys>;
+                       vcc6-supply = <&vdd2_reg>;
+                       vcc7-supply = <&vdd_5v0_sys>;
+                       vccio-supply = <&vdd_5v0_sys>;
+
+                       regulators {
+                               vdd1 {
+                                       regulator-name = "vddio_ddr_1v2";
+                                       regulator-min-microvolt = <600000>;
+                                       regulator-max-microvolt = <1500000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                                       ti,regulator-ext-sleep-control = <8>;
+                               };
+
+                               vdd2_reg: vdd2 {
+                                       regulator-name = "vdd2_1v2";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1200000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               vdd_cpu: vddctrl {
+                                       regulator-name = "vdd_cpu,vdd_sys";
+                                       regulator-min-microvolt = <800000>;
+                                       regulator-max-microvolt = <1250000>;
+                                       regulator-coupled-with = <&vdd_core>;
+                                       regulator-coupled-max-spread = <300000>;
+                                       regulator-max-step-microvolt = <100000>;
+                                       regulator-always-on;
+                                       ti,regulator-ext-sleep-control = <1>;
+
+                                       nvidia,tegra-cpu-regulator;
+                               };
+
+                               vdd_1v8: vio {
+                                       regulator-name = "vdd_1v8_gen";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <1800000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                               };
+
+                               vcore_emmc: ldo1 {
+                                       regulator-name = "vdd_pexa,vdd_pexb";
+                                       regulator-min-microvolt = <1000000>;
+                                       regulator-max-microvolt = <3300000>;
+                                       regulator-always-on;
+                               };
+
+                               ldo2 {
+                                       regulator-name = "vdd_sata,avdd_plle";
+                                       regulator-min-microvolt = <1050000>;
+                                       regulator-max-microvolt = <1050000>;
+                               };
+
+                               /* LDO3 is not connected to anything */
+
+                               ldo4 {
+                                       regulator-name = "vdd_rtc";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1200000>;
+                                       regulator-always-on;
+                               };
+
+                               ldo5 {
+                                       regulator-name = "vddio_sdmmc,avdd_vdac";
+                                       regulator-min-microvolt = <1800000>;
+                                       regulator-max-microvolt = <1800000>;
+                               };
+
+                               ldo6 {
+                                       regulator-name = "avdd_dsi_csi,pwrdet_mipi";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1200000>;
+                               };
+
+                               ldo7 {
+                                       regulator-name = "vdd_pllm,x,u,a_p_c_s";
+                                       regulator-min-microvolt = <1200000>;
+                                       regulator-max-microvolt = <1200000>;
+                                       regulator-always-on;
+                                       regulator-boot-on;
+                                       ti,regulator-ext-sleep-control = <8>;
+                               };
+
+                               ldo8 {
+                                       regulator-name = "vdd_ddr_hs";
+                                       regulator-min-microvolt = <1000000>;
+                                       regulator-max-microvolt = <1000000>;
+                                       regulator-always-on;
+                                       ti,regulator-ext-sleep-control = <8>;
+                               };
+                       };
+               };
+
+               vdd_core: core-regulator@60 {
+                       compatible = "ti,tps62361";
+                       reg = <0x60>;
+
+                       regulator-name = "tps62361-vout";
+                       regulator-min-microvolt = <500000>;
+                       regulator-max-microvolt = <1350000>;
+                       regulator-coupled-with = <&vdd_cpu>;
+                       regulator-coupled-max-spread = <300000>;
+                       regulator-max-step-microvolt = <100000>;
+                       regulator-boot-on;
+                       regulator-always-on;
+                       ti,enable-vout-discharge;
+                       ti,vsel0-state-high;
+                       ti,vsel1-state-high;
+
+                       nvidia,tegra-core-regulator;
+               };
+       };
+
+       vdd_3v3_sys: regulator@1 {
+               gpio = <&pmic 7 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+};
diff --git a/arch/arm/boot/dts/tegra30-asus-nexus7-grouper.dtsi b/arch/arm/boot/dts/tegra30-asus-nexus7-grouper.dtsi
new file mode 100644 (file)
index 0000000..a044dbd
--- /dev/null
@@ -0,0 +1,149 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include "tegra30-asus-nexus7-grouper-common.dtsi"
+#include "tegra30-asus-nexus7-grouper-memory-timings.dtsi"
+
+/ {
+       compatible = "asus,grouper", "nvidia,tegra30";
+
+       display-panel {
+               panel-timing {
+                       clock-frequency = <68000000>;
+                       hactive = <800>;
+                       vactive = <1280>;
+                       hfront-porch = <24>;
+                       hback-porch = <32>;
+                       hsync-len = <24>;
+                       vsync-len = <1>;
+                       vfront-porch = <5>;
+                       vback-porch = <32>;
+               };
+       };
+
+       pinmux@70000868 {
+               state_default: pinmux {
+                       lcd_dc1_pd2 {
+                               nvidia,pins = "lcd_dc1_pd2";
+                               nvidia,function = "displaya";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       lcd_pwr2_pc6 {
+                               nvidia,pins = "lcd_pwr2_pc6";
+                               nvidia,function = "displaya";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       spi2_cs2_n_pw3 {
+                               nvidia,pins = "spi2_cs2_n_pw3";
+                               nvidia,function = "spi2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       spi1_sck_px5 {
+                               nvidia,pins = "spi1_sck_px5";
+                               nvidia,function = "spi1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       pu5 {
+                               nvidia,pins = "pu5";
+                               nvidia,function = "pwm2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       spi1_miso_px7 {
+                               nvidia,pins = "spi1_miso_px7";
+                               nvidia,function = "spi1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       spi2_mosi_px0 {
+                               nvidia,pins = "spi2_mosi_px0";
+                               nvidia,function = "spi2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       kb_row7_pr7 {
+                               nvidia,pins = "kb_row7_pr7";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       pu3 {
+                               nvidia,pins = "pu3";
+                               nvidia,function = "rsvd4";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       pu4 {
+                               nvidia,pins = "pu4";
+                               nvidia,function = "pwm1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       kb_row15_ps7 {
+                               nvidia,pins = "kb_row15_ps7";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       kb_row3_pr3 {
+                               nvidia,pins = "kb_row3_pr3";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       kb_row13_ps5 {
+                               nvidia,pins = "kb_row13_ps5";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_wp_n_pc7 {
+                               nvidia,pins = "gmi_wp_n_pc7",
+                                               "gmi_wait_pi7",
+                                               "gmi_cs4_n_pk2",
+                                               "gmi_cs3_n_pk4";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       gmi_cs6_n_pi3 {
+                               nvidia,pins = "gmi_cs6_n_pi3";
+                               nvidia,function = "gmi";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+               };
+       };
+
+       i2c@7000c500 {
+               nfc@28 {
+                       compatible = "nxp,pn544-i2c";
+                       reg = <0x28>;
+                       clock-frequency = <100000>;
+
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(X, 0) IRQ_TYPE_EDGE_RISING>;
+
+                       enable-gpios   = <&gpio TEGRA_GPIO(S, 7) GPIO_ACTIVE_HIGH>;
+                       firmware-gpios = <&gpio TEGRA_GPIO(R, 3) GPIO_ACTIVE_HIGH>;
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/tegra30-asus-nexus7-tilapia-E1565.dts b/arch/arm/boot/dts/tegra30-asus-nexus7-tilapia-E1565.dts
new file mode 100644 (file)
index 0000000..f1c63fe
--- /dev/null
@@ -0,0 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+
+#include "tegra30-asus-nexus7-grouper-maxim-pmic.dtsi"
+#include "tegra30-asus-nexus7-tilapia.dtsi"
+
+/ {
+       model = "ASUS Google Nexus 7 (Project Bach / ME370TG) E1565";
+};
diff --git a/arch/arm/boot/dts/tegra30-asus-nexus7-tilapia-memory-timings.dtsi b/arch/arm/boot/dts/tegra30-asus-nexus7-tilapia-memory-timings.dtsi
new file mode 100644 (file)
index 0000000..9169de3
--- /dev/null
@@ -0,0 +1,325 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include "tegra30-asus-nexus7-grouper-memory-timings.dtsi"
+
+/ {
+       /*
+        * Tilapia's memory timings are pretty much the same as the Grouper's
+        * ones. There are few minor tunings made for a higher clock rates,
+        * these differentiating timings are overridden here for Tilapia.
+        */
+
+       memory-controller@7000f400 {
+               emc-timings-0 {
+                       timing-667000000 {
+                               clock-frequency = <667000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100002>;
+                               nvidia,emc-mode-2 = <0x80200018>;
+                               nvidia,emc-mode-reset = <0x80000b71>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x0000001f /* EMC_RC */
+                                       0x00000069 /* EMC_RFC */
+                                       0x00000017 /* EMC_RAS */
+                                       0x00000007 /* EMC_RP */
+                                       0x00000005 /* EMC_R2W */
+                                       0x0000000c /* EMC_W2R */
+                                       0x00000003 /* EMC_R2P */
+                                       0x00000011 /* EMC_W2P */
+                                       0x00000007 /* EMC_RD_RCD */
+                                       0x00000007 /* EMC_WR_RCD */
+                                       0x00000002 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000007 /* EMC_WDV */
+                                       0x0000000b /* EMC_QUSE */
+                                       0x00000009 /* EMC_QRST */
+                                       0x0000000b /* EMC_QSAFE */
+                                       0x00000011 /* EMC_RDV */
+                                       0x00001412 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000504 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x0000000e /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x0000000c /* EMC_AR2PDEN */
+                                       0x00000016 /* EMC_RW2PDEN */
+                                       0x00000072 /* EMC_TXSR */
+                                       0x00000200 /* EMC_TXSRDLL */
+                                       0x00000005 /* EMC_TCKE */
+                                       0x00000015 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000006 /* EMC_TCLKSTABLE */
+                                       0x00000007 /* EMC_TCLKSTOP */
+                                       0x00001453 /* EMC_TREFBW */
+                                       0x0000000c /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00005088 /* EMC_FBIO_CFG5 */
+                                       0xf00b0191 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS0 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS1 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS2 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS3 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS4 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS5 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS6 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ0 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ1 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ2 */
+                                       0x0000000c /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800013d /* EMC_XM2DQSPADCTRL2 */
+                                       0x22220000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f501 /* EMC_XM2COMPPADCTRL */
+                                       0x07077404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000000 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x080001e8 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000021 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00020000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000100 /* EMC_ZCAL_WAIT_CNT */
+                                       0x0156000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x800028a5 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff49 /* EMC_CFG_RSV */
+                               >;
+                       };
+               };
+
+               emc-timings-1 {
+                       timing-333500000 {
+                               clock-frequency = <333500000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100002>;
+                               nvidia,emc-mode-2 = <0x80200000>;
+                               nvidia,emc-mode-reset = <0x80000321>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+
+                               nvidia,emc-configuration = <
+                                       0x0000000f /* EMC_RC */
+                                       0x00000034 /* EMC_RFC */
+                                       0x0000000a /* EMC_RAS */
+                                       0x00000003 /* EMC_RP */
+                                       0x00000003 /* EMC_R2W */
+                                       0x00000008 /* EMC_W2R */
+                                       0x00000002 /* EMC_R2P */
+                                       0x00000009 /* EMC_W2P */
+                                       0x00000003 /* EMC_RD_RCD */
+                                       0x00000003 /* EMC_WR_RCD */
+                                       0x00000002 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000004 /* EMC_WDV */
+                                       0x00000006 /* EMC_QUSE */
+                                       0x00000004 /* EMC_QRST */
+                                       0x0000000a /* EMC_QSAFE */
+                                       0x0000000c /* EMC_RDV */
+                                       0x000009e9 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x0000027a /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000001 /* EMC_PDEX2WR */
+                                       0x00000008 /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x00000007 /* EMC_AR2PDEN */
+                                       0x0000000e /* EMC_RW2PDEN */
+                                       0x00000039 /* EMC_TXSR */
+                                       0x00000200 /* EMC_TXSRDLL */
+                                       0x00000004 /* EMC_TCKE */
+                                       0x0000000a /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000004 /* EMC_TCLKSTABLE */
+                                       0x00000005 /* EMC_TCLKSTOP */
+                                       0x00000a2a /* EMC_TREFBW */
+                                       0x00000000 /* EMC_QUSE_EXTRA */
+                                       0x00000004 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00007088 /* EMC_FBIO_CFG5 */
+                                       0x002600a4 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS0 */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS1 */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS2 */
+                                       0x0003c000 /* EMC_DLL_XFORM_DQS3 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS4 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS5 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS6 */
+                                       0x00014000 /* EMC_DLL_XFORM_DQS7 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ0 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ1 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ2 */
+                                       0x00048000 /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800013d /* EMC_XM2DQSPADCTRL2 */
+                                       0x00000000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f508 /* EMC_XM2COMPPADCTRL */
+                                       0x05057404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000007 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x080001e8 /* EMC_XM2QUSEPADCTRL */
+                                       0x08000021 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00020000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000100 /* EMC_ZCAL_WAIT_CNT */
+                                       0x018b000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x800014d4 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff89 /* EMC_CFG_RSV */
+                               >;
+                       };
+
+                       timing-667000000 {
+                               clock-frequency = <667000000>;
+
+                               nvidia,emc-auto-cal-interval = <0x001fffff>;
+                               nvidia,emc-mode-1 = <0x80100002>;
+                               nvidia,emc-mode-2 = <0x80200018>;
+                               nvidia,emc-mode-reset = <0x80000b71>;
+                               nvidia,emc-zcal-cnt-long = <0x00000040>;
+                               nvidia,emc-cfg-periodic-qrst;
+
+                               nvidia,emc-configuration = <
+                                       0x00000020 /* EMC_RC */
+                                       0x0000006a /* EMC_RFC */
+                                       0x00000017 /* EMC_RAS */
+                                       0x00000007 /* EMC_RP */
+                                       0x00000005 /* EMC_R2W */
+                                       0x0000000c /* EMC_W2R */
+                                       0x00000003 /* EMC_R2P */
+                                       0x00000011 /* EMC_W2P */
+                                       0x00000007 /* EMC_RD_RCD */
+                                       0x00000007 /* EMC_WR_RCD */
+                                       0x00000002 /* EMC_RRD */
+                                       0x00000001 /* EMC_REXT */
+                                       0x00000000 /* EMC_WEXT */
+                                       0x00000007 /* EMC_WDV */
+                                       0x0000000a /* EMC_QUSE */
+                                       0x00000009 /* EMC_QRST */
+                                       0x0000000b /* EMC_QSAFE */
+                                       0x00000011 /* EMC_RDV */
+                                       0x00001412 /* EMC_REFRESH */
+                                       0x00000000 /* EMC_BURST_REFRESH_NUM */
+                                       0x00000504 /* EMC_PRE_REFRESH_REQ_CNT */
+                                       0x00000002 /* EMC_PDEX2WR */
+                                       0x0000000e /* EMC_PDEX2RD */
+                                       0x00000001 /* EMC_PCHG2PDEN */
+                                       0x00000000 /* EMC_ACT2PDEN */
+                                       0x0000000c /* EMC_AR2PDEN */
+                                       0x00000016 /* EMC_RW2PDEN */
+                                       0x00000072 /* EMC_TXSR */
+                                       0x00000200 /* EMC_TXSRDLL */
+                                       0x00000005 /* EMC_TCKE */
+                                       0x00000015 /* EMC_TFAW */
+                                       0x00000000 /* EMC_TRPAB */
+                                       0x00000006 /* EMC_TCLKSTABLE */
+                                       0x00000007 /* EMC_TCLKSTOP */
+                                       0x00001453 /* EMC_TREFBW */
+                                       0x0000000b /* EMC_QUSE_EXTRA */
+                                       0x00000006 /* EMC_FBIO_CFG6 */
+                                       0x00000000 /* EMC_ODT_WRITE */
+                                       0x00000000 /* EMC_ODT_READ */
+                                       0x00005088 /* EMC_FBIO_CFG5 */
+                                       0xf00b0191 /* EMC_CFG_DIG_DLL */
+                                       0x00008000 /* EMC_CFG_DIG_DLL_PERIOD */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS0 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS1 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS2 */
+                                       0x00000008 /* EMC_DLL_XFORM_DQS3 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS4 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS5 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS6 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQS7 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE0 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE1 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE2 */
+                                       0x00018000 /* EMC_DLL_XFORM_QUSE3 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE4 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE5 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE6 */
+                                       0x00000000 /* EMC_DLL_XFORM_QUSE7 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS0 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS1 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS2 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS3 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS4 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS5 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS6 */
+                                       0x00000000 /* EMC_DLI_TRIM_TXDQS7 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQ0 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQ1 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQ2 */
+                                       0x0000000a /* EMC_DLL_XFORM_DQ3 */
+                                       0x000002a0 /* EMC_XM2CMDPADCTRL */
+                                       0x0800013d /* EMC_XM2DQSPADCTRL2 */
+                                       0x22220000 /* EMC_XM2DQPADCTRL2 */
+                                       0x77fff884 /* EMC_XM2CLKPADCTRL */
+                                       0x01f1f501 /* EMC_XM2COMPPADCTRL */
+                                       0x07077404 /* EMC_XM2VTTGENPADCTRL */
+                                       0x54000000 /* EMC_XM2VTTGENPADCTRL2 */
+                                       0x080001e8 /* EMC_XM2QUSEPADCTRL */
+                                       0x0c000021 /* EMC_XM2DQSPADCTRL3 */
+                                       0x00000802 /* EMC_CTT_TERM_CTRL */
+                                       0x00020000 /* EMC_ZCAL_INTERVAL */
+                                       0x00000100 /* EMC_ZCAL_WAIT_CNT */
+                                       0x0155000c /* EMC_MRS_WAIT_CNT */
+                                       0xa0f10000 /* EMC_AUTO_CAL_CONFIG */
+                                       0x00000000 /* EMC_CTT */
+                                       0x00000000 /* EMC_CTT_DURATION */
+                                       0x800028a5 /* EMC_DYN_SELF_REF_CONTROL */
+                                       0xe8000000 /* EMC_FBIO_SPARE */
+                                       0xff00ff49 /* EMC_CFG_RSV */
+                               >;
+                       };
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/tegra30-asus-nexus7-tilapia.dtsi b/arch/arm/boot/dts/tegra30-asus-nexus7-tilapia.dtsi
new file mode 100644 (file)
index 0000000..e3da89f
--- /dev/null
@@ -0,0 +1,235 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include "tegra30-asus-nexus7-grouper-common.dtsi"
+#include "tegra30-asus-nexus7-tilapia-memory-timings.dtsi"
+
+/ {
+       compatible = "asus,tilapia", "asus,grouper", "nvidia,tegra30";
+
+       display-panel {
+               enable-gpios = <&gpio TEGRA_GPIO(V, 6) GPIO_ACTIVE_HIGH>;
+
+               panel-timing {
+                       clock-frequency = <81750000>;
+                       hactive = <800>;
+                       vactive = <1280>;
+                       hfront-porch = <64>;
+                       hback-porch = <128>;
+                       hsync-len = <64>;
+                       vsync-len = <1>;
+                       vfront-porch = <5>;
+                       vback-porch = <2>;
+               };
+       };
+
+       gpio@6000d000 {
+               init-mode-3g {
+                       gpio-hog;
+                       gpios = <TEGRA_GPIO(D, 2) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(C, 6) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(W, 3) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(P, 1) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(X, 5) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(U, 5) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(X, 7) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(X, 0) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(EE, 1) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(Y, 2) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(Y, 3) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(R, 7) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(U, 4) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(U, 3) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(N, 1) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(N, 2) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(N, 0) GPIO_ACTIVE_HIGH>,
+                               <TEGRA_GPIO(N, 3) GPIO_ACTIVE_HIGH>;
+                       output-low;
+               };
+       };
+
+       pinmux@70000868 {
+               state_default: pinmux {
+                       lcd_dc1_pd2 {
+                               nvidia,pins = "lcd_dc1_pd2";
+                               nvidia,function = "displaya";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       lcd_pwr2_pc6 {
+                               nvidia,pins = "lcd_pwr2_pc6";
+                               nvidia,function = "displaya";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       spi2_cs2_n_pw3 {
+                               nvidia,pins = "spi2_cs2_n_pw3";
+                               nvidia,function = "spi2";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       dap3_din_pp1 {
+                               nvidia,pins = "dap3_din_pp1";
+                               nvidia,function = "i2s2";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       spi1_sck_px5 {
+                               nvidia,pins = "spi1_sck_px5";
+                               nvidia,function = "spi1";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       pu5 {
+                               nvidia,pins = "pu5";
+                               nvidia,function = "pwm2";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       spi1_miso_px7 {
+                               nvidia,pins = "spi1_miso_px7";
+                               nvidia,function = "spi1";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       spi2_mosi_px0 {
+                               nvidia,pins = "spi2_mosi_px0";
+                               nvidia,function = "spi2";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       clk3_req_pee1 {
+                               nvidia,pins = "clk3_req_pee1";
+                               nvidia,function = "dev3";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       ulpi_nxt_py2 {
+                               nvidia,pins = "ulpi_nxt_py2";
+                               nvidia,function = "uartd";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       ulpi_stp_py3 {
+                               nvidia,pins = "ulpi_stp_py3";
+                               nvidia,function = "uartd";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       kb_row7_pr7 {
+                               nvidia,pins = "kb_row7_pr7";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       pu4 {
+                               nvidia,pins = "pu4";
+                               nvidia,function = "pwm1";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       pu3 {
+                               nvidia,pins = "pu3";
+                               nvidia,function = "rsvd4";
+                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       kb_row15_ps7 {
+                               nvidia,pins = "kb_row15_ps7";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       dap3_sclk_pp3 {
+                               nvidia,pins = "dap3_sclk_pp3";
+                               nvidia,function = "i2s2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                       };
+                       kb_row3_pr3 {
+                               nvidia,pins = "kb_row3_pr3",
+                                               "kb_row13_ps5";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       kb_row13_ps5 {
+                               nvidia,pins = "kb_row13_ps5";
+                               nvidia,function = "kbc";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       gmi_wp_n_pc7 {
+                               nvidia,pins = "gmi_wp_n_pc7",
+                                               "gmi_wait_pi7",
+                                               "gmi_cs4_n_pk2",
+                                               "gmi_cs3_n_pk4";
+                               nvidia,function = "rsvd1";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+                       gmi_cs6_n_pi3 {
+                               nvidia,pins = "gmi_cs6_n_pi3";
+                               nvidia,function = "gmi";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
+               };
+       };
+
+       i2c@7000c500 {
+               proximity-sensor@28 {
+                       compatible = "microchip,cap1106";
+                       reg = <0x28>;
+
+                       /*
+                        * Binding doesn't support specifying linux,input-type
+                        * and this results in unwanted key-presses handled by
+                        * applications, hence keep it disabled for now.
+                        */
+                       status = "disabled";
+
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(R, 3) IRQ_TYPE_LEVEL_HIGH>;
+
+                       linux,keycodes = <KEY_RESERVED>,
+                                        <KEY_RESERVED>,
+                                        <KEY_RESERVED>,
+                                        <KEY_RESERVED>,
+                                        <KEY_RESERVED>,
+                                        <SW_FRONT_PROXIMITY>;
+               };
+
+               nfc@2a {
+                       compatible = "nxp,pn544-i2c";
+                       reg = <0x2a>;
+
+                       clock-frequency = <100000>;
+
+                       interrupt-parent = <&gpio>;
+                       interrupts = <TEGRA_GPIO(S, 7) IRQ_TYPE_EDGE_RISING>;
+
+                       enable-gpios   = <&gpio TEGRA_GPIO(P, 0) GPIO_ACTIVE_HIGH>;
+                       firmware-gpios = <&gpio TEGRA_GPIO(P, 3) GPIO_ACTIVE_HIGH>;
+               };
+       };
+};
index 6b6fd8a..e0624b7 100644 (file)
                };
        };
 
-       sdhci@78000000 {
+       mmc@78000000 {
                status = "okay";
                vqmmc-supply = <&ldo5_reg>;
                cd-gpios = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
                bus-width = <4>;
        };
 
-       sdhci@78000600 {
+       mmc@78000600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                status = "okay";
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-leds {
                };
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_5v_in_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "vdd_5v_in";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       vdd_5v_in_reg: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_5v_in";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               chargepump_5v_reg: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "chargepump_5v";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-boot-on;
-                       regulator-always-on;
-                       enable-active-high;
-                       gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
-               };
+       chargepump_5v_reg: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "chargepump_5v";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-boot-on;
+               regulator-always-on;
+               enable-active-high;
+               gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
+       };
 
-               ddr_reg: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "vdd_ddr";
-                       regulator-min-microvolt = <1500000>;
-                       regulator-max-microvolt = <1500000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&pmic 7 GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&vdd_5v_in_reg>;
-               };
+       ddr_reg: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_ddr";
+               regulator-min-microvolt = <1500000>;
+               regulator-max-microvolt = <1500000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&pmic 7 GPIO_ACTIVE_HIGH>;
+               vin-supply = <&vdd_5v_in_reg>;
+       };
 
-               vdd_5v_sata_reg: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "vdd_5v_sata";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(D, 6) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&vdd_5v_in_reg>;
-               };
+       vdd_5v_sata_reg: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_5v_sata";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(D, 6) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&vdd_5v_in_reg>;
+       };
 
-               usb1_vbus_reg: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "usb1_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(DD, 6) GPIO_ACTIVE_HIGH>;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v_in_reg>;
-               };
+       usb1_vbus_reg: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(DD, 6) GPIO_ACTIVE_HIGH>;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v_in_reg>;
+       };
 
-               usb3_vbus_reg: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "usb3_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(DD, 4) GPIO_ACTIVE_HIGH>;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v_in_reg>;
-               };
+       usb3_vbus_reg: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb3_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(DD, 4) GPIO_ACTIVE_HIGH>;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v_in_reg>;
+       };
 
-               sys_3v3_reg: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg = <6>;
-                       regulator-name = "sys_3v3,vdd_3v3_alw";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&pmic 6 GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&vdd_5v_in_reg>;
-               };
+       sys_3v3_reg: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "sys_3v3,vdd_3v3_alw";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&pmic 6 GPIO_ACTIVE_HIGH>;
+               vin-supply = <&vdd_5v_in_reg>;
+       };
 
-               sys_3v3_pexs_reg: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
-                       regulator-name = "sys_3v3_pexs";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(L, 7) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&sys_3v3_reg>;
-               };
+       sys_3v3_pexs_reg: regulator@7 {
+               compatible = "regulator-fixed";
+               regulator-name = "sys_3v3_pexs";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(L, 7) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&sys_3v3_reg>;
+       };
 
-               vdd_5v0_hdmi: regulator@8 {
-                       compatible = "regulator-fixed";
-                       reg = <8>;
-                       regulator-name = "+VDD_5V_HDMI";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       vin-supply = <&sys_3v3_reg>;
-               };
+       vdd_5v0_hdmi: regulator@8 {
+               compatible = "regulator-fixed";
+               regulator-name = "+VDD_5V_HDMI";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&sys_3v3_reg>;
        };
 
        sound {
index a02ec50..4899e05 100644 (file)
@@ -9,87 +9,75 @@
        model = "NVIDIA Tegra30 Cardhu A02 evaluation board";
        compatible = "nvidia,cardhu-a02", "nvidia,cardhu", "nvidia,tegra30";
 
-       sdhci@78000400 {
+       mmc@78000400 {
                status = "okay";
                power-gpios = <&gpio TEGRA_GPIO(D, 4) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
                keep-power-in-suspend;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               ddr_reg: regulator@100 {
-                       compatible = "regulator-fixed";
-                       reg = <100>;
-                       regulator-name = "vdd_ddr";
-                       regulator-min-microvolt = <1500000>;
-                       regulator-max-microvolt = <1500000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&pmic 6 GPIO_ACTIVE_HIGH>;
-               };
+       ddr_reg: regulator@100 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_ddr";
+               regulator-min-microvolt = <1500000>;
+               regulator-max-microvolt = <1500000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&pmic 6 GPIO_ACTIVE_HIGH>;
+       };
 
-               sys_3v3_reg: regulator@101 {
-                       compatible = "regulator-fixed";
-                       reg = <101>;
-                       regulator-name = "sys_3v3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&pmic 7 GPIO_ACTIVE_HIGH>;
-               };
+       sys_3v3_reg: regulator@101 {
+               compatible = "regulator-fixed";
+               regulator-name = "sys_3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&pmic 7 GPIO_ACTIVE_HIGH>;
+       };
 
-               usb1_vbus_reg: regulator@102 {
-                       compatible = "regulator-fixed";
-                       reg = <102>;
-                       regulator-name = "usb1_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(I, 4) GPIO_ACTIVE_HIGH>;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_reg>;
-               };
+       usb1_vbus_reg: regulator@102 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(I, 4) GPIO_ACTIVE_HIGH>;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_reg>;
+       };
 
-               usb3_vbus_reg: regulator@103 {
-                       compatible = "regulator-fixed";
-                       reg = <103>;
-                       regulator-name = "usb3_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_HIGH>;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_reg>;
-               };
+       usb3_vbus_reg: regulator@103 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb3_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_HIGH>;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_reg>;
+       };
 
-               vdd_5v0_reg: regulator@104 {
-                       compatible = "regulator-fixed";
-                       reg = <104>;
-                       regulator-name = "5v0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
-               };
+       vdd_5v0_reg: regulator@104 {
+               compatible = "regulator-fixed";
+               regulator-name = "5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
+       };
 
-               vdd_bl_reg: regulator@105 {
-                       compatible = "regulator-fixed";
-                       reg = <105>;
-                       regulator-name = "vdd_bl";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(K, 3) GPIO_ACTIVE_HIGH>;
-               };
+       vdd_bl_reg: regulator@105 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_bl";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(K, 3) GPIO_ACTIVE_HIGH>;
        };
 };
 
index 9234988..c1c0ca6 100644 (file)
        model = "NVIDIA Tegra30 Cardhu A04 (A05, A06, A07) evaluation board";
        compatible = "nvidia,cardhu-a04", "nvidia,cardhu", "nvidia,tegra30";
 
-       sdhci@78000400 {
+       mmc@78000400 {
                status = "okay";
                power-gpios = <&gpio TEGRA_GPIO(D, 3) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
                keep-power-in-suspend;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               ddr_reg: regulator@100 {
-                       compatible = "regulator-fixed";
-                       regulator-name = "ddr";
-                       reg = <100>;
-                       regulator-min-microvolt = <1500000>;
-                       regulator-max-microvolt = <1500000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&pmic 7 GPIO_ACTIVE_HIGH>;
-               };
+       ddr_reg: regulator@100 {
+               compatible = "regulator-fixed";
+               regulator-name = "ddr";
+               regulator-min-microvolt = <1500000>;
+               regulator-max-microvolt = <1500000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&pmic 7 GPIO_ACTIVE_HIGH>;
+       };
 
-               sys_3v3_reg: regulator@101 {
-                       compatible = "regulator-fixed";
-                       reg = <101>;
-                       regulator-name = "sys_3v3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&pmic 6 GPIO_ACTIVE_HIGH>;
-               };
+       sys_3v3_reg: regulator@101 {
+               compatible = "regulator-fixed";
+               regulator-name = "sys_3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&pmic 6 GPIO_ACTIVE_HIGH>;
+       };
 
-               usb1_vbus_reg: regulator@102 {
-                       compatible = "regulator-fixed";
-                       reg = <102>;
-                       regulator-name = "usb1_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(DD, 6) GPIO_ACTIVE_HIGH>;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_reg>;
-               };
+       usb1_vbus_reg: regulator@102 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(DD, 6) GPIO_ACTIVE_HIGH>;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_reg>;
+       };
 
-               usb3_vbus_reg: regulator@103 {
-                       compatible = "regulator-fixed";
-                       reg = <103>;
-                       regulator-name = "usb3_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(DD, 4) GPIO_ACTIVE_HIGH>;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_reg>;
-               };
+       usb3_vbus_reg: regulator@103 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb3_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(DD, 4) GPIO_ACTIVE_HIGH>;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_reg>;
+       };
 
-               vdd_5v0_reg: regulator@104 {
-                       compatible = "regulator-fixed";
-                       reg = <104>;
-                       regulator-name = "5v0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&pmic 8 GPIO_ACTIVE_HIGH>;
-               };
+       vdd_5v0_reg: regulator@104 {
+               compatible = "regulator-fixed";
+               regulator-name = "5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&pmic 8 GPIO_ACTIVE_HIGH>;
+       };
 
-               vdd_bl_reg: regulator@105 {
-                       compatible = "regulator-fixed";
-                       reg = <105>;
-                       regulator-name = "vdd_bl";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(DD, 2) GPIO_ACTIVE_HIGH>;
-               };
+       vdd_bl_reg: regulator@105 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_bl";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(DD, 2) GPIO_ACTIVE_HIGH>;
+       };
 
-               vdd_bl2_reg: regulator@106 {
-                       compatible = "regulator-fixed";
-                       reg = <106>;
-                       regulator-name = "vdd_bl2";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(DD, 0) GPIO_ACTIVE_HIGH>;
-               };
+       vdd_bl2_reg: regulator@106 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_bl2";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(DD, 0) GPIO_ACTIVE_HIGH>;
        };
 
        i2c@7000d000 {
index 5ee5d14..dab9989 100644 (file)
                };
        };
 
-       sdhci@78000000 {
+       mmc@78000000 {
                status = "okay";
                cd-gpios = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio TEGRA_GPIO(T, 3) GPIO_ACTIVE_HIGH>;
                bus-width = <4>;
        };
 
-       sdhci@78000600 {
+       mmc@78000600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                default-brightness-level = <6>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        panel: panel {
                backlight = <&backlight>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_ac_bat_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "vdd_ac_bat";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       vdd_ac_bat_reg: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_ac_bat";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               cam_1v8_reg: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "cam_1v8";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(BB, 4) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&vio_reg>;
-               };
+       cam_1v8_reg: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "cam_1v8";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(BB, 4) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&vio_reg>;
+       };
 
-               cp_5v_reg: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "cp_5v";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-boot-on;
-                       regulator-always-on;
-                       enable-active-high;
-                       gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
-               };
+       cp_5v_reg: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "cp_5v";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-boot-on;
+               regulator-always-on;
+               enable-active-high;
+               gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
+       };
 
-               emmc_3v3_reg: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "emmc_3v3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(D, 1) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&sys_3v3_reg>;
-               };
+       emmc_3v3_reg: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "emmc_3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(D, 1) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&sys_3v3_reg>;
+       };
 
-               modem_3v3_reg: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "modem_3v3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(D, 6) GPIO_ACTIVE_HIGH>;
-               };
+       modem_3v3_reg: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "modem_3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(D, 6) GPIO_ACTIVE_HIGH>;
+       };
 
-               pex_hvdd_3v3_reg: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "pex_hvdd_3v3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(L, 7) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&sys_3v3_reg>;
-               };
+       pex_hvdd_3v3_reg: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "pex_hvdd_3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(L, 7) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&sys_3v3_reg>;
+       };
 
-               vdd_cam1_ldo_reg: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg = <6>;
-                       regulator-name = "vdd_cam1_ldo";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(R, 6) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&sys_3v3_reg>;
-               };
+       vdd_cam1_ldo_reg: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_cam1_ldo";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(R, 6) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&sys_3v3_reg>;
+       };
 
-               vdd_cam2_ldo_reg: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
-                       regulator-name = "vdd_cam2_ldo";
-                       regulator-min-microvolt = <2800000>;
-                       regulator-max-microvolt = <2800000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(R, 7) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&sys_3v3_reg>;
-               };
+       vdd_cam2_ldo_reg: regulator@7 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_cam2_ldo";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(R, 7) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&sys_3v3_reg>;
+       };
 
-               vdd_cam3_ldo_reg: regulator@8 {
-                       compatible = "regulator-fixed";
-                       reg = <8>;
-                       regulator-name = "vdd_cam3_ldo";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(S, 0) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&sys_3v3_reg>;
-               };
+       vdd_cam3_ldo_reg: regulator@8 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_cam3_ldo";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(S, 0) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&sys_3v3_reg>;
+       };
 
-               vdd_com_reg: regulator@9 {
-                       compatible = "regulator-fixed";
-                       reg = <9>;
-                       regulator-name = "vdd_com";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(D, 0) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&sys_3v3_reg>;
-               };
+       vdd_com_reg: regulator@9 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_com";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(D, 0) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&sys_3v3_reg>;
+       };
 
-               vdd_fuse_3v3_reg: regulator@10 {
-                       compatible = "regulator-fixed";
-                       reg = <10>;
-                       regulator-name = "vdd_fuse_3v3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(L, 6) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&sys_3v3_reg>;
-               };
+       vdd_fuse_3v3_reg: regulator@10 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_fuse_3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(L, 6) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&sys_3v3_reg>;
+       };
 
-               vdd_pnl1_reg: regulator@11 {
-                       compatible = "regulator-fixed";
-                       reg = <11>;
-                       regulator-name = "vdd_pnl1";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(L, 4) GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&sys_3v3_reg>;
-               };
+       vdd_pnl1_reg: regulator@11 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_pnl1";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(L, 4) GPIO_ACTIVE_HIGH>;
+               vin-supply = <&sys_3v3_reg>;
+       };
 
-               vdd_vid_reg: regulator@12 {
-                       compatible = "regulator-fixed";
-                       reg = <12>;
-                       regulator-name = "vddio_vid";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       enable-active-high;
-                       gpio = <&gpio TEGRA_GPIO(T, 0) GPIO_ACTIVE_HIGH>;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_reg>;
-               };
+       vdd_vid_reg: regulator@12 {
+               compatible = "regulator-fixed";
+               regulator-name = "vddio_vid";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               gpio = <&gpio TEGRA_GPIO(T, 0) GPIO_ACTIVE_HIGH>;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_reg>;
        };
 
        sound {
index 8e106e7..7d4a6ca 100644 (file)
@@ -98,7 +98,7 @@
        };
 
        /* SD/MMC */
-       sdhci@78000200 {
+       mmc@78000200 {
                status = "okay";
                bus-width = <4>;
                cd-gpios = <&gpio TEGRA_GPIO(C, 7) GPIO_ACTIVE_LOW>; /* MMCD */
index adba554..e36aa3c 100644 (file)
                        };
 
                        /* Colibri USBH_OC */
-                       spi2-cs2-n-pw3, {
+                       spi2-cs2-n-pw3 {
                                nvidia,pins = "spi2_cs2_n_pw3";
                                nvidia,function = "spi2_alt";
                                nvidia,pull = <TEGRA_PIN_PULL_NONE>;
                sgtl5000: codec@a {
                        compatible = "fsl,sgtl5000";
                        reg = <0x0a>;
+                       #sound-dai-cells = <0>;
                        VDDA-supply = <&reg_module_3v3_audio>;
                        VDDD-supply = <&reg_1v8_vio>;
                        VDDIO-supply = <&reg_module_3v3>;
        };
 
        /* eMMC */
-       sdhci@78000600 {
+       mmc@78000600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
index 5c40ef4..d682f74 100644 (file)
 
 / {
        cpu0_opp_table: cpu_opp_table0 {
-               opp@51000000_800 {
+               opp@51000000,800 {
                        opp-microvolt = <800000 800000 1250000>;
                };
 
-               opp@51000000_850 {
+               opp@51000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@51000000_912 {
+               opp@51000000,912 {
                        opp-microvolt = <912000 912000 1250000>;
                };
 
-               opp@102000000_800 {
+               opp@102000000,800 {
                        opp-microvolt = <800000 800000 1250000>;
                };
 
-               opp@102000000_850 {
+               opp@102000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@102000000_912 {
+               opp@102000000,912 {
                        opp-microvolt = <912000 912000 1250000>;
                };
 
-               opp@204000000_800 {
+               opp@204000000,800 {
                        opp-microvolt = <800000 800000 1250000>;
                };
 
-               opp@204000000_850 {
+               opp@204000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@204000000_912 {
+               opp@204000000,912 {
                        opp-microvolt = <912000 912000 1250000>;
                };
 
-               opp@312000000_850 {
+               opp@312000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@312000000_912 {
+               opp@312000000,912 {
                        opp-microvolt = <912000 912000 1250000>;
                };
 
-               opp@340000000_800 {
+               opp@340000000,800 {
                        opp-microvolt = <800000 800000 1250000>;
                };
 
-               opp@340000000_850 {
+               opp@340000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@370000000_800 {
+               opp@370000000,800 {
                        opp-microvolt = <800000 800000 1250000>;
                };
 
-               opp@456000000_850 {
+               opp@456000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@456000000_912 {
+               opp@456000000,912 {
                        opp-microvolt = <912000 912000 1250000>;
                };
 
-               opp@475000000_800 {
+               opp@475000000,800 {
                        opp-microvolt = <800000 800000 1250000>;
                };
 
-               opp@475000000_850 {
+               opp@475000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@475000000_850_0_1 {
+               opp@475000000,850,0,1 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@475000000_850_0_4 {
+               opp@475000000,850,0,4 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@475000000_850_0_7 {
+               opp@475000000,850,0,7 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@475000000_850_0_8 {
+               opp@475000000,850,0,8 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@608000000_850 {
+               opp@608000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@608000000_912 {
+               opp@608000000,912 {
                        opp-microvolt = <912000 912000 1250000>;
                };
 
-               opp@620000000_850 {
+               opp@620000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850 {
+               opp@640000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_1_1 {
+               opp@640000000,850,1,1 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_2_1 {
+               opp@640000000,850,2,1 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_3_1 {
+               opp@640000000,850,3,1 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_1_4 {
+               opp@640000000,850,1,4 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_2_4 {
+               opp@640000000,850,2,4 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_3_4 {
+               opp@640000000,850,3,4 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_1_7 {
+               opp@640000000,850,1,7 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_2_7 {
+               opp@640000000,850,2,7 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_3_7 {
+               opp@640000000,850,3,7 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_4_7 {
+               opp@640000000,850,4,7 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_1_8 {
+               opp@640000000,850,1,8 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_2_8 {
+               opp@640000000,850,2,8 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_3_8 {
+               opp@640000000,850,3,8 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_850_4_8 {
+               opp@640000000,850,4,8 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@640000000_900 {
+               opp@640000000,900 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_850 {
+               opp@760000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000_850_3_1 {
+               opp@760000000,850,3,1 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000_850_3_2 {
+               opp@760000000,850,3,2 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000_850_3_3 {
+               opp@760000000,850,3,3 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000_850_3_4 {
+               opp@760000000,850,3,4 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000_850_3_7 {
+               opp@760000000,850,3,7 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000_850_4_7 {
+               opp@760000000,850,4,7 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000_850_3_8 {
+               opp@760000000,850,3,8 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000_850_4_8 {
+               opp@760000000,850,4,8 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000_850_0_10 {
+               opp@760000000,850,0,10 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@760000000_900 {
+               opp@760000000,900 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_1_1 {
+               opp@760000000,900,1,1 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_2_1 {
+               opp@760000000,900,2,1 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_1_2 {
+               opp@760000000,900,1,2 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_2_2 {
+               opp@760000000,900,2,2 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_1_3 {
+               opp@760000000,900,1,3 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_2_3 {
+               opp@760000000,900,2,3 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_1_4 {
+               opp@760000000,900,1,4 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_2_4 {
+               opp@760000000,900,2,4 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_1_7 {
+               opp@760000000,900,1,7 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_2_7 {
+               opp@760000000,900,2,7 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_1_8 {
+               opp@760000000,900,1,8 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_900_2_8 {
+               opp@760000000,900,2,8 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@760000000_912 {
+               opp@760000000,912 {
                        opp-microvolt = <912000 912000 1250000>;
                };
 
-               opp@760000000_975 {
+               opp@760000000,975 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@816000000_850 {
+               opp@816000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@816000000_912 {
+               opp@816000000,912 {
                        opp-microvolt = <912000 912000 1250000>;
                };
 
-               opp@860000000_850 {
+               opp@860000000,850 {
                        opp-microvolt = <850000 850000 1250000>;
                };
 
-               opp@860000000_900 {
+               opp@860000000,900 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_2_1 {
+               opp@860000000,900,2,1 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_3_1 {
+               opp@860000000,900,3,1 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_2_2 {
+               opp@860000000,900,2,2 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_3_2 {
+               opp@860000000,900,3,2 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_2_3 {
+               opp@860000000,900,2,3 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_3_3 {
+               opp@860000000,900,3,3 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_2_4 {
+               opp@860000000,900,2,4 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_3_4 {
+               opp@860000000,900,3,4 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_2_7 {
+               opp@860000000,900,2,7 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_3_7 {
+               opp@860000000,900,3,7 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_4_7 {
+               opp@860000000,900,4,7 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_2_8 {
+               opp@860000000,900,2,8 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_3_8 {
+               opp@860000000,900,3,8 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_900_4_8 {
+               opp@860000000,900,4,8 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@860000000_975 {
+               opp@860000000,975 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@860000000_975_1_1 {
+               opp@860000000,975,1,1 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@860000000_975_1_2 {
+               opp@860000000,975,1,2 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@860000000_975_1_3 {
+               opp@860000000,975,1,3 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@860000000_975_1_4 {
+               opp@860000000,975,1,4 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@860000000_975_1_7 {
+               opp@860000000,975,1,7 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@860000000_975_1_8 {
+               opp@860000000,975,1,8 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@860000000_1000 {
+               opp@860000000,1000 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@910000000_900 {
+               opp@910000000,900 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@1000000000_900 {
+               opp@1000000000,900 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@1000000000_975 {
+               opp@1000000000,975 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_2_1 {
+               opp@1000000000,975,2,1 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_3_1 {
+               opp@1000000000,975,3,1 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_2_2 {
+               opp@1000000000,975,2,2 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_3_2 {
+               opp@1000000000,975,3,2 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_2_3 {
+               opp@1000000000,975,2,3 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_3_3 {
+               opp@1000000000,975,3,3 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_2_4 {
+               opp@1000000000,975,2,4 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_3_4 {
+               opp@1000000000,975,3,4 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_2_7 {
+               opp@1000000000,975,2,7 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_3_7 {
+               opp@1000000000,975,3,7 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_4_7 {
+               opp@1000000000,975,4,7 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_2_8 {
+               opp@1000000000,975,2,8 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_3_8 {
+               opp@1000000000,975,3,8 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_975_4_8 {
+               opp@1000000000,975,4,8 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1000000000_1000 {
+               opp@1000000000,1000 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1000000000_1025 {
+               opp@1000000000,1025 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1100000000_900 {
+               opp@1100000000,900 {
                        opp-microvolt = <900000 900000 1250000>;
                };
 
-               opp@1100000000_975 {
+               opp@1100000000,975 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1100000000_975_3_1 {
+               opp@1100000000,975,3,1 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1100000000_975_3_2 {
+               opp@1100000000,975,3,2 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1100000000_975_3_3 {
+               opp@1100000000,975,3,3 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1100000000_975_3_4 {
+               opp@1100000000,975,3,4 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1100000000_975_3_7 {
+               opp@1100000000,975,3,7 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1100000000_975_4_7 {
+               opp@1100000000,975,4,7 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1100000000_975_3_8 {
+               opp@1100000000,975,3,8 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1100000000_975_4_8 {
+               opp@1100000000,975,4,8 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1100000000_1000 {
+               opp@1100000000,1000 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1100000000_1000_2_1 {
+               opp@1100000000,1000,2,1 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1100000000_1000_2_2 {
+               opp@1100000000,1000,2,2 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1100000000_1000_2_3 {
+               opp@1100000000,1000,2,3 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1100000000_1000_2_4 {
+               opp@1100000000,1000,2,4 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1100000000_1000_2_7 {
+               opp@1100000000,1000,2,7 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1100000000_1000_2_8 {
+               opp@1100000000,1000,2,8 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1100000000_1025 {
+               opp@1100000000,1025 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1100000000_1075 {
+               opp@1100000000,1075 {
                        opp-microvolt = <1075000 1075000 1250000>;
                };
 
-               opp@1150000000_975 {
+               opp@1150000000,975 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1200000000_975 {
+               opp@1200000000,975 {
                        opp-microvolt = <975000 975000 1250000>;
                };
 
-               opp@1200000000_1000 {
+               opp@1200000000,1000 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1200000000_1000_3_1 {
+               opp@1200000000,1000,3,1 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1200000000_1000_3_2 {
+               opp@1200000000,1000,3,2 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1200000000_1000_3_3 {
+               opp@1200000000,1000,3,3 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1200000000_1000_3_4 {
+               opp@1200000000,1000,3,4 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1200000000_1000_3_7 {
+               opp@1200000000,1000,3,7 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1200000000_1000_4_7 {
+               opp@1200000000,1000,4,7 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1200000000_1000_3_8 {
+               opp@1200000000,1000,3,8 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1200000000_1000_4_8 {
+               opp@1200000000,1000,4,8 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1200000000_1025 {
+               opp@1200000000,1025 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1200000000_1025_2_1 {
+               opp@1200000000,1025,2,1 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1200000000_1025_2_2 {
+               opp@1200000000,1025,2,2 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1200000000_1025_2_3 {
+               opp@1200000000,1025,2,3 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1200000000_1025_2_4 {
+               opp@1200000000,1025,2,4 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1200000000_1025_2_7 {
+               opp@1200000000,1025,2,7 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1200000000_1025_2_8 {
+               opp@1200000000,1025,2,8 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1200000000_1050 {
+               opp@1200000000,1050 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1200000000_1075 {
+               opp@1200000000,1075 {
                        opp-microvolt = <1075000 1075000 1250000>;
                };
 
-               opp@1200000000_1100 {
+               opp@1200000000,1100 {
                        opp-microvolt = <1100000 1100000 1250000>;
                };
 
-               opp@1300000000_1000 {
+               opp@1300000000,1000 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1300000000_1000_4_7 {
+               opp@1300000000,1000,4,7 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1300000000_1000_4_8 {
+               opp@1300000000,1000,4,8 {
                        opp-microvolt = <1000000 1000000 1250000>;
                };
 
-               opp@1300000000_1025 {
+               opp@1300000000,1025 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1300000000_1025_3_1 {
+               opp@1300000000,1025,3,1 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1300000000_1025_3_7 {
+               opp@1300000000,1025,3,7 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1300000000_1025_3_8 {
+               opp@1300000000,1025,3,8 {
                        opp-microvolt = <1025000 1025000 1250000>;
                };
 
-               opp@1300000000_1050 {
+               opp@1300000000,1050 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1050_2_1 {
+               opp@1300000000,1050,2,1 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1050_3_2 {
+               opp@1300000000,1050,3,2 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1050_3_3 {
+               opp@1300000000,1050,3,3 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1050_3_4 {
+               opp@1300000000,1050,3,4 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1050_3_5 {
+               opp@1300000000,1050,3,5 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1050_3_6 {
+               opp@1300000000,1050,3,6 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1050_2_7 {
+               opp@1300000000,1050,2,7 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1050_2_8 {
+               opp@1300000000,1050,2,8 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1050_3_12 {
+               opp@1300000000,1050,3,12 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1050_3_13 {
+               opp@1300000000,1050,3,13 {
                        opp-microvolt = <1050000 1050000 1250000>;
                };
 
-               opp@1300000000_1075 {
+               opp@1300000000,1075 {
                        opp-microvolt = <1075000 1075000 1250000>;
                };
 
-               opp@1300000000_1075_2_2 {
+               opp@1300000000,1075,2,2 {
                        opp-microvolt = <1075000 1075000 1250000>;
                };
 
-               opp@1300000000_1075_2_3 {
+               opp@1300000000,1075,2,3 {
                        opp-microvolt = <1075000 1075000 1250000>;
                };
 
-               opp@1300000000_1075_2_4 {
+               opp@1300000000,1075,2,4 {
                        opp-microvolt = <1075000 1075000 1250000>;
                };
 
-               opp@1300000000_1100 {
+               opp@1300000000,1100 {
                        opp-microvolt = <1100000 1100000 1250000>;
                };
 
-               opp@1300000000_1125 {
+               opp@1300000000,1125 {
                        opp-microvolt = <1125000 1125000 1250000>;
                };
 
-               opp@1300000000_1150 {
+               opp@1300000000,1150 {
                        opp-microvolt = <1150000 1150000 1250000>;
                };
 
-               opp@1300000000_1175 {
+               opp@1300000000,1175 {
                        opp-microvolt = <1175000 1175000 1250000>;
                };
 
-               opp@1400000000_1100 {
+               opp@1400000000,1100 {
                        opp-microvolt = <1100000 1100000 1250000>;
                };
 
-               opp@1400000000_1125 {
+               opp@1400000000,1125 {
                        opp-microvolt = <1125000 1125000 1250000>;
                };
 
-               opp@1400000000_1150 {
+               opp@1400000000,1150 {
                        opp-microvolt = <1150000 1150000 1250000>;
                };
 
-               opp@1400000000_1150_2_4 {
+               opp@1400000000,1150,2,4 {
                        opp-microvolt = <1150000 1150000 1250000>;
                };
 
-               opp@1400000000_1175 {
+               opp@1400000000,1175 {
                        opp-microvolt = <1175000 1175000 1250000>;
                };
 
-               opp@1400000000_1237 {
+               opp@1400000000,1237 {
                        opp-microvolt = <1237000 1237000 1250000>;
                };
 
-               opp@1500000000_1125 {
+               opp@1500000000,1125 {
                        opp-microvolt = <1125000 1125000 1250000>;
                };
 
-               opp@1500000000_1125_4_5 {
+               opp@1500000000,1125,4,5 {
                        opp-microvolt = <1125000 1125000 1250000>;
                };
 
-               opp@1500000000_1125_4_6 {
+               opp@1500000000,1125,4,6 {
                        opp-microvolt = <1125000 1125000 1250000>;
                };
 
-               opp@1500000000_1125_4_12 {
+               opp@1500000000,1125,4,12 {
                        opp-microvolt = <1125000 1125000 1250000>;
                };
 
-               opp@1500000000_1125_4_13 {
+               opp@1500000000,1125,4,13 {
                        opp-microvolt = <1125000 1125000 1250000>;
                };
 
-               opp@1500000000_1150 {
+               opp@1500000000,1150 {
                        opp-microvolt = <1150000 1150000 1250000>;
                };
 
-               opp@1500000000_1150_3_5 {
+               opp@1500000000,1150,3,5 {
                        opp-microvolt = <1150000 1150000 1250000>;
                };
 
-               opp@1500000000_1150_3_6 {
+               opp@1500000000,1150,3,6 {
                        opp-microvolt = <1150000 1150000 1250000>;
                };
 
-               opp@1500000000_1150_3_12 {
+               opp@1500000000,1150,3,12 {
                        opp-microvolt = <1150000 1150000 1250000>;
                };
 
-               opp@1500000000_1150_3_13 {
+               opp@1500000000,1150,3,13 {
                        opp-microvolt = <1150000 1150000 1250000>;
                };
 
-               opp@1500000000_1200 {
+               opp@1500000000,1200 {
                        opp-microvolt = <1200000 1200000 1250000>;
                };
 
-               opp@1500000000_1237 {
+               opp@1500000000,1237 {
                        opp-microvolt = <1237000 1237000 1250000>;
                };
 
-               opp@1600000000_1212 {
+               opp@1600000000,1212 {
                        opp-microvolt = <1212000 1212000 1250000>;
                };
 
-               opp@1600000000_1237 {
+               opp@1600000000,1237 {
                        opp-microvolt = <1237000 1237000 1250000>;
                };
 
-               opp@1700000000_1212 {
+               opp@1700000000,1212 {
                        opp-microvolt = <1212000 1212000 1250000>;
                };
 
-               opp@1700000000_1237 {
+               opp@1700000000,1237 {
                        opp-microvolt = <1237000 1237000 1250000>;
                };
        };
index d64fc26..8e434f6 100644 (file)
                compatible = "operating-points-v2";
                opp-shared;
 
-               opp@51000000_800 {
+               opp@51000000,800 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x31FE>;
                        opp-hz = /bits/ 64 <51000000>;
                };
 
-               opp@51000000_850 {
+               opp@51000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0C01>;
                        opp-hz = /bits/ 64 <51000000>;
                };
 
-               opp@51000000_912 {
+               opp@51000000,912 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0200>;
                        opp-hz = /bits/ 64 <51000000>;
                };
 
-               opp@102000000_800 {
+               opp@102000000,800 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x31FE>;
                        opp-hz = /bits/ 64 <102000000>;
                };
 
-               opp@102000000_850 {
+               opp@102000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0C01>;
                        opp-hz = /bits/ 64 <102000000>;
                };
 
-               opp@102000000_912 {
+               opp@102000000,912 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0200>;
                        opp-hz = /bits/ 64 <102000000>;
                };
 
-               opp@204000000_800 {
+               opp@204000000,800 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x31FE>;
                        opp-hz = /bits/ 64 <204000000>;
                };
 
-               opp@204000000_850 {
+               opp@204000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0C01>;
                        opp-hz = /bits/ 64 <204000000>;
                };
 
-               opp@204000000_912 {
+               opp@204000000,912 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0200>;
                        opp-hz = /bits/ 64 <204000000>;
                };
 
-               opp@312000000_850 {
+               opp@312000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0C00>;
                        opp-hz = /bits/ 64 <312000000>;
                };
 
-               opp@312000000_912 {
+               opp@312000000,912 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0200>;
                        opp-hz = /bits/ 64 <312000000>;
                };
 
-               opp@340000000_800 {
+               opp@340000000,800 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0192>;
                        opp-hz = /bits/ 64 <340000000>;
                };
 
-               opp@340000000_850 {
+               opp@340000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x0F 0x0001>;
                        opp-hz = /bits/ 64 <340000000>;
                };
 
-               opp@370000000_800 {
+               opp@370000000,800 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1E 0x306C>;
                        opp-hz = /bits/ 64 <370000000>;
                };
 
-               opp@456000000_850 {
+               opp@456000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0C00>;
                        opp-hz = /bits/ 64 <456000000>;
                };
 
-               opp@456000000_912 {
+               opp@456000000,912 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0200>;
                        opp-hz = /bits/ 64 <456000000>;
                };
 
-               opp@475000000_800 {
+               opp@475000000,800 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1E 0x31FE>;
                        opp-hz = /bits/ 64 <475000000>;
                };
 
-               opp@475000000_850 {
+               opp@475000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x0F 0x0001>;
                        opp-hz = /bits/ 64 <475000000>;
                };
 
-               opp@475000000_850_0_1 {
+               opp@475000000,850,0,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0002>;
                        opp-hz = /bits/ 64 <475000000>;
                };
 
-               opp@475000000_850_0_4 {
+               opp@475000000,850,0,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0010>;
                        opp-hz = /bits/ 64 <475000000>;
                };
 
-               opp@475000000_850_0_7 {
+               opp@475000000,850,0,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0080>;
                        opp-hz = /bits/ 64 <475000000>;
                };
 
-               opp@475000000_850_0_8 {
+               opp@475000000,850,0,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0100>;
                        opp-hz = /bits/ 64 <475000000>;
                };
 
-               opp@608000000_850 {
+               opp@608000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0400>;
                        opp-hz = /bits/ 64 <608000000>;
                };
 
-               opp@608000000_912 {
+               opp@608000000,912 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0200>;
                        opp-hz = /bits/ 64 <608000000>;
                };
 
-               opp@620000000_850 {
+               opp@620000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1E 0x306C>;
                        opp-hz = /bits/ 64 <620000000>;
                };
 
-               opp@640000000_850 {
+               opp@640000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x0F 0x0001>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_1_1 {
+               opp@640000000,850,1,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0002>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_2_1 {
+               opp@640000000,850,2,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0002>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_3_1 {
+               opp@640000000,850,3,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0002>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_1_4 {
+               opp@640000000,850,1,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0010>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_2_4 {
+               opp@640000000,850,2,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0010>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_3_4 {
+               opp@640000000,850,3,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0010>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_1_7 {
+               opp@640000000,850,1,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0080>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_2_7 {
+               opp@640000000,850,2,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0080>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_3_7 {
+               opp@640000000,850,3,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0080>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_4_7 {
+               opp@640000000,850,4,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0080>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_1_8 {
+               opp@640000000,850,1,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0100>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_2_8 {
+               opp@640000000,850,2,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0100>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_3_8 {
+               opp@640000000,850,3,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0100>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_850_4_8 {
+               opp@640000000,850,4,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0100>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@640000000_900 {
+               opp@640000000,900 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0192>;
                        opp-hz = /bits/ 64 <640000000>;
                };
 
-               opp@760000000_850 {
+               opp@760000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1E 0x3461>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_850_3_1 {
+               opp@760000000,850,3,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0002>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_850_3_2 {
+               opp@760000000,850,3,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0004>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_850_3_3 {
+               opp@760000000,850,3,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0008>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_850_3_4 {
+               opp@760000000,850,3,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0010>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_850_3_7 {
+               opp@760000000,850,3,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0080>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_850_4_7 {
+               opp@760000000,850,4,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0080>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_850_3_8 {
+               opp@760000000,850,3,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0100>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_850_4_8 {
+               opp@760000000,850,4,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0100>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_850_0_10 {
+               opp@760000000,850,0,10 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0400>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900 {
+               opp@760000000,900 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0001>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_1_1 {
+               opp@760000000,900,1,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0002>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_2_1 {
+               opp@760000000,900,2,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0002>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_1_2 {
+               opp@760000000,900,1,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0004>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_2_2 {
+               opp@760000000,900,2,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0004>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_1_3 {
+               opp@760000000,900,1,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0008>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_2_3 {
+               opp@760000000,900,2,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0008>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_1_4 {
+               opp@760000000,900,1,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0010>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_2_4 {
+               opp@760000000,900,2,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0010>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_1_7 {
+               opp@760000000,900,1,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0080>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_2_7 {
+               opp@760000000,900,2,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0080>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_1_8 {
+               opp@760000000,900,1,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0100>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_900_2_8 {
+               opp@760000000,900,2,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0100>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_912 {
+               opp@760000000,912 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0200>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@760000000_975 {
+               opp@760000000,975 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0192>;
                        opp-hz = /bits/ 64 <760000000>;
                };
 
-               opp@816000000_850 {
+               opp@816000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0400>;
                        opp-hz = /bits/ 64 <816000000>;
                };
 
-               opp@816000000_912 {
+               opp@816000000,912 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x1F 0x0200>;
                        opp-hz = /bits/ 64 <816000000>;
                };
 
-               opp@860000000_850 {
+               opp@860000000,850 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x0C 0x0001>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900 {
+               opp@860000000,900 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0001>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_2_1 {
+               opp@860000000,900,2,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0002>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_3_1 {
+               opp@860000000,900,3,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0002>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_2_2 {
+               opp@860000000,900,2,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0004>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_3_2 {
+               opp@860000000,900,3,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0004>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_2_3 {
+               opp@860000000,900,2,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0008>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_3_3 {
+               opp@860000000,900,3,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0008>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_2_4 {
+               opp@860000000,900,2,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0010>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_3_4 {
+               opp@860000000,900,3,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0010>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_2_7 {
+               opp@860000000,900,2,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0080>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_3_7 {
+               opp@860000000,900,3,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0080>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_4_7 {
+               opp@860000000,900,4,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0080>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_2_8 {
+               opp@860000000,900,2,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0100>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_3_8 {
+               opp@860000000,900,3,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0100>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_900_4_8 {
+               opp@860000000,900,4,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0100>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_975 {
+               opp@860000000,975 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0001>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_975_1_1 {
+               opp@860000000,975,1,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0002>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_975_1_2 {
+               opp@860000000,975,1,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0004>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_975_1_3 {
+               opp@860000000,975,1,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0008>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_975_1_4 {
+               opp@860000000,975,1,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0010>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_975_1_7 {
+               opp@860000000,975,1,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0080>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_975_1_8 {
+               opp@860000000,975,1,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0100>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@860000000_1000 {
+               opp@860000000,1000 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0192>;
                        opp-hz = /bits/ 64 <860000000>;
                };
 
-               opp@910000000_900 {
+               opp@910000000,900 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x18 0x3060>;
                        opp-hz = /bits/ 64 <910000000>;
                };
 
-               opp@1000000000_900 {
+               opp@1000000000,900 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x0C 0x0001>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975 {
+               opp@1000000000,975 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x03 0x0001>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_2_1 {
+               opp@1000000000,975,2,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0002>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_3_1 {
+               opp@1000000000,975,3,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0002>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_2_2 {
+               opp@1000000000,975,2,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0004>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_3_2 {
+               opp@1000000000,975,3,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0004>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_2_3 {
+               opp@1000000000,975,2,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0008>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_3_3 {
+               opp@1000000000,975,3,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0008>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_2_4 {
+               opp@1000000000,975,2,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0010>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_3_4 {
+               opp@1000000000,975,3,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0010>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_2_7 {
+               opp@1000000000,975,2,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0080>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_3_7 {
+               opp@1000000000,975,3,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0080>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_4_7 {
+               opp@1000000000,975,4,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0080>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_2_8 {
+               opp@1000000000,975,2,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0100>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_3_8 {
+               opp@1000000000,975,3,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0100>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_975_4_8 {
+               opp@1000000000,975,4,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0100>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_1000 {
+               opp@1000000000,1000 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x019E>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1000000000_1025 {
+               opp@1000000000,1025 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0192>;
                        opp-hz = /bits/ 64 <1000000000>;
                };
 
-               opp@1100000000_900 {
+               opp@1100000000,900 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0001>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_975 {
+               opp@1100000000,975 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x06 0x0001>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_975_3_1 {
+               opp@1100000000,975,3,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0002>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_975_3_2 {
+               opp@1100000000,975,3,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0004>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_975_3_3 {
+               opp@1100000000,975,3,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0008>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_975_3_4 {
+               opp@1100000000,975,3,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0010>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_975_3_7 {
+               opp@1100000000,975,3,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0080>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_975_4_7 {
+               opp@1100000000,975,4,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0080>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_975_3_8 {
+               opp@1100000000,975,3,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0100>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_975_4_8 {
+               opp@1100000000,975,4,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0100>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_1000 {
+               opp@1100000000,1000 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0001>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_1000_2_1 {
+               opp@1100000000,1000,2,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0002>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_1000_2_2 {
+               opp@1100000000,1000,2,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0004>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_1000_2_3 {
+               opp@1100000000,1000,2,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0008>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_1000_2_4 {
+               opp@1100000000,1000,2,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0010>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_1000_2_7 {
+               opp@1100000000,1000,2,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0080>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_1000_2_8 {
+               opp@1100000000,1000,2,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0100>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_1025 {
+               opp@1100000000,1025 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x019E>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1100000000_1075 {
+               opp@1100000000,1075 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0192>;
                        opp-hz = /bits/ 64 <1100000000>;
                };
 
-               opp@1150000000_975 {
+               opp@1150000000,975 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x18 0x3060>;
                        opp-hz = /bits/ 64 <1150000000>;
                };
 
-               opp@1200000000_975 {
+               opp@1200000000,975 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0001>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1000 {
+               opp@1200000000,1000 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0001>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1000_3_1 {
+               opp@1200000000,1000,3,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0002>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1000_3_2 {
+               opp@1200000000,1000,3,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0004>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1000_3_3 {
+               opp@1200000000,1000,3,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0008>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1000_3_4 {
+               opp@1200000000,1000,3,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0010>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1000_3_7 {
+               opp@1200000000,1000,3,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0080>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1000_4_7 {
+               opp@1200000000,1000,4,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0080>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1000_3_8 {
+               opp@1200000000,1000,3,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0100>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1000_4_8 {
+               opp@1200000000,1000,4,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0100>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1025 {
+               opp@1200000000,1025 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0001>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1025_2_1 {
+               opp@1200000000,1025,2,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0002>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1025_2_2 {
+               opp@1200000000,1025,2,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0004>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1025_2_3 {
+               opp@1200000000,1025,2,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0008>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1025_2_4 {
+               opp@1200000000,1025,2,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0010>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1025_2_7 {
+               opp@1200000000,1025,2,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0080>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1025_2_8 {
+               opp@1200000000,1025,2,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0100>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1050 {
+               opp@1200000000,1050 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x019E>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1075 {
+               opp@1200000000,1075 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0001>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1200000000_1100 {
+               opp@1200000000,1100 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0192>;
                        opp-hz = /bits/ 64 <1200000000>;
                };
 
-               opp@1300000000_1000 {
+               opp@1300000000,1000 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0001>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1000_4_7 {
+               opp@1300000000,1000,4,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0080>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1000_4_8 {
+               opp@1300000000,1000,4,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0100>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1025 {
+               opp@1300000000,1025 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0001>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1025_3_1 {
+               opp@1300000000,1025,3,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0002>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1025_3_7 {
+               opp@1300000000,1025,3,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0080>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1025_3_8 {
+               opp@1300000000,1025,3,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0100>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050 {
+               opp@1300000000,1050 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x12 0x3061>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050_2_1 {
+               opp@1300000000,1050,2,1 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0002>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050_3_2 {
+               opp@1300000000,1050,3,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0004>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050_3_3 {
+               opp@1300000000,1050,3,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0008>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050_3_4 {
+               opp@1300000000,1050,3,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0010>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050_3_5 {
+               opp@1300000000,1050,3,5 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0020>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050_3_6 {
+               opp@1300000000,1050,3,6 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0040>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050_2_7 {
+               opp@1300000000,1050,2,7 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0080>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050_2_8 {
+               opp@1300000000,1050,2,8 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0100>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050_3_12 {
+               opp@1300000000,1050,3,12 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x1000>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1050_3_13 {
+               opp@1300000000,1050,3,13 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x2000>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1075 {
+               opp@1300000000,1075 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0182>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1075_2_2 {
+               opp@1300000000,1075,2,2 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0004>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1075_2_3 {
+               opp@1300000000,1075,2,3 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0008>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1075_2_4 {
+               opp@1300000000,1075,2,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0010>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1100 {
+               opp@1300000000,1100 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x001C>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1125 {
+               opp@1300000000,1125 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0001>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1150 {
+               opp@1300000000,1150 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0182>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1300000000_1175 {
+               opp@1300000000,1175 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0010>;
                        opp-hz = /bits/ 64 <1300000000>;
                };
 
-               opp@1400000000_1100 {
+               opp@1400000000,1100 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x18 0x307C>;
                        opp-hz = /bits/ 64 <1400000000>;
                };
 
-               opp@1400000000_1125 {
+               opp@1400000000,1125 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x000C>;
                        opp-hz = /bits/ 64 <1400000000>;
                };
 
-               opp@1400000000_1150 {
+               opp@1400000000,1150 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x000C>;
                        opp-hz = /bits/ 64 <1400000000>;
                };
 
-               opp@1400000000_1150_2_4 {
+               opp@1400000000,1150,2,4 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0010>;
                        opp-hz = /bits/ 64 <1400000000>;
                };
 
-               opp@1400000000_1175 {
+               opp@1400000000,1175 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0010>;
                        opp-hz = /bits/ 64 <1400000000>;
                };
 
-               opp@1400000000_1237 {
+               opp@1400000000,1237 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0010>;
                        opp-hz = /bits/ 64 <1400000000>;
                };
 
-               opp@1500000000_1125 {
+               opp@1500000000,1125 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0010>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1125_4_5 {
+               opp@1500000000,1125,4,5 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0020>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1125_4_6 {
+               opp@1500000000,1125,4,6 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x0040>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1125_4_12 {
+               opp@1500000000,1125,4,12 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x1000>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1125_4_13 {
+               opp@1500000000,1125,4,13 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x2000>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1150 {
+               opp@1500000000,1150 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x04 0x0010>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1150_3_5 {
+               opp@1500000000,1150,3,5 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0020>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1150_3_6 {
+               opp@1500000000,1150,3,6 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x0040>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1150_3_12 {
+               opp@1500000000,1150,3,12 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x1000>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1150_3_13 {
+               opp@1500000000,1150,3,13 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x2000>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1200 {
+               opp@1500000000,1200 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x02 0x0010>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1500000000_1237 {
+               opp@1500000000,1237 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x01 0x0010>;
                        opp-hz = /bits/ 64 <1500000000>;
                };
 
-               opp@1600000000_1212 {
+               opp@1600000000,1212 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x3060>;
                        opp-hz = /bits/ 64 <1600000000>;
                };
 
-               opp@1600000000_1237 {
+               opp@1600000000,1237 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x3060>;
                        opp-hz = /bits/ 64 <1600000000>;
                };
 
-               opp@1700000000_1212 {
+               opp@1700000000,1212 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x10 0x3060>;
                        opp-hz = /bits/ 64 <1700000000>;
                };
 
-               opp@1700000000_1237 {
+               opp@1700000000,1237 {
                        clock-latency-ns = <100000>;
                        opp-supported-hw = <0x08 0x3060>;
                        opp-hz = /bits/ 64 <1700000000>;
index d2d05f1..aeae8c0 100644 (file)
        pcie@3000 {
                compatible = "nvidia,tegra30-pcie";
                device_type = "pci";
-               reg = <0x00003000 0x00000800   /* PADS registers */
-                      0x00003800 0x00000200   /* AFI registers */
-                      0x10000000 0x10000000>; /* configuration space */
+               reg = <0x00003000 0x00000800>, /* PADS registers */
+                     <0x00003800 0x00000200>, /* AFI registers */
+                     <0x10000000 0x10000000>; /* configuration space */
                reg-names = "pads", "afi", "cs";
-               interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH   /* controller interrupt */
-                             GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
+               interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
+                            <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                interrupt-names = "intr", "msi";
 
                #interrupt-cells = <1>;
                #address-cells = <3>;
                #size-cells = <2>;
 
-               ranges = <0x82000000 0 0x00000000 0x00000000 0 0x00001000   /* port 0 configuration space */
-                         0x82000000 0 0x00001000 0x00001000 0 0x00001000   /* port 1 configuration space */
-                         0x82000000 0 0x00004000 0x00004000 0 0x00001000   /* port 2 configuration space */
-                         0x81000000 0 0          0x02000000 0 0x00010000   /* downstream I/O */
-                         0x82000000 0 0x20000000 0x20000000 0 0x08000000   /* non-prefetchable memory */
-                         0xc2000000 0 0x28000000 0x28000000 0 0x18000000>; /* prefetchable memory */
+               ranges = <0x02000000 0 0x00000000 0x00000000 0 0x00001000>, /* port 0 configuration space */
+                        <0x02000000 0 0x00001000 0x00001000 0 0x00001000>, /* port 1 configuration space */
+                        <0x02000000 0 0x00004000 0x00004000 0 0x00001000>, /* port 2 configuration space */
+                        <0x01000000 0 0          0x02000000 0 0x00010000>, /* downstream I/O */
+                        <0x02000000 0 0x20000000 0x20000000 0 0x08000000>, /* non-prefetchable memory */
+                        <0x42000000 0 0x28000000 0x28000000 0 0x18000000>; /* prefetchable memory */
 
                clocks = <&tegra_car TEGRA30_CLK_PCIE>,
                         <&tegra_car TEGRA30_CLK_AFI>,
                };
        };
 
-       iram@40000000 {
+       sram@40000000 {
                compatible = "mmio-sram";
                reg = <0x40000000 0x40000>;
                #address-cells = <1>;
                #size-cells = <1>;
                ranges = <0 0x40000000 0x40000>;
 
-               vde_pool: vde@400 {
+               vde_pool: sram@400 {
                        reg = <0x400 0x3fc00>;
                        pool;
                };
        };
 
        host1x@50000000 {
-               compatible = "nvidia,tegra30-host1x", "simple-bus";
+               compatible = "nvidia,tegra30-host1x";
                reg = <0x50000000 0x00024000>;
                interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>, /* syncpt */
                             <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* general */
+               interrupt-names = "syncpt", "host1x";
                clocks = <&tegra_car TEGRA30_CLK_HOST1X>;
+               clock-names = "host1x";
                resets = <&tegra_car 28>;
                reset-names = "host1x";
                iommus = <&mc TEGRA_SWGROUP_HC>;
                gr3d@54180000 {
                        compatible = "nvidia,tegra30-gr3d";
                        reg = <0x54180000 0x00040000>;
-                       clocks = <&tegra_car TEGRA30_CLK_GR3D
-                                 &tegra_car TEGRA30_CLK_GR3D2>;
+                       clocks = <&tegra_car TEGRA30_CLK_GR3D>,
+                                <&tegra_car TEGRA30_CLK_GR3D2>;
                        clock-names = "3d", "3d2";
                        resets = <&tegra_car 24>,
                                 <&tegra_car 98>;
                };
 
                dc@54200000 {
-                       compatible = "nvidia,tegra30-dc", "nvidia,tegra20-dc";
+                       compatible = "nvidia,tegra30-dc";
                        reg = <0x54200000 0x00040000>;
                        interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&tegra_car TEGRA30_CLK_DISP1>,
                dsi@54300000 {
                        compatible = "nvidia,tegra30-dsi";
                        reg = <0x54300000 0x00040000>;
-                       clocks = <&tegra_car TEGRA30_CLK_DSIA>;
+                       clocks = <&tegra_car TEGRA30_CLK_DSIA>,
+                                <&tegra_car TEGRA30_CLK_PLL_D_OUT0>;
+                       clock-names = "dsi", "parent";
                        resets = <&tegra_car 48>;
                        reset-names = "dsi";
                        status = "disabled";
                };
+
+               dsi@54400000 {
+                       compatible = "nvidia,tegra30-dsi";
+                       reg = <0x54400000 0x00040000>;
+                       clocks = <&tegra_car TEGRA30_CLK_DSIB>,
+                                <&tegra_car TEGRA30_CLK_PLL_D_OUT0>;
+                       clock-names = "dsi", "parent";
+                       resets = <&tegra_car 84>;
+                       reset-names = "dsi";
+                       status = "disabled";
+               };
        };
 
        timer@50040600 {
 
        intc: interrupt-controller@50041000 {
                compatible = "arm,cortex-a9-gic";
-               reg = <0x50041000 0x1000
-                      0x50040100 0x0100>;
+               reg = <0x50041000 0x1000>,
+                     <0x50040100 0x0100>;
                interrupt-controller;
                #interrupt-cells = <3>;
                interrupt-parent = <&intc>;
 
        vde@6001a000 {
                compatible = "nvidia,tegra30-vde", "nvidia,tegra20-vde";
-               reg = <0x6001a000 0x1000   /* Syntax Engine */
-                      0x6001b000 0x1000   /* Video Bitstream Engine */
-                      0x6001c000  0x100   /* Macroblock Engine */
-                      0x6001c200  0x100   /* Post-processing Engine */
-                      0x6001c400  0x100   /* Motion Compensation Engine */
-                      0x6001c600  0x100   /* Transform Engine */
-                      0x6001c800  0x100   /* Pixel prediction block */
-                      0x6001ca00  0x100   /* Video DMA */
-                      0x6001d800  0x400>; /* Video frame controls */
+               reg = <0x6001a000 0x1000>, /* Syntax Engine */
+                     <0x6001b000 0x1000>, /* Video Bitstream Engine */
+                     <0x6001c000  0x100>, /* Macroblock Engine */
+                     <0x6001c200  0x100>, /* Post-processing Engine */
+                     <0x6001c400  0x100>, /* Motion Compensation Engine */
+                     <0x6001c600  0x100>, /* Transform Engine */
+                     <0x6001c800  0x100>, /* Pixel prediction block */
+                     <0x6001ca00  0x100>, /* Video DMA */
+                     <0x6001d800  0x400>; /* Video frame controls */
                reg-names = "sxe", "bsev", "mbe", "ppe", "mce",
                            "tfe", "ppb", "vdma", "frameid";
                iram = <&vde_pool>; /* IRAM region */
 
        apbmisc@70000800 {
                compatible = "nvidia,tegra30-apbmisc", "nvidia,tegra20-apbmisc";
-               reg = <0x70000800 0x64   /* Chip revision */
-                      0x70000008 0x04>; /* Strapping options */
+               reg = <0x70000800 0x64>, /* Chip revision */
+                     <0x70000008 0x04>; /* Strapping options */
        };
 
        pinmux: pinmux@70000868 {
                compatible = "nvidia,tegra30-pinmux";
-               reg = <0x70000868 0xd4    /* Pad control registers */
-                      0x70003000 0x3e4>; /* Mux registers */
+               reg = <0x70000868 0x0d4>, /* Pad control registers */
+                     <0x70003000 0x3e4>; /* Mux registers */
        };
 
        /*
 
        ahub@70080000 {
                compatible = "nvidia,tegra30-ahub";
-               reg = <0x70080000 0x200
-                      0x70080200 0x100>;
+               reg = <0x70080000 0x200>,
+                     <0x70080200 0x100>;
                interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA30_CLK_D_AUDIO>,
                         <&tegra_car TEGRA30_CLK_APBIF>;
                };
        };
 
-       sdhci@78000000 {
-               compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";
+       mmc@78000000 {
+               compatible = "nvidia,tegra30-sdhci";
                reg = <0x78000000 0x200>;
                interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA30_CLK_SDMMC1>;
+               clock-names = "sdhci";
                resets = <&tegra_car 14>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@78000200 {
-               compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";
+       mmc@78000200 {
+               compatible = "nvidia,tegra30-sdhci";
                reg = <0x78000200 0x200>;
                interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA30_CLK_SDMMC2>;
+               clock-names = "sdhci";
                resets = <&tegra_car 9>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@78000400 {
-               compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";
+       mmc@78000400 {
+               compatible = "nvidia,tegra30-sdhci";
                reg = <0x78000400 0x200>;
                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA30_CLK_SDMMC3>;
+               clock-names = "sdhci";
                resets = <&tegra_car 69>;
                reset-names = "sdhci";
                status = "disabled";
        };
 
-       sdhci@78000600 {
-               compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";
+       mmc@78000600 {
+               compatible = "nvidia,tegra30-sdhci";
                reg = <0x78000600 0x200>;
                interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA30_CLK_SDMMC4>;
+               clock-names = "sdhci";
                resets = <&tegra_car 15>;
                reset-names = "sdhci";
                status = "disabled";
 
        phy1: usb-phy@7d000000 {
                compatible = "nvidia,tegra30-usb-phy";
-               reg = <0x7d000000 0x4000 0x7d000000 0x4000>;
+               reg = <0x7d000000 0x4000>,
+                     <0x7d000000 0x4000>;
                phy_type = "utmi";
                clocks = <&tegra_car TEGRA30_CLK_USBD>,
                         <&tegra_car TEGRA30_CLK_PLL_U>,
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 22>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <9>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
 
        phy2: usb-phy@7d004000 {
                compatible = "nvidia,tegra30-usb-phy";
-               reg = <0x7d004000 0x4000 0x7d000000 0x4000>;
+               reg = <0x7d004000 0x4000>,
+                     <0x7d000000 0x4000>;
                phy_type = "utmi";
                clocks = <&tegra_car TEGRA30_CLK_USB2>,
                         <&tegra_car TEGRA30_CLK_PLL_U>,
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 58>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <9>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
 
        phy3: usb-phy@7d008000 {
                compatible = "nvidia,tegra30-usb-phy";
-               reg = <0x7d008000 0x4000 0x7d000000 0x4000>;
+               reg = <0x7d008000 0x4000>,
+                     <0x7d000000 0x4000>;
                phy_type = "utmi";
                clocks = <&tegra_car TEGRA30_CLK_USB3>,
                         <&tegra_car TEGRA30_CLK_PLL_U>,
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 59>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <0>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
index fc498d0..5730e46 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 &twl {
index f2d060f..c46c2e8 100644 (file)
@@ -20,7 +20,7 @@
 
        aliases {
                serial0 = &serial0;
-               serial1 = &serial1;
+               serial1 = &serialsc;
                serial2 = &serial2;
                serial3 = &serial3;
                i2c0 = &i2c0;
        interrupts = <1 8>;
 };
 
+&serialsc {
+       interrupts = <1 8>;
+};
+
 &serial0 {
        status = "okay";
 };
index 079cadc..5bc7fe1 100644 (file)
@@ -22,6 +22,7 @@
                serial0 = &serial0;
                serial1 = &serial1;
                serial2 = &serial2;
+               serial3 = &serialsc;
                i2c0 = &i2c0;
                i2c1 = &i2c1;
                i2c2 = &i2c2;
        interrupts = <4 8>;
 };
 
+&serialsc {
+       interrupts = <4 8>;
+};
+
 &serial0 {
        status = "okay";
 };
@@ -76,7 +81,7 @@
 };
 
 &mdio {
-       ethphy: ethphy@0 {
+       ethphy: ethernet-phy@0 {
                reg = <0>;
        };
 };
index bfdfb76..c0fd029 100644 (file)
                function = "nand";
        };
 
+       pinctrl_pcie: pcie {
+               groups = "pcie";
+               function = "pcie";
+       };
+
        pinctrl_sd: sd {
                groups = "sd";
                function = "sd";
index 64246fa..27ff2b7 100644 (file)
@@ -87,7 +87,7 @@
 };
 
 &mdio {
-       ethphy: ethphy@1 {
+       ethphy: ethernet-phy@1 {
                reg = <1>;
        };
 };
index 181442c..3b9b613 100644 (file)
@@ -22,7 +22,7 @@
                serial0 = &serial0;
                serial1 = &serial1;
                serial2 = &serial2;
-               serial3 = &serial3;
+               serial3 = &serialsc;
                i2c0 = &i2c0;
                i2c1 = &i2c1;
                i2c2 = &i2c2;
        interrupts = <2 8>;
 };
 
+&serialsc {
+       interrupts = <2 8>;
+};
+
 &serial0 {
        status = "okay";
 };
@@ -84,7 +88,7 @@
 };
 
 &mdio {
-       ethphy: ethphy@0 {
+       ethphy: ethernet-phy@0 {
                reg = <0>;
        };
 };
index 5396556..7b6faf2 100644 (file)
@@ -82,7 +82,7 @@
 };
 
 &mdio {
-       ethphy: ethphy@1 {
+       ethphy: ethernet-phy@1 {
                reg = <1>;
        };
 };
index feadb4a..3525125 100644 (file)
                        };
                };
 
+               pcie_ep: pcie-ep@66000000 {
+                       compatible = "socionext,uniphier-pro5-pcie-ep",
+                                    "snps,dw-pcie-ep";
+                       status = "disabled";
+                       reg-names = "dbi", "dbi2", "link", "addr_space";
+                       reg = <0x66000000 0x1000>, <0x66001000 0x1000>,
+                             <0x66010000 0x10000>, <0x67000000 0x400000>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_pcie>;
+                       clock-names = "gio", "link";
+                       clocks = <&sys_clk 12>, <&sys_clk 24>;
+                       reset-names = "gio", "link";
+                       resets = <&sys_rst 12>, <&sys_rst 24>;
+                       num-ib-windows = <16>;
+                       num-ob-windows = <16>;
+                       num-lanes = <4>;
+                       phy-names = "pcie-phy";
+                       phys = <&pcie_phy>;
+               };
+
+               pcie_phy: phy@66038000 {
+                       compatible = "socionext,uniphier-pro5-pcie-phy";
+                       reg = <0x66038000 0x4000>;
+                       #phy-cells = <0>;
+                       clock-names = "gio", "link";
+                       clocks = <&sys_clk 12>, <&sys_clk 24>;
+                       reset-names = "gio", "link";
+                       resets = <&sys_rst 12>, <&sys_rst 24>;
+               };
+
                nand: nand-controller@68000000 {
                        compatible = "socionext,uniphier-denali-nand-v5b";
                        status = "disabled";
index 8e9ac57..759384b 100644 (file)
@@ -87,7 +87,7 @@
 };
 
 &mdio {
-       ethphy: ethphy@1 {
+       ethphy: ethernet-phy@1 {
                reg = <1>;
        };
 };
index 8eacc7b..7e08a45 100644 (file)
@@ -88,7 +88,7 @@
 };
 
 &mdio {
-       ethphy: ethphy@1 {
+       ethphy: ethernet-phy@1 {
                reg = <1>;
        };
 };
index cf9ea0b..6db949e 100644 (file)
@@ -20,7 +20,7 @@
 
        aliases {
                serial0 = &serial0;
-               serial1 = &serial1;
+               serial1 = &serialsc;
                serial2 = &serial2;
                serial3 = &serial3;
                i2c0 = &i2c0;
        interrupts = <0 8>;
 };
 
+&serialsc {
+       interrupts = <0 8>;
+};
+
 &serial0 {
        status = "okay";
 };
index bf441c2..444802f 100644 (file)
@@ -8,26 +8,19 @@
 &system_bus {
        status = "okay";
        ranges = <1 0x00000000 0x42000000 0x02000000>;
+       interrupt-parent = <&gpio>;
 
-       support_card: support-card@1,1f00000 {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <1>;
-               ranges = <0x00000000 1 0x01f00000 0x00100000>;
-               interrupt-parent = <&gpio>;
-
-               ethsc: ethernet@0 {
-                       compatible = "smsc,lan9118", "smsc,lan9115";
-                       reg = <0x00000000 0x1000>;
-                       phy-mode = "mii";
-                       reg-io-width = <4>;
-               };
+       ethsc: ethernet@1,1f00000 {
+               compatible = "smsc,lan9118", "smsc,lan9115";
+               reg = <1 0x01f00000 0x1000>;
+               phy-mode = "mii";
+               reg-io-width = <4>;
+       };
 
-               serialsc: uart@b0000 {
-                       compatible = "ns16550a";
-                       reg = <0x000b0000 0x20>;
-                       clock-frequency = <12288000>;
-                       reg-shift = <1>;
-               };
+       serialsc: serial@1,1fb0000 {
+               compatible = "ns16550a";
+               reg = <1 0x01fb0000 0x20>;
+               clock-frequency = <12288000>;
+               reg-shift = <1>;
        };
 };
index ce1920c..64e0e95 100644 (file)
        mdio1: mdio {
                #address-cells = <1>;
                #size-cells = <0>;
+               clock-frequency = <12500000>;
+               suppress-preamble;
                status = "okay";
 
                switch0: switch0@0 {
index 778e02c..de79dcf 100644 (file)
                                        port@9 {
                                                reg = <9>;
                                                label = "sff2";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff2>;
                                        };
index 95d0060..f8299f3 100644 (file)
        mdio1: mdio {
                #address-cells = <1>;
                #size-cells = <0>;
+               clock-frequency = <12500000>;
+               suppress-preamble;
                status = "okay";
        };
 };
index b642520..040a1f8 100644 (file)
                                        port@2 {
                                                reg = <2>;
                                                label = "eth_fc_1000_2";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff1>;
                                        };
                                        port@3 {
                                                reg = <3>;
                                                label = "eth_fc_1000_3";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff2>;
                                        };
                                        port@4 {
                                                reg = <4>;
                                                label = "eth_fc_1000_4";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff3>;
                                        };
                                        port@5 {
                                                reg = <5>;
                                                label = "eth_fc_1000_5";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff4>;
                                        };
                                        port@6 {
                                                reg = <6>;
                                                label = "eth_fc_1000_6";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff5>;
                                        };
                                        port@7 {
                                                reg = <7>;
                                                label = "eth_fc_1000_7";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff6>;
                                        };
                                        port@9 {
                                                reg = <9>;
                                                label = "eth_fc_1000_1";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff0>;
                                        };
                                        port@2 {
                                                reg = <2>;
                                                label = "eth_fc_1000_8";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff7>;
                                        };
                                        port@3 {
                                                reg = <3>;
                                                label = "eth_fc_1000_9";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff8>;
                                        };
                                        port@4 {
                                                reg = <4>;
                                                label = "eth_fc_1000_10";
-                                               phy-mode = "sgmii";
+                                               phy-mode = "1000base-x";
                                                managed = "in-band-status";
                                                sfp = <&sff9>;
                                        };
index 55b4201..9e5187b 100644 (file)
        mdio1: mdio {
                #address-cells = <1>;
                #size-cells = <0>;
+               clock-frequency = <12500000>;
+               suppress-preamble;
                status = "okay";
 
                switch0: switch0@0 {
        };
 };
 
+&i2c1 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c1>;
+       status = "okay";
+
+       watchdog@38 {
+               compatible = "zii,rave-wdt";
+               reg = <0x38>;
+       };
+};
+
 &snvsrtc {
        status = "disabled";
 };
                >;
        };
 
+       pinctrl_i2c1: i2c1grp {
+               fsl,pins = <
+                       VF610_PAD_PTB16__I2C1_SCL               0x37ff
+                       VF610_PAD_PTB17__I2C1_SDA               0x37ff
+               >;
+       };
+
        pinctrl_leds_debug: pinctrl-leds-debug {
                fsl,pins = <
                        VF610_PAD_PTD3__GPIO_82                 0x31c2
index a6c22a7..569614b 100644 (file)
@@ -81,6 +81,8 @@
        non-removable;
        no-1-8-v;
        keep-power-in-suspend;
+       no-sdio;
+       no-sd;
        status = "okay";
 };
 
@@ -88,6 +90,7 @@
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_esdhc1>;
        bus-width = <4>;
+       no-sdio;
        status = "okay";
 };
 
        mdio1: mdio {
                #address-cells = <1>;
                #size-cells = <0>;
+               clock-frequency = <12500000>;
+               suppress-preamble;
                status = "okay";
 
                switch0: switch0@0 {
index 3d05c89..b6b0f30 100644 (file)
        mdio1: mdio {
                #address-cells = <1>;
                #size-cells = <0>;
+               clock-frequency = <12500000>;
+               suppress-preamble;
                status = "okay";
 
                switch0: switch0@0 {
        };
 };
 
+&i2c1 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c1>;
+       status = "okay";
+
+       watchdog@38 {
+               compatible = "zii,rave-wdt";
+               reg = <0x38>;
+       };
+};
+
 &snvsrtc {
        status = "disabled";
 };
index 7fd3981..956182d 100644 (file)
@@ -10,7 +10,7 @@
 };
 
 &aips0 {
-       L2: l2-cache@40006000 {
+       L2: cache-controller@40006000 {
                compatible = "arm,pl310-cache";
                reg = <0x40006000 0x1000>;
                cache-unified;
index 2d547e7..0fe03aa 100644 (file)
                                dma-names = "rx","tx";
                                status = "disabled";
                        };
+
+                       crypto: crypto@400f0000 {
+                               compatible = "fsl,sec-v4.0";
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               reg = <0x400f0000 0x9000>;
+                               ranges = <0 0x400f0000 0x9000>;
+                               clocks = <&clks VF610_CLK_CAAM>;
+                               clock-names = "ipg";
+
+                               sec_jr0: jr0@1000 {
+                                       compatible = "fsl,sec-v4.0-job-ring";
+                                       reg = <0x1000 0x1000>;
+                                       interrupts = <102 IRQ_TYPE_LEVEL_HIGH>;
+                               };
+
+                               sec_jr1: jr1@2000 {
+                                       compatible = "fsl,sec-v4.0-job-ring";
+                                       reg = <0x2000 0x1000>;
+                                       interrupts = <102 IRQ_TYPE_LEVEL_HIGH>;
+                               };
+                       };
                };
        };
 };
index 10499d4..9a79ef6 100644 (file)
@@ -84,7 +84,8 @@ static int ftrace_modify_code(unsigned long pc, unsigned long old,
                old = __opcode_to_mem_arm(old);
 
        if (validate) {
-               if (probe_kernel_read(&replaced, (void *)pc, MCOUNT_INSN_SIZE))
+               if (copy_from_kernel_nofault(&replaced, (void *)pc,
+                               MCOUNT_INSN_SIZE))
                        return -EFAULT;
 
                if (replaced != old)
index 6a95b92..7bd30c0 100644 (file)
@@ -236,7 +236,7 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
        /* patch_text() only supports int-sized breakpoints */
        BUILD_BUG_ON(sizeof(int) != BREAK_INSTR_SIZE);
 
-       err = probe_kernel_read(bpt->saved_instr, (char *)bpt->bpt_addr,
+       err = copy_from_kernel_nofault(bpt->saved_instr, (char *)bpt->bpt_addr,
                                BREAK_INSTR_SIZE);
        if (err)
                return err;
index 65a3b1e..17d5a78 100644 (file)
@@ -396,7 +396,7 @@ int is_valid_bugaddr(unsigned long pc)
        u32 insn = __opcode_to_mem_arm(BUG_INSTR_VALUE);
 #endif
 
-       if (probe_kernel_address((unsigned *)pc, bkpt))
+       if (get_kernel_nofault(bkpt, (void *)pc))
                return 0;
 
        return bkpt == insn;
index ca02f91..b6c7d98 100644 (file)
@@ -2342,44 +2342,6 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_core__sham = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* l4_core -> AES */
-static struct omap_hwmod_class_sysconfig omap3_aes_sysc = {
-       .rev_offs       = 0x44,
-       .sysc_offs      = 0x48,
-       .syss_offs      = 0x4c,
-       .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
-                          SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
-       .sysc_fields    = &omap3xxx_aes_sysc_fields,
-};
-
-static struct omap_hwmod_class omap3xxx_aes_class = {
-       .name   = "aes",
-       .sysc   = &omap3_aes_sysc,
-};
-
-
-static struct omap_hwmod omap3xxx_aes_hwmod = {
-       .name           = "aes",
-       .main_clk       = "aes2_ick",
-       .prcm           = {
-               .omap2 = {
-                       .module_offs = CORE_MOD,
-                       .idlest_reg_id = 1,
-                       .idlest_idle_bit = OMAP3430_ST_AES2_SHIFT,
-               },
-       },
-       .class          = &omap3xxx_aes_class,
-};
-
-
-static struct omap_hwmod_ocp_if omap3xxx_l4_core__aes = {
-       .master         = &omap3xxx_l4_core_hwmod,
-       .slave          = &omap3xxx_aes_hwmod,
-       .clk            = "aes2_ick",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /*
  * 'ssi' class
  * synchronous serial interface (multichannel and full-duplex serial if)
@@ -2473,20 +2435,11 @@ static struct omap_hwmod_ocp_if *omap34xx_sham_hwmod_ocp_ifs[] __initdata = {
        NULL,
 };
 
-static struct omap_hwmod_ocp_if *omap34xx_aes_hwmod_ocp_ifs[] __initdata = {
-       &omap3xxx_l4_core__aes,
-       NULL,
-};
-
 static struct omap_hwmod_ocp_if *omap36xx_sham_hwmod_ocp_ifs[] __initdata = {
        &omap3xxx_l4_core__sham,
        NULL
 };
 
-static struct omap_hwmod_ocp_if *omap36xx_aes_hwmod_ocp_ifs[] __initdata = {
-       &omap3xxx_l4_core__aes,
-       NULL
-};
 
 /*
  * Apparently the SHA/MD5 and AES accelerator IP blocks are
@@ -2501,11 +2454,6 @@ static struct omap_hwmod_ocp_if *am35xx_sham_hwmod_ocp_ifs[] __initdata = {
        NULL
 };
 
-static struct omap_hwmod_ocp_if *am35xx_aes_hwmod_ocp_ifs[] __initdata = {
-       /* &omap3xxx_l4_core__aes, */
-       NULL,
-};
-
 /* 3430ES1-only hwmod links */
 static struct omap_hwmod_ocp_if *omap3430es1_hwmod_ocp_ifs[] __initdata = {
        &omap3430es1_dss__l3,
@@ -2641,7 +2589,6 @@ int __init omap3xxx_hwmod_init(void)
 {
        int r;
        struct omap_hwmod_ocp_if **h = NULL, **h_sham = NULL;
-       struct omap_hwmod_ocp_if **h_aes = NULL;
        struct device_node *bus;
        unsigned int rev;
 
@@ -2664,16 +2611,13 @@ int __init omap3xxx_hwmod_init(void)
            rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2) {
                h = omap34xx_hwmod_ocp_ifs;
                h_sham = omap34xx_sham_hwmod_ocp_ifs;
-               h_aes = omap34xx_aes_hwmod_ocp_ifs;
        } else if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
                h = am35xx_hwmod_ocp_ifs;
                h_sham = am35xx_sham_hwmod_ocp_ifs;
-               h_aes = am35xx_aes_hwmod_ocp_ifs;
        } else if (rev == OMAP3630_REV_ES1_0 || rev == OMAP3630_REV_ES1_1 ||
                   rev == OMAP3630_REV_ES1_2) {
                h = omap36xx_hwmod_ocp_ifs;
                h_sham = omap36xx_sham_hwmod_ocp_ifs;
-               h_aes = omap36xx_aes_hwmod_ocp_ifs;
        } else {
                WARN(1, "OMAP3 hwmod family init: unknown chip type\n");
                return -EINVAL;
@@ -2696,11 +2640,6 @@ int __init omap3xxx_hwmod_init(void)
                        goto put_node;
        }
 
-       if (h_aes && omap3xxx_hwmod_is_hs_ip_block_usable(bus, "aes")) {
-               r = omap_hwmod_register_links(h_aes);
-               if (r < 0)
-                       goto put_node;
-       }
        of_node_put(bus);
 
        /*
index 3f33873..b88d12d 100644 (file)
@@ -85,49 +85,6 @@ static struct omap_hwmod am43xx_control_hwmod = {
        },
 };
 
-static struct omap_hwmod_class_sysconfig am43xx_usb_otg_ss_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x0010,
-       .sysc_flags     = (SYSC_HAS_DMADISABLE | SYSC_HAS_MIDLEMODE |
-                               SYSC_HAS_SIDLEMODE),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-                               SIDLE_SMART_WKUP | MSTANDBY_FORCE |
-                               MSTANDBY_NO | MSTANDBY_SMART |
-                               MSTANDBY_SMART_WKUP),
-       .sysc_fields    = &omap_hwmod_sysc_type2,
-};
-
-static struct omap_hwmod_class am43xx_usb_otg_ss_hwmod_class = {
-       .name   = "usb_otg_ss",
-       .sysc   = &am43xx_usb_otg_ss_sysc,
-};
-
-static struct omap_hwmod am43xx_usb_otg_ss0_hwmod = {
-       .name           = "usb_otg_ss0",
-       .class          = &am43xx_usb_otg_ss_hwmod_class,
-       .clkdm_name     = "l3s_clkdm",
-       .main_clk       = "l3s_gclk",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs   = AM43XX_CM_PER_USB_OTG_SS0_CLKCTRL_OFFSET,
-                       .modulemode     = MODULEMODE_SWCTRL,
-               },
-       },
-};
-
-static struct omap_hwmod am43xx_usb_otg_ss1_hwmod = {
-       .name           = "usb_otg_ss1",
-       .class          = &am43xx_usb_otg_ss_hwmod_class,
-       .clkdm_name     = "l3s_clkdm",
-       .main_clk       = "l3s_gclk",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs   = AM43XX_CM_PER_USB_OTG_SS1_CLKCTRL_OFFSET,
-                       .modulemode     = MODULEMODE_SWCTRL,
-               },
-       },
-};
-
 /* Interfaces */
 static struct omap_hwmod_ocp_if am43xx_l3_main__emif = {
        .master         = &am33xx_l3_main_hwmod,
@@ -178,20 +135,6 @@ static struct omap_hwmod_ocp_if am43xx_l4_wkup__control = {
        .user           = OCP_USER_MPU,
 };
 
-static struct omap_hwmod_ocp_if am43xx_l3_s__usbotgss0 = {
-       .master         = &am33xx_l3_s_hwmod,
-       .slave          = &am43xx_usb_otg_ss0_hwmod,
-       .clk            = "l3s_gclk",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-static struct omap_hwmod_ocp_if am43xx_l3_s__usbotgss1 = {
-       .master         = &am33xx_l3_s_hwmod,
-       .slave          = &am43xx_usb_otg_ss1_hwmod,
-       .clk            = "l3s_gclk",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 static struct omap_hwmod_ocp_if *am43xx_hwmod_ocp_ifs[] __initdata = {
        &am33xx_mpu__l3_main,
        &am33xx_mpu__prcm,
@@ -211,8 +154,6 @@ static struct omap_hwmod_ocp_if *am43xx_hwmod_ocp_ifs[] __initdata = {
        &am43xx_l4_wkup__smartreflex1,
        &am33xx_l3_s__gpmc,
        &am33xx_l3_main__ocmc,
-       &am43xx_l3_s__usbotgss0,
-       &am43xx_l3_s__usbotgss1,
        NULL,
 };
 
index de13c46..665ca74 100644 (file)
@@ -639,154 +639,6 @@ static struct omap_hwmod omap44xx_sl2if_hwmod = {
        },
 };
 
-/*
- * 'usb_host_fs' class
- * full-speed usb host controller
- */
-
-/* The IP is not compliant to type1 / type2 scheme */
-static struct omap_hwmod_class_sysconfig omap44xx_usb_host_fs_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x0210,
-       .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
-                          SYSC_HAS_SOFTRESET),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-                          SIDLE_SMART_WKUP),
-       .sysc_fields    = &omap_hwmod_sysc_type_usb_host_fs,
-};
-
-static struct omap_hwmod_class omap44xx_usb_host_fs_hwmod_class = {
-       .name   = "usb_host_fs",
-       .sysc   = &omap44xx_usb_host_fs_sysc,
-};
-
-/* usb_host_fs */
-static struct omap_hwmod omap44xx_usb_host_fs_hwmod = {
-       .name           = "usb_host_fs",
-       .class          = &omap44xx_usb_host_fs_hwmod_class,
-       .clkdm_name     = "l3_init_clkdm",
-       .main_clk       = "usb_host_fs_fck",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_FS_CLKCTRL_OFFSET,
-                       .context_offs = OMAP4_RM_L3INIT_USB_HOST_FS_CONTEXT_OFFSET,
-                       .modulemode   = MODULEMODE_SWCTRL,
-               },
-       },
-};
-
-/*
- * 'usb_host_hs' class
- * high-speed multi-port usb host controller
- */
-
-static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x0010,
-       .syss_offs      = 0x0014,
-       .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE |
-                          SYSC_HAS_SOFTRESET | SYSC_HAS_RESET_STATUS),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-                          SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
-                          MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
-       .sysc_fields    = &omap_hwmod_sysc_type2,
-};
-
-static struct omap_hwmod_class omap44xx_usb_host_hs_hwmod_class = {
-       .name   = "usb_host_hs",
-       .sysc   = &omap44xx_usb_host_hs_sysc,
-};
-
-/* usb_host_hs */
-static struct omap_hwmod omap44xx_usb_host_hs_hwmod = {
-       .name           = "usb_host_hs",
-       .class          = &omap44xx_usb_host_hs_hwmod_class,
-       .clkdm_name     = "l3_init_clkdm",
-       .main_clk       = "usb_host_hs_fck",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET,
-                       .context_offs = OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET,
-                       .modulemode   = MODULEMODE_SWCTRL,
-               },
-       },
-
-       /*
-        * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
-        * id: i660
-        *
-        * Description:
-        * In the following configuration :
-        * - USBHOST module is set to smart-idle mode
-        * - PRCM asserts idle_req to the USBHOST module ( This typically
-        *   happens when the system is going to a low power mode : all ports
-        *   have been suspended, the master part of the USBHOST module has
-        *   entered the standby state, and SW has cut the functional clocks)
-        * - an USBHOST interrupt occurs before the module is able to answer
-        *   idle_ack, typically a remote wakeup IRQ.
-        * Then the USB HOST module will enter a deadlock situation where it
-        * is no more accessible nor functional.
-        *
-        * Workaround:
-        * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
-        */
-
-       /*
-        * Errata: USB host EHCI may stall when entering smart-standby mode
-        * Id: i571
-        *
-        * Description:
-        * When the USBHOST module is set to smart-standby mode, and when it is
-        * ready to enter the standby state (i.e. all ports are suspended and
-        * all attached devices are in suspend mode), then it can wrongly assert
-        * the Mstandby signal too early while there are still some residual OCP
-        * transactions ongoing. If this condition occurs, the internal state
-        * machine may go to an undefined state and the USB link may be stuck
-        * upon the next resume.
-        *
-        * Workaround:
-        * Don't use smart standby; use only force standby,
-        * hence HWMOD_SWSUP_MSTANDBY
-        */
-
-       .flags          = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
-};
-
-/*
- * 'usb_tll_hs' class
- * usb_tll_hs module is the adapter on the usb_host_hs ports
- */
-
-static struct omap_hwmod_class_sysconfig omap44xx_usb_tll_hs_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x0010,
-       .syss_offs      = 0x0014,
-       .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
-                          SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
-                          SYSC_HAS_AUTOIDLE),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
-       .sysc_fields    = &omap_hwmod_sysc_type1,
-};
-
-static struct omap_hwmod_class omap44xx_usb_tll_hs_hwmod_class = {
-       .name   = "usb_tll_hs",
-       .sysc   = &omap44xx_usb_tll_hs_sysc,
-};
-
-static struct omap_hwmod omap44xx_usb_tll_hs_hwmod = {
-       .name           = "usb_tll_hs",
-       .class          = &omap44xx_usb_tll_hs_hwmod_class,
-       .clkdm_name     = "l3_init_clkdm",
-       .main_clk       = "usb_tll_hs_ick",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = OMAP4_CM_L3INIT_USB_TLL_CLKCTRL_OFFSET,
-                       .context_offs = OMAP4_RM_L3INIT_USB_TLL_CONTEXT_OFFSET,
-                       .modulemode   = MODULEMODE_HWCTRL,
-               },
-       },
-};
-
 /*
  * interfaces
  */
@@ -895,22 +747,6 @@ static struct omap_hwmod_ocp_if omap44xx_l4_cfg__l3_main_2 = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* usb_host_fs -> l3_main_2 */
-static struct omap_hwmod_ocp_if __maybe_unused omap44xx_usb_host_fs__l3_main_2 = {
-       .master         = &omap44xx_usb_host_fs_hwmod,
-       .slave          = &omap44xx_l3_main_2_hwmod,
-       .clk            = "l3_div_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* usb_host_hs -> l3_main_2 */
-static struct omap_hwmod_ocp_if omap44xx_usb_host_hs__l3_main_2 = {
-       .master         = &omap44xx_usb_host_hs_hwmod,
-       .slave          = &omap44xx_l3_main_2_hwmod,
-       .clk            = "l3_div_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* l3_main_1 -> l3_main_3 */
 static struct omap_hwmod_ocp_if omap44xx_l3_main_1__l3_main_3 = {
        .master         = &omap44xx_l3_main_1_hwmod,
@@ -1119,30 +955,6 @@ static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l3_main_2__sl2if = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* l4_cfg -> usb_host_fs */
-static struct omap_hwmod_ocp_if __maybe_unused omap44xx_l4_cfg__usb_host_fs = {
-       .master         = &omap44xx_l4_cfg_hwmod,
-       .slave          = &omap44xx_usb_host_fs_hwmod,
-       .clk            = "l4_div_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_cfg -> usb_host_hs */
-static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_host_hs = {
-       .master         = &omap44xx_l4_cfg_hwmod,
-       .slave          = &omap44xx_usb_host_hs_hwmod,
-       .clk            = "l4_div_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_cfg -> usb_tll_hs */
-static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_tll_hs = {
-       .master         = &omap44xx_l4_cfg_hwmod,
-       .slave          = &omap44xx_usb_tll_hs_hwmod,
-       .clk            = "l4_div_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* mpu -> emif1 */
 static struct omap_hwmod_ocp_if omap44xx_mpu__emif1 = {
        .master         = &omap44xx_mpu_hwmod,
@@ -1173,8 +985,6 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
        &omap44xx_iva__l3_main_2,
        &omap44xx_l3_main_1__l3_main_2,
        &omap44xx_l4_cfg__l3_main_2,
-       /* &omap44xx_usb_host_fs__l3_main_2, */
-       &omap44xx_usb_host_hs__l3_main_2,
        &omap44xx_l3_main_1__l3_main_3,
        &omap44xx_l3_main_2__l3_main_3,
        &omap44xx_l4_cfg__l3_main_3,
@@ -1201,9 +1011,6 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
        &omap44xx_l4_wkup__prm,
        &omap44xx_l4_wkup__scrm,
        /* &omap44xx_l3_main_2__sl2if, */
-       /* &omap44xx_l4_cfg__usb_host_fs, */
-       &omap44xx_l4_cfg__usb_host_hs,
-       &omap44xx_l4_cfg__usb_tll_hs,
        &omap44xx_mpu__emif1,
        &omap44xx_mpu__emif2,
        NULL,
index 4cb194a..7c38c1b 100644 (file)
@@ -266,158 +266,6 @@ static struct omap_hwmod omap54xx_mpu_hwmod = {
        },
 };
 
-/*
- * 'usb_host_hs' class
- * high-speed multi-port usb host controller
- */
-
-static struct omap_hwmod_class_sysconfig omap54xx_usb_host_hs_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x0010,
-       .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
-                          SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-                          SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
-                          MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
-       .sysc_fields    = &omap_hwmod_sysc_type2,
-};
-
-static struct omap_hwmod_class omap54xx_usb_host_hs_hwmod_class = {
-       .name   = "usb_host_hs",
-       .sysc   = &omap54xx_usb_host_hs_sysc,
-};
-
-static struct omap_hwmod omap54xx_usb_host_hs_hwmod = {
-       .name           = "usb_host_hs",
-       .class          = &omap54xx_usb_host_hs_hwmod_class,
-       .clkdm_name     = "l3init_clkdm",
-       /*
-        * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
-        * id: i660
-        *
-        * Description:
-        * In the following configuration :
-        * - USBHOST module is set to smart-idle mode
-        * - PRCM asserts idle_req to the USBHOST module ( This typically
-        *   happens when the system is going to a low power mode : all ports
-        *   have been suspended, the master part of the USBHOST module has
-        *   entered the standby state, and SW has cut the functional clocks)
-        * - an USBHOST interrupt occurs before the module is able to answer
-        *   idle_ack, typically a remote wakeup IRQ.
-        * Then the USB HOST module will enter a deadlock situation where it
-        * is no more accessible nor functional.
-        *
-        * Workaround:
-        * Don't use smart idle; use only force idle, hence HWMOD_SWSUP_SIDLE
-        */
-
-       /*
-        * Errata: USB host EHCI may stall when entering smart-standby mode
-        * Id: i571
-        *
-        * Description:
-        * When the USBHOST module is set to smart-standby mode, and when it is
-        * ready to enter the standby state (i.e. all ports are suspended and
-        * all attached devices are in suspend mode), then it can wrongly assert
-        * the Mstandby signal too early while there are still some residual OCP
-        * transactions ongoing. If this condition occurs, the internal state
-        * machine may go to an undefined state and the USB link may be stuck
-        * upon the next resume.
-        *
-        * Workaround:
-        * Don't use smart standby; use only force standby,
-        * hence HWMOD_SWSUP_MSTANDBY
-        */
-
-       .flags          = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
-       .main_clk       = "l3init_60m_fclk",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_HOST_HS_CLKCTRL_OFFSET,
-                       .context_offs = OMAP54XX_RM_L3INIT_USB_HOST_HS_CONTEXT_OFFSET,
-                       .modulemode   = MODULEMODE_SWCTRL,
-               },
-       },
-};
-
-/*
- * 'usb_tll_hs' class
- * usb_tll_hs module is the adapter on the usb_host_hs ports
- */
-
-static struct omap_hwmod_class_sysconfig omap54xx_usb_tll_hs_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x0010,
-       .syss_offs      = 0x0014,
-       .sysc_flags     = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
-                          SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
-                          SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
-       .sysc_fields    = &omap_hwmod_sysc_type1,
-};
-
-static struct omap_hwmod_class omap54xx_usb_tll_hs_hwmod_class = {
-       .name   = "usb_tll_hs",
-       .sysc   = &omap54xx_usb_tll_hs_sysc,
-};
-
-static struct omap_hwmod omap54xx_usb_tll_hs_hwmod = {
-       .name           = "usb_tll_hs",
-       .class          = &omap54xx_usb_tll_hs_hwmod_class,
-       .clkdm_name     = "l3init_clkdm",
-       .main_clk       = "l4_root_clk_div",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_TLL_HS_CLKCTRL_OFFSET,
-                       .context_offs = OMAP54XX_RM_L3INIT_USB_TLL_HS_CONTEXT_OFFSET,
-                       .modulemode   = MODULEMODE_HWCTRL,
-               },
-       },
-};
-
-/*
- * 'usb_otg_ss' class
- * 2.0 super speed (usb_otg_ss) controller
- */
-
-static struct omap_hwmod_class_sysconfig omap54xx_usb_otg_ss_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x0010,
-       .sysc_flags     = (SYSC_HAS_DMADISABLE | SYSC_HAS_MIDLEMODE |
-                          SYSC_HAS_SIDLEMODE),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-                          SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
-                          MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
-       .sysc_fields    = &omap_hwmod_sysc_type2,
-};
-
-static struct omap_hwmod_class omap54xx_usb_otg_ss_hwmod_class = {
-       .name   = "usb_otg_ss",
-       .sysc   = &omap54xx_usb_otg_ss_sysc,
-};
-
-/* usb_otg_ss */
-static struct omap_hwmod_opt_clk usb_otg_ss_opt_clks[] = {
-       { .role = "refclk960m", .clk = "usb_otg_ss_refclk960m" },
-};
-
-static struct omap_hwmod omap54xx_usb_otg_ss_hwmod = {
-       .name           = "usb_otg_ss",
-       .class          = &omap54xx_usb_otg_ss_hwmod_class,
-       .clkdm_name     = "l3init_clkdm",
-       .flags          = HWMOD_SWSUP_SIDLE,
-       .main_clk       = "dpll_core_h13x2_ck",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_OTG_SS_CLKCTRL_OFFSET,
-                       .context_offs = OMAP54XX_RM_L3INIT_USB_OTG_SS_CONTEXT_OFFSET,
-                       .modulemode   = MODULEMODE_HWCTRL,
-               },
-       },
-       .opt_clks       = usb_otg_ss_opt_clks,
-       .opt_clks_cnt   = ARRAY_SIZE(usb_otg_ss_opt_clks),
-};
-
 /*
  * 'sata' class
  * sata:  serial ata interface  gen2 compliant   ( 1 rx/ 1 tx)
@@ -619,30 +467,6 @@ static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mpu = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* l4_cfg -> usb_host_hs */
-static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_host_hs = {
-       .master         = &omap54xx_l4_cfg_hwmod,
-       .slave          = &omap54xx_usb_host_hs_hwmod,
-       .clk            = "l3_iclk_div",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_cfg -> usb_tll_hs */
-static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_tll_hs = {
-       .master         = &omap54xx_l4_cfg_hwmod,
-       .slave          = &omap54xx_usb_tll_hs_hwmod,
-       .clk            = "l4_root_clk_div",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_cfg -> usb_otg_ss */
-static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_otg_ss = {
-       .master         = &omap54xx_l4_cfg_hwmod,
-       .slave          = &omap54xx_usb_otg_ss_hwmod,
-       .clk            = "dpll_core_h13x2_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {
        &omap54xx_l3_main_1__dmm,
        &omap54xx_l3_main_3__l3_instr,
@@ -663,9 +487,6 @@ static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {
        &omap54xx_mpu__emif1,
        &omap54xx_mpu__emif2,
        &omap54xx_l4_cfg__mpu,
-       &omap54xx_l4_cfg__usb_host_hs,
-       &omap54xx_l4_cfg__usb_tll_hs,
-       &omap54xx_l4_cfg__usb_otg_ss,
        &omap54xx_l4_cfg__sata,
        NULL,
 };
index 07b7458..adb0784 100644 (file)
@@ -491,101 +491,6 @@ static struct omap_hwmod dra7xx_sata_hwmod = {
        },
 };
 
-/*
- * 'usb_otg_ss' class
- *
- */
-
-static struct omap_hwmod_class_sysconfig dra7xx_usb_otg_ss_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x0010,
-       .sysc_flags     = (SYSC_HAS_DMADISABLE | SYSC_HAS_MIDLEMODE |
-                          SYSC_HAS_SIDLEMODE),
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
-                          SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
-                          MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
-       .sysc_fields    = &omap_hwmod_sysc_type2,
-};
-
-static struct omap_hwmod_class dra7xx_usb_otg_ss_hwmod_class = {
-       .name   = "usb_otg_ss",
-       .sysc   = &dra7xx_usb_otg_ss_sysc,
-};
-
-/* usb_otg_ss1 */
-static struct omap_hwmod_opt_clk usb_otg_ss1_opt_clks[] = {
-       { .role = "refclk960m", .clk = "usb_otg_ss1_refclk960m" },
-};
-
-static struct omap_hwmod dra7xx_usb_otg_ss1_hwmod = {
-       .name           = "usb_otg_ss1",
-       .class          = &dra7xx_usb_otg_ss_hwmod_class,
-       .clkdm_name     = "l3init_clkdm",
-       .main_clk       = "dpll_core_h13x2_ck",
-       .flags          = HWMOD_CLKDM_NOAUTO,
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = DRA7XX_CM_L3INIT_USB_OTG_SS1_CLKCTRL_OFFSET,
-                       .context_offs = DRA7XX_RM_L3INIT_USB_OTG_SS1_CONTEXT_OFFSET,
-                       .modulemode   = MODULEMODE_HWCTRL,
-               },
-       },
-       .opt_clks       = usb_otg_ss1_opt_clks,
-       .opt_clks_cnt   = ARRAY_SIZE(usb_otg_ss1_opt_clks),
-};
-
-/* usb_otg_ss2 */
-static struct omap_hwmod_opt_clk usb_otg_ss2_opt_clks[] = {
-       { .role = "refclk960m", .clk = "usb_otg_ss2_refclk960m" },
-};
-
-static struct omap_hwmod dra7xx_usb_otg_ss2_hwmod = {
-       .name           = "usb_otg_ss2",
-       .class          = &dra7xx_usb_otg_ss_hwmod_class,
-       .clkdm_name     = "l3init_clkdm",
-       .main_clk       = "dpll_core_h13x2_ck",
-       .flags          = HWMOD_CLKDM_NOAUTO,
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = DRA7XX_CM_L3INIT_USB_OTG_SS2_CLKCTRL_OFFSET,
-                       .context_offs = DRA7XX_RM_L3INIT_USB_OTG_SS2_CONTEXT_OFFSET,
-                       .modulemode   = MODULEMODE_HWCTRL,
-               },
-       },
-       .opt_clks       = usb_otg_ss2_opt_clks,
-       .opt_clks_cnt   = ARRAY_SIZE(usb_otg_ss2_opt_clks),
-};
-
-/* usb_otg_ss3 */
-static struct omap_hwmod dra7xx_usb_otg_ss3_hwmod = {
-       .name           = "usb_otg_ss3",
-       .class          = &dra7xx_usb_otg_ss_hwmod_class,
-       .clkdm_name     = "l3init_clkdm",
-       .main_clk       = "dpll_core_h13x2_ck",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = DRA7XX_CM_L3INIT_USB_OTG_SS3_CLKCTRL_OFFSET,
-                       .context_offs = DRA7XX_RM_L3INIT_USB_OTG_SS3_CONTEXT_OFFSET,
-                       .modulemode   = MODULEMODE_HWCTRL,
-               },
-       },
-};
-
-/* usb_otg_ss4 */
-static struct omap_hwmod dra7xx_usb_otg_ss4_hwmod = {
-       .name           = "usb_otg_ss4",
-       .class          = &dra7xx_usb_otg_ss_hwmod_class,
-       .clkdm_name     = "l3init_clkdm",
-       .main_clk       = "dpll_core_h13x2_ck",
-       .prcm = {
-               .omap4 = {
-                       .clkctrl_offs = DRA7XX_CM_L3INIT_USB_OTG_SS4_CLKCTRL_OFFSET,
-                       .context_offs = DRA7XX_RM_L3INIT_USB_OTG_SS4_CONTEXT_OFFSET,
-                       .modulemode   = MODULEMODE_HWCTRL,
-               },
-       },
-};
-
 /*
  * 'vcp' class
  *
@@ -813,38 +718,6 @@ static struct omap_hwmod_ocp_if dra7xx_l4_cfg__sata = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-/* l4_per3 -> usb_otg_ss1 */
-static struct omap_hwmod_ocp_if dra7xx_l4_per3__usb_otg_ss1 = {
-       .master         = &dra7xx_l4_per3_hwmod,
-       .slave          = &dra7xx_usb_otg_ss1_hwmod,
-       .clk            = "dpll_core_h13x2_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_per3 -> usb_otg_ss2 */
-static struct omap_hwmod_ocp_if dra7xx_l4_per3__usb_otg_ss2 = {
-       .master         = &dra7xx_l4_per3_hwmod,
-       .slave          = &dra7xx_usb_otg_ss2_hwmod,
-       .clk            = "dpll_core_h13x2_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_per3 -> usb_otg_ss3 */
-static struct omap_hwmod_ocp_if dra7xx_l4_per3__usb_otg_ss3 = {
-       .master         = &dra7xx_l4_per3_hwmod,
-       .slave          = &dra7xx_usb_otg_ss3_hwmod,
-       .clk            = "dpll_core_h13x2_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_per3 -> usb_otg_ss4 */
-static struct omap_hwmod_ocp_if dra7xx_l4_per3__usb_otg_ss4 = {
-       .master         = &dra7xx_l4_per3_hwmod,
-       .slave          = &dra7xx_usb_otg_ss4_hwmod,
-       .clk            = "dpll_core_h13x2_ck",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* l3_main_1 -> vcp1 */
 static struct omap_hwmod_ocp_if dra7xx_l3_main_1__vcp1 = {
        .master         = &dra7xx_l3_main_1_hwmod,
@@ -900,9 +773,6 @@ static struct omap_hwmod_ocp_if *dra7xx_hwmod_ocp_ifs[] __initdata = {
        &dra7xx_l4_cfg__pciess2,
        &dra7xx_l3_main_1__qspi,
        &dra7xx_l4_cfg__sata,
-       &dra7xx_l4_per3__usb_otg_ss1,
-       &dra7xx_l4_per3__usb_otg_ss2,
-       &dra7xx_l4_per3__usb_otg_ss3,
        &dra7xx_l3_main_1__vcp1,
        &dra7xx_l4_per2__vcp1,
        &dra7xx_l3_main_1__vcp2,
@@ -911,20 +781,6 @@ static struct omap_hwmod_ocp_if *dra7xx_hwmod_ocp_ifs[] __initdata = {
 };
 
 /* SoC variant specific hwmod links */
-static struct omap_hwmod_ocp_if *dra76x_hwmod_ocp_ifs[] __initdata = {
-       &dra7xx_l4_per3__usb_otg_ss4,
-       NULL,
-};
-
-static struct omap_hwmod_ocp_if *acd_76x_hwmod_ocp_ifs[] __initdata = {
-       NULL,
-};
-
-static struct omap_hwmod_ocp_if *dra74x_hwmod_ocp_ifs[] __initdata = {
-       &dra7xx_l4_per3__usb_otg_ss4,
-       NULL,
-};
-
 static struct omap_hwmod_ocp_if *dra72x_hwmod_ocp_ifs[] __initdata = {
        NULL,
 };
@@ -942,21 +798,14 @@ int __init dra7xx_hwmod_init(void)
        ret = omap_hwmod_register_links(dra7xx_hwmod_ocp_ifs);
 
        if (!ret && soc_is_dra74x()) {
-               ret = omap_hwmod_register_links(dra74x_hwmod_ocp_ifs);
-               if (!ret)
-                       ret = omap_hwmod_register_links(rtc_hwmod_ocp_ifs);
+               ret = omap_hwmod_register_links(rtc_hwmod_ocp_ifs);
        } else if (!ret && soc_is_dra72x()) {
                ret = omap_hwmod_register_links(dra72x_hwmod_ocp_ifs);
                if (!ret && !of_machine_is_compatible("ti,dra718"))
                        ret = omap_hwmod_register_links(rtc_hwmod_ocp_ifs);
        } else if (!ret && soc_is_dra76x()) {
-               ret = omap_hwmod_register_links(dra76x_hwmod_ocp_ifs);
-
-               if (!ret && soc_is_dra76x_acd()) {
-                       ret = omap_hwmod_register_links(acd_76x_hwmod_ocp_ifs);
-               } else if (!ret && soc_is_dra76x_abz()) {
+               if (!ret && soc_is_dra76x_abz())
                        ret = omap_hwmod_register_links(rtc_hwmod_ocp_ifs);
-               }
        }
 
        return ret;
index 84718ed..81a627e 100644 (file)
@@ -774,7 +774,7 @@ static int alignment_get_arm(struct pt_regs *regs, u32 *ip, u32 *inst)
        if (user_mode(regs))
                fault = get_user(instr, ip);
        else
-               fault = probe_kernel_address(ip, instr);
+               fault = get_kernel_nofault(instr, ip);
 
        *inst = __mem_to_opcode_arm(instr);
 
@@ -789,7 +789,7 @@ static int alignment_get_thumb(struct pt_regs *regs, u16 *ip, u16 *inst)
        if (user_mode(regs))
                fault = get_user(instr, ip);
        else
-               fault = probe_kernel_address(ip, instr);
+               fault = get_kernel_nofault(instr, ip);
 
        *inst = __mem_to_opcode_thumb16(instr);
 
index 31380da..a4a094b 100644 (file)
@@ -1564,7 +1564,7 @@ config CC_HAS_SIGN_RETURN_ADDRESS
        def_bool $(cc-option,-msign-return-address=all)
 
 config AS_HAS_PAC
-       def_bool $(as-option,-Wa$(comma)-march=armv8.3-a)
+       def_bool $(cc-option,-Wa$(comma)-march=armv8.3-a)
 
 config AS_HAS_CFI_NEGATE_RA_STATE
        def_bool $(as-instr,.cfi_startproc\n.cfi_negate_ra_state\n.cfi_endproc\n)
@@ -1630,6 +1630,8 @@ config ARM64_BTI_KERNEL
        depends on CC_HAS_BRANCH_PROT_PAC_RET_BTI
        # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94697
        depends on !CC_IS_GCC || GCC_VERSION >= 100100
+       # https://reviews.llvm.org/rGb8ae3fdfa579dbf366b1bb1cbfdbf8c51db7fa55
+       depends on !CC_IS_CLANG || CLANG_VERSION >= 100001
        depends on !(CC_IS_CLANG && GCOV_KERNEL)
        depends on (!FUNCTION_GRAPH_TRACER || DYNAMIC_FTRACE_WITH_REGS)
        help
index cdf7ec0..265c446 100644 (file)
@@ -8,21 +8,6 @@ config PID_IN_CONTEXTIDR
          instructions during context switch. Say Y here only if you are
          planning to use hardware trace tools with this kernel.
 
-config ARM64_RANDOMIZE_TEXT_OFFSET
-       bool "Randomize TEXT_OFFSET at build time"
-       help
-         Say Y here if you want the image load offset (AKA TEXT_OFFSET)
-         of the kernel to be randomized at build-time. When selected,
-         this option will cause TEXT_OFFSET to be randomized upon any
-         build of the kernel, and the offset will be reflected in the
-         text_offset field of the resulting Image. This can be used to
-         fuzz-test bootloaders which respect text_offset.
-
-         This option is intended for bootloader and/or kernel testing
-         only. Bootloaders must make no assumptions regarding the value
-         of TEXT_OFFSET and platforms must not require a specific
-         value.
-
 config DEBUG_EFI
        depends on EFI && DEBUG_INFO
        bool "UEFI debugging"
index 76359cf..a0d94d0 100644 (file)
@@ -121,13 +121,7 @@ endif
 head-y         := arch/arm64/kernel/head.o
 
 # The byte offset of the kernel image in RAM from the start of RAM.
-ifeq ($(CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET), y)
-TEXT_OFFSET := $(shell awk "BEGIN {srand(); printf \"0x%06x\n\", \
-                int(2 * 1024 * 1024 / (2 ^ $(CONFIG_ARM64_PAGE_SHIFT)) * \
-                rand()) * (2 ^ $(CONFIG_ARM64_PAGE_SHIFT))}")
-else
 TEXT_OFFSET := 0x0
-endif
 
 ifeq ($(CONFIG_KASAN_SW_TAGS), y)
 KASAN_SHADOW_SCALE_SHIFT := 4
index f19b762..6f3e155 100644 (file)
@@ -1,8 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0
 subdir-y += actions
-subdir-y += al
 subdir-y += allwinner
 subdir-y += altera
+subdir-y += amazon
 subdir-y += amd
 subdir-y += amlogic
 subdir-y += apm
diff --git a/arch/arm64/boot/dts/al/Makefile b/arch/arm64/boot/dts/al/Makefile
deleted file mode 100644 (file)
index d79822d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-only
-dtb-$(CONFIG_ARCH_ALPINE)      += alpine-v2-evp.dtb
diff --git a/arch/arm64/boot/dts/al/alpine-v2-evp.dts b/arch/arm64/boot/dts/al/alpine-v2-evp.dts
deleted file mode 100644 (file)
index a079d7b..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Antoine Tenart <antoine.tenart@free-electrons.com>
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#include "alpine-v2.dtsi"
-
-/ {
-       model = "Annapurna Labs Alpine v2 EVP";
-       compatible = "al,alpine-v2-evp", "al,alpine-v2";
-
-       aliases {
-               serial0 = &uart0;
-               serial1 = &uart1;
-               serial2 = &uart2;
-               serial3 = &uart3;
-       };
-
-       chosen {
-               stdout-path = "serial0:115200n8";
-       };
-};
-
-&uart0 { status = "okay"; };
diff --git a/arch/arm64/boot/dts/al/alpine-v2.dtsi b/arch/arm64/boot/dts/al/alpine-v2.dtsi
deleted file mode 100644 (file)
index d5e7e2b..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Antoine Tenart <antoine.tenart@free-electrons.com>
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/dts-v1/;
-
-#include <dt-bindings/interrupt-controller/arm-gic.h>
-
-/ {
-       model = "Annapurna Labs Alpine v2";
-       compatible = "al,alpine-v2";
-       #address-cells = <2>;
-       #size-cells = <2>;
-
-       cpus {
-               #address-cells = <2>;
-               #size-cells = <0>;
-
-               cpu@0 {
-                       compatible = "arm,cortex-a57";
-                       device_type = "cpu";
-                       reg = <0x0 0x0>;
-                       enable-method = "psci";
-               };
-
-               cpu@1 {
-                       compatible = "arm,cortex-a57";
-                       device_type = "cpu";
-                       reg = <0x0 0x1>;
-                       enable-method = "psci";
-               };
-
-               cpu@2 {
-                       compatible = "arm,cortex-a57";
-                       device_type = "cpu";
-                       reg = <0x0 0x2>;
-                       enable-method = "psci";
-               };
-
-               cpu@3 {
-                       compatible = "arm,cortex-a57";
-                       device_type = "cpu";
-                       reg = <0x0 0x3>;
-                       enable-method = "psci";
-               };
-       };
-
-       psci {
-               compatible = "arm,psci-0.2", "arm,psci";
-               method = "smc";
-               cpu_suspend = <0x84000001>;
-               cpu_off = <0x84000002>;
-               cpu_on = <0x84000003>;
-       };
-
-       sbclk: sbclk {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <1000000>;
-       };
-
-       soc {
-               compatible = "simple-bus";
-               #address-cells = <2>;
-               #size-cells = <2>;
-
-               interrupt-parent = <&gic>;
-               ranges;
-
-               timer {
-                       compatible = "arm,armv8-timer";
-                       interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
-                                    <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
-                                    <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
-                                    <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
-               };
-
-               pmu {
-                       compatible = "arm,armv8-pmuv3";
-                       interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
-               };
-
-               gic: gic@f0100000 {
-                       compatible = "arm,gic-v3";
-                       reg = <0x0 0xf0200000 0x0 0x10000>,     /* GIC Dist */
-                             <0x0 0xf0280000 0x0 0x200000>,    /* GICR */
-                             <0x0 0xf0100000 0x0 0x2000>,      /* GICC */
-                             <0x0 0xf0110000 0x0 0x2000>,      /* GICV */
-                             <0x0 0xf0120000 0x0 0x2000>;      /* GICH */
-                       interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
-                       interrupt-controller;
-                       #interrupt-cells = <3>;
-               };
-
-               pci@fbc00000 {
-                       compatible = "pci-host-ecam-generic";
-                       device_type = "pci";
-                       #size-cells = <2>;
-                       #address-cells = <3>;
-                       #interrupt-cells = <1>;
-                       reg = <0x0 0xfbc00000 0x0 0x100000>;
-                       interrupt-map-mask = <0xf800 0 0 7>;
-                       /* add legacy interrupts for SATA only */
-                       interrupt-map = <0x4000 0 0 1 &gic 0 53 4>,
-                                       <0x4800 0 0 1 &gic 0 54 4>;
-                       /* 32 bit non prefetchable memory space */
-                       ranges = <0x2000000 0x0 0xfe000000 0x0 0xfe000000 0x0 0x1000000>;
-                       bus-range = <0x00 0x00>;
-                       msi-parent = <&msix>;
-               };
-
-               msix: msix@fbe00000 {
-                       compatible = "al,alpine-msix";
-                       reg = <0x0 0xfbe00000 0x0 0x100000>;
-                       interrupt-controller;
-                       msi-controller;
-                       al,msi-base-spi = <160>;
-                       al,msi-num-spis = <160>;
-               };
-
-               io-fabric {
-                       compatible = "simple-bus";
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       ranges = <0x0 0x0 0xfc000000 0x2000000>;
-
-                       uart0: serial@1883000 {
-                               compatible = "ns16550a";
-                               device_type = "serial";
-                               reg = <0x1883000 0x1000>;
-                               interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
-                               clock-frequency = <500000000>;
-                               reg-shift = <2>;
-                               reg-io-width = <4>;
-                               status = "disabled";
-                       };
-
-                       uart1: serial@1884000 {
-                               compatible = "ns16550a";
-                               device_type = "serial";
-                               reg = <0x1884000 0x1000>;
-                               interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
-                               clock-frequency = <500000000>;
-                               reg-shift = <2>;
-                               reg-io-width = <4>;
-                               status = "disabled";
-                       };
-
-                       uart2: serial@1885000 {
-                               compatible = "ns16550a";
-                               device_type = "serial";
-                               reg = <0x1885000 0x1000>;
-                               interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
-                               clock-frequency = <500000000>;
-                               reg-shift = <2>;
-                               reg-io-width = <4>;
-                               status = "disabled";
-                       };
-
-                       uart3: serial@1886000 {
-                               compatible = "ns16550a";
-                               device_type = "serial";
-                               reg = <0x1886000 0x1000>;
-                               interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
-                               clock-frequency = <500000000>;
-                               reg-shift = <2>;
-                               reg-io-width = <4>;
-                               status = "disabled";
-                       };
-
-                       timer0: timer@1890000 {
-                               compatible = "arm,sp804", "arm,primecell";
-                               reg = <0x1890000 0x1000>;
-                               interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&sbclk>;
-                       };
-
-                       timer1: timer@1891000 {
-                               compatible = "arm,sp804", "arm,primecell";
-                               reg = <0x1891000 0x1000>;
-                               interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&sbclk>;
-                               status = "disabled";
-                       };
-
-                       timer2: timer@1892000 {
-                               compatible = "arm,sp804", "arm,primecell";
-                               reg = <0x1892000 0x1000>;
-                               interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&sbclk>;
-                               status = "disabled";
-                       };
-
-                       timer3: timer@1893000 {
-                               compatible = "arm,sp804", "arm,primecell";
-                               reg = <0x1893000 0x1000>;
-                               interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&sbclk>;
-                               status = "disabled";
-                       };
-               };
-       };
-};
index e4d3cd0..916d10d 100644 (file)
@@ -11,6 +11,7 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pine64-plus.dtb sun50i-a64-pine64.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinebook.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinephone-1.0.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinephone-1.1.dtb
+dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinephone-1.2.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-pinetab.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-sopine-baseboard.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-a64-teres-i.dtb
index 06a775c..3e99a87 100644 (file)
@@ -9,3 +9,22 @@
        model = "Pine64 PinePhone Braveheart (1.1)";
        compatible = "pine64,pinephone-1.1", "allwinner,sun50i-a64";
 };
+
+&backlight {
+       power-supply = <&reg_ldo_io0>;
+       /*
+        * PWM backlight circuit on this PinePhone revision was changed since
+        * 1.0, and the lowest PWM duty cycle that doesn't lead to backlight
+        * being off is around 20%. Duty cycle for the lowest brightness level
+        * also varries quite a bit between individual boards, so the lowest
+        * value here was chosen as a safe default.
+        */
+       brightness-levels = <
+               774  793  814  842
+               882  935  1003 1088
+               1192 1316 1462 1633
+               1830 2054 2309 2596
+               2916 3271 3664 4096>;
+       num-interpolated-steps = <50>;
+       default-brightness-level = <400>;
+};
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dts
new file mode 100644 (file)
index 0000000..a9f5b67
--- /dev/null
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+// Copyright (C) 2020 Ondrej Jirman <megous@megous.com>
+
+/dts-v1/;
+
+#include "sun50i-a64-pinephone.dtsi"
+
+/ {
+       model = "Pine64 PinePhone (1.2)";
+       compatible = "pine64,pinephone-1.2", "allwinner,sun50i-a64";
+};
+
+&backlight {
+       power-supply = <&reg_ldo_io0>;
+       /*
+        * PWM backlight circuit on this PinePhone revision was changed since 1.0,
+        * and the lowest PWM duty cycle that doesn't lead to backlight being off
+        * is around 10%. Duty cycle for the lowest brightness level also varries
+        * quite a bit between individual boards, so the lowest value here was
+        * chosen as a safe default.
+        */
+       brightness-levels = <
+               5000 5248 5506 5858 6345
+               6987 7805 8823 10062 11543
+               13287 15317 17654 20319 23336
+               26724 30505 34702 39335 44427
+               50000
+       >;
+       num-interpolated-steps = <50>;
+       default-brightness-level = <500>;
+};
+
+&lis3mdl {
+       /*
+        * Board revision 1.2 fixed routing of the interrupt to DRDY pin,
+        * enable interrupts.
+        */
+       interrupt-parent = <&pio>;
+       interrupts = <1 1 IRQ_TYPE_EDGE_RISING>; /* PB1 */
+};
index cefda14..25150ab 100644 (file)
                serial0 = &uart0;
        };
 
+       backlight: backlight {
+               compatible = "pwm-backlight";
+               pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>;
+               enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */
+               /* Backlight configuration differs per PinePhone revision. */
+       };
+
        chosen {
                stdout-path = "serial0:115200n8";
        };
        status = "okay";
 };
 
+&de {
+       status = "okay";
+};
+
+&dphy {
+       status = "okay";
+};
+
+&dsi {
+       vcc-dsi-supply = <&reg_dldo1>;
+       status = "okay";
+
+       panel@0 {
+               compatible = "xingbangda,xbd599";
+               reg = <0>;
+               reset-gpios = <&pio 3 23 GPIO_ACTIVE_LOW>; /* PD23 */
+               iovcc-supply = <&reg_dldo2>;
+               vcc-supply = <&reg_ldo_io0>;
+               backlight = <&backlight>;
+       };
+};
+
 &ehci0 {
        status = "okay";
 };
        status = "okay";
 };
 
+&i2c0 {
+       status = "okay";
+
+       touchscreen@5d {
+               compatible = "goodix,gt917s";
+               reg = <0x5d>;
+               interrupt-parent = <&pio>;
+               interrupts = <7 4 IRQ_TYPE_LEVEL_HIGH>; /* PH4 */
+               irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */
+               reset-gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */
+               AVDD28-supply = <&reg_ldo_io0>;
+               VDDIO-supply = <&reg_ldo_io0>;
+               touchscreen-size-x = <720>;
+               touchscreen-size-y = <1440>;
+       };
+};
+
 &i2c1 {
        status = "okay";
 
        /* Magnetometer */
-       lis3mdl@1e {
+       lis3mdl: lis3mdl@1e {
                compatible = "st,lis3mdl-magn";
                reg = <0x1e>;
                vdd-supply = <&reg_dldo1>;
         */
 };
 
+&r_pwm {
+       status = "okay";
+};
+
 &r_rsb {
        status = "okay";
 
 
 &reg_dldo4 {
        regulator-min-microvolt = <1800000>;
-       regulator-max-microvolt = <3300000>;
+       regulator-max-microvolt = <1800000>;
        regulator-name = "vcc-wifi-io";
 };
 
index 2e2b14c..8857a37 100644 (file)
@@ -3,6 +3,7 @@
 
 /dts-v1/;
 #include "sun50i-h5.dtsi"
+#include "sun50i-h5-cpu-opp.dtsi"
 #include <arm/sunxi-bananapi-m2-plus-v1.2.dtsi>
 
 / {
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h5-cpu-opp.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h5-cpu-opp.dtsi
new file mode 100644 (file)
index 0000000..b265720
--- /dev/null
@@ -0,0 +1,79 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+// Copyright (C) 2020 Chen-Yu Tsai <wens@csie.org>
+
+/ {
+       cpu_opp_table: cpu-opp-table {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp-408000000 {
+                       opp-hz = /bits/ 64 <408000000>;
+                       opp-microvolt = <1000000 1000000 1310000>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+               };
+
+               opp-648000000 {
+                       opp-hz = /bits/ 64 <648000000>;
+                       opp-microvolt = <1040000 1040000 1310000>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+               };
+
+               opp-816000000 {
+                       opp-hz = /bits/ 64 <816000000>;
+                       opp-microvolt = <1080000 1080000 1310000>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+               };
+
+               opp-912000000 {
+                       opp-hz = /bits/ 64 <912000000>;
+                       opp-microvolt = <1120000 1120000 1310000>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+               };
+
+               opp-960000000 {
+                       opp-hz = /bits/ 64 <960000000>;
+                       opp-microvolt = <1160000 1160000 1310000>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+               };
+
+               opp-1008000000 {
+                       opp-hz = /bits/ 64 <1008000000>;
+                       opp-microvolt = <1200000 1200000 1310000>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+               };
+
+               opp-1056000000 {
+                       opp-hz = /bits/ 64 <1056000000>;
+                       opp-microvolt = <1240000 1240000 1310000>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+               };
+
+               opp-1104000000 {
+                       opp-hz = /bits/ 64 <1104000000>;
+                       opp-microvolt = <1260000 1260000 1310000>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+               };
+
+               opp-1152000000 {
+                       opp-hz = /bits/ 64 <1152000000>;
+                       opp-microvolt = <1300000 1300000 1310000>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+               };
+       };
+};
+
+&cpu0 {
+       operating-points-v2 = <&cpu_opp_table>;
+};
+
+&cpu1 {
+       operating-points-v2 = <&cpu_opp_table>;
+};
+
+&cpu2 {
+       operating-points-v2 = <&cpu_opp_table>;
+};
+
+&cpu3 {
+       operating-points-v2 = <&cpu_opp_table>;
+};
index 64d35da..d811df3 100644 (file)
@@ -4,6 +4,7 @@
 
 /dts-v1/;
 #include "sun50i-h5.dtsi"
+#include "sun50i-h5-cpu-opp.dtsi"
 #include <arm/sunxi-libretech-all-h3-cc.dtsi>
 
 / {
index c95a685..de19e68 100644 (file)
                };
        };
 
+       leds {
+               compatible = "gpio-leds";
+
+               pwr {
+                       label = "orangepi:green:pwr";
+                       gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;
+                       default-state = "on";
+               };
+
+               status {
+                       label = "orangepi:red:status";
+                       gpios = <&pio 0 17 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
        reg_vcc3v3: vcc3v3 {
                compatible = "regulator-fixed";
                regulator-name = "vcc3v3";
        status = "okay";
 };
 
+&ehci0 {
+       status = "okay";
+};
+
 &hdmi {
        status = "okay";
 };
        status = "okay";
 };
 
+&ohci0 {
+       status = "okay";
+};
+
 &uart0 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_pa_pins>;
        pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
        status = "okay";
 };
+
+&usb_otg {
+       /*
+        * According to schematics CN1 MicroUSB port can be used to take
+        * external 5V to power up the board VBUS. On the contrary CN1 MicroUSB
+        * port cannot provide power externally even if the board is powered
+        * via GPIO pins. It thus makes sense to force peripheral mode.
+        */
+       dr_mode = "peripheral";
+       status = "okay";
+};
+
+&usbphy {
+       status = "okay";
+};
index 4462a68..6735e31 100644 (file)
@@ -3,6 +3,8 @@
 
 #include <arm/sunxi-h3-h5.dtsi>
 
+#include <dt-bindings/thermal/thermal.h>
+
 / {
        cpus {
                #address-cells = <1>;
@@ -13,6 +15,9 @@
                        device_type = "cpu";
                        reg = <0>;
                        enable-method = "psci";
+                       clocks = <&ccu CLK_CPUX>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+                       #cooling-cells = <2>;
                };
 
                cpu1: cpu@1 {
@@ -20,6 +25,9 @@
                        device_type = "cpu";
                        reg = <1>;
                        enable-method = "psci";
+                       clocks = <&ccu CLK_CPUX>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+                       #cooling-cells = <2>;
                };
 
                cpu2: cpu@2 {
@@ -27,6 +35,9 @@
                        device_type = "cpu";
                        reg = <2>;
                        enable-method = "psci";
+                       clocks = <&ccu CLK_CPUX>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+                       #cooling-cells = <2>;
                };
 
                cpu3: cpu@3 {
@@ -34,6 +45,9 @@
                        device_type = "cpu";
                        reg = <3>;
                        enable-method = "psci";
+                       clocks = <&ccu CLK_CPUX>;
+                       clock-latency-ns = <244144>; /* 8 32k periods */
+                       #cooling-cells = <2>;
                };
        };
 
                        polling-delay-passive = <0>;
                        polling-delay = <0>;
                        thermal-sensors = <&ths 0>;
+
+                       trips {
+                               cpu_hot_trip: cpu-hot {
+                                       temperature = <80000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu_very_hot_trip: cpu-very-hot {
+                                       temperature = <100000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               cpu-hot-limit {
+                                       trip = <&cpu_hot_trip>;
+                                       cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
                };
 
                gpu_thermal {
index d1fc9c2..d719619 100644 (file)
                        reg = <0xffda4000 0x1000>;
                        interrupts = <0 99 4>;
                        resets = <&rst SPIM0_RESET>;
+                       reset-names = "spi";
                        reg-io-width = <4>;
                        num-cs = <4>;
                        clocks = <&clkmgr STRATIX10_L4_MAIN_CLK>;
                        reg = <0xffda5000 0x1000>;
                        interrupts = <0 100 4>;
                        resets = <&rst SPIM1_RESET>;
+                       reset-names = "spi";
                        reg-io-width = <4>;
                        num-cs = <4>;
                        clocks = <&clkmgr STRATIX10_L4_MAIN_CLK>;
diff --git a/arch/arm64/boot/dts/amazon/Makefile b/arch/arm64/boot/dts/amazon/Makefile
new file mode 100644 (file)
index 0000000..ba9e115
--- /dev/null
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0-only
+dtb-$(CONFIG_ARCH_ALPINE)      += alpine-v2-evp.dtb
+dtb-$(CONFIG_ARCH_ALPINE)      += alpine-v3-evp.dtb
diff --git a/arch/arm64/boot/dts/amazon/alpine-v2-evp.dts b/arch/arm64/boot/dts/amazon/alpine-v2-evp.dts
new file mode 100644 (file)
index 0000000..a079d7b
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Antoine Tenart <antoine.tenart@free-electrons.com>
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include "alpine-v2.dtsi"
+
+/ {
+       model = "Annapurna Labs Alpine v2 EVP";
+       compatible = "al,alpine-v2-evp", "al,alpine-v2";
+
+       aliases {
+               serial0 = &uart0;
+               serial1 = &uart1;
+               serial2 = &uart2;
+               serial3 = &uart3;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+};
+
+&uart0 { status = "okay"; };
diff --git a/arch/arm64/boot/dts/amazon/alpine-v2.dtsi b/arch/arm64/boot/dts/amazon/alpine-v2.dtsi
new file mode 100644 (file)
index 0000000..d5e7e2b
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Antoine Tenart <antoine.tenart@free-electrons.com>
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+       model = "Annapurna Labs Alpine v2";
+       compatible = "al,alpine-v2";
+       #address-cells = <2>;
+       #size-cells = <2>;
+
+       cpus {
+               #address-cells = <2>;
+               #size-cells = <0>;
+
+               cpu@0 {
+                       compatible = "arm,cortex-a57";
+                       device_type = "cpu";
+                       reg = <0x0 0x0>;
+                       enable-method = "psci";
+               };
+
+               cpu@1 {
+                       compatible = "arm,cortex-a57";
+                       device_type = "cpu";
+                       reg = <0x0 0x1>;
+                       enable-method = "psci";
+               };
+
+               cpu@2 {
+                       compatible = "arm,cortex-a57";
+                       device_type = "cpu";
+                       reg = <0x0 0x2>;
+                       enable-method = "psci";
+               };
+
+               cpu@3 {
+                       compatible = "arm,cortex-a57";
+                       device_type = "cpu";
+                       reg = <0x0 0x3>;
+                       enable-method = "psci";
+               };
+       };
+
+       psci {
+               compatible = "arm,psci-0.2", "arm,psci";
+               method = "smc";
+               cpu_suspend = <0x84000001>;
+               cpu_off = <0x84000002>;
+               cpu_on = <0x84000003>;
+       };
+
+       sbclk: sbclk {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <1000000>;
+       };
+
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <2>;
+               #size-cells = <2>;
+
+               interrupt-parent = <&gic>;
+               ranges;
+
+               timer {
+                       compatible = "arm,armv8-timer";
+                       interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
+                                    <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
+                                    <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
+                                    <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
+               };
+
+               pmu {
+                       compatible = "arm,armv8-pmuv3";
+                       interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               gic: gic@f0100000 {
+                       compatible = "arm,gic-v3";
+                       reg = <0x0 0xf0200000 0x0 0x10000>,     /* GIC Dist */
+                             <0x0 0xf0280000 0x0 0x200000>,    /* GICR */
+                             <0x0 0xf0100000 0x0 0x2000>,      /* GICC */
+                             <0x0 0xf0110000 0x0 0x2000>,      /* GICV */
+                             <0x0 0xf0120000 0x0 0x2000>;      /* GICH */
+                       interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-controller;
+                       #interrupt-cells = <3>;
+               };
+
+               pci@fbc00000 {
+                       compatible = "pci-host-ecam-generic";
+                       device_type = "pci";
+                       #size-cells = <2>;
+                       #address-cells = <3>;
+                       #interrupt-cells = <1>;
+                       reg = <0x0 0xfbc00000 0x0 0x100000>;
+                       interrupt-map-mask = <0xf800 0 0 7>;
+                       /* add legacy interrupts for SATA only */
+                       interrupt-map = <0x4000 0 0 1 &gic 0 53 4>,
+                                       <0x4800 0 0 1 &gic 0 54 4>;
+                       /* 32 bit non prefetchable memory space */
+                       ranges = <0x2000000 0x0 0xfe000000 0x0 0xfe000000 0x0 0x1000000>;
+                       bus-range = <0x00 0x00>;
+                       msi-parent = <&msix>;
+               };
+
+               msix: msix@fbe00000 {
+                       compatible = "al,alpine-msix";
+                       reg = <0x0 0xfbe00000 0x0 0x100000>;
+                       interrupt-controller;
+                       msi-controller;
+                       al,msi-base-spi = <160>;
+                       al,msi-num-spis = <160>;
+               };
+
+               io-fabric {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x0 0x0 0xfc000000 0x2000000>;
+
+                       uart0: serial@1883000 {
+                               compatible = "ns16550a";
+                               device_type = "serial";
+                               reg = <0x1883000 0x1000>;
+                               interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+                               clock-frequency = <500000000>;
+                               reg-shift = <2>;
+                               reg-io-width = <4>;
+                               status = "disabled";
+                       };
+
+                       uart1: serial@1884000 {
+                               compatible = "ns16550a";
+                               device_type = "serial";
+                               reg = <0x1884000 0x1000>;
+                               interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
+                               clock-frequency = <500000000>;
+                               reg-shift = <2>;
+                               reg-io-width = <4>;
+                               status = "disabled";
+                       };
+
+                       uart2: serial@1885000 {
+                               compatible = "ns16550a";
+                               device_type = "serial";
+                               reg = <0x1885000 0x1000>;
+                               interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
+                               clock-frequency = <500000000>;
+                               reg-shift = <2>;
+                               reg-io-width = <4>;
+                               status = "disabled";
+                       };
+
+                       uart3: serial@1886000 {
+                               compatible = "ns16550a";
+                               device_type = "serial";
+                               reg = <0x1886000 0x1000>;
+                               interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+                               clock-frequency = <500000000>;
+                               reg-shift = <2>;
+                               reg-io-width = <4>;
+                               status = "disabled";
+                       };
+
+                       timer0: timer@1890000 {
+                               compatible = "arm,sp804", "arm,primecell";
+                               reg = <0x1890000 0x1000>;
+                               interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&sbclk>;
+                       };
+
+                       timer1: timer@1891000 {
+                               compatible = "arm,sp804", "arm,primecell";
+                               reg = <0x1891000 0x1000>;
+                               interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&sbclk>;
+                               status = "disabled";
+                       };
+
+                       timer2: timer@1892000 {
+                               compatible = "arm,sp804", "arm,primecell";
+                               reg = <0x1892000 0x1000>;
+                               interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&sbclk>;
+                               status = "disabled";
+                       };
+
+                       timer3: timer@1893000 {
+                               compatible = "arm,sp804", "arm,primecell";
+                               reg = <0x1893000 0x1000>;
+                               interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&sbclk>;
+                               status = "disabled";
+                       };
+               };
+       };
+};
diff --git a/arch/arm64/boot/dts/amazon/alpine-v3-evp.dts b/arch/arm64/boot/dts/amazon/alpine-v3-evp.dts
new file mode 100644 (file)
index 0000000..48078f5
--- /dev/null
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ */
+
+#include "alpine-v3.dtsi"
+
+/ {
+       model = "Amazon's Annapurna Labs Alpine v3 Evaluation Platform (EVP)";
+       compatible = "amazon,al-alpine-v3-evp", "amazon,al-alpine-v3";
+
+       aliases {
+               serial0 = &uart0;
+               serial1 = &uart1;
+               serial2 = &uart2;
+               serial3 = &uart3;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+};
+
+&uart0 { status = "okay"; };
diff --git a/arch/arm64/boot/dts/amazon/alpine-v3.dtsi b/arch/arm64/boot/dts/amazon/alpine-v3.dtsi
new file mode 100644 (file)
index 0000000..73a352e
--- /dev/null
@@ -0,0 +1,408 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020, Amazon.com, Inc. or its affiliates. All Rights Reserved
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+       model = "Amazon's Annapurna Labs Alpine v3";
+       compatible = "amazon,al-alpine-v3";
+
+       interrupt-parent = <&gic>;
+
+       #address-cells = <2>;
+       #size-cells = <2>;
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x0>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster0_l2>;
+               };
+
+               cpu@1 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x1>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster0_l2>;
+               };
+
+               cpu@2 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x2>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster0_l2>;
+               };
+
+               cpu@3 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x3>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster0_l2>;
+               };
+
+               cpu@100 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x100>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster1_l2>;
+               };
+
+               cpu@101 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x101>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster1_l2>;
+               };
+
+               cpu@102 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x102>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster1_l2>;
+               };
+
+               cpu@103 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x103>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster1_l2>;
+               };
+
+               cpu@200 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x200>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster2_l2>;
+               };
+
+               cpu@201 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x201>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster2_l2>;
+               };
+
+               cpu@202 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x202>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster2_l2>;
+               };
+
+               cpu@203 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x203>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster2_l2>;
+               };
+
+               cpu@300 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x300>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster3_l2>;
+               };
+
+               cpu@301 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x301>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster3_l2>;
+               };
+
+               cpu@302 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x302>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster3_l2>;
+               };
+
+               cpu@303 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a72";
+                       reg = <0x303>;
+                       enable-method = "psci";
+                       d-cache-size = <0x8000>;
+                       d-cache-line-size = <64>;
+                       d-cache-sets = <256>;
+                       i-cache-size = <0xc000>;
+                       i-cache-line-size = <64>;
+                       i-cache-sets = <256>;
+                       next-level-cache = <&cluster3_l2>;
+               };
+
+               cluster0_l2: cache@0 {
+                       compatible = "cache";
+                       cache-size = <0x200000>;
+                       cache-line-size = <64>;
+                       cache-sets = <2048>;
+                       cache-level = <2>;
+               };
+
+               cluster1_l2: cache@100 {
+                       compatible = "cache";
+                       cache-size = <0x200000>;
+                       cache-line-size = <64>;
+                       cache-sets = <2048>;
+                       cache-level = <2>;
+               };
+
+               cluster2_l2: cache@200 {
+                       compatible = "cache";
+                       cache-size = <0x200000>;
+                       cache-line-size = <64>;
+                       cache-sets = <2048>;
+                       cache-level = <2>;
+               };
+
+               cluster3_l2: cache@300 {
+                       compatible = "cache";
+                       cache-size = <0x200000>;
+                       cache-line-size = <64>;
+                       cache-sets = <2048>;
+                       cache-level = <2>;
+               };
+
+       };
+
+       reserved-memory {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               secmon@0 {
+                       reg = <0x0 0x0 0x0 0x100000>;
+                       no-map;
+               };
+       };
+
+       psci {
+               compatible = "arm,psci-0.2";
+               method = "smc";
+       };
+
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
+                            <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
+                            <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
+                            <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
+       };
+
+       pmu {
+               compatible = "arm,cortex-a72-pmu";
+               interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
+       };
+
+
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               gic: interrupt-controller@f0000000 {
+                       compatible = "arm,gic-v3";
+                       #interrupt-cells = <3>;
+                       interrupt-controller;
+                       reg = <0x0 0xf0800000 0 0x10000>,       /* GICD */
+                             <0x0 0xf0a00000 0 0x200000>,      /* GICR */
+                             <0x0 0xf0000000 0 0x2000>,        /* GICC */
+                             <0x0 0xf0010000 0 0x1000>,        /* GICH */
+                             <0x0 0xf0020000 0 0x2000>;        /* GICV */
+                       interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               pcie@fbd00000 {
+                       compatible = "pci-host-ecam-generic";
+                       device_type = "pci";
+                       #size-cells = <2>;
+                       #address-cells = <3>;
+                       #interrupt-cells = <1>;
+                       reg = <0x0 0xfbd00000 0x0 0x100000>;
+                       interrupt-map-mask = <0xf800 0 0 7>;
+                       /* 8 x legacy interrupts for SATA only */
+                       interrupt-map = <0x4000 0 0 1 &gic 0 57 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x4800 0 0 1 &gic 0 58 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x5000 0 0 1 &gic 0 59 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x5800 0 0 1 &gic 0 60 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x6000 0 0 1 &gic 0 61 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x6800 0 0 1 &gic 0 62 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x7000 0 0 1 &gic 0 63 IRQ_TYPE_LEVEL_HIGH>,
+                                       <0x7800 0 0 1 &gic 0 64 IRQ_TYPE_LEVEL_HIGH>;
+                       ranges = <0x02000000 0x0 0xfe000000 0x0 0xfe000000 0x0 0x1000000>;
+                       bus-range = <0x00 0x00>;
+                       msi-parent = <&msix>;
+               };
+
+               msix: msix@fbe00000 {
+                       compatible = "al,alpine-msix";
+                       reg = <0x0 0xfbe00000 0x0 0x100000>;
+                       interrupt-controller;
+                       msi-controller;
+                       al,msi-base-spi = <336>;
+                       al,msi-num-spis = <959>;
+                       interrupt-parent = <&gic>;
+               };
+
+               io-fabric {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x0 0x0 0xfc000000 0x2000000>;
+
+                       uart0: serial@1883000 {
+                               compatible = "ns16550a";
+                               reg = <0x1883000 0x1000>;
+                               interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+                               clock-frequency = <0>; /* Filled by firmware */
+                               reg-shift = <2>;
+                               reg-io-width = <4>;
+                               status = "disabled";
+                       };
+
+                       uart1: serial@1884000 {
+                               compatible = "ns16550a";
+                               reg = <0x1884000 0x1000>;
+                               interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
+                               clock-frequency = <0>; /* Filled by firmware */
+                               reg-shift = <2>;
+                               reg-io-width = <4>;
+                               status = "disabled";
+                       };
+
+                       uart2: serial@1885000 {
+                               compatible = "ns16550a";
+                               reg = <0x1885000 0x1000>;
+                               interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
+                               clock-frequency = <0>; /* Filled by firmware */
+                               reg-shift = <2>;
+                               reg-io-width = <4>;
+                               status = "disabled";
+                       };
+
+                       uart3: serial@1886000 {
+                               compatible = "ns16550a";
+                               reg = <0x1886000 0x1000>;
+                               interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+                               clock-frequency = <0>; /* Filled by firmware */
+                               reg-shift = <2>;
+                               reg-io-width = <4>;
+                               status = "disabled";
+                       };
+               };
+       };
+};
index 8e6281c..b9efc84 100644 (file)
                        interrupt-names = "macirq";
                        clocks = <&clkc CLKID_ETH>,
                                 <&clkc CLKID_FCLK_DIV2>,
-                                <&clkc CLKID_MPLL2>;
-                       clock-names = "stmmaceth", "clkin0", "clkin1";
+                                <&clkc CLKID_MPLL2>,
+                                <&clkc CLKID_FCLK_DIV2>;
+                       clock-names = "stmmaceth", "clkin0", "clkin1",
+                                     "timing-adjustment";
                        rx-fifo-depth = <4096>;
                        tx-fifo-depth = <2048>;
                        status = "disabled";
index 593a006..41805f2 100644 (file)
                        interrupt-names = "macirq";
                        clocks = <&clkc CLKID_ETH>,
                                 <&clkc CLKID_FCLK_DIV2>,
-                                <&clkc CLKID_MPLL2>;
-                       clock-names = "stmmaceth", "clkin0", "clkin1";
+                                <&clkc CLKID_MPLL2>,
+                                <&clkc CLKID_FCLK_DIV2>;
+                       clock-names = "stmmaceth", "clkin0", "clkin1",
+                                     "timing-adjustment";
                        rx-fifo-depth = <4096>;
                        tx-fifo-depth = <2048>;
                        status = "disabled";
index ba63c36..0edd137 100644 (file)
@@ -12,6 +12,7 @@
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/power/meson-gxbb-power.h>
 #include <dt-bindings/thermal/thermal.h>
 
 / {
@@ -60,7 +61,7 @@
                        compatible = "amlogic,simple-framebuffer",
                                     "simple-framebuffer";
                        amlogic,pipeline = "vpu-cvbs";
-                       power-domains = <&pwrc_vpu>;
+                       power-domains = <&pwrc PWRC_GXBB_VPU_ID>;
                        status = "disabled";
                };
 
@@ -68,7 +69,7 @@
                        compatible = "amlogic,simple-framebuffer",
                                     "simple-framebuffer";
                        amlogic,pipeline = "vpu-hdmi";
-                       power-domains = <&pwrc_vpu>;
+                       power-domains = <&pwrc PWRC_GXBB_VPU_ID>;
                        status = "disabled";
                };
        };
                                compatible = "amlogic,meson-gx-ao-sysctrl", "simple-mfd", "syscon";
                                reg =  <0x0 0x0 0x0 0x100>;
 
-                               pwrc_vpu: power-controller-vpu {
-                                       compatible = "amlogic,meson-gx-pwrc-vpu";
-                                       #power-domain-cells = <0>;
-                                       amlogic,hhi-sysctrl = <&sysctrl>;
-                               };
-
                                clkc_AO: clock-controller {
                                        compatible = "amlogic,meson-gx-aoclkc";
                                        #clock-cells = <1>;
                        sysctrl: system-controller@0 {
                                compatible = "amlogic,meson-gx-hhi-sysctrl", "simple-mfd", "syscon";
                                reg = <0 0 0 0x400>;
+
+                               pwrc: power-controller {
+                                       compatible = "amlogic,meson-gxbb-pwrc";
+                                       #power-domain-cells = <1>;
+                                       amlogic,ao-sysctrl = <&sysctrl_AO>;
+                               };
                        };
 
                        mailbox: mailbox@404 {
                        interrupt-names = "macirq";
                        rx-fifo-depth = <4096>;
                        tx-fifo-depth = <2048>;
+                       power-domains = <&pwrc PWRC_GXBB_ETHERNET_MEM_ID>;
                        status = "disabled";
                };
 
index 234490d..ea50dd4 100644 (file)
 &ethmac {
        clocks = <&clkc CLKID_ETH>,
                 <&clkc CLKID_FCLK_DIV2>,
-                <&clkc CLKID_MPLL2>;
-       clock-names = "stmmaceth", "clkin0", "clkin1";
+                <&clkc CLKID_MPLL2>,
+                <&clkc CLKID_FCLK_DIV2>;
+       clock-names = "stmmaceth", "clkin0", "clkin1", "timing-adjustment";
 };
 
 &gpio_intc {
        };
 };
 
-&pwrc_vpu {
+&pwrc {
        resets = <&reset RESET_VIU>,
                 <&reset RESET_VENC>,
                 <&reset RESET_VCBUS>,
                 <&reset RESET_VDI6>,
                 <&reset RESET_VENCL>,
                 <&reset RESET_VID_LOCK>;
+       reset-names = "viu", "venc", "vcbus", "bt656",
+                     "dvin", "rdma", "venci", "vencp",
+                     "vdac", "vdi6", "vencl", "vid_lock";
        clocks = <&clkc CLKID_VPU>,
                 <&clkc CLKID_VAPB>;
        clock-names = "vpu", "vapb";
 
 &vpu {
        compatible = "amlogic,meson-gxbb-vpu", "amlogic,meson-gx-vpu";
-       power-domains = <&pwrc_vpu>;
+       power-domains = <&pwrc PWRC_GXBB_VPU_ID>;
 };
 
 &vdec {
index fc59c85..beb5fc7 100644 (file)
 &ethmac {
        clocks = <&clkc CLKID_ETH>,
                 <&clkc CLKID_FCLK_DIV2>,
-                <&clkc CLKID_MPLL2>;
-       clock-names = "stmmaceth", "clkin0", "clkin1";
+                <&clkc CLKID_MPLL2>,
+                <&clkc CLKID_FCLK_DIV2>;
+       clock-names = "stmmaceth", "clkin0", "clkin1", "timing-adjustment";
 
        mdio0: mdio {
                #address-cells = <1>;
        };
 };
 
-&pwrc_vpu {
+&pwrc {
        resets = <&reset RESET_VIU>,
                 <&reset RESET_VENC>,
                 <&reset RESET_VCBUS>,
                 <&reset RESET_VDI6>,
                 <&reset RESET_VENCL>,
                 <&reset RESET_VID_LOCK>;
+       reset-names = "viu", "venc", "vcbus", "bt656",
+                     "dvin", "rdma", "venci", "vencp",
+                     "vdac", "vdi6", "vencl", "vid_lock";
        clocks = <&clkc CLKID_VPU>,
                 <&clkc CLKID_VAPB>;
        clock-names = "vpu", "vapb";
 
 &vpu {
        compatible = "amlogic,meson-gxl-vpu", "amlogic,meson-gx-vpu";
-       power-domains = <&pwrc_vpu>;
+       power-domains = <&pwrc PWRC_GXBB_VPU_ID>;
 };
 
 &vdec {
index 1ef1e36..27408c1 100644 (file)
        hdmi-phandle = <&hdmi_tx>;
 };
 
+&cpu_thermal {
+       trips {
+               cpu_active: cpu-active {
+                       temperature = <80000>; /* millicelsius */
+                       hysteresis = <2000>; /* millicelsius */
+                       type = "active";
+               };
+       };
+
+       cooling-maps {
+               map {
+                       trip = <&cpu_active>;
+                       cooling-device = <&khadas_mcu THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+               };
+       };
+};
+
 &ext_mdio {
        external_phy: ethernet-phy@0 {
                /* Realtek RTL8211F (0x001cc916) */
        pinctrl-0 = <&i2c_ao_sck_pins>, <&i2c_ao_sda_pins>;
        pinctrl-names = "default";
 
+       khadas_mcu: system-controller@18 {
+               compatible = "khadas,mcu";
+               reg = <0x18>;
+               #cooling-cells = <2>;
+       };
+
        gpio_expander: gpio-controller@20 {
                compatible = "ti,tca6408";
                reg = <0x20>;
index 6721966..74ac4ac 100644 (file)
@@ -24,7 +24,7 @@
        interrupt-parent = <&gic>;
 
        arm_a53_pmu {
-               compatible = "arm,cortex-a53-pmu", "arm,armv8-pmuv3";
+               compatible = "arm,cortex-a53-pmu";
                interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
@@ -33,7 +33,7 @@
        };
 
        arm_a57_pmu {
-               compatible = "arm,cortex-a57-pmu", "arm,armv8-pmuv3";
+               compatible = "arm,cortex-a57-pmu";
                interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
                cpu_on = <0xC4000003>;
        };
 
-       soc: soc {
+       soc: soc@0 {
                compatible = "simple-bus";
                #address-cells = <1>;
                #size-cells = <1>;
                        status = "disabled";
                };
 
-               amba {
-                       compatible = "simple-bus";
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       ranges;
-
-                       pdma0: pdma@15610000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x15610000 0x1000>;
-                               interrupts = <GIC_SPI 228 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&cmu_fsys CLK_PDMA0>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
-
-                       pdma1: pdma@15600000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x15600000 0x1000>;
-                               interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&cmu_fsys CLK_PDMA1>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
+               pdma0: pdma@15610000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x15610000 0x1000>;
+                       interrupts = <GIC_SPI 228 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cmu_fsys CLK_PDMA0>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
+               };
+
+               pdma1: pdma@15600000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x15600000 0x1000>;
+                       interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cmu_fsys CLK_PDMA1>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
                };
 
                audio-subsystem@11400000 {
index 7af288f..92fecc5 100644 (file)
                                regulator-min-microvolt = <700000>;
                                regulator-max-microvolt = <1150000>;
                                regulator-enable-ramp-delay = <125>;
+                               regulator-always-on;
                        };
 
                        ldo8_reg: LDO8 {
                                regulator-min-microvolt = <1000000>;
                                regulator-max-microvolt = <1300000>;
                                regulator-enable-ramp-delay = <125>;
+                               regulator-always-on;
                        };
 
                        ldo13_reg: LDO13 {
        };
 };
 
+&ufs {
+       status = "okay";
+};
+
 &usbdrd_phy {
        vbus-supply = <&usb30_vbus_reg>;
        vbus-boost-supply = <&usb3drd_boost_5v>;
index 5558045..b9ed6a3 100644 (file)
@@ -29,7 +29,7 @@
        };
 
        arm-pmu {
-               compatible = "arm,cortex-a57-pmu", "arm,armv8-pmuv3";
+               compatible = "arm,cortex-a57-pmu";
                interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
@@ -83,7 +83,7 @@
                method = "smc";
        };
 
-       soc: soc {
+       soc: soc@0 {
                compatible = "simple-bus";
                #address-cells = <1>;
                #size-cells = <1>;
                                <0x11006000 0x2000>;
                };
 
-               amba {
-                       compatible = "simple-bus";
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       ranges;
-
-                       pdma0: pdma@10e10000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x10E10000 0x1000>;
-                               interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock_fsys0 ACLK_PDMA0>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
+               pdma0: pdma@10e10000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x10E10000 0x1000>;
+                       interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock_fsys0 ACLK_PDMA0>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
+               };
 
-                       pdma1: pdma@10eb0000 {
-                               compatible = "arm,pl330", "arm,primecell";
-                               reg = <0x10EB0000 0x1000>;
-                               interrupts = <GIC_SPI 226 IRQ_TYPE_LEVEL_HIGH>;
-                               clocks = <&clock_fsys0 ACLK_PDMA1>;
-                               clock-names = "apb_pclk";
-                               #dma-cells = <1>;
-                               #dma-channels = <8>;
-                               #dma-requests = <32>;
-                       };
+               pdma1: pdma@10eb0000 {
+                       compatible = "arm,pl330", "arm,primecell";
+                       reg = <0x10EB0000 0x1000>;
+                       interrupts = <GIC_SPI 226 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock_fsys0 ACLK_PDMA1>;
+                       clock-names = "apb_pclk";
+                       #dma-cells = <1>;
+                       #dma-channels = <8>;
+                       #dma-requests = <32>;
                };
 
                clock_topc: clock-controller@10570000 {
                        #clock-cells = <1>;
                        clocks = <&fin_pll>, <&clock_top1 DOUT_ACLK_FSYS1_200>,
                                 <&clock_top1 DOUT_SCLK_MMC0>,
-                                <&clock_top1 DOUT_SCLK_MMC1>;
+                                <&clock_top1 DOUT_SCLK_MMC1>,
+                                <&clock_top1 DOUT_SCLK_UFSUNIPRO20>,
+                                <&clock_top1 DOUT_SCLK_PHY_FSYS1>,
+                                <&clock_top1 DOUT_SCLK_PHY_FSYS1_26M>;
                        clock-names = "fin_pll", "dout_aclk_fsys1_200",
-                                     "dout_sclk_mmc0", "dout_sclk_mmc1";
+                                     "dout_sclk_mmc0", "dout_sclk_mmc1",
+                                     "dout_sclk_ufsunipro20", "dout_sclk_phy_fsys1",
+                                     "dout_sclk_phy_fsys1_26m";
                };
 
                serial_0: serial@13630000 {
                pwm: pwm@136c0000 {
                        compatible = "samsung,exynos4210-pwm";
                        reg = <0x136c0000 0x100>;
+                       interrupts = <GIC_SPI 449 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 450 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 451 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 452 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 453 IRQ_TYPE_LEVEL_HIGH>;
                        samsung,pwm-outputs = <0>, <1>, <2>, <3>;
                        #pwm-cells = <3>;
                        clocks = <&clock_peric0 PCLK_PWM>;
                        #thermal-sensor-cells = <0>;
                };
 
-               thermal-zones {
-                       atlas_thermal: cluster0-thermal {
-                               polling-delay-passive = <0>; /* milliseconds */
-                               polling-delay = <0>; /* milliseconds */
-                               thermal-sensors = <&tmuctrl_0>;
-                               #include "exynos7-trip-points.dtsi"
-                       };
+               ufs: ufs@15570000 {
+                       compatible = "samsung,exynos7-ufs";
+                       reg = <0x15570000 0x100>,  /* 0: HCI standard */
+                               <0x15570100 0x100>,  /* 1: Vendor specificed */
+                               <0x15571000 0x200>,  /* 2: UNIPRO */
+                               <0x15572000 0x300>;  /* 3: UFS protector */
+                       reg-names = "hci", "vs_hci", "unipro", "ufsp";
+                       interrupts = <GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clock_fsys1 ACLK_UFS20_LINK>,
+                               <&clock_fsys1 SCLK_UFSUNIPRO20_USER>;
+                       clock-names = "core_clk", "sclk_unipro_main";
+                       freq-table-hz = <0 0>, <0 0>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&ufs_rst_n &ufs_refclk_out>;
+                       phys = <&ufs_phy>;
+                       phy-names = "ufs-phy";
+                       status = "disabled";
+               };
+
+               ufs_phy: ufs-phy@15571800 {
+                       compatible = "samsung,exynos7-ufs-phy";
+                       reg = <0x15571800 0x240>;
+                       reg-names = "phy-pma";
+                       samsung,pmu-syscon = <&pmu_system_controller>;
+                       #phy-cells = <0>;
+                       clocks = <&clock_fsys1 SCLK_COMBO_PHY_EMBEDDED_26M>,
+                                <&clock_fsys1 PHYCLK_UFS20_RX1_SYMBOL_USER>,
+                                <&clock_fsys1 PHYCLK_UFS20_RX0_SYMBOL_USER>,
+                                <&clock_fsys1 PHYCLK_UFS20_TX0_SYMBOL_USER>;
+                       clock-names = "ref_clk", "rx1_symbol_clk",
+                                     "rx0_symbol_clk",
+                                     "tx0_symbol_clk";
                };
 
                usbdrd_phy: phy@15500000 {
                };
        };
 
+       thermal-zones {
+               atlas_thermal: cluster0-thermal {
+                       polling-delay-passive = <0>; /* milliseconds */
+                       polling-delay = <0>; /* milliseconds */
+                       thermal-sensors = <&tmuctrl_0>;
+                       #include "exynos7-trip-points.dtsi"
+               };
+       };
+
        timer {
                compatible = "arm,armv8-timer";
                interrupts = <GIC_PPI 13
index 006e544..ff19ec4 100644 (file)
@@ -17,6 +17,7 @@
 
        aliases {
                crypto = &crypto;
+               rtc1 = &ftm_alarm0;
                rtic-a = &rtic_a;
                rtic-b = &rtic_b;
                rtic-c = &rtic_c;
                                        <0000 0 0 4 &gic 0 113 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };
+
+               rcpm: power-controller@1ee2140 {
+                       compatible = "fsl,ls1012a-rcpm", "fsl,qoriq-rcpm-2.1+";
+                       reg = <0x0 0x1ee2140 0x0 0x4>;
+                       #fsl,rcpm-wakeup-cells = <1>;
+               };
+
+               ftm_alarm0: timer@29d0000 {
+                       compatible = "fsl,ls1012a-ftm-alarm";
+                       reg = <0x0 0x29d0000 0x0 0x10000>;
+                       fsl,rcpm-wakeup = <&rcpm 0x20000>;
+                       interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+                       big-endian;
+               };
        };
 
        firmware {
index dd69c5b..e4f00c2 100644 (file)
        };
 };
 
+&dspi0 {
+       bus-num = <0>;
+       status = "okay";
+
+       flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               spi-cpol;
+               spi-cpha;
+               reg = <0>;
+               spi-max-frequency = <10000000>;
+       };
+
+       flash@1 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               spi-cpol;
+               spi-cpha;
+               reg = <1>;
+               spi-max-frequency = <10000000>;
+       };
+
+       flash@2 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               spi-cpol;
+               spi-cpha;
+               reg = <2>;
+               spi-max-frequency = <10000000>;
+       };
+};
+
+&dspi1 {
+       bus-num = <1>;
+       status = "okay";
+
+       flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               spi-cpol;
+               spi-cpha;
+               reg = <0>;
+               spi-max-frequency = <10000000>;
+       };
+
+       flash@1 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               spi-cpol;
+               spi-cpha;
+               reg = <1>;
+               spi-max-frequency = <10000000>;
+       };
+
+       flash@2 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               spi-cpol;
+               spi-cpha;
+               reg = <2>;
+               spi-max-frequency = <10000000>;
+       };
+};
+
+&dspi2 {
+       bus-num = <2>;
+       status = "okay";
+
+       flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               spi-cpol;
+               spi-cpha;
+               reg = <0>;
+               spi-max-frequency = <10000000>;
+       };
+};
+
 &duart0 {
        status = "okay";
 };
index 055f114..0efeb8f 100644 (file)
        #address-cells = <2>;
        #size-cells = <2>;
 
+       aliases {
+               rtc1 = &ftm_alarm0;
+       };
+
        cpus {
                #address-cells = <1>;
                #size-cells = <0>;
        };
 
        thermal-zones {
-               core-cluster {
+               ddr-controller {
                        polling-delay-passive = <1000>;
                        polling-delay = <5000>;
                        thermal-sensors = <&tmu 0>;
 
+                       trips {
+                               ddr-ctrler-alert {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               ddr-ctrler-crit {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               core-cluster {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <5000>;
+                       thermal-sensors = <&tmu 1>;
+
                        trips {
                                core_cluster_alert: core-cluster-alert {
                                        temperature = <85000>;
                                };
                        };
                };
+
+               rcpm: power-controller@1e34040 {
+                       compatible = "fsl,ls1028a-rcpm", "fsl,qoriq-rcpm-2.1+";
+                       reg = <0x0 0x1e34040 0x0 0x1c>;
+                       #fsl,rcpm-wakeup-cells = <7>;
+               };
+
+               ftm_alarm0: timer@2800000 {
+                       compatible = "fsl,ls1028a-ftm-alarm";
+                       reg = <0x0 0x2800000 0x0 0x10000>;
+                       fsl,rcpm-wakeup = <&rcpm 0x0 0x0 0x0 0x0 0x4000 0x0 0x0>;
+                       interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
+               };
        };
 
        malidp0: display@f080000 {
index 1aac81d..fea167d 100644 (file)
        };
 };
 
+&usb0 {
+       status = "okay";
+};
+
 #include "fsl-ls1043-post.dtsi"
index bfa9d95..3516af4 100644 (file)
                fsl,tdm-interface;
        };
 };
+
+&usb0 {
+       status = "okay";
+};
+
+&usb1 {
+       status = "okay";
+};
index 3b641bd..5c2e370 100644 (file)
@@ -27,6 +27,7 @@
                ethernet4 = &enet4;
                ethernet5 = &enet5;
                ethernet6 = &enet6;
+               rtc1 = &ftm_alarm0;
        };
 
        cpus {
        };
 
        thermal-zones {
-               cpu_thermal: cpu-thermal {
+               ddr-controller {
                        polling-delay-passive = <1000>;
                        polling-delay = <5000>;
+                       thermal-sensors = <&tmu 0>;
 
+                       trips {
+                               ddr-ctrler-alert {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               ddr-ctrler-crit {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               serdes {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <5000>;
+                       thermal-sensors = <&tmu 1>;
+
+                       trips {
+                               serdes-alert {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               serdes-crit {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               fman {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <5000>;
+                       thermal-sensors = <&tmu 2>;
+
+                       trips {
+                               fman-alert {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               fman-crit {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               core-cluster {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <5000>;
                        thermal-sensors = <&tmu 3>;
 
                        trips {
-                               cpu_alert: cpu-alert {
+                               core_cluster_alert: core-cluster-alert {
                                        temperature = <85000>;
                                        hysteresis = <2000>;
                                        type = "passive";
                                };
-                               cpu_crit: cpu-crit {
+
+                               core_cluster_crit: core-cluster-crit {
                                        temperature = <95000>;
                                        hysteresis = <2000>;
                                        type = "critical";
 
                        cooling-maps {
                                map0 {
-                                       trip = <&cpu_alert>;
+                                       trip = <&core_cluster_alert>;
                                        cooling-device =
                                                <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
                                                <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
                                };
                        };
                };
+
+               sec {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <5000>;
+                       thermal-sensors = <&tmu 4>;
+
+                       trips {
+                               sec-alert {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               sec-crit {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
        };
 
        timer {
                        snps,quirk-frame-length-adjustment = <0x20>;
                        snps,dis_rxdet_inp3_quirk;
                        snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+                       status = "disabled";
                };
 
                usb1: usb3@3000000 {
                        snps,quirk-frame-length-adjustment = <0x20>;
                        snps,dis_rxdet_inp3_quirk;
                        snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+                       status = "disabled";
                };
 
                usb2: usb3@3100000 {
                        snps,quirk-frame-length-adjustment = <0x20>;
                        snps,dis_rxdet_inp3_quirk;
                        snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+                       status = "disabled";
                };
 
                sata: sata@3200000 {
                        big-endian;
                };
 
+               rcpm: power-controller@1ee2140 {
+                       compatible = "fsl,ls1043a-rcpm", "fsl,qoriq-rcpm-2.1+";
+                       reg = <0x0 0x1ee2140 0x0 0x4>;
+                       #fsl,rcpm-wakeup-cells = <1>;
+               };
+
+               ftm_alarm0: timer@29d0000 {
+                       compatible = "fsl,ls1043a-ftm-alarm";
+                       reg = <0x0 0x29d0000 0x0 0x10000>;
+                       fsl,rcpm-wakeup = <&rcpm 0x20000>;
+                       interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+                       big-endian;
+               };
        };
 
        firmware {
index d4c1da3..0246d97 100644 (file)
@@ -28,6 +28,7 @@
                ethernet5 = &enet5;
                ethernet6 = &enet6;
                ethernet7 = &enet7;
+               rtc1 = &ftm_alarm0;
        };
 
        cpus {
        };
 
        thermal-zones {
-               cpu_thermal: cpu-thermal {
+               ddr-controller {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <5000>;
+                       thermal-sensors = <&tmu 0>;
+
+                       trips {
+                               ddr-ctrler-alert {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               ddr-ctrler-crit {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               serdes {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <5000>;
+                       thermal-sensors = <&tmu 1>;
+
+                       trips {
+                               serdes-alert {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               serdes-crit {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               fman {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <5000>;
+                       thermal-sensors = <&tmu 2>;
+
+                       trips {
+                               fman-alert {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               fman-crit {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               core-cluster {
                        polling-delay-passive = <1000>;
                        polling-delay = <5000>;
                        thermal-sensors = <&tmu 3>;
 
                        trips {
-                               cpu_alert: cpu-alert {
+                               core_cluster_alert: core-cluster-alert {
                                        temperature = <85000>;
                                        hysteresis = <2000>;
                                        type = "passive";
                                };
 
-                               cpu_crit: cpu-crit {
+                               core_cluster_crit: core-cluster-crit {
                                        temperature = <95000>;
                                        hysteresis = <2000>;
                                        type = "critical";
 
                        cooling-maps {
                                map0 {
-                                       trip = <&cpu_alert>;
+                                       trip = <&core_cluster_alert>;
                                        cooling-device =
                                                <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
                                                <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
                                };
                        };
                };
+
+               sec {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <5000>;
+                       thermal-sensors = <&tmu 4>;
+
+                       trips {
+                               sec-alert {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               sec-crit {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
        };
 
        timer {
                        queue-sizes = <64 64>;
                        big-endian;
                };
+
+               rcpm: power-controller@1ee2140 {
+                       compatible = "fsl,ls1046a-rcpm", "fsl,qoriq-rcpm-2.1+";
+                       reg = <0x0 0x1ee2140 0x0 0x4>;
+                       #fsl,rcpm-wakeup-cells = <1>;
+               };
+
+               ftm_alarm0: timer@29d0000 {
+                       compatible = "fsl,ls1046a-ftm-alarm";
+                       reg = <0x0 0x29d0000 0x0 0x10000>;
+                       fsl,rcpm-wakeup = <&rcpm 0x20000>;
+                       interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+                       big-endian;
+               };
        };
 
        reserved-memory {
index 36a7995..169f474 100644 (file)
@@ -18,6 +18,7 @@
 
        aliases {
                crypto = &crypto;
+               rtc1 = &ftm_alarm0;
        };
 
        cpus {
                                };
                        };
                };
+
+               rcpm: power-controller@1e34040 {
+                       compatible = "fsl,ls1088a-rcpm", "fsl,qoriq-rcpm-2.1+";
+                       reg = <0x0 0x1e34040 0x0 0x18>;
+                       #fsl,rcpm-wakeup-cells = <6>;
+               };
+
+               ftm_alarm0: timer@2800000 {
+                       compatible = "fsl,ls1088a-ftm-alarm";
+                       reg = <0x0 0x2800000 0x0 0x10000>;
+                       fsl,rcpm-wakeup = <&rcpm 0x0 0x0 0x0 0x0 0x4000 0x0>;
+                       interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
+               };
        };
 
        firmware {
index 3944ef1..41102da 100644 (file)
@@ -20,6 +20,7 @@
 
        aliases {
                crypto = &crypto;
+               rtc1 = &ftm_alarm0;
                serial0 = &serial0;
                serial1 = &serial1;
                serial2 = &serial2;
                        reg = <0x0 0x04000000 0x0 0x01000000>;
                        interrupts = <0 12 4>;
                };
+
+               rcpm: power-controller@1e34040 {
+                       compatible = "fsl,ls208xa-rcpm", "fsl,qoriq-rcpm-2.1+";
+                       reg = <0x0 0x1e34040 0x0 0x18>;
+                       #fsl,rcpm-wakeup-cells = <6>;
+               };
+
+               ftm_alarm0: timer@2800000 {
+                       compatible = "fsl,ls208xa-ftm-alarm";
+                       reg = <0x0 0x2800000 0x0 0x10000>;
+                       fsl,rcpm-wakeup = <&rcpm 0x0 0x0 0x0 0x0 0x4000 0x0>;
+                       interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
+               };
        };
 
        ddr1: memory-controller@1080000 {
index 3b88e1e..2d1fe6c 100644 (file)
        status = "okay";
 };
 
+&dspi0 {
+       status = "okay";
+
+       dflash0: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <1000000>;
+       };
+};
+
+&dspi1 {
+       status = "okay";
+
+       dflash1: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <1000000>;
+       };
+};
+
+&dspi2 {
+       status = "okay";
+
+       dflash2: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <1000000>;
+       };
+};
+
 &esdhc0 {
        status = "okay";
 };
index 22d0308..54fe8cd 100644 (file)
                        power-monitor@40 {
                                compatible = "ti,ina220";
                                reg = <0x40>;
-                               shunt-resistor = <1000>;
+                               shunt-resistor = <500>;
                        };
                };
 
index abaeb58..d247e42 100644 (file)
@@ -2,7 +2,7 @@
 //
 // Device Tree Include file for Layerscape-LX2160A family SoC.
 //
-// Copyright 2018 NXP
+// Copyright 2018-2020 NXP
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
        #address-cells = <2>;
        #size-cells = <2>;
 
+       aliases {
+               rtc1 = &ftm_alarm0;
+       };
+
        cpus {
                #address-cells = <1>;
                #size-cells = <0>;
                        status = "disabled";
                };
 
+               dspi0: spi@2100000 {
+                       compatible = "fsl,lx2160a-dspi", "fsl,ls2085a-dspi";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0 0x2100000 0x0 0x10000>;
+                       interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clockgen 4 7>;
+                       clock-names = "dspi";
+                       spi-num-chipselects = <5>;
+                       bus-num = <0>;
+                       status = "disabled";
+               };
+
+               dspi1: spi@2110000 {
+                       compatible = "fsl,lx2160a-dspi", "fsl,ls2085a-dspi";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0 0x2110000 0x0 0x10000>;
+                       interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clockgen 4 7>;
+                       clock-names = "dspi";
+                       spi-num-chipselects = <5>;
+                       bus-num = <1>;
+                       status = "disabled";
+               };
+
+               dspi2: spi@2120000 {
+                       compatible = "fsl,lx2160a-dspi", "fsl,ls2085a-dspi";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0 0x2120000 0x0 0x10000>;
+                       interrupts = <GIC_SPI 241 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&clockgen 4 7>;
+                       clock-names = "dspi";
+                       spi-num-chipselects = <5>;
+                       bus-num = <2>;
+                       status = "disabled";
+               };
+
                esdhc0: esdhc@2140000 {
                        compatible = "fsl,esdhc";
                        reg = <0x0 0x2140000 0x0 0x10000>;
                        timeout-sec = <30>;
                };
 
+               rcpm: power-controller@1e34040 {
+                       compatible = "fsl,lx2160a-rcpm", "fsl,qoriq-rcpm-2.1+";
+                       reg = <0x0 0x1e34040 0x0 0x1c>;
+                       #fsl,rcpm-wakeup-cells = <7>;
+                       little-endian;
+               };
+
+               ftm_alarm0: timer@2800000 {
+                       compatible = "fsl,lx2160a-ftm-alarm";
+                       reg = <0x0 0x2800000 0x0 0x10000>;
+                       fsl,rcpm-wakeup = <&rcpm 0x0 0x0 0x0 0x0 0x4000 0x0 0x0>;
+                       interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
                usb0: usb@3100000 {
                        compatible = "snps,dwc3";
                        reg = <0x0 0x3100000 0x0 0x10000>;
                pcie@3400000 {
                        compatible = "fsl,lx2160a-pcie";
                        reg = <0x00 0x03400000 0x0 0x00100000   /* controller registers */
-                              0x80 0x00000000 0x0 0x00001000>; /* configuration space */
+                              0x80 0x00000000 0x0 0x00002000>; /* configuration space */
                        reg-names = "csr_axi_slave", "config_axi_slave";
                        interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>, /* AER interrupt */
                                     <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>, /* PME interrupt */
                pcie@3500000 {
                        compatible = "fsl,lx2160a-pcie";
                        reg = <0x00 0x03500000 0x0 0x00100000   /* controller registers */
-                              0x88 0x00000000 0x0 0x00001000>; /* configuration space */
+                              0x88 0x00000000 0x0 0x00002000>; /* configuration space */
                        reg-names = "csr_axi_slave", "config_axi_slave";
                        interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>, /* AER interrupt */
                                     <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>, /* PME interrupt */
                pcie@3600000 {
                        compatible = "fsl,lx2160a-pcie";
                        reg = <0x00 0x03600000 0x0 0x00100000   /* controller registers */
-                              0x90 0x00000000 0x0 0x00001000>; /* configuration space */
+                              0x90 0x00000000 0x0 0x00002000>; /* configuration space */
                        reg-names = "csr_axi_slave", "config_axi_slave";
                        interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>, /* AER interrupt */
                                     <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>, /* PME interrupt */
                pcie@3700000 {
                        compatible = "fsl,lx2160a-pcie";
                        reg = <0x00 0x03700000 0x0 0x00100000   /* controller registers */
-                              0x98 0x00000000 0x0 0x00001000>; /* configuration space */
+                              0x98 0x00000000 0x0 0x00002000>; /* configuration space */
                        reg-names = "csr_axi_slave", "config_axi_slave";
                        interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>, /* AER interrupt */
                                     <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>, /* PME interrupt */
                pcie@3800000 {
                        compatible = "fsl,lx2160a-pcie";
                        reg = <0x00 0x03800000 0x0 0x00100000   /* controller registers */
-                              0xa0 0x00000000 0x0 0x00001000>; /* configuration space */
+                              0xa0 0x00000000 0x0 0x00002000>; /* configuration space */
                        reg-names = "csr_axi_slave", "config_axi_slave";
                        interrupts = <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>, /* AER interrupt */
                                     <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>, /* PME interrupt */
                pcie@3900000 {
                        compatible = "fsl,lx2160a-pcie";
                        reg = <0x00 0x03900000 0x0 0x00100000   /* controller registers */
-                              0xa8 0x00000000 0x0 0x00001000>; /* configuration space */
+                              0xa8 0x00000000 0x0 0x00002000>; /* configuration space */
                        reg-names = "csr_axi_slave", "config_axi_slave";
                        interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>, /* AER interrupt */
                                     <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>, /* PME interrupt */
index aaf6e71..76f040e 100644 (file)
 
        aliases {
                ethernet0 = &fec1;
+               gpio0 = &gpio1;
+               gpio1 = &gpio2;
+               gpio2 = &gpio3;
+               gpio3 = &gpio4;
+               gpio4 = &gpio5;
                i2c0 = &i2c1;
                i2c1 = &i2c2;
                i2c2 = &i2c3;
                i2c3 = &i2c4;
+               mmc0 = &usdhc1;
+               mmc1 = &usdhc2;
+               mmc2 = &usdhc3;
                serial0 = &uart1;
                serial1 = &uart2;
                serial2 = &uart3;
                spi0 = &ecspi1;
                spi1 = &ecspi2;
                spi2 = &ecspi3;
-               mmc0 = &usdhc1;
-               mmc1 = &usdhc2;
-               mmc2 = &usdhc3;
-               gpio0 = &gpio1;
-               gpio1 = &gpio2;
-               gpio2 = &gpio3;
-               gpio3 = &gpio4;
-               gpio4 = &gpio5;
        };
 
        cpus {
                                reg = <0x30340000 0x10000>;
                        };
 
-                       ocotp: ocotp-ctrl@30350000 {
+                       ocotp: efuse@30350000 {
                                compatible = "fsl,imx8mm-ocotp", "syscon";
                                reg = <0x30350000 0x10000>;
                                clocks = <&clk IMX8MM_CLK_OCOTP_ROOT>;
                                status = "disabled";
                        };
 
+                       mu: mailbox@30aa0000 {
+                               compatible = "fsl,imx8mm-mu", "fsl,imx6sx-mu";
+                               reg = <0x30aa0000 0x10000>;
+                               interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk IMX8MM_CLK_MU_ROOT>;
+                               #mbox-cells = <2>;
+                       };
+
                        usdhc1: mmc@30b40000 {
                                compatible = "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc";
                                reg = <0x30b40000 0x10000>;
index 61f3519..b846526 100644 (file)
        compatible = "fsl,imx8mn-evk", "fsl,imx8mn";
 };
 
+&i2c1 {
+       pmic: pmic@25 {
+               compatible = "nxp,pca9450b";
+               reg = <0x25>;
+               pinctrl-0 = <&pinctrl_pmic>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <3 GPIO_ACTIVE_LOW>;
+
+               regulators {
+                       buck1: BUCK1{
+                               regulator-name = "BUCK1";
+                               regulator-min-microvolt = <600000>;
+                               regulator-max-microvolt = <2187500>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                               regulator-ramp-delay = <3125>;
+                       };
+
+                       buck2: BUCK2 {
+                               regulator-name = "BUCK2";
+                               regulator-min-microvolt = <600000>;
+                               regulator-max-microvolt = <2187500>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                               regulator-ramp-delay = <3125>;
+                               nxp,dvs-run-voltage = <950000>;
+                               nxp,dvs-standby-voltage = <850000>;
+                       };
+
+                       buck4: BUCK4{
+                               regulator-name = "BUCK4";
+                               regulator-min-microvolt = <600000>;
+                               regulator-max-microvolt = <3400000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       buck5: BUCK5{
+                               regulator-name = "BUCK5";
+                               regulator-min-microvolt = <600000>;
+                               regulator-max-microvolt = <3400000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       buck6: BUCK6 {
+                               regulator-name = "BUCK6";
+                               regulator-min-microvolt = <600000>;
+                               regulator-max-microvolt = <3400000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       ldo1: LDO1 {
+                               regulator-name = "LDO1";
+                               regulator-min-microvolt = <1600000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       ldo2: LDO2 {
+                               regulator-name = "LDO2";
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <1150000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       ldo3: LDO3 {
+                               regulator-name = "LDO3";
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       ldo4: LDO4 {
+                               regulator-name = "LDO4";
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       ldo5: LDO5 {
+                               regulator-name = "LDO5";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+               };
+       };
+};
+
 &A53_0 {
        /delete-property/operating-points-v2;
 };
index 85fc0aa..98f5324 100644 (file)
                >;
        };
 
+       pinctrl_pmic: pmicirq {
+               fsl,pins = <
+                       MX8MN_IOMUXC_GPIO1_IO03_GPIO1_IO3       0x41
+               >;
+       };
+
        pinctrl_reg_usdhc2_vmmc: regusdhc2vmmc {
                fsl,pins = <
                        MX8MN_IOMUXC_SD2_RESET_B_GPIO2_IO19     0x41
index 9a4b65a..9385dd7 100644 (file)
                                reg = <0x30340000 0x10000>;
                        };
 
-                       ocotp: ocotp-ctrl@30350000 {
+                       ocotp: efuse@30350000 {
                                compatible = "fsl,imx8mn-ocotp", "fsl,imx8mm-ocotp", "syscon";
                                reg = <0x30350000 0x10000>;
                                clocks = <&clk IMX8MN_CLK_OCOTP_ROOT>;
                                status = "disabled";
                        };
 
+                       mu: mailbox@30aa0000 {
+                               compatible = "fsl,imx8mn-mu", "fsl,imx6sx-mu";
+                               reg = <0x30aa0000 0x10000>;
+                               interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk IMX8MN_CLK_MU_ROOT>;
+                               #mbox-cells = <2>;
+                       };
+
                        usdhc1: mmc@30b40000 {
                                compatible = "fsl,imx8mn-usdhc", "fsl,imx7d-usdhc";
                                reg = <0x30b40000 0x10000>;
index 45e2c0a..9de2aa1 100644 (file)
                gpio2 = &gpio3;
                gpio3 = &gpio4;
                gpio4 = &gpio5;
+               i2c0 = &i2c1;
+               i2c1 = &i2c2;
+               i2c2 = &i2c3;
+               i2c3 = &i2c4;
+               i2c4 = &i2c5;
+               i2c5 = &i2c6;
                mmc0 = &usdhc1;
                mmc1 = &usdhc2;
                mmc2 = &usdhc3;
                                reg = <0x30340000 0x10000>;
                        };
 
-                       ocotp: ocotp-ctrl@30350000 {
-                               compatible = "fsl,imx8mp-ocotp", "syscon";
+                       ocotp: efuse@30350000 {
+                               compatible = "fsl,imx8mp-ocotp", "fsl,imx8mm-ocotp", "syscon";
                                reg = <0x30350000 0x10000>;
                                clocks = <&clk IMX8MP_CLK_OCOTP_ROOT>;
                                /* For nvmem subnodes */
                                status = "disabled";
                        };
 
+                       mu: mailbox@30aa0000 {
+                               compatible = "fsl,imx8mp-mu", "fsl,imx6sx-mu";
+                               reg = <0x30aa0000 0x10000>;
+                               interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk IMX8MP_CLK_MU_ROOT>;
+                               #mbox-cells = <2>;
+                       };
+
                        i2c5: i2c@30ad0000 {
                                compatible = "fsl,imx8mp-i2c", "fsl,imx21-i2c";
                                #address-cells = <1>;
                        interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-parent = <&gic>;
                };
+
+               ddr-pmu@3d800000 {
+                       compatible = "fsl,imx8mp-ddr-pmu", "fsl,imx8m-ddr-pmu";
+                       reg = <0x3d800000 0x400000>;
+                       interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
+               };
        };
 };
index 6a55165..0d1088d 100644 (file)
        mdio {
                #address-cells = <1>;
                #size-cells = <0>;
+               clock-frequency = <12500000>;
+               suppress-preamble;
                status = "okay";
 
                switch: switch@0 {
index 978f812..f70435c 100644 (file)
@@ -20,6 +20,7 @@
        #size-cells = <2>;
 
        aliases {
+               ethernet0 = &fec1;
                gpio0 = &gpio1;
                gpio1 = &gpio2;
                gpio2 = &gpio3;
@@ -29,6 +30,8 @@
                i2c1 = &i2c2;
                i2c2 = &i2c3;
                i2c3 = &i2c4;
+               mmc0 = &usdhc1;
+               mmc1 = &usdhc2;
                serial0 = &uart1;
                serial1 = &uart2;
                serial2 = &uart3;
                                };
                        };
 
-                       ocotp: ocotp-ctrl@30350000 {
+                       ocotp: efuse@30350000 {
                                compatible = "fsl,imx8mq-ocotp", "syscon";
                                reg = <0x30350000 0x10000>;
                                clocks = <&clk IMX8MQ_CLK_OCOTP_ROOT>;
                                        pgc_vpu: power-domain@6 {
                                                #power-domain-cells = <0>;
                                                reg = <IMX8M_POWER_DOMAIN_VPU>;
+                                               clocks = <&clk IMX8MQ_CLK_VPU_DEC_ROOT>;
                                        };
 
                                        pgc_disp: power-domain@7 {
                                status = "disabled";
                        };
 
+                       mu: mailbox@30aa0000 {
+                               compatible = "fsl,imx8mq-mu", "fsl,imx6sx-mu";
+                               reg = <0x30aa0000 0x10000>;
+                               interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clk IMX8MQ_CLK_MU_ROOT>;
+                               #mbox-cells = <2>;
+                       };
+
                        usdhc1: mmc@30b40000 {
                                compatible = "fsl,imx8mq-usdhc",
                                             "fsl,imx7d-usdhc";
                        status = "disabled";
                };
 
+               vpu: video-codec@38300000 {
+                       compatible = "nxp,imx8mq-vpu";
+                       reg = <0x38300000 0x10000>,
+                             <0x38310000 0x10000>,
+                             <0x38320000 0x10000>;
+                       reg-names = "g1", "g2", "ctrl";
+                       interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "g1", "g2";
+                       clocks = <&clk IMX8MQ_CLK_VPU_G1_ROOT>,
+                                <&clk IMX8MQ_CLK_VPU_G2_ROOT>,
+                                <&clk IMX8MQ_CLK_VPU_DEC_ROOT>;
+                       clock-names = "g1", "g2", "bus";
+                       assigned-clocks = <&clk IMX8MQ_CLK_VPU_G1>,
+                                         <&clk IMX8MQ_CLK_VPU_G2>,
+                                         <&clk IMX8MQ_CLK_VPU_BUS>,
+                                         <&clk IMX8MQ_VPU_PLL_BYPASS>;
+                       assigned-clock-parents = <&clk IMX8MQ_VPU_PLL_OUT>,
+                                                <&clk IMX8MQ_VPU_PLL_OUT>,
+                                                <&clk IMX8MQ_SYS1_PLL_800M>,
+                                                <&clk IMX8MQ_VPU_PLL>;
+                       assigned-clock-rates = <600000000>, <600000000>,
+                                              <800000000>, <0>;
+                       power-domains = <&pgc_vpu>;
+               };
+
                pcie0: pcie@33800000 {
                        compatible = "fsl,imx8mq-pcie";
                        reg = <0x33800000 0x400000>,
index d1c3c98..e46faac 100644 (file)
@@ -19,6 +19,8 @@
        #size-cells = <2>;
 
        aliases {
+               ethernet0 = &fec1;
+               ethernet1 = &fec2;
                gpio0 = &lsio_gpio0;
                gpio1 = &lsio_gpio1;
                gpio2 = &lsio_gpio2;
                gpio5 = &lsio_gpio5;
                gpio6 = &lsio_gpio6;
                gpio7 = &lsio_gpio7;
+               i2c0 = &adma_i2c0;
+               i2c1 = &adma_i2c1;
+               i2c2 = &adma_i2c2;
+               i2c3 = &adma_i2c3;
                mmc0 = &usdhc1;
                mmc1 = &usdhc2;
                mmc2 = &usdhc3;
+               mu0 = &lsio_mu0;
                mu1 = &lsio_mu1;
+               mu2 = &lsio_mu2;
+               mu3 = &lsio_mu3;
+               mu4 = &lsio_mu4;
                serial0 = &adma_lpuart0;
                serial1 = &adma_lpuart1;
                serial2 = &adma_lpuart2;
index e035cf1..c1b614d 100644 (file)
@@ -13,6 +13,7 @@
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
 #include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/usb/pd.h>
 
 / {
        model = "HiKey960";
 &i2c1 {
        status = "okay";
 
+       rt1711h: rt1711h@4e {
+               compatible = "richtek,rt1711h";
+               reg = <0x4e>;
+               status = "ok";
+               interrupt-parent = <&gpio27>;
+               interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&usb_cfg_func>;
+
+               usb_con: connector {
+                       compatible = "usb-c-connector";
+                       label = "USB-C";
+                       data-role = "dual";
+                       power-role = "dual";
+                       try-power-role = "sink";
+                       source-pdos = <PDO_FIXED(5000, 500, PDO_FIXED_USB_COMM)>;
+                       sink-pdos = <PDO_FIXED(5000, 500, PDO_FIXED_USB_COMM)
+                               PDO_VAR(5000, 5000, 1000)>;
+                       op-sink-microwatt = <10000000>;
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               port@1 {
+                                       reg = <1>;
+                                       usb_con_ss: endpoint {
+                                               remote-endpoint = <&dwc3_ss>;
+                                       };
+                               };
+                       };
+               };
+               port {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       rt1711h_ep: endpoint@0 {
+                               reg = <0>;
+                               remote-endpoint = <&dwc3_role_switch>;
+                       };
+               };
+       };
+
        adv7533: adv7533@39 {
                status = "ok";
                compatible = "adi,adv7533";
                reg = <0x39>;
+               adi,dsi-lanes = <4>;
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       port@0 {
+                               reg = <0>;
+                       };
+                       port@1 {
+                               reg = <1>;
+                       };
+               };
        };
 };
 
                interrupts = <3 IRQ_TYPE_EDGE_RISING>;
        };
 };
+
+&dwc3 { /* USB */
+       dr_mode = "otg";
+       maximum-speed = "super-speed";
+       phy_type = "utmi";
+       snps,dis-del-phy-power-chg-quirk;
+       snps,lfps_filter_quirk;
+       snps,dis_u2_susphy_quirk;
+       snps,dis_u3_susphy_quirk;
+       snps,tx_de_emphasis_quirk;
+       snps,tx_de_emphasis = <1>;
+       snps,dis_enblslpm_quirk;
+       snps,gctl-reset-quirk;
+       usb-role-switch;
+       role-switch-default-mode = "host";
+       port {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               dwc3_role_switch: endpoint@0 {
+                       reg = <0>;
+                       remote-endpoint = <&rt1711h_ep>;
+               };
+
+               dwc3_ss: endpoint@1 {
+                       reg = <1>;
+                       remote-endpoint = <&usb_con_ss>;
+               };
+       };
+};
index c39b789..d25aac5 100644 (file)
                                };
                        };
                };
+
+               usb3_otg_bc: usb3_otg_bc@ff200000 {
+                       compatible = "syscon", "simple-mfd";
+                       reg = <0x0 0xff200000 0x0 0x1000>;
+
+                       usb_phy: usb-phy {
+                               compatible = "hisilicon,hi3660-usb-phy";
+                               #phy-cells = <0>;
+                               hisilicon,pericrg-syscon = <&crg_ctrl>;
+                               hisilicon,pctrl-syscon = <&pctrl>;
+                               hisilicon,eye-diagram-param = <0x22466e4>;
+                       };
+               };
+
+               dwc3: dwc3@ff100000 {
+                       compatible = "snps,dwc3";
+                       reg = <0x0 0xff100000 0x0 0x100000>;
+
+                       clocks = <&crg_ctrl HI3660_CLK_ABB_USB>,
+                                <&crg_ctrl HI3660_ACLK_GATE_USB3OTG>;
+                       clock-names = "ref", "bus_early";
+
+                       assigned-clocks = <&crg_ctrl HI3660_ACLK_GATE_USB3OTG>;
+                       assigned-clock-rates = <229000000>;
+
+                       resets = <&crg_rst 0x90 8>,
+                                <&crg_rst 0x90 7>,
+                                <&crg_rst 0x90 6>,
+                                <&crg_rst 0x90 5>;
+
+                       interrupts = <0 159 4>, <0 161 4>;
+                       phys = <&usb_phy>;
+                       phy-names = "usb3-phy";
+               };
        };
 };
 
index c14205c..533ed52 100644 (file)
                power-off-delay-us = <10>;
        };
 
-       soc {
-               spi0: spi@f7106000 {
-                       status = "ok";
-               };
-
-               i2c0: i2c@f7100000 {
-                       status = "ok";
-               };
-
-               i2c1: i2c@f7101000 {
-                       status = "ok";
-               };
-
-               uart1: uart@f7111000 {
-                       assigned-clocks = <&sys_ctrl HI6220_UART1_SRC>;
-                       assigned-clock-rates = <150000000>;
-                       status = "ok";
-
-                       bluetooth {
-                               compatible = "ti,wl1835-st";
-                               enable-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
-                               clocks = <&pmic>;
-                               clock-names = "ext_clock";
-                       };
-               };
-
-               uart2: uart@f7112000 {
-                       status = "ok";
-               };
-
-               uart3: uart@f7113000 {
-                       status = "ok";
-               };
-
-               /*
-                * Legend: proper name = the GPIO line is used as GPIO
-                *         NC = not connected (not routed from the SoC)
-                *         "[PER]" = pin is muxed for peripheral (not GPIO)
-                *         "" = no idea, schematic doesn't say, could be
-                *              unrouted (not connected to any external pin)
-                *         LSEC = Low Speed External Connector
-                *         HSEC = High Speed External Connector
-                *
-                * Pin assignments taken from LeMaker and CircuitCo Schematics
-                * Rev A1.
-                *
-                * For the lines routed to the external connectors the
-                * lines are named after the 96Boards CE Specification 1.0,
-                * Appendix "Expansion Connector Signal Description".
-                *
-                * When the 96Board naming of a line and the schematic name of
-                * the same line are in conflict, the 96Board specification
-                * takes precedence, which means that the external UART on the
-                * LSEC is named UART0 while the schematic and SoC names this
-                * UART2. This is only for the informational lines i.e. "[FOO]",
-                * the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
-                * ones actually used for GPIO.
-                */
-               gpio0: gpio@f8011000 {
-                       gpio-line-names = "PWR_HOLD", "DSI_SEL",
-                       "USB_HUB_RESET_N", "USB_SEL", "HDMI_PD", "WL_REG_ON",
-                       "PWRON_DET", "5V_HUB_EN";
-               };
-
-               gpio1: gpio@f8012000 {
-                       gpio-line-names = "SD_DET", "HDMI_INT", "PMU_IRQ_N",
-                       "WL_HOST_WAKE", "NC", "NC", "NC", "BT_REG_ON";
-               };
-
-               gpio2: gpio@f8013000 {
-                       gpio-line-names =
-                               "GPIO-A", /* LSEC Pin 23: GPIO2_0 */
-                               "GPIO-B", /* LSEC Pin 24: GPIO2_1 */
-                               "GPIO-C", /* LSEC Pin 25: GPIO2_2 */
-                               "GPIO-D", /* LSEC Pin 26: GPIO2_3 */
-                               "GPIO-E", /* LSEC Pin 27: GPIO2_4 */
-                               "USB_ID_DET", "USB_VBUS_DET",
-                               "GPIO-H"; /* LSEC Pin 30: GPIO2_7 */
-               };
-
-               gpio3: gpio@f8014000 {
-                       gpio-line-names = "GPIO3_0", "NC", "NC", "", "NC", "",
-                       "WLAN_ACTIVE", "NC", "NC";
-               };
-
-               gpio4: gpio@f7020000 {
-                       gpio-line-names = "USER_LED1", "USER_LED2", "USER_LED3",
-                       "USER_LED4", "SD_SEL", "NC", "NC", "BT_ACTIVE";
-               };
-
-               gpio5: gpio@f7021000 {
-                       gpio-line-names = "NC", "NC",
-                       "[UART1_RxD]", /* LSEC Pin 11: UART3_RX */
-                       "[UART1_TxD]", /* LSEC Pin 13: UART3_TX */
-                       "[AUX_SSI1]", "NC",
-                       "[PCM_CLK]", /* LSEC Pin 18: MODEM_PCM_XCLK */
-                       "[PCM_FS]"; /* LSEC Pin 16: MODEM_PCM_XFS */
-               };
-
-               gpio6: gpio@f7022000 {
-                       gpio-line-names =
-                       "[SPI0_DIN]", /* Pin 10: SPI0_DI */
-                       "[SPI0_DOUT]", /* Pin 14: SPI0_DO */
-                       "[SPI0_CS]", /* Pin 12: SPI0_CS_N */
-                       "[SPI0_SCLK]", /* Pin 8: SPI0_SCLK */
-                       "NC", "NC", "NC",
-                       "GPIO-G"; /* Pin 29: GPIO6_7_DSI_TE0 */
-               };
-
-               gpio7: gpio@f7023000 {
-                       gpio-line-names = "NC", "NC", "NC", "NC",
-                       "[PCM_DI]", /* Pin 22: MODEM_PCM_DI */
-                       "[PCM_DO]", /* Pin 20: MODEM_PCM_DO */
-                       "NC", "NC";
-               };
-
-               gpio8: gpio@f7024000 {
-                       gpio-line-names = "NC", "[CEC_CLK_19_2MHZ]", "NC",
-                       "", "", "", "", "", "";
-               };
-
-               gpio9: gpio@f7025000 {
-                       gpio-line-names = "",
-                       "GPIO-J", /* LSEC Pin 32: ISP_PWDN0_GPIO9_1 */
-                       "GPIO-L", /* LSEC Pin 34: ISP_PWDN1_GPIO9_2 */
-                       "NC", "NC", "NC", "NC", "[ISP_CCLK0]";
-               };
-
-               gpio10: gpio@f7026000 {
-                       gpio-line-names = "BOOT_SEL",
-                       "[ISP_CCLK1]",
-                       "GPIO-I", /* LSEC Pin 31: ISP_RSTB0_GPIO10_2 */
-                       "GPIO-K", /* LSEC Pin 33: ISP_RSTB1_GPIO10_3 */
-                       "NC", "NC",
-                       "[I2C2_SDA]", /* HSEC Pin 34: ISP0_SDA */
-                       "[I2C2_SCL]"; /* HSEC Pin 32: ISP0_SCL */
-               };
-
-               gpio11: gpio@f7027000 {
-                       gpio-line-names =
-                       "[I2C3_SDA]", /* HSEC Pin 38: ISP1_SDA */
-                       "[I2C3_SCL]", /* HSEC Pin 36: ISP1_SCL */
-                       "", "NC", "NC", "NC", "", "";
-               };
-
-               gpio12: gpio@f7028000 {
-                       gpio-line-names = "[BT_PCM_XFS]", "[BT_PCM_DI]",
-                       "[BT_PCM_DO]",
-                       "NC", "NC", "NC", "NC",
-                       "GPIO-F"; /* LSEC Pin 28: BL_PWM_GPIO12_7 */
-               };
-
-               gpio13: gpio@f7029000 {
-                       gpio-line-names = "[UART0_RX]", "[UART0_TX]",
-                       "[BT_UART1_CTS]", "[BT_UART1_RTS]",
-                       "[BT_UART1_RX]", "[BT_UART1_TX]",
-                       "[UART0_CTS]", /* LSEC Pin 3: UART2_CTS_N */
-                       "[UART0_RTS]"; /* LSEC Pin 9: UART2_RTS_N */
-               };
-
-               gpio14: gpio@f702a000 {
-                       gpio-line-names =
-                       "[UART0_RxD]", /* LSEC Pin 7: UART2_RX */
-                       "[UART0_TxD]", /* LSEC Pin 5: UART2_TX */
-                       "[I2C0_SCL]", /* LSEC Pin 15: I2C0_SCL */
-                       "[I2C0_SDA]", /* LSEC Pin 17: I2C0_SDA */
-                       "[I2C1_SCL]", /* LSEC Pin 19: I2C1_SCL */
-                       "[I2C1_SDA]", /* LSEC Pin 21: I2C1_SDA */
-                       "[I2C2_SCL]", "[I2C2_SDA]";
-               };
-
-               gpio15: gpio@f702b000 {
-                       gpio-line-names = "", "", "", "", "", "", "NC", "";
-               };
-
-               /* GPIO blocks 16 thru 19 do not appear to be routed to pins */
-
-               dwmmc_0: dwmmc0@f723d000 {
-                       cap-mmc-highspeed;
-                       non-removable;
-                       bus-width = <0x8>;
-                       vmmc-supply = <&ldo19>;
-               };
-
-               dwmmc_1: dwmmc1@f723e000 {
-                       card-detect-delay = <200>;
-                       cap-sd-highspeed;
-                       sd-uhs-sdr12;
-                       sd-uhs-sdr25;
-                       sd-uhs-sdr50;
-                       vqmmc-supply = <&ldo7>;
-                       vmmc-supply = <&ldo10>;
-                       bus-width = <0x4>;
-                       disable-wp;
-                       cd-gpios = <&gpio1 0 1>;
-               };
-
-               dwmmc_2: dwmmc2@f723f000 {
-                       bus-width = <0x4>;
-                       non-removable;
-                       cap-power-off-card;
-                       vmmc-supply = <&reg_vdd_3v3>;
-                       mmc-pwrseq = <&wl1835_pwrseq>;
-
-                       #address-cells = <0x1>;
-                       #size-cells = <0x0>;
-                       wlcore: wlcore@2 {
-                               compatible = "ti,wl1835";
-                               reg = <2>;      /* sdio func num */
-                               /* WL_IRQ, WL_HOST_WAKE_GPIO1_3 */
-                               interrupt-parent = <&gpio1>;
-                               interrupts = <3 IRQ_TYPE_EDGE_RISING>;
-                       };
-               };
-       };
-
        leds {
                compatible = "gpio-leds";
 
        };
 };
 
+&uart1 {
+       assigned-clocks = <&sys_ctrl HI6220_UART1_SRC>;
+       assigned-clock-rates = <150000000>;
+       status = "ok";
+
+       bluetooth {
+               compatible = "ti,wl1835-st";
+               enable-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
+               clocks = <&pmic>;
+               clock-names = "ext_clock";
+       };
+};
+
 &uart2 {
+       status = "ok";
        label = "LS-UART0";
 };
+
 &uart3 {
+       status = "ok";
        label = "LS-UART1";
 };
 
        };
 };
 
+&dwmmc_0 {
+       cap-mmc-highspeed;
+       non-removable;
+       bus-width = <0x8>;
+       vmmc-supply = <&ldo19>;
+};
+
+&dwmmc_1 {
+       card-detect-delay = <200>;
+       cap-sd-highspeed;
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr50;
+       vqmmc-supply = <&ldo7>;
+       vmmc-supply = <&ldo10>;
+       bus-width = <0x4>;
+       disable-wp;
+       cd-gpios = <&gpio1 0 1>;
+};
+
+&dwmmc_2 {
+       bus-width = <0x4>;
+       non-removable;
+       cap-power-off-card;
+       vmmc-supply = <&reg_vdd_3v3>;
+       mmc-pwrseq = <&wl1835_pwrseq>;
+
+       #address-cells = <0x1>;
+       #size-cells = <0x0>;
+       wlcore: wlcore@2 {
+               compatible = "ti,wl1835";
+               reg = <2>;      /* sdio func num */
+               /* WL_IRQ, WL_HOST_WAKE_GPIO1_3 */
+               interrupt-parent = <&gpio1>;
+               interrupts = <3 IRQ_TYPE_EDGE_RISING>;
+       };
+};
+
+/*
+ * Legend: proper name = the GPIO line is used as GPIO
+ *         NC = not connected (not routed from the SoC)
+ *         "[PER]" = pin is muxed for peripheral (not GPIO)
+ *         "" = no idea, schematic doesn't say, could be
+ *              unrouted (not connected to any external pin)
+ *         LSEC = Low Speed External Connector
+ *         HSEC = High Speed External Connector
+ *
+ * Pin assignments taken from LeMaker and CircuitCo Schematics
+ * Rev A1.
+ *
+ * For the lines routed to the external connectors the
+ * lines are named after the 96Boards CE Specification 1.0,
+ * Appendix "Expansion Connector Signal Description".
+ *
+ * When the 96Board naming of a line and the schematic name of
+ * the same line are in conflict, the 96Board specification
+ * takes precedence, which means that the external UART on the
+ * LSEC is named UART0 while the schematic and SoC names this
+ * UART2. This is only for the informational lines i.e. "[FOO]",
+ * the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
+ * ones actually used for GPIO.
+ */
+&gpio0 {
+       gpio-line-names = "PWR_HOLD", "DSI_SEL",
+       "USB_HUB_RESET_N", "USB_SEL", "HDMI_PD", "WL_REG_ON",
+       "PWRON_DET", "5V_HUB_EN";
+};
+
+&gpio1 {
+       gpio-line-names = "SD_DET", "HDMI_INT", "PMU_IRQ_N",
+       "WL_HOST_WAKE", "NC", "NC", "NC", "BT_REG_ON";
+};
+
+&gpio2 {
+       gpio-line-names =
+               "GPIO-A", /* LSEC Pin 23: GPIO2_0 */
+               "GPIO-B", /* LSEC Pin 24: GPIO2_1 */
+               "GPIO-C", /* LSEC Pin 25: GPIO2_2 */
+               "GPIO-D", /* LSEC Pin 26: GPIO2_3 */
+               "GPIO-E", /* LSEC Pin 27: GPIO2_4 */
+               "USB_ID_DET", "USB_VBUS_DET",
+               "GPIO-H"; /* LSEC Pin 30: GPIO2_7 */
+};
+
+&gpio3 {
+       gpio-line-names = "GPIO3_0", "NC", "NC", "", "NC", "",
+       "WLAN_ACTIVE", "NC", "NC";
+};
+
+&gpio4 {
+       gpio-line-names = "USER_LED1", "USER_LED2", "USER_LED3",
+       "USER_LED4", "SD_SEL", "NC", "NC", "BT_ACTIVE";
+};
+
+&gpio5 {
+       gpio-line-names = "NC", "NC",
+       "[UART1_RxD]", /* LSEC Pin 11: UART3_RX */
+       "[UART1_TxD]", /* LSEC Pin 13: UART3_TX */
+       "[AUX_SSI1]", "NC",
+       "[PCM_CLK]", /* LSEC Pin 18: MODEM_PCM_XCLK */
+       "[PCM_FS]"; /* LSEC Pin 16: MODEM_PCM_XFS */
+};
+
+&gpio6 {
+       gpio-line-names =
+       "[SPI0_DIN]", /* Pin 10: SPI0_DI */
+       "[SPI0_DOUT]", /* Pin 14: SPI0_DO */
+       "[SPI0_CS]", /* Pin 12: SPI0_CS_N */
+       "[SPI0_SCLK]", /* Pin 8: SPI0_SCLK */
+       "NC", "NC", "NC",
+       "GPIO-G"; /* Pin 29: GPIO6_7_DSI_TE0 */
+};
+
+&gpio7 {
+       gpio-line-names = "NC", "NC", "NC", "NC",
+       "[PCM_DI]", /* Pin 22: MODEM_PCM_DI */
+       "[PCM_DO]", /* Pin 20: MODEM_PCM_DO */
+       "NC", "NC";
+};
+
+&gpio8 {
+       gpio-line-names = "NC", "[CEC_CLK_19_2MHZ]", "NC",
+       "", "", "", "", "", "";
+};
+
+&gpio9 {
+       gpio-line-names = "",
+       "GPIO-J", /* LSEC Pin 32: ISP_PWDN0_GPIO9_1 */
+       "GPIO-L", /* LSEC Pin 34: ISP_PWDN1_GPIO9_2 */
+       "NC", "NC", "NC", "NC", "[ISP_CCLK0]";
+};
+
+&gpio10 {
+       gpio-line-names = "BOOT_SEL",
+       "[ISP_CCLK1]",
+       "GPIO-I", /* LSEC Pin 31: ISP_RSTB0_GPIO10_2 */
+       "GPIO-K", /* LSEC Pin 33: ISP_RSTB1_GPIO10_3 */
+       "NC", "NC",
+       "[I2C2_SDA]", /* HSEC Pin 34: ISP0_SDA */
+       "[I2C2_SCL]"; /* HSEC Pin 32: ISP0_SCL */
+};
+
+&gpio11 {
+       gpio-line-names =
+       "[I2C3_SDA]", /* HSEC Pin 38: ISP1_SDA */
+       "[I2C3_SCL]", /* HSEC Pin 36: ISP1_SCL */
+       "", "NC", "NC", "NC", "", "";
+};
+
+&gpio12 {
+       gpio-line-names = "[BT_PCM_XFS]", "[BT_PCM_DI]",
+       "[BT_PCM_DO]",
+       "NC", "NC", "NC", "NC",
+       "GPIO-F"; /* LSEC Pin 28: BL_PWM_GPIO12_7 */
+};
+
+&gpio13 {
+       gpio-line-names = "[UART0_RX]", "[UART0_TX]",
+       "[BT_UART1_CTS]", "[BT_UART1_RTS]",
+       "[BT_UART1_RX]", "[BT_UART1_TX]",
+       "[UART0_CTS]", /* LSEC Pin 3: UART2_CTS_N */
+       "[UART0_RTS]"; /* LSEC Pin 9: UART2_RTS_N */
+};
+
+&gpio14 {
+       gpio-line-names =
+       "[UART0_RxD]", /* LSEC Pin 7: UART2_RX */
+       "[UART0_TxD]", /* LSEC Pin 5: UART2_TX */
+       "[I2C0_SCL]", /* LSEC Pin 15: I2C0_SCL */
+       "[I2C0_SDA]", /* LSEC Pin 17: I2C0_SDA */
+       "[I2C1_SCL]", /* LSEC Pin 19: I2C1_SCL */
+       "[I2C1_SDA]", /* LSEC Pin 21: I2C1_SDA */
+       "[I2C2_SCL]", "[I2C2_SDA]";
+};
+
+&gpio15 {
+       gpio-line-names = "", "", "", "", "", "", "NC", "";
+};
+
+/* GPIO blocks 16 thru 19 do not appear to be routed to pins */
+
+
+&i2c0 {
+       status = "ok";
+};
+
+&i2c1 {
+       status = "ok";
+};
+
 &i2c2 {
        #address-cells = <1>;
        #size-cells = <0>;
                reg = <0x39>;
                interrupt-parent = <&gpio1>;
                interrupts = <1 2>;
-               pd-gpio = <&gpio0 4 0>;
+               pd-gpios = <&gpio0 4 0>;
                adi,dsi-lanes = <4>;
                #sound-dai-cells = <0>;
 
                };
        };
 };
+
+&spi0 {
+       status = "ok";
+};
index 2072b63..3d189d9 100644 (file)
                        mboxes = <&mailbox 1 0 11>;
                };
 
-               uart0: uart@f8015000 {  /* console */
+               uart0: serial@f8015000 {        /* console */
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x0 0xf8015000 0x0 0x1000>;
                        interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
                        clock-names = "uartclk", "apb_pclk";
                };
 
-               uart1: uart@f7111000 {
+               uart1: serial@f7111000 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x0 0xf7111000 0x0 0x1000>;
                        interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };
 
-               uart2: uart@f7112000 {
+               uart2: serial@f7112000 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x0 0xf7112000 0x0 0x1000>;
                        interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };
 
-               uart3: uart@f7113000 {
+               uart3: serial@f7113000 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x0 0xf7113000 0x0 0x1000>;
                        interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };
 
-               uart4: uart@f7114000 {
+               uart4: serial@f7114000 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x0 0xf7114000 0x0 0x1000>;
                        interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
index f52de8f..9d7f19e 100644 (file)
@@ -6,6 +6,7 @@
 /dts-v1/;
 #include <dt-bindings/reset/altr,rst-mgr-s10.h>
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/clock/agilex-clock.h>
 
 / {
        compatible = "intel,socfpga-agilex";
                        fpga-mgr = <&fpga_mgr>;
                };
 
+               clkmgr: clock-controller@ffd10000 {
+                       compatible = "intel,agilex-clkmgr";
+                       reg = <0xffd10000 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               clocks {
+                       cb_intosc_hs_div2_clk: cb-intosc-hs-div2-clk {
+                               #clock-cells = <0>;
+                               compatible = "fixed-clock";
+                       };
+
+                       cb_intosc_ls_clk: cb-intosc-ls-clk {
+                               #clock-cells = <0>;
+                               compatible = "fixed-clock";
+                       };
+
+                       f2s_free_clk: f2s-free-clk {
+                               #clock-cells = <0>;
+                               compatible = "fixed-clock";
+                       };
+
+                       osc1: osc1 {
+                               #clock-cells = <0>;
+                               compatible = "fixed-clock";
+                       };
+
+                       qspi_clk: qspi-clk {
+                               #clock-cells = <0>;
+                               compatible = "fixed-clock";
+                               clock-frequency = <200000000>;
+                       };
+               };
+
                gmac0: ethernet@ff800000 {
                        compatible = "altr,socfpga-stmmac-a10-s10", "snps,dwmac-3.74a", "snps,dwmac";
                        reg = <0xff800000 0x2000>;
                        snps,multicast-filter-bins = <256>;
                        iommus = <&smmu 1>;
                        altr,sysmgr-syscon = <&sysmgr 0x44 0>;
+                       clocks = <&clkmgr AGILEX_EMAC0_CLK>;
+                       clock-names = "stmmaceth";
                        status = "disabled";
                };
 
                        snps,multicast-filter-bins = <256>;
                        iommus = <&smmu 2>;
                        altr,sysmgr-syscon = <&sysmgr 0x48 8>;
+                       clocks = <&clkmgr AGILEX_EMAC1_CLK>;
+                       clock-names = "stmmaceth";
                        status = "disabled";
                };
 
                        snps,multicast-filter-bins = <256>;
                        iommus = <&smmu 3>;
                        altr,sysmgr-syscon = <&sysmgr 0x4c 16>;
+                       clocks = <&clkmgr AGILEX_EMAC2_CLK>;
+                       clock-names = "stmmaceth";
                        status = "disabled";
                };
 
                        reg = <0xffc02800 0x100>;
                        interrupts = <0 103 4>;
                        resets = <&rst I2C0_RESET>;
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
                        status = "disabled";
                };
 
                        reg = <0xffc02900 0x100>;
                        interrupts = <0 104 4>;
                        resets = <&rst I2C1_RESET>;
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
                        status = "disabled";
                };
 
                        reg = <0xffc02a00 0x100>;
                        interrupts = <0 105 4>;
                        resets = <&rst I2C2_RESET>;
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
                        status = "disabled";
                };
 
                        reg = <0xffc02b00 0x100>;
                        interrupts = <0 106 4>;
                        resets = <&rst I2C3_RESET>;
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
                        status = "disabled";
                };
 
                        reg = <0xffc02c00 0x100>;
                        interrupts = <0 107 4>;
                        resets = <&rst I2C4_RESET>;
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
                        status = "disabled";
                };
 
                        fifo-depth = <0x400>;
                        resets = <&rst SDMMC_RESET>;
                        reset-names = "reset";
+                       clocks = <&clkmgr AGILEX_L4_MP_CLK>,
+                                <&clkmgr AGILEX_SDMMC_CLK>;
+                       clock-names = "biu", "ciu";
                        iommus = <&smmu 5>;
                        status = "disabled";
                };
                              <0xffb80000 0x1000>;
                        reg-names = "nand_data", "denali_reg";
                        interrupts = <0 97 4>;
+                       clocks = <&clkmgr AGILEX_NAND_CLK>,
+                                <&clkmgr AGILEX_NAND_X_CLK>,
+                                <&clkmgr AGILEX_NAND_ECC_CLK>;
+                       clock-names = "nand", "nand_x", "ecc";
                        resets = <&rst NAND_RESET>, <&rst NAND_OCP_RESET>;
                        status = "disabled";
                };
                        #dma-requests = <32>;
                        resets = <&rst DMA_RESET>, <&rst DMA_OCP_RESET>;
                        reset-names = "dma", "dma-ocp";
+                       clocks = <&clkmgr AGILEX_L4_MAIN_CLK>;
+                       clock-names = "apb_pclk";
                };
 
                rst: rstmgr@ffd11000 {
                                <0 162 4>, <0 163 4>, <0 164 4>, <0 165 4>,
                                <0 166 4>, <0 167 4>, <0 168 4>, <0 169 4>;
                        stream-match-mask = <0x7ff0>;
+                       clocks = <&clkmgr AGILEX_MPU_CCU_CLK>,
+                                <&clkmgr AGILEX_L3_MAIN_FREE_CLK>,
+                                <&clkmgr AGILEX_L4_MAIN_CLK>;
                        status = "disabled";
                };
 
                        reg = <0xffda4000 0x1000>;
                        interrupts = <0 99 4>;
                        resets = <&rst SPIM0_RESET>;
+                       reset-names = "spi";
                        reg-io-width = <4>;
                        num-cs = <4>;
+                       clocks = <&clkmgr AGILEX_L4_MAIN_CLK>;
                        status = "disabled";
                };
 
                        reg = <0xffda5000 0x1000>;
                        interrupts = <0 100 4>;
                        resets = <&rst SPIM1_RESET>;
+                       reset-names = "spi";
                        reg-io-width = <4>;
                        num-cs = <4>;
+                       clocks = <&clkmgr AGILEX_L4_MAIN_CLK>;
                        status = "disabled";
                };
 
                        compatible = "snps,dw-apb-timer";
                        interrupts = <0 113 4>;
                        reg = <0xffc03000 0x100>;
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
+                       clock-names = "timer";
                };
 
                timer1: timer1@ffc03100 {
                        compatible = "snps,dw-apb-timer";
                        interrupts = <0 114 4>;
                        reg = <0xffc03100 0x100>;
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
+                       clock-names = "timer";
                };
 
                timer2: timer2@ffd00000 {
                        compatible = "snps,dw-apb-timer";
                        interrupts = <0 115 4>;
                        reg = <0xffd00000 0x100>;
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
+                       clock-names = "timer";
                };
 
                timer3: timer3@ffd00100 {
                        compatible = "snps,dw-apb-timer";
                        interrupts = <0 116 4>;
                        reg = <0xffd00100 0x100>;
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
+                       clock-names = "timer";
                };
 
                uart0: serial0@ffc02000 {
                        reg-io-width = <4>;
                        resets = <&rst UART0_RESET>;
                        status = "disabled";
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
                };
 
                uart1: serial1@ffc02100 {
                        reg-shift = <2>;
                        reg-io-width = <4>;
                        resets = <&rst UART1_RESET>;
+                       clocks = <&clkmgr AGILEX_L4_SP_CLK>;
                        status = "disabled";
                };
 
                        phy-names = "usb2-phy";
                        resets = <&rst USB0_RESET>, <&rst USB0_OCP_RESET>;
                        reset-names = "dwc2", "dwc2-ecc";
+                       clocks = <&clkmgr AGILEX_USB_CLK>;
                        iommus = <&smmu 6>;
                        status = "disabled";
                };
                        resets = <&rst USB1_RESET>, <&rst USB1_OCP_RESET>;
                        reset-names = "dwc2", "dwc2-ecc";
                        iommus = <&smmu 7>;
+                       clocks = <&clkmgr AGILEX_USB_CLK>;
                        status = "disabled";
                };
 
                        reg = <0xffd00200 0x100>;
                        interrupts = <0 117 4>;
                        resets = <&rst WATCHDOG0_RESET>;
+                       clocks = <&clkmgr AGILEX_L4_SYS_FREE_CLK>;
                        status = "disabled";
                };
 
                        reg = <0xffd00300 0x100>;
                        interrupts = <0 118 4>;
                        resets = <&rst WATCHDOG1_RESET>;
+                       clocks = <&clkmgr AGILEX_L4_SYS_FREE_CLK>;
                        status = "disabled";
                };
 
                        reg = <0xffd00400 0x100>;
                        interrupts = <0 125 4>;
                        resets = <&rst WATCHDOG2_RESET>;
+                       clocks = <&clkmgr AGILEX_L4_SYS_FREE_CLK>;
                        status = "disabled";
                };
 
                        reg = <0xffd00500 0x100>;
                        interrupts = <0 126 4>;
                        resets = <&rst WATCHDOG3_RESET>;
+                       clocks = <&clkmgr AGILEX_L4_SYS_FREE_CLK>;
                        status = "disabled";
                };
 
                        cdns,fifo-depth = <128>;
                        cdns,fifo-width = <4>;
                        cdns,trigger-address = <0x00000000>;
+                       clocks = <&qspi_clk>;
 
                        status = "disabled";
                };
index 51d9483..ac6e51b 100644 (file)
                /* We expect the bootloader to fill in the reg */
                reg = <0 0 0 0>;
        };
+
+       soc {
+               clocks {
+                       osc1 {
+                               clock-frequency = <25000000>;
+                       };
+               };
+       };
 };
 
 &gpio1 {
index a57af9d..3ee682c 100644 (file)
@@ -11,4 +11,5 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt8173-elm-hana.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8173-elm-hana-rev7.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8173-evb.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8183-evb.dtb
+dtb-$(CONFIG_ARCH_MEDIATEK) += mt8183-kukui-krane-sku176.dtb
 dtb-$(CONFIG_ARCH_MEDIATEK) += mt8516-pumpkin.dtb
index 9361ada..fa159b2 100644 (file)
@@ -16,6 +16,8 @@
                };
 
                mt6358regulator: mt6358regulator {
+                       compatible = "mediatek,mt6358-regulator";
+
                        mt6358_vdram1_reg: buck_vdram1 {
                                regulator-name = "vdram1";
                                regulator-min-microvolt = <500000>;
index 70b1ffc..5e046f9 100644 (file)
                                 <&apmixedsys CLK_APMIXED_MAINPLL>;
                        clock-names = "cpu", "intermediate";
                        operating-points-v2 = <&cluster0_opp>;
-                       capacity-dmips-mhz = <526>;
+                       capacity-dmips-mhz = <740>;
                };
 
                cpu1: cpu@1 {
                                 <&apmixedsys CLK_APMIXED_MAINPLL>;
                        clock-names = "cpu", "intermediate";
                        operating-points-v2 = <&cluster0_opp>;
-                       capacity-dmips-mhz = <526>;
+                       capacity-dmips-mhz = <740>;
                };
 
                cpu2: cpu@100 {
index afd6ddb..ae405bd 100644 (file)
                };
        };
 
-       mmc0_pins_uhs: mmc0@0{
+       mmc0_pins_uhs: mmc0 {
                pins_cmd_dat {
                        pinmux = <PINMUX_GPIO123__FUNC_MSDC0_DAT0>,
                                 <PINMUX_GPIO128__FUNC_MSDC0_DAT1>,
                };
        };
 
-       mmc1_pins_uhs: mmc1@0{
+       mmc1_pins_uhs: mmc1 {
                pins_cmd_dat {
                        pinmux = <PINMUX_GPIO31__FUNC_MSDC1_CMD>,
                                   <PINMUX_GPIO32__FUNC_MSDC1_DAT0>,
diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane-sku176.dts b/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane-sku176.dts
new file mode 100644 (file)
index 0000000..47113e2
--- /dev/null
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Device-tree for Krane sku176.
+ *
+ * SKU is a 8-bit value (0xb0 == 176):
+ *  - Bits 7..4: Panel ID: 0xb (BOE)
+ *  - Bits 3..0: SKU ID:   0x0 (default)
+ */
+
+/dts-v1/;
+#include "mt8183-kukui-krane.dtsi"
+
+/ {
+       model = "MediaTek krane sku176 board";
+       compatible = "google,krane-sku176", "google,krane", "mediatek,mt8183";
+};
diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi
new file mode 100644 (file)
index 0000000..fbc471c
--- /dev/null
@@ -0,0 +1,343 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#include "mt8183-kukui.dtsi"
+
+/ {
+       ppvarn_lcd: ppvarn-lcd {
+               compatible = "regulator-fixed";
+               regulator-name = "ppvarn_lcd";
+               pinctrl-names = "default";
+               pinctrl-0 = <&ppvarn_lcd_en>;
+
+               enable-active-high;
+
+               gpio = <&pio 66 GPIO_ACTIVE_HIGH>;
+       };
+
+       ppvarp_lcd: ppvarp-lcd {
+               compatible = "regulator-fixed";
+               regulator-name = "ppvarp_lcd";
+               pinctrl-names = "default";
+               pinctrl-0 = <&ppvarp_lcd_en>;
+
+               enable-active-high;
+
+               gpio = <&pio 166 GPIO_ACTIVE_HIGH>;
+       };
+
+       pp1800_lcd: pp1800-lcd {
+               compatible = "regulator-fixed";
+               regulator-name = "pp1800_lcd";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pp1800_lcd_en>;
+
+               enable-active-high;
+
+               gpio = <&pio 36 GPIO_ACTIVE_HIGH>;
+       };
+};
+
+&bluetooth {
+       firmware-name = "nvm_00440302_i2s_eu.bin";
+};
+
+&i2c0 {
+       status = "okay";
+
+       touchscreen4: touchscreen@5d {
+               compatible = "hid-over-i2c";
+               reg = <0x5d>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&open_touch>;
+
+               interrupt-parent = <&pio>;
+               interrupts = <155 IRQ_TYPE_EDGE_FALLING>;
+
+               post-power-on-delay-ms = <10>;
+               hid-descr-addr = <0x0001>;
+       };
+};
+
+&mt6358_vcama2_reg {
+       regulator-min-microvolt = <2800000>;
+       regulator-max-microvolt = <2800000>;
+};
+
+&i2c2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c2_pins>;
+       status = "okay";
+       clock-frequency = <400000>;
+
+       eeprom@58 {
+               compatible = "atmel,24c32";
+               reg = <0x58>;
+               pagesize = <32>;
+       };
+};
+
+&i2c4 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c4_pins>;
+       status = "okay";
+       clock-frequency = <400000>;
+
+       eeprom@54 {
+               compatible = "atmel,24c32";
+               reg = <0x54>;
+               pagesize = <32>;
+       };
+};
+
+&pio {
+       /* 192 lines */
+       gpio-line-names =
+               "SPI_AP_EC_CS_L",
+               "SPI_AP_EC_MOSI",
+               "SPI_AP_EC_CLK",
+               "I2S3_DO",
+               "USB_PD_INT_ODL",
+               "",
+               "",
+               "",
+               "",
+               "IT6505_HPD_L",
+               "I2S3_TDM_D3",
+               "SOC_I2C6_1V8_SCL",
+               "SOC_I2C6_1V8_SDA",
+               "DPI_D0",
+               "DPI_D1",
+               "DPI_D2",
+               "DPI_D3",
+               "DPI_D4",
+               "DPI_D5",
+               "DPI_D6",
+               "DPI_D7",
+               "DPI_D8",
+               "DPI_D9",
+               "DPI_D10",
+               "DPI_D11",
+               "DPI_HSYNC",
+               "DPI_VSYNC",
+               "DPI_DE",
+               "DPI_CK",
+               "AP_MSDC1_CLK",
+               "AP_MSDC1_DAT3",
+               "AP_MSDC1_CMD",
+               "AP_MSDC1_DAT0",
+               "AP_MSDC1_DAT2",
+               "AP_MSDC1_DAT1",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "OTG_EN",
+               "DRVBUS",
+               "DISP_PWM",
+               "DSI_TE",
+               "LCM_RST_1V8",
+               "AP_CTS_WIFI_RTS",
+               "AP_RTS_WIFI_CTS",
+               "SOC_I2C5_1V8_SCL",
+               "SOC_I2C5_1V8_SDA",
+               "SOC_I2C3_1V8_SCL",
+               "SOC_I2C3_1V8_SDA",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "SOC_I2C1_1V8_SDA",
+               "SOC_I2C0_1V8_SDA",
+               "SOC_I2C0_1V8_SCL",
+               "SOC_I2C1_1V8_SCL",
+               "AP_SPI_H1_MISO",
+               "AP_SPI_H1_CS_L",
+               "AP_SPI_H1_MOSI",
+               "AP_SPI_H1_CLK",
+               "I2S5_BCK",
+               "I2S5_LRCK",
+               "I2S5_DO",
+               "BOOTBLOCK_EN_L",
+               "MT8183_KPCOL0",
+               "SPI_AP_EC_MISO",
+               "UART_DBG_TX_AP_RX",
+               "UART_AP_TX_DBG_RX",
+               "I2S2_MCK",
+               "I2S2_BCK",
+               "CLK_5M_WCAM",
+               "CLK_2M_UCAM",
+               "I2S2_LRCK",
+               "I2S2_DI",
+               "SOC_I2C2_1V8_SCL",
+               "SOC_I2C2_1V8_SDA",
+               "SOC_I2C4_1V8_SCL",
+               "SOC_I2C4_1V8_SDA",
+               "",
+               "SCL8",
+               "SDA8",
+               "FCAM_PWDN_L",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "I2S_PMIC",
+               "I2S_PMIC",
+               "I2S_PMIC",
+               "I2S_PMIC",
+               "I2S_PMIC",
+               "I2S_PMIC",
+               "I2S_PMIC",
+               "I2S_PMIC",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               /*
+                * AP_FLASH_WP_L is crossystem ABI. Rev1 schematics
+                * call it BIOS_FLASH_WP_R_L.
+                */
+               "AP_FLASH_WP_L",
+               "EC_AP_INT_ODL",
+               "IT6505_INT_ODL",
+               "H1_INT_OD_L",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "AP_SPI_FLASH_MISO",
+               "AP_SPI_FLASH_CS_L",
+               "AP_SPI_FLASH_MOSI",
+               "AP_SPI_FLASH_CLK",
+               "DA7219_IRQ",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "",
+               "";
+
+       ppvarp_lcd_en: ppvarp-lcd-en {
+               pins1 {
+                       pinmux = <PINMUX_GPIO66__FUNC_GPIO66>;
+                       output-low;
+               };
+       };
+
+       ppvarn_lcd_en: ppvarn-lcd-en {
+               pins1 {
+                       pinmux = <PINMUX_GPIO166__FUNC_GPIO166>;
+                       output-low;
+               };
+       };
+
+       pp1800_lcd_en: pp1800-lcd-en {
+               pins1 {
+                       pinmux = <PINMUX_GPIO36__FUNC_GPIO36>;
+                       output-low;
+               };
+       };
+
+       open_touch: open_touch {
+               irq_pin {
+                       pinmux = <PINMUX_GPIO155__FUNC_GPIO155>;
+                       input-enable;
+                       bias-pull-up;
+               };
+
+               rst_pin {
+                       pinmux = <PINMUX_GPIO156__FUNC_GPIO156>;
+
+                       /*
+                        * The pen driver doesn't currently support  driving
+                        * this reset line.  By specifying output-high here
+                        * we're relying on the fact that this pin has a default
+                        * pulldown at boot (which makes sure the pen was in
+                        * reset if it was powered) and then we set it high here
+                        * to take it out of reset.  Better would be if the pen
+                        * driver could control this and we could remove
+                        * "output-high" here.
+                        */
+                       output-high;
+               };
+       };
+};
+
+&qca_wifi {
+       qcom,ath10k-calibration-variant = "LE_Krane";
+};
diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi
new file mode 100644 (file)
index 0000000..f0a0705
--- /dev/null
@@ -0,0 +1,788 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (c) 2018 MediaTek Inc.
+ * Author: Ben Ho <ben.ho@mediatek.com>
+ *        Erin Lo <erin.lo@mediatek.com>
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include "mt8183.dtsi"
+#include "mt6358.dtsi"
+
+/ {
+       aliases {
+               serial0 = &uart0;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory@40000000 {
+               device_type = "memory";
+               reg = <0 0x40000000 0 0x80000000>;
+       };
+
+       clk32k: oscillator1 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <32768>;
+               clock-output-names = "clk32k";
+       };
+
+       it6505_pp18_reg: regulator0 {
+               compatible = "regulator-fixed";
+               regulator-name = "it6505_pp18";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               gpio = <&pio 178 0>;
+               enable-active-high;
+       };
+
+       lcd_pp3300: regulator1 {
+               compatible = "regulator-fixed";
+               regulator-name = "lcd_pp3300";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       bl_pp5000: regulator2 {
+               compatible = "regulator-fixed";
+               regulator-name = "bl_pp5000";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       mmc1_fixed_power: regulator3 {
+               compatible = "regulator-fixed";
+               regulator-name = "mmc1_power";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       mmc1_fixed_io: regulator4 {
+               compatible = "regulator-fixed";
+               regulator-name = "mmc1_io";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
+       pp1800_alw: regulator5 {
+               compatible = "regulator-fixed";
+               regulator-name = "pp1800_alw";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
+       pp3300_alw: regulator6 {
+               compatible = "regulator-fixed";
+               regulator-name = "pp3300_alw";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       max98357a: codec0 {
+               compatible = "maxim,max98357a";
+               sdmode-gpios = <&pio 175 0>;
+       };
+
+       btsco: codec1 {
+               compatible = "linux,bt-sco";
+       };
+
+       wifi_pwrseq: wifi-pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               pinctrl-names = "default";
+               pinctrl-0 = <&wifi_pins_pwrseq>;
+
+               /* Toggle WIFI_ENABLE to reset the chip. */
+               reset-gpios = <&pio 119 1>;
+       };
+
+       wifi_wakeup: wifi-wakeup {
+               compatible = "gpio-keys";
+               pinctrl-names = "default";
+               pinctrl-0 = <&wifi_pins_wakeup>;
+
+               wowlan {
+                       label = "Wake on WiFi";
+                       gpios = <&pio 113 GPIO_ACTIVE_HIGH>;
+                       linux,code = <KEY_WAKEUP>;
+                       wakeup-source;
+               };
+       };
+
+       tboard_thermistor1: thermal-sensor1 {
+               compatible = "generic-adc-thermal";
+               #thermal-sensor-cells = <0>;
+               io-channels = <&auxadc 0>;
+               io-channel-names = "sensor-channel";
+               temperature-lookup-table = <    (-5000) 4241
+                                               0 4063
+                                               5000 3856
+                                               10000 3621
+                                               15000 3364
+                                               20000 3091
+                                               25000 2810
+                                               30000 2526
+                                               35000 2247
+                                               40000 1982
+                                               45000 1734
+                                               50000 1507
+                                               55000 1305
+                                               60000 1122
+                                               65000 964
+                                               70000 827
+                                               75000 710
+                                               80000 606
+                                               85000 519
+                                               90000 445
+                                               95000 382
+                                               100000 330
+                                               105000 284
+                                               110000 245
+                                               115000 213
+                                               120000 183
+                                               125000 161>;
+       };
+
+       tboard_thermistor2: thermal-sensor2 {
+               compatible = "generic-adc-thermal";
+               #thermal-sensor-cells = <0>;
+               io-channels = <&auxadc 1>;
+               io-channel-names = "sensor-channel";
+               temperature-lookup-table = <    (-5000) 4241
+                                               0 4063
+                                               5000 3856
+                                               10000 3621
+                                               15000 3364
+                                               20000 3091
+                                               25000 2810
+                                               30000 2526
+                                               35000 2247
+                                               40000 1982
+                                               45000 1734
+                                               50000 1507
+                                               55000 1305
+                                               60000 1122
+                                               65000 964
+                                               70000 827
+                                               75000 710
+                                               80000 606
+                                               85000 519
+                                               90000 445
+                                               95000 382
+                                               100000 330
+                                               105000 284
+                                               110000 245
+                                               115000 213
+                                               120000 183
+                                               125000 161>;
+       };
+};
+
+&auxadc {
+       status = "okay";
+};
+
+&cpu0 {
+       proc-supply = <&mt6358_vproc12_reg>;
+};
+
+&cpu1 {
+       proc-supply = <&mt6358_vproc12_reg>;
+};
+
+&cpu2 {
+       proc-supply = <&mt6358_vproc12_reg>;
+};
+
+&cpu3 {
+       proc-supply = <&mt6358_vproc12_reg>;
+};
+
+&cpu4 {
+       proc-supply = <&mt6358_vproc11_reg>;
+};
+
+&cpu5 {
+       proc-supply = <&mt6358_vproc11_reg>;
+};
+
+&cpu6 {
+       proc-supply = <&mt6358_vproc11_reg>;
+};
+
+&cpu7 {
+       proc-supply = <&mt6358_vproc11_reg>;
+};
+
+&i2c0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c0_pins>;
+       status = "okay";
+       clock-frequency = <400000>;
+       #address-cells = <1>;
+       #size-cells = <0>;
+};
+
+&i2c1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c1_pins>;
+       status = "okay";
+       clock-frequency = <100000>;
+};
+
+&i2c3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c3_pins>;
+       status = "okay";
+       clock-frequency = <100000>;
+       #address-cells = <1>;
+       #size-cells = <0>;
+};
+
+&i2c5 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c5_pins>;
+       status = "okay";
+       clock-frequency = <100000>;
+       #address-cells = <1>;
+       #size-cells = <0>;
+};
+
+&i2c6 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c6_pins>;
+       status = "okay";
+       clock-frequency = <100000>;
+};
+
+&mmc0 {
+       status = "okay";
+       pinctrl-names = "default", "state_uhs";
+       pinctrl-0 = <&mmc0_pins_default>;
+       pinctrl-1 = <&mmc0_pins_uhs>;
+       bus-width = <8>;
+       max-frequency = <200000000>;
+       cap-mmc-highspeed;
+       mmc-hs200-1_8v;
+       mmc-hs400-1_8v;
+       cap-mmc-hw-reset;
+       no-sdio;
+       no-sd;
+       hs400-ds-delay = <0x12814>;
+       vmmc-supply = <&mt6358_vemc_reg>;
+       vqmmc-supply = <&mt6358_vio18_reg>;
+       assigned-clocks = <&topckgen CLK_TOP_MUX_MSDC50_0>;
+       assigned-clock-parents = <&topckgen CLK_TOP_MSDCPLL_CK>;
+       non-removable;
+};
+
+&mmc1 {
+       status = "okay";
+       pinctrl-names = "default", "state_uhs";
+       pinctrl-0 = <&mmc1_pins_default>;
+       pinctrl-1 = <&mmc1_pins_uhs>;
+       vmmc-supply = <&mmc1_fixed_power>;
+       vqmmc-supply = <&mmc1_fixed_io>;
+       mmc-pwrseq = <&wifi_pwrseq>;
+       bus-width = <4>;
+       max-frequency = <200000000>;
+       drv-type = <2>;
+       cap-sd-highspeed;
+       sd-uhs-sdr50;
+       sd-uhs-sdr104;
+       keep-power-in-suspend;
+       enable-sdio-wakeup;
+       cap-sdio-irq;
+       non-removable;
+       no-mmc;
+       no-sd;
+       assigned-clocks = <&topckgen CLK_TOP_MUX_MSDC30_1>;
+       assigned-clock-parents = <&topckgen CLK_TOP_MSDCPLL_D2>;
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       qca_wifi: qca-wifi@1 {
+               compatible = "qcom,ath10k";
+               reg = <1>;
+       };
+};
+
+&mt6358_vdram2_reg {
+       regulator-always-on;
+};
+
+&mt6358codec {
+       Avdd-supply = <&mt6358_vaud28_reg>;
+};
+
+&mt6358_vsim1_reg {
+       regulator-min-microvolt = <2700000>;
+       regulator-max-microvolt = <2700000>;
+};
+
+&mt6358_vsim2_reg {
+       regulator-min-microvolt = <2700000>;
+       regulator-max-microvolt = <2700000>;
+};
+
+&pio {
+       bt_pins: bt-pins {
+               pins_bt_en {
+                       pinmux = <PINMUX_GPIO120__FUNC_GPIO120>;
+                       output-low;
+               };
+       };
+
+       ec_ap_int_odl: ec_ap_int_odl {
+               pins1 {
+                       pinmux = <PINMUX_GPIO151__FUNC_GPIO151>;
+                       input-enable;
+                       bias-pull-up;
+               };
+       };
+
+       h1_int_od_l: h1_int_od_l {
+               pins1 {
+                       pinmux = <PINMUX_GPIO153__FUNC_GPIO153>;
+                       input-enable;
+               };
+       };
+
+       i2c0_pins: i2c0 {
+               pins_bus {
+                       pinmux = <PINMUX_GPIO82__FUNC_SDA0>,
+                                <PINMUX_GPIO83__FUNC_SCL0>;
+                       mediatek,pull-up-adv = <3>;
+                       mediatek,drive-strength-adv = <00>;
+               };
+       };
+
+       i2c1_pins: i2c1 {
+               pins_bus {
+                       pinmux = <PINMUX_GPIO81__FUNC_SDA1>,
+                                <PINMUX_GPIO84__FUNC_SCL1>;
+                       mediatek,pull-up-adv = <3>;
+                       mediatek,drive-strength-adv = <00>;
+               };
+       };
+
+       i2c2_pins: i2c2 {
+               pins_bus {
+                       pinmux = <PINMUX_GPIO103__FUNC_SCL2>,
+                                <PINMUX_GPIO104__FUNC_SDA2>;
+                       bias-disable;
+                       mediatek,drive-strength-adv = <00>;
+               };
+       };
+
+       i2c3_pins: i2c3 {
+               pins_bus {
+                       pinmux = <PINMUX_GPIO50__FUNC_SCL3>,
+                                <PINMUX_GPIO51__FUNC_SDA3>;
+                       mediatek,pull-up-adv = <3>;
+                       mediatek,drive-strength-adv = <00>;
+               };
+       };
+
+       i2c4_pins: i2c4 {
+               pins_bus {
+                       pinmux = <PINMUX_GPIO105__FUNC_SCL4>,
+                                <PINMUX_GPIO106__FUNC_SDA4>;
+                       bias-disable;
+                       mediatek,drive-strength-adv = <00>;
+               };
+       };
+
+       i2c5_pins: i2c5 {
+               pins_bus {
+                       pinmux = <PINMUX_GPIO48__FUNC_SCL5>,
+                                <PINMUX_GPIO49__FUNC_SDA5>;
+                       mediatek,pull-up-adv = <3>;
+                       mediatek,drive-strength-adv = <00>;
+               };
+       };
+
+       i2c6_pins: i2c6 {
+               pins_bus {
+                       pinmux = <PINMUX_GPIO11__FUNC_SCL6>,
+                                <PINMUX_GPIO12__FUNC_SDA6>;
+                       bias-disable;
+               };
+       };
+
+       mmc0_pins_default: mmc0-pins-default {
+               pins_cmd_dat {
+                       pinmux = <PINMUX_GPIO123__FUNC_MSDC0_DAT0>,
+                                <PINMUX_GPIO128__FUNC_MSDC0_DAT1>,
+                                <PINMUX_GPIO125__FUNC_MSDC0_DAT2>,
+                                <PINMUX_GPIO132__FUNC_MSDC0_DAT3>,
+                                <PINMUX_GPIO126__FUNC_MSDC0_DAT4>,
+                                <PINMUX_GPIO129__FUNC_MSDC0_DAT5>,
+                                <PINMUX_GPIO127__FUNC_MSDC0_DAT6>,
+                                <PINMUX_GPIO130__FUNC_MSDC0_DAT7>,
+                                <PINMUX_GPIO122__FUNC_MSDC0_CMD>;
+                       input-enable;
+                       drive-strength = <MTK_DRIVE_14mA>;
+                       mediatek,pull-up-adv = <01>;
+               };
+
+               pins_clk {
+                       pinmux = <PINMUX_GPIO124__FUNC_MSDC0_CLK>;
+                       drive-strength = <MTK_DRIVE_14mA>;
+                       mediatek,pull-down-adv = <10>;
+               };
+
+               pins_rst {
+                       pinmux = <PINMUX_GPIO133__FUNC_MSDC0_RSTB>;
+                       drive-strength = <MTK_DRIVE_14mA>;
+                       mediatek,pull-down-adv = <01>;
+               };
+       };
+
+       mmc0_pins_uhs: mmc0-pins-uhs {
+               pins_cmd_dat {
+                       pinmux = <PINMUX_GPIO123__FUNC_MSDC0_DAT0>,
+                                <PINMUX_GPIO128__FUNC_MSDC0_DAT1>,
+                                <PINMUX_GPIO125__FUNC_MSDC0_DAT2>,
+                                <PINMUX_GPIO132__FUNC_MSDC0_DAT3>,
+                                <PINMUX_GPIO126__FUNC_MSDC0_DAT4>,
+                                <PINMUX_GPIO129__FUNC_MSDC0_DAT5>,
+                                <PINMUX_GPIO127__FUNC_MSDC0_DAT6>,
+                                <PINMUX_GPIO130__FUNC_MSDC0_DAT7>,
+                                <PINMUX_GPIO122__FUNC_MSDC0_CMD>;
+                       input-enable;
+                       drive-strength = <MTK_DRIVE_14mA>;
+                       mediatek,pull-up-adv = <01>;
+               };
+
+               pins_clk {
+                       pinmux = <PINMUX_GPIO124__FUNC_MSDC0_CLK>;
+                       drive-strength = <MTK_DRIVE_14mA>;
+                       mediatek,pull-down-adv = <10>;
+               };
+
+               pins_ds {
+                       pinmux = <PINMUX_GPIO131__FUNC_MSDC0_DSL>;
+                       drive-strength = <MTK_DRIVE_14mA>;
+                       mediatek,pull-down-adv = <10>;
+               };
+
+               pins_rst {
+                       pinmux = <PINMUX_GPIO133__FUNC_MSDC0_RSTB>;
+                       drive-strength = <MTK_DRIVE_14mA>;
+                       mediatek,pull-up-adv = <01>;
+               };
+       };
+
+       mmc1_pins_default: mmc1-pins-default {
+               pins_cmd_dat {
+                       pinmux = <PINMUX_GPIO31__FUNC_MSDC1_CMD>,
+                                <PINMUX_GPIO32__FUNC_MSDC1_DAT0>,
+                                <PINMUX_GPIO34__FUNC_MSDC1_DAT1>,
+                                <PINMUX_GPIO33__FUNC_MSDC1_DAT2>,
+                                <PINMUX_GPIO30__FUNC_MSDC1_DAT3>;
+                       input-enable;
+                       mediatek,pull-up-adv = <10>;
+               };
+
+               pins_clk {
+                       pinmux = <PINMUX_GPIO29__FUNC_MSDC1_CLK>;
+                       input-enable;
+                       mediatek,pull-down-adv = <10>;
+               };
+       };
+
+       mmc1_pins_uhs: mmc1-pins-uhs {
+               pins_cmd_dat {
+                       pinmux = <PINMUX_GPIO31__FUNC_MSDC1_CMD>,
+                                <PINMUX_GPIO32__FUNC_MSDC1_DAT0>,
+                                <PINMUX_GPIO34__FUNC_MSDC1_DAT1>,
+                                <PINMUX_GPIO33__FUNC_MSDC1_DAT2>,
+                                <PINMUX_GPIO30__FUNC_MSDC1_DAT3>;
+                       drive-strength = <MTK_DRIVE_6mA>;
+                       input-enable;
+                       mediatek,pull-up-adv = <10>;
+               };
+
+               pins_clk {
+                       pinmux = <PINMUX_GPIO29__FUNC_MSDC1_CLK>;
+                       drive-strength = <MTK_DRIVE_8mA>;
+                       mediatek,pull-down-adv = <10>;
+                       input-enable;
+               };
+       };
+
+       spi0_pins: spi0 {
+               pins_spi{
+                       pinmux = <PINMUX_GPIO85__FUNC_SPI0_MI>,
+                                <PINMUX_GPIO86__FUNC_GPIO86>,
+                                <PINMUX_GPIO87__FUNC_SPI0_MO>,
+                                <PINMUX_GPIO88__FUNC_SPI0_CLK>;
+                       bias-disable;
+               };
+       };
+
+       spi1_pins: spi1 {
+               pins_spi{
+                       pinmux = <PINMUX_GPIO161__FUNC_SPI1_A_MI>,
+                                <PINMUX_GPIO162__FUNC_SPI1_A_CSB>,
+                                <PINMUX_GPIO163__FUNC_SPI1_A_MO>,
+                                <PINMUX_GPIO164__FUNC_SPI1_A_CLK>;
+                       bias-disable;
+               };
+       };
+
+       spi2_pins: spi2 {
+               pins_spi{
+                       pinmux = <PINMUX_GPIO0__FUNC_SPI2_CSB>,
+                                <PINMUX_GPIO1__FUNC_SPI2_MO>,
+                                <PINMUX_GPIO2__FUNC_SPI2_CLK>;
+                       bias-disable;
+               };
+               pins_spi_mi {
+                       pinmux = <PINMUX_GPIO94__FUNC_SPI2_MI>;
+                       mediatek,pull-down-adv = <00>;
+               };
+       };
+
+       spi3_pins: spi3 {
+               pins_spi{
+                       pinmux = <PINMUX_GPIO21__FUNC_SPI3_MI>,
+                                <PINMUX_GPIO22__FUNC_SPI3_CSB>,
+                                <PINMUX_GPIO23__FUNC_SPI3_MO>,
+                                <PINMUX_GPIO24__FUNC_SPI3_CLK>;
+                       bias-disable;
+               };
+       };
+
+       spi4_pins: spi4 {
+               pins_spi{
+                       pinmux = <PINMUX_GPIO17__FUNC_SPI4_MI>,
+                                <PINMUX_GPIO18__FUNC_SPI4_CSB>,
+                                <PINMUX_GPIO19__FUNC_SPI4_MO>,
+                                <PINMUX_GPIO20__FUNC_SPI4_CLK>;
+                       bias-disable;
+               };
+       };
+
+       spi5_pins: spi5 {
+               pins_spi{
+                       pinmux = <PINMUX_GPIO13__FUNC_SPI5_MI>,
+                                <PINMUX_GPIO14__FUNC_SPI5_CSB>,
+                                <PINMUX_GPIO15__FUNC_SPI5_MO>,
+                                <PINMUX_GPIO16__FUNC_SPI5_CLK>;
+                       bias-disable;
+               };
+       };
+
+       uart0_pins_default: uart0-pins-default {
+               pins_rx {
+                       pinmux = <PINMUX_GPIO95__FUNC_URXD0>;
+                       input-enable;
+                       bias-pull-up;
+               };
+               pins_tx {
+                       pinmux = <PINMUX_GPIO96__FUNC_UTXD0>;
+               };
+       };
+
+       uart1_pins_default: uart1-pins-default {
+               pins_rx {
+                       pinmux = <PINMUX_GPIO121__FUNC_URXD1>;
+                       input-enable;
+                       bias-pull-up;
+               };
+               pins_tx {
+                       pinmux = <PINMUX_GPIO115__FUNC_UTXD1>;
+               };
+               pins_rts {
+                       pinmux = <PINMUX_GPIO47__FUNC_URTS1>;
+                       output-enable;
+               };
+               pins_cts {
+                       pinmux = <PINMUX_GPIO46__FUNC_UCTS1>;
+                       input-enable;
+               };
+       };
+
+       uart1_pins_sleep: uart1-pins-sleep {
+               pins_rx {
+                       pinmux = <PINMUX_GPIO121__FUNC_GPIO121>;
+                       input-enable;
+                       bias-pull-up;
+               };
+               pins_tx {
+                       pinmux = <PINMUX_GPIO115__FUNC_UTXD1>;
+               };
+               pins_rts {
+                       pinmux = <PINMUX_GPIO47__FUNC_URTS1>;
+                       output-enable;
+               };
+               pins_cts {
+                       pinmux = <PINMUX_GPIO46__FUNC_UCTS1>;
+                       input-enable;
+               };
+       };
+
+       wifi_pins_pwrseq: wifi-pins-pwrseq {
+               pins_wifi_enable {
+                       pinmux = <PINMUX_GPIO119__FUNC_GPIO119>;
+                       output-low;
+               };
+       };
+
+       wifi_pins_wakeup: wifi-pins-wakeup {
+               pins_wifi_wakeup {
+                       pinmux = <PINMUX_GPIO113__FUNC_GPIO113>;
+                       input-enable;
+               };
+       };
+};
+
+&soc_data {
+       status = "okay";
+};
+
+&spi0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi0_pins>;
+       mediatek,pad-select = <0>;
+       status = "okay";
+       cs-gpios = <&pio 86 GPIO_ACTIVE_LOW>;
+
+       cr50@0 {
+               compatible = "google,cr50";
+               reg = <0>;
+               spi-max-frequency = <1000000>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&h1_int_od_l>;
+               interrupt-parent = <&pio>;
+               interrupts = <153 IRQ_TYPE_EDGE_RISING>;
+       };
+};
+
+&spi1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi1_pins>;
+       mediatek,pad-select = <0>;
+       status = "okay";
+
+       w25q64dw: spi-flash@0 {
+               compatible = "winbond,w25q64dw", "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <25000000>;
+       };
+};
+
+&spi2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi2_pins>;
+       mediatek,pad-select = <0>;
+       status = "okay";
+
+       cros_ec: cros-ec@0 {
+               compatible = "google,cros-ec-spi";
+               reg = <0>;
+               spi-max-frequency = <3000000>;
+               interrupt-parent = <&pio>;
+               interrupts = <151 IRQ_TYPE_LEVEL_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&ec_ap_int_odl>;
+
+               i2c_tunnel: i2c-tunnel {
+                       compatible = "google,cros-ec-i2c-tunnel";
+                       google,remote-bus = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               usbc_extcon: extcon0 {
+                       compatible = "google,extcon-usbc-cros-ec";
+                       google,usb-port-id = <0>;
+               };
+       };
+};
+
+&spi3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi3_pins>;
+       mediatek,pad-select = <0>;
+       status = "disabled";
+};
+
+&spi4 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi4_pins>;
+       mediatek,pad-select = <0>;
+       status = "disabled";
+};
+
+&spi5 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi5_pins>;
+       mediatek,pad-select = <0>;
+       status = "disabled";
+};
+
+&ssusb {
+       dr_mode = "host";
+       wakeup-source;
+       vusb33-supply = <&mt6358_vusb_reg>;
+       status = "okay";
+};
+
+&u3phy {
+       status = "okay";
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart0_pins_default>;
+       status = "okay";
+};
+
+&uart1 {
+       pinctrl-names = "default", "sleep";
+       pinctrl-0 = <&uart1_pins_default>;
+       pinctrl-1 = <&uart1_pins_sleep>;
+       status = "okay";
+       interrupts-extended = <&sysirq GIC_SPI 92 IRQ_TYPE_LEVEL_LOW>,
+                             <&pio 121 IRQ_TYPE_EDGE_FALLING>;
+
+       bluetooth: bluetooth {
+               pinctrl-names = "default";
+               pinctrl-0 = <&bt_pins>;
+               status = "okay";
+               compatible = "qcom,qca6174-bt";
+               enable-gpios = <&pio 120 0>;
+               clocks = <&clk32k>;
+               firmware-name = "nvm_00440302_i2s.bin";
+       };
+};
+
+&usb_host {
+       #address-cells = <1>;
+       #size-cells = <0>;
+       vusb33-supply = <&mt6358_vusb_reg>;
+       status = "okay";
+
+       hub@1 {
+               compatible = "usb5e3,610";
+               reg = <1>;
+       };
+};
+
+#include <arm/cros-ec-keyboard.dtsi>
+#include <arm/cros-ec-sbs.dtsi>
index 1e03c84..1021058 100644 (file)
@@ -9,6 +9,7 @@
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/reset-controller/mt8183-resets.h>
+#include <dt-bindings/phy/phy.h>
 #include "mt8183-pinfunc.h"
 
 / {
                                min-residency-us = <800>;
                        };
 
-                       CLUSTER_SLEEP0: cluster-sleep@0 {
+                       CLUSTER_SLEEP0: cluster-sleep-0 {
                                compatible = "arm,idle-state";
                                local-timer-stop;
                                arm,psci-suspend-param = <0x01010001>;
                                exit-latency-us = <400>;
                                min-residency-us = <1000>;
                        };
-                       CLUSTER_SLEEP1: cluster-sleep@1 {
+                       CLUSTER_SLEEP1: cluster-sleep-1 {
                                compatible = "arm,idle-state";
                                local-timer-stop;
                                arm,psci-suspend-param = <0x01010001>;
                        #reset-cells = <1>;
                };
 
+               pericfg: syscon@10003000 {
+                       compatible = "mediatek,mt8183-pericfg", "syscon";
+                       reg = <0 0x10003000 0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
                pio: pinctrl@10005000 {
                        compatible = "mediatek,mt8183-pinctrl";
                        reg = <0 0x10005000 0 0x1000>,
                        status = "disabled";
                };
 
+               ssusb: usb@11201000 {
+                       compatible ="mediatek,mt8183-mtu3", "mediatek,mtu3";
+                       reg = <0 0x11201000 0 0x2e00>,
+                             <0 0x11203e00 0 0x0100>;
+                       reg-names = "mac", "ippc";
+                       interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_LOW>;
+                       phys = <&u2port0 PHY_TYPE_USB2>,
+                              <&u3port0 PHY_TYPE_USB3>;
+                       clocks = <&infracfg CLK_INFRA_UNIPRO_SCK>,
+                                <&infracfg CLK_INFRA_USB>;
+                       clock-names = "sys_ck", "ref_ck";
+                       mediatek,syscon-wakeup = <&pericfg 0x400 0>;
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+                       ranges;
+                       status = "disabled";
+
+                       usb_host: xhci@11200000 {
+                               compatible = "mediatek,mt8183-xhci",
+                                            "mediatek,mtk-xhci";
+                               reg = <0 0x11200000 0 0x1000>;
+                               reg-names = "mac";
+                               interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_LOW>;
+                               clocks = <&infracfg CLK_INFRA_UNIPRO_SCK>,
+                                        <&infracfg CLK_INFRA_USB>;
+                               clock-names = "sys_ck", "ref_ck";
+                               status = "disabled";
+                       };
+               };
+
                audiosys: syscon@11220000 {
                        compatible = "mediatek,mt8183-audiosys", "syscon";
                        reg = <0 0x11220000 0 0x1000>;
                        reg = <0 0x11f10000 0 0x1000>;
                };
 
+               u3phy: usb-phy@11f40000 {
+                       compatible = "mediatek,mt8183-tphy",
+                                    "mediatek,generic-tphy-v2";
+                       #address-cells = <1>;
+                       #phy-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0 0 0x11f40000 0x1000>;
+                       status = "okay";
+
+                       u2port0: usb-phy@0 {
+                               reg = <0x0 0x700>;
+                               clocks = <&clk26m>;
+                               clock-names = "ref";
+                               #phy-cells = <1>;
+                               mediatek,discth = <15>;
+                               status = "okay";
+                       };
+
+                       u3port0: usb-phy@0700 {
+                               reg = <0x0700 0x900>;
+                               clocks = <&clk26m>;
+                               clock-names = "ref";
+                               #phy-cells = <1>;
+                               status = "okay";
+                       };
+               };
+
                mfgcfg: syscon@13000000 {
                        compatible = "mediatek,mt8183-mfgcfg", "syscon";
                        reg = <0 0x13000000 0 0x1000>;
index bcd018c..2273fc5 100644 (file)
@@ -8,3 +8,4 @@ dtb-$(CONFIG_ARCH_TEGRA_210_SOC) += tegra210-smaug.dtb
 dtb-$(CONFIG_ARCH_TEGRA_210_SOC) += tegra210-p2894-0050-a08.dtb
 dtb-$(CONFIG_ARCH_TEGRA_186_SOC) += tegra186-p2771-0000.dtb
 dtb-$(CONFIG_ARCH_TEGRA_194_SOC) += tegra194-p2972-0000.dtb
+dtb-$(CONFIG_ARCH_TEGRA_194_SOC) += tegra194-p3509-0000+p3668-0000.dtb
index 9f3206c..6e5f846 100644 (file)
@@ -18,7 +18,7 @@
                stdout-path = "serial0:115200n8";
        };
 
-       memory {
+       memory@80000000 {
                device_type = "memory";
                reg = <0x0 0x80000000 0x0 0x80000000>;
        };
@@ -39,6 +39,9 @@
                sor@54540000 {
                        status = "okay";
 
+                       avdd-io-hdmi-dp-supply = <&vdd_3v3_hdmi>;
+                       vdd-hdmi-dp-pll-supply = <&vdd_hdmi_pll>;
+
                        nvidia,dpaux = <&dpaux>;
                        nvidia,panel = <&panel>;
                };
                                        regulator-boot-on;
                                };
 
-                               ldo0 {
+                               avdd_1v05_run: ldo0 {
                                        regulator-name = "+1.05_RUN_AVDD";
                                        regulator-min-microvolt = <1050000>;
                                        regulator-max-microvolt = <1050000>;
                                battery: smart-battery {
                                        compatible = "sbs,sbs-battery";
                                        reg = <0xb>;
-                                       battery-name = "battery";
                                        sbs,i2c-retry-count = <2>;
                                        sbs,poll-retry-count = <10>;
                                /*      power-supplies = <&charger>; */
                nvidia,reset-gpio = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
        };
 
+       usb@70090000 {
+               phys = <&{/padctl@7009f000/pads/usb2/lanes/usb2-0}>, /* 1st USB A */
+                      <&{/padctl@7009f000/pads/usb2/lanes/usb2-1}>, /* Internal USB */
+                      <&{/padctl@7009f000/pads/usb2/lanes/usb2-2}>, /* 2nd USB A */
+                      <&{/padctl@7009f000/pads/pcie/lanes/pcie-0}>, /* 1st USB A */
+                      <&{/padctl@7009f000/pads/pcie/lanes/pcie-1}>; /* 2nd USB A */
+               phy-names = "usb2-0", "usb2-1", "usb2-2", "usb3-0", "usb3-1";
+
+               avddio-pex-supply = <&vdd_1v05_run>;
+               dvddio-pex-supply = <&vdd_1v05_run>;
+               avdd-usb-supply = <&vdd_3v3_lp0>;
+               hvdd-usb-ss-supply = <&vdd_3v3_lp0>;
+
+               status = "okay";
+       };
+
+       padctl@7009f000 {
+               avdd-pll-utmip-supply = <&vddio_1v8>;
+               avdd-pll-erefe-supply = <&avdd_1v05_run>;
+               avdd-pex-pll-supply = <&vdd_1v05_run>;
+               hvdd-pex-pll-e-supply = <&vdd_3v3_lp0>;
+
+               pads {
+                       usb2 {
+                               status = "okay";
+
+                               lanes {
+                                       usb2-0 {
+                                               nvidia,function = "xusb";
+                                               status = "okay";
+                                       };
+
+                                       usb2-1 {
+                                               nvidia,function = "xusb";
+                                               status = "okay";
+                                       };
+
+                                       usb2-2 {
+                                               nvidia,function = "xusb";
+                                               status = "okay";
+                                       };
+                               };
+                       };
+
+                       pcie {
+                               status = "okay";
+
+                               lanes {
+                                       pcie-0 {
+                                               nvidia,function = "usb3-ss";
+                                               status = "okay";
+                                       };
+
+                                       pcie-1 {
+                                               nvidia,function = "usb3-ss";
+                                               status = "okay";
+                                       };
+                               };
+                       };
+               };
+
+               ports {
+                       usb2-0 {
+                               status = "okay";
+                               mode = "otg";
+
+                               vbus-supply = <&vdd_usb1_vbus>;
+                       };
+
+                       usb2-1 {
+                               status = "okay";
+                               mode = "host";
+
+                               vbus-supply = <&vdd_run_cam>;
+                       };
+
+                       usb2-2 {
+                               status = "okay";
+                               mode = "host";
+
+                               vbus-supply = <&vdd_usb3_vbus>;
+                       };
+
+                       usb3-0 {
+                               nvidia,usb2-companion = <0>;
+                               status = "okay";
+                       };
+
+                       usb3-1 {
+                               nvidia,usb2-companion = <2>;
+                               status = "okay";
+                       };
+               };
+       };
+
        /* WIFI/BT module */
-       sdhci@700b0000 {
+       mmc@700b0000 {
                status = "disabled";
        };
 
        /* external SD/MMC */
-       sdhci@700b0400 {
+       mmc@700b0400 {
                cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>;
                power-gpios = <&gpio TEGRA_GPIO(R, 0) GPIO_ACTIVE_HIGH>;
                wp-gpios = <&gpio TEGRA_GPIO(Q, 4) GPIO_ACTIVE_HIGH>;
        };
 
        /* EMMC 4.51 */
-       sdhci@700b0600 {
+       mmc@700b0600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
        };
 
-       usb@7d000000 {
-               status = "okay";
-       };
-
-       usb-phy@7d000000 {
-               status = "okay";
-               vbus-supply = <&vdd_usb1_vbus>;
-       };
-
-       usb@7d004000 {
-               status = "okay";
-       };
-
-       usb-phy@7d004000 {
-               status = "okay";
-               vbus-supply = <&vdd_run_cam>;
-       };
-
-       usb@7d008000 {
-               status = "okay";
-       };
-
-       usb-phy@7d008000 {
-               status = "okay";
-               vbus-supply = <&vdd_usb3_vbus>;
-       };
-
        backlight: backlight {
                compatible = "pwm-backlight";
 
                backlight-boot-off;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg=<0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
 
        panel: panel {
                compatible = "innolux,n116bge";
+               power-supply = <&vdd_3v3_panel>;
                backlight = <&backlight>;
                ddc-i2c-bus = <&dpaux>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
+       vdd_mux: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "+VDD_MUX";
+               regulator-min-microvolt = <19000000>;
+               regulator-max-microvolt = <19000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-               vdd_mux: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "+VDD_MUX";
-                       regulator-min-microvolt = <19000000>;
-                       regulator-max-microvolt = <19000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
+       vdd_5v0_sys: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_SYS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_5v0_sys: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "+5V_SYS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_3v3_sys: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_SYS";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_3v3_sys: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "+3.3V_SYS";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_3v3_run: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_RUN";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&as3722 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 
-               vdd_3v3_run: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "+3.3V_RUN";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       gpio = <&as3722 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_sys>;
-               };
+       vdd_3v3_hdmi: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_AVDD_HDMI_AP_GATED";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&vdd_3v3_run>;
+       };
 
-               vdd_3v3_hdmi: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "+3.3V_AVDD_HDMI_AP_GATED";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       vin-supply = <&vdd_3v3_run>;
-               };
+       vdd_led: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "+VDD_LED";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_mux>;
+       };
 
-               vdd_led: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "+VDD_LED";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       gpio = <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_mux>;
-               };
+       vdd_usb1_vbus: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_USB_HS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_usb1_vbus: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg = <6>;
-                       regulator-name = "+5V_USB_HS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_usb3_vbus: regulator@7 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_USB_SS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(N, 5) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_usb3_vbus: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
-                       regulator-name = "+5V_USB_SS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(N, 5) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_3v3_panel: regulator@8 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_PANEL";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&as3722 4 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 
-               vdd_3v3_panel: regulator@8 {
-                       compatible = "regulator-fixed";
-                       reg = <8>;
-                       regulator-name = "+3.3V_PANEL";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       gpio = <&as3722 4 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_sys>;
-               };
+       vdd_hdmi_pll: regulator@9 {
+               compatible = "regulator-fixed";
+               regulator-name = "+1.05V_RUN_AVDD_HDMI_PLL_AP_GATE";
+               regulator-min-microvolt = <1050000>;
+               regulator-max-microvolt = <1050000>;
+               gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_LOW>;
+               vin-supply = <&vdd_1v05_run>;
+       };
 
-               vdd_hdmi_pll: regulator@9 {
-                       compatible = "regulator-fixed";
-                       reg = <9>;
-                       regulator-name = "+1.05V_RUN_AVDD_HDMI_PLL_AP_GATE";
-                       regulator-min-microvolt = <1050000>;
-                       regulator-max-microvolt = <1050000>;
-                       gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_LOW>;
-                       vin-supply = <&vdd_1v05_run>;
-               };
+       vdd_5v0_hdmi: regulator@10 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_HDMI_CON";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-               vdd_5v0_hdmi: regulator@10 {
-                       compatible = "regulator-fixed";
-                       reg = <10>;
-                       regulator-name = "+5V_HDMI_CON";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_5v0_ts: regulator@11 {
+               compatible = "regulator-fixed";
+               regulator-name = "+5V_VDD_TS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_5v0_ts: regulator@11 {
-                       compatible = "regulator-fixed";
-                       reg = <11>;
-                       regulator-name = "+5V_VDD_TS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vdd_3v3_lp0: regulator@12 {
+               compatible = "regulator-fixed";
+               regulator-name = "+3.3V_LP0";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               /*
+                * TODO: find a way to wire this up with the USB EHCI
+                * controllers so that it can be enabled on demand.
+                */
+               regulator-always-on;
+               gpio = <&as3722 2 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
        };
 };
index 11a1bb4..e402815 100644 (file)
@@ -17,9 +17,9 @@
        pcie@1003000 {
                compatible = "nvidia,tegra124-pcie";
                device_type = "pci";
-               reg = <0x0 0x01003000 0x0 0x00000800   /* PADS registers */
-                      0x0 0x01003800 0x0 0x00000800   /* AFI registers */
-                      0x0 0x02000000 0x0 0x10000000>; /* configuration space */
+               reg = <0x0 0x01003000 0x0 0x00000800>, /* PADS registers */
+                     <0x0 0x01003800 0x0 0x00000800>, /* AFI registers */
+                     <0x0 0x02000000 0x0 0x10000000>; /* configuration space */
                reg-names = "pads", "afi", "cs";
                interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
                             <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                #address-cells = <3>;
                #size-cells = <2>;
 
-               ranges = <0x82000000 0 0x01000000 0x0 0x01000000 0 0x00001000   /* port 0 configuration space */
-                         0x82000000 0 0x01001000 0x0 0x01001000 0 0x00001000   /* port 1 configuration space */
-                         0x81000000 0 0x0        0x0 0x12000000 0 0x00010000   /* downstream I/O (64 KiB) */
-                         0x82000000 0 0x13000000 0x0 0x13000000 0 0x0d000000   /* non-prefetchable memory (208 MiB) */
-                         0xc2000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
+               ranges = <0x02000000 0 0x01000000 0x0 0x01000000 0 0x00001000>, /* port 0 configuration space */
+                        <0x02000000 0 0x01001000 0x0 0x01001000 0 0x00001000>, /* port 1 configuration space */
+                        <0x01000000 0 0x0        0x0 0x12000000 0 0x00010000>, /* downstream I/O (64 KiB) */
+                        <0x02000000 0 0x13000000 0x0 0x13000000 0 0x0d000000>, /* non-prefetchable memory (208 MiB) */
+                        <0x42000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
 
                clocks = <&tegra_car TEGRA124_CLK_PCIE>,
                         <&tegra_car TEGRA124_CLK_AFI>,
@@ -50,9 +50,6 @@
                reset-names = "pex", "afi", "pcie_x";
                status = "disabled";
 
-               phys = <&padctl TEGRA_XUSB_PADCTL_PCIE>;
-               phy-names = "pcie";
-
                pci@1,0 {
                        device_type = "pci";
                        assigned-addresses = <0x82000800 0 0x01000000 0 0x1000>;
        };
 
        host1x@50000000 {
-               compatible = "nvidia,tegra124-host1x", "simple-bus";
+               compatible = "nvidia,tegra132-host1x",
+                            "nvidia,tegra124-host1x";
                reg = <0x0 0x50000000 0x0 0x00034000>;
                interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>, /* syncpt */
                             <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* general */
+               interrupt-names = "syncpt", "host1x";
                clocks = <&tegra_car TEGRA124_CLK_HOST1X>;
                clock-names = "host1x";
                resets = <&tegra_car 28>;
                        compatible = "nvidia,tegra124-dc";
                        reg = <0x0 0x54200000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&tegra_car TEGRA124_CLK_DISP1>,
-                                <&tegra_car TEGRA124_CLK_PLL_P>;
-                       clock-names = "dc", "parent";
+                       clocks = <&tegra_car TEGRA124_CLK_DISP1>;
+                       clock-names = "dc";
                        resets = <&tegra_car 27>;
                        reset-names = "dc";
 
                        compatible = "nvidia,tegra124-dc";
                        reg = <0x0 0x54240000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&tegra_car TEGRA124_CLK_DISP2>,
-                                <&tegra_car TEGRA124_CLK_PLL_P>;
-                       clock-names = "dc", "parent";
+                       clocks = <&tegra_car TEGRA124_CLK_DISP2>;
+                       clock-names = "dc";
                        resets = <&tegra_car 26>;
                        reset-names = "dc";
 
                        reg = <0x0 0x54540000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&tegra_car TEGRA124_CLK_SOR0>,
+                                <&tegra_car TEGRA124_CLK_SOR0_OUT>,
                                 <&tegra_car TEGRA124_CLK_PLL_D_OUT0>,
                                 <&tegra_car TEGRA124_CLK_PLL_DP>,
                                 <&tegra_car TEGRA124_CLK_CLK_M>;
-                       clock-names = "sor", "parent", "dp", "safe";
+                       clock-names = "sor", "out", "parent", "dp", "safe";
                        resets = <&tegra_car 182>;
                        reset-names = "sor";
                        status = "disabled";
                        resets = <&tegra_car 181>;
                        reset-names = "dpaux";
                        status = "disabled";
+
+                       i2c-bus {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                       };
                };
        };
 
        };
 
        emc: external-memory-controller@7001b000 {
-               compatible = "nvidia,tegra132-emc", "nvidia,tegra124-emc";
+               compatible = "nvidia,tegra132-emc";
                reg = <0x0 0x7001b000 0x0 0x1000>;
                clocks = <&tegra_car TEGRA124_CLK_EMC>;
                clock-names = "emc";
                         <&tegra_car 123>,
                         <&tegra_car 129>;
                reset-names = "sata", "sata-oob", "sata-cold";
-               phys = <&padctl TEGRA_XUSB_PADCTL_SATA>;
-               phy-names = "sata-phy";
                status = "disabled";
        };
 
                status = "disabled";
        };
 
+       usb@70090000 {
+               compatible = "nvidia,tegra132-xusb", "nvidia,tegra124-xusb";
+               reg = <0x0 0x70090000 0x0 0x8000>,
+                     <0x0 0x70098000 0x0 0x1000>,
+                     <0x0 0x70099000 0x0 0x1000>;
+               reg-names = "hcd", "fpci", "ipfs";
+
+               interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
+                            <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
+
+               clocks = <&tegra_car TEGRA124_CLK_XUSB_HOST>,
+                        <&tegra_car TEGRA124_CLK_XUSB_HOST_SRC>,
+                        <&tegra_car TEGRA124_CLK_XUSB_FALCON_SRC>,
+                        <&tegra_car TEGRA124_CLK_XUSB_SS>,
+                        <&tegra_car TEGRA124_CLK_XUSB_SS_SRC>,
+                        <&tegra_car TEGRA124_CLK_XUSB_SS_DIV2>,
+                        <&tegra_car TEGRA124_CLK_XUSB_HS_SRC>,
+                        <&tegra_car TEGRA124_CLK_XUSB_FS_SRC>,
+                        <&tegra_car TEGRA124_CLK_PLL_U_480M>,
+                        <&tegra_car TEGRA124_CLK_CLK_M>,
+                        <&tegra_car TEGRA124_CLK_PLL_E>;
+               clock-names = "xusb_host", "xusb_host_src",
+                             "xusb_falcon_src", "xusb_ss",
+                             "xusb_ss_src", "xusb_ss_div2",
+                             "xusb_hs_src", "xusb_fs_src",
+                             "pll_u_480m", "clk_m", "pll_e";
+               resets = <&tegra_car 89>, <&tegra_car 156>,
+                        <&tegra_car 143>;
+               reset-names = "xusb_host", "xusb_ss", "xusb_src";
+
+               nvidia,xusb-padctl = <&padctl>;
+
+               status = "disabled";
+       };
+
        padctl: padctl@7009f000 {
                compatible = "nvidia,tegra132-xusb-padctl",
                             "nvidia,tegra124-xusb-padctl";
                resets = <&tegra_car 142>;
                reset-names = "padctl";
 
-               #phy-cells = <1>;
+               pads {
+                       usb2 {
+                               status = "disabled";
+
+                               lanes {
+                                       usb2-0 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+
+                                       usb2-1 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+
+                                       usb2-2 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+                               };
+                       };
 
-               phys {
-                       pcie-0 {
+                       ulpi {
                                status = "disabled";
+
+                               lanes {
+                                       ulpi-0 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+                               };
                        };
 
-                       sata-0 {
+                       hsic {
                                status = "disabled";
+
+                               lanes {
+                                       hsic-0 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+
+                                       hsic-1 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+                               };
                        };
 
-                       usb3-0 {
+                       pcie {
                                status = "disabled";
+
+                               lanes {
+                                       pcie-0 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+
+                                       pcie-1 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+
+                                       pcie-2 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+
+                                       pcie-3 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+
+                                       pcie-4 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+                               };
                        };
 
-                       usb3-1 {
+                       sata {
+                               status = "disabled";
+
+                               lanes {
+                                       sata-0 {
+                                               status = "disabled";
+                                               #phy-cells = <0>;
+                                       };
+                               };
+                       };
+               };
+
+               ports {
+                       usb2-0 {
                                status = "disabled";
                        };
 
-                       utmi-0 {
+                       usb2-1 {
                                status = "disabled";
                        };
 
-                       utmi-1 {
+                       usb2-2 {
                                status = "disabled";
                        };
 
-                       utmi-2 {
+                       hsic-0 {
+                               status = "disabled";
+                       };
+
+                       hsic-1 {
+                               status = "disabled";
+                       };
+
+                       usb3-0 {
+                               status = "disabled";
+                       };
+
+                       usb3-1 {
                                status = "disabled";
                        };
                };
        };
 
-       sdhci@700b0000 {
+       mmc@700b0000 {
                compatible = "nvidia,tegra124-sdhci";
                reg = <0x0 0x700b0000 0x0 0x200>;
                interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
                status = "disabled";
        };
 
-       sdhci@700b0200 {
+       mmc@700b0200 {
                compatible = "nvidia,tegra124-sdhci";
                reg = <0x0 0x700b0200 0x0 0x200>;
                interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
                status = "disabled";
        };
 
-       sdhci@700b0400 {
+       mmc@700b0400 {
                compatible = "nvidia,tegra124-sdhci";
                reg = <0x0 0x700b0400 0x0 0x200>;
                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                status = "disabled";
        };
 
-       sdhci@700b0600 {
+       mmc@700b0600 {
                compatible = "nvidia,tegra124-sdhci";
                reg = <0x0 0x700b0600 0x0 0x200>;
                interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
 
        soctherm: thermal-sensor@700e2000 {
                compatible = "nvidia,tegra132-soctherm";
-               reg = <0x0 0x700e2000 0x0 0x600 /* 0: SOC_THERM reg_base */
-                       0x0 0x70040000 0x0 0x200>; /* 2: CCROC reg_base */
+               reg = <0x0 0x700e2000 0x0 0x600>, /* 0: SOC_THERM reg_base */
+                     <0x0 0x70040000 0x0 0x200>; /* 2: CCROC reg_base */
                reg-names = "soctherm-reg", "ccroc-reg";
                interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA124_CLK_TSENSOR>,
-                       <&tegra_car TEGRA124_CLK_SOC_THERM>;
+                        <&tegra_car TEGRA124_CLK_SOC_THERM>;
                clock-names = "tsensor", "soctherm";
                resets = <&tegra_car 78>;
                reset-names = "soctherm";
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 22>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <0>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 58>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <0>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
                clock-names = "reg", "pll_u", "utmi-pads";
                resets = <&tegra_car 59>, <&tegra_car 22>;
                reset-names = "usb", "utmi-pads";
+               #phy-cells = <0>;
                nvidia,hssync-start-delay = <0>;
                nvidia,idle-wait-delay = <17>;
                nvidia,elastic-limit = <16>;
index 1af7f9f..802b8c5 100644 (file)
        };
 
        /* SDMMC1 (SD/MMC) */
-       sdhci@3400000 {
+       mmc@3400000 {
                status = "okay";
 
                vmmc-supply = <&vdd_sd>;
 
                avdd-pll-erefeut-supply = <&vdd_1v8_pll>;
                avdd-usb-supply = <&vdd_3v3_sys>;
-               dvdd-pex-supply = <&vdd_pex>;
-               dvdd-pex-pll-supply = <&vdd_pex>;
-               hvdd-pex-supply = <&vdd_1v8>;
-               hvdd-pex-pll-supply = <&vdd_1v8>;
                vclamp-usb-supply = <&vdd_1v8>;
                vddio-hsic-supply = <&gnd>;
 
                                status = "okay";
                                mode = "otg";
                                vbus-supply = <&vdd_usb0>;
-
                                usb-role-switch;
+
                                connector {
-                                       compatible = "usb-b-connector",
-                                                    "gpio-usb-b-connector";
+                                       compatible = "gpio-usb-b-connector",
+                                                    "usb-b-connector";
                                        label = "micro-USB";
                                        type = "micro";
-                                       vbus-gpio = <&gpio
-                                                    TEGRA186_MAIN_GPIO(X, 7)
-                                                    GPIO_ACTIVE_LOW>;
-                                       id-gpio = <&pmic 0 GPIO_ACTIVE_HIGH>;
+                                       vbus-gpios = <&gpio
+                                                     TEGRA186_MAIN_GPIO(X, 7)
+                                                     GPIO_ACTIVE_LOW>;
+                                       id-gpios = <&pmic 0 GPIO_ACTIVE_HIGH>;
                                };
-
                        };
 
                        usb2-1 {
 
                        usb3-0 {
                                nvidia,usb2-companion = <1>;
+                               vbus-supply = <&vdd_usb1>;
                                status = "okay";
                        };
                };
                        reg = <0x57>;
 
                        vcc-supply = <&vdd_1v8>;
-                       address-bits = <8>;
-                       page-size = <8>;
+                       address-width = <8>;
+                       pagesize = <8>;
                        size = <256>;
                        read-only;
                };
                sor@15580000 {
                        status = "okay";
 
-                       avdd-io-supply = <&vdd_hdmi_1v05>;
-                       vdd-pll-supply = <&vdd_1v8_ap>;
+                       avdd-io-hdmi-dp-supply = <&vdd_hdmi_1v05>;
+                       vdd-hdmi-dp-pll-supply = <&vdd_1v8_ap>;
                        hdmi-supply = <&vdd_hdmi>;
 
                        nvidia,ddc-i2c-bus = <&ddc>;
                };
        };
 
-       regulators {
-               vdd_sd: regulator@100 {
-                       compatible = "regulator-fixed";
-                       reg = <100>;
-
-                       regulator-name = "SD_CARD_SW_PWR";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
+       vdd_sd: regulator@100 {
+               compatible = "regulator-fixed";
+               regulator-name = "SD_CARD_SW_PWR";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
 
-                       gpio = <&gpio TEGRA186_MAIN_GPIO(P, 6)
-                                     GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
+               gpio = <&gpio TEGRA186_MAIN_GPIO(P, 6) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
 
-                       vin-supply = <&vdd_3v3_sys>;
-               };
-
-               vdd_hdmi: regulator@101 {
-                       compatible = "regulator-fixed";
-                       reg = <101>;
-
-                       regulator-name = "VDD_HDMI_5V0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-
-                       gpio = <&exp1 14 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_hdmi: regulator@101 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_HDMI_5V0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
 
-               vdd_usb0: regulator@102 {
-                       compatible = "regulator-fixed";
-                       reg = <102>;
+               gpio = <&exp1 14 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
 
-                       regulator-name = "VDD_USB0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-                       gpio = <&gpio TEGRA186_MAIN_GPIO(L, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
+       vdd_usb0: regulator@102 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_USB0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
 
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+               gpio = <&gpio TEGRA186_MAIN_GPIO(L, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
 
-               vdd_usb1: regulator@103 {
-                       compatible = "regulator-fixed";
-                       reg = <103>;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-                       regulator-name = "VDD_USB1";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
+       vdd_usb1: regulator@103 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_USB1";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
 
-                       gpio = <&gpio TEGRA186_MAIN_GPIO(L, 5) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
+               gpio = <&gpio TEGRA186_MAIN_GPIO(L, 5) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
 
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+               vin-supply = <&vdd_5v0_sys>;
        };
 };
index 2fcaa2e..53d92fd 100644 (file)
@@ -9,9 +9,6 @@
 
        aliases {
                ethernet0 = "/ethernet@2490000";
-               sdhci0 = "/sdhci@3460000";
-               sdhci1 = "/sdhci@3400000";
-               serial0 = &uarta;
                i2c0 = "/bpmp/i2c";
                i2c1 = "/i2c@3160000";
                i2c2 = "/i2c@c240000";
@@ -20,6 +17,9 @@
                i2c5 = "/i2c@31c0000";
                i2c6 = "/i2c@c250000";
                i2c7 = "/i2c@31e0000";
+               mmc0 = "/mmc@3460000";
+               mmc1 = "/mmc@3400000";
+               serial0 = &uarta;
        };
 
        chosen {
@@ -27,7 +27,7 @@
                stdout-path = "serial0:115200n8";
        };
 
-       memory {
+       memory@80000000 {
                device_type = "memory";
                reg = <0x0 0x80000000 0x2 0x00000000>;
        };
@@ -50,6 +50,8 @@
                                interrupt-parent = <&gpio>;
                                interrupts = <TEGRA186_MAIN_GPIO(M, 5)
                                              IRQ_TYPE_LEVEL_LOW>;
+
+                               #phy-cells = <0>;
                        };
                };
        };
        };
 
        /* SDMMC1 (SD/MMC) */
-       sdhci@3400000 {
+       mmc@3400000 {
                cd-gpios = <&gpio TEGRA186_MAIN_GPIO(P, 5) GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio TEGRA186_MAIN_GPIO(P, 4) GPIO_ACTIVE_HIGH>;
 
        };
 
        /* SDMMC3 (SDIO) */
-       sdhci@3440000 {
+       mmc@3440000 {
                status = "okay";
        };
 
        /* SDMMC4 (eMMC) */
-       sdhci@3460000 {
+       mmc@3460000 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                        reg = <0x50>;
 
                        vcc-supply = <&vdd_1v8>;
-                       address-bits = <8>;
-                       page-size = <8>;
+                       address-width = <8>;
+                       pagesize = <8>;
                        size = <256>;
                        read-only;
                };
                method = "smc";
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               gnd: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-
-                       regulator-name = "GND";
-                       regulator-min-microvolt = <0>;
-                       regulator-max-microvolt = <0>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
-
-               vdd_5v0_sys: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-
-                       regulator-name = "VDD_5V0_SYS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
+       gnd: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "GND";
+               regulator-min-microvolt = <0>;
+               regulator-max-microvolt = <0>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-               vdd_1v8_ap: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
+       vdd_5v0_sys: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_5V0_SYS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-                       regulator-name = "VDD_1V8_AP";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
+       vdd_1v8_ap: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_1V8_AP";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
 
-                       gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
+               gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
 
-                       vin-supply = <&vdd_1v8>;
-               };
+               vin-supply = <&vdd_1v8>;
        };
 };
index 58100fb..34d249d 100644 (file)
@@ -60,6 +60,9 @@
                clock-names = "master_bus", "slave_bus", "rx", "tx", "ptp_ref";
                resets = <&bpmp TEGRA186_RESET_EQOS>;
                reset-names = "eqos";
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_EQOSR &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_EQOSW &emc>;
+               interconnect-names = "dma-mem", "write";
                iommus = <&smmu TEGRA186_SID_EQOS>;
                status = "disabled";
 
                };
        };
 
-       memory-controller@2c00000 {
+       mc: memory-controller@2c00000 {
                compatible = "nvidia,tegra186-mc";
                reg = <0x0 0x02c00000 0x0 0xb0000>;
                interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>;
                status = "disabled";
 
+               #interconnect-cells = <1>;
                #address-cells = <2>;
                #size-cells = <2>;
 
                        clocks = <&bpmp TEGRA186_CLK_EMC>;
                        clock-names = "emc";
 
+                       #interconnect-cells = <0>;
+
                        nvidia,bpmp = <&bpmp>;
                };
        };
                status = "disabled";
        };
 
-       sdmmc1: sdhci@3400000 {
+       sdmmc1: mmc@3400000 {
                compatible = "nvidia,tegra186-sdhci";
                reg = <0x0 0x03400000 0x0 0x10000>;
                interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
                clock-names = "sdhci";
                resets = <&bpmp TEGRA186_RESET_SDMMC1>;
                reset-names = "sdhci";
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCRA &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_SDMMCWA &emc>;
+               interconnect-names = "dma-mem", "write";
                iommus = <&smmu TEGRA186_SID_SDMMC1>;
                pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
                pinctrl-0 = <&sdmmc1_3v3>;
                status = "disabled";
        };
 
-       sdmmc2: sdhci@3420000 {
+       sdmmc2: mmc@3420000 {
                compatible = "nvidia,tegra186-sdhci";
                reg = <0x0 0x03420000 0x0 0x10000>;
                interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
                clock-names = "sdhci";
                resets = <&bpmp TEGRA186_RESET_SDMMC2>;
                reset-names = "sdhci";
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCRAA &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_SDMMCWAA &emc>;
+               interconnect-names = "dma-mem", "write";
                iommus = <&smmu TEGRA186_SID_SDMMC2>;
                pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
                pinctrl-0 = <&sdmmc2_3v3>;
                status = "disabled";
        };
 
-       sdmmc3: sdhci@3440000 {
+       sdmmc3: mmc@3440000 {
                compatible = "nvidia,tegra186-sdhci";
                reg = <0x0 0x03440000 0x0 0x10000>;
                interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
                clock-names = "sdhci";
                resets = <&bpmp TEGRA186_RESET_SDMMC3>;
                reset-names = "sdhci";
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCR &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_SDMMCW &emc>;
+               interconnect-names = "dma-mem", "write";
                iommus = <&smmu TEGRA186_SID_SDMMC3>;
                pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
                pinctrl-0 = <&sdmmc3_3v3>;
                status = "disabled";
        };
 
-       sdmmc4: sdhci@3460000 {
+       sdmmc4: mmc@3460000 {
                compatible = "nvidia,tegra186-sdhci";
                reg = <0x0 0x03460000 0x0 0x10000>;
                interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
                assigned-clock-parents = <&bpmp TEGRA186_CLK_PLLC4_VCO>;
                resets = <&bpmp TEGRA186_RESET_SDMMC4>;
                reset-names = "sdhci";
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCRAB &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_SDMMCWAB &emc>;
+               interconnect-names = "dma-mem", "write";
                iommus = <&smmu TEGRA186_SID_SDMMC4>;
                nvidia,pad-autocal-pull-up-offset-hs400 = <0x05>;
                nvidia,pad-autocal-pull-down-offset-hs400 = <0x05>;
                         <&bpmp TEGRA186_RESET_HDA2CODEC_2X>;
                reset-names = "hda", "hda2hdmi", "hda2codec_2x";
                power-domains = <&bpmp TEGRA186_POWER_DOMAIN_DISP>;
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_HDAR &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_HDAW &emc>;
+               interconnect-names = "dma-mem", "write";
                iommus = <&smmu TEGRA186_SID_HDA>;
                status = "disabled";
        };
                      <0x0 0x03538000 0x0 0x1000>;
                reg-names = "hcd", "fpci";
                interrupts = <GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>,
-                            <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>,
-                            <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
+                            <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&bpmp TEGRA186_CLK_XUSB_HOST>,
                         <&bpmp TEGRA186_CLK_XUSB_FALCON>,
                         <&bpmp TEGRA186_CLK_XUSB_SS>,
                power-domains = <&bpmp TEGRA186_POWER_DOMAIN_XUSBC>,
                                <&bpmp TEGRA186_POWER_DOMAIN_XUSBA>;
                power-domain-names = "xusb_host", "xusb_ss";
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_XUSB_HOSTR &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_XUSB_HOSTW &emc>;
+               interconnect-names = "dma-mem", "write";
                iommus = <&smmu TEGRA186_SID_XUSB_HOST>;
                #address-cells = <1>;
                #size-cells = <0>;
                compatible = "nvidia,tegra186-pcie";
                power-domains = <&bpmp TEGRA186_POWER_DOMAIN_PCX>;
                device_type = "pci";
-               reg = <0x0 0x10003000 0x0 0x00000800   /* PADS registers */
-                      0x0 0x10003800 0x0 0x00000800   /* AFI registers */
-                      0x0 0x40000000 0x0 0x10000000>; /* configuration space */
+               reg = <0x0 0x10003000 0x0 0x00000800>, /* PADS registers */
+                     <0x0 0x10003800 0x0 0x00000800>, /* AFI registers */
+                     <0x0 0x40000000 0x0 0x10000000>; /* configuration space */
                reg-names = "pads", "afi", "cs";
 
                interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
                #address-cells = <3>;
                #size-cells = <2>;
 
-               ranges = <0x82000000 0 0x10000000 0x0 0x10000000 0 0x00001000   /* port 0 configuration space */
-                         0x82000000 0 0x10001000 0x0 0x10001000 0 0x00001000   /* port 1 configuration space */
-                         0x82000000 0 0x10004000 0x0 0x10004000 0 0x00001000   /* port 2 configuration space */
-                         0x81000000 0 0x0        0x0 0x50000000 0 0x00010000   /* downstream I/O (64 KiB) */
-                         0x82000000 0 0x50100000 0x0 0x50100000 0 0x07F00000   /* non-prefetchable memory (127 MiB) */
-                         0xc2000000 0 0x58000000 0x0 0x58000000 0 0x28000000>; /* prefetchable memory (640 MiB) */
+               ranges = <0x02000000 0 0x10000000 0x0 0x10000000 0 0x00001000>, /* port 0 configuration space */
+                        <0x02000000 0 0x10001000 0x0 0x10001000 0 0x00001000>,/* port 1 configuration space */
+                        <0x02000000 0 0x10004000 0x0 0x10004000 0 0x00001000>, /* port 2 configuration space */
+                        <0x01000000 0 0x0        0x0 0x50000000 0 0x00010000>, /* downstream I/O (64 KiB) */
+                        <0x02000000 0 0x50100000 0x0 0x50100000 0 0x07f00000>, /* non-prefetchable memory (127 MiB) */
+                        <0x42000000 0 0x58000000 0x0 0x58000000 0 0x28000000>; /* prefetchable memory (640 MiB) */
 
-               clocks = <&bpmp TEGRA186_CLK_AFI>,
-                        <&bpmp TEGRA186_CLK_PCIE>,
+               clocks = <&bpmp TEGRA186_CLK_PCIE>,
+                        <&bpmp TEGRA186_CLK_AFI>,
                         <&bpmp TEGRA186_CLK_PLLE>;
-               clock-names = "afi", "pex", "pll_e";
+               clock-names = "pex", "afi", "pll_e";
 
-               resets = <&bpmp TEGRA186_RESET_AFI>,
-                        <&bpmp TEGRA186_RESET_PCIE>,
+               resets = <&bpmp TEGRA186_RESET_PCIE>,
+                        <&bpmp TEGRA186_RESET_AFI>,
                         <&bpmp TEGRA186_RESET_PCIEXCLK>;
-               reset-names = "afi", "pex", "pcie_x";
+               reset-names = "pex", "afi", "pcie_x";
+
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_AFIR &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_AFIW &emc>;
+               interconnect-names = "dma-mem", "write";
 
                iommus = <&smmu TEGRA186_SID_AFI>;
                iommu-map = <0x0 &smmu TEGRA186_SID_AFI 0x1000>;
        };
 
        host1x@13e00000 {
-               compatible = "nvidia,tegra186-host1x", "simple-bus";
+               compatible = "nvidia,tegra186-host1x";
                reg = <0x0 0x13e00000 0x0 0x10000>,
                      <0x0 0x13e10000 0x0 0x10000>;
                reg-names = "hypervisor", "vm";
                interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-names = "syncpt", "host1x";
                clocks = <&bpmp TEGRA186_CLK_HOST1X>;
                clock-names = "host1x";
                resets = <&bpmp TEGRA186_RESET_HOST1X>;
                #size-cells = <1>;
 
                ranges = <0x15000000 0x0 0x15000000 0x01000000>;
+
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_HOST1XDMAR &emc>;
+               interconnect-names = "dma-mem";
+
                iommus = <&smmu TEGRA186_SID_HOST1X>;
 
                dpaux1: dpaux@15040000 {
                };
 
                display-hub@15200000 {
-                       compatible = "nvidia,tegra186-display", "simple-bus";
+                       compatible = "nvidia,tegra186-display";
                        reg = <0x15200000 0x00040000>;
                        resets = <&bpmp TEGRA186_RESET_NVDISPLAY0_MISC>,
                                 <&bpmp TEGRA186_RESET_NVDISPLAY0_WGRP0>,
                                reset-names = "dc";
 
                                power-domains = <&bpmp TEGRA186_POWER_DOMAIN_DISP>;
+                               interconnects = <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR &emc>,
+                                               <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
+                               interconnect-names = "dma-mem", "read-1";
                                iommus = <&smmu TEGRA186_SID_NVDISPLAY>;
 
                                nvidia,outputs = <&dsia &dsib &sor0 &sor1>;
                                reset-names = "dc";
 
                                power-domains = <&bpmp TEGRA186_POWER_DOMAIN_DISPB>;
+                               interconnects = <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR &emc>,
+                                               <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
+                               interconnect-names = "dma-mem", "read-1";
                                iommus = <&smmu TEGRA186_SID_NVDISPLAY>;
 
                                nvidia,outputs = <&dsia &dsib &sor0 &sor1>;
                                reset-names = "dc";
 
                                power-domains = <&bpmp TEGRA186_POWER_DOMAIN_DISPC>;
+                               interconnects = <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR &emc>,
+                                               <&mc TEGRA186_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
+                               interconnect-names = "dma-mem", "read-1";
                                iommus = <&smmu TEGRA186_SID_NVDISPLAY>;
 
                                nvidia,outputs = <&sor0 &sor1>;
                        reset-names = "vic";
 
                        power-domains = <&bpmp TEGRA186_POWER_DOMAIN_VIC>;
+                       interconnects = <&mc TEGRA186_MEMORY_CLIENT_VICSRD &emc>,
+                                       <&mc TEGRA186_MEMORY_CLIENT_VICSWR &emc>;
+                       interconnect-names = "dma-mem", "write";
                        iommus = <&smmu TEGRA186_SID_VIC>;
                };
 
                compatible = "nvidia,gp10b";
                reg = <0x0 0x17000000 0x0 0x1000000>,
                      <0x0 0x18000000 0x0 0x1000000>;
-               interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH
-                             GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
+               interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
+                            <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
                interrupt-names = "stall", "nonstall";
 
                clocks = <&bpmp TEGRA186_CLK_GPCCLK>,
                status = "disabled";
 
                power-domains = <&bpmp TEGRA186_POWER_DOMAIN_GPU>;
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_GPUSRD &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_GPUSWR &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_GPUSRD2 &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_GPUSWR2 &emc>;
+               interconnect-names = "dma-mem", "write-0", "read-1", "write-1";
        };
 
-       sysram@30000000 {
+       sram@30000000 {
                compatible = "nvidia,tegra186-sysram", "mmio-sram";
                reg = <0x0 0x30000000 0x0 0x50000>;
-               #address-cells = <2>;
-               #size-cells = <2>;
-               ranges = <0 0x0 0x0 0x30000000 0x0 0x50000>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0x0 0x0 0x30000000 0x50000>;
 
-               cpu_bpmp_tx: shmem@4e000 {
-                       compatible = "nvidia,tegra186-bpmp-shmem";
-                       reg = <0x0 0x4e000 0x0 0x1000>;
+               cpu_bpmp_tx: sram@4e000 {
+                       reg = <0x4e000 0x1000>;
                        label = "cpu-bpmp-tx";
                        pool;
                };
 
-               cpu_bpmp_rx: shmem@4f000 {
-                       compatible = "nvidia,tegra186-bpmp-shmem";
-                       reg = <0x0 0x4f000 0x0 0x1000>;
+               cpu_bpmp_rx: sram@4f000 {
+                       reg = <0x4f000 0x1000>;
                        label = "cpu-bpmp-rx";
                        pool;
                };
 
        bpmp: bpmp {
                compatible = "nvidia,tegra186-bpmp";
+               interconnects = <&mc TEGRA186_MEMORY_CLIENT_BPMPR &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_BPMPW &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAR &emc>,
+                               <&mc TEGRA186_MEMORY_CLIENT_BPMPDMAW &emc>;
+               interconnect-names = "read", "write", "dma-mem", "dma-write";
                iommus = <&smmu TEGRA186_SID_BPMP>;
                mboxes = <&hsp_top0 TEGRA_HSP_MBOX_TYPE_DB
                                    TEGRA_HSP_DB_MASTER_BPMP>;
index b96eb4e..4c005b8 100644 (file)
@@ -8,18 +8,18 @@
        compatible = "nvidia,p2888", "nvidia,tegra194";
 
        aliases {
-               ethernet0 = "/cbb@0/ethernet@2490000";
-               sdhci0 = "/cbb@0/sdhci@3460000";
-               sdhci1 = "/cbb@0/sdhci@3400000";
-               serial0 = &tcu;
+               ethernet0 = "/bus@0/ethernet@2490000";
                i2c0 = "/bpmp/i2c";
-               i2c1 = "/cbb@0/i2c@3160000";
-               i2c2 = "/cbb@0/i2c@c240000";
-               i2c3 = "/cbb@0/i2c@3180000";
-               i2c4 = "/cbb@0/i2c@3190000";
-               i2c5 = "/cbb@0/i2c@31c0000";
-               i2c6 = "/cbb@0/i2c@c250000";
-               i2c7 = "/cbb@0/i2c@31e0000";
+               i2c1 = "/bus@0/i2c@3160000";
+               i2c2 = "/bus@0/i2c@c240000";
+               i2c3 = "/bus@0/i2c@3180000";
+               i2c4 = "/bus@0/i2c@3190000";
+               i2c5 = "/bus@0/i2c@31c0000";
+               i2c6 = "/bus@0/i2c@c250000";
+               i2c7 = "/bus@0/i2c@31e0000";
+               mmc0 = "/bus@0/mmc@3460000";
+               mmc1 = "/bus@0/mmc@3400000";
+               serial0 = &tcu;
        };
 
        chosen {
@@ -27,7 +27,7 @@
                stdout-path = "serial0:115200n8";
        };
 
-       cbb@0 {
+       bus@0 {
                ethernet@2490000 {
                        status = "okay";
 
@@ -44,6 +44,7 @@
                                        reg = <0x0>;
                                        interrupt-parent = <&gpio>;
                                        interrupts = <TEGRA194_MAIN_GPIO(G, 4) IRQ_TYPE_LEVEL_LOW>;
+                                       #phy-cells = <0>;
                                };
                        };
                };
                };
 
                /* SDMMC1 (SD/MMC) */
-               sdhci@3400000 {
+               mmc@3400000 {
                        cd-gpios = <&gpio TEGRA194_MAIN_GPIO(A, 0) GPIO_ACTIVE_LOW>;
                };
 
                /* SDMMC4 (eMMC) */
-               sdhci@3460000 {
+               mmc@3460000 {
                        status = "okay";
                        bus-width = <8>;
                        non-removable;
                };
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_5v0_sys: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-
-                       regulator-name = "VIN_SYS_5V0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
-
-               vdd_hdmi: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-
-                       regulator-name = "VDD_5V0_HDMI_CON";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA194_MAIN_GPIO(A, 3) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
-
-               vdd_3v3_pcie: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-
-                       regulator-name = "PEX_3V3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       gpio = <&gpio TEGRA194_MAIN_GPIO(Z, 2) GPIO_ACTIVE_HIGH>;
-                       regulator-boot-on;
-                       enable-active-high;
-               };
+       vdd_5v0_sys: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "VIN_SYS_5V0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-               vdd_12v_pcie: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
+       vdd_hdmi: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_5V0_HDMI_CON";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA194_MAIN_GPIO(A, 3) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-                       regulator-name = "VDD_12V";
-                       regulator-min-microvolt = <1200000>;
-                       regulator-max-microvolt = <1200000>;
-                       gpio = <&gpio TEGRA194_MAIN_GPIO(A, 1) GPIO_ACTIVE_HIGH>;
-                       regulator-boot-on;
-               };
+       vdd_3v3_pcie: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "PEX_3V3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&gpio TEGRA194_MAIN_GPIO(Z, 2) GPIO_ACTIVE_HIGH>;
+               regulator-boot-on;
+               enable-active-high;
+       };
 
-               vdd_5v_sata: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
+       vdd_12v_pcie: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_12V";
+               regulator-min-microvolt = <1200000>;
+               regulator-max-microvolt = <1200000>;
+               gpio = <&gpio TEGRA194_MAIN_GPIO(A, 1) GPIO_ACTIVE_HIGH>;
+               regulator-boot-on;
+       };
 
-                       regulator-name = "VDD_5V_SATA";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA194_MAIN_GPIO(Z, 1) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vdd_5v_sata: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_5V_SATA";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA194_MAIN_GPIO(Z, 1) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
        };
 };
index e15d1ea..90b6ea5 100644 (file)
@@ -10,7 +10,7 @@
        model = "NVIDIA Jetson AGX Xavier Developer Kit";
        compatible = "nvidia,p2972-0000", "nvidia,tegra194";
 
-       cbb@0 {
+       bus@0 {
                aconnect@2900000 {
                        status = "okay";
 
@@ -28,7 +28,7 @@
                };
 
                /* SDMMC1 (SD/MMC) */
-               sdhci@3400000 {
+               mmc@3400000 {
                        status = "okay";
                };
 
                usb@3610000 {
                        status = "okay";
 
-                       phys =  <&{/cbb@0/padctl@3520000/pads/usb2/lanes/usb2-1}>,
-                               <&{/cbb@0/padctl@3520000/pads/usb2/lanes/usb2-3}>,
-                               <&{/cbb@0/padctl@3520000/pads/usb3/lanes/usb3-0}>,
-                               <&{/cbb@0/padctl@3520000/pads/usb3/lanes/usb3-3}>;
+                       phys =  <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-1}>,
+                               <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-3}>,
+                               <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-0}>,
+                               <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-3}>;
                        phy-names = "usb2-1", "usb2-3", "usb3-0", "usb3-3";
                };
 
                        sor@15b80000 {
                                status = "okay";
 
-                               avdd-io-supply = <&vdd_1v0>;
-                               vdd-pll-supply = <&vdd_1v8hs>;
+                               avdd-io-hdmi-dp-supply = <&vdd_1v0>;
+                               vdd-hdmi-dp-pll-supply = <&vdd_1v8hs>;
                                hdmi-supply = <&vdd_hdmi>;
 
                                nvidia,ddc-i2c-bus = <&ddc>;
diff --git a/arch/arm64/boot/dts/nvidia/tegra194-p3509-0000+p3668-0000.dts b/arch/arm64/boot/dts/nvidia/tegra194-p3509-0000+p3668-0000.dts
new file mode 100644 (file)
index 0000000..c1c5898
--- /dev/null
@@ -0,0 +1,331 @@
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+
+#include <dt-bindings/input/linux-event-codes.h>
+#include <dt-bindings/input/gpio-keys.h>
+
+#include "tegra194-p3668-0000.dtsi"
+
+/ {
+       model = "NVIDIA Jetson Xavier NX Developer Kit";
+       compatible = "nvidia,p3509-0000+p3668-0000", "nvidia,tegra194";
+
+       bus@0 {
+               aconnect@2900000 {
+                       status = "okay";
+
+                       dma-controller@2930000 {
+                               status = "okay";
+                       };
+
+                       interrupt-controller@2a40000 {
+                               status = "okay";
+                       };
+               };
+
+               ddc: i2c@3190000 {
+                       status = "okay";
+               };
+
+               hda@3510000 {
+                       nvidia,model = "jetson-xavier-nx-hda";
+                       status = "okay";
+               };
+
+               padctl@3520000 {
+                       status = "okay";
+
+                       pads {
+                               usb2 {
+                                       lanes {
+                                               usb2-1 {
+                                                       status = "okay";
+                                               };
+
+                                               usb2-2 {
+                                                       status = "okay";
+                                               };
+                                       };
+                               };
+
+                               usb3 {
+                                       lanes {
+                                               usb3-2 {
+                                                       status = "okay";
+                                               };
+                                       };
+                               };
+                       };
+
+                       ports {
+                               usb2-1 {
+                                       mode = "host";
+                                       status = "okay";
+                               };
+
+                               usb2-2 {
+                                       mode = "host";
+                                       vbus-supply = <&vdd_5v0_sys>;
+                                       status = "okay";
+                               };
+
+                               usb3-2 {
+                                       nvidia,usb2-companion = <1>;
+                                       vbus-supply = <&vdd_5v0_sys>;
+                                       status = "okay";
+                               };
+                       };
+               };
+
+               usb@3610000 {
+                       status = "okay";
+
+                       phys =  <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-1}>,
+                               <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-2}>,
+                               <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-2}>;
+                       phy-names = "usb2-1", "usb2-2", "usb3-2";
+               };
+
+               pwm@32d0000 {
+                       status = "okay";
+               };
+
+               host1x@13e00000 {
+                       display-hub@15200000 {
+                               status = "okay";
+                       };
+
+                       dpaux@155c0000 {
+                               status = "okay";
+                       };
+
+                       dpaux@155d0000 {
+                               status = "okay";
+                       };
+
+                       /* DP0 */
+                       sor@15b00000 {
+                               status = "okay";
+
+                               avdd-io-hdmi-dp-supply = <&vdd_1v0>;
+                               vdd-hdmi-dp-pll-supply = <&vdd_1v8hs>;
+
+                               nvidia,dpaux = <&dpaux0>;
+                       };
+
+                       /* HDMI */
+                       sor@15b40000 {
+                               status = "okay";
+
+                               avdd-io-hdmi-dp-supply = <&vdd_1v0>;
+                               vdd-hdmi-dp-pll-supply = <&vdd_1v8hs>;
+                               hdmi-supply = <&vdd_hdmi>;
+
+                               nvidia,ddc-i2c-bus = <&ddc>;
+                               nvidia,hpd-gpio = <&gpio TEGRA194_MAIN_GPIO(M, 1)
+                                                        GPIO_ACTIVE_LOW>;
+                       };
+               };
+       };
+
+       pcie@14160000 {
+               status = "okay";
+
+               vddio-pex-ctl-supply = <&vdd_1v8ao>;
+
+               phys = <&p2u_hsio_11>;
+               phy-names = "p2u-0";
+       };
+
+       pcie@141a0000 {
+               status = "okay";
+
+               vddio-pex-ctl-supply = <&vdd_1v8ao>;
+
+               phys = <&p2u_nvhs_0>, <&p2u_nvhs_1>, <&p2u_nvhs_2>,
+                      <&p2u_nvhs_3>, <&p2u_nvhs_4>, <&p2u_nvhs_5>,
+                      <&p2u_nvhs_6>, <&p2u_nvhs_7>;
+
+               phy-names = "p2u-0", "p2u-1", "p2u-2", "p2u-3", "p2u-4",
+                           "p2u-5", "p2u-6", "p2u-7";
+       };
+
+       pcie_ep@141a0000 {
+               status = "disabled";
+
+               vddio-pex-ctl-supply = <&vdd_1v8ao>;
+
+               reset-gpios = <&gpio TEGRA194_MAIN_GPIO(GG, 1) GPIO_ACTIVE_LOW>;
+
+               nvidia,refclk-select-gpios = <&gpio_aon TEGRA194_AON_GPIO(AA, 5)
+                                             GPIO_ACTIVE_HIGH>;
+
+               phys = <&p2u_nvhs_0>, <&p2u_nvhs_1>, <&p2u_nvhs_2>,
+                      <&p2u_nvhs_3>, <&p2u_nvhs_4>, <&p2u_nvhs_5>,
+                      <&p2u_nvhs_6>, <&p2u_nvhs_7>;
+
+               phy-names = "p2u-0", "p2u-1", "p2u-2", "p2u-3", "p2u-4",
+                           "p2u-5", "p2u-6", "p2u-7";
+       };
+
+       fan: fan {
+               compatible = "pwm-fan";
+               pwms = <&pwm6 0 45334>;
+
+               cooling-levels = <0 64 128 255>;
+               #cooling-cells = <2>;
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+
+               force-recovery {
+                       label = "Force Recovery";
+                       gpios = <&gpio TEGRA194_MAIN_GPIO(G, 0)
+                                      GPIO_ACTIVE_LOW>;
+                       linux,input-type = <EV_KEY>;
+                       linux,code = <KEY_SLEEP>;
+                       debounce-interval = <10>;
+               };
+
+               power {
+                       label = "Power";
+                       gpios = <&gpio_aon TEGRA194_AON_GPIO(EE, 4)
+                                          GPIO_ACTIVE_LOW>;
+                       linux,input-type = <EV_KEY>;
+                       linux,code = <KEY_POWER>;
+                       debounce-interval = <10>;
+                       wakeup-event-action = <EV_ACT_ASSERTED>;
+                       wakeup-source;
+               };
+       };
+
+       vdd_5v0_sys: regulator@100 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_5V_SYS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_3v3_sys: regulator@101 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_3V3_SYS";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_3v3_ao: regulator@102 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_3V3_AO";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_1v8: regulator@103 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_1V8";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_hdmi: regulator@104 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_5V0_HDMI_CON";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       thermal-zones {
+               cpu {
+                       polling-delay = <0>;
+                       polling-delay-passive = <500>;
+                       status = "okay";
+
+                       trips {
+                               cpu_trip_critical: critical {
+                                       temperature = <96500>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+
+                               cpu_trip_hot: hot {
+                                       temperature = <70000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+
+                               cpu_trip_active: active {
+                                       temperature = <50000>;
+                                       hysteresis = <2000>;
+                                       type = "active";
+                               };
+
+                               cpu_trip_passive: passive {
+                                       temperature = <30000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+                       };
+
+                       cooling-maps {
+                               cpu-critical {
+                                       cooling-device = <&fan 3 3>;
+                                       trip = <&cpu_trip_critical>;
+                               };
+
+                               cpu-hot {
+                                       cooling-device = <&fan 2 2>;
+                                       trip = <&cpu_trip_hot>;
+                               };
+
+                               cpu-active {
+                                       cooling-device = <&fan 1 1>;
+                                       trip = <&cpu_trip_active>;
+                               };
+
+                               cpu-passive {
+                                       cooling-device = <&fan 0 0>;
+                                       trip = <&cpu_trip_passive>;
+                               };
+                       };
+               };
+
+               gpu {
+                       polling-delay = <0>;
+                       polling-delay-passive = <500>;
+                       status = "okay";
+
+                       trips {
+                               gpu_alert0: critical {
+                                       temperature = <99000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               aux {
+                       polling-delay = <0>;
+                       polling-delay-passive = <500>;
+                       status = "okay";
+
+                       trips {
+                               aux_alert0: critical {
+                                       temperature = <90000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+                       };
+               };
+       };
+};
diff --git a/arch/arm64/boot/dts/nvidia/tegra194-p3668-0000.dtsi b/arch/arm64/boot/dts/nvidia/tegra194-p3668-0000.dtsi
new file mode 100644 (file)
index 0000000..10cb836
--- /dev/null
@@ -0,0 +1,290 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "tegra194.dtsi"
+
+#include <dt-bindings/mfd/max77620.h>
+
+/ {
+       model = "NVIDIA Jetson Xavier NX";
+       compatible = "nvidia,p3668-0000", "nvidia,tegra194";
+
+       aliases {
+               ethernet0 = "/bus@0/ethernet@2490000";
+               i2c0 = "/bpmp/i2c";
+               i2c1 = "/bus@0/i2c@3160000";
+               i2c2 = "/bus@0/i2c@c240000";
+               i2c3 = "/bus@0/i2c@3180000";
+               i2c4 = "/bus@0/i2c@3190000";
+               i2c5 = "/bus@0/i2c@31c0000";
+               i2c6 = "/bus@0/i2c@c250000";
+               i2c7 = "/bus@0/i2c@31e0000";
+               mmc0 = "/bus@0/mmc@3460000";
+               rtc0 = "/bpmp/i2c/pmic@3c";
+               rtc1 = "/bus@0/rtc@c2a0000";
+               serial0 = &tcu;
+       };
+
+       chosen {
+               bootargs = "console=ttyS0,115200n8";
+               stdout-path = "serial0:115200n8";
+       };
+
+       bus@0 {
+               ethernet@2490000 {
+                       status = "okay";
+
+                       phy-reset-gpios = <&gpio TEGRA194_MAIN_GPIO(R, 1) GPIO_ACTIVE_LOW>;
+                       phy-handle = <&phy>;
+                       phy-mode = "rgmii-id";
+
+                       mdio {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               phy: phy@0 {
+                                       compatible = "ethernet-phy-ieee802.3-c22";
+                                       reg = <0x0>;
+                                       interrupt-parent = <&gpio>;
+                                       interrupts = <TEGRA194_MAIN_GPIO(G, 4) IRQ_TYPE_LEVEL_LOW>;
+                                       #phy-cells = <0>;
+                               };
+                       };
+               };
+
+               memory-controller@2c00000 {
+                       status = "okay";
+               };
+
+               serial@c280000 {
+                       status = "okay";
+               };
+
+               /* SDMMC1 (SD/MMC) */
+               mmc@3400000 {
+                       status = "okay";
+                       bus-width = <4>;
+                       cd-gpios = <&gpio TEGRA194_MAIN_GPIO(G, 7) GPIO_ACTIVE_LOW>;
+                       disable-wp;
+                       vmmc-supply = <&vdd_3v3_sd>;
+               };
+
+               padctl@3520000 {
+                       avdd-usb-supply = <&vdd_usb_3v3>;
+                       vclamp-usb-supply = <&vdd_1v8ao>;
+
+                       ports {
+                               usb2-1 {
+                                       vbus-supply = <&vdd_5v0_sys>;
+                               };
+
+                               usb2-3 {
+                                       vbus-supply = <&vdd_5v0_sys>;
+                               };
+
+                               usb3-0 {
+                                       vbus-supply = <&vdd_5v0_sys>;
+                               };
+
+                               usb3-3 {
+                                       vbus-supply = <&vdd_5v0_sys>;
+                               };
+                       };
+               };
+
+               rtc@c2a0000 {
+                       status = "okay";
+               };
+
+               pmc@c360000 {
+                       nvidia,invert-interrupt;
+               };
+       };
+
+       bpmp {
+               i2c {
+                       status = "okay";
+
+                       pmic: pmic@3c {
+                               compatible = "maxim,max20024";
+                               reg = <0x3c>;
+
+                               interrupt-parent = <&pmc>;
+                               interrupts = <24 IRQ_TYPE_LEVEL_LOW>;
+                               #interrupt-cells = <2>;
+                               interrupt-controller;
+
+                               #gpio-cells = <2>;
+                               gpio-controller;
+
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&max20024_default>;
+
+                               max20024_default: pinmux {
+                                       gpio0 {
+                                               pins = "gpio0";
+                                               function = "gpio";
+                                       };
+
+                                       gpio1 {
+                                               pins = "gpio1";
+                                               function = "fps-out";
+                                               maxim,active-fps-source = <MAX77620_FPS_SRC_DEF>;
+                                       };
+
+                                       gpio2 {
+                                               pins = "gpio2";
+                                               function = "fps-out";
+                                               maxim,active-fps-source = <MAX77620_FPS_SRC_DEF>;
+                                       };
+
+                                       gpio3 {
+                                               pins = "gpio3";
+                                               function = "fps-out";
+                                               maxim,active-fps-source = <MAX77620_FPS_SRC_DEF>;
+                                       };
+
+                                       gpio4 {
+                                               pins = "gpio4";
+                                               function = "32k-out1";
+                                               drive-push-pull = <1>;
+                                       };
+
+                                       gpio6 {
+                                               pins = "gpio6";
+                                               function = "gpio";
+                                               drive-push-pull = <1>;
+                                       };
+
+                                       gpio7 {
+                                               pins = "gpio7";
+                                               function = "gpio";
+                                               drive-push-pull = <0>;
+                                       };
+                               };
+
+                               fps {
+                                       fps0 {
+                                               maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN0>;
+                                               maxim,shutdown-fps-time-period-us = <640>;
+                                       };
+
+                                       fps1 {
+                                               maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN1>;
+                                               maxim,shutdown-fps-time-period-us = <640>;
+                                               maxim,device-state-on-disabled-event = <MAX77620_FPS_INACTIVE_STATE_SLEEP>;
+                                       };
+
+                                       fps2 {
+                                               maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN0>;
+                                               maxim,shutdown-fps-time-period-us = <640>;
+                                       };
+                               };
+
+                               regulators {
+                                       in-sd0-supply = <&vdd_5v0_sys>;
+                                       in-sd1-supply = <&vdd_5v0_sys>;
+                                       in-sd2-supply = <&vdd_5v0_sys>;
+                                       in-sd3-supply = <&vdd_5v0_sys>;
+                                       in-sd4-supply = <&vdd_5v0_sys>;
+
+                                       in-ldo0-1-supply = <&vdd_5v0_sys>;
+                                       in-ldo2-supply = <&vdd_5v0_sys>;
+                                       in-ldo3-5-supply = <&vdd_5v0_sys>;
+                                       in-ldo4-6-supply = <&vdd_5v0_sys>;
+                                       in-ldo7-8-supply = <&vdd_1v8ls>;
+
+                                       vdd_1v0: sd0 {
+                                               regulator-name = "VDDIO_SYS_1V0";
+                                               regulator-min-microvolt = <1000000>;
+                                               regulator-max-microvolt = <1000000>;
+                                               regulator-always-on;
+                                               regulator-boot-on;
+                                       };
+
+                                       vdd_1v8hs: sd1 {
+                                               regulator-name = "VDDIO_SYS_1V8HS";
+                                               regulator-min-microvolt = <1800000>;
+                                               regulator-max-microvolt = <1800000>;
+                                               regulator-always-on;
+                                               regulator-boot-on;
+                                       };
+
+                                       vdd_1v8ls: sd2 {
+                                               regulator-name = "VDDIO_SYS_1V8LS";
+                                               regulator-min-microvolt = <1800000>;
+                                               regulator-max-microvolt = <1800000>;
+                                               regulator-always-on;
+                                               regulator-boot-on;
+                                       };
+
+                                       vdd_1v8ao: sd3 {
+                                               regulator-name = "VDDIO_AO_1V8";
+                                               regulator-min-microvolt = <1800000>;
+                                               regulator-max-microvolt = <1800000>;
+                                               regulator-always-on;
+                                               regulator-boot-on;
+                                       };
+
+                                       sd4 {
+                                               regulator-name = "VDD_DDR_1V1";
+                                               regulator-min-microvolt = <1100000>;
+                                               regulator-max-microvolt = <1100000>;
+                                               regulator-always-on;
+                                               regulator-boot-on;
+                                       };
+
+                                       ldo0 {
+                                               regulator-name = "VDD_RTC";
+                                               regulator-min-microvolt = <800000>;
+                                               regulator-max-microvolt = <800000>;
+                                               regulator-always-on;
+                                               regulator-boot-on;
+                                       };
+
+                                       ldo2 {
+                                               regulator-name = "VDDIO_AO_3V3";
+                                               regulator-min-microvolt = <3300000>;
+                                               regulator-max-microvolt = <3300000>;
+                                               regulator-always-on;
+                                               regulator-boot-on;
+                                       };
+
+                                       ldo3 {
+                                               regulator-name = "VDD_EMMC_3V3";
+                                               regulator-min-microvolt = <3300000>;
+                                               regulator-max-microvolt = <3300000>;
+                                       };
+
+                                       vdd_usb_3v3: ldo5 {
+                                               regulator-name = "VDD_USB_3V3";
+                                               regulator-min-microvolt = <3300000>;
+                                               regulator-max-microvolt = <3300000>;
+                                               regulator-always-on;
+                                               regulator-boot-on;
+                                       };
+
+                                       ldo6 {
+                                               regulator-name = "VDD_SDIO_3V3";
+                                               regulator-min-microvolt = <3300000>;
+                                               regulator-max-microvolt = <3300000>;
+                                       };
+
+                                       ldo7 {
+                                               regulator-name = "AVDD_CSI_1V2";
+                                               regulator-min-microvolt = <1200000>;
+                                               regulator-max-microvolt = <1200000>;
+                                       };
+                               };
+                       };
+               };
+       };
+
+       vdd_3v3_sd: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_3V3_SD";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&gpio TEGRA194_MAIN_GPIO(G, 2) GPIO_ACTIVE_HIGH>;
+               regulator-boot-on;
+               enable-active-high;
+       };
+};
index 4bc187a..48160f4 100644 (file)
@@ -16,7 +16,7 @@
        #size-cells = <2>;
 
        /* control backbone */
-       cbb@0 {
+       bus@0 {
                compatible = "simple-bus";
                #address-cells = <1>;
                #size-cells = <1>;
@@ -59,6 +59,9 @@
                        clock-names = "master_bus", "slave_bus", "rx", "tx", "ptp_ref";
                        resets = <&bpmp TEGRA194_RESET_EQOS>;
                        reset-names = "eqos";
+                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_EQOSR &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_EQOSW &emc>;
+                       interconnect-names = "dma-mem", "write";
                        status = "disabled";
 
                        snps,write-requests = <1>;
 
                pinmux: pinmux@2430000 {
                        compatible = "nvidia,tegra194-pinmux";
-                       reg = <0x2430000 0x17000
-                              0xc300000 0x4000>;
+                       reg = <0x2430000 0x17000>,
+                             <0xc300000 0x4000>;
 
                        status = "okay";
 
                        reg = <0x02c00000 0x100000>,
                              <0x02b80000 0x040000>,
                              <0x01700000 0x100000>;
+                       interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>;
+                       #interconnect-cells = <1>;
                        status = "disabled";
 
                        #address-cells = <2>;
                                clocks = <&bpmp TEGRA194_CLK_EMC>;
                                clock-names = "emc";
 
+                               #interconnect-cells = <0>;
+
                                nvidia,bpmp = <&bpmp>;
                        };
                };
                        #pwm-cells = <2>;
                };
 
-               sdmmc1: sdhci@3400000 {
-                       compatible = "nvidia,tegra194-sdhci", "nvidia,tegra186-sdhci";
+               sdmmc1: mmc@3400000 {
+                       compatible = "nvidia,tegra194-sdhci";
                        reg = <0x03400000 0x10000>;
                        interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&bpmp TEGRA194_CLK_SDMMC1>;
                        clock-names = "sdhci";
                        resets = <&bpmp TEGRA194_RESET_SDMMC1>;
                        reset-names = "sdhci";
+                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_SDMMCRA &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_SDMMCWA &emc>;
+                       interconnect-names = "dma-mem", "write";
                        nvidia,pad-autocal-pull-up-offset-3v3-timeout =
                                                                        <0x07>;
                        nvidia,pad-autocal-pull-down-offset-3v3-timeout =
                        status = "disabled";
                };
 
-               sdmmc3: sdhci@3440000 {
-                       compatible = "nvidia,tegra194-sdhci", "nvidia,tegra186-sdhci";
+               sdmmc3: mmc@3440000 {
+                       compatible = "nvidia,tegra194-sdhci";
                        reg = <0x03440000 0x10000>;
                        interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&bpmp TEGRA194_CLK_SDMMC3>;
                        clock-names = "sdhci";
                        resets = <&bpmp TEGRA194_RESET_SDMMC3>;
                        reset-names = "sdhci";
+                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_SDMMCR &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_SDMMCW &emc>;
+                       interconnect-names = "dma-mem", "write";
                        nvidia,pad-autocal-pull-up-offset-1v8 = <0x00>;
                        nvidia,pad-autocal-pull-down-offset-1v8 = <0x7a>;
                        nvidia,pad-autocal-pull-up-offset-3v3-timeout = <0x07>;
                        status = "disabled";
                };
 
-               sdmmc4: sdhci@3460000 {
-                       compatible = "nvidia,tegra194-sdhci", "nvidia,tegra186-sdhci";
+               sdmmc4: mmc@3460000 {
+                       compatible = "nvidia,tegra194-sdhci";
                        reg = <0x03460000 0x10000>;
                        interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&bpmp TEGRA194_CLK_SDMMC4>;
                                          <&bpmp TEGRA194_CLK_PLLC4>;
                        resets = <&bpmp TEGRA194_RESET_SDMMC4>;
                        reset-names = "sdhci";
+                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_SDMMCRAB &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_SDMMCWAB &emc>;
+                       interconnect-names = "dma-mem", "write";
                        nvidia,pad-autocal-pull-up-offset-hs400 = <0x00>;
                        nvidia,pad-autocal-pull-down-offset-hs400 = <0x00>;
                        nvidia,pad-autocal-pull-up-offset-1v8-timeout = <0x0a>;
                                 <&bpmp TEGRA194_RESET_HDA2HDMICODEC>;
                        reset-names = "hda", "hda2codec_2x", "hda2hdmi";
                        power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_HDAR &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_HDAW &emc>;
+                       interconnect-names = "dma-mem", "write";
                        status = "disabled";
                };
 
                        reg-names = "hcd", "fpci";
 
                        interrupts = <GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
+                                    <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
 
                        clocks = <&bpmp TEGRA194_CLK_XUSB_CORE_HOST>,
                                 <&bpmp TEGRA194_CLK_XUSB_FALCON>,
                        reg-names = "security", "gpio";
                        reg = <0xc2f0000 0x1000>,
                              <0xc2f1000 0x1000>;
-                       interrupts = <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>;
+                       interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>;
                        gpio-controller;
                        #gpio-cells = <2>;
                        interrupt-controller;
                };
 
                host1x@13e00000 {
-                       compatible = "nvidia,tegra194-host1x", "simple-bus";
+                       compatible = "nvidia,tegra194-host1x";
                        reg = <0x13e00000 0x10000>,
                              <0x13e10000 0x10000>;
                        reg-names = "hypervisor", "vm";
                        interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "syncpt", "host1x";
                        clocks = <&bpmp TEGRA194_CLK_HOST1X>;
                        clock-names = "host1x";
                        resets = <&bpmp TEGRA194_RESET_HOST1X>;
                        #size-cells = <1>;
 
                        ranges = <0x15000000 0x15000000 0x01000000>;
+                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_HOST1XDMAR &emc>;
+                       interconnect-names = "dma-mem";
 
                        display-hub@15200000 {
-                               compatible = "nvidia,tegra194-display", "simple-bus";
+                               compatible = "nvidia,tegra194-display";
                                reg = <0x15200000 0x00040000>;
                                resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_MISC>,
                                         <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP0>,
                                        reset-names = "dc";
 
                                        power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+                                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR &emc>,
+                                                       <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
+                                       interconnect-names = "dma-mem", "read-1";
 
                                        nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
                                        nvidia,head = <0>;
                                        reset-names = "dc";
 
                                        power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISPB>;
+                                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR &emc>,
+                                                       <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
+                                       interconnect-names = "dma-mem", "read-1";
 
                                        nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
                                        nvidia,head = <1>;
                                        reset-names = "dc";
 
                                        power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISPC>;
+                                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR &emc>,
+                                                       <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
+                                       interconnect-names = "dma-mem", "read-1";
 
                                        nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
                                        nvidia,head = <2>;
                                        reset-names = "dc";
 
                                        power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISPC>;
+                                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR &emc>,
+                                                       <&mc TEGRA194_MEMORY_CLIENT_NVDISPLAYR1 &emc>;
+                                       interconnect-names = "dma-mem", "read-1";
 
                                        nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
                                        nvidia,head = <3>;
                                reset-names = "vic";
 
                                power-domains = <&bpmp TEGRA194_POWER_DOMAIN_VIC>;
+                               interconnects = <&mc TEGRA194_MEMORY_CLIENT_VICSRD &emc>,
+                                               <&mc TEGRA194_MEMORY_CLIENT_VICSWR &emc>;
+                               interconnect-names = "dma-mem", "write";
                        };
 
                        dpaux0: dpaux@155c0000 {
                                nvidia,interface = <3>;
                        };
                };
+
+               gpu@17000000 {
+                       compatible = "nvidia,gv11b";
+                       reg = <0x17000000 0x10000000>,
+                             <0x18000000 0x10000000>;
+                       interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "stall", "nonstall";
+                       clocks = <&bpmp TEGRA194_CLK_GPCCLK>,
+                                <&bpmp TEGRA194_CLK_GPU_PWR>,
+                                <&bpmp TEGRA194_CLK_FUSE>;
+                       clock-names = "gpu", "pwr", "fuse";
+                       resets = <&bpmp TEGRA194_RESET_GPU>;
+                       reset-names = "gpu";
+                       dma-coherent;
+
+                       power-domains = <&bpmp TEGRA194_POWER_DOMAIN_GPU>;
+                       interconnects = <&mc TEGRA194_MEMORY_CLIENT_NVL1R &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL1RHP &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL1W &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL2R &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL2RHP &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL2W &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL3R &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL3RHP &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL3W &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL4R &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL4RHP &emc>,
+                                       <&mc TEGRA194_MEMORY_CLIENT_NVL4W &emc>;
+                       interconnect-names = "dma-mem", "read-0-hp", "write-0",
+                                            "read-1", "read-1-hp", "write-1",
+                                            "read-2", "read-2-hp", "write-2",
+                                            "read-3", "read-3-hp", "write-3";
+               };
        };
 
        pcie@14100000 {
                compatible = "nvidia,tegra194-pcie";
                power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX1A>;
-               reg = <0x00 0x14100000 0x0 0x00020000   /* appl registers (128K)      */
-                      0x00 0x30000000 0x0 0x00040000   /* configuration space (256K) */
-                      0x00 0x30040000 0x0 0x00040000   /* iATU_DMA reg space (256K)  */
-                      0x00 0x30080000 0x0 0x00040000>; /* DBI reg space (256K)       */
+               reg = <0x00 0x14100000 0x0 0x00020000>, /* appl registers (128K)      */
+                     <0x00 0x30000000 0x0 0x00040000>, /* configuration space (256K) */
+                     <0x00 0x30040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
+                     <0x00 0x30080000 0x0 0x00040000>; /* DBI reg space (256K)       */
                reg-names = "appl", "config", "atu_dma", "dbi";
 
                status = "disabled";
                         <&bpmp TEGRA194_RESET_PEX0_CORE_1>;
                reset-names = "apb", "core";
 
-               interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>,  /* controller interrupt */
-                            <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;  /* MSI interrupt */
+               interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
+                            <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                interrupt-names = "intr", "msi";
 
                #interrupt-cells = <1>;
                nvidia,aspm-l0s-entrance-latency-us = <3>;
 
                bus-range = <0x0 0xff>;
-               ranges = <0x81000000 0x0  0x30100000 0x0  0x30100000 0x0 0x00100000   /* downstream I/O (1MB) */
-                         0xc3000000 0x12 0x00000000 0x12 0x00000000 0x0 0x30000000   /* prefetchable memory (768MB) */
-                         0x82000000 0x0  0x40000000 0x12 0x30000000 0x0 0x10000000>; /* non-prefetchable memory (256MB) */
+
+               ranges = <0x43000000 0x12 0x00000000 0x12 0x00000000 0x0 0x30000000>, /* prefetchable memory (768 MiB) */
+                        <0x02000000 0x0  0x40000000 0x12 0x30000000 0x0 0x0fff0000>, /* non-prefetchable memory (256 MiB - 64 KiB) */
+                        <0x01000000 0x0  0x00000000 0x12 0x3fff0000 0x0 0x00010000>; /* downstream I/O (64 KiB) */
+
+               interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE1R &emc>,
+                               <&mc TEGRA194_MEMORY_CLIENT_PCIE1W &emc>;
+               interconnect-names = "read", "write";
        };
 
        pcie@14120000 {
                compatible = "nvidia,tegra194-pcie";
                power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX1A>;
-               reg = <0x00 0x14120000 0x0 0x00020000   /* appl registers (128K)      */
-                      0x00 0x32000000 0x0 0x00040000   /* configuration space (256K) */
-                      0x00 0x32040000 0x0 0x00040000   /* iATU_DMA reg space (256K)  */
-                      0x00 0x32080000 0x0 0x00040000>; /* DBI reg space (256K)       */
+               reg = <0x00 0x14120000 0x0 0x00020000>, /* appl registers (128K)      */
+                     <0x00 0x32000000 0x0 0x00040000>, /* configuration space (256K) */
+                     <0x00 0x32040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
+                     <0x00 0x32080000 0x0 0x00040000>; /* DBI reg space (256K)       */
                reg-names = "appl", "config", "atu_dma", "dbi";
 
                status = "disabled";
                         <&bpmp TEGRA194_RESET_PEX0_CORE_2>;
                reset-names = "apb", "core";
 
-               interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>,  /* controller interrupt */
-                            <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;  /* MSI interrupt */
+               interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
+                            <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                interrupt-names = "intr", "msi";
 
                #interrupt-cells = <1>;
                nvidia,aspm-l0s-entrance-latency-us = <3>;
 
                bus-range = <0x0 0xff>;
-               ranges = <0x81000000 0x0  0x32100000 0x0  0x32100000 0x0 0x00100000   /* downstream I/O (1MB) */
-                         0xc3000000 0x12 0x40000000 0x12 0x40000000 0x0 0x30000000   /* prefetchable memory (768MB) */
-                         0x82000000 0x0  0x40000000 0x12 0x70000000 0x0 0x10000000>; /* non-prefetchable memory (256MB) */
+
+               ranges = <0x43000000 0x12 0x40000000 0x12 0x40000000 0x0 0x30000000>, /* prefetchable memory (768 MiB) */
+                        <0x02000000 0x0  0x40000000 0x12 0x70000000 0x0 0x0fff0000>, /* non-prefetchable memory (256 MiB - 64 KiB) */
+                        <0x01000000 0x0  0x00000000 0x12 0x7fff0000 0x0 0x00010000>; /* downstream I/O (64 KiB) */
+
+               interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE2AR &emc>,
+                               <&mc TEGRA194_MEMORY_CLIENT_PCIE2AW &emc>;
+               interconnect-names = "read", "write";
        };
 
        pcie@14140000 {
                compatible = "nvidia,tegra194-pcie";
                power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX1A>;
-               reg = <0x00 0x14140000 0x0 0x00020000   /* appl registers (128K)      */
-                      0x00 0x34000000 0x0 0x00040000   /* configuration space (256K) */
-                      0x00 0x34040000 0x0 0x00040000   /* iATU_DMA reg space (256K)  */
-                      0x00 0x34080000 0x0 0x00040000>; /* DBI reg space (256K)       */
+               reg = <0x00 0x14140000 0x0 0x00020000>, /* appl registers (128K)      */
+                     <0x00 0x34000000 0x0 0x00040000>, /* configuration space (256K) */
+                     <0x00 0x34040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
+                     <0x00 0x34080000 0x0 0x00040000>; /* DBI reg space (256K)       */
                reg-names = "appl", "config", "atu_dma", "dbi";
 
                status = "disabled";
                         <&bpmp TEGRA194_RESET_PEX0_CORE_3>;
                reset-names = "apb", "core";
 
-               interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,  /* controller interrupt */
-                            <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;  /* MSI interrupt */
+               interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
+                            <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                interrupt-names = "intr", "msi";
 
                #interrupt-cells = <1>;
                nvidia,aspm-l0s-entrance-latency-us = <3>;
 
                bus-range = <0x0 0xff>;
-               ranges = <0x81000000 0x0  0x34100000 0x0  0x34100000 0x0 0x00100000   /* downstream I/O (1MB) */
-                         0xc3000000 0x12 0x80000000 0x12 0x80000000 0x0 0x30000000   /* prefetchable memory (768MB) */
-                         0x82000000 0x0  0x40000000 0x12 0xb0000000 0x0 0x10000000>; /* non-prefetchable memory (256MB) */
+
+               ranges = <0x43000000 0x12 0x80000000 0x12 0x80000000 0x0 0x30000000>, /* prefetchable memory (768 MiB) */
+                        <0x02000000 0x0  0x40000000 0x12 0xb0000000 0x0 0x0fff0000>, /* non-prefetchable memory (256 MiB + 64 KiB) */
+                        <0x01000000 0x0  0x00000000 0x12 0xbfff0000 0x0 0x00010000>; /* downstream I/O (64 KiB) */
+
+               interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE3R &emc>,
+                               <&mc TEGRA194_MEMORY_CLIENT_PCIE3W &emc>;
+               interconnect-names = "read", "write";
        };
 
        pcie@14160000 {
                compatible = "nvidia,tegra194-pcie";
                power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX4A>;
-               reg = <0x00 0x14160000 0x0 0x00020000   /* appl registers (128K)      */
-                      0x00 0x36000000 0x0 0x00040000   /* configuration space (256K) */
-                      0x00 0x36040000 0x0 0x00040000   /* iATU_DMA reg space (256K)  */
-                      0x00 0x36080000 0x0 0x00040000>; /* DBI reg space (256K)       */
+               reg = <0x00 0x14160000 0x0 0x00020000>, /* appl registers (128K)      */
+                     <0x00 0x36000000 0x0 0x00040000>, /* configuration space (256K) */
+                     <0x00 0x36040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
+                     <0x00 0x36080000 0x0 0x00040000>; /* DBI reg space (256K)       */
                reg-names = "appl", "config", "atu_dma", "dbi";
 
                status = "disabled";
                         <&bpmp TEGRA194_RESET_PEX0_CORE_4>;
                reset-names = "apb", "core";
 
-               interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,  /* controller interrupt */
-                            <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;  /* MSI interrupt */
+               interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
+                            <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                interrupt-names = "intr", "msi";
 
                #interrupt-cells = <1>;
                nvidia,aspm-l0s-entrance-latency-us = <3>;
 
                bus-range = <0x0 0xff>;
-               ranges = <0x81000000 0x0  0x36100000 0x0  0x36100000 0x0 0x00100000   /* downstream I/O (1MB) */
-                         0xc3000000 0x14 0x00000000 0x14 0x00000000 0x3 0x40000000   /* prefetchable memory (13GB) */
-                         0x82000000 0x0  0x40000000 0x17 0x40000000 0x0 0xc0000000>; /* non-prefetchable memory (3GB) */
+
+               ranges = <0x43000000 0x14 0x00000000 0x14 0x00000000 0x3 0x40000000>, /* prefetchable memory (13 GiB) */
+                        <0x02000000 0x0  0x40000000 0x17 0x40000000 0x0 0xbfff0000>, /* non-prefetchable memory (3 GiB - 64 KiB) */
+                        <0x01000000 0x0  0x00000000 0x17 0xffff0000 0x0 0x00010000>; /* downstream I/O (64 KiB) */
+
+               interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE4R &emc>,
+                               <&mc TEGRA194_MEMORY_CLIENT_PCIE4W &emc>;
+               interconnect-names = "read", "write";
        };
 
        pcie@14180000 {
                compatible = "nvidia,tegra194-pcie";
                power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX8B>;
-               reg = <0x00 0x14180000 0x0 0x00020000   /* appl registers (128K)      */
-                      0x00 0x38000000 0x0 0x00040000   /* configuration space (256K) */
-                      0x00 0x38040000 0x0 0x00040000   /* iATU_DMA reg space (256K)  */
-                      0x00 0x38080000 0x0 0x00040000>; /* DBI reg space (256K)       */
+               reg = <0x00 0x14180000 0x0 0x00020000>, /* appl registers (128K)      */
+                     <0x00 0x38000000 0x0 0x00040000>, /* configuration space (256K) */
+                     <0x00 0x38040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
+                     <0x00 0x38080000 0x0 0x00040000>; /* DBI reg space (256K)       */
                reg-names = "appl", "config", "atu_dma", "dbi";
 
                status = "disabled";
                         <&bpmp TEGRA194_RESET_PEX0_CORE_0>;
                reset-names = "apb", "core";
 
-               interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,  /* controller interrupt */
-                            <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;  /* MSI interrupt */
+               interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
+                            <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                interrupt-names = "intr", "msi";
 
                #interrupt-cells = <1>;
                nvidia,aspm-l0s-entrance-latency-us = <3>;
 
                bus-range = <0x0 0xff>;
-               ranges = <0x81000000 0x0  0x38100000 0x0  0x38100000 0x0 0x00100000   /* downstream I/O (1MB) */
-                         0xc3000000 0x18 0x00000000 0x18 0x00000000 0x3 0x40000000   /* prefetchable memory (13GB) */
-                         0x82000000 0x0  0x40000000 0x1b 0x40000000 0x0 0xc0000000>; /* non-prefetchable memory (3GB) */
+
+               ranges = <0x43000000 0x18 0x00000000 0x18 0x00000000 0x3 0x40000000>, /* prefetchable memory (13 GiB) */
+                        <0x02000000 0x0  0x40000000 0x1b 0x40000000 0x0 0xbfff0000>, /* non-prefetchable memory (3 GiB - 64 KiB) */
+                        <0x01000000 0x0  0x00000000 0x1b 0xffff0000 0x0 0x00010000>; /* downstream I/O (64 KiB) */
+
+               interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE0R &emc>,
+                               <&mc TEGRA194_MEMORY_CLIENT_PCIE0W &emc>;
+               interconnect-names = "read", "write";
        };
 
        pcie@141a0000 {
                compatible = "nvidia,tegra194-pcie";
                power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX8A>;
-               reg = <0x00 0x141a0000 0x0 0x00020000   /* appl registers (128K)      */
-                      0x00 0x3a000000 0x0 0x00040000   /* configuration space (256K) */
-                      0x00 0x3a040000 0x0 0x00040000   /* iATU_DMA reg space (256K)  */
-                      0x00 0x3a080000 0x0 0x00040000>; /* DBI reg space (256K)       */
+               reg = <0x00 0x141a0000 0x0 0x00020000>, /* appl registers (128K)      */
+                     <0x00 0x3a000000 0x0 0x00040000>, /* configuration space (256K) */
+                     <0x00 0x3a040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
+                     <0x00 0x3a080000 0x0 0x00040000>; /* DBI reg space (256K)       */
                reg-names = "appl", "config", "atu_dma", "dbi";
 
                status = "disabled";
                pinctrl-0 = <&pex_rst_c5_out_state>, <&clkreq_c5_bi_dir_state>;
 
                clocks = <&bpmp TEGRA194_CLK_PEX1_CORE_5>,
-                       <&bpmp TEGRA194_CLK_PEX1_CORE_5M>;
+                        <&bpmp TEGRA194_CLK_PEX1_CORE_5M>;
                clock-names = "core", "core_m";
 
                resets = <&bpmp TEGRA194_RESET_PEX1_CORE_5_APB>,
                         <&bpmp TEGRA194_RESET_PEX1_CORE_5>;
                reset-names = "apb", "core";
 
-               interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,  /* controller interrupt */
-                            <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;  /* MSI interrupt */
+               interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
+                            <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                interrupt-names = "intr", "msi";
 
                nvidia,bpmp = <&bpmp 5>;
                nvidia,aspm-l0s-entrance-latency-us = <3>;
 
                bus-range = <0x0 0xff>;
-               ranges = <0x81000000 0x0  0x3a100000 0x0  0x3a100000 0x0 0x00100000   /* downstream I/O (1MB) */
-                         0xc3000000 0x1c 0x00000000 0x1c 0x00000000 0x3 0x40000000   /* prefetchable memory (13GB) */
-                         0x82000000 0x0  0x40000000 0x1f 0x40000000 0x0 0xc0000000>; /* non-prefetchable memory (3GB) */
+
+               ranges = <0x43000000 0x1c 0x00000000 0x1c 0x00000000 0x3 0x40000000>, /* prefetchable memory (13 GiB) */
+                        <0x02000000 0x0  0x40000000 0x1f 0x40000000 0x0 0xbfff0000>, /* non-prefetchable memory (3 GiB - 64 KiB) */
+                        <0x01000000 0x0  0x00000000 0x1f 0xffff0000 0x0 0x00010000>; /* downstream I/O (64 KiB) */
+
+               interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE5R &emc>,
+                               <&mc TEGRA194_MEMORY_CLIENT_PCIE5W &emc>;
+               interconnect-names = "read", "write";
        };
 
        pcie_ep@14160000 {
                compatible = "nvidia,tegra194-pcie-ep", "snps,dw-pcie-ep";
                power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX4A>;
-               reg = <0x00 0x14160000 0x0 0x00020000   /* appl registers (128K)      */
-                      0x00 0x36040000 0x0 0x00040000   /* iATU_DMA reg space (256K)  */
-                      0x00 0x36080000 0x0 0x00040000   /* DBI reg space (256K)       */
-                      0x14 0x00000000 0x4 0x00000000>; /* Address Space (16G)        */
+               reg = <0x00 0x14160000 0x0 0x00020000>, /* appl registers (128K)      */
+                     <0x00 0x36040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
+                     <0x00 0x36080000 0x0 0x00040000>, /* DBI reg space (256K)       */
+                     <0x14 0x00000000 0x4 0x00000000>; /* Address Space (16G)        */
                reg-names = "appl", "atu_dma", "dbi", "addr_space";
 
                status = "disabled";
        pcie_ep@14180000 {
                compatible = "nvidia,tegra194-pcie-ep", "snps,dw-pcie-ep";
                power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX8B>;
-               reg = <0x00 0x14180000 0x0 0x00020000   /* appl registers (128K)      */
-                      0x00 0x38040000 0x0 0x00040000   /* iATU_DMA reg space (256K)  */
-                      0x00 0x38080000 0x0 0x00040000   /* DBI reg space (256K)       */
-                      0x18 0x00000000 0x4 0x00000000>; /* Address Space (16G)        */
+               reg = <0x00 0x14180000 0x0 0x00020000>, /* appl registers (128K)      */
+                     <0x00 0x38040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
+                     <0x00 0x38080000 0x0 0x00040000>, /* DBI reg space (256K)       */
+                     <0x18 0x00000000 0x4 0x00000000>; /* Address Space (16G)        */
                reg-names = "appl", "atu_dma", "dbi", "addr_space";
 
                status = "disabled";
        pcie_ep@141a0000 {
                compatible = "nvidia,tegra194-pcie-ep", "snps,dw-pcie-ep";
                power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX8A>;
-               reg = <0x00 0x141a0000 0x0 0x00020000   /* appl registers (128K)      */
-                      0x00 0x3a040000 0x0 0x00040000   /* iATU_DMA reg space (256K)  */
-                      0x00 0x3a080000 0x0 0x00040000   /* DBI reg space (256K)       */
-                      0x1c 0x00000000 0x4 0x00000000>; /* Address Space (16G)        */
+               reg = <0x00 0x141a0000 0x0 0x00020000>, /* appl registers (128K)      */
+                     <0x00 0x3a040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
+                     <0x00 0x3a080000 0x0 0x00040000>, /* DBI reg space (256K)       */
+                     <0x1c 0x00000000 0x4 0x00000000>; /* Address Space (16G)        */
                reg-names = "appl", "atu_dma", "dbi", "addr_space";
 
                status = "disabled";
                nvidia,aspm-l0s-entrance-latency-us = <3>;
        };
 
-       sysram@40000000 {
+       sram@40000000 {
                compatible = "nvidia,tegra194-sysram", "mmio-sram";
                reg = <0x0 0x40000000 0x0 0x50000>;
                #address-cells = <1>;
                #size-cells = <1>;
                ranges = <0x0 0x0 0x40000000 0x50000>;
 
-               cpu_bpmp_tx: shmem@4e000 {
-                       compatible = "nvidia,tegra194-bpmp-shmem";
+               cpu_bpmp_tx: sram@4e000 {
                        reg = <0x4e000 0x1000>;
                        label = "cpu-bpmp-tx";
                        pool;
                };
 
-               cpu_bpmp_rx: shmem@4f000 {
-                       compatible = "nvidia,tegra194-bpmp-shmem";
+               cpu_bpmp_rx: sram@4f000 {
                        reg = <0x4f000 0x1000>;
                        label = "cpu-bpmp-rx";
                        pool;
                #clock-cells = <1>;
                #reset-cells = <1>;
                #power-domain-cells = <1>;
+               interconnects = <&mc TEGRA194_MEMORY_CLIENT_BPMPR &emc>,
+                               <&mc TEGRA194_MEMORY_CLIENT_BPMPW &emc>,
+                               <&mc TEGRA194_MEMORY_CLIENT_BPMPDMAR &emc>,
+                               <&mc TEGRA194_MEMORY_CLIENT_BPMPDMAW &emc>;
+               interconnect-names = "read", "write", "dma-mem", "dma-write";
 
                bpmp_i2c: i2c {
                        compatible = "nvidia,tegra186-bpmp-i2c";
        };
 
        cpus {
+               compatible = "nvidia,tegra194-ccplex";
+               nvidia,bpmp = <&bpmp>;
                #address-cells = <1>;
                #size-cells = <0>;
 
index cc6ed45..6a4b50a 100644 (file)
@@ -17,7 +17,7 @@
                stdout-path = "serial0:115200n8";
        };
 
-       memory {
+       memory@80000000 {
                device_type = "memory";
                reg = <0x0 0x80000000 0x1 0x0>;
        };
                        reg = <0x50>;
 
                        vcc-supply = <&vdd_1v8>;
-                       address-bits = <8>;
-                       page-size = <8>;
+                       address-width = <8>;
+                       pagesize = <8>;
                        size = <256>;
                        read-only;
                };
        };
 
        /* eMMC */
-       sdhci@700b0600 {
+       mmc@700b0600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
                vqmmc-supply = <&vdd_1v8>;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        cpus {
                method = "smc";
        };
 
-       regulators {
-               vdd_gpu: regulator@100 {
-                       compatible = "pwm-regulator";
-                       reg = <100>;
-                       pwms = <&pwm 1 4880>;
-                       regulator-name = "VDD_GPU";
-                       regulator-min-microvolt = <710000>;
-                       regulator-max-microvolt = <1320000>;
-                       enable-gpios = <&pmic 6 GPIO_ACTIVE_HIGH>;
-                       regulator-ramp-delay = <80>;
-                       regulator-enable-ramp-delay = <2000>;
-                       regulator-settling-time-us = <160>;
-               };
+       vdd_gpu: regulator@100 {
+               compatible = "pwm-regulator";
+               pwms = <&pwm 1 4880>;
+               regulator-name = "VDD_GPU";
+               regulator-min-microvolt = <710000>;
+               regulator-max-microvolt = <1320000>;
+               enable-gpios = <&pmic 6 GPIO_ACTIVE_HIGH>;
+               regulator-ramp-delay = <80>;
+               regulator-enable-ramp-delay = <2000>;
+               regulator-settling-time-us = <160>;
        };
 };
index ea0e1ef..56adf28 100644 (file)
@@ -87,8 +87,8 @@
                        reg = <0x57>;
 
                        vcc-supply = <&vdd_1v8>;
-                       address-bits = <8>;
-                       page-size = <8>;
+                       address-width = <8>;
+                       pagesize = <8>;
                        size = <256>;
                        read-only;
                };
                        status = "okay";
                };
 
-               agic@702f9000 {
+               interrupt-controller@702f9000 {
                        status = "okay";
                };
        };
index d0dc039..58aa051 100644 (file)
@@ -14,7 +14,7 @@
                stdout-path = "serial0:115200n8";
        };
 
-       memory {
+       memory@80000000 {
                device_type = "memory";
                reg = <0x0 0x80000000 0x0 0xc0000000>;
        };
        };
 
        /* eMMC */
-       sdhci@700b0600 {
+       mmc@700b0600 {
                status = "okay";
                bus-width = <8>;
                non-removable;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        cpus {
index b57d837..e18e1a9 100644 (file)
@@ -27,8 +27,8 @@
                sor@54580000 {
                        status = "okay";
 
-                       avdd-io-supply = <&avdd_1v05>;
-                       vdd-pll-supply = <&vdd_1v8>;
+                       avdd-io-hdmi-dp-supply = <&avdd_1v05>;
+                       vdd-hdmi-dp-pll-supply = <&vdd_1v8>;
                        hdmi-supply = <&vdd_hdmi>;
 
                        nvidia,ddc-i2c-bus = <&hdmi_ddc>;
                        #gpio-cells = <2>;
                        gpio-controller;
                };
+
+               exp2: gpio@77 {
+                       compatible = "ti,tca9539";
+                       reg = <0x77>;
+
+                       #gpio-cells = <2>;
+                       gpio-controller;
+               };
        };
 
        /* HDMI DDC */
                        usb2-0 {
                                status = "okay";
                                vbus-supply = <&vdd_usb_vbus_otg>;
+                               usb-role-switch;
                                mode = "otg";
 
-                               usb-role-switch;
                                connector {
-                                       compatible = "usb-b-connector",
-                                                    "gpio-usb-b-connector";
+                                       compatible = "gpio-usb-b-connector",
+                                                    "usb-b-connector";
                                        label = "micro-USB";
                                        type = "micro";
-                                       vbus-gpio = <&gpio TEGRA_GPIO(Z, 0)
-                                                    GPIO_ACTIVE_LOW>;
-                                       id-gpio = <&pmic 0 0>;
+                                       vbus-gpios = <&gpio TEGRA_GPIO(Z, 0)
+                                                     GPIO_ACTIVE_LOW>;
+                                       id-gpios = <&pmic 0 GPIO_ACTIVE_HIGH>;
                                };
                        };
 
        };
 
        /* MMC/SD */
-       sdhci@700b0000 {
+       mmc@700b0000 {
                status = "okay";
                bus-width = <4>;
 
                hvdd-usb-supply = <&vdd_1v8>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               vdd_sys_mux: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "VDD_SYS_MUX";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
-
-               vdd_5v0_sys: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "VDD_5V0_SYS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_sys_mux>;
-               };
-
-               vdd_3v3_sys: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "VDD_3V3_SYS";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-                       gpio = <&pmic 3 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_sys_mux>;
-
-                       regulator-enable-ramp-delay = <160>;
-                       regulator-disable-ramp-delay = <10000>;
-               };
-
-               vdd_5v0_io: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "VDD_5V0_IO_SYS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
-
-               vdd_3v3_sd: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "VDD_3V3_SD";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       gpio = <&gpio TEGRA_GPIO(Z, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_sys>;
-
-                       regulator-enable-ramp-delay = <472>;
-                       regulator-disable-ramp-delay = <4880>;
-               };
-
-               vdd_dsi_csi: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "AVDD_DSI_CSI_1V2";
-                       regulator-min-microvolt = <1200000>;
-                       regulator-max-microvolt = <1200000>;
-                       vin-supply = <&vdd_sys_1v2>;
-               };
-
-               vdd_3v3_dis: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg = <6>;
-                       regulator-name = "VDD_DIS_3V3_LCD";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       gpio = <&exp1 3 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_3v3_sys>;
-               };
-
-               vdd_1v8_dis: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
-                       regulator-name = "VDD_LCD_1V8_DIS";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       regulator-always-on;
-                       gpio = <&exp1 14 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_1v8>;
-               };
-
-               vdd_5v0_rtl: regulator@8 {
-                       compatible = "regulator-fixed";
-                       reg = <8>;
-                       regulator-name = "RTL_5V";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(H, 1) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
-
-               vdd_usb_vbus: regulator@9 {
-                       compatible = "regulator-fixed";
-                       reg = <9>;
-                       regulator-name = "USB_VBUS_EN1";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(CC, 5) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
-
-               vdd_usb_vbus_otg: regulator@11 {
-                       compatible = "regulator-fixed";
-                       reg = <9>;
-                       regulator-name = "USB_VBUS_EN0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio TEGRA_GPIO(CC, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
-
-               vdd_hdmi: regulator@10 {
-                       compatible = "regulator-fixed";
-                       reg = <10>;
-                       regulator-name = "VDD_HDMI_5V0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&exp1 12 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
-       };
-
        gpio-keys {
                compatible = "gpio-keys";
                label = "gpio-keys";
                        linux,code = <KEY_VOLUMEUP>;
                };
        };
+
+       vdd_sys_mux: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_SYS_MUX";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_5v0_sys: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_5V0_SYS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_sys_mux>;
+       };
+
+       vdd_3v3_sys: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_3V3_SYS";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&pmic 3 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_sys_mux>;
+
+               regulator-enable-ramp-delay = <160>;
+               regulator-disable-ramp-delay = <10000>;
+       };
+
+       vdd_5v0_io: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_5V0_IO_SYS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vdd_3v3_sd: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_3V3_SD";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&gpio TEGRA_GPIO(Z, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+
+               regulator-enable-ramp-delay = <472>;
+               regulator-disable-ramp-delay = <4880>;
+       };
+
+       vdd_dsi_csi: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "AVDD_DSI_CSI_1V2";
+               regulator-min-microvolt = <1200000>;
+               regulator-max-microvolt = <1200000>;
+               vin-supply = <&vdd_sys_1v2>;
+       };
+
+       vdd_3v3_dis: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_DIS_3V3_LCD";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               gpio = <&exp1 3 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
+
+       vdd_1v8_dis: regulator@7 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_LCD_1V8_DIS";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
+               gpio = <&exp1 14 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_1v8>;
+       };
+
+       vdd_5v0_rtl: regulator@8 {
+               compatible = "regulator-fixed";
+               regulator-name = "RTL_5V";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(H, 1) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       vdd_usb_vbus: regulator@9 {
+               compatible = "regulator-fixed";
+               regulator-name = "USB_VBUS_EN1";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(CC, 5) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       vdd_usb_vbus_otg: regulator@11 {
+               compatible = "regulator-fixed";
+               regulator-name = "USB_VBUS_EN0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio TEGRA_GPIO(CC, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       vdd_hdmi: regulator@10 {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_HDMI_5V0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&exp1 12 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       vdd_cam_1v2: regulator@11 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-cam-1v2";
+               regulator-min-microvolt = <1200000>;
+               regulator-max-microvolt = <1200000>;
+               gpio = <&exp2 10 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
+
+       vdd_cam_2v8: regulator@12 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-cam-2v8";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+               gpio = <&exp1 13 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
+
+       vdd_cam_1v8: regulator@13 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-cam-1v8";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               gpio = <&exp2 9 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 };
index 88a4b93..41beab6 100644 (file)
@@ -16,7 +16,7 @@
                stdout-path = "serial0:115200n8";
        };
 
-       memory {
+       memory@80000000 {
                device_type = "memory";
                reg = <0x0 0x80000000 0x0 0xc0000000>;
        };
                status = "okay";
                clock-frequency = <400000>;
 
-               max77620: max77620@3c {
+               pmic: pmic@3c {
                        compatible = "maxim,max77620";
                        reg = <0x3c>;
                        interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
                        pinctrl-0 = <&max77620_default>;
 
                        max77620_default: pinmux@0 {
-                               pin_gpio0 {
+                               gpio0 {
                                        pins = "gpio0";
                                        function = "gpio";
                                };
 
-                               pin_gpio1 {
+                               gpio1 {
                                        pins = "gpio1";
                                        function = "fps-out";
                                        drive-push-pull = <1>;
                                        maxim,active-fps-power-down-slot = <0>;
                                };
 
-                               pin_gpio2_3 {
-                                       pins = "gpio2", "gpio3";
+                               gpio2 {
+                                       pins = "gpio2";
                                        function = "fps-out";
                                        drive-open-drain = <1>;
                                        maxim,active-fps-source = <MAX77620_FPS_SRC_0>;
                                };
 
-                               pin_gpio4 {
+                               gpio3 {
+                                       pins = "gpio3";
+                                       function = "fps-out";
+                                       drive-open-drain = <1>;
+                                       maxim,active-fps-source = <MAX77620_FPS_SRC_0>;
+                               };
+
+                               gpio4 {
                                        pins = "gpio4";
                                        function = "32k-out1";
                                };
 
-                               pin_gpio5_6_7 {
+                               gpio5_6_7 {
                                        pins = "gpio5", "gpio6", "gpio7";
                                        function = "gpio";
                                        drive-push-pull = <1>;
                                };
-
-                               pin_gpio2 {
-                                       maxim,active-fps-source = <MAX77620_FPS_SRC_0>;
-                               };
-
-                               pin_gpio3 {
-                                       maxim,active-fps-source = <MAX77620_FPS_SRC_0>;
-                               };
                        };
 
-                       spmic-default-output-high {
+                       gpio@0 {
                                gpio-hog;
                                output-high;
-                               gpios = <2 GPIO_ACTIVE_HIGH 7 GPIO_ACTIVE_HIGH>;
+                               gpios = <2 GPIO_ACTIVE_HIGH>,
+                                       <7 GPIO_ACTIVE_HIGH>;
                        };
 
                        fps {
                status = "okay";
        };
 
-       sdhci@700b0600 {
+       mmc@700b0600 {
                bus-width = <8>;
                non-removable;
                status = "okay";
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        gpio-keys {
                method = "smc";
        };
 
-       regulators {
-               compatible = "simple-bus";
-               device_type = "fixed-regulators";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               battery_reg: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "vdd-ac-bat";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       battery_reg: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-ac-bat";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               vdd_3v3: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "vdd-3v3";
-                       regulator-enable-ramp-delay = <160>;
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-
-                       gpio = <&max77620 3 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       vdd_3v3: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-3v3";
+               regulator-enable-ramp-delay = <160>;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
 
-               max77620_gpio7: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "max77620-gpio7";
-                       regulator-enable-ramp-delay = <240>;
-                       regulator-min-microvolt = <1200000>;
-                       regulator-max-microvolt = <1200000>;
-                       vin-supply = <&max77620_ldo0>;
-                       regulator-always-on;
-                       regulator-boot-on;
-
-                       gpio = <&max77620 7 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+               gpio = <&pmic 3 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               lcd_bl_en: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "lcd-bl-en";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       regulator-boot-on;
+       max77620_gpio7: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "max77620-gpio7";
+               regulator-enable-ramp-delay = <240>;
+               regulator-min-microvolt = <1200000>;
+               regulator-max-microvolt = <1200000>;
+               vin-supply = <&max77620_ldo0>;
+               regulator-always-on;
+               regulator-boot-on;
+
+               gpio = <&pmic 7 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-                       gpio = <&gpio TEGRA_GPIO(V, 1) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       lcd_bl_en: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "lcd-bl-en";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-boot-on;
 
-               en_vdd_sd: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "en-vdd-sd";
-                       regulator-enable-ramp-delay = <472>;
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       vin-supply = <&vdd_3v3>;
-
-                       gpio = <&gpio TEGRA_GPIO(Z, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+               gpio = <&gpio TEGRA_GPIO(V, 1) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               en_vdd_cam: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "en-vdd-cam";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
+       en_vdd_sd: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "en-vdd-sd";
+               regulator-enable-ramp-delay = <472>;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&vdd_3v3>;
 
-                       gpio = <&gpio TEGRA_GPIO(S, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+               gpio = <&gpio TEGRA_GPIO(Z, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_sys_boost: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg = <6>;
-                       regulator-name = "vdd-sys-boost";
-                       regulator-enable-ramp-delay = <3090>;
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-
-                       gpio = <&max77620 1 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       en_vdd_cam: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "en-vdd-cam";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
 
-               vdd_hdmi: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
-                       regulator-name = "vdd-hdmi";
-                       regulator-enable-ramp-delay = <468>;
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       vin-supply = <&vdd_sys_boost>;
-                       regulator-boot-on;
-
-                       gpio = <&gpio TEGRA_GPIO(CC, 7) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+               gpio = <&gpio TEGRA_GPIO(S, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               en_vdd_cpu_fixed: regulator@8 {
-                       compatible = "regulator-fixed";
-                       reg = <8>;
-                       regulator-name = "vdd-cpu-fixed";
-                       regulator-min-microvolt = <1000000>;
-                       regulator-max-microvolt = <1000000>;
-               };
+       vdd_sys_boost: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-sys-boost";
+               regulator-enable-ramp-delay = <3090>;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
 
-               vdd_aux_3v3: regulator@9 {
-                       compatible = "regulator-fixed";
-                       reg = <9>;
-                       regulator-name = "aux-3v3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-               };
+               gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_snsr_pm: regulator@10 {
-                       compatible = "regulator-fixed";
-                       reg = <10>;
-                       regulator-name = "snsr_pm";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
+       vdd_hdmi: regulator@7 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-hdmi";
+               regulator-enable-ramp-delay = <468>;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               vin-supply = <&vdd_sys_boost>;
+               regulator-boot-on;
+
+               gpio = <&gpio TEGRA_GPIO(CC, 7) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-                       enable-active-high;
-               };
+       en_vdd_cpu_fixed: regulator@8 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-cpu-fixed";
+               regulator-min-microvolt = <1000000>;
+               regulator-max-microvolt = <1000000>;
+       };
 
-               vdd_usb_5v0: regulator@11 {
-                       compatible = "regulator-fixed";
-                       reg = <11>;
-                       status = "disabled";
-                       regulator-name = "vdd-usb-5v0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       vin-supply = <&vdd_3v3>;
+       vdd_aux_3v3: regulator@9 {
+               compatible = "regulator-fixed";
+               regulator-name = "aux-3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
 
-                       enable-active-high;
-               };
+       vdd_snsr_pm: regulator@10 {
+               compatible = "regulator-fixed";
+               regulator-name = "snsr_pm";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
 
-               vdd_cdc_1v2_aud: regulator@101 {
-                       compatible = "regulator-fixed";
-                       reg = <101>;
-                       status = "disabled";
-                       regulator-name = "vdd_cdc_1v2_aud";
-                       regulator-min-microvolt = <1200000>;
-                       regulator-max-microvolt = <1200000>;
-                       startup-delay-us = <250000>;
+               enable-active-high;
+       };
 
-                       enable-active-high;
-               };
+       vdd_usb_5v0: regulator@11 {
+               compatible = "regulator-fixed";
+               status = "disabled";
+               regulator-name = "vdd-usb-5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               vin-supply = <&vdd_3v3>;
 
-               vdd_disp_3v0: regulator@12 {
-                       compatible = "regulator-fixed";
-                       reg = <12>;
-                       regulator-name = "vdd-disp-3v0";
-                       regulator-enable-ramp-delay = <232>;
-                       regulator-min-microvolt = <3000000>;
-                       regulator-max-microvolt = <3000000>;
-                       regulator-always-on;
-
-                       gpio = <&gpio TEGRA_GPIO(I, 3) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+               enable-active-high;
+       };
 
-               vdd_fan: regulator@13 {
-                       compatible = "regulator-fixed";
-                       reg = <13>;
-                       regulator-name = "vdd-fan";
-                       regulator-enable-ramp-delay = <284>;
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
+       vdd_cdc_1v2_aud: regulator@101 {
+               compatible = "regulator-fixed";
+               status = "disabled";
+               regulator-name = "vdd_cdc_1v2_aud";
+               regulator-min-microvolt = <1200000>;
+               regulator-max-microvolt = <1200000>;
+               startup-delay-us = <250000>;
 
-                       gpio = <&gpio TEGRA_GPIO(E, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+               enable-active-high;
+       };
 
-               usb_vbus1: regulator@14 {
-                       compatible = "regulator-fixed";
-                       reg = <14>;
-                       regulator-name = "usb-vbus1";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
+       vdd_disp_3v0: regulator@12 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-disp-3v0";
+               regulator-enable-ramp-delay = <232>;
+               regulator-min-microvolt = <3000000>;
+               regulator-max-microvolt = <3000000>;
+               regulator-always-on;
 
-                       gpio = <&gpio TEGRA_GPIO(CC, 5) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-               };
+               gpio = <&gpio TEGRA_GPIO(I, 3) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               usb_vbus2: regulator@15 {
-                       compatible = "regulator-fixed";
-                       reg = <15>;
-                       regulator-name = "usb-vbus2";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
+       vdd_fan: regulator@13 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-fan";
+               regulator-enable-ramp-delay = <284>;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
 
-                       gpio = <&gpio TEGRA_GPIO(CC, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-               };
+               gpio = <&gpio TEGRA_GPIO(E, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
 
-               vdd_3v3_eth: regulator@16 {
-                       compatible = "regulator-fixed";
-                       reg = <16>;
-                       regulator-name = "vdd-3v3-eth-a02";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-
-                       gpio = <&gpio TEGRA_GPIO(D, 4) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-                       gpio-open-drain;
-               };
+       usb_vbus1: regulator@14 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb-vbus1";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+
+               gpio = <&gpio TEGRA_GPIO(CC, 5) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
+       };
+
+       usb_vbus2: regulator@15 {
+               compatible = "regulator-fixed";
+               regulator-name = "usb-vbus2";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+
+               gpio = <&gpio TEGRA_GPIO(CC, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
+       };
+
+       vdd_3v3_eth: regulator@16 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd-3v3-eth-a02";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+
+               gpio = <&gpio TEGRA_GPIO(D, 4) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               gpio-open-drain;
        };
 };
index 9bc52fd..2282ea1 100644 (file)
@@ -22,7 +22,7 @@
                stdout-path = "serial0:115200n8";
        };
 
-       memory {
+       memory@80000000 {
                device_type = "memory";
                reg = <0x0 0x80000000 0x1 0x0>;
        };
                        status = "okay";
                };
 
+               vi@54080000 {
+                       status = "okay";
+
+                       avdd-dsi-csi-supply = <&vdd_sys_1v2>;
+
+                       csi@838 {
+                               status = "okay";
+                       };
+               };
+
                sor@54540000 {
                        status = "okay";
 
@@ -77,8 +87,8 @@
                sor@54580000 {
                        status = "okay";
 
-                       avdd-io-supply = <&avdd_1v05>;
-                       vdd-pll-supply = <&vdd_1v8>;
+                       avdd-io-hdmi-dp-supply = <&avdd_1v05>;
+                       vdd-hdmi-dp-pll-supply = <&vdd_1v8>;
                        hdmi-supply = <&vdd_hdmi>;
 
                        nvidia,ddc-i2c-bus = <&hdmi_ddc>;
                status = "okay";
        };
 
+       pinmux@700008d4 {
+               dvfs_pwm_active_state: dvfs_pwm_active {
+                       dvfs_pwm_pbb1 {
+                               nvidia,pins = "dvfs_pwm_pbb1";
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                       };
+               };
+
+               dvfs_pwm_inactive_state: dvfs_pwm_inactive {
+                       dvfs_pwm_pbb1 {
+                               nvidia,pins = "dvfs_pwm_pbb1";
+                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
+                       };
+               };
+       };
+
        /* debug port */
        serial@70006000 {
                status = "okay";
                        reg = <0x50>;
 
                        vcc-supply = <&vdd_1v8>;
-                       address-bits = <8>;
-                       page-size = <8>;
+                       address-width = <8>;
+                       pagesize = <8>;
                        size = <256>;
                        read-only;
                };
                        reg = <0x57>;
 
                        vcc-supply = <&vdd_1v8>;
-                       address-bits = <8>;
-                       page-size = <8>;
+                       address-width = <8>;
+                       pagesize = <8>;
                        size = <256>;
                        read-only;
                };
                        usb2-0 {
                                status = "okay";
                                mode = "peripheral";
-
                                usb-role-switch;
+
                                connector {
-                                       compatible = "usb-b-connector",
-                                                    "gpio-usb-b-connector";
+                                       compatible = "gpio-usb-b-connector",
+                                                    "usb-b-connector";
                                        label = "micro-USB";
                                        type = "micro";
-                                       vbus-gpio = <&gpio TEGRA_GPIO(CC, 4)
-                                                    GPIO_ACTIVE_LOW>;
+                                       vbus-gpios = <&gpio TEGRA_GPIO(CC, 4)
+                                                     GPIO_ACTIVE_LOW>;
                                };
                        };
 
                };
        };
 
-       sdhci@700b0000 {
+       mmc@700b0000 {
                status = "okay";
                bus-width = <4>;
 
                vmmc-supply = <&vdd_3v3_sd>;
        };
 
-       usb@700d0000 {
-               status = "okay";
-               phys = <&micro_b>;
-               phy-names = "usb2-0";
-               avddio-usb-supply = <&vdd_3v3_sys>;
-               hvdd-usb-supply = <&vdd_1v8>;
-       };
-
-       sdhci@700b0400 {
+       mmc@700b0400 {
                status = "okay";
                bus-width = <4>;
 
                wakeup-source;
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
+       usb@700d0000 {
+               status = "okay";
+               phys = <&micro_b>;
+               phy-names = "usb2-0";
+               avddio-usb-supply = <&vdd_3v3_sys>;
+               hvdd-usb-supply = <&vdd_1v8>;
+       };
+
+       clock@70110000 {
+               status = "okay";
 
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+               nvidia,cf = <6>;
+               nvidia,ci = <0>;
+               nvidia,cg = <2>;
+               nvidia,droop-ctrl = <0x00000f00>;
+               nvidia,force-mode = <1>;
+               nvidia,sample-rate = <25000>;
+
+               nvidia,pwm-min-microvolts = <708000>;
+               nvidia,pwm-period-nanoseconds = <2500>; /* 2.5us */
+               nvidia,pwm-to-pmic;
+               nvidia,pwm-tristate-microvolts = <1000000>;
+               nvidia,pwm-voltage-step-microvolts = <19200>;
+
+               pinctrl-names = "dvfs_pwm_enable", "dvfs_pwm_disable";
+               pinctrl-0 = <&dvfs_pwm_active_state>;
+               pinctrl-1 = <&dvfs_pwm_inactive_state>;
+       };
+
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        cpus {
                method = "smc";
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
+       vdd_5v0_sys: regulator@0 {
+               compatible = "regulator-fixed";
 
-               vdd_5v0_sys: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
+               regulator-name = "VDD_5V0_SYS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
 
-                       regulator-name = "VDD_5V0_SYS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
-               };
+       vdd_3v3_sys: regulator@1 {
+               compatible = "regulator-fixed";
 
-               vdd_3v3_sys: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "VDD_3V3_SYS";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-enable-ramp-delay = <240>;
-                       regulator-disable-ramp-delay = <11340>;
-                       regulator-always-on;
-                       regulator-boot-on;
-
-                       gpio = <&pmic 3 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+               regulator-name = "VDD_3V3_SYS";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-enable-ramp-delay = <240>;
+               regulator-disable-ramp-delay = <11340>;
+               regulator-always-on;
+               regulator-boot-on;
 
-               vdd_3v3_sd: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
+               gpio = <&pmic 3 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
 
-                       regulator-name = "VDD_3V3_SD";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-                       gpio = <&gpio TEGRA_GPIO(Z, 3) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
+       vdd_3v3_sd: regulator@2 {
+               compatible = "regulator-fixed";
 
-                       vin-supply = <&vdd_3v3_sys>;
-               };
+               regulator-name = "VDD_3V3_SD";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
 
-               vdd_hdmi: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
+               gpio = <&gpio TEGRA_GPIO(Z, 3) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
 
-                       regulator-name = "VDD_HDMI_5V0";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
+               vin-supply = <&vdd_3v3_sys>;
+       };
 
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+       vdd_hdmi: regulator@3 {
+               compatible = "regulator-fixed";
 
-               vdd_hub_3v3: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
+               regulator-name = "VDD_HDMI_5V0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
 
-                       regulator-name = "VDD_HUB_3V3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-                       gpio = <&gpio TEGRA_GPIO(A, 6) GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
+       vdd_hub_3v3: regulator@4 {
+               compatible = "regulator-fixed";
 
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+               regulator-name = "VDD_HUB_3V3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
 
-               vdd_cpu: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
+               gpio = <&gpio TEGRA_GPIO(A, 6) GPIO_ACTIVE_HIGH>;
+               enable-active-high;
 
-                       regulator-name = "VDD_CPU";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-                       regulator-boot-on;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-                       gpio = <&pmic 5 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
+       vdd_cpu: regulator@5 {
+               compatible = "regulator-fixed";
 
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+               regulator-name = "VDD_CPU";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+               regulator-boot-on;
 
-               vdd_gpu: regulator@6 {
-                       compatible = "pwm-regulator";
-                       reg = <6>;
-                       pwms = <&pwm 1 4880>;
-                       regulator-name = "VDD_GPU";
-                       regulator-min-microvolt = <710000>;
-                       regulator-max-microvolt = <1320000>;
-                       regulator-ramp-delay = <80>;
-                       regulator-enable-ramp-delay = <2000>;
-                       regulator-settling-time-us = <160>;
-                       enable-gpios = <&pmic 6 GPIO_ACTIVE_HIGH>;
-                       vin-supply = <&vdd_5v0_sys>;
-               };
+               gpio = <&pmic 5 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
 
-               avdd_io_edp_1v05: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
+               vin-supply = <&vdd_5v0_sys>;
+       };
 
-                       regulator-name = "AVDD_IO_EDP_1V05";
-                       regulator-min-microvolt = <1050000>;
-                       regulator-max-microvolt = <1050000>;
+       vdd_gpu: regulator@6 {
+               compatible = "pwm-regulator";
+               pwms = <&pwm 1 4880>;
 
-                       gpio = <&pmic 7 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
+               regulator-name = "VDD_GPU";
+               regulator-min-microvolt = <710000>;
+               regulator-max-microvolt = <1320000>;
+               regulator-ramp-delay = <80>;
+               regulator-enable-ramp-delay = <2000>;
+               regulator-settling-time-us = <160>;
 
-                       vin-supply = <&avdd_1v05_pll>;
-               };
+               enable-gpios = <&pmic 6 GPIO_ACTIVE_HIGH>;
+               vin-supply = <&vdd_5v0_sys>;
+       };
+
+       avdd_io_edp_1v05: regulator@7 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "AVDD_IO_EDP_1V05";
+               regulator-min-microvolt = <1050000>;
+               regulator-max-microvolt = <1050000>;
+
+               gpio = <&pmic 7 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+
+               vin-supply = <&avdd_1v05_pll>;
        };
 };
index 2faab63..bd78378 100644 (file)
                                battery: bq27742@55 {
                                        compatible = "ti,bq27742";
                                        reg = <0x55>;
-                                       battery-name = "battery";
                                };
                        };
                };
                        maxim,enable-active-discharge;
                        maxim,enable-bias-control;
                        maxim,enable-etr;
-                       maxim,enable-gpio = <&max77620 5 0>;
+                       maxim,enable-gpio = <&pmic 5 0>;
                        maxim,externally-enable;
                };
 
-               max77620: max77620@3c {
+               pmic: pmic@3c {
                        compatible = "maxim,max77620";
                        reg = <0x3c>;
                        interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&max77620_default>;
 
-                       max77620_default: pinmux@0 {
-                               pin_gpio {
+                       max77620_default: pinmux {
+                               gpio0_1_2_7 {
                                        pins = "gpio0", "gpio1", "gpio2", "gpio7";
                                        function = "gpio";
                                };
                                 * sequence, So it must be sequenced up (automatically
                                 * set by OTP) and down properly.
                                 */
-                               pin_gpio3 {
+                               gpio3 {
                                        pins = "gpio3";
                                        function = "fps-out";
                                        drive-open-drain = <1>;
                                        maxim,active-fps-power-down-slot = <2>;
                                };
 
-                               pin_gpio5_6 {
+                               gpio5_6 {
                                        pins = "gpio5", "gpio6";
                                        function = "gpio";
                                        drive-push-pull = <1>;
                                };
 
-                               pin_32k {
+                               gpio4 {
                                        pins = "gpio4";
                                        function = "32k-out1";
                                };
                };
        };
 
-       sdhci@700b0600 {
+       mmc@700b0600 {
                bus-width = <8>;
                non-removable;
                status = "okay";
                        status = "okay";
                };
 
-               agic@702f9000 {
+               interrupt-controller@702f9000 {
                        status = "okay";
                };
        };
 
-       clocks {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               clk32k_in: clock@0 {
-                       compatible = "fixed-clock";
-                       reg = <0>;
-                       #clock-cells = <0>;
-                       clock-frequency = <32768>;
-               };
+       clk32k_in: clock@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <32768>;
+               #clock-cells = <0>;
        };
 
        cpus {
                method = "smc";
        };
 
-       regulators {
-               compatible = "simple-bus";
-               device_type = "fixed-regulators";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               ppvar_sys: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "PPVAR_SYS";
-                       regulator-min-microvolt = <4400000>;
-                       regulator-max-microvolt = <4400000>;
-                       regulator-always-on;
-               };
+       ppvar_sys: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "PPVAR_SYS";
+               regulator-min-microvolt = <4400000>;
+               regulator-max-microvolt = <4400000>;
+               regulator-always-on;
+       };
 
-               pplcd_vdd: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "PPLCD_VDD";
-                       regulator-min-microvolt = <4400000>;
-                       regulator-max-microvolt = <4400000>;
-                       gpio = <&gpio TEGRA_GPIO(V, 4) 0>;
-                       enable-active-high;
-                       regulator-boot-on;
-               };
+       pplcd_vdd: regulator@1 {
+               compatible = "regulator-fixed";
+               regulator-name = "PPLCD_VDD";
+               regulator-min-microvolt = <4400000>;
+               regulator-max-microvolt = <4400000>;
+               gpio = <&gpio TEGRA_GPIO(V, 4) 0>;
+               enable-active-high;
+               regulator-boot-on;
+       };
 
-               pp3000_always: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "PP3000_ALWAYS";
-                       regulator-min-microvolt = <3000000>;
-                       regulator-max-microvolt = <3000000>;
-                       regulator-always-on;
-               };
+       pp3000_always: regulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "PP3000_ALWAYS";
+               regulator-min-microvolt = <3000000>;
+               regulator-max-microvolt = <3000000>;
+               regulator-always-on;
+       };
 
-               pp3300: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "PP3300";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-boot-on;
-                       regulator-always-on;
-                       enable-active-high;
-               };
+       pp3300: regulator@3 {
+               compatible = "regulator-fixed";
+               regulator-name = "PP3300";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               regulator-always-on;
+               enable-active-high;
+       };
 
-               pp5000: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "PP5000";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       pp5000: regulator@4 {
+               compatible = "regulator-fixed";
+               regulator-name = "PP5000";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               pp1800_lcdio: regulator@5 {
-                       compatible = "regulator-fixed";
-                       reg = <5>;
-                       regulator-name = "PP1800_LCDIO";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       gpio = <&gpio TEGRA_GPIO(V, 3) 0>;
-                       enable-active-high;
-                       regulator-boot-on;
-               };
+       pp1800_lcdio: regulator@5 {
+               compatible = "regulator-fixed";
+               regulator-name = "PP1800_LCDIO";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               gpio = <&gpio TEGRA_GPIO(V, 3) 0>;
+               enable-active-high;
+               regulator-boot-on;
+       };
 
-               pp1800_cam: regulator@6 {
-                       compatible = "regulator-fixed";
-                       reg= <6>;
-                       regulator-name = "PP1800_CAM";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       gpio = <&gpio TEGRA_GPIO(K, 3) 0>;
-                       enable-active-high;
-               };
+       pp1800_cam: regulator@6 {
+               compatible = "regulator-fixed";
+               regulator-name = "PP1800_CAM";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               gpio = <&gpio TEGRA_GPIO(K, 3) 0>;
+               enable-active-high;
+       };
 
-               usbc_vbus: regulator@7 {
-                       compatible = "regulator-fixed";
-                       reg = <7>;
-                       regulator-name = "USBC_VBUS";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-               };
+       usbc_vbus: regulator@7 {
+               compatible = "regulator-fixed";
+               regulator-name = "USBC_VBUS";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
        };
 };
index 0865508..829f786 100644 (file)
@@ -18,9 +18,9 @@
        pcie@1003000 {
                compatible = "nvidia,tegra210-pcie";
                device_type = "pci";
-               reg = <0x0 0x01003000 0x0 0x00000800   /* PADS registers */
-                      0x0 0x01003800 0x0 0x00000800   /* AFI registers */
-                      0x0 0x02000000 0x0 0x10000000>; /* configuration space */
+               reg = <0x0 0x01003000 0x0 0x00000800>, /* PADS registers */
+                     <0x0 0x01003800 0x0 0x00000800>, /* AFI registers */
+                     <0x0 0x02000000 0x0 0x10000000>; /* configuration space */
                reg-names = "pads", "afi", "cs";
                interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
                             <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
                #address-cells = <3>;
                #size-cells = <2>;
 
-               ranges = <0x82000000 0 0x01000000 0x0 0x01000000 0 0x00001000   /* port 0 configuration space */
-                         0x82000000 0 0x01001000 0x0 0x01001000 0 0x00001000   /* port 1 configuration space */
-                         0x81000000 0 0x0        0x0 0x12000000 0 0x00010000   /* downstream I/O (64 KiB) */
-                         0x82000000 0 0x13000000 0x0 0x13000000 0 0x0d000000   /* non-prefetchable memory (208 MiB) */
-                         0xc2000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
+               ranges = <0x02000000 0 0x01000000 0x0 0x01000000 0 0x00001000>, /* port 0 configuration space */
+                        <0x02000000 0 0x01001000 0x0 0x01001000 0 0x00001000>, /* port 1 configuration space */
+                        <0x01000000 0 0x0        0x0 0x12000000 0 0x00010000>, /* downstream I/O (64 KiB) */
+                        <0x02000000 0 0x13000000 0x0 0x13000000 0 0x0d000000>, /* non-prefetchable memory (208 MiB) */
+                        <0x42000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
 
                clocks = <&tegra_car TEGRA210_CLK_PCIE>,
                         <&tegra_car TEGRA210_CLK_AFI>,
        };
 
        host1x@50000000 {
-               compatible = "nvidia,tegra210-host1x", "simple-bus";
+               compatible = "nvidia,tegra210-host1x";
                reg = <0x0 0x50000000 0x0 0x00034000>;
                interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>, /* syncpt */
                             <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* general */
+               interrupt-names = "syncpt", "host1x";
                clocks = <&tegra_car TEGRA210_CLK_HOST1X>;
                clock-names = "host1x";
                resets = <&tegra_car 28>;
                        compatible = "nvidia,tegra210-dc";
                        reg = <0x0 0x54200000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&tegra_car TEGRA210_CLK_DISP1>,
-                                <&tegra_car TEGRA210_CLK_PLL_P>;
-                       clock-names = "dc", "parent";
+                       clocks = <&tegra_car TEGRA210_CLK_DISP1>;
+                       clock-names = "dc";
                        resets = <&tegra_car 27>;
                        reset-names = "dc";
 
                        compatible = "nvidia,tegra210-dc";
                        reg = <0x0 0x54240000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&tegra_car TEGRA210_CLK_DISP2>,
-                                <&tegra_car TEGRA210_CLK_PLL_P>;
-                       clock-names = "dc", "parent";
+                       clocks = <&tegra_car TEGRA210_CLK_DISP2>;
+                       clock-names = "dc";
                        resets = <&tegra_car 26>;
                        reset-names = "dc";
 
                };
 
                dpaux: dpaux@545c0000 {
-                       compatible = "nvidia,tegra124-dpaux";
+                       compatible = "nvidia,tegra210-dpaux";
                        reg = <0x0 0x545c0000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&tegra_car TEGRA210_CLK_DPAUX>,
                        compatible = "nvidia,tegra210-isp";
                        reg = <0x0 0x54600000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&tegra_car TEGRA210_CLK_ISPA>;
+                       resets = <&tegra_car 23>;
+                       reset-names = "isp";
                        status = "disabled";
                };
 
                        compatible = "nvidia,tegra210-isp";
                        reg = <0x0 0x54680000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&tegra_car TEGRA210_CLK_ISPB>;
+                       resets = <&tegra_car 3>;
+                       reset-names = "isp";
                        status = "disabled";
                };
 
                        compatible = "nvidia,tegra210-i2c-vi";
                        reg = <0x0 0x546c0000 0x0 0x00040000>;
                        interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&tegra_car TEGRA210_CLK_VI_I2C>,
+                                <&tegra_car TEGRA210_CLK_I2CSLOW>;
+                       clock-names = "div-clk", "slow";
+                       resets = <&tegra_car 208>;
+                       reset-names = "i2c";
+                       power-domains = <&pd_venc>;
                        status = "disabled";
+
+                       #address-cells = <1>;
+                       #size-cells = <0>;
                };
        };
 
                         <&tegra_car TEGRA210_CLK_XUSB_HOST_SRC>,
                         <&tegra_car TEGRA210_CLK_XUSB_FALCON_SRC>,
                         <&tegra_car TEGRA210_CLK_XUSB_SS>,
-                        <&tegra_car TEGRA210_CLK_XUSB_SS_DIV2>,
                         <&tegra_car TEGRA210_CLK_XUSB_SS_SRC>,
+                        <&tegra_car TEGRA210_CLK_XUSB_SS_DIV2>,
                         <&tegra_car TEGRA210_CLK_XUSB_HS_SRC>,
                         <&tegra_car TEGRA210_CLK_XUSB_FS_SRC>,
                         <&tegra_car TEGRA210_CLK_PLL_U_480M>,
                         <&tegra_car TEGRA210_CLK_PLL_E>;
                clock-names = "xusb_host", "xusb_host_src",
                              "xusb_falcon_src", "xusb_ss",
-                             "xusb_ss_div2", "xusb_ss_src",
+                             "xusb_ss_src", "xusb_ss_div2",
                              "xusb_hs_src", "xusb_fs_src",
                              "pll_u_480m", "clk_m", "pll_e";
                resets = <&tegra_car 89>, <&tegra_car 156>,
                };
        };
 
-       sdhci@700b0000 {
-               compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
+       mmc@700b0000 {
+               compatible = "nvidia,tegra210-sdhci";
                reg = <0x0 0x700b0000 0x0 0x200>;
                interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA210_CLK_SDMMC1>;
                status = "disabled";
        };
 
-       sdhci@700b0200 {
-               compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
+       mmc@700b0200 {
+               compatible = "nvidia,tegra210-sdhci";
                reg = <0x0 0x700b0200 0x0 0x200>;
                interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA210_CLK_SDMMC2>;
                status = "disabled";
        };
 
-       sdhci@700b0400 {
-               compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
+       mmc@700b0400 {
+               compatible = "nvidia,tegra210-sdhci";
                reg = <0x0 0x700b0400 0x0 0x200>;
                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA210_CLK_SDMMC3>;
                status = "disabled";
        };
 
-       sdhci@700b0600 {
-               compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
+       mmc@700b0600 {
+               compatible = "nvidia,tegra210-sdhci";
                reg = <0x0 0x700b0600 0x0 0x200>;
                interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&tegra_car TEGRA210_CLK_SDMMC4>;
                        status = "disabled";
                };
 
-               agic: agic@702f9000 {
+               agic: interrupt-controller@702f9000 {
                        compatible = "nvidia,tegra210-agic";
                        #interrupt-cells = <3>;
                        interrupt-controller;
 
        soctherm: thermal-sensor@700e2000 {
                compatible = "nvidia,tegra210-soctherm";
-               reg = <0x0 0x700e2000 0x0 0x600 /* SOC_THERM reg_base */
-                       0x0 0x60006000 0x0 0x400>; /* CAR reg_base */
+               reg = <0x0 0x700e2000 0x0 0x600>, /* SOC_THERM reg_base */
+                     <0x0 0x60006000 0x0 0x400>; /* CAR reg_base */
                reg-names = "soctherm-reg", "car-reg";
                interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
index 0f2c33d..c98bafe 100644 (file)
@@ -16,6 +16,11 @@ dtb-$(CONFIG_ARCH_QCOM)      += msm8998-hp-envy-x2.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += msm8998-lenovo-miix-630.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += msm8998-mtp.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += sc7180-idp.dtb
+dtb-$(CONFIG_ARCH_QCOM)        += sdm630-sony-xperia-ganges-kirin.dtb
+dtb-$(CONFIG_ARCH_QCOM)        += sdm630-sony-xperia-nile-discovery.dtb
+dtb-$(CONFIG_ARCH_QCOM)        += sdm630-sony-xperia-nile-pioneer.dtb
+dtb-$(CONFIG_ARCH_QCOM)        += sdm630-sony-xperia-nile-voyager.dtb
+dtb-$(CONFIG_ARCH_QCOM)        += sdm636-sony-xperia-ganges-mermaid.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += sdm660-xiaomi-lavender.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += sdm845-cheza-r1.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += sdm845-cheza-r2.dtb
index 8a4b790..1943435 100644 (file)
 
                */
 
-                sound: sound {
-                        compatible = "qcom,apq8016-sbc-sndcard";
-                        reg = <0x07702000 0x4>, <0x07702004 0x4>;
-                        reg-names = "mic-iomux", "spkr-iomux";
-
-                        status = "okay";
-                        pinctrl-0 = <&cdc_pdm_lines_act &ext_sec_tlmm_lines_act &ext_mclk_tlmm_lines_act>;
-                        pinctrl-1 = <&cdc_pdm_lines_sus &ext_sec_tlmm_lines_sus &ext_mclk_tlmm_lines_sus>;
-                        pinctrl-names = "default", "sleep";
-                        qcom,model = "DB410c";
-                        qcom,audio-routing =
-                                "AMIC2", "MIC BIAS Internal2",
-                                "AMIC3", "MIC BIAS External1";
+               sound: sound {
+                       compatible = "qcom,apq8016-sbc-sndcard";
+                       reg = <0x07702000 0x4>, <0x07702004 0x4>;
+                       reg-names = "mic-iomux", "spkr-iomux";
+
+                       status = "okay";
+                       pinctrl-0 = <&cdc_pdm_lines_act &ext_sec_tlmm_lines_act &ext_mclk_tlmm_lines_act>;
+                       pinctrl-1 = <&cdc_pdm_lines_sus &ext_sec_tlmm_lines_sus &ext_mclk_tlmm_lines_sus>;
+                       pinctrl-names = "default", "sleep";
+                       qcom,model = "DB410c";
+                       qcom,audio-routing =
+                               "AMIC2", "MIC BIAS Internal2",
+                               "AMIC3", "MIC BIAS External1";
+
                        external-dai-link@0 {
                                link-name = "ADV7533";
-                               cpu { /* QUAT */
+                               cpu {
                                        sound-dai = <&lpass MI2S_QUATERNARY>;
                                };
                                codec {
                                };
                        };
 
-                        internal-codec-playback-dai-link@0 {            /* I2S - Internal codec */
-                                link-name = "WCD";
-                                cpu { /* PRIMARY */
-                                        sound-dai = <&lpass MI2S_PRIMARY>;
-                                };
-                                codec {
-                                        sound-dai = <&lpass_codec 0>, <&wcd_codec 0>;
-                                };
-                        };
-
-                        internal-codec-capture-dai-link@0 {             /* I2S - Internal codec */
-                                link-name = "WCD-Capture";
-                                cpu { /* PRIMARY */
-                                        sound-dai = <&lpass MI2S_TERTIARY>;
-                                };
-                                codec {
-                                        sound-dai = <&lpass_codec 1>, <&wcd_codec 1>;
-                                };
-                        };
-                };
+                       internal-codec-playback-dai-link@0 {
+                               link-name = "WCD";
+                               cpu {
+                                       sound-dai = <&lpass MI2S_PRIMARY>;
+                               };
+                               codec {
+                                       sound-dai = <&lpass_codec 0>, <&wcd_codec 0>;
+                               };
+                       };
+
+                       internal-codec-capture-dai-link@0 {
+                               link-name = "WCD-Capture";
+                               cpu {
+                                       sound-dai = <&lpass MI2S_TERTIARY>;
+                               };
+                               codec {
+                                       sound-dai = <&lpass_codec 1>, <&wcd_codec 1>;
+                               };
+                       };
+               };
 
                spmi@200f000 {
                        pm8916@0 {
 };
 
 &wcd_codec {
-        status = "okay";
-        clocks = <&gcc GCC_CODEC_DIGCODEC_CLK>;
-        clock-names = "mclk";
+       status = "okay";
+       clocks = <&gcc GCC_CODEC_DIGCODEC_CLK>;
+       clock-names = "mclk";
        qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
        qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
 };
        };
 };
 
+/*
+ * 2mA drive strength is not enough when connecting multiple
+ * I2C devices with different pull up resistors.
+ */
+&i2c2_default {
+       drive-strength = <16>;
+};
+
+&i2c4_default {
+       drive-strength = <16>;
+};
+
+&i2c6_default {
+       drive-strength = <16>;
+};
+
 &msmgpio {
        msmgpio_leds: msmgpio-leds {
-               pinconf {
-                       pins = "gpio21", "gpio120";
-                       function = "gpio";
-                       output-low;
-               };
+               pins = "gpio21", "gpio120";
+               function = "gpio";
+
+               output-low;
        };
 
        usb_id_default: usb-id-default {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio121";
-               };
+               pins = "gpio121";
+               function = "gpio";
 
-               pinconf {
-                       pins = "gpio121";
-                       drive-strength = <8>;
-                       input-enable;
-                       bias-pull-up;
-               };
+               drive-strength = <8>;
+               input-enable;
+               bias-pull-up;
        };
 
        adv7533_int_active: adv533-int-active {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio31";
-               };
-               pinconf {
-                       pins = "gpio31";
-                       drive-strength = <16>;
-                       bias-disable;
-               };
+               pins = "gpio31";
+               function = "gpio";
+
+               drive-strength = <16>;
+               bias-disable;
        };
 
        adv7533_int_suspend: adv7533-int-suspend {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio31";
-               };
-               pinconf {
-                       pins = "gpio31";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio31";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        adv7533_switch_active: adv7533-switch-active {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio32";
-               };
-               pinconf {
-                       pins = "gpio32";
-                       drive-strength = <16>;
-                       bias-disable;
-               };
+               pins = "gpio32";
+               function = "gpio";
+
+               drive-strength = <16>;
+               bias-disable;
        };
 
        adv7533_switch_suspend: adv7533-switch-suspend {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio32";
-               };
-               pinconf {
-                       pins = "gpio32";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio32";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        msm_key_volp_n_default: msm-key-volp-n-default {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio107";
-               };
-               pinconf {
-                       pins = "gpio107";
-                       drive-strength = <8>;
-                       input-enable;
-                       bias-pull-up;
-               };
+               pins = "gpio107";
+               function = "gpio";
+
+               drive-strength = <8>;
+               input-enable;
+               bias-pull-up;
        };
 };
 
 &pm8916_gpios {
        usb_hub_reset_pm: usb-hub-reset-pm {
-               pinconf {
-                       pins = "gpio3";
-                       function = PMIC_GPIO_FUNC_NORMAL;
-                       input-disable;
-                       output-high;
-               };
+               pins = "gpio3";
+               function = PMIC_GPIO_FUNC_NORMAL;
+
+               input-disable;
+               output-high;
        };
 
        usb_hub_reset_pm_device: usb-hub-reset-pm-device {
-               pinconf {
-                       pins = "gpio3";
-                       function = PMIC_GPIO_FUNC_NORMAL;
-                       output-low;
-               };
+               pins = "gpio3";
+               function = PMIC_GPIO_FUNC_NORMAL;
+
+               output-low;
        };
 
        usb_sw_sel_pm: usb-sw-sel-pm {
-               pinconf {
-                       pins = "gpio4";
-                       function = PMIC_GPIO_FUNC_NORMAL;
-                       power-source = <PM8916_GPIO_VPH>;
-                       input-disable;
-                       output-high;
-               };
+               pins = "gpio4";
+               function = PMIC_GPIO_FUNC_NORMAL;
+
+               power-source = <PM8916_GPIO_VPH>;
+               input-disable;
+               output-high;
        };
 
        usb_sw_sel_pm_device: usb-sw-sel-pm-device {
-               pinconf {
-                       pins = "gpio4";
-                       function = PMIC_GPIO_FUNC_NORMAL;
-                       power-source = <PM8916_GPIO_VPH>;
-                       input-disable;
-                       output-low;
-               };
+               pins = "gpio4";
+               function = PMIC_GPIO_FUNC_NORMAL;
+
+               power-source = <PM8916_GPIO_VPH>;
+               input-disable;
+               output-low;
        };
 
        pm8916_gpios_leds: pm8916-gpios-leds {
-               pinconf {
-                       pins = "gpio1", "gpio2";
-                       function = PMIC_GPIO_FUNC_NORMAL;
-                       output-low;
-               };
+               pins = "gpio1", "gpio2";
+               function = PMIC_GPIO_FUNC_NORMAL;
+
+               output-low;
        };
 };
 
        pinctrl-0 = <&ls_exp_gpio_f>;
 
        ls_exp_gpio_f: pm8916-mpp4 {
-               pinconf {
-                       pins = "mpp4";
-                       function = "digital";
-                       output-low;
-                       power-source = <PM8916_MPP_L5>; // 1.8V
-               };
+               pins = "mpp4";
+               function = "digital";
+
+               output-low;
+               power-source = <PM8916_MPP_L5>; // 1.8V
        };
 
        pm8916_mpps_leds: pm8916-mpps-leds {
-               pinconf {
-                       pins = "mpp2", "mpp3";
-                       function = "digital";
-                       output-low;
-               };
+               pins = "mpp2", "mpp3";
+               function = "digital";
+
+               output-low;
        };
 };
index 6754cb0..f4a7616 100644 (file)
                nand-bus-width = <8>;
        };
 };
+
+&sdhc_1 {
+       status = "ok";
+};
+
+&qusb_phy_0 {
+       status = "ok";
+};
+
+&qusb_phy_1 {
+       status = "ok";
+};
+
+&ssphy_0 {
+       status = "ok";
+};
+
+&ssphy_1 {
+       status = "ok";
+};
+
+&usb_0 {
+       status = "ok";
+};
+
+&usb_1 {
+       status = "ok";
+};
index 5303821..96a5ec8 100644 (file)
                ranges = <0 0 0 0xffffffff>;
                compatible = "simple-bus";
 
+               ssphy_1: phy@58000 {
+                       compatible = "qcom,ipq8074-qmp-usb3-phy";
+                       reg = <0x00058000 0x1c4>;
+                       #clock-cells = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+
+                       clocks = <&gcc GCC_USB1_AUX_CLK>,
+                               <&gcc GCC_USB1_PHY_CFG_AHB_CLK>,
+                               <&xo>;
+                       clock-names = "aux", "cfg_ahb", "ref";
+
+                       resets =  <&gcc GCC_USB1_PHY_BCR>,
+                               <&gcc GCC_USB3PHY_1_PHY_BCR>;
+                       reset-names = "phy","common";
+                       status = "disabled";
+
+                       usb1_ssphy: lane@58200 {
+                               reg = <0x00058200 0x130>,       /* Tx */
+                                     <0x00058400 0x200>,     /* Rx */
+                                     <0x00058800 0x1f8>,     /* PCS  */
+                                     <0x00058600 0x044>;     /* PCS misc*/
+                               #phy-cells = <0>;
+                               clocks = <&gcc GCC_USB1_PIPE_CLK>;
+                               clock-names = "pipe0";
+                               clock-output-names = "gcc_usb1_pipe_clk_src";
+                       };
+               };
+
+               qusb_phy_1: phy@59000 {
+                       compatible = "qcom,ipq8074-qusb2-phy";
+                       reg = <0x00059000 0x180>;
+                       #phy-cells = <0>;
+
+                       clocks = <&gcc GCC_USB1_PHY_CFG_AHB_CLK>,
+                                <&xo>;
+                       clock-names = "cfg_ahb", "ref";
+
+                       resets = <&gcc GCC_QUSB2_1_PHY_BCR>;
+                       status = "disabled";
+               };
+
+               ssphy_0: phy@78000 {
+                       compatible = "qcom,ipq8074-qmp-usb3-phy";
+                       reg = <0x00078000 0x1c4>;
+                       #clock-cells = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+
+                       clocks = <&gcc GCC_USB0_AUX_CLK>,
+                               <&gcc GCC_USB0_PHY_CFG_AHB_CLK>,
+                               <&xo>;
+                       clock-names = "aux", "cfg_ahb", "ref";
+
+                       resets =  <&gcc GCC_USB0_PHY_BCR>,
+                               <&gcc GCC_USB3PHY_0_PHY_BCR>;
+                       reset-names = "phy","common";
+                       status = "disabled";
+
+                       usb0_ssphy: lane@78200 {
+                               reg = <0x00078200 0x130>,       /* Tx */
+                                     <0x00078400 0x200>,     /* Rx */
+                                     <0x00078800 0x1f8>,     /* PCS  */
+                                     <0x00078600 0x044>;     /* PCS misc*/
+                               #phy-cells = <0>;
+                               clocks = <&gcc GCC_USB0_PIPE_CLK>;
+                               clock-names = "pipe0";
+                               clock-output-names = "gcc_usb0_pipe_clk_src";
+                       };
+               };
+
+               qusb_phy_0: phy@79000 {
+                       compatible = "qcom,ipq8074-qusb2-phy";
+                       reg = <0x00079000 0x180>;
+                       #phy-cells = <0>;
+
+                       clocks = <&gcc GCC_USB0_PHY_CFG_AHB_CLK>,
+                                <&xo>;
+                       clock-names = "cfg_ahb", "ref";
+
+                       resets = <&gcc GCC_QUSB2_0_PHY_BCR>;
+               };
+
                pcie_phy0: phy@86000 {
                        compatible = "qcom,ipq8074-qmp-pcie-phy";
                        reg = <0x00086000 0x1000>;
                        #reset-cells = <0x1>;
                };
 
+               sdhc_1: sdhci@7824900 {
+                       compatible = "qcom,sdhci-msm-v4";
+                       reg = <0x7824900 0x500>, <0x7824000 0x800>;
+                       reg-names = "hc_mem", "core_mem";
+
+                       interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "hc_irq", "pwr_irq";
+
+                       clocks = <&xo>,
+                                <&gcc GCC_SDCC1_AHB_CLK>,
+                                <&gcc GCC_SDCC1_APPS_CLK>;
+                       clock-names = "xo", "iface", "core";
+                       max-frequency = <384000000>;
+                       mmc-ddr-1_8v;
+                       mmc-hs200-1_8v;
+                       mmc-hs400-1_8v;
+                       bus-width = <8>;
+
+                       status = "disabled";
+               };
+
                blsp_dma: dma@7884000 {
                        compatible = "qcom,bam-v1.7.0";
                        reg = <0x07884000 0x2b000>;
                        status = "disabled";
                };
 
+               usb_0: usb@8af8800 {
+                       compatible = "qcom,dwc3";
+                       reg = <0x08af8800 0x400>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+
+                       clocks = <&gcc GCC_SYS_NOC_USB0_AXI_CLK>,
+                               <&gcc GCC_USB0_MASTER_CLK>,
+                               <&gcc GCC_USB0_SLEEP_CLK>,
+                               <&gcc GCC_USB0_MOCK_UTMI_CLK>;
+                       clock-names = "sys_noc_axi",
+                               "master",
+                               "sleep",
+                               "mock_utmi";
+
+                       assigned-clocks = <&gcc GCC_SYS_NOC_USB0_AXI_CLK>,
+                                         <&gcc GCC_USB0_MASTER_CLK>,
+                                         <&gcc GCC_USB0_MOCK_UTMI_CLK>;
+                       assigned-clock-rates = <133330000>,
+                                               <133330000>,
+                                               <19200000>;
+
+                       resets = <&gcc GCC_USB0_BCR>;
+                       status = "disabled";
+
+                       dwc_0: dwc3@8a00000 {
+                               compatible = "snps,dwc3";
+                               reg = <0x8a00000 0xcd00>;
+                               interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+                               phys = <&qusb_phy_0>, <&usb0_ssphy>;
+                               phy-names = "usb2-phy", "usb3-phy";
+                               tx-fifo-resize;
+                               snps,is-utmi-l1-suspend;
+                               snps,hird-threshold = /bits/ 8 <0x0>;
+                               snps,dis_u2_susphy_quirk;
+                               snps,dis_u3_susphy_quirk;
+                               dr_mode = "host";
+                       };
+               };
+
+               usb_1: usb@8cf8800 {
+                       compatible = "qcom,dwc3";
+                       reg = <0x08cf8800 0x400>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+
+                       clocks = <&gcc GCC_SYS_NOC_USB1_AXI_CLK>,
+                               <&gcc GCC_USB1_MASTER_CLK>,
+                               <&gcc GCC_USB1_SLEEP_CLK>,
+                               <&gcc GCC_USB1_MOCK_UTMI_CLK>;
+                       clock-names = "sys_noc_axi",
+                               "master",
+                               "sleep",
+                               "mock_utmi";
+
+                       assigned-clocks = <&gcc GCC_SYS_NOC_USB1_AXI_CLK>,
+                                         <&gcc GCC_USB1_MASTER_CLK>,
+                                         <&gcc GCC_USB1_MOCK_UTMI_CLK>;
+                       assigned-clock-rates = <133330000>,
+                                               <133330000>,
+                                               <19200000>;
+
+                       resets = <&gcc GCC_USB1_BCR>;
+                       status = "disabled";
+
+                       dwc_1: dwc3@8c00000 {
+                               compatible = "snps,dwc3";
+                               reg = <0x8c00000 0xcd00>;
+                               interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
+                               phys = <&qusb_phy_1>, <&usb1_ssphy>;
+                               phy-names = "usb2-phy", "usb3-phy";
+                               tx-fifo-resize;
+                               snps,is-utmi-l1-suspend;
+                               snps,hird-threshold = /bits/ 8 <0x0>;
+                               snps,dis_u2_susphy_quirk;
+                               snps,dis_u3_susphy_quirk;
+                               dr_mode = "host";
+                       };
+               };
+
                intc: interrupt-controller@b000000 {
                        compatible = "qcom,msm-qgic2";
                        interrupt-controller;
index d5230cb..9f2c8e9 100644 (file)
        };
 };
 
-&msmgpio {
-       gpio_keys_default: gpio-keys-default {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio107";
-               };
-               pinconf {
-                       pins = "gpio107";
-                       drive-strength = <2>;
-                       bias-pull-up;
-               };
-       };
-
-       usb_vbus_default: usb-vbus-default {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio62";
-               };
-               pinconf {
-                       pins = "gpio62";
-                       bias-pull-up;
-               };
-       };
-};
-
 &spmi_bus {
        pm8916@0 {
                pon@800 {
                regulator-max-microvolt = <2700000>;
        };
 };
+
+&msmgpio {
+       gpio_keys_default: gpio-keys-default {
+               pins = "gpio107";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-pull-up;
+       };
+
+       usb_vbus_default: usb-vbus-default {
+               pins = "gpio62";
+               function = "gpio";
+
+               bias-pull-up;
+       };
+};
index e9c0036..4dc437f 100644 (file)
@@ -6,74 +6,49 @@
 &msmgpio {
 
        blsp1_uart1_default: blsp1-uart1-default {
-               pinmux {
-                       function = "blsp_uart1";
-                       //      TX, RX, CTS_N, RTS_N
-                       pins = "gpio0", "gpio1",
-                              "gpio2", "gpio3";
-               };
-               pinconf {
-                       pins = "gpio0", "gpio1",
-                              "gpio2", "gpio3";
-                       drive-strength = <16>;
-                       bias-disable;
-               };
+               //      TX, RX, CTS_N, RTS_N
+               pins = "gpio0", "gpio1", "gpio2", "gpio3";
+               function = "blsp_uart1";
+
+               drive-strength = <16>;
+               bias-disable;
        };
 
        blsp1_uart1_sleep: blsp1-uart1-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio0", "gpio1",
-                              "gpio2", "gpio3";
-               };
-               pinconf {
-                       pins = "gpio0", "gpio1",
-                              "gpio2", "gpio3";
-                       drive-strength = <2>;
-                       bias-pull-down;
-               };
+               pins = "gpio0", "gpio1", "gpio2", "gpio3";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-pull-down;
        };
 
        blsp1_uart2_default: blsp1-uart2-default {
-               pinmux {
-                       function = "blsp_uart2";
-                       pins = "gpio4", "gpio5";
-               };
-               pinconf {
-                       pins = "gpio4", "gpio5";
-                       drive-strength = <16>;
-                       bias-disable;
-               };
+               pins = "gpio4", "gpio5";
+               function = "blsp_uart2";
+
+               drive-strength = <16>;
+               bias-disable;
        };
 
        blsp1_uart2_sleep: blsp1-uart2-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio4", "gpio5";
-               };
-               pinconf {
-                       pins = "gpio4", "gpio5";
-                       drive-strength = <2>;
-                       bias-pull-down;
-               };
+               pins = "gpio4", "gpio5";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-pull-down;
        };
 
        spi1_default: spi1-default {
-               pinmux {
-                       function = "blsp_spi1";
-                       pins = "gpio0", "gpio1", "gpio3";
-               };
-               pinmux-cs {
-                       function = "gpio";
-                       pins = "gpio2";
-               };
-               pinconf {
-                       pins = "gpio0", "gpio1", "gpio3";
-                       drive-strength = <12>;
-                       bias-disable;
-               };
-               pinconf-cs {
+               pins = "gpio0", "gpio1", "gpio3";
+               function = "blsp_spi1";
+
+               drive-strength = <12>;
+               bias-disable;
+
+               cs {
                        pins = "gpio2";
+                       function = "gpio";
+
                        drive-strength = <16>;
                        bias-disable;
                        output-high;
        };
 
        spi1_sleep: spi1-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio0", "gpio1", "gpio2", "gpio3";
-               };
-               pinconf {
-                       pins = "gpio0", "gpio1", "gpio2", "gpio3";
-                       drive-strength = <2>;
-                       bias-pull-down;
-               };
+               pins = "gpio0", "gpio1", "gpio2", "gpio3";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-pull-down;
        };
 
        spi2_default: spi2-default {
-               pinmux {
-                       function = "blsp_spi2";
-                       pins = "gpio4", "gpio5", "gpio7";
-               };
-               pinmux-cs {
-                       function = "gpio";
-                       pins = "gpio6";
-               };
-               pinconf {
-                       pins = "gpio4", "gpio5", "gpio7";
-                       drive-strength = <12>;
-                       bias-disable;
-               };
-               pinconf-cs {
+               pins = "gpio4", "gpio5", "gpio7";
+               function = "blsp_spi2";
+
+               drive-strength = <12>;
+               bias-disable;
+
+               cs {
                        pins = "gpio6";
+                       function = "gpio";
+
                        drive-strength = <16>;
                        bias-disable;
                        output-high;
        };
 
        spi2_sleep: spi2-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio4", "gpio5", "gpio6", "gpio7";
-               };
-               pinconf {
-                       pins = "gpio4", "gpio5", "gpio6", "gpio7";
-                       drive-strength = <2>;
-                       bias-pull-down;
-               };
+               pins = "gpio4", "gpio5", "gpio6", "gpio7";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-pull-down;
        };
 
        spi3_default: spi3-default {
-               pinmux {
-                       function = "blsp_spi3";
-                       pins = "gpio8", "gpio9", "gpio11";
-               };
-               pinmux-cs {
-                       function = "gpio";
-                       pins = "gpio10";
-               };
-               pinconf {
-                       pins = "gpio8", "gpio9", "gpio11";
-                       drive-strength = <12>;
-                       bias-disable;
-               };
-               pinconf-cs {
+               pins = "gpio8", "gpio9", "gpio11";
+               function = "blsp_spi3";
+
+               drive-strength = <12>;
+               bias-disable;
+
+               cs {
                        pins = "gpio10";
+                       function = "gpio";
+
                        drive-strength = <16>;
                        bias-disable;
                        output-high;
        };
 
        spi3_sleep: spi3-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio8", "gpio9", "gpio10", "gpio11";
-               };
-               pinconf {
-                       pins = "gpio8", "gpio9", "gpio10", "gpio11";
-                       drive-strength = <2>;
-                       bias-pull-down;
-               };
+               pins = "gpio8", "gpio9", "gpio10", "gpio11";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-pull-down;
        };
 
        spi4_default: spi4-default {
-               pinmux {
-                       function = "blsp_spi4";
-                       pins = "gpio12", "gpio13", "gpio15";
-               };
-               pinmux-cs {
-                       function = "gpio";
-                       pins = "gpio14";
-               };
-               pinconf {
-                       pins = "gpio12", "gpio13", "gpio15";
-                       drive-strength = <12>;
-                       bias-disable;
-               };
-               pinconf-cs {
+               pins = "gpio12", "gpio13", "gpio15";
+               function = "blsp_spi4";
+
+               drive-strength = <12>;
+               bias-disable;
+
+               cs {
                        pins = "gpio14";
+                       function = "gpio";
+
                        drive-strength = <16>;
                        bias-disable;
                        output-high;
        };
 
        spi4_sleep: spi4-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio12", "gpio13", "gpio14", "gpio15";
-               };
-               pinconf {
-                       pins = "gpio12", "gpio13", "gpio14", "gpio15";
-                       drive-strength = <2>;
-                       bias-pull-down;
-               };
+               pins = "gpio12", "gpio13", "gpio14", "gpio15";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-pull-down;
        };
 
        spi5_default: spi5-default {
-               pinmux {
-                       function = "blsp_spi5";
-                       pins = "gpio16", "gpio17", "gpio19";
-               };
-               pinmux-cs {
-                       function = "gpio";
-                       pins = "gpio18";
-               };
-               pinconf {
-                       pins = "gpio16", "gpio17", "gpio19";
-                       drive-strength = <12>;
-                       bias-disable;
-               };
-               pinconf-cs {
+               pins = "gpio16", "gpio17", "gpio19";
+               function = "blsp_spi5";
+
+               drive-strength = <12>;
+               bias-disable;
+
+               cs {
                        pins = "gpio18";
+                       function = "gpio";
+
                        drive-strength = <16>;
                        bias-disable;
                        output-high;
        };
 
        spi5_sleep: spi5-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio16", "gpio17", "gpio18", "gpio19";
-               };
-               pinconf {
-                       pins = "gpio16", "gpio17", "gpio18", "gpio19";
-                       drive-strength = <2>;
-                       bias-pull-down;
-               };
+               pins = "gpio16", "gpio17", "gpio18", "gpio19";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-pull-down;
        };
 
        spi6_default: spi6-default {
-               pinmux {
-                       function = "blsp_spi6";
-                       pins = "gpio20", "gpio21", "gpio23";
-               };
-               pinmux-cs {
-                       function = "gpio";
-                       pins = "gpio22";
-               };
-               pinconf {
-                       pins = "gpio20", "gpio21", "gpio23";
-                       drive-strength = <12>;
-                       bias-disable;
-               };
-               pinconf-cs {
+               pins = "gpio20", "gpio21", "gpio23";
+               function = "blsp_spi6";
+
+               drive-strength = <12>;
+               bias-disable;
+
+               cs {
                        pins = "gpio22";
+                       function = "gpio";
+
                        drive-strength = <16>;
                        bias-disable;
                        output-high;
        };
 
        spi6_sleep: spi6-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio20", "gpio21", "gpio22", "gpio23";
-               };
-               pinconf {
-                       pins = "gpio20", "gpio21", "gpio22", "gpio23";
-                       drive-strength = <2>;
-                       bias-pull-down;
-               };
+               pins = "gpio20", "gpio21", "gpio22", "gpio23";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-pull-down;
        };
 
        i2c1_default: i2c1-default {
-               pinmux {
-                       function = "blsp_i2c1";
-                       pins = "gpio2", "gpio3";
-               };
-               pinconf {
-                       pins = "gpio2", "gpio3";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio2", "gpio3";
+               function = "blsp_i2c1";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        i2c1_sleep: i2c1-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio2", "gpio3";
-               };
-               pinconf {
-                       pins = "gpio2", "gpio3";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio2", "gpio3";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        i2c2_default: i2c2-default {
-               pinmux {
-                       function = "blsp_i2c2";
-                       pins = "gpio6", "gpio7";
-               };
-               pinconf {
-                       pins = "gpio6", "gpio7";
-                       drive-strength = <16>;
-                       bias-disable;
-               };
+               pins = "gpio6", "gpio7";
+               function = "blsp_i2c2";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        i2c2_sleep: i2c2-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio6", "gpio7";
-               };
-               pinconf {
-                       pins = "gpio6", "gpio7";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio6", "gpio7";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        i2c4_default: i2c4-default {
-               pinmux {
-                       function = "blsp_i2c4";
-                       pins = "gpio14", "gpio15";
-               };
-               pinconf {
-                       pins = "gpio14", "gpio15";
-                       drive-strength = <16>;
-                       bias-disable;
-               };
+               pins = "gpio14", "gpio15";
+               function = "blsp_i2c4";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        i2c4_sleep: i2c4-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio14", "gpio15";
-               };
-               pinconf {
-                       pins = "gpio14", "gpio15";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio14", "gpio15";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        i2c5_default: i2c5-default {
-               pinmux {
-                       function = "blsp_i2c5";
-                       pins = "gpio18", "gpio19";
-               };
-               pinconf {
-                       pins = "gpio18", "gpio19";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio18", "gpio19";
+               function = "blsp_i2c5";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        i2c5_sleep: i2c5-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio18", "gpio19";
-               };
-               pinconf {
-                       pins = "gpio18", "gpio19";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio18", "gpio19";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        i2c6_default: i2c6-default {
-               pinmux {
-                       function = "blsp_i2c6";
-                       pins = "gpio22", "gpio23";
-               };
-               pinconf {
-                       pins = "gpio22", "gpio23";
-                       drive-strength = <16>;
-                       bias-disable;
-               };
+               pins = "gpio22", "gpio23";
+               function = "blsp_i2c6";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        i2c6_sleep: i2c6-sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio22", "gpio23";
-               };
-               pinconf {
-                       pins = "gpio22", "gpio23";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio22", "gpio23";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 
        pmx-sdc1-clk {
                sdc1_clk_on: clk-on {
-                       pinmux {
-                               pins = "sdc1_clk";
-                       };
-                       pinconf {
-                               pins = "sdc1_clk";
-                               bias-disable;
-                               drive-strength = <16>;
-                       };
+                       pins = "sdc1_clk";
+
+                       bias-disable;
+                       drive-strength = <16>;
                };
                sdc1_clk_off: clk-off {
-                       pinmux {
-                               pins = "sdc1_clk";
-                       };
-                       pinconf {
-                               pins = "sdc1_clk";
-                               bias-disable;
-                               drive-strength = <2>;
-                       };
+                       pins = "sdc1_clk";
+
+                       bias-disable;
+                       drive-strength = <2>;
                };
        };
 
        pmx-sdc1-cmd {
                sdc1_cmd_on: cmd-on {
-                       pinmux {
-                               pins = "sdc1_cmd";
-                       };
-                       pinconf {
-                               pins = "sdc1_cmd";
-                               bias-pull-up;
-                               drive-strength = <10>;
-                       };
+                       pins = "sdc1_cmd";
+
+                       bias-pull-up;
+                       drive-strength = <10>;
                };
                sdc1_cmd_off: cmd-off {
-                       pinmux {
-                               pins = "sdc1_cmd";
-                       };
-                       pinconf {
-                               pins = "sdc1_cmd";
-                               bias-pull-up;
-                               drive-strength = <2>;
-                       };
+                       pins = "sdc1_cmd";
+
+                       bias-pull-up;
+                       drive-strength = <2>;
                };
        };
 
        pmx-sdc1-data {
                sdc1_data_on: data-on {
-                       pinmux {
-                               pins = "sdc1_data";
-                       };
-                       pinconf {
-                               pins = "sdc1_data";
-                               bias-pull-up;
-                               drive-strength = <10>;
-                       };
+                       pins = "sdc1_data";
+
+                       bias-pull-up;
+                       drive-strength = <10>;
                };
                sdc1_data_off: data-off {
-                       pinmux {
-                               pins = "sdc1_data";
-                       };
-                       pinconf {
-                               pins = "sdc1_data";
-                               bias-pull-up;
-                               drive-strength = <2>;
-                       };
+                       pins = "sdc1_data";
+
+                       bias-pull-up;
+                       drive-strength = <2>;
                };
        };
 
        pmx-sdc2-clk {
                sdc2_clk_on: clk-on {
-                       pinmux {
-                               pins = "sdc2_clk";
-                       };
-                       pinconf {
-                               pins = "sdc2_clk";
-                               bias-disable;
-                               drive-strength = <16>;
-                       };
+                       pins = "sdc2_clk";
+
+                       bias-disable;
+                       drive-strength = <16>;
                };
                sdc2_clk_off: clk-off {
-                       pinmux {
-                               pins = "sdc2_clk";
-                       };
-                       pinconf {
-                               pins = "sdc2_clk";
-                               bias-disable;
-                               drive-strength = <2>;
-                       };
+                       pins = "sdc2_clk";
+
+                       bias-disable;
+                       drive-strength = <2>;
                };
        };
 
        pmx-sdc2-cmd {
                sdc2_cmd_on: cmd-on {
-                       pinmux {
-                               pins = "sdc2_cmd";
-                       };
-                       pinconf {
-                               pins = "sdc2_cmd";
-                               bias-pull-up;
-                               drive-strength = <10>;
-                       };
+                       pins = "sdc2_cmd";
+
+                       bias-pull-up;
+                       drive-strength = <10>;
                };
                sdc2_cmd_off: cmd-off {
-                       pinmux {
-                               pins = "sdc2_cmd";
-                       };
-                       pinconf {
-                               pins = "sdc2_cmd";
-                               bias-pull-up;
-                               drive-strength = <2>;
-                       };
+                       pins = "sdc2_cmd";
+
+                       bias-pull-up;
+                       drive-strength = <2>;
                };
        };
 
        pmx-sdc2-data {
                sdc2_data_on: data-on {
-                       pinmux {
-                               pins = "sdc2_data";
-                       };
-                       pinconf {
-                               pins = "sdc2_data";
-                               bias-pull-up;
-                               drive-strength = <10>;
-                       };
+                       pins = "sdc2_data";
+
+                       bias-pull-up;
+                       drive-strength = <10>;
                };
                sdc2_data_off: data-off {
-                       pinmux {
-                               pins = "sdc2_data";
-                       };
-                       pinconf {
-                               pins = "sdc2_data";
-                               bias-pull-up;
-                               drive-strength = <2>;
-                       };
+                       pins = "sdc2_data";
+
+                       bias-pull-up;
+                       drive-strength = <2>;
                };
        };
 
        pmx-sdc2-cd-pin {
                sdc2_cd_on: cd-on {
-                       pinmux {
-                               function = "gpio";
-                               pins = "gpio38";
-                       };
-                       pinconf {
-                               pins = "gpio38";
-                               drive-strength = <2>;
-                               bias-pull-up;
-                       };
+                       pins = "gpio38";
+                       function = "gpio";
+
+                       drive-strength = <2>;
+                       bias-pull-up;
                };
                sdc2_cd_off: cd-off {
-                       pinmux {
-                               function = "gpio";
-                               pins = "gpio38";
-                       };
-                       pinconf {
-                               pins = "gpio38";
-                               drive-strength = <2>;
-                               bias-disable;
-                       };
+                       pins = "gpio38";
+                       function = "gpio";
+
+                       drive-strength = <2>;
+                       bias-disable;
                };
        };
 
        cdc-pdm-lines {
                cdc_pdm_lines_act: pdm-lines-on {
-                       pinmux {
-                               function = "cdc_pdm0";
-                               pins = "gpio63", "gpio64", "gpio65", "gpio66",
-                                      "gpio67", "gpio68";
-                       };
-                       pinconf {
-                               pins = "gpio63", "gpio64", "gpio65", "gpio66",
-                                      "gpio67", "gpio68";
-                               drive-strength = <8>;
-                               bias-pull-none;
-                       };
+                       pins = "gpio63", "gpio64", "gpio65", "gpio66",
+                              "gpio67", "gpio68";
+                       function = "cdc_pdm0";
+
+                       drive-strength = <8>;
+                       bias-disable;
                };
                cdc_pdm_lines_sus: pdm-lines-off {
-                       pinmux {
-                               function = "cdc_pdm0";
-                               pins = "gpio63", "gpio64", "gpio65", "gpio66",
-                                      "gpio67", "gpio68";
-                       };
-                       pinconf {
-                               pins = "gpio63", "gpio64", "gpio65", "gpio66",
-                                      "gpio67", "gpio68";
-                               drive-strength = <2>;
-                               bias-disable;
-                       };
+                       pins = "gpio63", "gpio64", "gpio65", "gpio66",
+                              "gpio67", "gpio68";
+                       function = "cdc_pdm0";
+
+                       drive-strength = <2>;
+                       bias-pull-down;
                };
        };
 
        ext-pri-tlmm-lines {
                ext_pri_tlmm_lines_act: ext-pa-on {
-                       pinmux {
-                               function = "pri_mi2s";
-                               pins = "gpio113", "gpio114", "gpio115",
-                                      "gpio116";
-                       };
-                       pinconf {
-                               pins = "gpio113", "gpio114", "gpio115",
-                                      "gpio116";
-                               drive-strength = <8>;
-                               bias-pull-none;
-                       };
-               };
+                       pins = "gpio113", "gpio114", "gpio115", "gpio116";
+                       function = "pri_mi2s";
 
+                       drive-strength = <8>;
+                       bias-disable;
+               };
                ext_pri_tlmm_lines_sus: ext-pa-off {
-                       pinmux {
-                               function = "pri_mi2s";
-                               pins = "gpio113", "gpio114", "gpio115",
-                                      "gpio116";
-                       };
-                       pinconf {
-                               pins = "gpio113", "gpio114", "gpio115",
-                                      "gpio116";
-                               drive-strength = <2>;
-                               bias-disable;
-                       };
+                       pins = "gpio113", "gpio114", "gpio115", "gpio116";
+                       function = "pri_mi2s";
+
+                       drive-strength = <2>;
+                       bias-disable;
                };
        };
 
        ext-pri-ws-line {
                ext_pri_ws_act: ext-pa-on {
-                       pinmux {
-                               function = "pri_mi2s_ws";
-                               pins = "gpio110";
-                       };
-                       pinconf {
-                               pins = "gpio110";
-                               drive-strength = <8>;
-                               bias-pull-none;
-                       };
-               };
+                       pins = "gpio110";
+                       function = "pri_mi2s_ws";
 
+                       drive-strength = <8>;
+                       bias-disable;
+               };
                ext_pri_ws_sus: ext-pa-off {
-                       pinmux {
-                               function = "pri_mi2s_ws";
-                               pins = "gpio110";
-                       };
-                       pinconf {
-                               pins = "gpio110";
-                               drive-strength = <2>;
-                               bias-disable;
-                       };
+                       pins = "gpio110";
+                       function = "pri_mi2s_ws";
+
+                       drive-strength = <2>;
+                       bias-disable;
                };
        };
 
        ext-mclk-tlmm-lines {
                ext_mclk_tlmm_lines_act: mclk-lines-on {
-                       pinmux {
-                               function = "pri_mi2s";
-                               pins = "gpio116";
-                       };
-                       pinconf {
-                               pins = "gpio116";
-                               drive-strength = <8>;
-                               bias-pull-none;
-                       };
+                       pins = "gpio116";
+                       function = "pri_mi2s";
+
+                       drive-strength = <8>;
+                       bias-disable;
                };
                ext_mclk_tlmm_lines_sus: mclk-lines-off {
-                       pinmux {
-                               function = "pri_mi2s";
-                               pins = "gpio116";
-                       };
-                       pinconf {
-                               pins = "gpio116";
-                               drive-strength = <2>;
-                               bias-disable;
-                       };
+                       pins = "gpio116";
+                       function = "pri_mi2s";
+
+                       drive-strength = <2>;
+                       bias-disable;
                };
        };
 
        /* secondary Mi2S */
        ext-sec-tlmm-lines {
                ext_sec_tlmm_lines_act: tlmm-lines-on {
-                       pinmux {
-                               function = "sec_mi2s";
-                               pins = "gpio112", "gpio117", "gpio118",
-                                      "gpio119";
-                       };
-                       pinconf {
-                               pins = "gpio112", "gpio117", "gpio118",
-                                       "gpio119";
-                               drive-strength = <8>;
-                               bias-pull-none;
-                       };
+                       pins = "gpio112", "gpio117", "gpio118", "gpio119";
+                       function = "sec_mi2s";
+
+                       drive-strength = <8>;
+                       bias-disable;
                };
                ext_sec_tlmm_lines_sus: tlmm-lines-off {
-                       pinmux {
-                               function = "sec_mi2s";
-                               pins = "gpio112", "gpio117", "gpio118",
-                                      "gpio119";
-                       };
-                       pinconf {
-                               pins = "gpio112", "gpio117", "gpio118",
-                                       "gpio119";
-                               drive-strength = <2>;
-                               bias-disable;
-                       };
+                       pins = "gpio112", "gpio117", "gpio118", "gpio119";
+                       function = "sec_mi2s";
+
+                       drive-strength = <2>;
+                       bias-disable;
                };
        };
 
        cdc-dmic-lines {
                cdc_dmic_lines_act: dmic-lines-on {
-                       pinmux-dmic0-clk {
-                               function = "dmic0_clk";
+                       clk {
                                pins = "gpio0";
+                               function = "dmic0_clk";
+
+                               drive-strength = <8>;
                        };
-                       pinmux-dmic0-data {
-                               function = "dmic0_data";
+                       data {
                                pins = "gpio1";
-                       };
-                       pinconf {
-                               pins = "gpio0", "gpio1";
+                               function = "dmic0_data";
+
                                drive-strength = <8>;
                        };
                };
                cdc_dmic_lines_sus: dmic-lines-off {
-                       pinmux-dmic0-clk {
-                               function = "dmic0_clk";
+                       clk {
                                pins = "gpio0";
+                               function = "dmic0_clk";
+
+                               drive-strength = <2>;
+                               bias-disable;
                        };
-                       pinmux-dmic0-data {
-                               function = "dmic0_data";
+                       data {
                                pins = "gpio1";
-                       };
-                       pinconf {
-                               pins = "gpio0", "gpio1";
+                               function = "dmic0_data";
+
                                drive-strength = <2>;
                                bias-disable;
                        };
        };
 
        wcnss_pin_a: wcnss-active {
-               pinmux {
-                       pins = "gpio40", "gpio41", "gpio42", "gpio43", "gpio44";
-                       function = "wcss_wlan";
-               };
-               pinconf {
-                       pins = "gpio40", "gpio41", "gpio42", "gpio43", "gpio44";
-                       drive-strength = <6>;
-                       bias-pull-up;
-               };
+               pins = "gpio40", "gpio41", "gpio42", "gpio43", "gpio44";
+               function = "wcss_wlan";
+
+               drive-strength = <6>;
+               bias-pull-up;
        };
 
        cci0_default: cci0-default {
-               pinmux {
-                       function = "cci_i2c";
-                       pins = "gpio29", "gpio30";
-               };
-               pinconf {
-                       pins = "gpio29", "gpio30";
-                       drive-strength = <16>;
-                       bias-disable;
-               };
+               pins = "gpio29", "gpio30";
+               function = "cci_i2c";
+
+               drive-strength = <16>;
+               bias-disable;
        };
 
        camera_front_default: camera-front-default {
-               pinmux-pwdn {
-                       function = "gpio";
-                       pins = "gpio33";
-               };
-               pinconf-pwdn {
+               pwdn {
                        pins = "gpio33";
+                       function = "gpio";
+
                        drive-strength = <16>;
                        bias-disable;
                };
-
-               pinmux-rst {
-                       function = "gpio";
-                       pins = "gpio28";
-               };
-               pinconf-rst {
+               rst {
                        pins = "gpio28";
+                       function = "gpio";
+
                        drive-strength = <16>;
                        bias-disable;
                };
-
-               pinmux-mclk1 {
-                       function = "cam_mclk1";
-                       pins = "gpio27";
-               };
-               pinconf-mclk1 {
+               mclk1 {
                        pins = "gpio27";
+                       function = "cam_mclk1";
+
                        drive-strength = <16>;
                        bias-disable;
                };
        };
 
        camera_rear_default: camera-rear-default {
-               pinmux-pwdn {
-                       function = "gpio";
-                       pins = "gpio34";
-               };
-               pinconf-pwdn {
+               pwdn {
                        pins = "gpio34";
+                       function = "gpio";
+
                        drive-strength = <16>;
                        bias-disable;
                };
-
-               pinmux-rst {
-                       function = "gpio";
-                       pins = "gpio35";
-               };
-               pinconf-rst {
+               rst {
                        pins = "gpio35";
+                       function = "gpio";
+
                        drive-strength = <16>;
                        bias-disable;
                };
-
-               pinmux-mclk0 {
-                       function = "cam_mclk0";
-                       pins = "gpio26";
-               };
-               pinconf-mclk0 {
+               mclk0 {
                        pins = "gpio26";
+                       function = "cam_mclk0";
+
                        drive-strength = <16>;
                        bias-disable;
                };
index ea52adf..a0c00d9 100644 (file)
        };
 };
 
-&msmgpio {
-       gpio_keys_default: gpio-keys-default {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio107", "gpio109";
-               };
-               pinconf {
-                       pins = "gpio107", "gpio109";
-                       drive-strength = <2>;
-                       bias-pull-up;
-               };
-       };
+&blsp_i2c2 {
+       status = "okay";
 
-       gpio_hall_sensor_default: gpio-hall-sensor-default {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio52";
-               };
-               pinconf {
-                       pins = "gpio52";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
-       };
+       accelerometer: accelerometer@10 {
+               compatible = "bosch,bmc150_accel";
+               reg = <0x10>;
+               interrupt-parent = <&msmgpio>;
+               interrupts = <115 IRQ_TYPE_EDGE_RISING>;
 
-       muic_int_default: muic-int-default {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio12";
-               };
-               pinconf {
-                       pins = "gpio12";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pinctrl-names = "default";
+               pinctrl-0 = <&accel_int_default>;
        };
 
-       tsp_en_default: tsp-en-default {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio73";
-               };
-               pinconf {
-                       pins = "gpio73";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+       magnetometer@12 {
+               compatible = "bosch,bmc150_magn";
+               reg = <0x12>;
        };
+};
 
-       pmx-mdss {
-               mdss_default: mdss-default {
-                       pinmux {
-                               function = "gpio";
-                               pins = "gpio25";
-                       };
-                       pinconf {
-                               pins = "gpio25";
-                               drive-strength = <8>;
-                               bias-disable;
-                       };
-               };
-
-               mdss_sleep: mdss-sleep {
-                       pinmux {
-                               function = "gpio";
-                               pins = "gpio25";
-                       };
-                       pinconf {
-                               pins = "gpio25";
-                               drive-strength = <2>;
-                               bias-pull-down;
+&spmi_bus {
+       pm8916@0 {
+               pon@800 {
+                       volume-down {
+                               compatible = "qcom,pm8941-resin";
+                               interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>;
+                               bias-pull-up;
+                               linux,code = <KEY_VOLUMEDOWN>;
                        };
                };
        };
        };
 };
 
-&spmi_bus {
-       pm8916@0 {
-               pon@800 {
-                       volume-down {
-                               compatible = "qcom,pm8941-resin";
-                               interrupts = <0x0 0x8 1 IRQ_TYPE_EDGE_BOTH>;
-                               bias-pull-up;
-                               linux,code = <KEY_VOLUMEDOWN>;
-                       };
+&msmgpio {
+       accel_int_default: accel-int-default {
+               pins = "gpio115";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       gpio_keys_default: gpio-keys-default {
+               pins = "gpio107", "gpio109";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-pull-up;
+       };
+
+       gpio_hall_sensor_default: gpio-hall-sensor-default {
+               pins = "gpio52";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       mdss {
+               mdss_default: mdss-default {
+                       pins = "gpio25";
+                       function = "gpio";
+
+                       drive-strength = <8>;
+                       bias-disable;
+               };
+               mdss_sleep: mdss-sleep {
+                       pins = "gpio25";
+                       function = "gpio";
+
+                       drive-strength = <2>;
+                       bias-pull-down;
                };
        };
+
+       muic_int_default: muic-int-default {
+               pins = "gpio12";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       tsp_en_default: tsp-en-default {
+               pins = "gpio73";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
+       };
 };
index b46c872..410c7d1 100644 (file)
        };
 };
 
+&accelerometer {
+       mount-matrix = "0", "1", "0",
+                      "1", "0", "0",
+                      "0", "0", "1";
+};
+
 &dsi0 {
        panel@0 {
                reg = <0>;
 
 &msmgpio {
        panel_vdd3_default: panel-vdd3-default {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio9";
-               };
-               pinconf {
-                       pins = "gpio9";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio9";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 };
index a555db8..e39c04d 100644 (file)
@@ -9,6 +9,12 @@
        compatible = "samsung,a5u-eur", "qcom,msm8916";
 };
 
+&accelerometer {
+       mount-matrix = "-1", "0", "0",
+                       "0", "1", "0",
+                       "0", "0", "1";
+};
+
 &blsp_i2c5 {
        status = "okay";
 
 
 &msmgpio {
        ts_int_default: ts-int-default {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio13";
-               };
-               pinconf {
-                       pins = "gpio13";
-                       drive-strength = <2>;
-                       bias-disable;
-               };
+               pins = "gpio13";
+               function = "gpio";
+
+               drive-strength = <2>;
+               bias-disable;
        };
 };
index 32bd140..67cae5f 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <dt-bindings/arm/coresight-cti-dt.h>
+#include <dt-bindings/interconnect/qcom,msm8916.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/clock/qcom,gcc-msm8916.h>
 #include <dt-bindings/reset/qcom,gcc-msm8916.h>
                ranges = <0 0 0 0xffffffff>;
                compatible = "simple-bus";
 
+               bimc: interconnect@400000 {
+                       compatible = "qcom,msm8916-bimc";
+                       reg = <0x00400000 0x62000>;
+                       #interconnect-cells = <1>;
+                       clock-names = "bus", "bus_a";
+                       clocks = <&rpmcc RPM_SMD_BIMC_CLK>,
+                                <&rpmcc RPM_SMD_BIMC_A_CLK>;
+               };
+
                restart@4ab000 {
                        compatible = "qcom,pshold";
                        reg = <0x4ab000 0x4>;
                };
 
+               pcnoc: interconnect@500000 {
+                       compatible = "qcom,msm8916-pcnoc";
+                       reg = <0x00500000 0x11000>;
+                       #interconnect-cells = <1>;
+                       clock-names = "bus", "bus_a";
+                       clocks = <&rpmcc RPM_SMD_PCNOC_CLK>,
+                                <&rpmcc RPM_SMD_PCNOC_A_CLK>;
+               };
+
+               snoc: interconnect@580000 {
+                       compatible = "qcom,msm8916-snoc";
+                       reg = <0x00580000 0x14000>;
+                       #interconnect-cells = <1>;
+                       clock-names = "bus", "bus_a";
+                       clocks = <&rpmcc RPM_SMD_SNOC_CLK>,
+                                <&rpmcc RPM_SMD_SNOC_A_CLK>;
+               };
+
                msmgpio: pinctrl@1000000 {
                        compatible = "qcom,msm8916-pinctrl";
                        reg = <0x1000000 0x300000>;
                        interrupt-names = "lpass-irq-lpaif";
                        reg = <0x07708000 0x10000>;
                        reg-names = "lpass-lpaif";
+
+                       #address-cells = <1>;
+                       #size-cells = <0>;
                };
 
                 lpass_codec: codec{
index a5f9a6a..baa5564 100644 (file)
@@ -11,6 +11,8 @@
        model = "Huawei Nexus 6P";
        compatible = "huawei,angler", "qcom,msm8994";
        /* required for bootloader to select correct board */
+       qcom,msm-id = <207 0x20000>;
+       qcom,pmic-id = <0x10009 0x1000A 0x0 0x0>;
        qcom,board-id = <8026 0>;
 
        aliases {
diff --git a/arch/arm64/boot/dts/qcom/msm8994-pins.dtsi b/arch/arm64/boot/dts/qcom/msm8994-pins.dtsi
deleted file mode 100644 (file)
index 2e118d9..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
- */
-
-&msmgpio {
-       blsp1_uart2_default: blsp1_uart2_default {
-               pinmux {
-                       function = "blsp_uart2";
-                       pins = "gpio4", "gpio5";
-               };
-               pinconf {
-                       pins = "gpio4", "gpio5";
-                       drive-strength = <16>;
-                       bias-disable;
-               };
-       };
-
-       blsp1_uart2_sleep: blsp1_uart2_sleep {
-               pinmux {
-                       function = "gpio";
-                       pins = "gpio4", "gpio5";
-               };
-               pinconf {
-                       pins = "gpio4", "gpio5";
-                       drive-strength = <2>;
-                       bias-pull-down;
-               };
-       };
-};
index b1c2d7d..1d1ae6f 100644 (file)
@@ -6,12 +6,6 @@
 #include <dt-bindings/clock/qcom,gcc-msm8994.h>
 
 / {
-       model = "Qualcomm Technologies, Inc. MSM 8994";
-       compatible = "qcom,msm8994";
-       // msm-id and pmic-id are required by bootloader for
-       // proper selection of dt blob
-       qcom,msm-id = <207 0x20000>;
-       qcom,pmic-id = <0x10009 0x1000A 0x0 0x0>;
        interrupt-parent = <&intc>;
 
        #address-cells = <2>;
 
        chosen { };
 
+       clocks {
+               xo_board: xo_board {
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+                       clock-frequency = <19200000>;
+               };
+
+               sleep_clk: sleep_clk {
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+
        cpus {
-               #address-cells = <1>;
+               #address-cells = <2>;
                #size-cells = <0>;
+
+               CPU0: cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x0>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_0>;
+                       L2_0: l2-cache {
+                               compatible = "cache";
+                               cache-level = <2>;
+                       };
+               };
+
+               CPU1: cpu@1 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x1>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_0>;
+               };
+
+               CPU2: cpu@2 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x2>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_0>;
+               };
+
+               CPU3: cpu@3 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x3>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_0>;
+               };
+
+               CPU4: cpu@100 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a57";
+                       reg = <0x0 0x100>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_1>;
+                       L2_1: l2-cache {
+                               compatible = "cache";
+                               cache-level = <2>;
+                       };
+               };
+
+               CPU5: cpu@101 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a57";
+                       reg = <0x0 0x101>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_1>;
+               };
+
+               CPU6: cpu@102 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a57";
+                       reg = <0x0 0x101>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_1>;
+               };
+
+               CPU7: cpu@103 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a57";
+                       reg = <0x0 0x101>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_1>;
+               };
+
                cpu-map {
                        cluster0 {
                                core0 {
                                        cpu = <&CPU0>;
                                };
+
+                               core1 {
+                                       cpu = <&CPU1>;
+                               };
+
+                               core2 {
+                                       cpu = <&CPU2>;
+                               };
+
+                               core3 {
+                                       cpu = <&CPU3>;
+                               };
                        };
-               };
 
-               CPU0: cpu@0 {
-                       device_type = "cpu";
-                       compatible = "arm,cortex-a53";
-                       reg = <0x0>;
-                       next-level-cache = <&L2_0>;
-                       L2_0: l2-cache {
-                             compatible = "cache";
-                             cache-level = <2>;
+                       cluster1 {
+                               core0 {
+                                       cpu = <&CPU4>;
+                               };
+
+                               core1 {
+                                       cpu = <&CPU5>;
+                               };
+
+                               core2 {
+                                       cpu = <&CPU6>;
+                               };
+
+                               core3 {
+                                       cpu = <&CPU7>;
+                               };
                        };
                };
        };
 
-       timer {
-               compatible = "arm,armv8-timer";
-               interrupts = <1 2 0xff08>,
-                            <1 3 0xff08>,
-                            <1 4 0xff08>,
-                            <1 1 0xff08>;
+       memory {
+               device_type = "memory";
+               /* We expect the bootloader to fill in the reg */
+               reg = <0 0 0 0>;
+       };
+
+       pmu {
+               compatible = "arm,cortex-a53-pmu";
+               interrupts = <GIC_PPI 7 (GIC_CPU_MASK_SIMPLE(4)| IRQ_TYPE_LEVEL_HIGH)>;
+       };
+
+       psci {
+               compatible = "arm,psci-0.2";
+               method = "hvc";
+       };
+
+       reserved-memory {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               smem_mem: smem_region@6a00000 {
+                       reg = <0x0 0x6a00000 0x0 0x200000>;
+                       no-map;
+               };
+       };
+
+       smem {
+               compatible = "qcom,smem";
+               memory-region = <&smem_mem>;
+               hwlocks = <&tcsr_mutex 3>;
        };
 
        soc: soc {
                        interrupt-controller;
                        #interrupt-cells = <3>;
                        reg = <0xf9000000 0x1000>,
-                                 <0xf9002000 0x1000>;
+                             <0xf9002000 0x1000>;
                };
 
                timer@f9020000 {
                        };
                };
 
-               restart@fc4ab000 {
-                       compatible = "qcom,pshold";
-                       reg = <0xfc4ab000 0x4>;
+               sdhc1: sdhci@f9824900 {
+                       compatible = "qcom,sdhci-msm-v4";
+                       reg = <0xf9824900 0x1a0>, <0xf9824000 0x800>;
+                       reg-names = "hc_mem", "core_mem";
+
+                       interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "hc_irq", "pwr_irq";
+
+                       clocks = <&gcc GCC_SDCC1_APPS_CLK>,
+                                <&gcc GCC_SDCC1_AHB_CLK>,
+                                <&xo_board>;
+                       clock-names = "core", "iface", "xo";
+
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on &sdc1_rclk_on>;
+                       pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off &sdc1_rclk_off>;
+
+                       bus-width = <8>;
+                       non-removable;
+                       status = "disabled";
                };
 
-               msmgpio: pinctrl@fd510000 {
-                       compatible = "qcom,msm8994-pinctrl";
-                       reg = <0xfd510000 0x4000>;
-                       interrupts = <GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>;
-                       gpio-controller;
-                       gpio-ranges = <&msmgpio 0 0 146>;
-                       #gpio-cells = <2>;
-                       interrupt-controller;
-                       #interrupt-cells = <2>;
+               blsp1_dma: dma@f9904000 {
+                       compatible = "qcom,bam-v1.7.0";
+                       reg = <0xf9904000 0x19000>;
+                       interrupts = <GIC_SPI 238 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_AHB_CLK>;
+                       clock-names = "bam_clk";
+                       #dma-cells = <1>;
+                       qcom,ee = <0>;
+                       qcom,controlled-remotely;
+                       num-channels = <18>;
+                       qcom,num-ees = <4>;
                };
 
                blsp1_uart2: serial@f991e000 {
                        compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
                        reg = <0xf991e000 0x1000>;
                        interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       clock-names = "core", "iface";
+                       clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>,
+                                <&gcc GCC_BLSP1_AHB_CLK>;
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&blsp1_uart2_default>;
+                       pinctrl-1 = <&blsp1_uart2_sleep>;
                        status = "disabled";
+               };
+
+               blsp_i2c1: i2c@f9923000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0xf9923000 0x500>;
+                       interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_AHB_CLK>,
+                                               <&gcc GCC_BLSP1_QUP1_I2C_APPS_CLK>;
+                       clock-names = "iface", "core";
+                       clock-frequency = <400000>;
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c1_default>;
+                       pinctrl-1 = <&i2c1_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               blsp_spi0: spi@f9923000 {
+                       compatible = "qcom,spi-qup-v2.2.1";
+                       reg = <0xf9923000 0x500>;
+                       interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_QUP1_SPI_APPS_CLK>,
+                                <&gcc GCC_BLSP1_AHB_CLK>;
                        clock-names = "core", "iface";
-                       clocks = <&clock_gcc GCC_BLSP1_UART2_APPS_CLK>,
-                                <&clock_gcc GCC_BLSP1_AHB_CLK>;
+                       spi-max-frequency = <19200000>;
+                       dmas = <&blsp1_dma 12>, <&blsp1_dma 13>;
+                       dma-names = "tx", "rx";
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&blsp1_spi0_default>;
+                       pinctrl-1 = <&blsp1_spi0_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
                };
 
-               tcsr_mutex_regs: syscon@fd484000 {
-                       compatible = "syscon";
-                       reg = <0xfd484000 0x2000>;
+               blsp_i2c2: i2c@f9924000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0xf9924000 0x500>;
+                       interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_AHB_CLK>,
+                                               <&gcc GCC_BLSP1_QUP2_I2C_APPS_CLK>;
+                       clock-names = "iface", "core";
+                       clock-frequency = <355000>;
+                       dmas = <&blsp1_dma 14>, <&blsp1_dma 15>;
+                       dma-names = "tx", "rx";
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c2_default>;
+                       pinctrl-1 = <&i2c2_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               /* I2C3 doesn't exist */
+
+               blsp_i2c4: i2c@f9926000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0xf9926000 0x500>;
+                       interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_AHB_CLK>,
+                                               <&gcc GCC_BLSP1_QUP4_I2C_APPS_CLK>;
+                       clock-names = "iface", "core";
+                       clock-frequency = <355000>;
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c4_default>;
+                       pinctrl-1 = <&i2c4_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               blsp2_dma: dma@f9944000 {
+                       compatible = "qcom,bam-v1.7.0";
+                       reg = <0xf9944000 0x19000>;
+                       interrupts = <GIC_SPI 239 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP2_AHB_CLK>;
+                       clock-names = "bam_clk";
+                       #dma-cells = <1>;
+                       qcom,ee = <0>;
+                       qcom,controlled-remotely;
+                       num-channels = <18>;
+                       qcom,num-ees = <4>;
+               };
+
+               /* According to downstream kernels, i2c6
+                * comes before i2c5 address-wise...
+                */
+
+               blsp_i2c6: i2c@f9928000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0xf9928000 0x500>;
+                       interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_AHB_CLK>,
+                                               <&gcc GCC_BLSP1_QUP6_I2C_APPS_CLK>;
+                       clock-names = "iface", "core";
+                       clock-frequency = <355000>;
+                       dmas = <&blsp1_dma 22>, <&blsp1_dma 23>;
+                       dma-names = "tx", "rx";
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c6_default>;
+                       pinctrl-1 = <&i2c6_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               blsp2_uart2: serial@f995e000 {
+                       compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
+                       reg = <0xf995e000 0x1000>;
+                       interrupts = <GIC_SPI 146 IRQ_TYPE_EDGE_FALLING>;
+                       clock-names = "core", "iface";
+                       clocks = <&gcc GCC_BLSP2_UART2_APPS_CLK>,
+                                       <&gcc GCC_BLSP2_AHB_CLK>;
+                       dmas = <&blsp2_dma 2>, <&blsp2_dma 3>;
+                       dma-names = "tx", "rx";
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&blsp2_uart2_default>;
+                       pinctrl-1 = <&blsp2_uart2_sleep>;
+                       status = "disabled";
                };
 
-               clock_gcc: clock-controller@fc400000 {
+               blsp_i2c5: i2c@f9967000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0xf9967000 0x500>;
+                       interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP2_AHB_CLK>,
+                                               <&gcc GCC_BLSP2_QUP5_I2C_APPS_CLK>;
+                       clock-names = "iface", "core";
+                       clock-frequency = <355000>;
+                       dmas = <&blsp2_dma 20>, <&blsp2_dma 21>;
+                       dma-names = "tx", "rx";
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c5_default>;
+                       pinctrl-1 = <&i2c5_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               gcc: clock-controller@fc400000 {
                        compatible = "qcom,gcc-msm8994";
                        #clock-cells = <1>;
                        #reset-cells = <1>;
                        #power-domain-cells = <1>;
                        reg = <0xfc400000 0x2000>;
                };
-       };
 
-       memory {
-               device_type = "memory";
-               // We expect the bootloader to fill in the reg
-               reg = <0 0 0 0>;
-       };
+               restart@fc4ab000 {
+                       compatible = "qcom,pshold";
+                       reg = <0xfc4ab000 0x4>;
+               };
 
-       xo_board: xo_board {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <19200000>;
-       };
+               spmi_bus: spmi@fc4c0000 {
+                       compatible = "qcom,spmi-pmic-arb";
+                       reg = <0xfc4cf000 0x1000>,
+                             <0xfc4cb000 0x1000>,
+                             <0xfc4ca000 0x1000>;
+                       reg-names = "core", "intr", "cnfg";
+                       interrupt-names = "periph_irq";
+                       interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
+                       qcom,ee = <0>;
+                       qcom,channel = <0>;
+                       #address-cells = <2>;
+                       #size-cells = <0>;
+                       interrupt-controller;
+                       #interrupt-cells = <4>;
+               };
 
-       sleep_clk: sleep_clk {
-               compatible = "fixed-clock";
-               #clock-cells = <0>;
-               clock-frequency = <32768>;
-       };
+               tcsr_mutex_regs: syscon@fd484000 {
+                       compatible = "syscon";
+                       reg = <0xfd484000 0x2000>;
+               };
 
-       reserved-memory {
-               #address-cells = <2>;
-               #size-cells = <2>;
-               ranges;
+               tlmm: pinctrl@fd510000 {
+                       compatible = "qcom,msm8994-pinctrl";
+                       reg = <0xfd510000 0x4000>;
+                       interrupts = <GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       gpio-ranges = <&tlmm 0 0 146>;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
 
-               smem_mem: smem_region@6a00000 {
-                       reg = <0x0 0x6a00000 0x0 0x200000>;
-                       no-map;
+                       blsp1_uart2_default: blsp1-uart2-default {
+                               function = "blsp_uart2";
+                               pins = "gpio4", "gpio5";
+                               drive-strength = <16>;
+                               bias-disable;
+                       };
+
+                       blsp1_uart2_sleep: blsp1-uart2-sleep {
+                               function = "gpio";
+                               pins = "gpio4", "gpio5";
+                               drive-strength = <2>;
+                               bias-pull-down;
+                       };
+
+                       blsp2_uart2_default: blsp2-uart2-default {
+                               function = "blsp_uart8";
+                               pins = "gpio45", "gpio46";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       blsp2_uart2_sleep: blsp2-uart2-sleep {
+                               function = "gpio";
+                               pins = "gpio45", "gpio46";
+                               drive-strength = <2>;
+                               bias-pull-down;
+                       };
+
+                       i2c1_default: i2c1-default {
+                               function = "blsp_i2c1";
+                               pins = "gpio2", "gpio3";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c1_sleep: i2c1-sleep {
+                               function = "gpio";
+                               pins = "gpio2", "gpio3";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c2_default: i2c2-default {
+                               function = "blsp_i2c2";
+                               pins = "gpio6", "gpio7";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c2_sleep: i2c2-sleep {
+                               function = "gpio";
+                               pins = "gpio6", "gpio7";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c4_default: i2c4-default {
+                               function = "blsp_i2c4";
+                               pins = "gpio19", "gpio20";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c4_sleep: i2c4-sleep {
+                               function = "gpio";
+                               pins = "gpio19", "gpio20";
+                               drive-strength = <2>;
+                               bias-pull-down;
+                               input-enable;
+                       };
+
+                       i2c5_default: i2c5-default {
+                               function = "blsp_i2c5";
+                               pins = "gpio23", "gpio24";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c5_sleep: i2c5-sleep {
+                               function = "gpio";
+                               pins = "gpio23", "gpio24";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c6_default: i2c6-default {
+                               function = "blsp_i2c6";
+                               pins = "gpio28", "gpio27";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c6_sleep: i2c6-sleep {
+                               function = "gpio";
+                               pins = "gpio28", "gpio27";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       blsp1_spi0_default: blsp1-spi0-default {
+                               default {
+                                       function = "blsp_spi1";
+                                       pins = "gpio0", "gpio1", "gpio3";
+                                       drive-strength = <10>;
+                                       bias-pull-down;
+                               };
+                               cs {
+                                       function = "gpio";
+                                       pins = "gpio8";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       blsp1_spi0_sleep: blsp1-spi0-sleep {
+                               pins = "gpio0", "gpio1", "gpio3";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       sdc1_clk_on: clk-on {
+                               pins = "sdc1_clk";
+                               bias-disable;
+                               drive-strength = <16>;
+                       };
+
+                       sdc1_clk_off: clk-off {
+                               pins = "sdc1_clk";
+                               bias-disable;
+                               drive-strength = <2>;
+                       };
+
+                       sdc1_cmd_on: cmd-on {
+                               pins = "sdc1_cmd";
+                               bias-pull-up;
+                               drive-strength = <8>;
+                       };
+
+                       sdc1_cmd_off: cmd-off {
+                               pins = "sdc1_cmd";
+                               bias-pull-up;
+                               drive-strength = <2>;
+                       };
+
+                       sdc1_data_on: data-on {
+                               pins = "sdc1_data";
+                               bias-pull-up;
+                               drive-strength = <8>;
+                       };
+
+                       sdc1_data_off: data-off {
+                               pins = "sdc1_data";
+                               bias-pull-up;
+                               drive-strength = <2>;
+                       };
+
+                       sdc1_rclk_on: rclk-on {
+                               pins = "sdc1_rclk";
+                               bias-pull-down;
+                       };
+
+                       sdc1_rclk_off: rclk-off {
+                               pins = "sdc1_rclk";
+                               bias-pull-down;
+                       };
                };
        };
 
                #hwlock-cells = <1>;
        };
 
-       qcom,smem@6a00000 {
-               compatible = "qcom,smem";
-               memory-region = <&smem_mem>;
-               hwlocks = <&tcsr_mutex 3>;
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupts = <GIC_PPI 2 0xff08>,
+                            <GIC_PPI 3 0xff08>,
+                            <GIC_PPI 4 0xff08>,
+                            <GIC_PPI 1 0xff08>;
        };
 };
 
-
-#include "msm8994-pins.dtsi"
index 6ab830d..00d84fb 100644 (file)
                        regulator-min-microvolt = <1880000>;
                        regulator-max-microvolt = <1880000>;
                };
-               vreg_15a_1p8: l15 {
+               vreg_l15a_1p8: l15 {
                        regulator-min-microvolt = <1800000>;
                        regulator-max-microvolt = <1800000>;
                };
index 407c6a3..89492ed 100644 (file)
        };
 };
 
+&remoteproc_mss {
+       firmware-name = "qcom/LENOVO/81F1/qcdsp1v28998.mbn",
+                       "qcom/LENOVO/81F1/qcdsp28998.mbn";
+};
+
 &sdhc2 {
        cd-gpios = <&tlmm 95 GPIO_ACTIVE_HIGH>;
 };
index 8a14b2b..cec4243 100644 (file)
                        regulator-min-microvolt = <1880000>;
                        regulator-max-microvolt = <1880000>;
                };
-               vreg_15a_1p8: l15 {
+               vreg_l15a_1p8: l15 {
                        regulator-min-microvolt = <1800000>;
                        regulator-max-microvolt = <1800000>;
                };
diff --git a/arch/arm64/boot/dts/qcom/pm660.dtsi b/arch/arm64/boot/dts/qcom/pm660.dtsi
new file mode 100644 (file)
index 0000000..ea0e955
--- /dev/null
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Konrad Dybcio
+ */
+
+#include <dt-bindings/input/linux-event-codes.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/spmi/spmi.h>
+
+&spmi_bus {
+
+       pmic@0 {
+               compatible = "qcom,pm660", "qcom,spmi-pmic";
+               reg = <0x0 SPMI_USID>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               rtc@6000 {
+                       compatible = "qcom,pm8941-rtc";
+                       reg = <0x6000>, <0x6100>;
+                       reg-names = "rtc", "alarm";
+                       interrupts = <0x0 0x61 0x1 IRQ_TYPE_EDGE_RISING>;
+               };
+
+               pon: pon@800 {
+                       compatible = "qcom,pm8916-pon";
+
+                       reg = <0x800>;
+
+                       pwrkey {
+                               compatible = "qcom,pm8941-pwrkey";
+                               interrupts = <0x0 0x8 0 IRQ_TYPE_EDGE_BOTH>;
+                               debounce = <15625>;
+                               bias-pull-up;
+                               linux,code = <KEY_POWER>;
+                       };
+
+               };
+
+               pm660_gpios: gpios@c000 {
+                       compatible = "qcom,pm660-gpio";
+                       reg = <0xc000>;
+                       gpio-controller;
+                       gpio-ranges = <&pm660_gpios 0 0 13>;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       interrupt-cells =<2>;
+               };
+       };
+};
diff --git a/arch/arm64/boot/dts/qcom/pm660l.dtsi b/arch/arm64/boot/dts/qcom/pm660l.dtsi
new file mode 100644 (file)
index 0000000..edba6de
--- /dev/null
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Konrad Dybcio
+ */
+
+#include <dt-bindings/input/linux-event-codes.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/spmi/spmi.h>
+
+&spmi_bus {
+
+       pmic@2 {
+               compatible = "qcom,pm660l", "qcom,spmi-pmic";
+               reg = <0x2 SPMI_USID>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pm660l_gpios: gpios@c000 {
+                       compatible = "qcom,pm660l-gpio", "qcom,spmi-gpio";
+                       reg = <0xc000>;
+                       gpio-controller;
+                       gpio-ranges = <&pm660l_gpios 0 0 12>;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+
+       pmic@3 {
+               compatible = "qcom,pm660l", "qcom,spmi-pmic";
+               reg = <0x3 SPMI_USID>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+       };
+};
+
diff --git a/arch/arm64/boot/dts/qcom/pm8009.dtsi b/arch/arm64/boot/dts/qcom/pm8009.dtsi
new file mode 100644 (file)
index 0000000..b126d7e
--- /dev/null
@@ -0,0 +1,37 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2020, Linaro Limited
+ */
+
+#include <dt-bindings/spmi/spmi.h>
+
+&spmi_bus {
+       pmic@a {
+               compatible = "qcom,pm8009", "qcom,spmi-pmic";
+               reg = <0xa SPMI_USID>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pm8009_pon: pon@800 {
+                       compatible = "qcom,pm8916-pon";
+                       reg = <0x0800>;
+               };
+
+               pm8009_gpios: gpio@c000 {
+                       compatible = "qcom,pm8005-gpio";
+                       reg = <0xc000>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+
+       pmic@b {
+               compatible = "qcom,pm8009", "qcom,spmi-pmic";
+               reg = <0xb SPMI_USID>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+       };
+};
index c0b1974..1b64069 100644 (file)
@@ -9,6 +9,37 @@
 #include <dt-bindings/spmi/spmi.h>
 #include <dt-bindings/iio/qcom,spmi-vadc.h>
 
+/ {
+       thermal-zones {
+               pm8150 {
+                       polling-delay-passive = <100>;
+                       polling-delay = <0>;
+
+                       thermal-sensors = <&pm8150_temp>;
+
+                       trips {
+                               trip0 {
+                                       temperature = <95000>;
+                                       hysteresis = <0>;
+                                       type = "passive";
+                               };
+
+                               trip1 {
+                                       temperature = <115000>;
+                                       hysteresis = <0>;
+                                       type = "hot";
+                               };
+
+                               trip2 {
+                                       temperature = <145000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+                       };
+               };
+       };
+};
+
 &spmi_bus {
        pm8150_0: pmic@0 {
                compatible = "qcom,pm8150", "qcom,spmi-pmic";
                        };
                };
 
+               pm8150_temp: temp-alarm@2400 {
+                       compatible = "qcom,spmi-temp-alarm";
+                       reg = <0x2400>;
+                       interrupts = <0x0 0x24 0x0 IRQ_TYPE_EDGE_BOTH>;
+                       io-channels = <&pm8150_adc ADC5_DIE_TEMP>;
+                       io-channel-names = "thermal";
+                       #thermal-sensor-cells = <0>;
+               };
+
                pm8150_adc: adc@3100 {
                        compatible = "qcom,spmi-adc5";
                        reg = <0x3100>;
@@ -38,8 +78,6 @@
                        #io-channel-cells = <1>;
                        interrupts = <0x0 0x31 0x0 IRQ_TYPE_EDGE_RISING>;
 
-                       status = "disabled";
-
                        ref-gnd@0 {
                                reg = <ADC5_REF_GND>;
                                qcom,pre-scaling = <1 1>;
index 40b5d75..e112e88 100644 (file)
@@ -8,6 +8,37 @@
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/spmi/spmi.h>
 
+/ {
+       thermal-zones {
+               pm8150b {
+                       polling-delay-passive = <100>;
+                       polling-delay = <0>;
+
+                       thermal-sensors = <&pm8150b_temp>;
+
+                       trips {
+                               trip0 {
+                                       temperature = <95000>;
+                                       hysteresis = <0>;
+                                       type = "passive";
+                               };
+
+                               trip1 {
+                                       temperature = <115000>;
+                                       hysteresis = <0>;
+                                       type = "hot";
+                               };
+
+                               trip2 {
+                                       temperature = <145000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+                       };
+               };
+       };
+};
+
 &spmi_bus {
        pmic@2 {
                compatible = "qcom,pm8150b", "qcom,spmi-pmic";
                        status = "disabled";
                };
 
-               adc@3100 {
+               pm8150b_temp: temp-alarm@2400 {
+                       compatible = "qcom,spmi-temp-alarm";
+                       reg = <0x2400>;
+                       interrupts = <0x2 0x24 0x0 IRQ_TYPE_EDGE_BOTH>;
+                       io-channels = <&pm8150b_adc ADC5_DIE_TEMP>;
+                       io-channel-names = "thermal";
+                       #thermal-sensor-cells = <0>;
+               };
+
+               pm8150b_adc: adc@3100 {
                        compatible = "qcom,spmi-adc5";
                        reg = <0x3100>;
                        #address-cells = <1>;
@@ -30,8 +70,6 @@
                        #io-channel-cells = <1>;
                        interrupts = <0x2 0x31 0x0 IRQ_TYPE_EDGE_RISING>;
 
-                       status = "disabled";
-
                        ref-gnd@0 {
                                reg = <ADC5_REF_GND>;
                                qcom,pre-scaling = <1 1>;
index cf05e06..6213953 100644 (file)
@@ -8,6 +8,37 @@
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/spmi/spmi.h>
 
+/ {
+       thermal-zones {
+               pm8150l {
+                       polling-delay-passive = <100>;
+                       polling-delay = <0>;
+
+                       thermal-sensors = <&pm8150l_temp>;
+
+                       trips {
+                               trip0 {
+                                       temperature = <95000>;
+                                       hysteresis = <0>;
+                                       type = "passive";
+                               };
+
+                               trip1 {
+                                       temperature = <115000>;
+                                       hysteresis = <0>;
+                                       type = "hot";
+                               };
+
+                               trip2 {
+                                       temperature = <145000>;
+                                       hysteresis = <0>;
+                                       type = "critical";
+                               };
+                       };
+               };
+       };
+};
+
 &spmi_bus {
        pmic@4 {
                compatible = "qcom,pm8150l", "qcom,spmi-pmic";
                        status = "disabled";
                };
 
-               adc@3100 {
+               pm8150l_temp: temp-alarm@2400 {
+                       compatible = "qcom,spmi-temp-alarm";
+                       reg = <0x2400>;
+                       interrupts = <0x4 0x24 0x0 IRQ_TYPE_EDGE_BOTH>;
+                       io-channels = <&pm8150l_adc ADC5_DIE_TEMP>;
+                       io-channel-names = "thermal";
+                       #thermal-sensor-cells = <0>;
+               };
+
+               pm8150l_adc: adc@3100 {
                        compatible = "qcom,spmi-adc5";
                        reg = <0x3100>;
                        #address-cells = <1>;
@@ -30,8 +70,6 @@
                        #io-channel-cells = <1>;
                        interrupts = <0x4 0x31 0x0 IRQ_TYPE_EDGE_RISING>;
 
-                       status = "disabled";
-
                        ref-gnd@0 {
                                reg = <ADC5_REF_GND>;
                                qcom,pre-scaling = <1 1>;
index 23f9146..d016b12 100644 (file)
                reg = <0x3 SPMI_USID>;
                #address-cells = <1>;
                #size-cells = <0>;
+
+               labibb {
+                       compatible = "qcom,pmi8998-lab-ibb";
+
+                       ibb: ibb {
+                               interrupts = <0x3 0xdc 0x2 IRQ_TYPE_EDGE_RISING>;
+                       };
+
+                       lab: lab {
+                               interrupts = <0x3 0xde 0x0 IRQ_TYPE_EDGE_RISING>;
+                       };
+               };
        };
 };
index c685a16..b654b80 100644 (file)
                        status = "disabled";
                };
 
+               imem@8600000 {
+                       compatible = "simple-mfd";
+                       reg = <0x08600000 0x1000>;
+
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       ranges = <0 0x08600000 0x1000>;
+
+                       pil-reloc@94c {
+                               compatible = "qcom,pil-reloc-info";
+                               reg = <0x94c 0xc8>;
+                       };
+               };
+
                intc: interrupt-controller@b000000 {
                        compatible = "qcom,msm-qgic2";
                        interrupt-controller;
index 4e9149d..26cc491 100644 (file)
@@ -21,6 +21,7 @@
                bluetooth0 = &bluetooth;
                hsuart0 = &uart3;
                serial0 = &uart8;
+               wifi0 = &wifi;
        };
 
        chosen {
 &remoteproc_mpss {
        status = "okay";
        compatible = "qcom,sc7180-mss-pil";
-       iommus = <&apps_smmu 0x460 0x1>, <&apps_smmu 0x444 0x3>;
+       iommus = <&apps_smmu 0x461 0x0>, <&apps_smmu 0x444 0x3>;
        memory-region = <&mba_mem &mpss_mem>;
 };
 
        };
 };
 
+&wifi {
+       status = "okay";
+       vdd-0.8-cx-mx-supply = <&vreg_l9a_0p6>;
+       vdd-1.8-xo-supply = <&vreg_l1c_1p8>;
+       vdd-1.3-rfa-supply = <&vreg_l2c_1p3>;
+       vdd-3.3-ch0-supply = <&vreg_l10c_3p3>;
+       vdd-3.3-ch1-supply = <&vreg_l11c_3p3>;
+       wifi-firmware {
+               iommus = <&apps_smmu 0xc2 0x1>;
+       };
+};
+
 /* PINCTRL - additions to nodes defined in sc7180.dtsi */
 
 &qspi_clk {
index 31b9217..16df08d 100644 (file)
@@ -10,6 +10,7 @@
 #include <dt-bindings/clock/qcom,gpucc-sc7180.h>
 #include <dt-bindings/clock/qcom,rpmh.h>
 #include <dt-bindings/clock/qcom,videocc-sc7180.h>
+#include <dt-bindings/interconnect/qcom,osm-l3.h>
 #include <dt-bindings/interconnect/qcom,sc7180.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/phy/phy-qcom-qusb2.h>
                                           &CLUSTER_SLEEP_0>;
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <100>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       interconnects = <&gem_noc MASTER_APPSS_PROC &mc_virt SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        next-level-cache = <&L2_0>;
                        #cooling-cells = <2>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <100>;
                        next-level-cache = <&L2_100>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       interconnects = <&gem_noc MASTER_APPSS_PROC &mc_virt SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
                        L2_100: l2-cache {
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <100>;
                        next-level-cache = <&L2_200>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       interconnects = <&gem_noc MASTER_APPSS_PROC &mc_virt SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
                        L2_200: l2-cache {
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <100>;
                        next-level-cache = <&L2_300>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       interconnects = <&gem_noc MASTER_APPSS_PROC &mc_virt SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
                        L2_300: l2-cache {
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <100>;
                        next-level-cache = <&L2_400>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       interconnects = <&gem_noc MASTER_APPSS_PROC &mc_virt SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
                        L2_400: l2-cache {
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <100>;
                        next-level-cache = <&L2_500>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       interconnects = <&gem_noc MASTER_APPSS_PROC &mc_virt SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
                        L2_500: l2-cache {
                        capacity-dmips-mhz = <1740>;
                        dynamic-power-coefficient = <405>;
                        next-level-cache = <&L2_600>;
+                       operating-points-v2 = <&cpu6_opp_table>;
+                       interconnects = <&gem_noc MASTER_APPSS_PROC &mc_virt SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        qcom,freq-domain = <&cpufreq_hw 1>;
                        L2_600: l2-cache {
                        capacity-dmips-mhz = <1740>;
                        dynamic-power-coefficient = <405>;
                        next-level-cache = <&L2_700>;
+                       operating-points-v2 = <&cpu6_opp_table>;
+                       interconnects = <&gem_noc MASTER_APPSS_PROC &mc_virt SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        qcom,freq-domain = <&cpufreq_hw 1>;
                        L2_700: l2-cache {
                };
        };
 
+       cpu0_opp_table: cpu0_opp_table {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               cpu0_opp1: opp-300000000 {
+                       opp-hz = /bits/ 64 <300000000>;
+                       opp-peak-kBps = <1200000 4800000>;
+               };
+
+               cpu0_opp2: opp-576000000 {
+                       opp-hz = /bits/ 64 <576000000>;
+                       opp-peak-kBps = <1200000 4800000>;
+               };
+
+               cpu0_opp3: opp-768000000 {
+                       opp-hz = /bits/ 64 <768000000>;
+                       opp-peak-kBps = <1200000 4800000>;
+               };
+
+               cpu0_opp4: opp-1017600000 {
+                       opp-hz = /bits/ 64 <1017600000>;
+                       opp-peak-kBps = <1804000 8908800>;
+               };
+
+               cpu0_opp5: opp-1248000000 {
+                       opp-hz = /bits/ 64 <1248000000>;
+                       opp-peak-kBps = <2188000 12902400>;
+               };
+
+               cpu0_opp6: opp-1324800000 {
+                       opp-hz = /bits/ 64 <1324800000>;
+                       opp-peak-kBps = <2188000 12902400>;
+               };
+
+               cpu0_opp7: opp-1516800000 {
+                       opp-hz = /bits/ 64 <1516800000>;
+                       opp-peak-kBps = <3072000 15052800>;
+               };
+
+               cpu0_opp8: opp-1612800000 {
+                       opp-hz = /bits/ 64 <1612800000>;
+                       opp-peak-kBps = <3072000 15052800>;
+               };
+
+               cpu0_opp9: opp-1708800000 {
+                       opp-hz = /bits/ 64 <1708800000>;
+                       opp-peak-kBps = <3072000 15052800>;
+               };
+
+               cpu0_opp10: opp-1804800000 {
+                       opp-hz = /bits/ 64 <1804800000>;
+                       opp-peak-kBps = <4068000 22425600>;
+               };
+       };
+
+       cpu6_opp_table: cpu6_opp_table {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               cpu6_opp1: opp-300000000 {
+                       opp-hz = /bits/ 64 <300000000>;
+                       opp-peak-kBps = <2188000 8908800>;
+               };
+
+               cpu6_opp2: opp-652800000 {
+                       opp-hz = /bits/ 64 <652800000>;
+                       opp-peak-kBps = <2188000 8908800>;
+               };
+
+               cpu6_opp3: opp-825600000 {
+                       opp-hz = /bits/ 64 <825600000>;
+                       opp-peak-kBps = <2188000 8908800>;
+               };
+
+               cpu6_opp4: opp-979200000 {
+                       opp-hz = /bits/ 64 <979200000>;
+                       opp-peak-kBps = <2188000 8908800>;
+               };
+
+               cpu6_opp5: opp-1113600000 {
+                       opp-hz = /bits/ 64 <1113600000>;
+                       opp-peak-kBps = <2188000 8908800>;
+               };
+
+               cpu6_opp6: opp-1267200000 {
+                       opp-hz = /bits/ 64 <1267200000>;
+                       opp-peak-kBps = <4068000 12902400>;
+               };
+
+               cpu6_opp7: opp-1555200000 {
+                       opp-hz = /bits/ 64 <1555200000>;
+                       opp-peak-kBps = <4068000 15052800>;
+               };
+
+               cpu6_opp8: opp-1708800000 {
+                       opp-hz = /bits/ 64 <1708800000>;
+                       opp-peak-kBps = <6220000 19353600>;
+               };
+
+               cpu6_opp9: opp-1843200000 {
+                       opp-hz = /bits/ 64 <1843200000>;
+                       opp-peak-kBps = <6220000 19353600>;
+               };
+
+               cpu6_opp10: opp-1900800000 {
+                       opp-hz = /bits/ 64 <1900800000>;
+                       opp-peak-kBps = <6220000 22425600>;
+               };
+
+               cpu6_opp11: opp-1996800000 {
+                       opp-hz = /bits/ 64 <1996800000>;
+                       opp-peak-kBps = <6220000 22425600>;
+               };
+
+               cpu6_opp12: opp-2112000000 {
+                       opp-hz = /bits/ 64 <2112000000>;
+                       opp-peak-kBps = <6220000 22425600>;
+               };
+
+               cpu6_opp13: opp-2208000000 {
+                       opp-hz = /bits/ 64 <2208000000>;
+                       opp-peak-kBps = <7216000 22425600>;
+               };
+
+               cpu6_opp14: opp-2323200000 {
+                       opp-hz = /bits/ 64 <2323200000>;
+                       opp-peak-kBps = <7216000 22425600>;
+               };
+
+               cpu6_opp15: opp-2400000000 {
+                       opp-hz = /bits/ 64 <2400000000>;
+                       opp-peak-kBps = <8532000 23347200>;
+               };
+       };
+
        memory@80000000 {
                device_type = "memory";
                /* We expect the bootloader to fill in the size */
                        clocks = <&gcc GCC_SDCC1_APPS_CLK>,
                                        <&gcc GCC_SDCC1_AHB_CLK>;
                        clock-names = "core", "iface";
+                       power-domains = <&rpmhpd SC7180_CX>;
+                       operating-points-v2 = <&sdhc1_opp_table>;
 
                        bus-width = <8>;
                        non-removable;
                        mmc-hs400-enhanced-strobe;
 
                        status = "disabled";
+
+                       sdhc1_opp_table: sdhc1-opp-table {
+                               compatible = "operating-points-v2";
+
+                               opp-100000000 {
+                                       opp-hz = /bits/ 64 <100000000>;
+                                       required-opps = <&rpmhpd_opp_low_svs>;
+                               };
+
+                               opp-384000000 {
+                                       opp-hz = /bits/ 64 <384000000>;
+                                       required-opps = <&rpmhpd_opp_svs_l1>;
+                               };
+                       };
+               };
+
+               qup_opp_table: qup-opp-table {
+                       compatible = "operating-points-v2";
+
+                       opp-75000000 {
+                               opp-hz = /bits/ 64 <75000000>;
+                               required-opps = <&rpmhpd_opp_low_svs>;
+                       };
+
+                       opp-100000000 {
+                               opp-hz = /bits/ 64 <100000000>;
+                               required-opps = <&rpmhpd_opp_svs>;
+                       };
+
+                       opp-128000000 {
+                               opp-hz = /bits/ 64 <128000000>;
+                               required-opps = <&rpmhpd_opp_nom>;
+                       };
                };
 
                qupv3_id_0: geniqup@8c0000 {
                        #size-cells = <2>;
                        ranges;
                        iommus = <&apps_smmu 0x43 0x0>;
+                       interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>;
+                       interconnect-names = "qup-core";
                        status = "disabled";
 
                        i2c0: i2c@880000 {
                                interrupts = <GIC_SPI 601 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>,
+                                               <&aggre1_noc MASTER_QUP_0 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 601 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart0_default>;
                                interrupts = <GIC_SPI 601 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 602 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>,
+                                               <&aggre1_noc MASTER_QUP_0 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 602 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart1_default>;
                                interrupts = <GIC_SPI 602 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 603 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>,
+                                               <&aggre1_noc MASTER_QUP_0 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart2_default>;
                                interrupts = <GIC_SPI 603 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>,
+                                               <&aggre1_noc MASTER_QUP_0 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart3_default>;
                                interrupts = <GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 605 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>,
+                                               <&aggre1_noc MASTER_QUP_0 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart4_default>;
                                interrupts = <GIC_SPI 605 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 606 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>,
+                                               <&aggre1_noc MASTER_QUP_0 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 606 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart5_default>;
                                interrupts = <GIC_SPI 606 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_0 &qup_virt SLAVE_QUP_CORE_0>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_0>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
                };
                        #size-cells = <2>;
                        ranges;
                        iommus = <&apps_smmu 0x4c3 0x0>;
+                       interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>;
+                       interconnect-names = "qup-core";
                        status = "disabled";
 
                        i2c6: i2c@a80000 {
                                interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>,
+                                               <&aggre2_noc MASTER_QUP_1 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart6_default>;
                                interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>,
+                                               <&aggre2_noc MASTER_QUP_1 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart7_default>;
                                interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>,
+                                               <&aggre2_noc MASTER_QUP_1 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart8_default>;
                                interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>,
+                                               <&aggre2_noc MASTER_QUP_1 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart9_default>;
                                interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>,
+                                               <&aggre2_noc MASTER_QUP_1 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart10_default>;
                                interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>,
+                                               <&aggre2_noc MASTER_QUP_1 &mc_virt SLAVE_EBI1>;
+                               interconnect-names = "qup-core", "qup-config",
+                                                       "qup-memory";
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart11_default>;
                                interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
+                               interconnects = <&qup_virt MASTER_QUP_CORE_1 &qup_virt SLAVE_QUP_CORE_1>,
+                                               <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_QUP_1>;
+                               interconnect-names = "qup-core", "qup-config";
                                status = "disabled";
                        };
                };
                        };
                };
 
+               remoteproc_mpss: remoteproc@4080000 {
+                       compatible = "qcom,sc7180-mpss-pas";
+                       reg = <0 0x04080000 0 0x4040>, <0 0x04180000 0 0x48>;
+                       reg-names = "qdsp6", "rmb";
+
+                       interrupts-extended = <&intc GIC_SPI 266 IRQ_TYPE_EDGE_RISING>,
+                                             <&modem_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
+                                             <&modem_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
+                                             <&modem_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
+                                             <&modem_smp2p_in 3 IRQ_TYPE_EDGE_RISING>,
+                                             <&modem_smp2p_in 7 IRQ_TYPE_EDGE_RISING>;
+                       interrupt-names = "wdog", "fatal", "ready", "handover",
+                                         "stop-ack", "shutdown-ack";
+
+                       clocks = <&gcc GCC_MSS_CFG_AHB_CLK>,
+                                <&gcc GCC_MSS_Q6_MEMNOC_AXI_CLK>,
+                                <&gcc GCC_MSS_NAV_AXI_CLK>,
+                                <&gcc GCC_MSS_SNOC_AXI_CLK>,
+                                <&gcc GCC_MSS_MFAB_AXIS_CLK>,
+                                <&rpmhcc RPMH_CXO_CLK>;
+                       clock-names = "iface", "bus", "nav", "snoc_axi",
+                                     "mnoc_axi", "xo";
+
+                       power-domains = <&aoss_qmp AOSS_QMP_LS_MODEM>,
+                                       <&rpmhpd SC7180_CX>,
+                                       <&rpmhpd SC7180_MX>,
+                                       <&rpmhpd SC7180_MSS>;
+                       power-domain-names = "load_state", "cx", "mx", "mss";
+
+                       memory-region = <&mpss_mem>;
+
+                       qcom,smem-states = <&modem_smp2p_out 0>;
+                       qcom,smem-state-names = "stop";
+
+                       resets = <&aoss_reset AOSS_CC_MSS_RESTART>,
+                                <&pdc_reset PDC_MODEM_SYNC_RESET>;
+                       reset-names = "mss_restart", "pdc_reset";
+
+                       qcom,halt-regs = <&tcsr_mutex_regs 0x23000 0x25000 0x24000>;
+                       qcom,spare-regs = <&tcsr_regs 0xb3e4>;
+
+                       status = "disabled";
+
+                       glink-edge {
+                               interrupts = <GIC_SPI 449 IRQ_TYPE_EDGE_RISING>;
+                               label = "modem";
+                               qcom,remote-pid = <1>;
+                               mboxes = <&apss_shared 12>;
+                       };
+               };
+
                gpu: gpu@5000000 {
                        compatible = "qcom,adreno-618.0", "qcom,adreno";
                        #stream-id-cells = <16>;
                        };
                };
 
-               remoteproc_mpss: remoteproc@4080000 {
-                       compatible = "qcom,sc7180-mpss-pas";
-                       reg = <0 0x04080000 0 0x4040>, <0 0x04180000 0 0x48>;
-                       reg-names = "qdsp6", "rmb";
-
-                       interrupts-extended = <&intc GIC_SPI 266 IRQ_TYPE_EDGE_RISING>,
-                                             <&modem_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
-                                             <&modem_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
-                                             <&modem_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
-                                             <&modem_smp2p_in 3 IRQ_TYPE_EDGE_RISING>,
-                                             <&modem_smp2p_in 7 IRQ_TYPE_EDGE_RISING>;
-                       interrupt-names = "wdog", "fatal", "ready", "handover",
-                                         "stop-ack", "shutdown-ack";
-
-                       clocks = <&gcc GCC_MSS_CFG_AHB_CLK>,
-                                <&gcc GCC_MSS_Q6_MEMNOC_AXI_CLK>,
-                                <&gcc GCC_MSS_NAV_AXI_CLK>,
-                                <&gcc GCC_MSS_SNOC_AXI_CLK>,
-                                <&gcc GCC_MSS_MFAB_AXIS_CLK>,
-                                <&rpmhcc RPMH_CXO_CLK>;
-                       clock-names = "iface", "bus", "nav", "snoc_axi",
-                                     "mnoc_axi", "xo";
-
-                       power-domains = <&aoss_qmp AOSS_QMP_LS_MODEM>,
-                                       <&rpmhpd SC7180_CX>,
-                                       <&rpmhpd SC7180_MX>,
-                                       <&rpmhpd SC7180_MSS>;
-                       power-domain-names = "load_state", "cx", "mx", "mss";
-
-                       memory-region = <&mpss_mem>;
-
-                       qcom,smem-states = <&modem_smp2p_out 0>;
-                       qcom,smem-state-names = "stop";
-
-                       resets = <&aoss_reset AOSS_CC_MSS_RESTART>,
-                                <&pdc_reset PDC_MODEM_SYNC_RESET>;
-                       reset-names = "mss_restart", "pdc_reset";
-
-                       qcom,halt-regs = <&tcsr_mutex_regs 0x23000 0x25000 0x24000>;
-                       qcom,spare-regs = <&tcsr_regs 0xb3e4>;
-
-                       status = "disabled";
-
-                       glink-edge {
-                               interrupts = <GIC_SPI 449 IRQ_TYPE_EDGE_RISING>;
-                               label = "modem";
-                               qcom,remote-pid = <1>;
-                               mboxes = <&apss_shared 12>;
-                       };
-               };
-
                sdhc_2: sdhci@8804000 {
                        compatible = "qcom,sc7180-sdhci", "qcom,sdhci-msm-v5";
                        reg = <0 0x08804000 0 0x1000>;
                        clocks = <&gcc GCC_SDCC2_APPS_CLK>,
                                        <&gcc GCC_SDCC2_AHB_CLK>;
                        clock-names = "core", "iface";
+                       power-domains = <&rpmhpd SC7180_CX>;
+                       operating-points-v2 = <&sdhc2_opp_table>;
 
                        bus-width = <4>;
 
                        status = "disabled";
+
+                       sdhc2_opp_table: sdhc2-opp-table {
+                               compatible = "operating-points-v2";
+
+                               opp-100000000 {
+                                       opp-hz = /bits/ 64 <100000000>;
+                                       required-opps = <&rpmhpd_opp_low_svs>;
+                               };
+
+                               opp-202000000 {
+                                       opp-hz = /bits/ 64 <202000000>;
+                                       required-opps = <&rpmhpd_opp_svs_l1>;
+                               };
+                       };
+               };
+
+               qspi_opp_table: qspi-opp-table {
+                       compatible = "operating-points-v2";
+
+                       opp-75000000 {
+                               opp-hz = /bits/ 64 <75000000>;
+                               required-opps = <&rpmhpd_opp_low_svs>;
+                       };
+
+                       opp-150000000 {
+                               opp-hz = /bits/ 64 <150000000>;
+                               required-opps = <&rpmhpd_opp_svs>;
+                       };
+
+                       opp-300000000 {
+                               opp-hz = /bits/ 64 <300000000>;
+                               required-opps = <&rpmhpd_opp_nom>;
+                       };
                };
 
                qspi: spi@88dc000 {
                        clocks = <&gcc GCC_QSPI_CNOC_PERIPH_AHB_CLK>,
                                 <&gcc GCC_QSPI_CORE_CLK>;
                        clock-names = "iface", "core";
+                       interconnects = <&gem_noc MASTER_APPSS_PROC
+                                       &config_noc SLAVE_QSPI_0>;
+                       interconnect-names = "qspi-config";
+                       power-domains = <&rpmhpd SC7180_CX>;
+                       operating-points-v2 = <&qspi_opp_table>;
                        status = "disabled";
                };
 
                                                       <19200000>,
                                                       <19200000>,
                                                       <19200000>;
+                               operating-points-v2 = <&mdp_opp_table>;
+                               power-domains = <&rpmhpd SC7180_CX>;
 
                                interrupt-parent = <&mdss>;
                                interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;
                                                };
                                        };
                                };
+
+                               mdp_opp_table: mdp-opp-table {
+                                       compatible = "operating-points-v2";
+
+                                       opp-200000000 {
+                                               opp-hz = /bits/ 64 <200000000>;
+                                               required-opps = <&rpmhpd_opp_low_svs>;
+                                       };
+
+                                       opp-300000000 {
+                                               opp-hz = /bits/ 64 <300000000>;
+                                               required-opps = <&rpmhpd_opp_svs>;
+                                       };
+
+                                       opp-345000000 {
+                                               opp-hz = /bits/ 64 <345000000>;
+                                               required-opps = <&rpmhpd_opp_svs_l1>;
+                                       };
+
+                                       opp-460000000 {
+                                               opp-hz = /bits/ 64 <460000000>;
+                                               required-opps = <&rpmhpd_opp_nom>;
+                                       };
+                               };
+
                        };
 
                        dsi0: dsi@ae94000 {
                                              "iface",
                                              "bus";
 
+                               operating-points-v2 = <&dsi_opp_table>;
+                               power-domains = <&rpmhpd SC7180_CX>;
+
                                phys = <&dsi_phy>;
                                phy-names = "dsi";
 
                                                };
                                        };
                                };
+
+                               dsi_opp_table: dsi-opp-table {
+                                       compatible = "operating-points-v2";
+
+                                       opp-187500000 {
+                                               opp-hz = /bits/ 64 <187500000>;
+                                               required-opps = <&rpmhpd_opp_low_svs>;
+                                       };
+
+                                       opp-300000000 {
+                                               opp-hz = /bits/ 64 <300000000>;
+                                               required-opps = <&rpmhpd_opp_svs>;
+                                       };
+
+                                       opp-358000000 {
+                                               opp-hz = /bits/ 64 <358000000>;
+                                               required-opps = <&rpmhpd_opp_svs_l1>;
+                                       };
+                               };
                        };
 
                        dsi_phy: dsi-phy@ae94400 {
 
                        #freq-domain-cells = <1>;
                };
+
+               wifi: wifi@18800000 {
+                       compatible = "qcom,wcn3990-wifi";
+                       reg = <0 0x18800000 0 0x800000>;
+                       reg-names = "membase";
+                       iommus = <&apps_smmu 0xc0 0x1>;
+                       interrupts =
+                               <GIC_SPI 414 IRQ_TYPE_LEVEL_HIGH /* CE0 */ >,
+                               <GIC_SPI 415 IRQ_TYPE_LEVEL_HIGH /* CE1 */ >,
+                               <GIC_SPI 416 IRQ_TYPE_LEVEL_HIGH /* CE2 */ >,
+                               <GIC_SPI 417 IRQ_TYPE_LEVEL_HIGH /* CE3 */ >,
+                               <GIC_SPI 418 IRQ_TYPE_LEVEL_HIGH /* CE4 */ >,
+                               <GIC_SPI 419 IRQ_TYPE_LEVEL_HIGH /* CE5 */ >,
+                               <GIC_SPI 420 IRQ_TYPE_LEVEL_HIGH /* CE6 */ >,
+                               <GIC_SPI 421 IRQ_TYPE_LEVEL_HIGH /* CE7 */ >,
+                               <GIC_SPI 422 IRQ_TYPE_LEVEL_HIGH /* CE8 */ >,
+                               <GIC_SPI 423 IRQ_TYPE_LEVEL_HIGH /* CE9 */ >,
+                               <GIC_SPI 424 IRQ_TYPE_LEVEL_HIGH /* CE10 */>,
+                               <GIC_SPI 425 IRQ_TYPE_LEVEL_HIGH /* CE11 */>;
+                       memory-region = <&wlan_mem>;
+                       qcom,msa-fixed-perm;
+                       status = "disabled";
+               };
        };
 
        thermal-zones {
diff --git a/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-ganges-kirin.dts b/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-ganges-kirin.dts
new file mode 100644 (file)
index 0000000..46a7f2b
--- /dev/null
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Martin Botka
+ */
+
+/dts-v1/;
+
+#include "sdm630-sony-xperia-ganges.dtsi"
+
+/ {
+       model = "Sony Xperia 10";
+       compatible = "sony,kirin-row", "qcom,sdm630";
+};
diff --git a/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-ganges.dtsi b/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-ganges.dtsi
new file mode 100644 (file)
index 0000000..cf2e8b5
--- /dev/null
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Martin Botka
+ */
+
+/dts-v1/;
+
+/* Ganges is very similar to Nile, but
+ * there are some differences that will need
+ * to be addresed when more peripherals are
+ * enabled upstream. Hence the separate DTSI.
+ */
+#include "sdm630-sony-xperia-nile.dtsi"
+
+/ {
+       chosen {
+               framebuffer@9d400000 {
+                       reg = <0 0x9d400000 0 (2520 * 1080 * 4)>;
+                       height = <2520>;
+               };
+       };
+
+       /* Yes, this is intentional.
+        * Ganges devices only use gpio-keys for
+        * Volume Down, but currently there's an
+        * issue with it that has to be resolved.
+        * Until then, let's not make the kernel panic
+        */
+       /delete-node/ gpio-keys;
+
+       soc {
+
+               i2c@c175000 {
+                       status = "okay";
+
+                       /* Novatek touchscreen */
+               };
+       };
+
+};
diff --git a/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-discovery.dts b/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-discovery.dts
new file mode 100644 (file)
index 0000000..8fca0b6
--- /dev/null
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Konrad Dybcio
+ */
+
+/dts-v1/;
+
+#include "sdm630-sony-xperia-nile.dtsi"
+
+/ {
+       model = "Sony Xperia XA2 Ultra";
+       compatible = "sony,discovery-row", "qcom,sdm630";
+};
diff --git a/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-pioneer.dts b/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-pioneer.dts
new file mode 100644 (file)
index 0000000..90dcd4e
--- /dev/null
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Konrad Dybcio
+ */
+
+/dts-v1/;
+
+#include "sdm630-sony-xperia-nile.dtsi"
+
+/ {
+       model = "Sony Xperia XA2";
+       compatible = "sony,pioneer-row", "qcom,sdm630";
+};
diff --git a/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-voyager.dts b/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile-voyager.dts
new file mode 100644 (file)
index 0000000..fae5f1b
--- /dev/null
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Konrad Dybcio
+ */
+
+/dts-v1/;
+
+#include "sdm630-sony-xperia-nile.dtsi"
+
+/ {
+       model = "Sony Xperia XA2 Plus";
+       compatible = "sony,voyager-row", "qcom,sdm630";
+
+       chosen {
+               framebuffer@9d400000 {
+                       reg = <0 0x9d400000 0 (2160 * 1080 * 4)>;
+                       height = <2160>;
+               };
+       };
+};
diff --git a/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile.dtsi b/arch/arm64/boot/dts/qcom/sdm630-sony-xperia-nile.dtsi
new file mode 100644 (file)
index 0000000..9ba359c
--- /dev/null
@@ -0,0 +1,136 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Konrad Dybcio
+ */
+
+/dts-v1/;
+
+#include "sdm630.dtsi"
+#include "pm660.dtsi"
+#include "pm660l.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/input/gpio-keys.h>
+
+/ {
+       /* required for bootloader to select correct board */
+       qcom,msm-id = <318 0>;
+       qcom,board-id = <8 1>;
+       qcom,pmic-id = <0x1001b 0x101011a 0x00 0x00 0x1001b 0x201011a 0x00 0x00>;
+
+       /* This part enables graphical output via bootloader-enabled display */
+       chosen {
+               bootargs = "earlycon=tty0 console=tty0";
+
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               stdout-path = "framebuffer0";
+
+               framebuffer0: framebuffer@9d400000 {
+                       compatible = "simple-framebuffer";
+                       reg = <0 0x9d400000 0 (1920 * 1080 * 4)>;
+                       width = <1080>;
+                       height = <1920>;
+                       stride = <(1080 * 4)>;
+                       format = "a8r8g8b8";
+                       status= "okay";
+               };
+       };
+
+       gpio_keys {
+               status = "okay";
+               compatible = "gpio-keys";
+               input-name = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               autorepeat;
+
+               camera_focus {
+                       label = "Camera Focus";
+                       gpios = <&tlmm 64 GPIO_ACTIVE_LOW>;
+                       linux,input-type = <1>;
+                       linux,code = <KEY_CAMERA_FOCUS>;
+                       debounce-interval = <15>;
+               };
+
+               camera_snapshot {
+                       label = "Camera Snapshot";
+                       gpios = <&tlmm 113 GPIO_ACTIVE_LOW>;
+                       linux,input-type = <1>;
+                       linux,code = <KEY_CAMERA>;
+                       debounce-interval = <15>;
+               };
+
+               vol_down {
+                       label = "Volume Down";
+                       gpios = <&pm660l_gpios 7 GPIO_ACTIVE_LOW>;
+                       linux,input-type = <1>;
+                       linux,code = <KEY_VOLUMEDOWN>;
+                       gpio-key,wakeup;
+                       debounce-interval = <15>;
+               };
+       };
+
+       reserved-memory {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               ramoops@ffc00000 {
+                       compatible = "ramoops";
+                       reg = <0x0 0xffc00000 0x0 0x100000>;
+                       record-size = <0x10000>;
+                       console-size = <0x60000>;
+                       ftrace-size = <0x10000>;
+                       pmsg-size = <0x20000>;
+                       ecc-size = <16>;
+                       status = "okay";
+               };
+
+               debug_region@ffb00000 {
+                       reg = <0x00 0xffb00000 0x00 0x100000>;
+                       no-map;
+               };
+
+               removed_region@85800000 {
+                       reg = <0x00 0x85800000 0x00 0x3700000>;
+                       no-map;
+               };
+       };
+
+       soc {
+               sdhci@c0c4000 {
+                       status = "okay";
+
+                       mmc-ddr-1_8v;
+                       /* SoMC Nile platform's eMMC doesn't support HS200 mode */
+                       mmc-hs400-1_8v;
+               };
+
+               i2c@c175000 {
+                       status = "okay";
+
+                       /* Synaptics touchscreen */
+               };
+
+               i2c@c176000 {
+                       status = "okay";
+
+                       /* SMB1351 charger */
+               };
+
+               serial@c1af000 {
+                       status = "okay";
+               };
+
+               /* I2C3, 4, 5, 7 and 8 are disabled on this board. */
+
+               i2c@c1b6000 {
+                       status = "okay";
+
+                       /* NXP NFC */
+               };
+       };
+};
diff --git a/arch/arm64/boot/dts/qcom/sdm630.dtsi b/arch/arm64/boot/dts/qcom/sdm630.dtsi
new file mode 100644 (file)
index 0000000..88efe82
--- /dev/null
@@ -0,0 +1,1174 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Konrad Dybcio
+ */
+
+#include <dt-bindings/clock/qcom,gcc-sdm660.h>
+#include <dt-bindings/clock/qcom,rpmcc.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+       interrupt-parent = <&intc>;
+
+       #address-cells = <2>;
+       #size-cells = <2>;
+
+       chosen { };
+
+       clocks {
+               xo_board: xo_board {
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+                       clock-frequency = <19200000>;
+                       clock-output-names = "xo_board";
+               };
+
+               sleep_clk: sleep_clk {
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+                       clock-frequency = <32764>;
+                       clock-output-names = "sleep_clk";
+               };
+       };
+
+       cpus {
+               #address-cells = <2>;
+               #size-cells = <0>;
+
+               CPU0: cpu@100 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x100>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&PERF_CPU_SLEEP_0
+                                               &PERF_CPU_SLEEP_1
+                                               &PERF_CLUSTER_SLEEP_0
+                                               &PERF_CLUSTER_SLEEP_1
+                                               &PERF_CLUSTER_SLEEP_2>;
+                       capacity-dmips-mhz = <1126>;
+                       #cooling-cells = <2>;
+                       next-level-cache = <&L2_1>;
+                       L2_1: l2-cache {
+                               compatible = "cache";
+                               cache-level = <2>;
+                       };
+               };
+
+               CPU1: cpu@101 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x101>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&PERF_CPU_SLEEP_0
+                                               &PERF_CPU_SLEEP_1
+                                               &PERF_CLUSTER_SLEEP_0
+                                               &PERF_CLUSTER_SLEEP_1
+                                               &PERF_CLUSTER_SLEEP_2>;
+                       capacity-dmips-mhz = <1126>;
+                       #cooling-cells = <2>;
+                       next-level-cache = <&L2_1>;
+               };
+
+               CPU2: cpu@102 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x102>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&PERF_CPU_SLEEP_0
+                                               &PERF_CPU_SLEEP_1
+                                               &PERF_CLUSTER_SLEEP_0
+                                               &PERF_CLUSTER_SLEEP_1
+                                               &PERF_CLUSTER_SLEEP_2>;
+                       capacity-dmips-mhz = <1126>;
+                       #cooling-cells = <2>;
+                       next-level-cache = <&L2_1>;
+               };
+
+               CPU3: cpu@103 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x103>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&PERF_CPU_SLEEP_0
+                                               &PERF_CPU_SLEEP_1
+                                               &PERF_CLUSTER_SLEEP_0
+                                               &PERF_CLUSTER_SLEEP_1
+                                               &PERF_CLUSTER_SLEEP_2>;
+                       capacity-dmips-mhz = <1126>;
+                       #cooling-cells = <2>;
+                       next-level-cache = <&L2_1>;
+               };
+
+               CPU4: cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x0>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&PWR_CPU_SLEEP_0
+                                               &PWR_CPU_SLEEP_1
+                                               &PWR_CLUSTER_SLEEP_0
+                                               &PWR_CLUSTER_SLEEP_1
+                                               &PWR_CLUSTER_SLEEP_2>;
+                       capacity-dmips-mhz = <1024>;
+                       #cooling-cells = <2>;
+                       next-level-cache = <&L2_0>;
+                       L2_0: l2-cache {
+                               compatible = "cache";
+                               cache-level = <2>;
+                       };
+               };
+
+               CPU5: cpu@1 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x1>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&PWR_CPU_SLEEP_0
+                                               &PWR_CPU_SLEEP_1
+                                               &PWR_CLUSTER_SLEEP_0
+                                               &PWR_CLUSTER_SLEEP_1
+                                               &PWR_CLUSTER_SLEEP_2>;
+                       capacity-dmips-mhz = <1024>;
+                       #cooling-cells = <2>;
+                       next-level-cache = <&L2_0>;
+               };
+
+               CPU6: cpu@2 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x2>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&PWR_CPU_SLEEP_0
+                                               &PWR_CPU_SLEEP_1
+                                               &PWR_CLUSTER_SLEEP_0
+                                               &PWR_CLUSTER_SLEEP_1
+                                               &PWR_CLUSTER_SLEEP_2>;
+                       capacity-dmips-mhz = <1024>;
+                       #cooling-cells = <2>;
+                       next-level-cache = <&L2_0>;
+               };
+
+               CPU7: cpu@3 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0 0x3>;
+                       enable-method = "psci";
+                       cpu-idle-states = <&PWR_CPU_SLEEP_0
+                                               &PWR_CPU_SLEEP_1
+                                               &PWR_CLUSTER_SLEEP_0
+                                               &PWR_CLUSTER_SLEEP_1
+                                               &PWR_CLUSTER_SLEEP_2>;
+                       capacity-dmips-mhz = <1024>;
+                       #cooling-cells = <2>;
+                       next-level-cache = <&L2_0>;
+               };
+
+               cpu-map {
+                       cluster0 {
+                               core0 {
+                                       cpu = <&CPU4>;
+                               };
+
+                               core1 {
+                                       cpu = <&CPU5>;
+                               };
+
+                               core2 {
+                                       cpu = <&CPU6>;
+                               };
+
+                               core3 {
+                                       cpu = <&CPU7>;
+                               };
+                       };
+
+                       cluster1 {
+                               core0 {
+                                       cpu = <&CPU0>;
+                               };
+
+                               core1 {
+                                       cpu = <&CPU1>;
+                               };
+
+                               core2 {
+                                       cpu = <&CPU2>;
+                               };
+
+                               core3 {
+                                       cpu = <&CPU3>;
+                               };
+                       };
+               };
+
+               idle-states {
+                       entry-method = "psci";
+
+                       PWR_CPU_SLEEP_0: cpu-sleep-0-0 {
+                               compatible = "arm,idle-state";
+                               idle-state-name = "pwr-retention";
+                               arm,psci-suspend-param = <0x40000002>;
+                               entry-latency-us = <338>;
+                               exit-latency-us = <423>;
+                               min-residency-us = <200>;
+                       };
+
+                       PWR_CPU_SLEEP_1: cpu-sleep-0-1 {
+                               compatible = "arm,idle-state";
+                               idle-state-name = "pwr-power-collapse";
+                               arm,psci-suspend-param = <0x40000003>;
+                               entry-latency-us = <515>;
+                               exit-latency-us = <1821>;
+                               min-residency-us = <1000>;
+                               local-timer-stop;
+                       };
+
+                       PERF_CPU_SLEEP_0: cpu-sleep-1-0 {
+                               compatible = "arm,idle-state";
+                               idle-state-name = "perf-retention";
+                               arm,psci-suspend-param = <0x40000002>;
+                               entry-latency-us = <154>;
+                               exit-latency-us = <87>;
+                               min-residency-us = <200>;
+                       };
+
+                       PERF_CPU_SLEEP_1: cpu-sleep-1-1 {
+                               compatible = "arm,idle-state";
+                               idle-state-name = "perf-power-collapse";
+                               arm,psci-suspend-param = <0x40000003>;
+                               entry-latency-us = <262>;
+                               exit-latency-us = <301>;
+                               min-residency-us = <1000>;
+                               local-timer-stop;
+                       };
+
+                       PWR_CLUSTER_SLEEP_0: cluster-sleep-0-0 {
+                               compatible = "arm,idle-state";
+                               idle-state-name = "pwr-cluster-dynamic-retention";
+                               arm,psci-suspend-param = <0x400000F2>;
+                               entry-latency-us = <284>;
+                               exit-latency-us = <384>;
+                               min-residency-us = <9987>;
+                               local-timer-stop;
+                       };
+
+                       PWR_CLUSTER_SLEEP_1: cluster-sleep-0-1 {
+                               compatible = "arm,idle-state";
+                               idle-state-name = "pwr-cluster-retention";
+                               arm,psci-suspend-param = <0x400000F3>;
+                               entry-latency-us = <338>;
+                               exit-latency-us = <423>;
+                               min-residency-us = <9987>;
+                               local-timer-stop;
+                       };
+
+                       PWR_CLUSTER_SLEEP_2: cluster-sleep-0-2 {
+                               compatible = "arm,idle-state";
+                               idle-state-name = "pwr-cluster-retention";
+                               arm,psci-suspend-param = <0x400000F4>;
+                               entry-latency-us = <515>;
+                               exit-latency-us = <1821>;
+                               min-residency-us = <9987>;
+                               local-timer-stop;
+                       };
+
+                       PERF_CLUSTER_SLEEP_0: cluster-sleep-1-0 {
+                               compatible = "arm,idle-state";
+                               idle-state-name = "perf-cluster-dynamic-retention";
+                               arm,psci-suspend-param = <0x400000F2>;
+                               entry-latency-us = <272>;
+                               exit-latency-us = <329>;
+                               min-residency-us = <9987>;
+                               local-timer-stop;
+                       };
+
+                       PERF_CLUSTER_SLEEP_1: cluster-sleep-1-1 {
+                               compatible = "arm,idle-state";
+                               idle-state-name = "perf-cluster-retention";
+                               arm,psci-suspend-param = <0x400000F3>;
+                               entry-latency-us = <332>;
+                               exit-latency-us = <368>;
+                               min-residency-us = <9987>;
+                               local-timer-stop;
+                       };
+
+                       PERF_CLUSTER_SLEEP_2: cluster-sleep-1-2 {
+                               compatible = "arm,idle-state";
+                               idle-state-name = "perf-cluster-retention";
+                               arm,psci-suspend-param = <0x400000F4>;
+                               entry-latency-us = <545>;
+                               exit-latency-us = <1609>;
+                               min-residency-us = <9987>;
+                               local-timer-stop;
+                       };
+               };
+       };
+
+       firmware {
+               scm {
+                       compatible = "qcom,scm-msm8998", "qcom,scm";
+               };
+       };
+
+       memory {
+               device_type = "memory";
+               /* We expect the bootloader to fill in the reg */
+               reg = <0 0 0 0>;
+       };
+
+       pmu {
+               compatible = "arm,armv8-pmuv3";
+               interrupts = <GIC_PPI 6 IRQ_TYPE_LEVEL_HIGH>;
+       };
+
+       psci {
+               compatible = "arm,psci-1.0";
+               method = "smc";
+       };
+
+       reserved-memory {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               wlan_msa_guard: wlan-msa-guard@85600000 {
+                       reg = <0x0 0x85600000 0x0 0x100000>;
+                       no-map;
+               };
+
+               wlan_msa_mem: wlan-msa-mem@85700000 {
+                       reg = <0x0 0x85700000 0x0 0x100000>;
+                       no-map;
+               };
+
+               qhee_code: qhee-code@85800000 {
+                       reg = <0x0 0x85800000 0x0 0x3700000>;
+                       no-map;
+               };
+
+               smem_region: smem-mem@86000000 {
+                       reg = <0 0x86000000 0 0x200000>;
+                       no-map;
+               };
+
+               tz_mem: memory@86200000 {
+                       reg = <0x0 0x86200000 0x0 0x3300000>;
+                       no-map;
+               };
+
+               modem_fw_mem: modem-fw-region@8ac00000 {
+                       reg = <0x0 0x8ac00000 0x0 0x7e00000>;
+                       no-map;
+               };
+
+               adsp_fw_mem: adsp-fw-region@92a00000 {
+                       reg = <0x0 0x92a00000 0x0 0x1e00000>;
+                       no-map;
+               };
+
+               pil_mba_mem: pil-mba-region@94800000 {
+                       reg = <0x0 0x94800000 0x0 0x200000>;
+                       no-map;
+               };
+
+               buffer_mem: buffer-region@94a00000 {
+                       reg = <0x0 0x94a00000 0x0 0x100000>;
+                       no-map;
+               };
+
+               venus_fw_mem: venus-fw-region@9f800000 {
+                       reg = <0x0 0x9f800000 0x0 0x800000>;
+                       no-map;
+               };
+
+               secure_region2: secure-region2@f7c00000 {
+                       reg = <0x0 0xf7c00000 0x0 0x5c00000>;
+                       no-map;
+               };
+
+               adsp_mem: adsp-region@f6000000 {
+                       reg = <0x0 0xf6000000 0x0 0x800000>;
+                       no-map;
+               };
+
+               qseecom_ta_mem: qseecom-ta-region@fec00000 {
+                       reg = <0x0 0xfec00000 0x0 0x1000000>;
+                       no-map;
+               };
+
+               qseecom_mem: qseecom-region@f6800000 {
+                       reg = <0x0 0xf6800000 0x0 0x1400000>;
+                       no-map;
+               };
+
+               secure_display_memory: secure-region@f5c00000 {
+                       reg = <0x0 0xf5c00000 0x0 0x5c00000>;
+                       no-map;
+               };
+
+               cont_splash_mem: cont-splash-region@9d400000 {
+                       reg = <0x0 0x9d400000 0x0 0x23ff000>;
+                       no-map;
+               };
+       };
+
+       rpm-glink {
+               compatible = "qcom,glink-rpm";
+
+               interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
+               qcom,rpm-msg-ram = <&rpm_msg_ram>;
+               mboxes = <&apcs_glb 0>;
+
+               rpm_requests: rpm-requests {
+                       compatible = "qcom,rpm-sdm660";
+                       qcom,glink-channels = "rpm_requests";
+
+                       rpmcc: clock-controller {
+                               compatible = "qcom,rpmcc-sdm660", "qcom,rpmcc";
+                               #clock-cells = <1>;
+                       };
+               };
+       };
+
+       smem: smem {
+               compatible = "qcom,smem";
+               memory-region = <&smem_region>;
+               hwlocks = <&tcsr_mutex 3>;
+       };
+
+       soc {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0 0 0 0xffffffff>;
+               compatible = "simple-bus";
+
+               gcc: clock-controller@100000 {
+                       compatible = "qcom,gcc-sdm630";
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+                       #power-domain-cells = <1>;
+                       reg = <0x00100000 0x94000>;
+
+                       clock-names = "xo", "sleep_clk";
+                       clocks = <&xo_board>,
+                                       <&sleep_clk>;
+               };
+
+               rpm_msg_ram: memory@778000 {
+                       compatible = "qcom,rpm-msg-ram";
+                       reg = <0x00778000 0x7000>;
+               };
+
+               qfprom: qfprom@780000 {
+                       compatible = "qcom,qfprom";
+                       reg = <0x00780000 0x621c>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+               };
+
+               rng: rng@793000 {
+                       compatible = "qcom,prng-ee";
+                       reg = <0x00793000 0x1000>;
+                       clocks = <&gcc GCC_PRNG_AHB_CLK>;
+                       clock-names = "core";
+               };
+
+               restart@10ac000 {
+                       compatible = "qcom,pshold";
+                       reg = <0x010ac000 0x4>;
+               };
+
+               anoc2_smmu: iommu@16c0000 {
+                       compatible = "qcom,sdm630-smmu-v2", "qcom,smmu-v2";
+                       reg = <0x016c0000 0x40000>;
+                       #iommu-cells = <1>;
+
+                       #global-interrupts = <2>;
+                       interrupts =
+                               <GIC_SPI 229 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 231 IRQ_TYPE_LEVEL_HIGH>,
+
+                               <GIC_SPI 373 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 374 IRQ_TYPE_LEVEL_LOW>,
+                               <GIC_SPI 375 IRQ_TYPE_LEVEL_LOW>,
+                               <GIC_SPI 376 IRQ_TYPE_LEVEL_LOW>,
+                               <GIC_SPI 377 IRQ_TYPE_LEVEL_LOW>,
+                               <GIC_SPI 378 IRQ_TYPE_LEVEL_LOW>,
+                               <GIC_SPI 462 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 463 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 464 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 465 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 466 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 467 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 359 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 360 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 442 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 443 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 444 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 447 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 468 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 472 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 473 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 474 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               tcsr_mutex_regs: syscon@1f40000 {
+                       compatible = "syscon";
+                       reg = <0x01f40000 0x20000>;
+               };
+
+               tlmm: pinctrl@3000000 {
+                       compatible = "qcom,sdm630-pinctrl";
+                       reg = <0x03000000 0xc00000>;
+                       interrupts = <GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <0x2>;
+                       interrupt-controller;
+                       #interrupt-cells = <0x2>;
+
+                       blsp1_uart1_default: blsp1-uart1-default {
+                               pins = "gpio0", "gpio1", "gpio2", "gpio3";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       blsp1_uart1_sleep: blsp1-uart1-sleep {
+                               pins = "gpio0", "gpio1", "gpio2", "gpio3";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       blsp1_uart2_default: blsp1-uart2-default {
+                               pins = "gpio4", "gpio5";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       blsp2_uart1_tx_active: blsp2-uart1-tx-active {
+                               pins = "gpio16";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       blsp2_uart1_tx_sleep: blsp2-uart1-tx-sleep {
+                               pins = "gpio16";
+                               drive-strength = <2>;
+                               bias-pull-up;
+                       };
+
+                       blsp2_uart1_rxcts_active: blsp2-uart1-rxcts-active {
+                               pins = "gpio17", "gpio18";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       blsp2_uart1_rxcts_sleep: blsp2-uart1-rxcts-sleep {
+                               pins = "gpio17", "gpio18";
+                               drive-strength = <2>;
+                               bias-no-pull;
+                       };
+
+                       blsp2_uart1_rfr_active: blsp2-uart1-rfr-active {
+                               pins = "gpio19";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       blsp2_uart1_rfr_sleep: blsp2-uart1-rfr-sleep {
+                               pins = "gpio19";
+                               drive-strength = <2>;
+                               bias-no-pull;
+                       };
+
+                       i2c1_default: i2c1-default {
+                               pins = "gpio2", "gpio3";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c1_sleep: i2c1-sleep {
+                               pins = "gpio2", "gpio3";
+                               drive-strength = <2>;
+                               bias-pull-up;
+                       };
+
+                       i2c2_default: i2c2-default {
+                               pins = "gpio6", "gpio7";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c2_sleep: i2c2-sleep {
+                               pins = "gpio6", "gpio7";
+                               drive-strength = <2>;
+                               bias-pull-up;
+                       };
+
+                       i2c3_default: i2c3-default {
+                               pins = "gpio10", "gpio11";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c3_sleep: i2c3-sleep {
+                               pins = "gpio10", "gpio11";
+                               drive-strength = <2>;
+                               bias-pull-up;
+                       };
+
+                       i2c4_default: i2c4-default {
+                               pins = "gpio14", "gpio15";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c4_sleep: i2c4-sleep {
+                               pins = "gpio14", "gpio15";
+                               drive-strength = <2>;
+                               bias-pull-up;
+                       };
+
+                       i2c5_default: i2c5-default {
+                               pins = "gpio18", "gpio19";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c5_sleep: i2c5-sleep {
+                               pins = "gpio18", "gpio19";
+                               drive-strength = <2>;
+                               bias-pull-up;
+                       };
+
+                       i2c6_default: i2c6-default {
+                               pins = "gpio22", "gpio23";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c6_sleep: i2c6-sleep {
+                               pins = "gpio22", "gpio23";
+                               drive-strength = <2>;
+                               bias-pull-up;
+                       };
+
+                       i2c7_default: i2c7-default {
+                               pins = "gpio26", "gpio27";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c7_sleep: i2c7-sleep {
+                               pins = "gpio26", "gpio27";
+                               drive-strength = <2>;
+                               bias-pull-up;
+                       };
+
+                       i2c8_default: i2c8-default {
+                               pins = "gpio30", "gpio31";
+                               drive-strength = <2>;
+                               bias-disable;
+                       };
+
+                       i2c8_sleep: i2c8-sleep {
+                               pins = "gpio30", "gpio31";
+                               drive-strength = <2>;
+                               bias-pull-up;
+                       };
+
+                       sdc1_clk_on: sdc1-clk-on {
+                               pins = "sdc1_clk";
+                               bias-disable;
+                               drive-strength = <16>;
+                       };
+
+                       sdc1_clk_off: sdc1-clk-off {
+                               pins = "sdc1_clk";
+                               bias-disable;
+                               drive-strength = <2>;
+                       };
+
+                       sdc1_cmd_on: sdc1-cmd-on {
+                               pins = "sdc1_cmd";
+                               bias-pull-up;
+                               drive-strength = <10>;
+                       };
+
+                       sdc1_cmd_off: sdc1-cmd-off {
+                               pins = "sdc1_cmd";
+                               bias-pull-up;
+                               drive-strength = <2>;
+                       };
+
+                       sdc1_data_on: sdc1-data-on {
+                               pins = "sdc1_data";
+                               bias-pull-up;
+                               drive-strength = <8>;
+                       };
+
+                       sdc1_data_off: sdc1-data-off {
+                               pins = "sdc1_data";
+                               bias-pull-up;
+                               drive-strength = <2>;
+                       };
+
+                       sdc1_rclk_on: sdc1-rclk-on {
+                               pins = "sdc1_rclk";
+                               bias-pull-down;
+                       };
+
+                       sdc1_rclk_off: sdc1-rclk-off {
+                               pins = "sdc1_rclk";
+                               bias-pull-down;
+                       };
+               };
+
+               kgsl_smmu: iommu@5040000 {
+                       compatible = "qcom,sdm630-smmu-v2", "qcom,smmu-v2";
+                       reg = <0x05040000 0x10000>;
+                       #iommu-cells = <1>;
+
+                       #global-interrupts = <2>;
+                       interrupts =
+                               <GIC_SPI 229 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 231 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 116 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 349 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 350 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               lpass_smmu: iommu@5100000 {
+                       compatible = "qcom,sdm630-smmu-v2", "qcom,smmu-v2";
+                       reg = <0x05100000 0x40000>;
+                       #iommu-cells = <1>;
+
+                       #global-interrupts = <2>;
+                       interrupts =
+                               <GIC_SPI 229 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 231 IRQ_TYPE_LEVEL_HIGH>,
+
+                               <GIC_SPI 226 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 393 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 394 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 395 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 396 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 397 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 398 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 399 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 400 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 401 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 402 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 403 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 310 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 404 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               spmi_bus: spmi@800f000 {
+                       compatible = "qcom,spmi-pmic-arb";
+                       reg =   <0x0800f000 0x1000>,
+                               <0x08400000 0x1000000>,
+                               <0x09400000 0x1000000>,
+                               <0x0a400000 0x220000>,
+                               <0x0800a000 0x3000>;
+                       reg-names = "core", "chnls", "obsrvr", "intr", "cnfg";
+                       interrupt-names = "periph_irq";
+                       interrupts = <GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH>;
+                       qcom,ee = <0>;
+                       qcom,channel = <0>;
+                       #address-cells = <2>;
+                       #size-cells = <0>;
+                       interrupt-controller;
+                       #interrupt-cells = <4>;
+                       cell-index = <0>;
+               };
+
+               sdhc_1: sdhci@c0c4000 {
+                       compatible = "qcom,sdm630-sdhci", "qcom,sdhci-msm-v5";
+                       reg = <0x0c0c4000 0x1000>,
+                               <0x0c0c5000 0x1000>;
+                       reg-names = "hc", "cqhci";
+
+                       interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>,
+                                       <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "hc_irq", "pwr_irq";
+
+                       clocks = <&gcc GCC_SDCC1_APPS_CLK>,
+                                       <&gcc GCC_SDCC1_AHB_CLK>,
+                                       <&xo_board>;
+                       clock-names = "core", "iface", "xo";
+
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on &sdc1_rclk_on>;
+                       pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off &sdc1_rclk_off>;
+
+                       bus-width = <8>;
+                       non-removable;
+
+                       status = "disabled";
+               };
+
+               blsp1_dma: dma@c144000 {
+                       compatible = "qcom,bam-v1.7.0";
+                       reg = <0x0c144000 0x1f000>;
+                       interrupts = <GIC_SPI 238 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_AHB_CLK>;
+                       clock-names = "bam_clk";
+                       #dma-cells = <1>;
+                       qcom,ee = <0>;
+                       qcom,controlled-remotely;
+                       num-channels = <18>;
+                       qcom,num-ees = <4>;
+               };
+
+               blsp1_uart1: serial@c16f000 {
+                       compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
+                       reg = <0x0c16f000 0x200>;
+                       interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_UART1_APPS_CLK>,
+                                <&gcc GCC_BLSP1_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       dmas = <&blsp1_dma 0>, <&blsp1_dma 1>;
+                       dma-names = "tx", "rx";
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&blsp1_uart1_default>;
+                       pinctrl-1 = <&blsp1_uart1_sleep>;
+                       status = "disabled";
+               };
+
+               blsp1_uart2: serial@c170000 {
+                       compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
+                       reg = <0x0c170000 0x1000>;
+                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>,
+                                <&gcc GCC_BLSP1_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       dmas = <&blsp1_dma 2>, <&blsp1_dma 3>;
+                       dma-names = "tx", "rx";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&blsp1_uart2_default>;
+                       status = "disabled";
+               };
+
+               blsp_i2c1: i2c@c175000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0x0c175000 0x600>;
+                       interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
+
+                       clocks = <&gcc GCC_BLSP1_QUP1_I2C_APPS_CLK>,
+                                       <&gcc GCC_BLSP1_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       clock-frequency = <400000>;
+
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c1_default>;
+                       pinctrl-1 = <&i2c1_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               blsp_i2c2: i2c@c176000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0x0c176000 0x600>;
+                       interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
+
+                       clocks = <&gcc GCC_BLSP1_QUP2_I2C_APPS_CLK>,
+                                <&gcc GCC_BLSP1_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       clock-frequency = <400000>;
+
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c2_default>;
+                       pinctrl-1 = <&i2c2_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               blsp_i2c3: i2c@c177000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0x0c177000 0x600>;
+                       interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
+
+                       clocks = <&gcc GCC_BLSP1_QUP3_I2C_APPS_CLK>,
+                                <&gcc GCC_BLSP1_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       clock-frequency = <400000>;
+
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c3_default>;
+                       pinctrl-1 = <&i2c3_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               blsp_i2c4: i2c@c178000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0x0c178000 0x600>;
+                       interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
+
+                       clocks = <&gcc GCC_BLSP1_QUP4_I2C_APPS_CLK>,
+                                <&gcc GCC_BLSP1_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       clock-frequency = <400000>;
+
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c4_default>;
+                       pinctrl-1 = <&i2c4_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               blsp2_dma: dma@c184000 {
+                       compatible = "qcom,bam-v1.7.0";
+                       reg = <0x0c184000 0x1f000>;
+                       interrupts = <GIC_SPI 239 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP2_AHB_CLK>;
+                       clock-names = "bam_clk";
+                       #dma-cells = <1>;
+                       qcom,ee = <0>;
+                       qcom,controlled-remotely;
+                       num-channels = <18>;
+                       qcom,num-ees = <4>;
+               };
+
+               blsp2_uart1: serial@c1af000 {
+                       compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
+                       reg = <0x0c1af000 0x200>;
+                       interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP2_UART1_APPS_CLK>,
+                                <&gcc GCC_BLSP2_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       dmas = <&blsp2_dma 0>, <&blsp2_dma 1>;
+                       dma-names = "tx", "rx";
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&blsp2_uart1_tx_active &blsp2_uart1_rxcts_active
+                               &blsp2_uart1_rfr_active>;
+                       pinctrl-1 = <&blsp2_uart1_tx_sleep &blsp2_uart1_rxcts_sleep
+                               &blsp2_uart1_rfr_sleep>;
+                       status = "disabled";
+               };
+
+               blsp_i2c5: i2c@c1b5000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0x0c1b5000 0x600>;
+                       interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
+
+                       clocks = <&gcc GCC_BLSP2_QUP1_I2C_APPS_CLK>,
+                                <&gcc GCC_BLSP2_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       clock-frequency = <400000>;
+
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c5_default>;
+                       pinctrl-1 = <&i2c5_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               blsp_i2c6: i2c@c1b6000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0x0c1b6000 0x600>;
+                       interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
+
+                       clocks = <&gcc GCC_BLSP2_QUP2_I2C_APPS_CLK>,
+                                <&gcc GCC_BLSP2_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       clock-frequency = <400000>;
+
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c6_default>;
+                       pinctrl-1 = <&i2c6_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               blsp_i2c7: i2c@c1b7000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0x0c1b7000 0x600>;
+                       interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
+
+                       clocks = <&gcc GCC_BLSP2_QUP3_I2C_APPS_CLK>,
+                                <&gcc GCC_BLSP2_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       clock-frequency = <400000>;
+
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c7_default>;
+                       pinctrl-1 = <&i2c7_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               blsp_i2c8: i2c@c1b8000 {
+                       compatible = "qcom,i2c-qup-v2.2.1";
+                       reg = <0x0c1b8000 0x600>;
+                       interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>;
+
+                       clocks = <&gcc GCC_BLSP2_QUP4_I2C_APPS_CLK>,
+                                <&gcc GCC_BLSP2_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       clock-frequency = <400000>;
+
+                       pinctrl-names = "default", "sleep";
+                       pinctrl-0 = <&i2c8_default>;
+                       pinctrl-1 = <&i2c8_sleep>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               mmss_smmu: iommu@cd00000 {
+                       compatible = "qcom,sdm630-smmu-v2", "qcom,smmu-v2";
+                       reg = <0x0cd00000 0x40000>;
+                       #iommu-cells = <1>;
+
+                       #global-interrupts = <2>;
+                       interrupts =
+                               <GIC_SPI 229 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 231 IRQ_TYPE_LEVEL_HIGH>,
+
+                               <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 267 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 244 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 245 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 248 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 249 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 250 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 251 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 252 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 253 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 254 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 255 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 260 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 261 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 272 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 273 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 274 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 275 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 276 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               apcs_glb: mailbox@17911000 {
+                       compatible = "qcom,sdm660-apcs-hmss-global";
+                       reg = <0x17911000 0x1000>;
+
+                       #mbox-cells = <1>;
+               };
+
+               timer@17920000 {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+                       compatible = "arm,armv7-timer-mem";
+                       reg = <0x17920000 0x1000>;
+                       clock-frequency = <19200000>;
+
+                       frame@17921000 {
+                               frame-number = <0>;
+                               interrupts = <0 8 0x4>,
+                                               <0 7 0x4>;
+                               reg = <0x17921000 0x1000>,
+                                       <0x17922000 0x1000>;
+                       };
+
+                       frame@17923000 {
+                               frame-number = <1>;
+                               interrupts = <0 9 0x4>;
+                               reg = <0x17923000 0x1000>;
+                               status = "disabled";
+                       };
+
+                       frame@17924000 {
+                               frame-number = <2>;
+                               interrupts = <0 10 0x4>;
+                               reg = <0x17924000 0x1000>;
+                               status = "disabled";
+                       };
+
+                       frame@17925000 {
+                               frame-number = <3>;
+                               interrupts = <0 11 0x4>;
+                               reg = <0x17925000 0x1000>;
+                               status = "disabled";
+                       };
+
+                       frame@17926000 {
+                               frame-number = <4>;
+                               interrupts = <0 12 0x4>;
+                               reg = <0x17926000 0x1000>;
+                               status = "disabled";
+                       };
+
+                       frame@17927000 {
+                               frame-number = <5>;
+                               interrupts = <0 13 0x4>;
+                               reg = <0x17927000 0x1000>;
+                               status = "disabled";
+                       };
+
+                       frame@17928000 {
+                               frame-number = <6>;
+                               interrupts = <0 14 0x4>;
+                               reg = <0x17928000 0x1000>;
+                               status = "disabled";
+                       };
+               };
+
+               intc: interrupt-controller@17a00000 {
+                       compatible = "arm,gic-v3";
+                       reg = <0x17a00000 0x10000>,        /* GICD */
+                                 <0x17b00000 0x100000>;          /* GICR * 8 */
+                       #interrupt-cells = <3>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+                       interrupt-controller;
+                       #redistributor-regions = <1>;
+                       redistributor-stride = <0x0 0x20000>;
+                       interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+               };
+       };
+
+       tcsr_mutex: hwlock {
+               compatible = "qcom,tcsr-mutex";
+               syscon = <&tcsr_mutex_regs 0 0x1000>;
+               #hwlock-cells = <1>;
+       };
+
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupts = <GIC_PPI 1 0xf08>,
+                                <GIC_PPI 2 0xf08>,
+                                <GIC_PPI 3 0xf08>,
+                                <GIC_PPI 0 0xf08>;
+       };
+};
+
diff --git a/arch/arm64/boot/dts/qcom/sdm636-sony-xperia-ganges-mermaid.dts b/arch/arm64/boot/dts/qcom/sdm636-sony-xperia-ganges-mermaid.dts
new file mode 100644 (file)
index 0000000..7c0830e
--- /dev/null
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2020, Martin Botka
+ */
+
+/dts-v1/;
+
+/* Mermaid uses sdm636, but it's different ever so slightly
+ * that we can ignore it for the time being. Sony also commonizes
+ * the Ganges platform as a whole in downstream kernels.
+ */
+#include "sdm630-sony-xperia-ganges.dtsi"
+
+/ {
+       model = "Sony Xperia 10 Plus";
+       compatible = "sony,mermaid-row", "qcom,sdm636";
+
+       qcom,msm-id = <345 0>;
+       qcom,pmic-id = <0x1001b 0x101011a 0x00 0x00 0x1001b 0x201011a 0x00 0x00 0x1001b 0x102001a 0x00 0x00>;
+};
index 70466cc..64fc1bf 100644 (file)
@@ -634,7 +634,7 @@ ap_ts_i2c: &i2c14 {
 };
 
 &mss_pil {
-       iommus = <&apps_smmu 0x780 0x1>,
+       iommus = <&apps_smmu 0x781 0x0>,
                 <&apps_smmu 0x724 0x3>;
 };
 
index 8eb5a31..e506793 100644 (file)
@@ -12,6 +12,7 @@
 #include <dt-bindings/clock/qcom,lpass-sdm845.h>
 #include <dt-bindings/clock/qcom,rpmh.h>
 #include <dt-bindings/clock/qcom,videocc-sdm845.h>
+#include <dt-bindings/interconnect/qcom,osm-l3.h>
 #include <dt-bindings/interconnect/qcom,sdm845.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/phy/phy-qcom-qusb2.h>
                        capacity-dmips-mhz = <607>;
                        dynamic-power-coefficient = <100>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       interconnects = <&gladiator_noc MASTER_APPSS_PROC &mem_noc SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        next-level-cache = <&L2_0>;
                        L2_0: l2-cache {
                        capacity-dmips-mhz = <607>;
                        dynamic-power-coefficient = <100>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       interconnects = <&gladiator_noc MASTER_APPSS_PROC &mem_noc SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        next-level-cache = <&L2_100>;
                        L2_100: l2-cache {
                        capacity-dmips-mhz = <607>;
                        dynamic-power-coefficient = <100>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       interconnects = <&gladiator_noc MASTER_APPSS_PROC &mem_noc SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        next-level-cache = <&L2_200>;
                        L2_200: l2-cache {
                        capacity-dmips-mhz = <607>;
                        dynamic-power-coefficient = <100>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
+                       operating-points-v2 = <&cpu0_opp_table>;
+                       interconnects = <&gladiator_noc MASTER_APPSS_PROC &mem_noc SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        next-level-cache = <&L2_300>;
                        L2_300: l2-cache {
                                           &CLUSTER_SLEEP_0>;
                        dynamic-power-coefficient = <396>;
                        qcom,freq-domain = <&cpufreq_hw 1>;
+                       operating-points-v2 = <&cpu4_opp_table>;
+                       interconnects = <&gladiator_noc MASTER_APPSS_PROC &mem_noc SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        next-level-cache = <&L2_400>;
                        L2_400: l2-cache {
                                           &CLUSTER_SLEEP_0>;
                        dynamic-power-coefficient = <396>;
                        qcom,freq-domain = <&cpufreq_hw 1>;
+                       operating-points-v2 = <&cpu4_opp_table>;
+                       interconnects = <&gladiator_noc MASTER_APPSS_PROC &mem_noc SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        next-level-cache = <&L2_500>;
                        L2_500: l2-cache {
                                           &CLUSTER_SLEEP_0>;
                        dynamic-power-coefficient = <396>;
                        qcom,freq-domain = <&cpufreq_hw 1>;
+                       operating-points-v2 = <&cpu4_opp_table>;
+                       interconnects = <&gladiator_noc MASTER_APPSS_PROC &mem_noc SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        next-level-cache = <&L2_600>;
                        L2_600: l2-cache {
                                           &CLUSTER_SLEEP_0>;
                        dynamic-power-coefficient = <396>;
                        qcom,freq-domain = <&cpufreq_hw 1>;
+                       operating-points-v2 = <&cpu4_opp_table>;
+                       interconnects = <&gladiator_noc MASTER_APPSS_PROC &mem_noc SLAVE_EBI1>,
+                                       <&osm_l3 MASTER_OSM_L3_APPS &osm_l3 SLAVE_OSM_L3>;
                        #cooling-cells = <2>;
                        next-level-cache = <&L2_700>;
                        L2_700: l2-cache {
                };
        };
 
+       cpu0_opp_table: cpu0_opp_table {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               cpu0_opp1: opp-300000000 {
+                       opp-hz = /bits/ 64 <300000000>;
+                       opp-peak-kBps = <800000 4800000>;
+               };
+
+               cpu0_opp2: opp-403200000 {
+                       opp-hz = /bits/ 64 <403200000>;
+                       opp-peak-kBps = <800000 4800000>;
+               };
+
+               cpu0_opp3: opp-480000000 {
+                       opp-hz = /bits/ 64 <480000000>;
+                       opp-peak-kBps = <800000 6451200>;
+               };
+
+               cpu0_opp4: opp-576000000 {
+                       opp-hz = /bits/ 64 <576000000>;
+                       opp-peak-kBps = <800000 6451200>;
+               };
+
+               cpu0_opp5: opp-652800000 {
+                       opp-hz = /bits/ 64 <652800000>;
+                       opp-peak-kBps = <800000 7680000>;
+               };
+
+               cpu0_opp6: opp-748800000 {
+                       opp-hz = /bits/ 64 <748800000>;
+                       opp-peak-kBps = <1804000 9216000>;
+               };
+
+               cpu0_opp7: opp-825600000 {
+                       opp-hz = /bits/ 64 <825600000>;
+                       opp-peak-kBps = <1804000 9216000>;
+               };
+
+               cpu0_opp8: opp-902400000 {
+                       opp-hz = /bits/ 64 <902400000>;
+                       opp-peak-kBps = <1804000 10444800>;
+               };
+
+               cpu0_opp9: opp-979200000 {
+                       opp-hz = /bits/ 64 <979200000>;
+                       opp-peak-kBps = <1804000 11980800>;
+               };
+
+               cpu0_opp10: opp-1056000000 {
+                       opp-hz = /bits/ 64 <1056000000>;
+                       opp-peak-kBps = <1804000 11980800>;
+               };
+
+               cpu0_opp11: opp-1132800000 {
+                       opp-hz = /bits/ 64 <1132800000>;
+                       opp-peak-kBps = <2188000 13516800>;
+               };
+
+               cpu0_opp12: opp-1228800000 {
+                       opp-hz = /bits/ 64 <1228800000>;
+                       opp-peak-kBps = <2188000 15052800>;
+               };
+
+               cpu0_opp13: opp-1324800000 {
+                       opp-hz = /bits/ 64 <1324800000>;
+                       opp-peak-kBps = <2188000 16588800>;
+               };
+
+               cpu0_opp14: opp-1420800000 {
+                       opp-hz = /bits/ 64 <1420800000>;
+                       opp-peak-kBps = <3072000 18124800>;
+               };
+
+               cpu0_opp15: opp-1516800000 {
+                       opp-hz = /bits/ 64 <1516800000>;
+                       opp-peak-kBps = <3072000 19353600>;
+               };
+
+               cpu0_opp16: opp-1612800000 {
+                       opp-hz = /bits/ 64 <1612800000>;
+                       opp-peak-kBps = <4068000 19353600>;
+               };
+
+               cpu0_opp17: opp-1689600000 {
+                       opp-hz = /bits/ 64 <1689600000>;
+                       opp-peak-kBps = <4068000 20889600>;
+               };
+
+               cpu0_opp18: opp-1766400000 {
+                       opp-hz = /bits/ 64 <1766400000>;
+                       opp-peak-kBps = <4068000 22425600>;
+               };
+       };
+
+       cpu4_opp_table: cpu4_opp_table {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               cpu4_opp1: opp-300000000 {
+                       opp-hz = /bits/ 64 <300000000>;
+                       opp-peak-kBps = <800000 4800000>;
+               };
+
+               cpu4_opp2: opp-403200000 {
+                       opp-hz = /bits/ 64 <403200000>;
+                       opp-peak-kBps = <800000 4800000>;
+               };
+
+               cpu4_opp3: opp-480000000 {
+                       opp-hz = /bits/ 64 <480000000>;
+                       opp-peak-kBps = <1804000 4800000>;
+               };
+
+               cpu4_opp4: opp-576000000 {
+                       opp-hz = /bits/ 64 <576000000>;
+                       opp-peak-kBps = <1804000 4800000>;
+               };
+
+               cpu4_opp5: opp-652800000 {
+                       opp-hz = /bits/ 64 <652800000>;
+                       opp-peak-kBps = <1804000 4800000>;
+               };
+
+               cpu4_opp6: opp-748800000 {
+                       opp-hz = /bits/ 64 <748800000>;
+                       opp-peak-kBps = <1804000 4800000>;
+               };
+
+               cpu4_opp7: opp-825600000 {
+                       opp-hz = /bits/ 64 <825600000>;
+                       opp-peak-kBps = <2188000 9216000>;
+               };
+
+               cpu4_opp8: opp-902400000 {
+                       opp-hz = /bits/ 64 <902400000>;
+                       opp-peak-kBps = <2188000 9216000>;
+               };
+
+               cpu4_opp9: opp-979200000 {
+                       opp-hz = /bits/ 64 <979200000>;
+                       opp-peak-kBps = <2188000 9216000>;
+               };
+
+               cpu4_opp10: opp-1056000000 {
+                       opp-hz = /bits/ 64 <1056000000>;
+                       opp-peak-kBps = <3072000 9216000>;
+               };
+
+               cpu4_opp11: opp-1132800000 {
+                       opp-hz = /bits/ 64 <1132800000>;
+                       opp-peak-kBps = <3072000 11980800>;
+               };
+
+               cpu4_opp12: opp-1209600000 {
+                       opp-hz = /bits/ 64 <1209600000>;
+                       opp-peak-kBps = <4068000 11980800>;
+               };
+
+               cpu4_opp13: opp-1286400000 {
+                       opp-hz = /bits/ 64 <1286400000>;
+                       opp-peak-kBps = <4068000 11980800>;
+               };
+
+               cpu4_opp14: opp-1363200000 {
+                       opp-hz = /bits/ 64 <1363200000>;
+                       opp-peak-kBps = <4068000 15052800>;
+               };
+
+               cpu4_opp15: opp-1459200000 {
+                       opp-hz = /bits/ 64 <1459200000>;
+                       opp-peak-kBps = <4068000 15052800>;
+               };
+
+               cpu4_opp16: opp-1536000000 {
+                       opp-hz = /bits/ 64 <1536000000>;
+                       opp-peak-kBps = <5412000 15052800>;
+               };
+
+               cpu4_opp17: opp-1612800000 {
+                       opp-hz = /bits/ 64 <1612800000>;
+                       opp-peak-kBps = <5412000 15052800>;
+               };
+
+               cpu4_opp18: opp-1689600000 {
+                       opp-hz = /bits/ 64 <1689600000>;
+                       opp-peak-kBps = <5412000 19353600>;
+               };
+
+               cpu4_opp19: opp-1766400000 {
+                       opp-hz = /bits/ 64 <1766400000>;
+                       opp-peak-kBps = <6220000 19353600>;
+               };
+
+               cpu4_opp20: opp-1843200000 {
+                       opp-hz = /bits/ 64 <1843200000>;
+                       opp-peak-kBps = <6220000 19353600>;
+               };
+
+               cpu4_opp21: opp-1920000000 {
+                       opp-hz = /bits/ 64 <1920000000>;
+                       opp-peak-kBps = <7216000 19353600>;
+               };
+
+               cpu4_opp22: opp-1996800000 {
+                       opp-hz = /bits/ 64 <1996800000>;
+                       opp-peak-kBps = <7216000 20889600>;
+               };
+
+               cpu4_opp23: opp-2092800000 {
+                       opp-hz = /bits/ 64 <2092800000>;
+                       opp-peak-kBps = <7216000 20889600>;
+               };
+
+               cpu4_opp24: opp-2169600000 {
+                       opp-hz = /bits/ 64 <2169600000>;
+                       opp-peak-kBps = <7216000 20889600>;
+               };
+
+               cpu4_opp25: opp-2246400000 {
+                       opp-hz = /bits/ 64 <2246400000>;
+                       opp-peak-kBps = <7216000 20889600>;
+               };
+
+               cpu4_opp26: opp-2323200000 {
+                       opp-hz = /bits/ 64 <2323200000>;
+                       opp-peak-kBps = <7216000 20889600>;
+               };
+
+               cpu4_opp27: opp-2400000000 {
+                       opp-hz = /bits/ 64 <2400000000>;
+                       opp-peak-kBps = <7216000 22425600>;
+               };
+
+               cpu4_opp28: opp-2476800000 {
+                       opp-hz = /bits/ 64 <2476800000>;
+                       opp-peak-kBps = <7216000 22425600>;
+               };
+
+               cpu4_opp29: opp-2553600000 {
+                       opp-hz = /bits/ 64 <2553600000>;
+                       opp-peak-kBps = <7216000 22425600>;
+               };
+
+               cpu4_opp30: opp-2649600000 {
+                       opp-hz = /bits/ 64 <2649600000>;
+                       opp-peak-kBps = <7216000 22425600>;
+               };
+
+               cpu4_opp31: opp-2745600000 {
+                       opp-hz = /bits/ 64 <2745600000>;
+                       opp-peak-kBps = <7216000 25497600>;
+               };
+
+               cpu4_opp32: opp-2803200000 {
+                       opp-hz = /bits/ 64 <2803200000>;
+                       opp-peak-kBps = <7216000 25497600>;
+               };
+       };
+
        pmu {
                compatible = "arm,armv8-pmuv3";
                interrupts = <GIC_PPI 5 IRQ_TYPE_LEVEL_HIGH>;
                        clock-names = "core";
                };
 
+               qup_opp_table: qup-opp-table {
+                       compatible = "operating-points-v2";
+
+                       opp-19200000 {
+                               opp-hz = /bits/ 64 <19200000>;
+                               required-opps = <&rpmhpd_opp_min_svs>;
+                       };
+
+                       opp-75000000 {
+                               opp-hz = /bits/ 64 <75000000>;
+                               required-opps = <&rpmhpd_opp_low_svs>;
+                       };
+
+                       opp-100000000 {
+                               opp-hz = /bits/ 64 <100000000>;
+                               required-opps = <&rpmhpd_opp_svs>;
+                       };
+               };
+
                qupv3_id_0: geniqup@8c0000 {
                        compatible = "qcom,geni-se-qup";
                        reg = <0 0x008c0000 0 0x6000>;
                                interrupts = <GIC_SPI 601 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart0_default>;
                                interrupts = <GIC_SPI 601 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 602 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart1_default>;
                                interrupts = <GIC_SPI 602 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 603 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart2_default>;
                                interrupts = <GIC_SPI 603 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart3_default>;
                                interrupts = <GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 605 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart4_default>;
                                interrupts = <GIC_SPI 605 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 606 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart5_default>;
                                interrupts = <GIC_SPI 606 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 607 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart6_default>;
                                interrupts = <GIC_SPI 607 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 608 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart7_default>;
                                interrupts = <GIC_SPI 608 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
                };
                                interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart8_default>;
                                interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart9_default>;
                                interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart10_default>;
                                interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart11_default>;
                                interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart12_default>;
                                interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart13_default>;
                                interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 359 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart14_default>;
                                interrupts = <GIC_SPI 359 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                interrupts = <GIC_SPI 360 IRQ_TYPE_LEVEL_HIGH>;
                                #address-cells = <1>;
                                #size-cells = <0>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
 
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_uart15_default>;
                                interrupts = <GIC_SPI 360 IRQ_TYPE_LEVEL_HIGH>;
+                               power-domains = <&rpmhpd SDM845_CX>;
+                               operating-points-v2 = <&qup_opp_table>;
                                status = "disabled";
                        };
                };
                ufs_mem_hc: ufshc@1d84000 {
                        compatible = "qcom,sdm845-ufshc", "qcom,ufshc",
                                     "jedec,ufs-2.0";
-                       reg = <0 0x01d84000 0 0x2500>;
+                       reg = <0 0x01d84000 0 0x2500>,
+                             <0 0x01d90000 0 0x8000>;
+                       reg-names = "std", "ice";
                        interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>;
                        phys = <&ufs_mem_phy_lanes>;
                        phy-names = "ufsphy";
                                "ref_clk",
                                "tx_lane0_sync_clk",
                                "rx_lane0_sync_clk",
-                               "rx_lane1_sync_clk";
+                               "rx_lane1_sync_clk",
+                               "ice_core_clk";
                        clocks =
                                <&gcc GCC_UFS_PHY_AXI_CLK>,
                                <&gcc GCC_AGGRE_UFS_PHY_AXI_CLK>,
                                <&rpmhcc RPMH_CXO_CLK>,
                                <&gcc GCC_UFS_PHY_TX_SYMBOL_0_CLK>,
                                <&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>,
-                               <&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>;
+                               <&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>,
+                               <&gcc GCC_UFS_PHY_ICE_CORE_CLK>;
                        freq-table-hz =
                                <50000000 200000000>,
                                <0 0>,
                                <0 0>,
                                <0 0>,
                                <0 0>,
-                               <0 0>;
+                               <0 0>,
+                               <0 300000000>;
 
                        status = "disabled";
                };
                                 <&gcc GCC_SDCC2_APPS_CLK>;
                        clock-names = "iface", "core";
                        iommus = <&apps_smmu 0xa0 0xf>;
+                       power-domains = <&rpmhpd SDM845_CX>;
+                       operating-points-v2 = <&sdhc2_opp_table>;
 
                        status = "disabled";
+
+                       sdhc2_opp_table: sdhc2-opp-table {
+                               compatible = "operating-points-v2";
+
+                               opp-9600000 {
+                                       opp-hz = /bits/ 64 <9600000>;
+                                       required-opps = <&rpmhpd_opp_min_svs>;
+                               };
+
+                               opp-19200000 {
+                                       opp-hz = /bits/ 64 <19200000>;
+                                       required-opps = <&rpmhpd_opp_low_svs>;
+                               };
+
+                               opp-100000000 {
+                                       opp-hz = /bits/ 64 <100000000>;
+                                       required-opps = <&rpmhpd_opp_svs>;
+                               };
+
+                               opp-201500000 {
+                                       opp-hz = /bits/ 64 <201500000>;
+                                       required-opps = <&rpmhpd_opp_svs_l1>;
+                               };
+                       };
+               };
+
+               qspi_opp_table: qspi-opp-table {
+                       compatible = "operating-points-v2";
+
+                       opp-19200000 {
+                               opp-hz = /bits/ 64 <19200000>;
+                               required-opps = <&rpmhpd_opp_min_svs>;
+                       };
+
+                       opp-100000000 {
+                               opp-hz = /bits/ 64 <100000000>;
+                               required-opps = <&rpmhpd_opp_low_svs>;
+                       };
+
+                       opp-150000000 {
+                               opp-hz = /bits/ 64 <150000000>;
+                               required-opps = <&rpmhpd_opp_svs>;
+                       };
+
+                       opp-300000000 {
+                               opp-hz = /bits/ 64 <300000000>;
+                               required-opps = <&rpmhpd_opp_nom>;
+                       };
                };
 
                qspi: spi@88df000 {
                        clocks = <&gcc GCC_QSPI_CNOC_PERIPH_AHB_CLK>,
                                 <&gcc GCC_QSPI_CORE_CLK>;
                        clock-names = "iface", "core";
+                       power-domains = <&rpmhpd SDM845_CX>;
+                       operating-points-v2 = <&qspi_opp_table>;
                        status = "disabled";
                };
 
                        #power-domain-cells = <1>;
                };
 
+               dsi_opp_table: dsi-opp-table {
+                       compatible = "operating-points-v2";
+
+                       opp-19200000 {
+                               opp-hz = /bits/ 64 <19200000>;
+                               required-opps = <&rpmhpd_opp_min_svs>;
+                       };
+
+                       opp-180000000 {
+                               opp-hz = /bits/ 64 <180000000>;
+                               required-opps = <&rpmhpd_opp_low_svs>;
+                       };
+
+                       opp-275000000 {
+                               opp-hz = /bits/ 64 <275000000>;
+                               required-opps = <&rpmhpd_opp_svs>;
+                       };
+
+                       opp-328580000 {
+                               opp-hz = /bits/ 64 <328580000>;
+                               required-opps = <&rpmhpd_opp_svs_l1>;
+                       };
+
+                       opp-358000000 {
+                               opp-hz = /bits/ 64 <358000000>;
+                               required-opps = <&rpmhpd_opp_nom>;
+                       };
+               };
+
                mdss: mdss@ae00000 {
                        compatible = "qcom,sdm845-mdss";
                        reg = <0 0x0ae00000 0 0x1000>;
                                                  <&dispcc DISP_CC_MDSS_VSYNC_CLK>;
                                assigned-clock-rates = <300000000>,
                                                       <19200000>;
+                               operating-points-v2 = <&mdp_opp_table>;
+                               power-domains = <&rpmhpd SDM845_CX>;
 
                                interrupt-parent = <&mdss>;
                                interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;
                                                };
                                        };
                                };
+
+                               mdp_opp_table: mdp-opp-table {
+                                       compatible = "operating-points-v2";
+
+                                       opp-19200000 {
+                                               opp-hz = /bits/ 64 <19200000>;
+                                               required-opps = <&rpmhpd_opp_min_svs>;
+                                       };
+
+                                       opp-171428571 {
+                                               opp-hz = /bits/ 64 <171428571>;
+                                               required-opps = <&rpmhpd_opp_low_svs>;
+                                       };
+
+                                       opp-344000000 {
+                                               opp-hz = /bits/ 64 <344000000>;
+                                               required-opps = <&rpmhpd_opp_svs_l1>;
+                                       };
+
+                                       opp-430000000 {
+                                               opp-hz = /bits/ 64 <430000000>;
+                                               required-opps = <&rpmhpd_opp_nom>;
+                                       };
+                               };
                        };
 
                        dsi0: dsi@ae94000 {
                                              "core",
                                              "iface",
                                              "bus";
+                               operating-points-v2 = <&dsi_opp_table>;
+                               power-domains = <&rpmhpd SDM845_CX>;
 
                                phys = <&dsi0_phy>;
                                phy-names = "dsi";
                                              "core",
                                              "iface",
                                              "bus";
+                               operating-points-v2 = <&dsi_opp_table>;
+                               power-domains = <&rpmhpd SDM845_CX>;
 
                                phys = <&dsi1_phy>;
                                phy-names = "dsi";
                        cell-index = <0>;
                };
 
+               imem@146bf000 {
+                       compatible = "simple-mfd";
+                       reg = <0 0x146bf000 0 0x1000>;
+
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       ranges = <0 0 0x146bf000 0x1000>;
+
+                       pil-reloc@94c {
+                               compatible = "qcom,pil-reloc-info";
+                               reg = <0x94c 0xc8>;
+                       };
+               };
+
                apps_smmu: iommu@15000000 {
                        compatible = "qcom,sdm845-smmu-500", "arm,mmu-500";
                        reg = <0 0x15000000 0 0x80000>;
index 8ab1661..6c6325c 100644 (file)
        vdda-pll-supply = <&vreg_l3c_1p2>;
        vdda-pll-max-microamp = <19000>;
 };
+
+&usb_1_hsphy {
+       status = "okay";
+       vdda-pll-supply = <&vdd_usb_hs_core>;
+       vdda33-supply = <&vdda_usb_hs_3p1>;
+       vdda18-supply = <&vdda_usb_hs_1p8>;
+};
+
+&usb_1_qmpphy {
+       status = "okay";
+       vdda-phy-supply = <&vreg_l3c_1p2>;
+       vdda-pll-supply = <&vdda_usb_ss_dp_core_1>;
+};
+
+&usb_1 {
+       status = "okay";
+};
+
+&usb_1_dwc3 {
+       dr_mode = "peripheral";
+};
index 141c21d..7a0c5b4 100644 (file)
@@ -10,6 +10,7 @@
 #include <dt-bindings/soc/qcom,rpmh-rsc.h>
 #include <dt-bindings/clock/qcom,rpmh.h>
 #include <dt-bindings/clock/qcom,gcc-sm8150.h>
+#include <dt-bindings/thermal/thermal.h>
 
 / {
        interrupt-parent = <&intc>;
@@ -46,6 +47,7 @@
                        enable-method = "psci";
                        next-level-cache = <&L2_0>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
+                       #cooling-cells = <2>;
                        L2_0: l2-cache {
                                compatible = "cache";
                                next-level-cache = <&L3_0>;
@@ -62,6 +64,7 @@
                        enable-method = "psci";
                        next-level-cache = <&L2_100>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
+                       #cooling-cells = <2>;
                        L2_100: l2-cache {
                                compatible = "cache";
                                next-level-cache = <&L3_0>;
@@ -76,6 +79,7 @@
                        enable-method = "psci";
                        next-level-cache = <&L2_200>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
+                       #cooling-cells = <2>;
                        L2_200: l2-cache {
                                compatible = "cache";
                                next-level-cache = <&L3_0>;
@@ -89,6 +93,7 @@
                        enable-method = "psci";
                        next-level-cache = <&L2_300>;
                        qcom,freq-domain = <&cpufreq_hw 0>;
+                       #cooling-cells = <2>;
                        L2_300: l2-cache {
                                compatible = "cache";
                                next-level-cache = <&L3_0>;
                        enable-method = "psci";
                        next-level-cache = <&L2_400>;
                        qcom,freq-domain = <&cpufreq_hw 1>;
+                       #cooling-cells = <2>;
                        L2_400: l2-cache {
                                compatible = "cache";
                                next-level-cache = <&L3_0>;
                        enable-method = "psci";
                        next-level-cache = <&L2_500>;
                        qcom,freq-domain = <&cpufreq_hw 1>;
+                       #cooling-cells = <2>;
                        L2_500: l2-cache {
                                compatible = "cache";
                                next-level-cache = <&L3_0>;
                        enable-method = "psci";
                        next-level-cache = <&L2_600>;
                        qcom,freq-domain = <&cpufreq_hw 1>;
+                       #cooling-cells = <2>;
                        L2_600: l2-cache {
                                compatible = "cache";
                                next-level-cache = <&L3_0>;
                        enable-method = "psci";
                        next-level-cache = <&L2_700>;
                        qcom,freq-domain = <&cpufreq_hw 2>;
+                       #cooling-cells = <2>;
                        L2_700: l2-cache {
                                compatible = "cache";
                                next-level-cache = <&L3_0>;
                        };
                };
 
+               usb_1_hsphy: phy@88e2000 {
+                       compatible = "qcom,sm8150-usb-hs-phy",
+                                                       "qcom,usb-snps-hs-7nm-phy";
+                       reg = <0 0x088e2000 0 0x400>;
+                       status = "disabled";
+                       #phy-cells = <0>;
+
+                       clocks = <&rpmhcc RPMH_CXO_CLK>;
+                       clock-names = "ref";
+
+                       resets = <&gcc GCC_QUSB2PHY_PRIM_BCR>;
+               };
+
+               usb_1_qmpphy: phy@88e9000 {
+                       compatible = "qcom,sm8150-qmp-usb3-phy";
+                       reg = <0 0x088e9000 0 0x18c>,
+                             <0 0x088e8000 0 0x10>;
+                       reg-names = "reg-base", "dp_com";
+                       status = "disabled";
+                       #clock-cells = <1>;
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+                       ranges;
+
+                       clocks = <&gcc GCC_USB3_PRIM_PHY_AUX_CLK>,
+                                <&rpmhcc RPMH_CXO_CLK>,
+                                <&gcc GCC_USB3_PRIM_CLKREF_CLK>,
+                                <&gcc GCC_USB3_PRIM_PHY_COM_AUX_CLK>;
+                       clock-names = "aux", "ref_clk_src", "ref", "com_aux";
+
+                       resets = <&gcc GCC_USB3_DP_PHY_PRIM_BCR>,
+                                <&gcc GCC_USB3_PHY_PRIM_BCR>;
+                       reset-names = "phy", "common";
+
+                       usb_1_ssphy: lanes@88e9200 {
+                               reg = <0 0x088e9200 0 0x200>,
+                                     <0 0x088e9400 0 0x200>,
+                                     <0 0x088e9c00 0 0x218>,
+                                     <0 0x088e9600 0 0x200>,
+                                     <0 0x088e9800 0 0x200>,
+                                     <0 0x088e9a00 0 0x100>;
+                               #phy-cells = <0>;
+                               clocks = <&gcc GCC_USB3_PRIM_PHY_PIPE_CLK>;
+                               clock-names = "pipe0";
+                               clock-output-names = "usb3_phy_pipe_clk_src";
+                       };
+               };
+
+               usb_1: usb@a6f8800 {
+                       compatible = "qcom,sm8150-dwc3", "qcom,dwc3";
+                       reg = <0 0x0a6f8800 0 0x400>;
+                       status = "disabled";
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+                       ranges;
+                       dma-ranges;
+
+                       clocks = <&gcc GCC_CFG_NOC_USB3_PRIM_AXI_CLK>,
+                                <&gcc GCC_USB30_PRIM_MASTER_CLK>,
+                                <&gcc GCC_AGGRE_USB3_PRIM_AXI_CLK>,
+                                <&gcc GCC_USB30_PRIM_MOCK_UTMI_CLK>,
+                                <&gcc GCC_USB30_PRIM_SLEEP_CLK>,
+                                <&gcc GCC_USB3_SEC_CLKREF_CLK>;
+                       clock-names = "cfg_noc", "core", "iface", "mock_utmi",
+                                     "sleep", "xo";
+
+                       assigned-clocks = <&gcc GCC_USB30_PRIM_MOCK_UTMI_CLK>,
+                                         <&gcc GCC_USB30_PRIM_MASTER_CLK>;
+                       assigned-clock-rates = <19200000>, <150000000>;
+
+                       interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 486 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 488 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 489 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "hs_phy_irq", "ss_phy_irq",
+                                         "dm_hs_phy_irq", "dp_hs_phy_irq";
+
+                       power-domains = <&gcc USB30_PRIM_GDSC>;
+
+                       resets = <&gcc GCC_USB30_PRIM_BCR>;
+
+                       usb_1_dwc3: dwc3@a600000 {
+                               compatible = "snps,dwc3";
+                               reg = <0 0x0a600000 0 0xcd00>;
+                               interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>;
+                               snps,dis_u2_susphy_quirk;
+                               snps,dis_enblslpm_quirk;
+                               phys = <&usb_1_hsphy>, <&usb_1_ssphy>;
+                               phy-names = "usb2-phy", "usb3-phy";
+                       };
+               };
+
                aoss_qmp: power-controller@c300000 {
                        compatible = "qcom,sm8150-aoss-qmp";
                        reg = <0x0 0x0c300000 0x0 0x100000>;
                        #power-domain-cells = <1>;
                };
 
+               tsens0: thermal-sensor@c263000 {
+                       compatible = "qcom,sm8150-tsens", "qcom,tsens-v2";
+                       reg = <0 0x0c263000 0 0x1ff>, /* TM */
+                             <0 0x0c222000 0 0x1ff>; /* SROT */
+                       #qcom,sensors = <16>;
+                       interrupts = <GIC_SPI 506 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 508 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "uplow", "critical";
+                       #thermal-sensor-cells = <1>;
+               };
+
+               tsens1: thermal-sensor@c265000 {
+                       compatible = "qcom,sm8150-tsens", "qcom,tsens-v2";
+                       reg = <0 0x0c265000 0 0x1ff>, /* TM */
+                             <0 0x0c223000 0 0x1ff>; /* SROT */
+                       #qcom,sensors = <8>;
+                       interrupts = <GIC_SPI 507 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 509 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "uplow", "critical";
+                       #thermal-sensor-cells = <1>;
+               };
+
                spmi_bus: spmi@c440000 {
                        compatible = "qcom,spmi-pmic-arb";
                        reg = <0x0 0x0c440000 0x0 0x0001100>,
                             <GIC_PPI 3 IRQ_TYPE_LEVEL_LOW>,
                             <GIC_PPI 0 IRQ_TYPE_LEVEL_LOW>;
        };
+
+       thermal-zones {
+               cpu0-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 1>;
+
+                       trips {
+                               cpu0_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu0_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu0_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu0_alert0>;
+                                       cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu0_alert1>;
+                                       cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu1-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 2>;
+
+                       trips {
+                               cpu1_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu1_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu1_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu1_alert0>;
+                                       cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu1_alert1>;
+                                       cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu2-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 3>;
+
+                       trips {
+                               cpu2_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu2_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu2_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu2_alert0>;
+                                       cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu2_alert1>;
+                                       cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu3-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 4>;
+
+                       trips {
+                               cpu3_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu3_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu3_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu3_alert0>;
+                                       cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu3_alert1>;
+                                       cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu4-top-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 7>;
+
+                       trips {
+                               cpu4_top_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu4_top_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu4_top_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu4_top_alert0>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu4_top_alert1>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu5-top-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 8>;
+
+                       trips {
+                               cpu5_top_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu5_top_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu5_top_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu5_top_alert0>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu5_top_alert1>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu6-top-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 9>;
+
+                       trips {
+                               cpu6_top_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu6_top_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu6_top_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu6_top_alert0>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu6_top_alert1>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu7-top-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 10>;
+
+                       trips {
+                               cpu7_top_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu7_top_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu7_top_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu7_top_alert0>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu7_top_alert1>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu4-bottom-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 11>;
+
+                       trips {
+                               cpu4_bottom_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu4_bottom_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu4_bottom_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu4_bottom_alert0>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu4_bottom_alert1>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu5-bottom-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 12>;
+
+                       trips {
+                               cpu5_bottom_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu5_bottom_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu5_bottom_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu5_bottom_alert0>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu5_bottom_alert1>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu6-bottom-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 13>;
+
+                       trips {
+                               cpu6_bottom_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu6_bottom_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu6_bottom_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu6_bottom_alert0>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu6_bottom_alert1>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               cpu7-bottom-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 14>;
+
+                       trips {
+                               cpu7_bottom_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu7_bottom_alert1: trip-point1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu7_bottom_crit: cpu_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&cpu7_bottom_alert0>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                               map1 {
+                                       trip = <&cpu7_bottom_alert1>;
+                                       cooling-device = <&CPU4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&CPU7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                               };
+                       };
+               };
+
+               aoss0-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 0>;
+
+                       trips {
+                               aoss0_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               cluster0-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 5>;
+
+                       trips {
+                               cluster0_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                               cluster0_crit: cluster0_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               cluster1-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 6>;
+
+                       trips {
+                               cluster1_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                               cluster1_crit: cluster1_crit {
+                                       temperature = <110000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               gpu-thermal-top {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 15>;
+
+                       trips {
+                               gpu1_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               aoss1-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 0>;
+
+                       trips {
+                               aoss1_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               wlan-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 1>;
+
+                       trips {
+                               wlan_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               video-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 2>;
+
+                       trips {
+                               video_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               mem-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 3>;
+
+                       trips {
+                               mem_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               q6-hvx-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 4>;
+
+                       trips {
+                               q6_hvx_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               camera-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 5>;
+
+                       trips {
+                               camera_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               compute-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 6>;
+
+                       trips {
+                               compute_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               modem-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 7>;
+
+                       trips {
+                               modem_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               npu-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 8>;
+
+                       trips {
+                               npu_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               modem-vec-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 9>;
+
+                       trips {
+                               modem_vec_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               modem-scl-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 10>;
+
+                       trips {
+                               modem_scl_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+
+               gpu-thermal-bottom {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens1 11>;
+
+                       trips {
+                               gpu2_alert0: trip-point0 {
+                                       temperature = <90000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+                       };
+               };
+       };
 };
index cff7a85..6894f84 100644 (file)
@@ -7,6 +7,10 @@
 
 #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
 #include "sm8250.dtsi"
+#include "pm8150.dtsi"
+#include "pm8150b.dtsi"
+#include "pm8150l.dtsi"
+#include "pm8009.dtsi"
 
 / {
        model = "Qualcomm Technologies, Inc. SM8250 MTP";
        };
 };
 
+&adsp {
+       status = "okay";
+       firmware-name = "qcom/sm8250/adsp.mbn";
+};
+
 &apps_rsc {
        pm8150-rpmh-regulators {
                compatible = "qcom,pm8150-rpmh-regulators";
                        regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
                };
 
-               vreg_l11a_0p75: ldo11 {
-                       regulator-name = "vreg_l11a_0p75";
-                       regulator-min-microvolt = <800000>;
-                       regulator-max-microvolt = <800000>;
-                       regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
-               };
-
                vreg_l12a_1p8: ldo12 {
                        regulator-name = "vreg_l12a_1p8";
                        regulator-min-microvolt = <1800000>;
        };
 };
 
+&cdsp {
+       status = "okay";
+       firmware-name = "qcom/sm8250/cdsp.mbn";
+};
+
 &qupv3_id_1 {
        status = "okay";
 };
 
+&slpi {
+       status = "okay";
+       firmware-name = "qcom/sm8250/slpi.mbn";
+};
+
+&tlmm {
+       gpio-reserved-ranges = <28 4>, <40 4>;
+};
+
 &uart2 {
        status = "okay";
 };
index 7050adb..551a3ce 100644 (file)
@@ -6,6 +6,8 @@
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/clock/qcom,gcc-sm8250.h>
 #include <dt-bindings/clock/qcom,rpmh.h>
+#include <dt-bindings/mailbox/qcom-ipcc.h>
+#include <dt-bindings/power/qcom-aoss-qmp.h>
 #include <dt-bindings/power/qcom-rpmpd.h>
 #include <dt-bindings/soc/qcom,rpmh-rsc.h>
 
        #address-cells = <2>;
        #size-cells = <2>;
 
+       aliases {
+               i2c0 = &i2c0;
+               i2c1 = &i2c1;
+               i2c2 = &i2c2;
+               i2c3 = &i2c3;
+               i2c4 = &i2c4;
+               i2c5 = &i2c5;
+               i2c6 = &i2c6;
+               i2c7 = &i2c7;
+               i2c8 = &i2c8;
+               i2c9 = &i2c9;
+               i2c10 = &i2c10;
+               i2c11 = &i2c11;
+               i2c12 = &i2c12;
+               i2c13 = &i2c13;
+               i2c14 = &i2c14;
+               i2c15 = &i2c15;
+               i2c16 = &i2c16;
+               i2c17 = &i2c17;
+               i2c18 = &i2c18;
+               i2c19 = &i2c19;
+               spi0 = &spi0;
+               spi1 = &spi1;
+               spi2 = &spi2;
+               spi3 = &spi3;
+               spi4 = &spi4;
+               spi5 = &spi5;
+               spi6 = &spi6;
+               spi7 = &spi7;
+               spi8 = &spi8;
+               spi9 = &spi9;
+               spi10 = &spi10;
+               spi11 = &spi11;
+               spi12 = &spi12;
+               spi13 = &spi13;
+               spi14 = &spi14;
+               spi15 = &spi15;
+               spi16 = &spi16;
+               spi17 = &spi17;
+               spi18 = &spi18;
+               spi19 = &spi19;
+       };
+
        chosen { };
 
        clocks {
                };
        };
 
-       tcsr_mutex: hwlock {
-               compatible = "qcom,tcsr-mutex";
-               syscon = <&tcsr_mutex_regs 0 0x1000>;
-               #hwlock-cells = <1>;
-       };
-
        memory@80000000 {
                device_type = "memory";
                /* We expect the bootloader to fill in the size */
                hwlocks = <&tcsr_mutex 3>;
        };
 
+       smp2p-adsp {
+               compatible = "qcom,smp2p";
+               qcom,smem = <443>, <429>;
+               interrupts-extended = <&ipcc IPCC_CLIENT_LPASS
+                                            IPCC_MPROC_SIGNAL_SMP2P
+                                            IRQ_TYPE_EDGE_RISING>;
+               mboxes = <&ipcc IPCC_CLIENT_LPASS
+                               IPCC_MPROC_SIGNAL_SMP2P>;
+
+               qcom,local-pid = <0>;
+               qcom,remote-pid = <2>;
+
+               smp2p_adsp_out: master-kernel {
+                       qcom,entry-name = "master-kernel";
+                       #qcom,smem-state-cells = <1>;
+               };
+
+               smp2p_adsp_in: slave-kernel {
+                       qcom,entry-name = "slave-kernel";
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+
+       smp2p-cdsp {
+               compatible = "qcom,smp2p";
+               qcom,smem = <94>, <432>;
+               interrupts-extended = <&ipcc IPCC_CLIENT_CDSP
+                                            IPCC_MPROC_SIGNAL_SMP2P
+                                            IRQ_TYPE_EDGE_RISING>;
+               mboxes = <&ipcc IPCC_CLIENT_CDSP
+                               IPCC_MPROC_SIGNAL_SMP2P>;
+
+               qcom,local-pid = <0>;
+               qcom,remote-pid = <5>;
+
+               smp2p_cdsp_out: master-kernel {
+                       qcom,entry-name = "master-kernel";
+                       #qcom,smem-state-cells = <1>;
+               };
+
+               smp2p_cdsp_in: slave-kernel {
+                       qcom,entry-name = "slave-kernel";
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+
+       smp2p-slpi {
+               compatible = "qcom,smp2p";
+               qcom,smem = <481>, <430>;
+               interrupts-extended = <&ipcc IPCC_CLIENT_SLPI
+                                            IPCC_MPROC_SIGNAL_SMP2P
+                                            IRQ_TYPE_EDGE_RISING>;
+               mboxes = <&ipcc IPCC_CLIENT_SLPI
+                               IPCC_MPROC_SIGNAL_SMP2P>;
+
+               qcom,local-pid = <0>;
+               qcom,remote-pid = <3>;
+
+               smp2p_slpi_out: master-kernel {
+                       qcom,entry-name = "master-kernel";
+                       #qcom,smem-state-cells = <1>;
+               };
+
+               smp2p_slpi_in: slave-kernel {
+                       qcom,entry-name = "slave-kernel";
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+
        soc: soc@0 {
                #address-cells = <2>;
                #size-cells = <2>;
                        clocks = <&rpmhcc RPMH_CXO_CLK>, <&sleep_clk>;
                };
 
+               ipcc: mailbox@408000 {
+                       compatible = "qcom,sm8250-ipcc", "qcom,ipcc";
+                       reg = <0 0x00408000 0 0x1000>;
+                       interrupts = <GIC_SPI 229 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-controller;
+                       #interrupt-cells = <3>;
+                       #mbox-cells = <2>;
+               };
+
+               qupv3_id_2: geniqup@8c0000 {
+                       compatible = "qcom,geni-se-qup";
+                       reg = <0x0 0x008c0000 0x0 0x6000>;
+                       clock-names = "m-ahb", "s-ahb";
+                       clocks = <&gcc GCC_QUPV3_WRAP_2_M_AHB_CLK>,
+                                <&gcc GCC_QUPV3_WRAP_2_S_AHB_CLK>;
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+                       ranges;
+                       status = "disabled";
+
+                       i2c14: i2c@880000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00880000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S0_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c14_default>;
+                               interrupts = <GIC_SPI 373 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi14: spi@880000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00880000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S0_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi14_default>;
+                               interrupts = <GIC_SPI 373 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c15: i2c@884000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00884000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S1_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c15_default>;
+                               interrupts = <GIC_SPI 583 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi15: spi@884000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00884000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S1_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi15_default>;
+                               interrupts = <GIC_SPI 583 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c16: i2c@888000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00888000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S2_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c16_default>;
+                               interrupts = <GIC_SPI 584 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi16: spi@888000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00888000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S2_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi16_default>;
+                               interrupts = <GIC_SPI 584 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c17: i2c@88c000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x0088c000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S3_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c17_default>;
+                               interrupts = <GIC_SPI 585 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi17: spi@88c000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x0088c000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S3_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi17_default>;
+                               interrupts = <GIC_SPI 585 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c18: i2c@890000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00890000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S4_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c18_default>;
+                               interrupts = <GIC_SPI 586 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi18: spi@890000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00890000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S4_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi18_default>;
+                               interrupts = <GIC_SPI 586 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c19: i2c@894000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00894000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S5_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c19_default>;
+                               interrupts = <GIC_SPI 587 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi19: spi@894000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00894000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP2_S5_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi19_default>;
+                               interrupts = <GIC_SPI 587 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+               };
+
+               qupv3_id_0: geniqup@9c0000 {
+                       compatible = "qcom,geni-se-qup";
+                       reg = <0x0 0x009c0000 0x0 0x6000>;
+                       clock-names = "m-ahb", "s-ahb";
+                       clocks = <&gcc GCC_QUPV3_WRAP_0_M_AHB_CLK>,
+                                <&gcc GCC_QUPV3_WRAP_0_S_AHB_CLK>;
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+                       ranges;
+                       status = "disabled";
+
+                       i2c0: i2c@980000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00980000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S0_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c0_default>;
+                               interrupts = <GIC_SPI 601 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi0: spi@980000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00980000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S0_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi0_default>;
+                               interrupts = <GIC_SPI 601 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c1: i2c@984000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00984000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S1_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c1_default>;
+                               interrupts = <GIC_SPI 602 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi1: spi@984000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00984000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S1_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi1_default>;
+                               interrupts = <GIC_SPI 602 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c2: i2c@988000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00988000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S2_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c2_default>;
+                               interrupts = <GIC_SPI 603 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi2: spi@988000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00988000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S2_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi2_default>;
+                               interrupts = <GIC_SPI 603 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c3: i2c@98c000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x0098c000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S3_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c3_default>;
+                               interrupts = <GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi3: spi@98c000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x0098c000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S3_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi3_default>;
+                               interrupts = <GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c4: i2c@990000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00990000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S4_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c4_default>;
+                               interrupts = <GIC_SPI 605 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi4: spi@990000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00990000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S4_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi4_default>;
+                               interrupts = <GIC_SPI 605 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c5: i2c@994000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00994000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S5_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c5_default>;
+                               interrupts = <GIC_SPI 606 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi5: spi@994000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00994000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S5_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi5_default>;
+                               interrupts = <GIC_SPI 606 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c6: i2c@998000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00998000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S6_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c6_default>;
+                               interrupts = <GIC_SPI 607 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi6: spi@998000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00998000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S6_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi6_default>;
+                               interrupts = <GIC_SPI 607 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c7: i2c@99c000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x0099c000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S7_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c7_default>;
+                               interrupts = <GIC_SPI 608 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi7: spi@99c000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x0099c000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S7_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi7_default>;
+                               interrupts = <GIC_SPI 608 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+               };
+
                qupv3_id_1: geniqup@ac0000 {
                        compatible = "qcom,geni-se-qup";
                        reg = <0x0 0x00ac0000 0x0 0x6000>;
                        clock-names = "m-ahb", "s-ahb";
-                       clocks = <&gcc 133>, <&gcc 134>;
+                       clocks = <&gcc GCC_QUPV3_WRAP_1_M_AHB_CLK>,
+                                <&gcc GCC_QUPV3_WRAP_1_S_AHB_CLK>;
                        #address-cells = <2>;
                        #size-cells = <2>;
                        ranges;
                        status = "disabled";
 
+                       i2c8: i2c@a80000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00a80000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S0_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c8_default>;
+                               interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi8: spi@a80000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00a80000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S0_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi8_default>;
+                               interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c9: i2c@a84000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00a84000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S1_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c9_default>;
+                               interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi9: spi@a84000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00a84000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S1_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi9_default>;
+                               interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c10: i2c@a88000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00a88000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S2_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c10_default>;
+                               interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi10: spi@a88000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00a88000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S2_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi10_default>;
+                               interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c11: i2c@a8c000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00a8c000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S3_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c11_default>;
+                               interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi11: spi@a8c000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00a8c000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S3_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi11_default>;
+                               interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c12: i2c@a90000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00a90000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S4_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c12_default>;
+                               interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi12: spi@a90000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00a90000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S4_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi12_default>;
+                               interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
                        uart2: serial@a90000 {
                                compatible = "qcom,geni-debug-uart";
                                reg = <0x0 0x00a90000 0x0 0x4000>;
                                clock-names = "se";
-                               clocks = <&gcc 113>;
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S4_CLK>;
                                interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
                                status = "disabled";
                        };
+
+                       i2c13: i2c@a94000 {
+                               compatible = "qcom,geni-i2c";
+                               reg = <0 0x00a94000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S5_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_i2c13_default>;
+                               interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       spi13: spi@a94000 {
+                               compatible = "qcom,geni-spi";
+                               reg = <0 0x00a94000 0 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S5_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_spi13_default>;
+                               interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
                };
 
-               ufs_mem_hc: ufs@1d84000 {
+               ufs_mem_hc: ufshc@1d84000 {
                        compatible = "qcom,sm8250-ufshc", "qcom,ufshc",
                                     "jedec,ufs-2.0";
                        reg = <0 0x01d84000 0 0x3000>;
                        };
                };
 
-               intc: interrupt-controller@17a00000 {
-                       compatible = "arm,gic-v3";
-                       #interrupt-cells = <3>;
-                       interrupt-controller;
-                       reg = <0x0 0x17a00000 0x0 0x10000>,     /* GICD */
-                             <0x0 0x17a60000 0x0 0x100000>;    /* GICR * 8 */
-                       interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+               tcsr_mutex: hwlock@1f40000 {
+                       compatible = "qcom,tcsr-mutex";
+                       reg = <0x0 0x01f40000 0x0 0x40000>;
+                       #hwlock-cells = <1>;
+               };
+
+               slpi: remoteproc@5c00000 {
+                       compatible = "qcom,sm8250-slpi-pas";
+                       reg = <0 0x05c00000 0 0x4000>;
+
+                       interrupts-extended = <&pdc 9 IRQ_TYPE_LEVEL_HIGH>,
+                                             <&smp2p_slpi_in 0 IRQ_TYPE_EDGE_RISING>,
+                                             <&smp2p_slpi_in 1 IRQ_TYPE_EDGE_RISING>,
+                                             <&smp2p_slpi_in 2 IRQ_TYPE_EDGE_RISING>,
+                                             <&smp2p_slpi_in 3 IRQ_TYPE_EDGE_RISING>;
+                       interrupt-names = "wdog", "fatal", "ready",
+                                         "handover", "stop-ack";
+
+                       clocks = <&rpmhcc RPMH_CXO_CLK>;
+                       clock-names = "xo";
+
+                       power-domains = <&aoss_qmp AOSS_QMP_LS_SLPI>,
+                                       <&rpmhpd SM8250_LCX>,
+                                       <&rpmhpd SM8250_LMX>;
+                       power-domain-names = "load_state", "lcx", "lmx";
+
+                       memory-region = <&slpi_mem>;
+
+                       qcom,smem-states = <&smp2p_slpi_out 0>;
+                       qcom,smem-state-names = "stop";
+
+                       status = "disabled";
+
+                       glink-edge {
+                               interrupts-extended = <&ipcc IPCC_CLIENT_SLPI
+                                                            IPCC_MPROC_SIGNAL_GLINK_QMP
+                                                            IRQ_TYPE_EDGE_RISING>;
+                               mboxes = <&ipcc IPCC_CLIENT_SLPI
+                                               IPCC_MPROC_SIGNAL_GLINK_QMP>;
+
+                               label = "lpass";
+                               qcom,remote-pid = <3>;
+                       };
+               };
+
+               cdsp: remoteproc@8300000 {
+                       compatible = "qcom,sm8250-cdsp-pas";
+                       reg = <0 0x08300000 0 0x10000>;
+
+                       interrupts-extended = <&intc GIC_SPI 578 IRQ_TYPE_LEVEL_HIGH>,
+                                             <&smp2p_cdsp_in 0 IRQ_TYPE_EDGE_RISING>,
+                                             <&smp2p_cdsp_in 1 IRQ_TYPE_EDGE_RISING>,
+                                             <&smp2p_cdsp_in 2 IRQ_TYPE_EDGE_RISING>,
+                                             <&smp2p_cdsp_in 3 IRQ_TYPE_EDGE_RISING>;
+                       interrupt-names = "wdog", "fatal", "ready",
+                                         "handover", "stop-ack";
+
+                       clocks = <&rpmhcc RPMH_CXO_CLK>;
+                       clock-names = "xo";
+
+                       power-domains = <&aoss_qmp AOSS_QMP_LS_CDSP>,
+                                       <&rpmhpd SM8250_CX>;
+                       power-domain-names = "load_state", "cx";
+
+                       memory-region = <&cdsp_mem>;
+
+                       qcom,smem-states = <&smp2p_cdsp_out 0>;
+                       qcom,smem-state-names = "stop";
+
+                       status = "disabled";
+
+                       glink-edge {
+                               interrupts-extended = <&ipcc IPCC_CLIENT_CDSP
+                                                            IPCC_MPROC_SIGNAL_GLINK_QMP
+                                                            IRQ_TYPE_EDGE_RISING>;
+                               mboxes = <&ipcc IPCC_CLIENT_CDSP
+                                               IPCC_MPROC_SIGNAL_GLINK_QMP>;
+
+                               label = "lpass";
+                               qcom,remote-pid = <5>;
+                       };
                };
 
                pdc: interrupt-controller@b220000 {
                        interrupt-controller;
                };
 
-               spmi: qcom,spmi@c440000 {
+               aoss_qmp: qmp@c300000 {
+                       compatible = "qcom,sm8250-aoss-qmp";
+                       reg = <0 0x0c300000 0 0x100000>;
+                       interrupts-extended = <&ipcc IPCC_CLIENT_AOP
+                                                    IPCC_MPROC_SIGNAL_GLINK_QMP
+                                                    IRQ_TYPE_EDGE_RISING>;
+                       mboxes = <&ipcc IPCC_CLIENT_AOP
+                                       IPCC_MPROC_SIGNAL_GLINK_QMP>;
+
+                       #clock-cells = <0>;
+                       #power-domain-cells = <1>;
+               };
+
+               spmi_bus: spmi@c440000 {
                        compatible = "qcom,spmi-pmic-arb";
                        reg = <0x0 0x0c440000 0x0 0x0001100>,
                              <0x0 0x0c600000 0x0 0x2000000>,
                        #interrupt-cells = <4>;
                };
 
-               apps_rsc: rsc@18200000 {
-                       label = "apps_rsc";
-                       compatible = "qcom,rpmh-rsc";
-                       reg = <0x0 0x18200000 0x0 0x10000>,
-                               <0x0 0x18210000 0x0 0x10000>,
-                               <0x0 0x18220000 0x0 0x10000>;
-                       reg-names = "drv-0", "drv-1", "drv-2";
-                       interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
-                                    <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
-                       qcom,tcs-offset = <0xd00>;
-                       qcom,drv-id = <2>;
-                       qcom,tcs-config = <ACTIVE_TCS  2>, <SLEEP_TCS   3>,
-                                         <WAKE_TCS    3>, <CONTROL_TCS 1>;
+               tlmm: pinctrl@f100000 {
+                       compatible = "qcom,sm8250-pinctrl";
+                       reg = <0 0x0f100000 0 0x300000>,
+                             <0 0x0f500000 0 0x300000>,
+                             <0 0x0f900000 0 0x300000>;
+                       reg-names = "west", "south", "north";
+                       interrupts = <GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       gpio-ranges = <&tlmm 0 0 180>;
+                       wakeup-parent = <&pdc>;
 
-                       rpmhcc: clock-controller {
-                               compatible = "qcom,sm8250-rpmh-clk";
-                               #clock-cells = <1>;
-                               clock-names = "xo";
-                               clocks = <&xo_board>;
+                       qup_i2c0_default: qup-i2c0-default {
+                               mux {
+                                       pins = "gpio28", "gpio29";
+                                       function = "qup0";
+                               };
+
+                               config {
+                                       pins = "gpio28", "gpio29";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
                        };
 
-                       rpmhpd: power-controller {
-                               compatible = "qcom,sm8250-rpmhpd";
-                               #power-domain-cells = <1>;
-                               operating-points-v2 = <&rpmhpd_opp_table>;
+                       qup_i2c1_default: qup-i2c1-default {
+                               pinmux {
+                                       pins = "gpio4", "gpio5";
+                                       function = "qup1";
+                               };
 
-                               rpmhpd_opp_table: opp-table {
-                                       compatible = "operating-points-v2";
+                               config {
+                                       pins = "gpio4", "gpio5";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
 
-                                       rpmhpd_opp_ret: opp1 {
-                                               opp-level = <RPMH_REGULATOR_LEVEL_RETENTION>;
-                                       };
+                       qup_i2c2_default: qup-i2c2-default {
+                               mux {
+                                       pins = "gpio115", "gpio116";
+                                       function = "qup2";
+                               };
 
-                                       rpmhpd_opp_min_svs: opp2 {
-                                               opp-level = <RPMH_REGULATOR_LEVEL_MIN_SVS>;
-                                       };
+                               config {
+                                       pins = "gpio115", "gpio116";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
 
-                                       rpmhpd_opp_low_svs: opp3 {
-                                               opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>;
-                                       };
+                       qup_i2c3_default: qup-i2c3-default {
+                               mux {
+                                       pins = "gpio119", "gpio120";
+                                       function = "qup3";
+                               };
 
-                                       rpmhpd_opp_svs: opp4 {
-                                               opp-level = <RPMH_REGULATOR_LEVEL_SVS>;
-                                       };
+                               config {
+                                       pins = "gpio119", "gpio120";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
 
-                                       rpmhpd_opp_svs_l1: opp5 {
-                                               opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>;
-                                       };
+                       qup_i2c4_default: qup-i2c4-default {
+                               mux {
+                                       pins = "gpio8", "gpio9";
+                                       function = "qup4";
+                               };
 
-                                       rpmhpd_opp_nom: opp6 {
-                                               opp-level = <RPMH_REGULATOR_LEVEL_NOM>;
-                                       };
+                               config {
+                                       pins = "gpio8", "gpio9";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
 
-                                       rpmhpd_opp_nom_l1: opp7 {
-                                               opp-level = <RPMH_REGULATOR_LEVEL_NOM_L1>;
-                                       };
+                       qup_i2c5_default: qup-i2c5-default {
+                               mux {
+                                       pins = "gpio12", "gpio13";
+                                       function = "qup5";
+                               };
 
-                                       rpmhpd_opp_nom_l2: opp8 {
-                                               opp-level = <RPMH_REGULATOR_LEVEL_NOM_L2>;
-                                       };
+                               config {
+                                       pins = "gpio12", "gpio13";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
 
-                                       rpmhpd_opp_turbo: opp9 {
-                                               opp-level = <RPMH_REGULATOR_LEVEL_TURBO>;
-                                       };
+                       qup_i2c6_default: qup-i2c6-default {
+                               mux {
+                                       pins = "gpio16", "gpio17";
+                                       function = "qup6";
+                               };
 
-                                       rpmhpd_opp_turbo_l1: opp10 {
-                                               opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L1>;
-                                       };
+                               config {
+                                       pins = "gpio16", "gpio17";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c7_default: qup-i2c7-default {
+                               mux {
+                                       pins = "gpio20", "gpio21";
+                                       function = "qup7";
+                               };
+
+                               config {
+                                       pins = "gpio20", "gpio21";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c8_default: qup-i2c8-default {
+                               mux {
+                                       pins = "gpio24", "gpio25";
+                                       function = "qup8";
+                               };
+
+                               config {
+                                       pins = "gpio24", "gpio25";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c9_default: qup-i2c9-default {
+                               mux {
+                                       pins = "gpio125", "gpio126";
+                                       function = "qup9";
+                               };
+
+                               config {
+                                       pins = "gpio125", "gpio126";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c10_default: qup-i2c10-default {
+                               mux {
+                                       pins = "gpio129", "gpio130";
+                                       function = "qup10";
+                               };
+
+                               config {
+                                       pins = "gpio129", "gpio130";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c11_default: qup-i2c11-default {
+                               mux {
+                                       pins = "gpio60", "gpio61";
+                                       function = "qup11";
+                               };
+
+                               config {
+                                       pins = "gpio60", "gpio61";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c12_default: qup-i2c12-default {
+                               mux {
+                                       pins = "gpio32", "gpio33";
+                                       function = "qup12";
+                               };
+
+                               config {
+                                       pins = "gpio32", "gpio33";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c13_default: qup-i2c13-default {
+                               mux {
+                                       pins = "gpio36", "gpio37";
+                                       function = "qup13";
+                               };
+
+                               config {
+                                       pins = "gpio36", "gpio37";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c14_default: qup-i2c14-default {
+                               mux {
+                                       pins = "gpio40", "gpio41";
+                                       function = "qup14";
+                               };
+
+                               config {
+                                       pins = "gpio40", "gpio41";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c15_default: qup-i2c15-default {
+                               mux {
+                                       pins = "gpio44", "gpio45";
+                                       function = "qup15";
+                               };
+
+                               config {
+                                       pins = "gpio44", "gpio45";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c16_default: qup-i2c16-default {
+                               mux {
+                                       pins = "gpio48", "gpio49";
+                                       function = "qup16";
+                               };
+
+                               config {
+                                       pins = "gpio48", "gpio49";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c17_default: qup-i2c17-default {
+                               mux {
+                                       pins = "gpio52", "gpio53";
+                                       function = "qup17";
+                               };
+
+                               config {
+                                       pins = "gpio52", "gpio53";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c18_default: qup-i2c18-default {
+                               mux {
+                                       pins = "gpio56", "gpio57";
+                                       function = "qup18";
+                               };
+
+                               config {
+                                       pins = "gpio56", "gpio57";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_i2c19_default: qup-i2c19-default {
+                               mux {
+                                       pins = "gpio0", "gpio1";
+                                       function = "qup19";
+                               };
+
+                               config {
+                                       pins = "gpio0", "gpio1";
+                                       drive-strength = <2>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi0_default: qup-spi0-default {
+                               mux {
+                                       pins = "gpio28", "gpio29",
+                                              "gpio30", "gpio31";
+                                       function = "qup0";
+                               };
+
+                               config {
+                                       pins = "gpio28", "gpio29",
+                                              "gpio30", "gpio31";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi1_default: qup-spi1-default {
+                               mux {
+                                       pins = "gpio4", "gpio5",
+                                              "gpio6", "gpio7";
+                                       function = "qup1";
+                               };
+
+                               config {
+                                       pins = "gpio4", "gpio5",
+                                              "gpio6", "gpio7";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi2_default: qup-spi2-default {
+                               mux {
+                                       pins = "gpio115", "gpio116",
+                                              "gpio117", "gpio118";
+                                       function = "qup2";
+                               };
+
+                               config {
+                                       pins = "gpio115", "gpio116",
+                                              "gpio117", "gpio118";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi3_default: qup-spi3-default {
+                               mux {
+                                       pins = "gpio119", "gpio120",
+                                              "gpio121", "gpio122";
+                                       function = "qup3";
+                               };
+
+                               config {
+                                       pins = "gpio119", "gpio120",
+                                              "gpio121", "gpio122";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi4_default: qup-spi4-default {
+                               mux {
+                                       pins = "gpio8", "gpio9",
+                                              "gpio10", "gpio11";
+                                       function = "qup4";
+                               };
+
+                               config {
+                                       pins = "gpio8", "gpio9",
+                                              "gpio10", "gpio11";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi5_default: qup-spi5-default {
+                               mux {
+                                       pins = "gpio12", "gpio13",
+                                              "gpio14", "gpio15";
+                                       function = "qup5";
+                               };
+
+                               config {
+                                       pins = "gpio12", "gpio13",
+                                              "gpio14", "gpio15";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi6_default: qup-spi6-default {
+                               mux {
+                                       pins = "gpio16", "gpio17",
+                                              "gpio18", "gpio19";
+                                       function = "qup6";
+                               };
+
+                               config {
+                                       pins = "gpio16", "gpio17",
+                                              "gpio18", "gpio19";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi7_default: qup-spi7-default {
+                               mux {
+                                       pins = "gpio20", "gpio21",
+                                              "gpio22", "gpio23";
+                                       function = "qup7";
+                               };
+
+                               config {
+                                       pins = "gpio20", "gpio21",
+                                              "gpio22", "gpio23";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi8_default: qup-spi8-default {
+                               mux {
+                                       pins = "gpio24", "gpio25",
+                                              "gpio26", "gpio27";
+                                       function = "qup8";
+                               };
+
+                               config {
+                                       pins = "gpio24", "gpio25",
+                                              "gpio26", "gpio27";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi9_default: qup-spi9-default {
+                               mux {
+                                       pins = "gpio125", "gpio126",
+                                              "gpio127", "gpio128";
+                                       function = "qup9";
+                               };
+
+                               config {
+                                       pins = "gpio125", "gpio126",
+                                              "gpio127", "gpio128";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi10_default: qup-spi10-default {
+                               mux {
+                                       pins = "gpio129", "gpio130",
+                                              "gpio131", "gpio132";
+                                       function = "qup10";
+                               };
+
+                               config {
+                                       pins = "gpio129", "gpio130",
+                                              "gpio131", "gpio132";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi11_default: qup-spi11-default {
+                               mux {
+                                       pins = "gpio60", "gpio61",
+                                              "gpio62", "gpio63";
+                                       function = "qup11";
+                               };
+
+                               config {
+                                       pins = "gpio60", "gpio61",
+                                              "gpio62", "gpio63";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi12_default: qup-spi12-default {
+                               mux {
+                                       pins = "gpio32", "gpio33",
+                                              "gpio34", "gpio35";
+                                       function = "qup12";
+                               };
+
+                               config {
+                                       pins = "gpio32", "gpio33",
+                                              "gpio34", "gpio35";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi13_default: qup-spi13-default {
+                               mux {
+                                       pins = "gpio36", "gpio37",
+                                              "gpio38", "gpio39";
+                                       function = "qup13";
+                               };
+
+                               config {
+                                       pins = "gpio36", "gpio37",
+                                              "gpio38", "gpio39";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi14_default: qup-spi14-default {
+                               mux {
+                                       pins = "gpio40", "gpio41",
+                                              "gpio42", "gpio43";
+                                       function = "qup14";
+                               };
+
+                               config {
+                                       pins = "gpio40", "gpio41",
+                                              "gpio42", "gpio43";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi15_default: qup-spi15-default {
+                               mux {
+                                       pins = "gpio44", "gpio45",
+                                              "gpio46", "gpio47";
+                                       function = "qup15";
+                               };
+
+                               config {
+                                       pins = "gpio44", "gpio45",
+                                              "gpio46", "gpio47";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi16_default: qup-spi16-default {
+                               mux {
+                                       pins = "gpio48", "gpio49",
+                                              "gpio50", "gpio51";
+                                       function = "qup16";
+                               };
+
+                               config {
+                                       pins = "gpio48", "gpio49",
+                                              "gpio50", "gpio51";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi17_default: qup-spi17-default {
+                               mux {
+                                       pins = "gpio52", "gpio53",
+                                              "gpio54", "gpio55";
+                                       function = "qup17";
+                               };
+
+                               config {
+                                       pins = "gpio52", "gpio53",
+                                              "gpio54", "gpio55";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi18_default: qup-spi18-default {
+                               mux {
+                                       pins = "gpio56", "gpio57",
+                                              "gpio58", "gpio59";
+                                       function = "qup18";
+                               };
+
+                               config {
+                                       pins = "gpio56", "gpio57",
+                                              "gpio58", "gpio59";
+                                       drive-strength = <6>;
+                                       bias-disable;
+                               };
+                       };
+
+                       qup_spi19_default: qup-spi19-default {
+                               mux {
+                                       pins = "gpio0", "gpio1",
+                                              "gpio2", "gpio3";
+                                       function = "qup19";
+                               };
+
+                               config {
+                                       pins = "gpio0", "gpio1",
+                                              "gpio2", "gpio3";
+                                       drive-strength = <6>;
+                                       bias-disable;
                                };
                        };
                };
 
-               tcsr_mutex_regs: syscon@1f40000 {
-                       compatible = "syscon";
-                       reg = <0x0 0x01f40000 0x0 0x40000>;
+               adsp: remoteproc@17300000 {
+                       compatible = "qcom,sm8250-adsp-pas";
+                       reg = <0 0x17300000 0 0x100>;
+
+                       interrupts-extended = <&pdc 6 IRQ_TYPE_LEVEL_HIGH>,
+                                             <&smp2p_adsp_in 0 IRQ_TYPE_EDGE_RISING>,
+                                             <&smp2p_adsp_in 1 IRQ_TYPE_EDGE_RISING>,
+                                             <&smp2p_adsp_in 2 IRQ_TYPE_EDGE_RISING>,
+                                             <&smp2p_adsp_in 3 IRQ_TYPE_EDGE_RISING>;
+                       interrupt-names = "wdog", "fatal", "ready",
+                                         "handover", "stop-ack";
+
+                       clocks = <&rpmhcc RPMH_CXO_CLK>;
+                       clock-names = "xo";
+
+                       power-domains = <&aoss_qmp AOSS_QMP_LS_LPASS>,
+                                       <&rpmhpd SM8250_LCX>,
+                                       <&rpmhpd SM8250_LMX>;
+                       power-domain-names = "load_state", "lcx", "lmx";
+
+                       memory-region = <&adsp_mem>;
+
+                       qcom,smem-states = <&smp2p_adsp_out 0>;
+                       qcom,smem-state-names = "stop";
+
+                       status = "disabled";
+
+                       glink-edge {
+                               interrupts-extended = <&ipcc IPCC_CLIENT_LPASS
+                                                            IPCC_MPROC_SIGNAL_GLINK_QMP
+                                                            IRQ_TYPE_EDGE_RISING>;
+                               mboxes = <&ipcc IPCC_CLIENT_LPASS
+                                               IPCC_MPROC_SIGNAL_GLINK_QMP>;
+
+                               label = "lpass";
+                               qcom,remote-pid = <2>;
+                       };
+               };
+
+               intc: interrupt-controller@17a00000 {
+                       compatible = "arm,gic-v3";
+                       #interrupt-cells = <3>;
+                       interrupt-controller;
+                       reg = <0x0 0x17a00000 0x0 0x10000>,     /* GICD */
+                             <0x0 0x17a60000 0x0 0x100000>;    /* GICR * 8 */
+                       interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               watchdog@17c10000 {
+                       compatible = "qcom,apss-wdt-sm8250", "qcom,kpss-wdt";
+                       reg = <0 0x17c10000 0 0x1000>;
+                       clocks = <&sleep_clk>;
                };
 
                timer@17c20000 {
                        };
                };
 
+               apps_rsc: rsc@18200000 {
+                       label = "apps_rsc";
+                       compatible = "qcom,rpmh-rsc";
+                       reg = <0x0 0x18200000 0x0 0x10000>,
+                               <0x0 0x18210000 0x0 0x10000>,
+                               <0x0 0x18220000 0x0 0x10000>;
+                       reg-names = "drv-0", "drv-1", "drv-2";
+                       interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
+                       qcom,tcs-offset = <0xd00>;
+                       qcom,drv-id = <2>;
+                       qcom,tcs-config = <ACTIVE_TCS  2>, <SLEEP_TCS   3>,
+                                         <WAKE_TCS    3>, <CONTROL_TCS 1>;
+
+                       rpmhcc: clock-controller {
+                               compatible = "qcom,sm8250-rpmh-clk";
+                               #clock-cells = <1>;
+                               clock-names = "xo";
+                               clocks = <&xo_board>;
+                       };
+
+                       rpmhpd: power-controller {
+                               compatible = "qcom,sm8250-rpmhpd";
+                               #power-domain-cells = <1>;
+                               operating-points-v2 = <&rpmhpd_opp_table>;
+
+                               rpmhpd_opp_table: opp-table {
+                                       compatible = "operating-points-v2";
+
+                                       rpmhpd_opp_ret: opp1 {
+                                               opp-level = <RPMH_REGULATOR_LEVEL_RETENTION>;
+                                       };
+
+                                       rpmhpd_opp_min_svs: opp2 {
+                                               opp-level = <RPMH_REGULATOR_LEVEL_MIN_SVS>;
+                                       };
+
+                                       rpmhpd_opp_low_svs: opp3 {
+                                               opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>;
+                                       };
+
+                                       rpmhpd_opp_svs: opp4 {
+                                               opp-level = <RPMH_REGULATOR_LEVEL_SVS>;
+                                       };
+
+                                       rpmhpd_opp_svs_l1: opp5 {
+                                               opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>;
+                                       };
+
+                                       rpmhpd_opp_nom: opp6 {
+                                               opp-level = <RPMH_REGULATOR_LEVEL_NOM>;
+                                       };
+
+                                       rpmhpd_opp_nom_l1: opp7 {
+                                               opp-level = <RPMH_REGULATOR_LEVEL_NOM_L1>;
+                                       };
+
+                                       rpmhpd_opp_nom_l2: opp8 {
+                                               opp-level = <RPMH_REGULATOR_LEVEL_NOM_L2>;
+                                       };
+
+                                       rpmhpd_opp_turbo: opp9 {
+                                               opp-level = <RPMH_REGULATOR_LEVEL_TURBO>;
+                                       };
+
+                                       rpmhpd_opp_turbo_l1: opp10 {
+                                               opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L1>;
+                                       };
+                               };
+                       };
+               };
        };
 
        timer {
index d17351c..d790229 100644 (file)
@@ -1,23 +1,55 @@
 # SPDX-License-Identifier: GPL-2.0
+dtb-$(CONFIG_ARCH_R8A774A1) += r8a774a1-beacon-rzg2m-kit.dtb
 dtb-$(CONFIG_ARCH_R8A774A1) += r8a774a1-hihope-rzg2m.dtb
 dtb-$(CONFIG_ARCH_R8A774A1) += r8a774a1-hihope-rzg2m-ex.dtb
 dtb-$(CONFIG_ARCH_R8A774A1) += r8a774a1-hihope-rzg2m-ex-idk-1110wr.dtb
+dtb-$(CONFIG_ARCH_R8A774A1) += r8a774a1-hihope-rzg2m-rev2.dtb
+dtb-$(CONFIG_ARCH_R8A774A1) += r8a774a1-hihope-rzg2m-rev2-ex.dtb
+dtb-$(CONFIG_ARCH_R8A774A1) += r8a774a1-hihope-rzg2m-rev2-ex-idk-1110wr.dtb
+
 dtb-$(CONFIG_ARCH_R8A774B1) += r8a774b1-hihope-rzg2n.dtb
 dtb-$(CONFIG_ARCH_R8A774B1) += r8a774b1-hihope-rzg2n-ex.dtb
-dtb-$(CONFIG_ARCH_R8A774C0) += r8a774c0-cat874.dtb r8a774c0-ek874.dtb \
-                              r8a774c0-ek874-idk-2121wr.dtb \
-                              r8a774c0-ek874-mipi-2.1.dtb
+dtb-$(CONFIG_ARCH_R8A774B1) += r8a774b1-hihope-rzg2n-ex-idk-1110wr.dtb
+dtb-$(CONFIG_ARCH_R8A774B1) += r8a774b1-hihope-rzg2n-rev2.dtb
+dtb-$(CONFIG_ARCH_R8A774B1) += r8a774b1-hihope-rzg2n-rev2-ex.dtb
+dtb-$(CONFIG_ARCH_R8A774B1) += r8a774b1-hihope-rzg2n-rev2-ex-idk-1110wr.dtb
+
+dtb-$(CONFIG_ARCH_R8A774C0) += r8a774c0-cat874.dtb
+dtb-$(CONFIG_ARCH_R8A774C0) += r8a774c0-ek874.dtb
+dtb-$(CONFIG_ARCH_R8A774C0) += r8a774c0-ek874-idk-2121wr.dtb
+dtb-$(CONFIG_ARCH_R8A774C0) += r8a774c0-ek874-mipi-2.1.dtb
+
+dtb-$(CONFIG_ARCH_R8A774E1) += r8a774e1-hihope-rzg2h.dtb
+dtb-$(CONFIG_ARCH_R8A774E1) += r8a774e1-hihope-rzg2h-ex.dtb
+
 dtb-$(CONFIG_ARCH_R8A77950) += r8a77950-salvator-x.dtb
-dtb-$(CONFIG_ARCH_R8A77950) += r8a77950-ulcb.dtb r8a77950-ulcb-kf.dtb
-dtb-$(CONFIG_ARCH_R8A77951) += r8a77951-salvator-x.dtb r8a77951-salvator-xs.dtb
-dtb-$(CONFIG_ARCH_R8A77951) += r8a77951-ulcb.dtb r8a77951-ulcb-kf.dtb
-dtb-$(CONFIG_ARCH_R8A77960) += r8a77960-salvator-x.dtb r8a77960-salvator-xs.dtb
-dtb-$(CONFIG_ARCH_R8A77960) += r8a77960-ulcb.dtb r8a77960-ulcb-kf.dtb
+dtb-$(CONFIG_ARCH_R8A77950) += r8a77950-ulcb.dtb
+dtb-$(CONFIG_ARCH_R8A77950) += r8a77950-ulcb-kf.dtb
+
+dtb-$(CONFIG_ARCH_R8A77951) += r8a77951-salvator-x.dtb
+dtb-$(CONFIG_ARCH_R8A77951) += r8a77951-salvator-xs.dtb
+dtb-$(CONFIG_ARCH_R8A77951) += r8a77951-ulcb.dtb
+dtb-$(CONFIG_ARCH_R8A77951) += r8a77951-ulcb-kf.dtb
+
+dtb-$(CONFIG_ARCH_R8A77960) += r8a77960-salvator-x.dtb
+dtb-$(CONFIG_ARCH_R8A77960) += r8a77960-salvator-xs.dtb
+dtb-$(CONFIG_ARCH_R8A77960) += r8a77960-ulcb.dtb
+dtb-$(CONFIG_ARCH_R8A77960) += r8a77960-ulcb-kf.dtb
+
 dtb-$(CONFIG_ARCH_R8A77961) += r8a77961-salvator-xs.dtb
 dtb-$(CONFIG_ARCH_R8A77961) += r8a77961-ulcb.dtb
-dtb-$(CONFIG_ARCH_R8A77965) += r8a77965-salvator-x.dtb r8a77965-salvator-xs.dtb
-dtb-$(CONFIG_ARCH_R8A77965) += r8a77965-ulcb.dtb r8a77965-ulcb-kf.dtb
-dtb-$(CONFIG_ARCH_R8A77970) += r8a77970-eagle.dtb r8a77970-v3msk.dtb
-dtb-$(CONFIG_ARCH_R8A77980) += r8a77980-condor.dtb r8a77980-v3hsk.dtb
+
+dtb-$(CONFIG_ARCH_R8A77965) += r8a77965-salvator-x.dtb
+dtb-$(CONFIG_ARCH_R8A77965) += r8a77965-salvator-xs.dtb
+dtb-$(CONFIG_ARCH_R8A77965) += r8a77965-ulcb.dtb
+dtb-$(CONFIG_ARCH_R8A77965) += r8a77965-ulcb-kf.dtb
+
+dtb-$(CONFIG_ARCH_R8A77970) += r8a77970-eagle.dtb
+dtb-$(CONFIG_ARCH_R8A77970) += r8a77970-v3msk.dtb
+
+dtb-$(CONFIG_ARCH_R8A77980) += r8a77980-condor.dtb
+dtb-$(CONFIG_ARCH_R8A77980) += r8a77980-v3hsk.dtb
+
 dtb-$(CONFIG_ARCH_R8A77990) += r8a77990-ebisu.dtb
+
 dtb-$(CONFIG_ARCH_R8A77995) += r8a77995-draak.dtb
diff --git a/arch/arm64/boot/dts/renesas/beacon-renesom-baseboard.dtsi b/arch/arm64/boot/dts/renesas/beacon-renesom-baseboard.dtsi
new file mode 100644 (file)
index 0000000..66c9153
--- /dev/null
@@ -0,0 +1,758 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020, Compass Electronics Group, LLC
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       backlight_lvds: backlight-lvds {
+               compatible = "pwm-backlight";
+               power-supply = <&reg_lcd>;
+               enable-gpios = <&gpio_exp1 3 GPIO_ACTIVE_LOW>;
+               pwms = <&pwm2 0 50000>;
+               brightness-levels = <0 4 8 16 32 64 128 255>;
+               default-brightness-level = <6>;
+       };
+
+       backlight_rgb: backlight-rgb {
+               compatible = "pwm-backlight";
+               power-supply = <&reg_lcd>;
+               enable-gpios = <&gpio_exp1 7 GPIO_ACTIVE_LOW>;
+               pwms = <&pwm0 0 50000>;
+               brightness-levels = <0 4 8 16 32 64 128 255>;
+               default-brightness-level = <6>;
+       };
+
+       hdmi0-out {
+               compatible = "hdmi-connector";
+               type = "a";
+
+               port {
+                       hdmi0_con: endpoint {
+                               remote-endpoint = <&rcar_dw_hdmi0_out>;
+                       };
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               key-1 {
+                       gpios = <&gpio4 6 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_1>;
+                       label = "Switch-1";
+                       wakeup-source;
+                       debounce-interval = <20>;
+               };
+               key-2 {
+                       gpios = <&gpio3 13 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_2>;
+                       label = "Switch-2";
+                       wakeup-source;
+                       debounce-interval = <20>;
+               };
+               key-3 {
+                       gpios = <&gpio5 17 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_3>;
+                       label = "Switch-3";
+                       wakeup-source;
+                       debounce-interval = <20>;
+               };
+               key-4 {
+                       gpios = <&gpio5 20 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_4>;
+                       label = "Switch-4";
+                       wakeup-source;
+                       debounce-interval = <20>;
+               };
+               key-5 {
+                       gpios = <&gpio5 22 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_5>;
+                       label = "Switch-4";
+                       wakeup-source;
+                       debounce-interval = <20>;
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-0 = <&led_pins>;
+               pinctrl-names = "default";
+
+               led0 {
+                       gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>;
+                       label = "LED0";
+                       linux,default-trigger = "heartbeat";
+               };
+               led1 {
+                       gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>;
+                       label = "LED1";
+               };
+               led2 {
+                       gpios = <&gpio7 1 GPIO_ACTIVE_HIGH>;
+                       label = "LED2";
+               };
+               led3 {
+                       gpios = <&gpio7 3 GPIO_ACTIVE_HIGH>;
+                       label = "LED3";
+               };
+       };
+
+       lvds {
+               compatible = "panel-lvds";
+               power-supply = <&reg_lcd_reset>;
+               width-mm = <223>;
+               height-mm = <125>;
+               backlight = <&backlight_lvds>;
+               data-mapping = "vesa-24";
+
+               panel-timing {
+                       /* 800x480@60Hz */
+                       clock-frequency = <30000000>;
+                       hactive = <800>;
+                       vactive = <480>;
+                       hsync-len = <48>;
+                       hfront-porch = <40>;
+                       hback-porch = <40>;
+                       vfront-porch = <13>;
+                       vback-porch = <29>;
+                       vsync-len = <3>;
+                       hsync-active = <1>;
+                       vsync-active = <1>;
+                       de-active = <1>;
+                       pixelclk-active = <0>;
+               };
+
+               port {
+                       panel_in: endpoint {
+                               remote-endpoint = <&lvds0_out>;
+                       };
+               };
+       };
+
+       rgb {
+               /* Different LCD with compatible timings */
+               compatible = "rocktech,rk070er9427";
+               backlight = <&backlight_rgb>;
+               enable-gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>;
+               power-supply = <&reg_lcd>;
+               port {
+                       rgb_panel: endpoint {
+                               remote-endpoint = <&du_out_rgb>;
+                       };
+               };
+       };
+
+       reg_audio: regulator_audio {
+               compatible = "regulator-fixed";
+               regulator-name = "audio-1.8V";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               gpio = <&gpio_exp2 7 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       reg_lcd: regulator-lcd {
+               compatible = "regulator-fixed";
+               regulator-name = "lcd_panel_pwr";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&gpio_exp1 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       reg_lcd_reset: regulator-lcd-reset {
+               compatible = "regulator-fixed";
+               regulator-name = "nLCD_RESET";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&gpio5 3 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               vin-supply = <&reg_lcd>;
+       };
+
+       reg_cam0: regulator_camera {
+               compatible = "regulator-fixed";
+               regulator-name = "reg_cam0";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               gpio = <&gpio_exp2 2 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       reg_cam1: regulator_camera {
+               compatible = "regulator-fixed";
+               regulator-name = "reg_cam1";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               gpio = <&gpio_exp2 5 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               startup-delay-us = <100000>;
+       };
+
+       sound_card {
+               compatible = "audio-graph-card";
+               label = "rcar-sound";
+               dais = <&rsnd_port0>, <&rsnd_port1>;
+       };
+
+       vccq_sdhi0: regulator-vccq-sdhi0 {
+               compatible = "regulator-gpio";
+
+               regulator-name = "SDHI0 VccQ";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpios = <&gpio6 30 GPIO_ACTIVE_HIGH>;
+               gpios-states = <1>;
+               states = <3300000 1>, <1800000 0>;
+               regulator-always-on;
+       };
+
+       /* External DU dot clocks */
+       x302_clk: x302-clock {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <33000000>;
+       };
+
+       x304_clk: x304-clock {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <25000000>;
+       };
+};
+
+&audio_clk_a {
+       clock-frequency = <24576000>;
+       assigned-clocks = <&versaclock6_bb 4>;
+       assigned-clock-rates = <24576000>;
+};
+
+&audio_clk_b {
+       clock-frequency = <22579200>;
+};
+
+&can0 {
+       pinctrl-0 = <&can0_pins>;
+       pinctrl-names = "default";
+       renesas,can-clock-select = <0x0>;
+       status = "okay";
+};
+
+&can1 {
+       pinctrl-0 = <&can1_pins>;
+       pinctrl-names = "default";
+       renesas,can-clock-select = <0x0>;
+       status = "okay";
+};
+
+&du {
+       pinctrl-0 = <&du_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       clocks = <&cpg CPG_MOD 724>,
+               <&cpg CPG_MOD 723>,
+               <&cpg CPG_MOD 722>,
+               <&versaclock5 1>,
+               <&x302_clk>,
+               <&versaclock5 2>;
+       clock-names = "du.0", "du.1", "du.2",
+               "dclkin.0", "dclkin.1", "dclkin.2";
+};
+
+&du_out_rgb {
+       remote-endpoint = <&rgb_panel>;
+};
+
+&ehci0 {
+       dr_mode = "otg";
+       status = "okay";
+       clocks = <&cpg CPG_MOD 703>, <&cpg CPG_MOD 704>;
+};
+
+&ehci1 {
+       status = "okay";
+       clocks = <&cpg CPG_MOD 703>, <&cpg CPG_MOD 704>;
+};
+
+&hdmi0 {
+       status = "okay";
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               port@0 {
+                       reg = <0>;
+                       dw_hdmi0_in: endpoint {
+                               remote-endpoint = <&du_out_hdmi0>;
+                       };
+               };
+               port@1 {
+                       reg = <1>;
+                       rcar_dw_hdmi0_out: endpoint {
+                               remote-endpoint = <&hdmi0_con>;
+                       };
+               };
+               port@2 {
+                       reg = <2>;
+                       dw_hdmi0_snd_in: endpoint {
+                               remote-endpoint = <&rsnd_endpoint1>;
+                       };
+               };
+       };
+};
+
+&hscif1 {
+       pinctrl-0 = <&hscif1_pins>;
+       pinctrl-names = "default";
+       uart-has-rtscts;
+       status = "okay";
+};
+
+&hsusb {
+       dr_mode = "otg";
+       status = "okay";
+};
+
+&i2c2 {
+       status = "okay";
+       clock-frequency = <100000>;
+       pinctrl-0 = <&i2c2_pins>;
+       pinctrl-names = "default";
+
+       gpio_exp2: gpio@21 {
+               compatible = "onnn,pca9654";
+               reg = <0x21>;
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpio_exp3: gpio@22 {
+               compatible = "onnn,pca9654";
+               reg = <0x22>;
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       gpio_exp4: gpio@23 {
+               compatible = "onnn,pca9654";
+               reg = <0x23>;
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       versaclock6_bb: clock-controller@6a {
+               compatible = "idt,5p49v6965";
+               reg = <0x6a>;
+               #clock-cells = <1>;
+               clocks = <&x304_clk>;
+               clock-names = "xin";
+               /* CSI0_MCLK, CSI1_MCLK, AUDIO_CLKIN, USB_HUB_MCLK_BB */
+               assigned-clocks = <&versaclock6_bb 1>,
+                                  <&versaclock6_bb 2>,
+                                  <&versaclock6_bb 3>,
+                                  <&versaclock6_bb 4>;
+               assigned-clock-rates =  <24000000>, <24000000>, <24000000>, <24576000>;
+       };
+};
+
+&i2c0 {
+       status = "okay";
+       clock-frequency = <400000>;
+
+       pinctrl-0 = <&i2c0_pins>;
+       pinctrl-names = "default";
+};
+
+&i2c5 {
+       status = "okay";
+       clock-frequency = <100000>;
+       pinctrl-0 = <&i2c5_pins>;
+       pinctrl-names = "default";
+
+       codec: wm8962@1a {
+               compatible = "wlf,wm8962";
+               reg = <0x1a>;
+               DCVDD-supply = <&reg_audio>;
+               DBVDD-supply = <&reg_audio>;
+               AVDD-supply = <&reg_audio>;
+               CPVDD-supply = <&reg_audio>;
+               MICVDD-supply = <&reg_audio>;
+               PLLVDD-supply = <&reg_audio>;
+               SPKVDD1-supply = <&reg_audio>;
+               SPKVDD2-supply = <&reg_audio>;
+               gpio-cfg = <
+                       0x0000 /* 0:Default */
+                       0x0000 /* 1:Default */
+                       0x0000 /* 2:Default */
+                       0x0000 /* 3:Default */
+                       0x0000 /* 4:Default */
+                       0x0000 /* 5:Default */
+               >;
+               port {
+                       wm8962_endpoint: endpoint {
+                               remote-endpoint = <&rsnd_endpoint0>;
+                       };
+               };
+       };
+
+       /* 0 - lcd_reset */
+       /* 1 - lcd_pwr */
+       /* 2 - lcd_select */
+       /* 3 - backlight-enable */
+       /* 4 - Touch_shdwn */
+       /* 5 - LCD_H_pol */
+       /* 6 - lcd_V_pol */
+       gpio_exp1: gpio@20 {
+               compatible = "onnn,pca9654";
+               reg = <0x20>;
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       touchscreen@26 {
+               compatible = "ilitek,ili2117";
+               reg = <0x26>;
+               interrupt-parent = <&gpio5>;
+               interrupts = <9 IRQ_TYPE_EDGE_RISING>;
+               wakeup-source;
+       };
+
+       hd3ss3220@47 {
+               compatible = "ti,hd3ss3220";
+               reg = <0x47>;
+               interrupt-parent = <&gpio6>;
+               interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
+
+               connector {
+                       compatible = "usb-c-connector";
+                       label = "USB-C";
+                       data-role = "dual";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       reg = <1>;
+                                       hd3ss3220_ep: endpoint {
+                                               remote-endpoint = <&usb3_role_switch>;
+                                       };
+                               };
+                       };
+               };
+       };
+};
+
+&lvds0 {
+       status = "okay";
+
+       ports {
+               port@1 {
+                       lvds0_out: endpoint {
+                               remote-endpoint = <&panel_in>;
+                       };
+               };
+       };
+};
+
+&ohci0 {
+       dr_mode = "otg";
+       status = "okay";
+};
+
+&ohci1 {
+       status = "okay";
+};
+
+&pciec0 {
+       status = "okay";
+};
+
+&pciec1 {
+       status = "okay";
+};
+
+&pcie_bus_clk {
+       clock-frequency = <100000000>;
+};
+
+&pfc {
+       can0_pins: can0 {
+               groups = "can0_data_a";
+               function = "can0";
+       };
+
+       can1_pins: can1 {
+               groups = "can1_data";
+               function = "can1";
+       };
+
+       du_pins: du {
+               groups = "du_rgb888", "du_sync", "du_clk_out_1", "du_disp";
+               function = "du";
+       };
+
+       i2c2_pins: i2c2 {
+               groups = "i2c2_a";
+               function = "i2c2";
+       };
+
+       i2c5_pins: i2c5 {
+               groups = "i2c5";
+               function = "i2c5";
+       };
+
+       led_pins: leds {
+               /* GP_0_4 , AVS1, AVS2, GP_7_3 */
+               pins = "GP_0_4", "GP_7_0", "GP_7_1", "GP_7_3";
+               bias-pull-down;
+       };
+
+       pwm0_pins: pwm0 {
+               groups = "pwm0";
+               function = "pwm0";
+       };
+
+       pwm2_pins: pwm2 {
+               groups = "pwm2_a";
+               function = "pwm2_a";
+       };
+
+       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>;
+       };
+
+       sound_pins: sound {
+               groups = "ssi01239_ctrl", "ssi0_data", "ssi1_data_a";
+               function = "ssi";
+       };
+
+       sound_clk_pins: sound_clk {
+               groups = "audio_clk_a_a";
+               function = "audio_clk";
+       };
+
+       usb0_pins: usb0 {
+               mux {
+                       groups = "usb0";
+                       function = "usb0";
+               };
+       };
+
+       usb1_pins: usb1 {
+               mux {
+                       groups = "usb1";
+                       function = "usb1";
+               };
+       };
+
+       usb30_pins: usb30 {
+               mux {
+                       groups = "usb30";
+                       function = "usb30";
+               };
+       };
+};
+
+&pwm0 {
+       pinctrl-0 = <&pwm0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&pwm2 {
+       pinctrl-0 = <&pwm2_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&rcar_sound {
+       pinctrl-0 = <&sound_pins &sound_clk_pins>;
+       pinctrl-names = "default";
+
+       /* Single DAI */
+       #sound-dai-cells = <0>;
+
+       /* audio_clkout0/1/2/3 */
+       #clock-cells = <1>;
+       clock-frequency = <11289600>;
+
+       status = "okay";
+
+       clocks = <&cpg CPG_MOD 1005>,
+                <&cpg CPG_MOD 1006>, <&cpg CPG_MOD 1007>,
+                <&cpg CPG_MOD 1008>, <&cpg CPG_MOD 1009>,
+                <&cpg CPG_MOD 1010>, <&cpg CPG_MOD 1011>,
+                <&cpg CPG_MOD 1012>, <&cpg CPG_MOD 1013>,
+                <&cpg CPG_MOD 1014>, <&cpg CPG_MOD 1015>,
+                <&cpg CPG_MOD 1022>, <&cpg CPG_MOD 1023>,
+                <&cpg CPG_MOD 1024>, <&cpg CPG_MOD 1025>,
+                <&cpg CPG_MOD 1026>, <&cpg CPG_MOD 1027>,
+                <&cpg CPG_MOD 1028>, <&cpg CPG_MOD 1029>,
+                <&cpg CPG_MOD 1030>, <&cpg CPG_MOD 1031>,
+                <&cpg CPG_MOD 1020>, <&cpg CPG_MOD 1021>,
+                <&cpg CPG_MOD 1020>, <&cpg CPG_MOD 1021>,
+                <&cpg CPG_MOD 1019>, <&cpg CPG_MOD 1018>,
+                <&audio_clk_a>, <&audio_clk_b>, <&audio_clk_c>,
+                <&cpg CPG_CORE R8A774A1_CLK_S0D4>;
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               rsnd_port0: port@0 {
+                       reg = <0>;
+                       rsnd_endpoint0: endpoint {
+                               remote-endpoint = <&wm8962_endpoint>;
+
+                               dai-format = "i2s";
+                               bitclock-master = <&rsnd_endpoint0>;
+                               frame-master = <&rsnd_endpoint0>;
+
+                               playback = <&ssi1 &dvc1 &src1>;
+                               capture = <&ssi0>;
+                       };
+               };
+               rsnd_port1: port@1 {
+                   reg = <0x01>;
+                       rsnd_endpoint1: endpoint {
+                               remote-endpoint = <&dw_hdmi0_snd_in>;
+
+                               dai-format = "i2s";
+                               bitclock-master = <&rsnd_endpoint1>;
+                               frame-master = <&rsnd_endpoint1>;
+
+                               playback = <&ssi2>;
+                       };
+               };
+       };
+};
+
+&rwdt {
+       status = "okay";
+       timeout-sec = <60>;
+};
+
+&scif0 {
+       pinctrl-0 = <&scif0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&scif5 {
+       pinctrl-0 = <&scif5_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&scif_clk {
+       clock-frequency = <14745600>;
+};
+
+&sdhi0 {
+       pinctrl-0 = <&sdhi0_pins>;
+       pinctrl-1 = <&sdhi0_pins_uhs>;
+       pinctrl-names = "default", "state_uhs";
+       vmmc-supply = <&reg_3p3v>;
+       vqmmc-supply = <&vccq_sdhi0>;
+       cd-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>;
+       bus-width = <4>;
+       sd-uhs-sdr50;
+       sd-uhs-sdr104;
+       status = "okay";
+};
+
+&ssi1 {
+       shared-pin;
+};
+
+&tmu0 {
+       status = "okay";
+};
+
+&tmu1 {
+       status = "okay";
+};
+
+&tmu2 {
+       status = "okay";
+};
+
+&tmu3 {
+       status = "okay";
+};
+
+&tmu4 {
+       status = "okay";
+};
+
+&usb2_phy0 {
+       pinctrl-0 = <&usb0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&usb2_phy1 {
+       pinctrl-0 = <&usb1_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&usb3_peri0 {
+       companion = <&xhci0>;
+       status = "okay";
+       usb-role-switch;
+
+       port {
+               usb3_role_switch: endpoint {
+                       remote-endpoint = <&hd3ss3220_ep>;
+               };
+       };
+};
+
+&usb3_phy0 {
+       status = "okay";
+};
+
+&vin0 {
+       status = "okay";
+};
+&vin1 {
+       status = "okay";
+};
+&vin2 {
+       status = "okay";
+};
+&vin3 {
+       status = "okay";
+};
+&vin4 {
+       status = "okay";
+};
+&vin5 {
+       status = "okay";
+};
+&vin6 {
+       status = "okay";
+};
+&vin7 {
+       status = "okay";
+};
+
+&xhci0
+{
+       pinctrl-0 = <&usb30_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
diff --git a/arch/arm64/boot/dts/renesas/beacon-renesom-som.dtsi b/arch/arm64/boot/dts/renesas/beacon-renesom-som.dtsi
new file mode 100644 (file)
index 0000000..97272f5
--- /dev/null
@@ -0,0 +1,312 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020, Compass Electronics Group, LLC
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       memory@48000000 {
+               device_type = "memory";
+               /* first 128MB is reserved for secure area. */
+               reg = <0x0 0x48000000 0x0 0x78000000>;
+       };
+
+       memory@600000000 {
+               device_type = "memory";
+               reg = <0x6 0x00000000 0x0 0x80000000>;
+       };
+
+       osc_32k: osc_32k {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <32768>;
+               clock-output-names = "osc_32k";
+       };
+
+       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;
+       };
+
+       wlan_pwrseq: wlan_pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               reset-gpios = <&pca9654 1 GPIO_ACTIVE_LOW>;
+               clocks = <&osc_32k>;
+               clock-names = "ext_clock";
+               post-power-on-delay-ms = <80>;
+       };
+};
+
+&avb {
+       pinctrl-0 = <&avb_pins>;
+       pinctrl-names = "default";
+       phy-handle = <&phy0>;
+       phy-mode = "rgmii-id";
+       status = "okay";
+
+       phy0: ethernet-phy@0 {
+               reg = <0>;
+               interrupt-parent = <&gpio2>;
+               interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
+               reset-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>;
+       };
+};
+
+&extal_clk {
+       clock-frequency = <16666666>;
+};
+
+&extalr_clk {
+       clock-frequency = <32768>;
+};
+
+&gpio6 {
+       usb_hub_reset {
+               gpio-hog;
+               gpios = <10 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "usb-hub-reset";
+       };
+};
+
+&hscif0 {
+       pinctrl-0 = <&hscif0_pins>;
+       pinctrl-names = "default";
+       uart-has-rtscts;
+       status = "okay";
+       max-speed = <4000000>;
+
+       bluetooth {
+               compatible = "brcm,bcm43438-bt";
+               shutdown-gpios = <&pca9654 2 GPIO_ACTIVE_HIGH>;
+               host-wakeup-gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>;
+               device-wakeup-gpios = <&pca9654 5 GPIO_ACTIVE_HIGH>;
+               clocks = <&osc_32k>;
+               clock-names = "extclk";
+       };
+};
+
+&hscif2 {
+       status = "okay";
+       pinctrl-0 = <&hscif2_pins>;
+       pinctrl-names = "default";
+};
+
+&i2c4 {
+       status = "okay";
+       clock-frequency = <400000>;
+
+       pca9654: gpio@20 {
+               compatible = "onnn,pca9654";
+               reg = <0x20>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               gpio-line-names =
+                       "i2c4_20_0",
+                       "wl_reg_on",
+                       "bt_reg_on",
+                       "i2c4_20_3",
+                       "i2c4_20_4",
+                       "bt_dev_wake",
+                       "i2c4_20_6",
+                       "i2c4_20_7";
+       };
+
+       pca9654_lte: gpio@21 {
+               compatible = "onnn,pca9654";
+               reg = <0x21>;
+               interrupt-parent = <&gpio5>;
+               interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               gpio-line-names =
+                       "i2c4_21_0",
+                       "zoe_pwr_on",
+                       "zoe_extint",
+                       "zoe_reset_n",
+                       "sara_reset",
+                       "i2c4_21_5",
+                       "sara_pwr_off",
+                       "sara_networking_status";
+       };
+
+       eeprom@50 {
+               compatible = "microchip,at24c64", "atmel,24c64";
+               pagesize = <32>;
+               read-only;      /* Manufacturing EEPROM programmed at factory */
+               reg = <0x50>;
+       };
+
+       rtc@51 {
+               compatible = "nxp,pcf85263";
+               reg = <0x51>;
+       };
+
+       versaclock5: versaclock_som@6a {
+               compatible = "idt,5p49v6965";
+               reg = <0x6a>;
+               #clock-cells = <1>;
+               clocks = <&x304_clk>;
+               clock-names = "xin";
+               /* du_dotclkin0, du_dotclkin2, usb_extal, avb_txcrefclk */
+               assigned-clocks = <&versaclock5 1>,
+                                  <&versaclock5 2>,
+                                  <&versaclock5 3>,
+                                  <&versaclock5 4>;
+               assigned-clock-rates = <33333333>, <33333333>, <50000000>, <125000000>;
+       };
+};
+
+&pfc {
+       pinctrl-0 = <&scif_clk_pins>;
+       pinctrl-names = "default";
+
+       avb_pins: avb {
+               mux {
+                       groups = "avb_link", "avb_mdio", "avb_mii";
+                       function = "avb";
+               };
+
+               pins_mdio {
+                       groups = "avb_mdio";
+                       drive-strength = <24>;
+               };
+
+               pins_mii_tx {
+                       pins = "PIN_AVB_TX_CTL", "PIN_AVB_TXC", "PIN_AVB_TD0",
+                              "PIN_AVB_TD1", "PIN_AVB_TD2", "PIN_AVB_TD3";
+                       drive-strength = <12>;
+               };
+       };
+
+       scif2_pins: scif2 {
+               groups = "scif2_data_a";
+               function = "scif2";
+       };
+
+       hscif0_pins: hscif0 {
+               groups = "hscif0_data", "hscif0_ctrl";
+               function = "hscif0";
+       };
+
+       hscif1_pins: hscif1 {
+               groups = "hscif1_data_a", "hscif1_ctrl_a";
+               function = "hscif1";
+       };
+
+       hscif2_pins: hscif2 {
+               groups = "hscif2_data_a";
+               function = "hscif2";
+       };
+
+       scif0_pins: scif0 {
+               groups = "scif0_data";
+               function = "scif0";
+       };
+
+       scif5_pins: scif5 {
+               groups = "scif5_data_a";
+               function = "scif5";
+       };
+
+       scif_clk_pins: scif_clk {
+               groups = "scif_clk_a";
+               function = "scif_clk";
+       };
+
+       i2c0_pins: i2c0 {
+               groups = "i2c0";
+               function = "i2c0";
+       };
+
+       sdhi2_pins: sd2 {
+               groups = "sdhi2_data4", "sdhi2_ctrl";
+               function = "sdhi2";
+               power-source = <1800>;
+       };
+
+       sdhi3_pins: sd3 {
+               groups = "sdhi3_data8", "sdhi3_ctrl", "sdhi3_ds";
+               function = "sdhi3";
+               power-source = <1800>;
+       };
+};
+
+&scif_clk {
+       clock-frequency = <14745600>;
+};
+
+&scif2 {
+       pinctrl-0 = <&scif2_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&sdhi2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdhi2_pins>;
+       bus-width = <4>;
+       vmmc-supply = <&reg_3p3v>;
+       vqmmc-supply = <&reg_1p8v>;
+       non-removable;
+       cap-power-off-card;
+       pm-ignore-notify;
+       keep-power-in-suspend;
+       mmc-pwrseq = <&wlan_pwrseq>;
+       status = "okay";
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       brcmf: bcrmf@1 {
+               reg = <1>;
+               compatible = "brcm,bcm4329-fmac";
+               interrupt-parent = <&gpio1>;
+               interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
+               interrupt-names = "host-wake";
+       };
+};
+
+&sdhi3 {
+       pinctrl-0 = <&sdhi3_pins>;
+       pinctrl-1 = <&sdhi3_pins>;
+       pinctrl-names = "default", "state_uhs";
+       vmmc-supply = <&reg_3p3v>;
+       vqmmc-supply = <&reg_1p8v>;
+       bus-width = <8>;
+       mmc-hs200-1_8v;
+       non-removable;
+       fixed-emmc-driver-type = <1>;
+       status = "okay";
+};
+
+&usb_extal_clk {
+       clock-frequency = <50000000>;
+};
+
+&usb3s0_clk {
+       clock-frequency = <100000000>;
+};
+
+&vspb {
+       status = "okay";
+};
+
+&vspi0 {
+       status = "okay";
+};
index aaefc3a..33daa95 100644 (file)
@@ -18,7 +18,6 @@
        pinctrl-names = "default";
        renesas,no-ether-link;
        phy-handle = <&phy0>;
-       phy-mode = "rgmii";
        status = "okay";
 
        phy0: ethernet-phy@0 {
index bd05690..2eda9f6 100644 (file)
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the HiHope RZ/G2[MN] main board common parts
+ * Device Tree Source for the HiHope RZ/G2H Rev.4.0 and
+ * HiHope RZ/G2[MN] Rev.[2.0/3.0/4.0] main board common parts
  *
  * Copyright (C) 2019 Renesas Electronics Corp.
  */
        leds {
                compatible = "gpio-leds";
 
-               bt_active_led {
-                       label = "blue:bt";
-                       gpios = <&gpio7  0 GPIO_ACTIVE_HIGH>;
-                       linux,default-trigger = "hci0-power";
-                       default-state = "off";
-               };
-
-               led0 {
-                       gpios = <&gpio6 11 GPIO_ACTIVE_HIGH>;
-               };
-
                led1 {
                        gpios = <&gpio6 12 GPIO_ACTIVE_HIGH>;
                };
                        gpios = <&gpio0  0 GPIO_ACTIVE_HIGH>;
                };
 
-               wlan_active_led {
-                       label = "yellow:wlan";
-                       gpios = <&gpio7  1 GPIO_ACTIVE_HIGH>;
-                       linux,default-trigger = "phy0tx";
-                       default-state = "off";
+               led4 {
+                       gpios = <&gpio6 11 GPIO_ACTIVE_HIGH>;
                };
        };
 
                states = <3300000 1>, <1800000 0>;
        };
 
-       wlan_en_reg: regulator-wlan_en {
-               compatible = "regulator-fixed";
-               regulator-name = "wlan-en-regulator";
-               regulator-min-microvolt = <1800000>;
-               regulator-max-microvolt = <1800000>;
-               startup-delay-us = <70000>;
-
-               gpio = <&gpio_expander 1 GPIO_ACTIVE_HIGH>;
-               enable-active-high;
-       };
-
        x302_clk: x302-clock {
                compatible = "fixed-clock";
                #clock-cells = <0>;
 
        uart-has-rtscts;
        status = "okay";
-
-       bluetooth {
-               compatible = "ti,wl1837-st";
-               enable-gpios = <&gpio_expander 2 GPIO_ACTIVE_HIGH>;
-       };
 };
 
 &hsusb {
        clock-frequency = <400000>;
        status = "okay";
 
-       gpio_expander: gpio@20 {
-               compatible = "onnn,pca9654";
-               reg = <0x20>;
-               gpio-controller;
-               #gpio-cells = <2>;
-       };
-
        versaclock5: clock-generator@6a {
                compatible = "idt,5p49v5923";
                reg = <0x6a>;
                power-source = <1800>;
        };
 
-       sound_clk_pins: sound_clk {
-               groups = "audio_clk_a_a";
-               function = "audio_clk";
-       };
-
        usb0_pins: usb0 {
                groups = "usb0";
                function = "usb0";
        };
 };
 
-&rcar_sound {
-       pinctrl-0 = <&sound_clk_pins>;
-       pinctrl-names = "default";
-
-       status = "okay";
-
-       /* Single DAI */
-       #sound-dai-cells = <0>;
-
-       rsnd_port: port {
-               rsnd_endpoint: endpoint {
-                       remote-endpoint = <&dw_hdmi0_snd_in>;
-
-                       dai-format = "i2s";
-                       bitclock-master = <&rsnd_endpoint>;
-                       frame-master = <&rsnd_endpoint>;
-
-                       playback = <&ssi2>;
-               };
-       };
-};
-
 &rwdt {
        timeout-sec = <60>;
        status = "okay";
diff --git a/arch/arm64/boot/dts/renesas/hihope-rev2.dtsi b/arch/arm64/boot/dts/renesas/hihope-rev2.dtsi
new file mode 100644 (file)
index 0000000..8e2db1d
--- /dev/null
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2[MN] main board Rev.2.0 common
+ * parts
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include "hihope-common.dtsi"
+
+/ {
+       leds {
+               compatible = "gpio-leds";
+
+               bt_active_led {
+                       label = "blue:bt";
+                       gpios = <&gpio7  0 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "hci0-power";
+                       default-state = "off";
+               };
+
+               wlan_active_led {
+                       label = "yellow:wlan";
+                       gpios = <&gpio7  1 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "phy0tx";
+                       default-state = "off";
+               };
+       };
+
+       wlan_en_reg: regulator-wlan_en {
+               compatible = "regulator-fixed";
+               regulator-name = "wlan-en-regulator";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               startup-delay-us = <70000>;
+
+               gpio = <&gpio_expander 1 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+};
+
+&hscif0 {
+       bluetooth {
+               compatible = "ti,wl1837-st";
+               enable-gpios = <&gpio_expander 2 GPIO_ACTIVE_HIGH>;
+       };
+};
+
+&i2c4 {
+       gpio_expander: gpio@20 {
+               compatible = "onnn,pca9654";
+               reg = <0x20>;
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+};
+
+&pfc {
+       sound_clk_pins: sound_clk {
+               groups = "audio_clk_a_a";
+               function = "audio_clk";
+       };
+};
+
+&rcar_sound {
+       pinctrl-0 = <&sound_clk_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       /* Single DAI */
+       #sound-dai-cells = <0>;
+
+       rsnd_port: port {
+               rsnd_endpoint: endpoint {
+                       remote-endpoint = <&dw_hdmi0_snd_in>;
+
+                       dai-format = "i2s";
+                       bitclock-master = <&rsnd_endpoint>;
+                       frame-master = <&rsnd_endpoint>;
+
+                       playback = <&ssi2>;
+               };
+       };
+};
diff --git a/arch/arm64/boot/dts/renesas/hihope-rev4.dtsi b/arch/arm64/boot/dts/renesas/hihope-rev4.dtsi
new file mode 100644 (file)
index 0000000..3046c07
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2H Rev.4.0 and
+ * HiHope RZ/G2[MN] Rev.3.0/4.0 main board common parts
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include "hihope-common.dtsi"
+
+/ {
+       audio_clkout: audio-clkout {
+               /*
+                * This is same as <&rcar_sound 0>
+                * but needed to avoid cs2000/rcar_sound probe dead-lock
+                */
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <12288000>;
+       };
+
+       wlan_en_reg: regulator-wlan_en {
+               compatible = "regulator-fixed";
+               regulator-name = "wlan-en-regulator";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               startup-delay-us = <70000>;
+
+               gpio = <&gpio4 6 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       x1801_clk: x1801-clock {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <24576000>;
+       };
+};
+
+&hscif0 {
+       bluetooth {
+               compatible = "ti,wl1837-st";
+               enable-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
+       };
+};
+
+&i2c2 {
+       pinctrl-0 = <&i2c2_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       cs2000: clk_multiplier@4f {
+               #clock-cells = <0>;
+               compatible = "cirrus,cs2000-cp";
+               reg = <0x4f>;
+               clocks = <&audio_clkout>, <&x1801_clk>;
+               clock-names = "clk_in", "ref_clk";
+
+               assigned-clocks = <&cs2000>;
+               assigned-clock-rates = <24576000>; /* 1/1 divide */
+       };
+};
+
+&pfc {
+       i2c2_pins: i2c2 {
+               groups = "i2c2_a";
+               function = "i2c2";
+       };
+
+       sound_clk_pins: sound_clk {
+               groups = "audio_clk_a_a", "audio_clk_b_a", "audio_clkout_a";
+               function = "audio_clk";
+       };
+
+       sound_pins: sound {
+               groups = "ssi01239_ctrl", "ssi0_data", "ssi1_data_a";
+               function = "ssi";
+       };
+};
+
+&rcar_sound {
+       pinctrl-0 = <&sound_pins &sound_clk_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       /* Single DAI */
+       #sound-dai-cells = <0>;
+
+       /* audio_clkout0/1/2/3 */
+       #clock-cells = <1>;
+       clock-frequency = <12288000 11289600>;
+
+       /* update <audio_clk_b> to <cs2000> */
+       clocks = <&cpg CPG_MOD 1005>,
+                <&cpg CPG_MOD 1006>, <&cpg CPG_MOD 1007>,
+                <&cpg CPG_MOD 1008>, <&cpg CPG_MOD 1009>,
+                <&cpg CPG_MOD 1010>, <&cpg CPG_MOD 1011>,
+                <&cpg CPG_MOD 1012>, <&cpg CPG_MOD 1013>,
+                <&cpg CPG_MOD 1014>, <&cpg CPG_MOD 1015>,
+                <&cpg CPG_MOD 1022>, <&cpg CPG_MOD 1023>,
+                <&cpg CPG_MOD 1024>, <&cpg CPG_MOD 1025>,
+                <&cpg CPG_MOD 1026>, <&cpg CPG_MOD 1027>,
+                <&cpg CPG_MOD 1028>, <&cpg CPG_MOD 1029>,
+                <&cpg CPG_MOD 1030>, <&cpg CPG_MOD 1031>,
+                <&cpg CPG_MOD 1020>, <&cpg CPG_MOD 1021>,
+                <&cpg CPG_MOD 1020>, <&cpg CPG_MOD 1021>,
+                <&cpg CPG_MOD 1019>, <&cpg CPG_MOD 1018>,
+                <&audio_clk_a>, <&cs2000>,
+                <&audio_clk_c>,
+                <&cpg CPG_CORE CPG_AUDIO_CLK_I>;
+
+       rsnd_port: port {
+               rsnd_endpoint: endpoint {
+                       remote-endpoint = <&dw_hdmi0_snd_in>;
+
+                       dai-format = "i2s";
+                       bitclock-master = <&rsnd_endpoint>;
+                       frame-master = <&rsnd_endpoint>;
+
+                       playback = <&ssi2>;
+               };
+       };
+};
diff --git a/arch/arm64/boot/dts/renesas/hihope-rzg2-ex-lvds.dtsi b/arch/arm64/boot/dts/renesas/hihope-rzg2-ex-lvds.dtsi
new file mode 100644 (file)
index 0000000..40c5e8d
--- /dev/null
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the RZ/G2[MN] HiHope sub board LVDS common parts
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+
+/ {
+       backlight {
+               compatible = "pwm-backlight";
+               pwms = <&pwm0 0 50000>;
+
+               brightness-levels = <0 2 8 16 32 64 128 255>;
+               default-brightness-level = <6>;
+       };
+};
+
+&gpio1 {
+       /*
+        * When GP1_20 is LOW LVDS0 is connected to the LVDS connector
+        * When GP1_20 is HIGH LVDS0 is connected to the LT8918L
+        */
+       lvds-connector-en-gpio {
+               gpio-hog;
+               gpios = <20 GPIO_ACTIVE_HIGH>;
+               output-low;
+               line-name = "lvds-connector-en-gpio";
+       };
+};
+
+&lvds0 {
+       ports {
+               port@1 {
+                       lvds_connector: endpoint {
+                       };
+               };
+       };
+};
+
+&pfc {
+       pwm0_pins: pwm0 {
+               groups = "pwm0";
+               function = "pwm0";
+       };
+};
+
+&pwm0 {
+       pinctrl-0 = <&pwm0_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+};
index 28fe17e..178401a 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the RZ/G2[MN] HiHope sub board common parts
+ * Device Tree Source for the RZ/G2[HMN] HiHope sub board common parts
  *
  * Copyright (C) 2019 Renesas Electronics Corp.
  */
        chosen {
                bootargs = "ignore_loglevel rw root=/dev/nfs ip=on";
        };
-
-       backlight {
-               compatible = "pwm-backlight";
-               pwms = <&pwm0 0 50000>;
-
-               brightness-levels = <0 2 8 16 32 64 128 255>;
-               default-brightness-level = <6>;
-       };
 };
 
 &avb {
        status = "okay";
 };
 
-&gpio1 {
-       /*
-        * When GP1_20 is LOW LVDS0 is connected to the LVDS connector
-        * When GP1_20 is HIGH LVDS0 is connected to the LT8918L
-        */
-       lvds-connector-en-gpio {
-               gpio-hog;
-               gpios = <20 GPIO_ACTIVE_HIGH>;
-               output-low;
-               line-name = "lvds-connector-en-gpio";
-       };
-};
-
-&lvds0 {
-       /*
-        * Please include the LVDS panel .dtsi file and uncomment the below line
-        * to enable LVDS panel connected to RZ/G2[MN] boards.
-        */
-
-       /* status = "okay"; */
-
-       ports {
-               port@1 {
-                       lvds_connector: endpoint {
-                       };
-               };
-       };
-};
-
 &pciec0 {
        status = "okay";
 };
diff --git a/arch/arm64/boot/dts/renesas/r8a774a1-beacon-rzg2m-kit.dts b/arch/arm64/boot/dts/renesas/r8a774a1-beacon-rzg2m-kit.dts
new file mode 100644 (file)
index 0000000..2c5b057
--- /dev/null
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020, Compass Electronics Group, LLC
+ */
+
+/dts-v1/;
+
+#include "r8a774a1.dtsi"
+#include "beacon-renesom-som.dtsi"
+#include "beacon-renesom-baseboard.dtsi"
+
+/ {
+       model = "Beacon EmbeddedWorks RZ/G2M Development Kit";
+       compatible = "beacon,beacon-rzg2m", "renesas,r8a774a1";
+
+       aliases {
+               serial0 = &scif2;
+               serial1 = &hscif0;
+               serial2 = &hscif1;
+               serial3 = &scif0;
+               serial4 = &hscif2;
+               serial5 = &scif5;
+               ethernet0 = &avb;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+};
index 2ab5edd..06c04c5 100644 (file)
@@ -1,52 +1,15 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the HiHope RZ/G2M sub board connected to an
- * Advantech IDK-1110WR 10.1" LVDS panel
+ * Device Tree Source for the HiHope RZ/G2M Rev.3.0/4.0 sub board connected
+ * to an Advantech IDK-1110WR 10.1" LVDS panel
  *
  * Copyright (C) 2020 Renesas Electronics Corp.
  */
 
 #include "r8a774a1-hihope-rzg2m-ex.dts"
+#include "hihope-rzg2-ex-lvds.dtsi"
 #include "rzg2-advantech-idk-1110wr-panel.dtsi"
 
-/ {
-       backlight {
-               compatible = "pwm-backlight";
-               pwms = <&pwm0 0 50000>;
-
-               brightness-levels = <0 2 8 16 32 64 128 255>;
-               default-brightness-level = <6>;
-       };
-
-};
-
-&gpio1 {
-       /*
-        * When GP1_20 is LOW LVDS0 is connected to the LVDS connector
-        * When GP1_20 is HIGH LVDS0 is connected to the LT8918L
-        */
-       lvds-connector-en-gpio {
-               gpio-hog;
-               gpios = <20 GPIO_ACTIVE_HIGH>;
-               output-low;
-               line-name = "lvds-connector-en-gpio";
-       };
-};
-
 &lvds0 {
        status = "okay";
 };
-
-&pfc {
-       pwm0_pins: pwm0 {
-               groups = "pwm0";
-               function = "pwm0";
-       };
-};
-
-&pwm0 {
-       pinctrl-0 = <&pwm0_pins>;
-       pinctrl-names = "default";
-
-       status = "okay";
-};
index c754fca..a5ca861 100644 (file)
@@ -1,8 +1,9 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the HiHope RZ/G2M sub board
+ * Device Tree Source for the HiHope RZ/G2M Rev.3.0/4.0 connected to
+ * sub board
  *
- * Copyright (C) 2019 Renesas Electronics Corp.
+ * Copyright (C) 2020 Renesas Electronics Corp.
  */
 
 #include "r8a774a1-hihope-rzg2m.dts"
@@ -14,6 +15,7 @@
                     "renesas,r8a774a1";
 };
 
+/* SW43 should be OFF, if in ON state SATA port will be activated */
 &pciec1 {
        status = "okay";
 };
diff --git a/arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-rev2-ex-idk-1110wr.dts b/arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-rev2-ex-idk-1110wr.dts
new file mode 100644 (file)
index 0000000..c0e9d8c
--- /dev/null
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2M Rev.2.0 sub board connected to an
+ * Advantech IDK-1110WR 10.1" LVDS panel
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+
+#include "r8a774a1-hihope-rzg2m-rev2-ex.dts"
+#include "hihope-rzg2-ex-lvds.dtsi"
+#include "rzg2-advantech-idk-1110wr-panel.dtsi"
+
+&lvds0 {
+       status = "okay";
+};
diff --git a/arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-rev2-ex.dts b/arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-rev2-ex.dts
new file mode 100644 (file)
index 0000000..2221cf6
--- /dev/null
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2M Rev.2.0 connected to sub board
+ *
+ * Copyright (C) 2019 Renesas Electronics Corp.
+ */
+
+#include "r8a774a1-hihope-rzg2m-rev2.dts"
+#include "hihope-rzg2-ex.dtsi"
+
+/ {
+       model = "HopeRun HiHope RZ/G2M (Rev.2.0) with sub board";
+       compatible = "hoperun,hihope-rzg2-ex", "hoperun,hihope-rzg2m",
+                    "renesas,r8a774a1";
+};
+
+/* SW43 should be OFF, if in ON state SATA port will be activated */
+&pciec1 {
+       status = "okay";
+};
diff --git a/arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-rev2.dts b/arch/arm64/boot/dts/renesas/r8a774a1-hihope-rzg2m-rev2.dts
new file mode 100644 (file)
index 0000000..bb18f6e
--- /dev/null
@@ -0,0 +1,37 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2M Rev.2.0 main board
+ *
+ * Copyright (C) 2019 Renesas Electronics Corp.
+ */
+
+/dts-v1/;
+#include "r8a774a1.dtsi"
+#include "hihope-rev2.dtsi"
+
+/ {
+       model = "HopeRun HiHope RZ/G2M main board (Rev.2.0) based on r8a774a1";
+       compatible = "hoperun,hihope-rzg2m", "renesas,r8a774a1";
+
+       memory@48000000 {
+               device_type = "memory";
+               /* first 128MB is reserved for secure area. */
+               reg = <0x0 0x48000000 0x0 0x78000000>;
+       };
+
+       memory@600000000 {
+               device_type = "memory";
+               reg = <0x6 0x00000000 0x0 0x80000000>;
+       };
+};
+
+&du {
+       clocks = <&cpg CPG_MOD 724>,
+                <&cpg CPG_MOD 723>,
+                <&cpg CPG_MOD 722>,
+                <&versaclock5 1>,
+                <&x302_clk>,
+                <&versaclock5 2>;
+       clock-names = "du.0", "du.1", "du.2",
+                     "dclkin.0", "dclkin.1", "dclkin.2";
+};
index 96f2fb0..25ae255 100644 (file)
@@ -1,13 +1,13 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the HiHope RZ/G2M main board
+ * Device Tree Source for the HiHope RZ/G2M Rev.3.0/4.0 main board
  *
- * Copyright (C) 2019 Renesas Electronics Corp.
+ * Copyright (C) 2020 Renesas Electronics Corp.
  */
 
 /dts-v1/;
 #include "r8a774a1.dtsi"
-#include "hihope-common.dtsi"
+#include "hihope-rev4.dtsi"
 
 / {
        model = "HopeRun HiHope RZ/G2M main board based on r8a774a1";
index a603d94..8e80f50 100644 (file)
@@ -10,6 +10,8 @@
 #include <dt-bindings/clock/r8a774a1-cpg-mssr.h>
 #include <dt-bindings/power/r8a774a1-sysc.h>
 
+#define CPG_AUDIO_CLK_I                R8A774A1_CLK_S0D4
+
 / {
        compatible = "renesas,r8a774a1";
        #address-cells = <2>;
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a774a1",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee100000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee120000 {
+               sdhi1: mmc@ee120000 {
                        compatible = "renesas,sdhi-r8a774a1",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee120000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee140000 {
+               sdhi2: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a774a1",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee140000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
+               sdhi3: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a774a1",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee160000 0 0x2000>;
diff --git a/arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-ex-idk-1110wr.dts b/arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-ex-idk-1110wr.dts
new file mode 100644 (file)
index 0000000..4b5154f
--- /dev/null
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2N Rev.3.0/4.0 with sub board connected
+ * to an Advantech IDK-1110WR 10.1" LVDS panel
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+
+#include "r8a774b1-hihope-rzg2n-ex.dts"
+#include "hihope-rzg2-ex-lvds.dtsi"
+#include "rzg2-advantech-idk-1110wr-panel.dtsi"
+
+&lvds0 {
+       status = "okay";
+};
index ab47c0b..a3edd55 100644 (file)
@@ -1,8 +1,9 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the HiHope RZ/G2N sub board
+ * Device Tree Source for the HiHope RZ/G2N Rev.3.0/4.0 connected to
+ * sub board
  *
- * Copyright (C) 2019 Renesas Electronics Corp.
+ * Copyright (C) 2020 Renesas Electronics Corp.
  */
 
 #include "r8a774b1-hihope-rzg2n.dts"
diff --git a/arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-rev2-ex-idk-1110wr.dts b/arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-rev2-ex-idk-1110wr.dts
new file mode 100644 (file)
index 0000000..e730b3b
--- /dev/null
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2N Rev.2.0 with sub board connected
+ * to an Advantech IDK-1110WR 10.1" LVDS panel
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+
+#include "r8a774b1-hihope-rzg2n-rev2-ex.dts"
+#include "hihope-rzg2-ex-lvds.dtsi"
+#include "rzg2-advantech-idk-1110wr-panel.dtsi"
+
+&lvds0 {
+       status = "okay";
+};
diff --git a/arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-rev2-ex.dts b/arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-rev2-ex.dts
new file mode 100644 (file)
index 0000000..2e5e1de
--- /dev/null
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2N Rev.2.0 connected to sub board
+ *
+ * Copyright (C) 2019 Renesas Electronics Corp.
+ */
+
+#include "r8a774b1-hihope-rzg2n-rev2.dts"
+#include "hihope-rzg2-ex.dtsi"
+
+/ {
+       model = "HopeRun HiHope RZ/G2N (Rev.2.0) with sub board";
+       compatible = "hoperun,hihope-rzg2-ex", "hoperun,hihope-rzg2n",
+                    "renesas,r8a774b1";
+};
diff --git a/arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-rev2.dts b/arch/arm64/boot/dts/renesas/r8a774b1-hihope-rzg2n-rev2.dts
new file mode 100644 (file)
index 0000000..c69ca5c
--- /dev/null
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2N Rev.2.0 main board
+ *
+ * Copyright (C) 2019 Renesas Electronics Corp.
+ */
+
+/dts-v1/;
+#include "r8a774b1.dtsi"
+#include "hihope-rev2.dtsi"
+
+/ {
+       model = "HopeRun HiHope RZ/G2N main board (Rev.2.0) based on r8a774b1";
+       compatible = "hoperun,hihope-rzg2n", "renesas,r8a774b1";
+
+       memory@48000000 {
+               device_type = "memory";
+               /* first 128MB is reserved for secure area. */
+               reg = <0x0 0x48000000 0x0 0x78000000>;
+       };
+
+       memory@480000000 {
+               device_type = "memory";
+               reg = <0x4 0x80000000 0x0 0x80000000>;
+       };
+};
+
+&du {
+       clocks = <&cpg CPG_MOD 724>,
+                <&cpg CPG_MOD 723>,
+                <&cpg CPG_MOD 721>,
+                <&versaclock5 1>,
+                <&x302_clk>,
+                <&versaclock5 2>;
+       clock-names = "du.0", "du.1", "du.3",
+                     "dclkin.0", "dclkin.1", "dclkin.3";
+};
+
+&sdhi3 {
+       mmc-hs400-1_8v;
+};
index 9910c1a..f1883cb 100644 (file)
@@ -1,13 +1,13 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the HiHope RZ/G2N main board
+ * Device Tree Source for the HiHope RZ/G2N main board Rev.3.0/4.0
  *
- * Copyright (C) 2019 Renesas Electronics Corp.
+ * Copyright (C) 2020 Renesas Electronics Corp.
  */
 
 /dts-v1/;
 #include "r8a774b1.dtsi"
-#include "hihope-common.dtsi"
+#include "hihope-rev4.dtsi"
 
 / {
        model = "HopeRun HiHope RZ/G2N main board based on r8a774b1";
index 1e51855..49e5add 100644 (file)
@@ -10,6 +10,8 @@
 #include <dt-bindings/clock/r8a774b1-cpg-mssr.h>
 #include <dt-bindings/power/r8a774b1-sysc.h>
 
+#define CPG_AUDIO_CLK_I                R8A774B1_CLK_S0D4
+
 / {
        compatible = "renesas,r8a774b1";
        #address-cells = <2>;
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a774b1",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee100000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee120000 {
+               sdhi1: mmc@ee120000 {
                        compatible = "renesas,sdhi-r8a774b1",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee120000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee140000 {
+               sdhi2: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a774b1",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee140000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
+               sdhi3: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a774b1",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee160000 0 0x2000>;
index 5c72a7e..4217119 100644 (file)
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a774c0",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee100000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee120000 {
+               sdhi1: mmc@ee120000 {
                        compatible = "renesas,sdhi-r8a774c0",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee120000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
+               sdhi3: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a774c0",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee160000 0 0x2000>;
diff --git a/arch/arm64/boot/dts/renesas/r8a774e1-hihope-rzg2h-ex.dts b/arch/arm64/boot/dts/renesas/r8a774e1-hihope-rzg2h-ex.dts
new file mode 100644 (file)
index 0000000..265355e
--- /dev/null
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2H sub board
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+
+#include "r8a774e1-hihope-rzg2h.dts"
+#include "hihope-rzg2-ex.dtsi"
+
+/ {
+       model = "HopeRun HiHope RZ/G2H with sub board";
+       compatible = "hoperun,hihope-rzg2-ex", "hoperun,hihope-rzg2h",
+                    "renesas,r8a774e1";
+};
diff --git a/arch/arm64/boot/dts/renesas/r8a774e1-hihope-rzg2h.dts b/arch/arm64/boot/dts/renesas/r8a774e1-hihope-rzg2h.dts
new file mode 100644 (file)
index 0000000..cdbe527
--- /dev/null
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the HiHope RZ/G2H main board
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+
+/dts-v1/;
+#include "r8a774e1.dtsi"
+#include "hihope-rev4.dtsi"
+
+/ {
+       model = "HopeRun HiHope RZ/G2H main board based on r8a774e1";
+       compatible = "hoperun,hihope-rzg2h", "renesas,r8a774e1";
+
+       memory@48000000 {
+               device_type = "memory";
+               /* first 128MB is reserved for secure area. */
+               reg = <0x0 0x48000000 0x0 0x78000000>;
+       };
+
+       memory@500000000 {
+               device_type = "memory";
+               reg = <0x5 0x00000000 0x0 0x80000000>;
+       };
+};
diff --git a/arch/arm64/boot/dts/renesas/r8a774e1.dtsi b/arch/arm64/boot/dts/renesas/r8a774e1.dtsi
new file mode 100644 (file)
index 0000000..0f86cfd
--- /dev/null
@@ -0,0 +1,1664 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the r8a774e1 SoC
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/r8a774e1-cpg-mssr.h>
+#include <dt-bindings/power/r8a774e1-sysc.h>
+
+#define CPG_AUDIO_CLK_I                R8A774E1_CLK_S0D4
+
+/ {
+       compatible = "renesas,r8a774e1";
+       #address-cells = <2>;
+       #size-cells = <2>;
+
+       /*
+        * 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_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 = <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-suspend;
+               };
+       };
+
+       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>;
+
+               cpu-map {
+                       cluster0 {
+                               core0 {
+                                       cpu = <&a57_0>;
+                               };
+                               core1 {
+                                       cpu = <&a57_1>;
+                               };
+                               core2 {
+                                       cpu = <&a57_2>;
+                               };
+                               core3 {
+                                       cpu = <&a57_3>;
+                               };
+                       };
+
+                       cluster1 {
+                               core0 {
+                                       cpu = <&a53_0>;
+                               };
+                               core1 {
+                                       cpu = <&a53_1>;
+                               };
+                               core2 {
+                                       cpu = <&a53_2>;
+                               };
+                               core3 {
+                                       cpu = <&a53_3>;
+                               };
+                       };
+               };
+
+               a57_0: cpu@0 {
+                       compatible = "arm,cortex-a57";
+                       reg = <0x0>;
+                       device_type = "cpu";
+                       power-domains = <&sysc R8A774E1_PD_CA57_CPU0>;
+                       next-level-cache = <&L2_CA57>;
+                       enable-method = "psci";
+                       dynamic-power-coefficient = <854>;
+                       clocks = <&cpg CPG_CORE R8A774E1_CLK_Z>;
+                       operating-points-v2 = <&cluster0_opp>;
+                       capacity-dmips-mhz = <1024>;
+                       #cooling-cells = <2>;
+               };
+
+               a57_1: cpu@1 {
+                       compatible = "arm,cortex-a57";
+                       reg = <0x1>;
+                       device_type = "cpu";
+                       power-domains = <&sysc R8A774E1_PD_CA57_CPU1>;
+                       next-level-cache = <&L2_CA57>;
+                       enable-method = "psci";
+                       clocks = <&cpg CPG_CORE R8A774E1_CLK_Z>;
+                       operating-points-v2 = <&cluster0_opp>;
+                       capacity-dmips-mhz = <1024>;
+                       #cooling-cells = <2>;
+               };
+
+               a57_2: cpu@2 {
+                       compatible = "arm,cortex-a57";
+                       reg = <0x2>;
+                       device_type = "cpu";
+                       power-domains = <&sysc R8A774E1_PD_CA57_CPU2>;
+                       next-level-cache = <&L2_CA57>;
+                       enable-method = "psci";
+                       clocks = <&cpg CPG_CORE R8A774E1_CLK_Z>;
+                       operating-points-v2 = <&cluster0_opp>;
+                       capacity-dmips-mhz = <1024>;
+                       #cooling-cells = <2>;
+               };
+
+               a57_3: cpu@3 {
+                       compatible = "arm,cortex-a57";
+                       reg = <0x3>;
+                       device_type = "cpu";
+                       power-domains = <&sysc R8A774E1_PD_CA57_CPU3>;
+                       next-level-cache = <&L2_CA57>;
+                       enable-method = "psci";
+                       clocks = <&cpg CPG_CORE R8A774E1_CLK_Z>;
+                       operating-points-v2 = <&cluster0_opp>;
+                       capacity-dmips-mhz = <1024>;
+                       #cooling-cells = <2>;
+               };
+
+               a53_0: cpu@100 {
+                       compatible = "arm,cortex-a53";
+                       reg = <0x100>;
+                       device_type = "cpu";
+                       power-domains = <&sysc R8A774E1_PD_CA53_CPU0>;
+                       next-level-cache = <&L2_CA53>;
+                       enable-method = "psci";
+                       #cooling-cells = <2>;
+                       dynamic-power-coefficient = <277>;
+                       clocks = <&cpg CPG_CORE R8A774E1_CLK_Z2>;
+                       operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
+               };
+
+               a53_1: cpu@101 {
+                       compatible = "arm,cortex-a53";
+                       reg = <0x101>;
+                       device_type = "cpu";
+                       power-domains = <&sysc R8A774E1_PD_CA53_CPU1>;
+                       next-level-cache = <&L2_CA53>;
+                       enable-method = "psci";
+                       clocks = <&cpg CPG_CORE R8A774E1_CLK_Z2>;
+                       operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
+               };
+
+               a53_2: cpu@102 {
+                       compatible = "arm,cortex-a53";
+                       reg = <0x102>;
+                       device_type = "cpu";
+                       power-domains = <&sysc R8A774E1_PD_CA53_CPU2>;
+                       next-level-cache = <&L2_CA53>;
+                       enable-method = "psci";
+                       clocks = <&cpg CPG_CORE R8A774E1_CLK_Z2>;
+                       operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
+               };
+
+               a53_3: cpu@103 {
+                       compatible = "arm,cortex-a53";
+                       reg = <0x103>;
+                       device_type = "cpu";
+                       power-domains = <&sysc R8A774E1_PD_CA53_CPU3>;
+                       next-level-cache = <&L2_CA53>;
+                       enable-method = "psci";
+                       clocks = <&cpg CPG_CORE R8A774E1_CLK_Z2>;
+                       operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
+               };
+
+               L2_CA57: cache-controller-0 {
+                       compatible = "cache";
+                       power-domains = <&sysc R8A774E1_PD_CA57_SCU>;
+                       cache-unified;
+                       cache-level = <2>;
+               };
+
+               L2_CA53: cache-controller-1 {
+                       compatible = "cache";
+                       power-domains = <&sysc R8A774E1_PD_CA53_SCU>;
+                       cache-unified;
+                       cache-level = <2>;
+               };
+       };
+
+       extal_clk: extal {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               /* This value must be overridden by the board */
+               clock-frequency = <0>;
+       };
+
+       extalr_clk: extalr {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               /* This value must be overridden by the board */
+               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>;
+       };
+
+       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>,
+                                     <&gic GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 87 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>,
+                                     <&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";
+       };
+
+       /* External SCIF clock - to be overridden by boards that provide it */
+       scif_clk: scif {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       soc {
+               compatible = "simple-bus";
+               interrupt-parent = <&gic>;
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a774e1-wdt",
+                                    "renesas,rcar-gen3-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
+               };
+
+               gpio0: gpio@e6050000 {
+                       compatible = "renesas,gpio-r8a774e1",
+                                    "renesas,rcar-gen3-gpio";
+                       reg = <0 0xe6050000 0 0x50>;
+                       interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 0 16>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 912>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 912>;
+               };
+
+               gpio1: gpio@e6051000 {
+                       compatible = "renesas,gpio-r8a774e1",
+                                    "renesas,rcar-gen3-gpio";
+                       reg = <0 0xe6051000 0 0x50>;
+                       interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 32 29>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 911>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 911>;
+               };
+
+               gpio2: gpio@e6052000 {
+                       compatible = "renesas,gpio-r8a774e1",
+                                    "renesas,rcar-gen3-gpio";
+                       reg = <0 0xe6052000 0 0x50>;
+                       interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 64 15>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 910>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 910>;
+               };
+
+               gpio3: gpio@e6053000 {
+                       compatible = "renesas,gpio-r8a774e1",
+                                    "renesas,rcar-gen3-gpio";
+                       reg = <0 0xe6053000 0 0x50>;
+                       interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 96 16>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 909>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 909>;
+               };
+
+               gpio4: gpio@e6054000 {
+                       compatible = "renesas,gpio-r8a774e1",
+                                    "renesas,rcar-gen3-gpio";
+                       reg = <0 0xe6054000 0 0x50>;
+                       interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 128 18>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 908>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 908>;
+               };
+
+               gpio5: gpio@e6055000 {
+                       compatible = "renesas,gpio-r8a774e1",
+                                    "renesas,rcar-gen3-gpio";
+                       reg = <0 0xe6055000 0 0x50>;
+                       interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 160 26>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 907>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 907>;
+               };
+
+               gpio6: gpio@e6055400 {
+                       compatible = "renesas,gpio-r8a774e1",
+                                    "renesas,rcar-gen3-gpio";
+                       reg = <0 0xe6055400 0 0x50>;
+                       interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 192 32>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 906>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 906>;
+               };
+
+               gpio7: gpio@e6055800 {
+                       compatible = "renesas,gpio-r8a774e1",
+                                    "renesas,rcar-gen3-gpio";
+                       reg = <0 0xe6055800 0 0x50>;
+                       interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 224 4>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 905>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 905>;
+               };
+
+               pfc: pin-controller@e6060000 {
+                       compatible = "renesas,pfc-r8a774e1";
+                       reg = <0 0xe6060000 0 0x50c>;
+               };
+
+               cmt0: timer@e60f0000 {
+                       compatible = "renesas,r8a774e1-cmt0",
+                                    "renesas,rcar-gen3-cmt0";
+                       reg = <0 0xe60f0000 0 0x1004>;
+                       interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 303>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 303>;
+                       status = "disabled";
+               };
+
+               cmt1: timer@e6130000 {
+                       compatible = "renesas,r8a774e1-cmt1",
+                                    "renesas,rcar-gen3-cmt1";
+                       reg = <0 0xe6130000 0 0x1004>;
+                       interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 302>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 302>;
+                       status = "disabled";
+               };
+
+               cmt2: timer@e6140000 {
+                       compatible = "renesas,r8a774e1-cmt1",
+                                    "renesas,rcar-gen3-cmt1";
+                       reg = <0 0xe6140000 0 0x1004>;
+                       interrupts = <GIC_SPI 398 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 399 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 400 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 401 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 402 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 403 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 404 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 405 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 301>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 301>;
+                       status = "disabled";
+               };
+
+               cmt3: timer@e6148000 {
+                       compatible = "renesas,r8a774e1-cmt1",
+                                    "renesas,rcar-gen3-cmt1";
+                       reg = <0 0xe6148000 0 0x1004>;
+                       interrupts = <GIC_SPI 470 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 471 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 472 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 473 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 474 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 475 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 476 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 477 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 300>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 300>;
+                       status = "disabled";
+               };
+
+               cpg: clock-controller@e6150000 {
+                       compatible = "renesas,r8a774e1-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,r8a774e1-rst";
+                       reg = <0 0xe6160000 0 0x0200>;
+               };
+
+               sysc: system-controller@e6180000 {
+                       compatible = "renesas,r8a774e1-sysc";
+                       reg = <0 0xe6180000 0 0x0400>;
+                       #power-domain-cells = <1>;
+               };
+
+               tsc: thermal@e6198000 {
+                       compatible = "renesas,r8a774e1-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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 522>;
+                       #thermal-sensor-cells = <1>;
+               };
+
+               intc_ex: interrupt-controller@e61c0000 {
+                       compatible = "renesas,intc-ex-r8a774e1", "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 407>;
+               };
+
+               tmu0: timer@e61e0000 {
+                       compatible = "renesas,tmu-r8a774e1", "renesas,tmu";
+                       reg = <0 0xe61e0000 0 0x30>;
+                       interrupts = <GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 125>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 125>;
+                       status = "disabled";
+               };
+
+               tmu1: timer@e6fc0000 {
+                       compatible = "renesas,tmu-r8a774e1", "renesas,tmu";
+                       reg = <0 0xe6fc0000 0 0x30>;
+                       interrupts = <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 124>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 124>;
+                       status = "disabled";
+               };
+
+               tmu2: timer@e6fd0000 {
+                       compatible = "renesas,tmu-r8a774e1", "renesas,tmu";
+                       reg = <0 0xe6fd0000 0 0x30>;
+                       interrupts = <GIC_SPI 303 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 304 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 305 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 123>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 123>;
+                       status = "disabled";
+               };
+
+               tmu3: timer@e6fe0000 {
+                       compatible = "renesas,tmu-r8a774e1", "renesas,tmu";
+                       reg = <0 0xe6fe0000 0 0x30>;
+                       interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 122>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 122>;
+                       status = "disabled";
+               };
+
+               tmu4: timer@ffc00000 {
+                       compatible = "renesas,tmu-r8a774e1", "renesas,tmu";
+                       reg = <0 0xffc00000 0 0x30>;
+                       interrupts = <GIC_SPI 406 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 407 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 408 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 121>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 121>;
+                       status = "disabled";
+               };
+
+               i2c0: i2c@e6500000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a774e1",
+                                    "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 R8A774E1_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";
+               };
+
+               i2c1: i2c@e6508000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a774e1",
+                                    "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 R8A774E1_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-r8a774e1",
+                                    "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 R8A774E1_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-r8a774e1",
+                                    "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 R8A774E1_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-r8a774e1",
+                                    "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 R8A774E1_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-r8a774e1",
+                                    "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 R8A774E1_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-r8a774e1",
+                                    "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 R8A774E1_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-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 926>;
+                       dmas = <&dmac0 0x11>, <&dmac0 0x10>;
+                       dma-names = "tx", "rx";
+                       status = "disabled";
+               };
+
+               hscif0: serial@e6540000 {
+                       compatible = "renesas,hscif-r8a774e1",
+                                    "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 R8A774E1_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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 520>;
+                       status = "disabled";
+               };
+
+               hscif1: serial@e6550000 {
+                       compatible = "renesas,hscif-r8a774e1",
+                                    "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 R8A774E1_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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 519>;
+                       status = "disabled";
+               };
+
+               hscif2: serial@e6560000 {
+                       compatible = "renesas,hscif-r8a774e1",
+                                    "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 R8A774E1_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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 518>;
+                       status = "disabled";
+               };
+
+               hscif3: serial@e66a0000 {
+                       compatible = "renesas,hscif-r8a774e1",
+                                    "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 R8A774E1_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x37>, <&dmac0 0x36>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 517>;
+                       status = "disabled";
+               };
+
+               hscif4: serial@e66b0000 {
+                       compatible = "renesas,hscif-r8a774e1",
+                                    "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 R8A774E1_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x39>, <&dmac0 0x38>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 516>;
+                       status = "disabled";
+               };
+
+               hsusb: usb@e6590000 {
+                       reg = <0 0xe6590000 0 0x200>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               usb3_phy0: usb-phy@e65ee000 {
+                       reg = <0 0xe65ee000 0 0x90>;
+                       #phy-cells = <0>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               dmac0: dma-controller@e6700000 {
+                       compatible = "renesas,dmac-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 219>;
+                       #dma-cells = <1>;
+                       dma-channels = <16>;
+                       iommus = <&ipmmu_ds0 0>, <&ipmmu_ds0 1>,
+                                <&ipmmu_ds0 2>, <&ipmmu_ds0 3>,
+                                <&ipmmu_ds0 4>, <&ipmmu_ds0 5>,
+                                <&ipmmu_ds0 6>, <&ipmmu_ds0 7>,
+                                <&ipmmu_ds0 8>, <&ipmmu_ds0 9>,
+                                <&ipmmu_ds0 10>, <&ipmmu_ds0 11>,
+                                <&ipmmu_ds0 12>, <&ipmmu_ds0 13>,
+                                <&ipmmu_ds0 14>, <&ipmmu_ds0 15>;
+               };
+
+               dmac1: dma-controller@e7300000 {
+                       compatible = "renesas,dmac-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 218>;
+                       #dma-cells = <1>;
+                       dma-channels = <16>;
+                       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>,
+                                <&ipmmu_ds1 8>, <&ipmmu_ds1 9>,
+                                <&ipmmu_ds1 10>, <&ipmmu_ds1 11>,
+                                <&ipmmu_ds1 12>, <&ipmmu_ds1 13>,
+                                <&ipmmu_ds1 14>, <&ipmmu_ds1 15>;
+               };
+
+               dmac2: dma-controller@e7310000 {
+                       compatible = "renesas,dmac-r8a774e1",
+                                    "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>,
+                                    <GIC_SPI 425 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 426 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 427 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 428 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 429 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 430 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 431 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 397 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 217>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 217>;
+                       #dma-cells = <1>;
+                       dma-channels = <16>;
+                       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 24>, <&ipmmu_ds1 25>,
+                                <&ipmmu_ds1 26>, <&ipmmu_ds1 27>,
+                                <&ipmmu_ds1 28>, <&ipmmu_ds1 29>,
+                                <&ipmmu_ds1 30>, <&ipmmu_ds1 31>;
+               };
+
+               ipmmu_ds0: iommu@e6740000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xe6740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 0>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_ds1: iommu@e7740000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xe7740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 1>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_hc: iommu@e6570000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xe6570000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 2>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mm: iommu@e67b0000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xe67b0000 0 0x1000>;
+                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mp0: iommu@ec670000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xec670000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 4>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv0: iommu@fd800000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xfd800000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 6>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv1: iommu@fd950000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xfd950000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 7>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv2: iommu@fd960000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xfd960000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 8>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv3: iommu@fd970000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xfd970000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 9>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vc0: iommu@fe6b0000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xfe6b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 12>;
+                       power-domains = <&sysc R8A774E1_PD_A3VC>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vc1: iommu@fe6f0000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xfe6f0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 13>;
+                       power-domains = <&sysc R8A774E1_PD_A3VC>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vi0: iommu@febd0000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xfebd0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 14>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vi1: iommu@febe0000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xfebe0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 15>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vp0: iommu@fe990000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xfe990000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 16>;
+                       power-domains = <&sysc R8A774E1_PD_A3VP>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vp1: iommu@fe980000 {
+                       compatible = "renesas,ipmmu-r8a774e1";
+                       reg = <0 0xfe980000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 17>;
+                       power-domains = <&sysc R8A774E1_PD_A3VP>;
+                       #iommu-cells = <1>;
+               };
+
+               avb: ethernet@e6800000 {
+                       compatible = "renesas,etheravb-r8a774e1",
+                                    "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 R8A774E1_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-r8a774e1",
+                                    "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 R8A774E1_CLK_CANFD>,
+                                <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A774E1_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 916>;
+                       status = "disabled";
+               };
+
+               can1: can@e6c38000 {
+                       compatible = "renesas,can-r8a774e1",
+                                    "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 R8A774E1_CLK_CANFD>,
+                                <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A774E1_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 915>;
+                       status = "disabled";
+               };
+
+               canfd: can@e66c0000 {
+                       compatible = "renesas,r8a774e1-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 R8A774E1_CLK_CANFD>,
+                                <&can_clk>;
+                       clock-names = "fck", "canfd", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A774E1_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 914>;
+                       status = "disabled";
+
+                       channel0 {
+                               status = "disabled";
+                       };
+
+                       channel1 {
+                               status = "disabled";
+                       };
+               };
+
+               pwm0: pwm@e6e30000 {
+                       reg = <0 0xe6e30000 0 0x8>;
+                       #pwm-cells = <2>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               scif0: serial@e6e60000 {
+                       compatible = "renesas,scif-r8a774e1",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e60000 0 0x40>;
+                       interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 207>,
+                                <&cpg CPG_CORE R8A774E1_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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 207>;
+                       status = "disabled";
+               };
+
+               scif1: serial@e6e68000 {
+                       compatible = "renesas,scif-r8a774e1",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e68000 0 0x40>;
+                       interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 206>,
+                                <&cpg CPG_CORE R8A774E1_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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 206>;
+                       status = "disabled";
+               };
+
+               scif2: serial@e6e88000 {
+                       compatible = "renesas,scif-r8a774e1",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e88000 0 0x40>;
+                       interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 310>,
+                                <&cpg CPG_CORE R8A774E1_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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 310>;
+                       status = "disabled";
+               };
+
+               scif3: serial@e6c50000 {
+                       compatible = "renesas,scif-r8a774e1",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6c50000 0 0x40>;
+                       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 204>,
+                                <&cpg CPG_CORE R8A774E1_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x57>, <&dmac0 0x56>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 204>;
+                       status = "disabled";
+               };
+
+               scif4: serial@e6c40000 {
+                       compatible = "renesas,scif-r8a774e1",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6c40000 0 0x40>;
+                       interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 203>,
+                                <&cpg CPG_CORE R8A774E1_CLK_S3D1>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x59>, <&dmac0 0x58>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 203>;
+                       status = "disabled";
+               };
+
+               scif5: serial@e6f30000 {
+                       compatible = "renesas,scif-r8a774e1",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6f30000 0 0x40>;
+                       interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 202>,
+                                <&cpg CPG_CORE R8A774E1_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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 202>;
+                       status = "disabled";
+               };
+
+               msiof0: spi@e6e90000 {
+                       compatible = "renesas,msiof-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 211>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof1: spi@e6ea0000 {
+                       compatible = "renesas,msiof-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 210>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof2: spi@e6c00000 {
+                       compatible = "renesas,msiof-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 209>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof3: spi@e6c10000 {
+                       compatible = "renesas,msiof-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 208>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               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 0xec760000 0 0x200>;  /* Audio DMAC peri peri*/
+                       reg-names = "scu", "adg", "ssiu", "ssi", "audmapp";
+
+                       status = "disabled";
+
+                       /* placeholder */
+
+                       rcar_sound,ssi {
+                               ssi2: ssi-2 {
+                                       /* placeholder */
+                               };
+                       };
+               };
+
+               xhci0: usb@ee000000 {
+                       reg = <0 0xee000000 0 0xc00>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               usb3_peri0: usb@ee020000 {
+                       reg = <0 0xee020000 0 0x400>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               ohci0: usb@ee080000 {
+                       reg = <0 0xee080000 0 0x100>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               ohci1: usb@ee0a0000 {
+                       reg = <0 0xee0a0000 0 0x100>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               ehci0: usb@ee080100 {
+                       reg = <0 0xee080100 0 0x100>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               ehci1: usb@ee0a0100 {
+                       reg = <0 0xee0a0100 0 0x100>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               usb2_phy0: usb-phy@ee080200 {
+                       reg = <0 0xee080200 0 0x700>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               usb2_phy1: usb-phy@ee0a0200 {
+                       reg = <0 0xee0a0200 0 0x700>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               sdhi0: mmc@ee100000 {
+                       compatible = "renesas,sdhi-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 314>;
+                       iommus = <&ipmmu_ds1 32>;
+                       status = "disabled";
+               };
+
+               sdhi1: mmc@ee120000 {
+                       compatible = "renesas,sdhi-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 313>;
+                       iommus = <&ipmmu_ds1 33>;
+                       status = "disabled";
+               };
+
+               sdhi2: mmc@ee140000 {
+                       compatible = "renesas,sdhi-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 312>;
+                       iommus = <&ipmmu_ds1 34>;
+                       status = "disabled";
+               };
+
+               sdhi3: mmc@ee160000 {
+                       compatible = "renesas,sdhi-r8a774e1",
+                                    "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 R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 311>;
+                       iommus = <&ipmmu_ds1 35>;
+                       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(8) | IRQ_TYPE_LEVEL_HIGH)>;
+                       clocks = <&cpg CPG_MOD 408>;
+                       clock-names = "clk";
+                       power-domains = <&sysc R8A774E1_PD_ALWAYS_ON>;
+                       resets = <&cpg 408>;
+               };
+
+               pciec0: pcie@fe000000 {
+                       reg = <0 0xfe000000 0 0x80000>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       status = "disabled";
+
+                       /* placeholder */
+               };
+
+               hdmi0: hdmi@fead0000 {
+                       reg = <0 0xfead0000 0 0x10000>;
+                       status = "disabled";
+
+                       /* placeholder */
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
+                                       reg = <0>;
+                               };
+                               port@1 {
+                                       reg = <1>;
+                               };
+                               port@2 {
+                                       reg = <2>;
+                               };
+                       };
+               };
+
+               du: display@feb00000 {
+                       reg = <0 0xfeb00000 0 0x80000>;
+                       status = "disabled";
+
+                       /* placeholder */
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
+                                       reg = <0>;
+                               };
+                               port@1 {
+                                       reg = <1>;
+                               };
+                               port@2 {
+                                       reg = <2>;
+                               };
+                       };
+               };
+
+               prr: chipid@fff00044 {
+                       compatible = "renesas,prr";
+                       reg = <0 0xfff00044 0 4>;
+               };
+       };
+
+       thermal-zones {
+               sensor_thermal1: sensor-thermal1 {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&tsc 0>;
+                       sustainable-power = <6313>;
+
+                       trips {
+                               sensor1_crit: sensor1-crit {
+                                       temperature = <120000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               sensor_thermal2: sensor-thermal2 {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&tsc 1>;
+                       sustainable-power = <6313>;
+
+                       trips {
+                               sensor2_crit: sensor2-crit {
+                                       temperature = <120000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               sensor_thermal3: sensor-thermal3 {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&tsc 2>;
+                       sustainable-power = <6313>;
+
+                       trips {
+                               target: trip-point1 {
+                                       temperature = <100000>;
+                                       hysteresis = <1000>;
+                                       type = "passive";
+                               };
+
+                               sensor3_crit: sensor3-crit {
+                                       temperature = <120000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                               map0 {
+                                       trip = <&target>;
+                                       cooling-device = <&a57_0 0 2>;
+                                       contribution = <1024>;
+                               };
+
+                               map1 {
+                                       trip = <&target>;
+                                       cooling-device = <&a53_0 0 2>;
+                                       contribution = <1024>;
+                               };
+                       };
+               };
+       };
+
+       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";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       usb_extal_clk: usb_extal {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+};
index 61d67d9..9beb8e7 100644 (file)
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a7795",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee100000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee120000 {
+               sdhi1: mmc@ee120000 {
                        compatible = "renesas,sdhi-r8a7795",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee120000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee140000 {
+               sdhi2: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a7795",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee140000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
+               sdhi3: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a7795",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee160000 0 0x2000>;
index 33bf62a..4dfb7f0 100644 (file)
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a7796",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee100000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee120000 {
+               sdhi1: mmc@ee120000 {
                        compatible = "renesas,sdhi-r8a7796",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee120000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee140000 {
+               sdhi2: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a7796",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee140000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
+               sdhi3: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a7796",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee160000 0 0x2000>;
index 760e738..542c44c 100644 (file)
                        dma-channels = <16>;
                };
 
+               ipmmu_ds0: iommu@e6740000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xe6740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 0>;
+                       power-domains = <&sysc R8A77961_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_ds1: iommu@e7740000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xe7740000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 1>;
+                       power-domains = <&sysc R8A77961_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_hc: iommu@e6570000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xe6570000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 2>;
+                       power-domains = <&sysc R8A77961_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_ir: iommu@ff8b0000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xff8b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 3>;
+                       power-domains = <&sysc R8A77961_PD_A3IR>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mm: iommu@e67b0000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xe67b0000 0 0x1000>;
+                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
+                       power-domains = <&sysc R8A77961_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_mp: iommu@ec670000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xec670000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 4>;
+                       power-domains = <&sysc R8A77961_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv0: iommu@fd800000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xfd800000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 5>;
+                       power-domains = <&sysc R8A77961_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_pv1: iommu@fd950000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xfd950000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 6>;
+                       power-domains = <&sysc R8A77961_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_rt: iommu@ffc80000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xffc80000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 7>;
+                       power-domains = <&sysc R8A77961_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vc0: iommu@fe6b0000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xfe6b0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 8>;
+                       power-domains = <&sysc R8A77961_PD_A3VC>;
+                       #iommu-cells = <1>;
+               };
+
+               ipmmu_vi0: iommu@febd0000 {
+                       compatible = "renesas,ipmmu-r8a77961";
+                       reg = <0 0xfebd0000 0 0x1000>;
+                       renesas,ipmmu-main = <&ipmmu_mm 9>;
+                       power-domains = <&sysc R8A77961_PD_ALWAYS_ON>;
+                       #iommu-cells = <1>;
+               };
+
                avb: ethernet@e6800000 {
                        compatible = "renesas,etheravb-r8a77961",
                                     "renesas,etheravb-rcar-gen3";
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a77961",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee100000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee120000 {
+               sdhi1: mmc@ee120000 {
                        compatible = "renesas,sdhi-r8a77961",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee120000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee140000 {
+               sdhi2: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a77961",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee140000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
+               sdhi3: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a77961",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee160000 0 0x2000>;
index 6f7ab39..fe4dc12 100644 (file)
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a77965",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee100000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee120000 {
+               sdhi1: mmc@ee120000 {
                        compatible = "renesas,sdhi-r8a77965",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee120000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi2: sd@ee140000 {
+               sdhi2: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a77965",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee140000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
+               sdhi3: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a77965",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee160000 0 0x2000>;
index ac2156a..5c28f30 100644 (file)
                function = "i2c0";
        };
 
+       qspi0_pins: qspi0 {
+               groups = "qspi0_ctrl", "qspi0_data4";
+               function = "qspi0";
+       };
+
        scif0_pins: scif0 {
                groups = "scif0_data";
                function = "scif0";
        };
 };
 
+&rpc {
+       pinctrl-0 = <&qspi0_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       flash@0 {
+               compatible = "spansion,s25fs512s", "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+               spi-rx-bus-width = <4>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       bootparam@0 {
+                               reg = <0x00000000 0x040000>;
+                               read-only;
+                       };
+                       cr7@40000 {
+                               reg = <0x00040000 0x080000>;
+                               read-only;
+                       };
+                       cert_header_sa3@c0000 {
+                               reg = <0x000c0000 0x080000>;
+                               read-only;
+                       };
+                       bl2@140000 {
+                               reg = <0x00140000 0x040000>;
+                               read-only;
+                       };
+                       cert_header_sa6@180000 {
+                               reg = <0x00180000 0x040000>;
+                               read-only;
+                       };
+                       bl31@1c0000 {
+                               reg = <0x001c0000 0x460000>;
+                               read-only;
+                       };
+                       uboot@640000 {
+                               reg = <0x00640000 0x0c0000>;
+                               read-only;
+                       };
+                       uboot-env@700000 {
+                               reg = <0x00700000 0x040000>;
+                               read-only;
+                       };
+                       dtb@740000 {
+                               reg = <0x00740000 0x080000>;
+                       };
+                       kernel@7c0000 {
+                               reg = <0x007c0000 0x1400000>;
+                       };
+                       user@1bc0000 {
+                               reg = <0x01bc0000 0x2440000>;
+                       };
+               };
+       };
+};
+
 &rwdt {
        timeout-sec = <60>;
        status = "okay";
index 01c4ba0..668a1ec 100644 (file)
                power-source = <3300>;
        };
 
+       qspi0_pins: qspi0 {
+               groups = "qspi0_ctrl", "qspi0_data4";
+               function = "qspi0";
+       };
+
        scif0_pins: scif0 {
                groups = "scif0_data";
                function = "scif0";
        };
 };
 
+&rpc {
+       pinctrl-0 = <&qspi0_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       flash@0 {
+               compatible = "spansion,s25fs512s", "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+               spi-rx-bus-width = <4>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       bootparam@0 {
+                               reg = <0x00000000 0x040000>;
+                               read-only;
+                       };
+                       cr7@40000 {
+                               reg = <0x00040000 0x080000>;
+                               read-only;
+                       };
+                       cert_header_sa3@c0000 {
+                               reg = <0x000c0000 0x080000>;
+                               read-only;
+                       };
+                       bl2@140000 {
+                               reg = <0x00140000 0x040000>;
+                               read-only;
+                       };
+                       cert_header_sa6@180000 {
+                               reg = <0x00180000 0x040000>;
+                               read-only;
+                       };
+                       bl31@1c0000 {
+                               reg = <0x001c0000 0x460000>;
+                               read-only;
+                       };
+                       uboot@640000 {
+                               reg = <0x00640000 0x0c0000>;
+                               read-only;
+                       };
+                       uboot-env@700000 {
+                               reg = <0x00700000 0x040000>;
+                               read-only;
+                       };
+                       dtb@740000 {
+                               reg = <0x00740000 0x080000>;
+                       };
+                       kernel@7c0000 {
+                               reg = <0x007c0000 0x1400000>;
+                       };
+                       user@1bc0000 {
+                               reg = <0x01bc0000 0x2440000>;
+                       };
+               };
+       };
+};
+
 &scif0 {
        pinctrl-0 = <&scif0_pins>;
        pinctrl-names = "default";
index bd95ecb..2b9124a 100644 (file)
                        status = "disabled";
                };
 
+               rpc: spi@ee200000 {
+                       compatible = "renesas,r8a77970-rpc-if",
+                                    "renesas,rcar-gen3-rpc-if";
+                       reg = <0 0xee200000 0 0x200>,
+                             <0 0x08000000 0 0x4000000>,
+                             <0 0xee208000 0 0x100>;
+                       reg-names = "regs", "dirmap", "wbuf";
+                       interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 917>;
+                       clock-names = "rpc";
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 917>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
                gic: interrupt-controller@f1010000 {
                        compatible = "arm,gic-400";
                        #interrupt-cells = <3>;
index ef8350a..422ec53 100644 (file)
                power-source = <1800>;
        };
 
+       qspi0_pins: qspi0 {
+               groups = "qspi0_ctrl", "qspi0_data4";
+               function = "qspi0";
+       };
+
        scif0_pins: scif0 {
                groups = "scif0_data";
                function = "scif0";
        };
 };
 
+&rpc {
+       pinctrl-0 = <&qspi0_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       flash@0 {
+               compatible = "spansion,s25fs512s", "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+               spi-rx-bus-width = <4>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       bootparam@0 {
+                               reg = <0x00000000 0x040000>;
+                               read-only;
+                       };
+                       cr7@40000 {
+                               reg = <0x00040000 0x080000>;
+                               read-only;
+                       };
+                       cert_header_sa3@c0000 {
+                               reg = <0x000c0000 0x080000>;
+                               read-only;
+                       };
+                       bl2@140000 {
+                               reg = <0x00140000 0x040000>;
+                               read-only;
+                       };
+                       cert_header_sa6@180000 {
+                               reg = <0x00180000 0x040000>;
+                               read-only;
+                       };
+                       bl31@1c0000 {
+                               reg = <0x001c0000 0x460000>;
+                               read-only;
+                       };
+                       uboot@640000 {
+                               reg = <0x00640000 0x0c0000>;
+                               read-only;
+                       };
+                       uboot-env@700000 {
+                               reg = <0x00700000 0x040000>;
+                               read-only;
+                       };
+                       dtb@740000 {
+                               reg = <0x00740000 0x080000>;
+                       };
+                       kernel@7c0000 {
+                               reg = <0x007c0000 0x1400000>;
+                       };
+                       user@1bc0000 {
+                               reg = <0x01bc0000 0x2440000>;
+                       };
+               };
+       };
+};
+
 &rwdt {
        timeout-sec = <60>;
        status = "okay";
index 6dff046..7838dce 100644 (file)
                function = "i2c0";
        };
 
+       qspi0_pins: qspi0 {
+               groups = "qspi0_ctrl", "qspi0_data4";
+               function = "qspi0";
+       };
+
        scif0_pins: scif0 {
                groups = "scif0_data";
                function = "scif0";
        };
 };
 
+&rpc {
+       pinctrl-0 = <&qspi0_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       flash@0 {
+               compatible = "spansion,s25fs512s", "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+               spi-rx-bus-width = <4>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       bootparam@0 {
+                               reg = <0x00000000 0x040000>;
+                               read-only;
+                       };
+                       cr7@40000 {
+                               reg = <0x00040000 0x080000>;
+                               read-only;
+                       };
+                       cert_header_sa3@c0000 {
+                               reg = <0x000c0000 0x080000>;
+                               read-only;
+                       };
+                       bl2@140000 {
+                               reg = <0x00140000 0x040000>;
+                               read-only;
+                       };
+                       cert_header_sa6@180000 {
+                               reg = <0x00180000 0x040000>;
+                               read-only;
+                       };
+                       bl31@1c0000 {
+                               reg = <0x001c0000 0x460000>;
+                               read-only;
+                       };
+                       uboot@640000 {
+                               reg = <0x00640000 0x0c0000>;
+                               read-only;
+                       };
+                       uboot-env@700000 {
+                               reg = <0x00700000 0x040000>;
+                               read-only;
+                       };
+                       dtb@740000 {
+                               reg = <0x00740000 0x080000>;
+                       };
+                       kernel@7c0000 {
+                               reg = <0x007c0000 0x1400000>;
+                       };
+                       user@1bc0000 {
+                               reg = <0x01bc0000 0x2440000>;
+                       };
+               };
+       };
+};
+
 &rwdt {
        timeout-sec = <60>;
        status = "okay";
index 387e6d9..59f5bbd 100644 (file)
                        status = "disabled";
                };
 
+               rpc: spi@ee200000 {
+                       compatible = "renesas,r8a77980-rpc-if",
+                                    "renesas,rcar-gen3-rpc-if";
+                       reg = <0 0xee200000 0 0x200>,
+                             <0 0x08000000 0 0x4000000>,
+                             <0 0xee208000 0 0x100>;
+                       reg-names = "regs", "dirmap", "wbuf";
+                       interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 917>;
+                       clock-names = "rpc";
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 917>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
                gic: interrupt-controller@f1010000 {
                        compatible = "arm,gic-400";
                        #interrupt-cells = <3>;
index dc24cec..7402cfa 100644 (file)
        mmc-hs400-1_8v;
        bus-width = <8>;
        non-removable;
+       full-pwr-cycle-in-suspend;
        status = "okay";
 };
 
index cd11f24..1991bdc 100644 (file)
                        status = "disabled";
                };
 
-               sdhi0: sd@ee100000 {
+               sdhi0: mmc@ee100000 {
                        compatible = "renesas,sdhi-r8a77990",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee100000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi1: sd@ee120000 {
+               sdhi1: mmc@ee120000 {
                        compatible = "renesas,sdhi-r8a77990",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee120000 0 0x2000>;
                        status = "disabled";
                };
 
-               sdhi3: sd@ee160000 {
+               sdhi3: mmc@ee160000 {
                        compatible = "renesas,sdhi-r8a77990",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee160000 0 0x2000>;
index e5617ec..2c2272f 100644 (file)
                        status = "disabled";
                };
 
-               sdhi2: sd@ee140000 {
+               sdhi2: mmc@ee140000 {
                        compatible = "renesas,sdhi-r8a77995",
                                     "renesas,rcar-gen3-sdhi";
                        reg = <0 0xee140000 0 0x2000>;
index 98bbcaf..1bf7795 100644 (file)
        mmc-hs400-1_8v;
        non-removable;
        fixed-emmc-driver-type = <1>;
+       full-pwr-cycle-in-suspend;
        status = "okay";
 };
 
index 0a68025..5fe905f 100644 (file)
 };
 
 &emmc {
-       bus-width = <8>;
        cap-mmc-highspeed;
        mmc-hs200-1_8v;
        non-removable;
 };
 
 &sdmmc {
-       bus-width = <4>;
        cap-mmc-highspeed;
        cap-sd-highspeed;
        card-detect-delay = <800>;
 };
 
 &sdio {
-       bus-width = <4>;
        cap-sd-highspeed;
        keep-power-in-suspend;
        non-removable;
index a6b8427..2695ea8 100644 (file)
                        reg = <0x0 0xff240000 0x0 0x4000>;
                        interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC>;
                        clock-names = "apb_pclk";
                        #dma-cells = <1>;
                rockchip,grf = <&grf>;
                rockchip,hw-tshut-temp = <120000>;
                pinctrl-names = "init", "default", "sleep";
-               pinctrl-0 = <&tsadc_otp_gpio>;
+               pinctrl-0 = <&tsadc_otp_pin>;
                pinctrl-1 = <&tsadc_otp_out>;
-               pinctrl-2 = <&tsadc_otp_gpio>;
+               pinctrl-2 = <&tsadc_otp_pin>;
                #thermal-sensor-cells = <1>;
                status = "disabled";
        };
                };
 
                tsadc {
-                       tsadc_otp_gpio: tsadc-otp-gpio {
+                       tsadc_otp_pin: tsadc-otp-pin {
                                rockchip,pins =
                                        <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
index ac7f694..e8b754d 100644 (file)
                        reg = <0x0 0xff2c0000 0x0 0x4000>;
                        interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC0>;
                        clock-names = "apb_pclk";
                        #dma-cells = <1>;
                        reg = <0x0 0xff2d0000 0x0 0x4000>;
                        interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC1>;
                        clock-names = "apb_pclk";
                        #dma-cells = <1>;
                };
 
                tsadc {
-                       tsadc_otp_gpio: tsadc-otp-gpio {
+                       tsadc_otp_pin: tsadc-otp-pin {
                                rockchip,pins =
                                        <0 RK_PB2 0 &pcfg_pull_none>;
                        };
                                        <2 RK_PA3 1 &pcfg_pull_none>;
                        };
 
-                       uart0_rts_gpio: uart0-rts-gpio {
+                       uart0_rts_pin: uart0-rts-pin {
                                rockchip,pins =
                                        <2 RK_PA3 0 &pcfg_pull_none>;
                        };
                                        <4 RK_PA7 1 &pcfg_pull_none>;
                        };
 
-                       uart4_rts_gpio: uart4-rts-gpio {
+                       uart4_rts_pin: uart4-rts-pin {
                                rockchip,pins =
                                        <4 RK_PA7 0 &pcfg_pull_none>;
                        };
index b3a8f93..35bd6b9 100644 (file)
 };
 
 &sdmmc {
-       bus-width = <4>;
        cap-sd-highspeed;
        card-detect-delay = <200>;
        cd-gpios = <&gpio0 RK_PA3 GPIO_ACTIVE_LOW>; /*[> CD GPIO <]*/
index ac29c27..1969dab 100644 (file)
@@ -41,7 +41,7 @@
                compatible = "regulator-fixed";
                gpio = <&gpio0 30 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
-               pinctrl-0 = <&sdmmc0m1_gpio>;
+               pinctrl-0 = <&sdmmc0m1_pin>;
                regulator-name = "vcc_sd";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
index 34db48c..b70ffb1 100644 (file)
@@ -34,7 +34,7 @@
                compatible = "regulator-fixed";
                gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
-               pinctrl-0 = <&sdmmc0m1_gpio>;
+               pinctrl-0 = <&sdmmc0m1_pin>;
                regulator-boot-on;
                regulator-name = "vcc_sd";
                regulator-min-microvolt = <3300000>;
index 6e09c22..86cfb5c 100644 (file)
@@ -25,7 +25,7 @@
                compatible = "regulator-fixed";
                gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
-               pinctrl-0 = <&sdmmc0m1_gpio>;
+               pinctrl-0 = <&sdmmc0m1_pin>;
                regulator-name = "vcc_sd";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
index d399883..bbdb19a 100644 (file)
                        reg = <0x0 0xff1f0000 0x0 0x4000>;
                        interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC>;
                        clock-names = "apb_pclk";
                        #dma-cells = <1>;
                clocks = <&cru SCLK_TSADC>, <&cru PCLK_TSADC>;
                clock-names = "tsadc", "apb_pclk";
                pinctrl-names = "init", "default", "sleep";
-               pinctrl-0 = <&otp_gpio>;
+               pinctrl-0 = <&otp_pin>;
                pinctrl-1 = <&otp_out>;
-               pinctrl-2 = <&otp_gpio>;
+               pinctrl-2 = <&otp_pin>;
                resets = <&cru SRST_TSADC>;
                reset-names = "tsadc-apb";
                rockchip,grf = <&grf>;
                                rockchip,pins = <0 RK_PA5 2 &pcfg_pull_none>,
                                                <0 RK_PA6 2 &pcfg_pull_none>;
                        };
-                       i2c3_gpio: i2c3-gpio {
+                       i2c3_pins: i2c3-pins {
                                rockchip,pins =
                                        <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>,
                                        <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
                tsadc {
-                       otp_gpio: otp-gpio {
+                       otp_pin: otp-pin {
                                rockchip,pins = <2 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
 
                                rockchip,pins = <1 RK_PB2 1 &pcfg_pull_none>;
                        };
 
-                       uart0_rts_gpio: uart0-rts-gpio {
+                       uart0_rts_pin: uart0-rts-pin {
                                rockchip,pins = <1 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
                };
                                rockchip,pins = <3 RK_PA5 4 &pcfg_pull_none>;
                        };
 
-                       uart1_rts_gpio: uart1-rts-gpio {
+                       uart1_rts_pin: uart1-rts-pin {
                                rockchip,pins = <3 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
                };
                                rockchip,pins = <2 RK_PA7 1 &pcfg_pull_up_4ma>;
                        };
 
-                       sdmmc0m0_gpio: sdmmc0m0-gpio {
+                       sdmmc0m0_pin: sdmmc0m0-pin {
                                rockchip,pins = <2 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up_4ma>;
                        };
                };
                                rockchip,pins = <0 RK_PD6 3 &pcfg_pull_up_4ma>;
                        };
 
-                       sdmmc0m1_gpio: sdmmc0m1-gpio {
+                       sdmmc0m1_pin: sdmmc0m1-pin {
                                rockchip,pins = <0 RK_PD6 RK_FUNC_GPIO &pcfg_pull_up_4ma>;
                        };
                };
                                                <1 RK_PA3 1 &pcfg_pull_up_8ma>;
                        };
 
-                       sdmmc0_gpio: sdmmc0-gpio {
+                       sdmmc0_pins: sdmmc0-pins {
                                rockchip,pins =
                                        <1 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up_4ma>,
                                        <1 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up_4ma>,
                                        <3 RK_PA7 3 &pcfg_pull_up_4ma>;
                        };
 
-                       sdmmc0ext_gpio: sdmmc0ext-gpio {
+                       sdmmc0ext_pins: sdmmc0ext-pins {
                                rockchip,pins =
                                        <3 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up_4ma>,
                                        <3 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up_4ma>,
                                                <1 RK_PC1 1 &pcfg_pull_up_8ma>;
                        };
 
-                       sdmmc1_gpio: sdmmc1-gpio {
+                       sdmmc1_pins: sdmmc1-pins {
                                rockchip,pins =
                                        <1 RK_PB4 RK_FUNC_GPIO &pcfg_pull_up_4ma>,
                                        <1 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up_4ma>,
                        tsadc_int: tsadc-int {
                                rockchip,pins = <2 RK_PB5 2 &pcfg_pull_none>;
                        };
-                       tsadc_gpio: tsadc-gpio {
+                       tsadc_pin: tsadc-pin {
                                rockchip,pins = <2 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
                };
index cbde279..7fcb1ea 100644 (file)
@@ -25,9 +25,9 @@
        };
 
        leds {
-               pinctrl-0 = <&led_pins_module>, <&led_sd_haikou>;
+               pinctrl-0 = <&module_led_pins>, <&sd_card_led_pin>;
 
-               sd-card-led {
+               sd_card_led: led-3 {
                        label = "sd_card_led";
                        gpios = <&gpio0 RK_PD2 GPIO_ACTIVE_HIGH>;
                        linux,default-trigger = "mmc0";
        };
 
        leds {
-               led_sd_haikou: led-sd-gpio {
+               sd_card_led_pin: sd-card-led-pin {
                        rockchip,pins =
                                <0 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
 
        sdmmc {
-               sdmmc_cd_gpio: sdmmc-cd-gpio {
+               sdmmc_cd_pin: sdmmc-cd-pin {
                        rockchip,pins =
                                <2 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
                };
index e17311e..24d28be 100644 (file)
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_module>;
+               pinctrl-0 = <&module_led_pins>;
 
-               module_led1 {
+               module_led1: led-1 {
                        label = "module_led1";
                        gpios = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>;
                        linux,default-trigger = "heartbeat";
                        panic-indicator;
                };
 
-               module_led2 {
+               module_led2: led-2 {
                        label = "module_led2";
                        gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_HIGH>;
                        default-state = "off";
        pinctrl-0 = <&rgmii_pins>;
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 50000>;
-       snps,reset-gpio = <&gpio3 RK_PB3 GPIO_ACTIVE_HIGH>;
+       snps,reset-gpio = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>;
        tx_delay = <0x10>;
        rx_delay = <0x10>;
        status = "okay";
 
 &pinctrl {
        leds {
-               led_pins_module: led-module-gpio {
+               module_led_pins: module-led-pins {
                        rockchip,pins =
                                <2 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>,
                                <3 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
index 1ebb0ee..3746f23 100644 (file)
                                     <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                        arm,pl330-broken-no-flushp;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC_PERI>;
                        clock-names = "apb_pclk";
                };
                                     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
                        #dma-cells = <1>;
                        arm,pl330-broken-no-flushp;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC_BUS>;
                        clock-names = "apb_pclk";
                };
                resets = <&cru SRST_TSADC>;
                reset-names = "tsadc-apb";
                pinctrl-names = "init", "default", "sleep";
-               pinctrl-0 = <&otp_gpio>;
+               pinctrl-0 = <&otp_pin>;
                pinctrl-1 = <&otp_out>;
-               pinctrl-2 = <&otp_gpio>;
+               pinctrl-2 = <&otp_pin>;
                #thermal-sensor-cells = <1>;
                rockchip,hw-tshut-temp = <95000>;
                status = "disabled";
                };
 
                tsadc {
-                       otp_gpio: otp-gpio {
+                       otp_pin: otp-pin {
                                rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
 
index 20b5599..6db1880 100644 (file)
        };
 
        pmic {
-               vsel1_gpio: vsel1-gpio {
+               vsel1_pin: vsel1-pin {
                        rockchip,pins = <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_down>;
                };
 
-               vsel2_gpio: vsel2-gpio {
+               vsel2_pin: vsel2-pin {
                        rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
                };
        };
index 4373ed7..60cd1c1 100644 (file)
@@ -499,7 +499,7 @@ camera: &i2c7 {
 };
 
 /* there is no external pull up, so need to set this pin pull up */
-&sdmmc_cd_gpio {
+&sdmmc_cd_pin {
        rockchip,pins = <1 RK_PB3 RK_FUNC_GPIO &pcfg_pull_up>;
 };
 
index 2f39977..32dcaf2 100644 (file)
@@ -516,7 +516,7 @@ ap_i2c_audio: &i2c8 {
         * configured as SDMMC and not JTAG.
         */
        pinctrl-names = "default";
-       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_cd_gpio
+       pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_cd_pin
                     &sdmmc_bus4>;
 
        bus-width = <4>;
@@ -767,7 +767,7 @@ ap_i2c_audio: &i2c8 {
                };
 
                /* This is where we actually hook up CD; has external pull */
-               sdmmc_cd_gpio: sdmmc-cd-gpio {
+               sdmmc_cd_pin: sdmmc-cd-pin {
                        rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
index bf87fa3..341d074 100644 (file)
                compatible = "silergy,syr827";
                reg = <0x40>;
                regulator-compatible = "fan53555-reg";
-               pinctrl-0 = <&vsel1_gpio>;
+               pinctrl-0 = <&vsel1_pin>;
                regulator-name = "vdd_cpu_b";
                regulator-min-microvolt = <712500>;
                regulator-max-microvolt = <1500000>;
                compatible = "silergy,syr828";
                reg = <0x41>;
                regulator-compatible = "fan53555-reg";
-               pinctrl-0 = <&vsel2_gpio>;
+               pinctrl-0 = <&vsel2_pin>;
                regulator-name = "vdd_gpu";
                regulator-min-microvolt = <712500>;
                regulator-max-microvolt = <1500000>;
                                <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
                };
 
-               vsel1_gpio: vsel1-gpio {
+               vsel1_pin: vsel1-pin {
                        rockchip,pins =
                                <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
                };
 
-               vsel2_gpio: vsel2-gpio {
+               vsel2_pin: vsel2-pin {
                        rockchip,pins =
                                <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
                };
index e87a044..e36837c 100644 (file)
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
-               pinctrl-0 = <&sys_led_gpio>, <&user_led_gpio>;
+               pinctrl-0 = <&sys_led_pin>, <&user_led_pin>;
 
-               sys-led {
+               sys_led: led-0 {
                        label = "sys_led";
                        linux,default-trigger = "heartbeat";
                        gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
                };
 
-               user-led {
+               user_led: led-1 {
                        label = "user_led";
                        default-state = "off";
                        gpios = <&gpio4 RK_PD0 GPIO_ACTIVE_HIGH>;
        };
 
        leds {
-               sys_led_gpio: sys_led-gpio {
+               sys_led_pin: sys-led-pin {
                        rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
-               user_led_gpio: user_led-gpio {
+               user_led_pin: user-led-pin {
                        rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
index 73be38a..1fa80ac 100644 (file)
                reg = <0x40>;
                fcs,suspend-voltage-selector = <1>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vsel1_gpio>;
+               pinctrl-0 = <&vsel1_pin>;
                regulator-name = "vdd_cpu_b";
                regulator-min-microvolt = <712500>;
                regulator-max-microvolt = <1500000>;
                reg = <0x41>;
                fcs,suspend-voltage-selector = <1>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vsel2_gpio>;
+               pinctrl-0 = <&vsel2_pin>;
                regulator-name = "vdd_gpu";
                regulator-min-microvolt = <712500>;
                regulator-max-microvolt = <1500000>;
                        rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
                };
 
-               vsel1_gpio: vsel1-gpio {
+               vsel1_pin: vsel1-pin {
                        rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
                };
 
-               vsel2_gpio: vsel2-gpio {
+               vsel2_pin: vsel2-pin {
                        rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
                };
        };
index 1d246c2..76a8b40 100644 (file)
        leds: gpio-leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
-               pinctrl-0 = <&leds_gpio>;
+               pinctrl-0 = <&status_led_pin>;
 
-               status {
+               status_led: led-0 {
                        gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>;
                        label = "status_led";
                        linux,default-trigger = "heartbeat";
        };
 
        gpio-leds {
-               leds_gpio: leds-gpio {
+               status_led_pin: status-led-pin {
                        rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
index cb0245d..06d4833 100644 (file)
                pwms = <&pwm0 0 740740 0>;
        };
 
+       bat: battery {
+               compatible = "simple-battery";
+               charge-full-design-microamp-hours = <9800000>;
+               voltage-max-design-microvolt = <4350000>;
+               voltage-min-design-microvolt = <3000000>;
+       };
+
        edp_panel: edp-panel {
                compatible = "boe,nv140fhmn49";
                backlight = <&backlight>;
                enable-gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
-               pinctrl-0 = <&panel_en_gpio>;
+               pinctrl-0 = <&panel_en_pin>;
                power-supply = <&vcc3v3_panel>;
 
                ports {
@@ -60,7 +67,7 @@
        gpio-key-lid {
                compatible = "gpio-keys";
                pinctrl-names = "default";
-               pinctrl-0 = <&lidbtn_gpio>;
+               pinctrl-0 = <&lidbtn_pin>;
 
                lid {
                        debounce-interval = <20>;
@@ -76,7 +83,7 @@
        gpio-key-power {
                compatible = "gpio-keys";
                pinctrl-names = "default";
-               pinctrl-0 = <&pwrbtn_gpio>;
+               pinctrl-0 = <&pwrbtn_pin>;
 
                power {
                        debounce-interval = <20>;
                clocks = <&rk808 1>;
                clock-names = "ext_clock";
                pinctrl-names = "default";
-               pinctrl-0 = <&wifi_enable_h_gpio>;
+               pinctrl-0 = <&wifi_enable_h_pin>;
                post-power-on-delay-ms = <100>;
                power-off-delay-us = <500000>;
 
        es8316-sound {
                compatible = "simple-audio-card";
                pinctrl-names = "default";
-               pinctrl-0 = <&hp_det_gpio>;
+               pinctrl-0 = <&hp_det_pin>;
                simple-audio-card,name = "rockchip,es8316-codec";
                simple-audio-card,format = "i2s";
                simple-audio-card,mclk-fs = <256>;
                enable-active-high;
                gpio = <&gpio1 RK_PB5 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
-               pinctrl-0 = <&pwr_5v_gpio>;
+               pinctrl-0 = <&pwr_5v_pin>;
                regulator-name = "vcc5v0_usb";
                regulator-always-on;
                regulator-min-microvolt = <5000000>;
                enable-active-high;
                gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
-               pinctrl-0 = <&sdmmc0_pwr_h_gpio>;
+               pinctrl-0 = <&sdmmc0_pwr_h_pin>;
                regulator-name = "vcc3v0_sd";
                regulator-always-on;
                regulator-min-microvolt = <3000000>;
                enable-active-high;
                gpio = <&gpio1 RK_PC6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
-               pinctrl-0 = <&lcdvcc_en_gpio>;
+               pinctrl-0 = <&lcdvcc_en_pin>;
                regulator-name = "vcc3v3_panel";
                regulator-always-on;
                regulator-min-microvolt = <3300000>;
                enable-active-high;
                gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vcc5v0_host_en_gpio>;
+               pinctrl-0 = <&vcc5v0_host_en_pin>;
                regulator-name = "vcc5v0_otg";
                regulator-always-on;
                regulator-min-microvolt = <5000000>;
                enable-active-high;
                gpio = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vcc5v0_typec0_en_gpio>;
+               pinctrl-0 = <&vcc5v0_typec0_en_pin>;
                regulator-name = "vbus_5vout";
                regulator-min-microvolt = <5000000>;
                regulator-max-microvolt = <5000000>;
 
                /* Also triggered by USB charger */
                pinctrl-names = "default";
-               pinctrl-0 = <&dc_det_gpio>;
+               pinctrl-0 = <&dc_det_pin>;
        };
 };
 
                interrupt-parent = <&gpio3>;
                interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
                pinctrl-names = "default";
-               pinctrl-0 = <&pmic_int_l_gpio>;
+               pinctrl-0 = <&pmic_int_l_pin>;
                rockchip,system-power-controller;
                wakeup-source;
 
                reg = <0x40>;
                fcs,suspend-voltage-selector = <1>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vsel1_gpio>;
+               pinctrl-0 = <&vsel1_pin>;
                regulator-name = "vdd_cpu_b";
                regulator-always-on;
                regulator-boot-on;
                reg = <0x41>;
                fcs,suspend-voltage-selector = <1>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vsel2_gpio>;
+               pinctrl-0 = <&vsel2_pin>;
                regulator-name = "vdd_gpu";
                regulator-always-on;
                regulator-boot-on;
                interrupt-parent = <&gpio1>;
                interrupts = <RK_PA2 IRQ_TYPE_LEVEL_LOW>;
                pinctrl-names = "default";
-               pinctrl-0 = <&fusb0_int_gpio>;
+               pinctrl-0 = <&fusb0_int_pin>;
                vbus-supply = <&vbus_typec>;
 
                connector {
                        };
                };
        };
+
+       cw2015@62 {
+               compatible = "cellwise,cw2015";
+               reg = <0x62>;
+               cellwise,battery-profile = /bits/ 8 <
+                       0x17 0x67 0x80 0x73 0x6E 0x6C 0x6B 0x63
+                       0x77 0x51 0x5C 0x58 0x50 0x4C 0x48 0x36
+                       0x15 0x0C 0x0C 0x19 0x5B 0x7D 0x6F 0x69
+                       0x69 0x5B 0x0C 0x29 0x20 0x40 0x52 0x59
+                       0x57 0x56 0x54 0x4F 0x3B 0x1F 0x7F 0x17
+                       0x06 0x1A 0x30 0x5A 0x85 0x93 0x96 0x2D
+                       0x48 0x77 0x9C 0xB3 0x80 0x52 0x94 0xCB
+                       0x2F 0x00 0x64 0xA5 0xB5 0x11 0xF0 0x11
+               >;
+               cellwise,monitor-interval-ms = <5000>;
+               monitored-battery = <&bat>;
+               power-supplies = <&mains_charger>, <&fusb0>;
+       };
 };
 
 &i2s1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&i2s_8ch_mclk_gpio>, <&i2s1_2ch_bus>;
+       pinctrl-0 = <&i2s_8ch_mclk_pin>, <&i2s1_2ch_bus>;
        rockchip,capture-channels = <8>;
        rockchip,playback-channels = <8>;
        status = "okay";
 
 &pinctrl {
        buttons {
-               pwrbtn_gpio: pwrbtn-gpio {
+               pwrbtn_pin: pwrbtn-pin {
                        rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
                };
 
-               lidbtn_gpio: lidbtn-gpio {
+               lidbtn_pin: lidbtn-pin {
                        rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
 
        dc-charger {
-               dc_det_gpio: dc-det-gpio {
+               dc_det_pin: dc-det-pin {
                        rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
 
        es8316 {
-               hp_det_gpio: hp-det-gpio {
+               hp_det_pin: hp-det-pin {
                        rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
 
        fusb302x {
-               fusb0_int_gpio: fusb0-int-gpio {
+               fusb0_int_pin: fusb0-int-pin {
                        rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
 
        i2s1 {
-               i2s_8ch_mclk_gpio: i2s-8ch-mclk-gpio {
+               i2s_8ch_mclk_pin: i2s-8ch-mclk-pin {
                        rockchip,pins = <4 RK_PA0 1 &pcfg_pull_none>;
                };
        };
 
        lcd-panel {
-               lcdvcc_en_gpio: lcdvcc-en-gpio {
+               lcdvcc_en_pin: lcdvcc-en-pin {
                        rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
-               panel_en_gpio: panel-en-gpio {
+               panel_en_pin: panel-en-pin {
                        rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
-               lcd_panel_reset_gpio: lcd-panel-reset-gpio {
+               lcd_panel_reset_pin: lcd-panel-reset-pin {
                        rockchip,pins = <4 RK_PD6 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
        };
 
        pmic {
-               pmic_int_l_gpio: pmic-int-l-gpio {
+               pmic_int_l_pin: pmic-int-l-pin {
                        rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
                };
 
-               vsel1_gpio: vsel1-gpio {
+               vsel1_pin: vsel1-pin {
                        rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
                };
 
-               vsel2_gpio: vsel2-gpio {
+               vsel2_pin: vsel2-pin {
                        rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
                };
        };
 
        sdcard {
-               sdmmc0_pwr_h_gpio: sdmmc0-pwr-h-gpio {
+               sdmmc0_pwr_h_pin: sdmmc0-pwr-h-pin {
                        rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
        };
 
        sdio-pwrseq {
-               wifi_enable_h_gpio: wifi-enable-h-gpio {
+               wifi_enable_h_pin: wifi-enable-h-pin {
                        rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
 
        usb-typec {
-               vcc5v0_typec0_en_gpio: vcc5v0-typec0-en-gpio {
+               vcc5v0_typec0_en_pin: vcc5v0-typec0-en-pin {
                        rockchip,pins = <1 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
 
        usb2 {
-               pwr_5v_gpio: pwr-5v-gpio {
+               pwr_5v_pin: pwr-5v-pin {
                        rockchip,pins = <1 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
-               vcc5v0_host_en_gpio: vcc5v0-host-en-gpio {
+               vcc5v0_host_en_pin: vcc5v0-host-en-pin {
                        rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
 
        wireless-bluetooth {
-               bt_wake_gpio: bt-wake-gpio {
+               bt_wake_pin: bt-wake-pin {
                        rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
-               bt_host_wake_gpio: bt-host-wake-gpio {
+               bt_host_wake_pin: bt-host-wake-pin {
                        rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
-               bt_reset_gpio: bt-reset-gpio {
+               bt_reset_pin: bt-reset-pin {
                        rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
                host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;
                max-speed = <1500000>;
                pinctrl-names = "default";
-               pinctrl-0 = <&bt_host_wake_gpio &bt_wake_gpio &bt_reset_gpio>;
+               pinctrl-0 = <&bt_host_wake_pin &bt_wake_pin &bt_reset_pin>;
                shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
                vbat-supply = <&wifi_bat>;
                vddio-supply = <&vcc_wl>;
index d80d6b7..a8d3635 100644 (file)
@@ -15,9 +15,9 @@
        };
 
        leds {
-               pinctrl-0 = <&led_pin_module>, <&led_sd_haikou>;
+               pinctrl-0 = <&module_led_pin>, <&sd_card_led_pin>;
 
-               sd-card-led {
+               sd_card_led: led-1 {
                        label = "sd_card_led";
                        gpios = <&gpio1 RK_PA2 GPIO_ACTIVE_HIGH>;
                        linux,default-trigger = "mmc0";
        };
 
        leds {
-               led_sd_haikou: led-sd-gpio {
+               sd_card_led_pin: sd-card-led-pin {
                        rockchip,pins =
                          <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
                };
index 07694b1..4660416 100644 (file)
@@ -11,9 +11,9 @@
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
-               pinctrl-0 = <&led_pin_module>;
+               pinctrl-0 = <&module_led_pin>;
 
-               module-led {
+               module_led: led-0 {
                        label = "module_led";
                        gpios = <&gpio2 RK_PD1 GPIO_ACTIVE_HIGH>;
                        linux,default-trigger = "heartbeat";
 
        vcc5v0_host: vcc5v0-host-regulator {
                compatible = "regulator-fixed";
-               gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_LOW>;
                enable-active-low;
                pinctrl-names = "default";
                pinctrl-0 = <&vcc5v0_host_en>;
        phy-mode = "rgmii";
        pinctrl-names = "default";
        pinctrl-0 = <&rgmii_pins>;
-       snps,reset-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_HIGH>;
+       snps,reset-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>;
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 50000>;
        tx_delay = <0x10>;
        };
 
        leds {
-               led_pin_module: led-module-gpio {
+               module_led_pin: module-led-pin {
                        rockchip,pins =
                          <2 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>;
                };
index 9f225e9..b85ec31 100644 (file)
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
-               pinctrl-0 = <&work_led_gpio>, <&diy_led_gpio>, <&yellow_led_gpio>;
+               pinctrl-0 = <&work_led_pin>, <&diy_led_pin>, <&yellow_led_pin>;
 
-               work-led {
+               work_led: led-0 {
                        label = "green:work";
                        gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;
                        default-state = "on";
                        linux,default-trigger = "heartbeat";
                };
 
-               diy-led {
+               diy_led: led-1 {
                        label = "red:diy";
                        gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>;
                        default-state = "off";
                        linux,default-trigger = "mmc1";
                };
 
-               yellow-led {
+               yellow_led: led-2 {
                        label = "yellow:yellow-led";
                        gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
                        default-state = "off";
                reg = <0x40>;
                fcs,suspend-voltage-selector = <1>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vsel1_gpio>;
+               pinctrl-0 = <&vsel1_pin>;
                regulator-name = "vdd_cpu_b";
                regulator-min-microvolt = <712500>;
                regulator-max-microvolt = <1500000>;
                reg = <0x41>;
                fcs,suspend-voltage-selector = <1>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vsel2_gpio>;
+               pinctrl-0 = <&vsel2_pin>;
                regulator-name = "vdd_gpu";
                regulator-min-microvolt = <712500>;
                regulator-max-microvolt = <1500000>;
        };
 
        leds {
-               diy_led_gpio: diy_led-gpio {
+               diy_led_pin: diy-led-pin {
                        rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
-               work_led_gpio: work_led-gpio {
+               work_led_pin: work-led-pin {
                        rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
-               yellow_led_gpio: yellow_led-gpio {
+               yellow_led_pin: yellow-led-pin {
                        rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
 
        pmic {
-               vsel1_gpio: vsel1-gpio {
+               vsel1_pin: vsel1-pin {
                        rockchip,pins = <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_down>;
                };
 
-               vsel2_gpio: vsel2-gpio {
+               vsel2_pin: vsel2-pin {
                        rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
                };
        };
index 3923ec0..60f98a3 100644 (file)
                reg = <0x40>;
                fcs,suspend-voltage-selector = <1>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vsel1_gpio>;
+               pinctrl-0 = <&vsel1_pin>;
                regulator-name = "vdd_cpu_b";
                regulator-min-microvolt = <712500>;
                regulator-max-microvolt = <1500000>;
                reg = <0x41>;
                fcs,suspend-voltage-selector = <1>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vsel2_gpio>;
+               pinctrl-0 = <&vsel2_pin>;
                regulator-name = "vdd_gpu";
                regulator-min-microvolt = <712500>;
                regulator-max-microvolt = <1500000>;
                        rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
                };
 
-               vsel1_gpio: vsel1-gpio {
+               vsel1_pin: vsel1-pin {
                        rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
                };
 
-               vsel2_gpio: vsel2-gpio {
+               vsel2_pin: vsel2-pin {
                        rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
                };
        };
index ba7c75c..5e3ac58 100644 (file)
                                <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
                };
 
-               vsel1_gpio: vsel1-gpio {
+               vsel1_pin: vsel1-pin {
                        rockchip,pins =
                                <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
                };
 
-               vsel2_gpio: vsel2-gpio {
+               vsel2_pin: vsel2-pin {
                        rockchip,pins =
                                <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
                };
index 6788ab2..6e553ff 100644 (file)
        leds {
                compatible = "gpio-leds";
                pinctrl-names = "default";
-               pinctrl-0 = <&work_led_gpio>, <&diy_led_gpio>;
+               pinctrl-0 = <&work_led_pin>, <&diy_led_pin>;
 
-               work-led {
+               work_led: led-0 {
                        label = "work";
                        default-state = "on";
                        gpios = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>;
                };
 
-               diy-led {
+               diy_led: led-1 {
                        label = "diy";
                        default-state = "off";
                        gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
                reg = <0x40>;
                fcs,suspend-voltage-selector = <1>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vsel1_gpio>;
+               pinctrl-0 = <&vsel1_pin>;
                regulator-name = "vdd_cpu_b";
                regulator-min-microvolt = <712500>;
                regulator-max-microvolt = <1500000>;
                reg = <0x41>;
                fcs,suspend-voltage-selector = <1>;
                pinctrl-names = "default";
-               pinctrl-0 = <&vsel2_gpio>;
+               pinctrl-0 = <&vsel2_pin>;
                regulator-name = "vdd_gpu";
                regulator-min-microvolt = <712500>;
                regulator-max-microvolt = <1500000>;
        };
 
        leds {
-               work_led_gpio: work_led-gpio {
+               work_led_pin: work-led-pin {
                        rockchip,pins = <0 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
                };
 
-               diy_led_gpio: diy_led-gpio {
+               diy_led_pin: diy-led-pin {
                        rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
                };
        };
                        rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
                };
 
-               vsel1_gpio: vsel1-gpio {
+               vsel1_pin: vsel1-pin {
                        rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
                };
 
-               vsel2_gpio: vsel2-gpio {
+               vsel2_pin: vsel2-pin {
                        rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
                };
        };
 
 &usbdrd_dwc3_0 {
        status = "okay";
-       dr_mode = "otg";
+       dr_mode = "host";
 };
 
 &usbdrd3_1 {
index 1bc1579..701a567 100644 (file)
                                <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
                };
 
-               vsel1_gpio: vsel1-gpio {
+               vsel1_pin: vsel1-pin {
                        rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
                };
 
-               vsel2_gpio: vsel2-gpio {
+               vsel2_pin: vsel2-pin {
                        rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
                };
        };
index 2581e9c..ada724b 100644 (file)
                        interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH 0>,
                                     <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH 0>;
                        #dma-cells = <1>;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC0_PERILP>;
                        clock-names = "apb_pclk";
                };
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH 0>,
                                     <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH 0>;
                        #dma-cells = <1>;
+                       arm,pl330-periph-burst;
                        clocks = <&cru ACLK_DMAC1_PERILP>;
                        clock-names = "apb_pclk";
                };
                rockchip,grf = <&grf>;
                rockchip,hw-tshut-temp = <95000>;
                pinctrl-names = "init", "default", "sleep";
-               pinctrl-0 = <&otp_gpio>;
+               pinctrl-0 = <&otp_pin>;
                pinctrl-1 = <&otp_out>;
-               pinctrl-2 = <&otp_gpio>;
+               pinctrl-2 = <&otp_pin>;
                #thermal-sensor-cells = <1>;
                status = "disabled";
        };
                        status = "disabled";
                };
 
+               mipi_dphy_rx0: mipi-dphy-rx0 {
+                       compatible = "rockchip,rk3399-mipi-dphy-rx0";
+                       clocks = <&cru SCLK_MIPIDPHY_REF>,
+                                <&cru SCLK_DPHY_RX0_CFG>,
+                                <&cru PCLK_VIO_GRF>;
+                       clock-names = "dphy-ref", "dphy-cfg", "grf";
+                       power-domains = <&power RK3399_PD_VIO>;
+                       #phy-cells = <0>;
+                       status = "disabled";
+               };
+
                u2phy0: usb2-phy@e450 {
                        compatible = "rockchip,rk3399-usb2phy";
                        reg = <0xe450 0x10>;
                };
 
                tsadc {
-                       otp_gpio: otp-gpio {
+                       otp_pin: otp-pin {
                                rockchip,pins = <1 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
                        };
 
index a1783e7..369de5d 100644 (file)
@@ -8,11 +8,15 @@
 /dts-v1/;
 #include "rk3399.dtsi"
 #include "rk3399-opp.dtsi"
-#include "rk3399pro-vmarc-som.dtsi"
 #include <arm/rockchip-radxa-dalang-carrier.dtsi>
+#include "rk3399pro-vmarc-som.dtsi"
 
 / {
        model = "Radxa ROCK Pi N10";
        compatible = "radxa,rockpi-n10", "vamrs,rk3399pro-vmarc-som",
                     "rockchip,rk3399pro";
+
+       chosen {
+               stdout-path = "serial2:1500000n8";
+       };
 };
index 0a51633..5d087be 100644 (file)
 / {
        compatible = "vamrs,rk3399pro-vmarc-som", "rockchip,rk3399pro";
 
-       clkin_gmac: external-gmac-clock {
-               compatible = "fixed-clock";
-               clock-frequency = <125000000>;
-               clock-output-names = "clkin_gmac";
-               #clock-cells = <0>;
-       };
-
-       vcc12v_dcin: vcc12v-dcin-regulator {
-               compatible = "regulator-fixed";
-               regulator-name = "vcc12v_dcin";
-               regulator-always-on;
-               regulator-boot-on;
-               regulator-min-microvolt = <12000000>;
-               regulator-max-microvolt = <12000000>;
-       };
-
-       vcc5v0_sys: vcc5v0-sys-regulator {
+       vcc3v3_pcie: vcc-pcie-regulator {
                compatible = "regulator-fixed";
-               regulator-name = "vcc5v0_sys";
+               enable-active-high;
+               gpio = <&gpio4 RK_PD4 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pcie_pwr>;
+               regulator-name = "vcc3v3_pcie";
                regulator-always-on;
                regulator-boot-on;
-               regulator-min-microvolt = <5000000>;
-               regulator-max-microvolt = <5000000>;
-               vin-supply = <&vcc12v_dcin>;
+               vin-supply = <&vcc5v0_sys>;
        };
 };
 
 
 &gmac {
        assigned-clocks = <&cru SCLK_RMII_SRC>;
-       assigned-clock-parents = <&clkin_gmac>;
-       clock_in_out = "input";
        phy-supply = <&vcc_lan>;
-       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>;
+};
+
+&hdmi {
+       ddc-i2c-bus = <&i2c3>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&hdmi_cec>;
 };
 
 &i2c0 {
        clock-frequency = <400000>;
-       i2c-scl-rising-time-ns = <180>;
        i2c-scl-falling-time-ns = <30>;
+       i2c-scl-rising-time-ns = <180>;
        status = "okay";
 
        rk809: pmic@20 {
                                regulator-min-microvolt = <900000>;
                                regulator-max-microvolt = <900000>;
                                regulator-state-mem {
-                                       regulator-off-in-suspend;
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <900000>;
                                };
                        };
 
                                regulator-min-microvolt = <1850000>;
                                regulator-max-microvolt = <1850000>;
                                regulator-state-mem {
-                                       regulator-off-in-suspend;
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1850000>;
                                };
                        };
 
        };
 };
 
+&i2c1 {
+       i2c-scl-falling-time-ns = <30>;
+       i2c-scl-rising-time-ns = <140>;
+       status = "okay";
+};
+
+&i2c2 {
+       clock-frequency = <400000>;
+       status = "okay";
+
+       hym8563: hym8563@51 {
+               compatible = "haoyu,hym8563";
+               reg = <0x51>;
+               #clock-cells = <0>;
+               clock-frequency = <32768>;
+               clock-output-names = "hym8563";
+               pinctrl-names = "default";
+               pinctrl-0 = <&hym8563_int>;
+               interrupt-parent = <&gpio4>;
+               interrupts = <RK_PD6 IRQ_TYPE_LEVEL_LOW>;
+       };
+};
+
+&i2c3 {
+       i2c-scl-rising-time-ns = <450>;
+       i2c-scl-falling-time-ns = <15>;
+       status = "okay";
+};
+
 &io_domains {
        status = "okay";
        bt656-supply = <&vcca_1v8>;
-       sdmmc-supply = <&vccio_sd>;
        gpio1830-supply = <&vccio_3v0>;
+       sdmmc-supply = <&vccio_sd>;
+};
+
+&pcie_phy {
+       status = "okay";
+};
+
+&pcie0 {
+       ep-gpios = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;
+       max-link-speed = <2>;
+       num-lanes = <4>;
+       pinctrl-0 = <&pcie_clkreqnb_cpm>;
+       pinctrl-names = "default";
+       vpcie0v9-supply = <&vcca_0v9>;  /* VCC_0V9_S0 */
+       vpcie1v8-supply = <&vcca_1v8>;  /* VCC_1V8_S0 */
+       vpcie3v3-supply = <&vcc3v3_pcie>;
+       status = "okay";
+};
+
+&pinctrl {
+       hym8563 {
+               hym8563_int: hym8563-int {
+                       rockchip,pins = <4 RK_PD6 0 &pcfg_pull_up>;
+               };
+       };
+
+       pcie {
+               pcie_pwr: pcie-pwr {
+                       rockchip,pins = <4 RK_PD4 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       pmic {
+               pmic_int_l: pmic-int-l {
+                       rockchip,pins = <1 RK_PC2 0 &pcfg_pull_up>;
+               };
+       };
+
+       vbus_host {
+               usb1_en_oc: usb1-en-oc {
+                       rockchip,pins = <4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       vbus_typec {
+               usb0_en_oc: usb0-en-oc {
+                       rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
 };
 
 &pmu_io_domains {
        status = "okay";
 };
 
-&tsadc {
+&sdmmc {
+       cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
+       max-frequency = <150000000>;
+};
+
+&tcphy0 {
        status = "okay";
+};
+
+&tsadc {
        rockchip,hw-tshut-mode = <1>;
        rockchip,hw-tshut-polarity = <1>;
+       status = "okay";
 };
 
-&pinctrl {
-       pmic {
-               pmic_int_l: pmic-int-l {
-                       rockchip,pins =
-                               <1 RK_PC2 0 &pcfg_pull_up>;
-               };
+&u2phy0 {
+       status = "okay";
+
+       u2phy0_otg: otg-port {
+               phy-supply = <&vbus_typec>;
+               status = "okay";
+       };
+
+       u2phy0_host: host-port {
+               phy-supply = <&vbus_host>;
+               status = "okay";
+       };
+};
+
+
+&u2phy1 {
+       status = "okay";
+
+       u2phy1_host: host-port {
+               phy-supply = <&vbus_host>;
+               status = "okay";
        };
 };
+
+&usb_host0_ehci {
+       status = "okay";
+};
+
+&usb_host0_ohci {
+       status = "okay";
+};
+
+&usb_host1_ehci {
+       status = "okay";
+};
+
+&usb_host1_ohci {
+       status = "okay";
+};
+
+&usbdrd3_0 {
+       status = "okay";
+};
+
+&usbdrd_dwc3_0 {
+       status = "okay";
+};
+
+&vbus_host {
+       enable-active-high;
+       gpio = <&gpio4 RK_PD1 GPIO_ACTIVE_HIGH>; /* USB1_EN_OC# */
+       pinctrl-names = "default";
+       pinctrl-0 = <&usb1_en_oc>;
+};
+
+&vbus_typec {
+       enable-active-high;
+       gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>; /* USB0_EN_OC# */
+       pinctrl-names = "default";
+       pinctrl-0 = <&usb0_en_oc>;
+};
index 816ac25..da44a15 100644 (file)
 };
 
 &mdio {
-       ethphy: ethphy@1 {
+       ethphy: ethernet-phy@1 {
                reg = <1>;
        };
 };
index 693171f..617d2b1 100644 (file)
@@ -20,7 +20,7 @@
 
        aliases {
                serial0 = &serial0;
-               serial1 = &serial1;
+               serial1 = &serialsc;
                serial2 = &serial2;
                serial3 = &serial3;
                i2c0 = &i2c0;
        interrupts = <0 8>;
 };
 
+&serialsc {
+       interrupts = <0 8>;
+};
+
 &serial0 {
        status = "okay";
 };
@@ -76,7 +80,7 @@
 };
 
 &mdio {
-       ethphy: ethphy@1 {
+       ethphy: ethernet-phy@1 {
                reg = <1>;
        };
 };
index 816919b..aa159a1 100644 (file)
 };
 
 &mdio {
-       ethphy: ethphy@0 {
+       ethphy: ethernet-phy@0 {
                reg = <0>;
        };
 };
index 2c00008..a01579c 100644 (file)
 };
 
 &mdio {
-       ethphy: ethphy@1 {
+       ethphy: ethernet-phy@1 {
                reg = <1>;
        };
 };
index eeb976e..39ee279 100644 (file)
@@ -20,7 +20,7 @@
 
        aliases {
                serial0 = &serial0;
-               serial1 = &serial1;
+               serial1 = &serialsc;
                serial2 = &serial2;
                serial3 = &serial3;
                i2c0 = &i2c0;
        interrupts = <0 8>;
 };
 
+&serialsc {
+       interrupts = <0 8>;
+};
+
 &serial0 {
        status = "okay";
 };
@@ -64,7 +68,7 @@
 };
 
 &mdio {
-       ethphy: ethphy@0 {
+       ethphy: ethernet-phy@0 {
                reg = <0>;
        };
 };
index f4a56b2..a87b8a6 100644 (file)
                        compatible = "socionext,uniphier-ld20-pcie-phy";
                        reg = <0x66038000 0x4000>;
                        #phy-cells = <0>;
+                       clock-names = "link";
                        clocks = <&sys_clk 24>;
+                       reset-names = "link";
                        resets = <&sys_rst 24>;
                        socionext,syscon = <&soc_glue>;
                };
index 7c30c6b..0860403 100644 (file)
@@ -19,7 +19,7 @@
 
        aliases {
                serial0 = &serial0;
-               serial1 = &serial1;
+               serial1 = &serialsc;
                serial2 = &serial2;
                serial3 = &serial3;
                i2c0 = &i2c0;
        interrupts = <4 8>;
 };
 
+&serialsc {
+       interrupts = <4 8>;
+};
+
 &spi0 {
        status = "okay";
 };
 };
 
 &mdio0 {
-       ethphy0: ethphy@0 {
+       ethphy0: ethernet-phy@0 {
                reg = <0>;
        };
 };
 };
 
 &mdio1 {
-       ethphy1: ethphy@0 {
+       ethphy1: ethernet-phy@0 {
                reg = <0>;
        };
 };
index 72f1688..0e52dad 100644 (file)
                        compatible = "socionext,uniphier-pxs3-pcie-phy";
                        reg = <0x66038000 0x4000>;
                        #phy-cells = <0>;
+                       clock-names = "link";
                        clocks = <&sys_clk 24>;
+                       reset-names = "link";
                        resets = <&sys_rst 24>;
                        socionext,syscon = <&soc_glue>;
                };
index b397945..05c0beb 100644 (file)
@@ -3,7 +3,7 @@
 # Make file to build device tree binaries for boards based on
 # Texas Instruments Inc processors
 #
-# Copyright (C) 2016-2018 Texas Instruments Incorporated - http://www.ti.com/
+# Copyright (C) 2016-2018 Texas Instruments Incorporated - https://www.ti.com/
 #
 
 dtb-$(CONFIG_ARCH_K3_AM6_SOC) += k3-am654-base-board.dtb
index 6181522..9edfae5 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Device Tree Source for AM6 SoC Family Main Domain peripherals
  *
- * Copyright (C) 2016-2018 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016-2018 Texas Instruments Incorporated - https://www.ti.com/
  */
 #include <dt-bindings/phy/phy-am654-serdes.h>
 
@@ -42,7 +42,7 @@
                 */
                interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
 
-               gic_its: gic-its@1820000 {
+               gic_its: msi-controller@1820000 {
                        compatible = "arm,gic-v3-its";
                        reg = <0x00 0x01820000 0x00 0x10000>;
                        socionext,synquacer-pre-its = <0x1000000 0x400000>;
                interrupts = <GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>;
                mmc-ddr-1_8v;
                mmc-hs200-1_8v;
+               ti,otap-del-sel-legacy = <0x0>;
+               ti,otap-del-sel-mmc-hs = <0x0>;
+               ti,otap-del-sel-sd-hs = <0x0>;
+               ti,otap-del-sel-sdr12 = <0x0>;
+               ti,otap-del-sel-sdr25 = <0x0>;
+               ti,otap-del-sel-sdr50 = <0x8>;
+               ti,otap-del-sel-sdr104 = <0x7>;
+               ti,otap-del-sel-ddr50 = <0x5>;
+               ti,otap-del-sel-ddr52 = <0x5>;
+               ti,otap-del-sel-hs200 = <0x5>;
+               ti,otap-del-sel-hs400 = <0x0>;
+               ti,trm-icp = <0x8>;
+               dma-coherent;
+       };
+
+       sdhci1: sdhci@4fa0000 {
+               compatible = "ti,am654-sdhci-5.1";
+               reg = <0x0 0x4fa0000 0x0 0x260>, <0x0 0x4fb0000 0x0 0x134>;
+               power-domains = <&k3_pds 48 TI_SCI_PD_EXCLUSIVE>;
+               clocks = <&k3_clks 48 0>, <&k3_clks 48 1>;
+               clock-names = "clk_ahb", "clk_xin";
+               interrupts = <GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>;
+               ti,otap-del-sel-legacy = <0x0>;
+               ti,otap-del-sel-mmc-hs = <0x0>;
+               ti,otap-del-sel-sd-hs = <0x0>;
+               ti,otap-del-sel-sdr12 = <0x0>;
+               ti,otap-del-sel-sdr25 = <0x0>;
+               ti,otap-del-sel-sdr50 = <0x8>;
+               ti,otap-del-sel-sdr104 = <0x7>;
+               ti,otap-del-sel-ddr50 = <0x4>;
+               ti,otap-del-sel-ddr52 = <0x4>;
+               ti,otap-del-sel-hs200 = <0x7>;
+               ti,clkbuf-sel = <0x7>;
                ti,otap-del-sel = <0x2>;
                ti,trm-icp = <0x8>;
                dma-coherent;
+               no-1-8-v;
        };
 
        scm_conf: scm_conf@100000 {
index ae5f813..8c1abcf 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Device Tree Source for AM6 SoC Family MCU Domain peripherals
  *
- * Copyright (C) 2016-2018 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016-2018 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 &cbass_mcu {
index 54a133f..5f55b9e 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Device Tree Source for AM6 SoC Family Wakeup Domain peripherals
  *
- * Copyright (C) 2016-2018 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016-2018 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 &cbass_wakeup {
                };
        };
 
+       chipid@43000014 {
+               compatible = "ti,am654-chipid";
+               reg = <0x43000014 0x4>;
+       };
+
        wkup_pmx0: pinmux@4301c000 {
                compatible = "pinctrl-single";
                reg = <0x4301c000 0x118>;
index 5be75e4..27c0406 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Device Tree Source for AM6 SoC Family
  *
- * Copyright (C) 2016-2018 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016-2018 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include <dt-bindings/gpio/gpio.h>
index 2f3d331..611e662 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2016-2018 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016-2018 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /dts-v1/;
                >;
        };
 
+       main_mmc1_pins_default: main_mmc1_pins_default {
+               pinctrl-single,pins = <
+                       AM65X_IOPAD(0x02d4, PIN_INPUT_PULLDOWN, 0) /* (C27) MMC1_CLK */
+                       AM65X_IOPAD(0x02d8, PIN_INPUT_PULLUP, 0) /* (C28) MMC1_CMD */
+                       AM65X_IOPAD(0x02d0, PIN_INPUT_PULLUP, 0) /* (D28) MMC1_DAT0 */
+                       AM65X_IOPAD(0x02cc, PIN_INPUT_PULLUP, 0) /* (E27) MMC1_DAT1 */
+                       AM65X_IOPAD(0x02c8, PIN_INPUT_PULLUP, 0) /* (D26) MMC1_DAT2 */
+                       AM65X_IOPAD(0x02c4, PIN_INPUT_PULLUP, 0) /* (D27) MMC1_DAT3 */
+                       AM65X_IOPAD(0x02dc, PIN_INPUT_PULLUP, 0) /* (B24) MMC1_SDCD */
+                       AM65X_IOPAD(0x02e0, PIN_INPUT, 0) /* (C24) MMC1_SDWP */
+               >;
+       };
+
        usb1_pins_default: usb1_pins_default {
                pinctrl-single,pins = <
                        AM65X_IOPAD(0x02c0, PIN_OUTPUT, 0) /* (AC8) USB1_DRVVBUS */
        disable-wp;
 };
 
+/*
+ * Because of erratas i2025 and i2026 for silicon revision 1.0, the
+ * SD card interface might fail. Boards with sr1.0 are recommended to
+ * disable sdhci1
+ */
+&sdhci1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&main_mmc1_pins_default>;
+       ti,driver-strength-ohm = <50>;
+       disable-wp;
+};
+
 &dwc3_1 {
        status = "okay";
 };
index b221abf..f0a6541 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Device Tree Source for AM6 SoC family in Quad core configuration
  *
- * Copyright (C) 2016-2018 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016-2018 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include "k3-am65.dtsi"
index 6df823a..8bc1e6e 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2019 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /dts-v1/;
                        gpios = <&wkup_gpio0 7 GPIO_ACTIVE_LOW>;
                };
        };
+
+       evm_12v0: fixedregulator-evm12v0 {
+               /* main supply */
+               compatible = "regulator-fixed";
+               regulator-name = "evm_12v0";
+               regulator-min-microvolt = <12000000>;
+               regulator-max-microvolt = <12000000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vsys_3v3: fixedregulator-vsys3v3 {
+               /* Output of LMS140 */
+               compatible = "regulator-fixed";
+               regulator-name = "vsys_3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&evm_12v0>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       vsys_5v0: fixedregulator-vsys5v0 {
+               /* Output of LM5140 */
+               compatible = "regulator-fixed";
+               regulator-name = "vsys_5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               vin-supply = <&evm_12v0>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+
+       sound0: sound@0 {
+               compatible = "ti,j721e-cpb-audio";
+               model = "j721e-cpb";
+
+               ti,cpb-mcasp = <&mcasp10>;
+               ti,cpb-codec = <&pcm3168a_1>;
+
+               clocks = <&k3_clks 184 1>,
+                        <&k3_clks 184 2>, <&k3_clks 184 4>,
+                        <&k3_clks 157 371>,
+                        <&k3_clks 157 400>, <&k3_clks 157 401>;
+               clock-names = "cpb-mcasp-auxclk",
+                             "cpb-mcasp-auxclk-48000", "cpb-mcasp-auxclk-44100",
+                             "cpb-codec-scki",
+                             "cpb-codec-scki-48000", "cpb-codec-scki-44100";
+       };
 };
 
 &main_pmx0 {
        main_usbss0_pins_default: main_usbss0_pins_default {
                pinctrl-single,pins = <
                        J721E_IOPAD(0x290, PIN_OUTPUT, 0) /* (U6) USB0_DRVVBUS */
+                       J721E_IOPAD(0x210, PIN_INPUT, 7) /* (W3) MCAN1_RX.GPIO1_3 */
                >;
        };
 
                >;
        };
 
-       main_i2c1_exp4_pins_default: main-i2c1-exp4-pins-default {
+       mcasp10_pins_default: mcasp10_pins_default {
                pinctrl-single,pins = <
-                       J721E_IOPAD(0x230, PIN_INPUT, 7) /* (U2) ECAP0_IN_APWM_OUT.GPIO1_11 */
-                >;
+                       J721E_IOPAD(0x158, PIN_OUTPUT_PULLDOWN, 12) /* (U23) RGMII5_TX_CTL.MCASP10_ACLKX */
+                       J721E_IOPAD(0x15c, PIN_OUTPUT_PULLDOWN, 12) /* (U26) RGMII5_RX_CTL.MCASP10_AFSX */
+                       J721E_IOPAD(0x160, PIN_OUTPUT_PULLDOWN, 12) /* (V28) RGMII5_TD3.MCASP10_AXR0 */
+                       J721E_IOPAD(0x164, PIN_OUTPUT_PULLDOWN, 12) /* (V29) RGMII5_TD2.MCASP10_AXR1 */
+                       J721E_IOPAD(0x170, PIN_OUTPUT_PULLDOWN, 12) /* (U29) RGMII5_TXC.MCASP10_AXR2 */
+                       J721E_IOPAD(0x174, PIN_OUTPUT_PULLDOWN, 12) /* (U25) RGMII5_RXC.MCASP10_AXR3 */
+                       J721E_IOPAD(0x198, PIN_INPUT_PULLDOWN, 12) /* (V25) RGMII6_TD1.MCASP10_AXR4 */
+                       J721E_IOPAD(0x19c, PIN_INPUT_PULLDOWN, 12) /* (W27) RGMII6_TD0.MCASP10_AXR5 */
+                       J721E_IOPAD(0x1a0, PIN_INPUT_PULLDOWN, 12) /* (W29) RGMII6_TXC.MCASP10_AXR6 */
+               >;
+       };
+
+       audi_ext_refclk2_pins_default: audi_ext_refclk2_pins_default {
+               pinctrl-single,pins = <
+                       J721E_IOPAD(0x1a4, PIN_OUTPUT, 3) /* (W26) RGMII6_RXC.AUDIO_EXT_REFCLK2 */
+               >;
        };
 };
 
        status = "disabled";
 };
 
+&usb_serdes_mux {
+       idle-states = <1>, <0>; /* USB0 to SERDES3, USB1 to SERDES1 */
+};
+
+&serdes_ln_ctrl {
+       idle-states = <SERDES0_LANE0_PCIE0_LANE0>, <SERDES0_LANE1_PCIE0_LANE1>,
+                     <SERDES1_LANE0_PCIE1_LANE0>, <SERDES1_LANE1_PCIE1_LANE1>,
+                     <SERDES2_LANE0_PCIE2_LANE0>, <SERDES2_LANE1_PCIE2_LANE1>,
+                     <SERDES3_LANE0_USB3_0_SWAP>, <SERDES3_LANE1_USB3_0>,
+                     <SERDES4_LANE0_EDP_LANE0>, <SERDES4_LANE1_EDP_LANE1>, <SERDES4_LANE2_EDP_LANE2>, <SERDES4_LANE3_EDP_LANE3>;
+};
+
+&serdes_wiz3 {
+       typec-dir-gpios = <&main_gpio1 3 GPIO_ACTIVE_HIGH>;
+       typec-dir-debounce-ms = <700>;  /* TUSB321, tCCB_DEFAULT 133 ms */
+};
+
+&serdes3 {
+       serdes3_usb_link: link@0 {
+               reg = <0>;
+               cdns,num-lanes = <2>;
+               #phy-cells = <0>;
+               cdns,phy-type = <PHY_TYPE_USB3>;
+               resets = <&serdes_wiz3 1>, <&serdes_wiz3 2>;
+       };
+};
+
 &usbss0 {
        pinctrl-names = "default";
        pinctrl-0 = <&main_usbss0_pins_default>;
-       ti,usb2-only;
        ti,vbus-divider;
 };
 
 &usb0 {
        dr_mode = "otg";
-       maximum-speed = "high-speed";
+       maximum-speed = "super-speed";
+       phys = <&serdes3_usb_link>;
+       phy-names = "cdns3,usb3-phy";
 };
 
 &usbss1 {
                reg = <0x22>;
                gpio-controller;
                #gpio-cells = <2>;
+
+               p09 {
+                       /* P11 - MCASP/TRACE_MUX_S0 */
+                       gpio-hog;
+                       gpios = <9 GPIO_ACTIVE_HIGH>;
+                       output-low;
+                       line-name = "MCASP/TRACE_MUX_S0";
+               };
+
+               p10 {
+                       /* P12 - MCASP/TRACE_MUX_S1 */
+                       gpio-hog;
+                       gpios = <10 GPIO_ACTIVE_HIGH>;
+                       output-high;
+                       line-name = "MCASP/TRACE_MUX_S1";
+               };
        };
 };
 
        };
 };
 
+&k3_clks {
+       /* Confiure AUDIO_EXT_REFCLK2 pin as output */
+       pinctrl-names = "default";
+       pinctrl-0 = <&audi_ext_refclk2_pins_default>;
+};
+
 &main_i2c3 {
        pinctrl-names = "default";
        pinctrl-0 = <&main_i2c3_pins_default>;
                gpio-controller;
                #gpio-cells = <2>;
        };
+
+       pcm3168a_1: audio-codec@44 {
+               compatible = "ti,pcm3168a";
+               reg = <0x44>;
+
+               #sound-dai-cells = <1>;
+
+               reset-gpios = <&exp3 0 GPIO_ACTIVE_LOW>;
+
+               /* C_AUDIO_REFCLK2 -> RGMII6_RXC (W26) */
+               clocks = <&k3_clks 157 371>;
+               clock-names = "scki";
+
+               /* HSDIV3_16FFT_MAIN_4_HSDIVOUT2_CLK -> REFCLK2 */
+               assigned-clocks = <&k3_clks 157 371>;
+               assigned-clock-parents = <&k3_clks 157 400>;
+               assigned-clock-rates = <24576000>; /* for 48KHz */
+
+               VDD1-supply = <&vsys_3v3>;
+               VDD2-supply = <&vsys_3v3>;
+               VCCAD1-supply = <&vsys_5v0>;
+               VCCAD2-supply = <&vsys_5v0>;
+               VCCDA1-supply = <&vsys_5v0>;
+               VCCDA2-supply = <&vsys_5v0>;
+       };
 };
 
 &main_i2c6 {
                                 <&k3_clks 152 11>,     /* PLL18_HSDIV0 */
                                 <&k3_clks 152 18>;     /* PLL23_HSDIV0 */
 };
+
+&mcasp10 {
+       #sound-dai-cells = <0>;
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&mcasp10_pins_default>;
+
+       op-mode = <0>;          /* MCASP_IIS_MODE */
+       tdm-slots = <2>;
+       auxclk-fs-ratio = <256>;
+
+       serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
+               1 1 1 1
+               2 2 2 0
+       >;
+       tx-num-evt = <0>;
+       rx-num-evt = <0>;
+
+       status = "okay";
+};
index 96c929d..d140602 100644 (file)
@@ -2,8 +2,11 @@
 /*
  * Device Tree Source for J721E SoC Family Main Domain peripherals
  *
- * Copyright (C) 2016-2019 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016-2019 Texas Instruments Incorporated - https://www.ti.com/
  */
+#include <dt-bindings/phy/phy.h>
+#include <dt-bindings/mux/mux.h>
+#include <dt-bindings/mux/mux-j721e-wiz.h>
 
 &cbass_main {
        msmc_ram: sram@70000000 {
                };
        };
 
+       scm_conf: scm-conf@100000 {
+               compatible = "ti,j721e-system-controller", "syscon", "simple-mfd";
+               reg = <0 0x00100000 0 0x1c000>; /* excludes pinctrl region */
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0x0 0x0 0x00100000 0x1c000>;
+
+               serdes_ln_ctrl: serdes-ln-ctrl@4080 {
+                       compatible = "mmio-mux";
+                       reg = <0x00004080 0x50>;
+                       #mux-control-cells = <1>;
+                       mux-reg-masks = <0x4080 0x3>, <0x4084 0x3>, /* SERDES0 lane0/1 select */
+                                       <0x4090 0x3>, <0x4094 0x3>, /* SERDES1 lane0/1 select */
+                                       <0x40a0 0x3>, <0x40a4 0x3>, /* SERDES2 lane0/1 select */
+                                       <0x40b0 0x3>, <0x40b4 0x3>, /* SERDES3 lane0/1 select */
+                                       <0x40c0 0x3>, <0x40c4 0x3>, <0x40c8 0x3>, <0x40cc 0x3>;
+                                       /* SERDES4 lane0/1/2/3 select */
+                       idle-states = <SERDES0_LANE0_PCIE0_LANE0>, <SERDES0_LANE1_PCIE0_LANE1>,
+                                     <SERDES1_LANE0_PCIE1_LANE0>, <SERDES1_LANE1_PCIE1_LANE1>,
+                                     <SERDES2_LANE0_PCIE2_LANE0>, <SERDES2_LANE1_PCIE2_LANE1>,
+                                     <MUX_IDLE_AS_IS>, <SERDES3_LANE1_USB3_0>,
+                                     <SERDES4_LANE0_EDP_LANE0>, <SERDES4_LANE1_EDP_LANE1>, <SERDES4_LANE2_EDP_LANE2>, <SERDES4_LANE3_EDP_LANE3>;
+               };
+
+               usb_serdes_mux: mux-controller@4000 {
+                       compatible = "mmio-mux";
+                       #mux-control-cells = <1>;
+                       mux-reg-masks = <0x4000 0x8000000>, /* USB0 to SERDES0/3 mux */
+                                       <0x4010 0x8000000>; /* USB1 to SERDES1/2 mux */
+           };
+       };
+
        gic500: interrupt-controller@1800000 {
                compatible = "arm,gic-v3";
                #address-cells = <2>;
@@ -31,7 +66,7 @@
                /* vcpumntirq: virtual CPU interface maintenance interrupt */
                interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
 
-               gic_its: gic-its@1820000 {
+               gic_its: msi-controller@1820000 {
                        compatible = "arm,gic-v3-its";
                        reg = <0x00 0x01820000 0x00 0x10000>;
                        socionext,synquacer-pre-its = <0x1000000 0x400000>;
                        interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
                };
 
-               smmu0: smmu@36600000 {
+               smmu0: iommu@36600000 {
                        compatible = "arm,smmu-v3";
                        reg = <0x0 0x36600000 0x0 0x100000>;
                        interrupt-parent = <&gic500>;
                pinctrl-single,function-mask = <0xffffffff>;
        };
 
+       dummy_cmn_refclk: dummy-cmn-refclk {
+               #clock-cells = <0>;
+               compatible = "fixed-clock";
+               clock-frequency = <100000000>;
+       };
+
+       dummy_cmn_refclk1: dummy-cmn-refclk1 {
+               #clock-cells = <0>;
+               compatible = "fixed-clock";
+               clock-frequency = <100000000>;
+       };
+
+       serdes_wiz0: wiz@5000000 {
+               compatible = "ti,j721e-wiz-16g";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               power-domains = <&k3_pds 292 TI_SCI_PD_EXCLUSIVE>;
+               clocks = <&k3_clks 292 5>, <&k3_clks 292 11>, <&dummy_cmn_refclk>;
+               clock-names = "fck", "core_ref_clk", "ext_ref_clk";
+               assigned-clocks = <&k3_clks 292 11>, <&k3_clks 292 0>;
+               assigned-clock-parents = <&k3_clks 292 15>, <&k3_clks 292 4>;
+               num-lanes = <2>;
+               #reset-cells = <1>;
+               ranges = <0x5000000 0x0 0x5000000 0x10000>;
+
+               wiz0_pll0_refclk: pll0-refclk {
+                       clocks = <&k3_clks 292 11>, <&dummy_cmn_refclk>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz0_pll0_refclk>;
+                       assigned-clock-parents = <&k3_clks 292 11>;
+               };
+
+               wiz0_pll1_refclk: pll1-refclk {
+                       clocks = <&k3_clks 292 0>, <&dummy_cmn_refclk1>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz0_pll1_refclk>;
+                       assigned-clock-parents = <&k3_clks 292 0>;
+               };
+
+               wiz0_refclk_dig: refclk-dig {
+                       clocks = <&k3_clks 292 11>, <&k3_clks 292 0>, <&dummy_cmn_refclk>, <&dummy_cmn_refclk1>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz0_refclk_dig>;
+                       assigned-clock-parents = <&k3_clks 292 11>;
+               };
+
+               wiz0_cmn_refclk_dig_div: cmn-refclk-dig-div {
+                       clocks = <&wiz0_refclk_dig>;
+                       #clock-cells = <0>;
+               };
+
+               wiz0_cmn_refclk1_dig_div: cmn-refclk1-dig-div {
+                       clocks = <&wiz0_pll1_refclk>;
+                       #clock-cells = <0>;
+               };
+
+               serdes0: serdes@5000000 {
+                       compatible = "ti,sierra-phy-t0";
+                       reg-names = "serdes";
+                       reg = <0x5000000 0x10000>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&serdes_wiz0 0>;
+                       reset-names = "sierra_reset";
+                       clocks = <&wiz0_cmn_refclk_dig_div>, <&wiz0_cmn_refclk1_dig_div>;
+                       clock-names = "cmn_refclk_dig_div", "cmn_refclk1_dig_div";
+               };
+       };
+
+       serdes_wiz1: wiz@5010000 {
+               compatible = "ti,j721e-wiz-16g";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               power-domains = <&k3_pds 293 TI_SCI_PD_EXCLUSIVE>;
+               clocks = <&k3_clks 293 5>, <&k3_clks 293 13>, <&dummy_cmn_refclk>;
+               clock-names = "fck", "core_ref_clk", "ext_ref_clk";
+               assigned-clocks = <&k3_clks 293 13>, <&k3_clks 293 0>;
+               assigned-clock-parents = <&k3_clks 293 17>, <&k3_clks 293 4>;
+               num-lanes = <2>;
+               #reset-cells = <1>;
+               ranges = <0x5010000 0x0 0x5010000 0x10000>;
+
+               wiz1_pll0_refclk: pll0-refclk {
+                       clocks = <&k3_clks 293 13>, <&dummy_cmn_refclk>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz1_pll0_refclk>;
+                       assigned-clock-parents = <&k3_clks 293 13>;
+               };
+
+               wiz1_pll1_refclk: pll1-refclk {
+                       clocks = <&k3_clks 293 0>, <&dummy_cmn_refclk1>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz1_pll1_refclk>;
+                       assigned-clock-parents = <&k3_clks 293 0>;
+               };
+
+               wiz1_refclk_dig: refclk-dig {
+                       clocks = <&k3_clks 293 13>, <&k3_clks 293 0>, <&dummy_cmn_refclk>, <&dummy_cmn_refclk1>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz1_refclk_dig>;
+                       assigned-clock-parents = <&k3_clks 293 13>;
+               };
+
+               wiz1_cmn_refclk_dig_div: cmn-refclk-dig-div{
+                       clocks = <&wiz1_refclk_dig>;
+                       #clock-cells = <0>;
+               };
+
+               wiz1_cmn_refclk1_dig_div: cmn-refclk1-dig-div {
+                       clocks = <&wiz1_pll1_refclk>;
+                       #clock-cells = <0>;
+               };
+
+               serdes1: serdes@5010000 {
+                       compatible = "ti,sierra-phy-t0";
+                       reg-names = "serdes";
+                       reg = <0x5010000 0x10000>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&serdes_wiz1 0>;
+                       reset-names = "sierra_reset";
+                       clocks = <&wiz1_cmn_refclk_dig_div>, <&wiz1_cmn_refclk1_dig_div>;
+                       clock-names = "cmn_refclk_dig_div", "cmn_refclk1_dig_div";
+               };
+       };
+
+       serdes_wiz2: wiz@5020000 {
+               compatible = "ti,j721e-wiz-16g";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               power-domains = <&k3_pds 294 TI_SCI_PD_EXCLUSIVE>;
+               clocks = <&k3_clks 294 5>, <&k3_clks 294 11>, <&dummy_cmn_refclk>;
+               clock-names = "fck", "core_ref_clk", "ext_ref_clk";
+               assigned-clocks = <&k3_clks 294 11>, <&k3_clks 294 0>;
+               assigned-clock-parents = <&k3_clks 294 15>, <&k3_clks 294 4>;
+               num-lanes = <2>;
+               #reset-cells = <1>;
+               ranges = <0x5020000 0x0 0x5020000 0x10000>;
+
+               wiz2_pll0_refclk: pll0-refclk {
+                       clocks = <&k3_clks 294 11>, <&dummy_cmn_refclk>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz2_pll0_refclk>;
+                       assigned-clock-parents = <&k3_clks 294 11>;
+               };
+
+               wiz2_pll1_refclk: pll1-refclk {
+                       clocks = <&k3_clks 294 0>, <&dummy_cmn_refclk1>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz2_pll1_refclk>;
+                       assigned-clock-parents = <&k3_clks 294 0>;
+               };
+
+               wiz2_refclk_dig: refclk-dig {
+                       clocks = <&k3_clks 294 11>, <&k3_clks 294 0>, <&dummy_cmn_refclk>, <&dummy_cmn_refclk1>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz2_refclk_dig>;
+                       assigned-clock-parents = <&k3_clks 294 11>;
+               };
+
+               wiz2_cmn_refclk_dig_div: cmn-refclk-dig-div {
+                       clocks = <&wiz2_refclk_dig>;
+                       #clock-cells = <0>;
+               };
+
+               wiz2_cmn_refclk1_dig_div: cmn-refclk1-dig-div {
+                       clocks = <&wiz2_pll1_refclk>;
+                       #clock-cells = <0>;
+               };
+
+               serdes2: serdes@5020000 {
+                       compatible = "ti,sierra-phy-t0";
+                       reg-names = "serdes";
+                       reg = <0x5020000 0x10000>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&serdes_wiz2 0>;
+                       reset-names = "sierra_reset";
+                       clocks = <&wiz2_cmn_refclk_dig_div>, <&wiz2_cmn_refclk1_dig_div>;
+                       clock-names = "cmn_refclk_dig_div", "cmn_refclk1_dig_div";
+               };
+       };
+
+       serdes_wiz3: wiz@5030000 {
+               compatible = "ti,j721e-wiz-16g";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               power-domains = <&k3_pds 295 TI_SCI_PD_EXCLUSIVE>;
+               clocks = <&k3_clks 295 5>, <&k3_clks 295 9>, <&dummy_cmn_refclk>;
+               clock-names = "fck", "core_ref_clk", "ext_ref_clk";
+               assigned-clocks = <&k3_clks 295 9>, <&k3_clks 295 0>;
+               assigned-clock-parents = <&k3_clks 295 13>, <&k3_clks 295 4>;
+               num-lanes = <2>;
+               #reset-cells = <1>;
+               ranges = <0x5030000 0x0 0x5030000 0x10000>;
+
+               wiz3_pll0_refclk: pll0-refclk {
+                       clocks = <&k3_clks 295 9>, <&dummy_cmn_refclk>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz3_pll0_refclk>;
+                       assigned-clock-parents = <&k3_clks 295 9>;
+               };
+
+               wiz3_pll1_refclk: pll1-refclk {
+                       clocks = <&k3_clks 295 0>, <&dummy_cmn_refclk1>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz3_pll1_refclk>;
+                       assigned-clock-parents = <&k3_clks 295 0>;
+               };
+
+               wiz3_refclk_dig: refclk-dig {
+                       clocks = <&k3_clks 295 9>, <&k3_clks 295 0>, <&dummy_cmn_refclk>, <&dummy_cmn_refclk1>;
+                       #clock-cells = <0>;
+                       assigned-clocks = <&wiz3_refclk_dig>;
+                       assigned-clock-parents = <&k3_clks 295 9>;
+               };
+
+               wiz3_cmn_refclk_dig_div: cmn-refclk-dig-div {
+                       clocks = <&wiz3_refclk_dig>;
+                       #clock-cells = <0>;
+               };
+
+               wiz3_cmn_refclk1_dig_div: cmn-refclk1-dig-div {
+                       clocks = <&wiz3_pll1_refclk>;
+                       #clock-cells = <0>;
+               };
+
+               serdes3: serdes@5030000 {
+                       compatible = "ti,sierra-phy-t0";
+                       reg-names = "serdes";
+                       reg = <0x5030000 0x10000>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&serdes_wiz3 0>;
+                       reset-names = "sierra_reset";
+                       clocks = <&wiz3_cmn_refclk_dig_div>, <&wiz3_cmn_refclk1_dig_div>;
+                       clock-names = "cmn_refclk_dig_div", "cmn_refclk1_dig_div";
+               };
+       };
+
        main_uart0: serial@2800000 {
                compatible = "ti,j721e-uart", "ti,am654-uart";
                reg = <0x00 0x02800000 0x00 0x100>;
index dc31bd0..30a735b 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Device Tree Source for J721E SoC Family MCU/WAKEUP Domain peripherals
  *
- * Copyright (C) 2016-2019 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016-2019 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 &cbass_mcu_wakeup {
                };
        };
 
+       chipid@43000014 {
+               compatible = "ti,am654-chipid";
+               reg = <0x0 0x43000014 0x0 0x4>;
+       };
+
        wkup_pmx0: pinmux@4301c000 {
                compatible = "pinctrl-single";
                /* Proxy 0 addressing */
index 7680109..8fa3361 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2019 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 /dts-v1/;
index 2f9a56d..d035b61 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Device Tree Source for J721E SoC Family
  *
- * Copyright (C) 2016-2019 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2016-2019 Texas Instruments Incorporated - https://www.ti.com/
  */
 
 #include <dt-bindings/interrupt-controller/irq.h>
index 883e8ba..113a449 100644 (file)
@@ -865,6 +865,7 @@ CONFIG_QCOM_APR=m
 CONFIG_ARCH_R8A774A1=y
 CONFIG_ARCH_R8A774B1=y
 CONFIG_ARCH_R8A774C0=y
+CONFIG_ARCH_R8A774E1=y
 CONFIG_ARCH_R8A77950=y
 CONFIG_ARCH_R8A77951=y
 CONFIG_ARCH_R8A77960=y
index 6dbd267..758e2d1 100644 (file)
@@ -416,7 +416,7 @@ static inline pmd_t pmd_mkdevmap(pmd_t pmd)
        __pgprot((pgprot_val(prot) & ~(mask)) | (bits))
 
 #define pgprot_nx(prot) \
-       __pgprot_modify(prot, 0, PTE_PXN)
+       __pgprot_modify(prot, PTE_MAYBE_GP, PTE_PXN)
 
 /*
  * Mark the prot value as uncacheable and unbufferable.
index 35cb5e6..55c8f3e 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/bug.h>
 #include <linux/cache.h>
 #include <linux/compat.h>
+#include <linux/compiler.h>
 #include <linux/cpu.h>
 #include <linux/cpu_pm.h>
 #include <linux/kernel.h>
@@ -119,10 +120,20 @@ struct fpsimd_last_state_struct {
 static DEFINE_PER_CPU(struct fpsimd_last_state_struct, fpsimd_last_state);
 
 /* Default VL for tasks that don't set it explicitly: */
-static int sve_default_vl = -1;
+static int __sve_default_vl = -1;
+
+static int get_sve_default_vl(void)
+{
+       return READ_ONCE(__sve_default_vl);
+}
 
 #ifdef CONFIG_ARM64_SVE
 
+static void set_sve_default_vl(int val)
+{
+       WRITE_ONCE(__sve_default_vl, val);
+}
+
 /* Maximum supported vector length across all CPUs (initially poisoned) */
 int __ro_after_init sve_max_vl = SVE_VL_MIN;
 int __ro_after_init sve_max_virtualisable_vl = SVE_VL_MIN;
@@ -338,13 +349,13 @@ static unsigned int find_supported_vector_length(unsigned int vl)
        return sve_vl_from_vq(__bit_to_vq(bit));
 }
 
-#ifdef CONFIG_SYSCTL
+#if defined(CONFIG_ARM64_SVE) && defined(CONFIG_SYSCTL)
 
 static int sve_proc_do_default_vl(struct ctl_table *table, int write,
                                  void *buffer, size_t *lenp, loff_t *ppos)
 {
        int ret;
-       int vl = sve_default_vl;
+       int vl = get_sve_default_vl();
        struct ctl_table tmp_table = {
                .data = &vl,
                .maxlen = sizeof(vl),
@@ -361,7 +372,7 @@ static int sve_proc_do_default_vl(struct ctl_table *table, int write,
        if (!sve_vl_valid(vl))
                return -EINVAL;
 
-       sve_default_vl = find_supported_vector_length(vl);
+       set_sve_default_vl(find_supported_vector_length(vl));
        return 0;
 }
 
@@ -383,9 +394,9 @@ static int __init sve_sysctl_init(void)
        return 0;
 }
 
-#else /* ! CONFIG_SYSCTL */
+#else /* ! (CONFIG_ARM64_SVE && CONFIG_SYSCTL) */
 static int __init sve_sysctl_init(void) { return 0; }
-#endif /* ! CONFIG_SYSCTL */
+#endif /* ! (CONFIG_ARM64_SVE && CONFIG_SYSCTL) */
 
 #define ZREG(sve_state, vq, n) ((char *)(sve_state) +          \
        (SVE_SIG_ZREG_OFFSET(vq, n) - SVE_SIG_REGS_OFFSET))
@@ -868,7 +879,7 @@ void __init sve_setup(void)
         * For the default VL, pick the maximum supported value <= 64.
         * VL == 64 is guaranteed not to grow the signal frame.
         */
-       sve_default_vl = find_supported_vector_length(64);
+       set_sve_default_vl(find_supported_vector_length(64));
 
        bitmap_andnot(tmp_map, sve_vq_partial_map, sve_vq_map,
                      SVE_VQ_MAX);
@@ -889,7 +900,7 @@ void __init sve_setup(void)
        pr_info("SVE: maximum available vector length %u bytes per vector\n",
                sve_max_vl);
        pr_info("SVE: default vector length %u bytes per vector\n",
-               sve_default_vl);
+               get_sve_default_vl());
 
        /* KVM decides whether to support mismatched systems. Just warn here: */
        if (sve_max_virtualisable_vl < sve_max_vl)
@@ -1029,13 +1040,13 @@ void fpsimd_flush_thread(void)
                 * vector length configured: no kernel task can become a user
                 * task without an exec and hence a call to this function.
                 * By the time the first call to this function is made, all
-                * early hardware probing is complete, so sve_default_vl
+                * early hardware probing is complete, so __sve_default_vl
                 * should be valid.
                 * If a bug causes this to go wrong, we make some noise and
                 * try to fudge thread.sve_vl to a safe value here.
                 */
                vl = current->thread.sve_vl_onexec ?
-                       current->thread.sve_vl_onexec : sve_default_vl;
+                       current->thread.sve_vl_onexec : get_sve_default_vl();
 
                if (WARN_ON(!sve_vl_valid(vl)))
                        vl = SVE_VL_MIN;
index 0b727ed..af234a1 100644 (file)
@@ -730,6 +730,27 @@ static u64 get_distance_from_watchpoint(unsigned long addr, u64 val,
                return 0;
 }
 
+static int watchpoint_report(struct perf_event *wp, unsigned long addr,
+                            struct pt_regs *regs)
+{
+       int step = is_default_overflow_handler(wp);
+       struct arch_hw_breakpoint *info = counter_arch_bp(wp);
+
+       info->trigger = addr;
+
+       /*
+        * If we triggered a user watchpoint from a uaccess routine, then
+        * handle the stepping ourselves since userspace really can't help
+        * us with this.
+        */
+       if (!user_mode(regs) && info->ctrl.privilege == AARCH64_BREAKPOINT_EL0)
+               step = 1;
+       else
+               perf_bp_event(wp, regs);
+
+       return step;
+}
+
 static int watchpoint_handler(unsigned long addr, unsigned int esr,
                              struct pt_regs *regs)
 {
@@ -739,7 +760,6 @@ static int watchpoint_handler(unsigned long addr, unsigned int esr,
        u64 val;
        struct perf_event *wp, **slots;
        struct debug_info *debug_info;
-       struct arch_hw_breakpoint *info;
        struct arch_hw_breakpoint_ctrl ctrl;
 
        slots = this_cpu_ptr(wp_on_reg);
@@ -777,25 +797,13 @@ static int watchpoint_handler(unsigned long addr, unsigned int esr,
                if (dist != 0)
                        continue;
 
-               info = counter_arch_bp(wp);
-               info->trigger = addr;
-               perf_bp_event(wp, regs);
-
-               /* Do we need to handle the stepping? */
-               if (is_default_overflow_handler(wp))
-                       step = 1;
+               step = watchpoint_report(wp, addr, regs);
        }
-       if (min_dist > 0 && min_dist != -1) {
-               /* No exact match found. */
-               wp = slots[closest_match];
-               info = counter_arch_bp(wp);
-               info->trigger = addr;
-               perf_bp_event(wp, regs);
 
-               /* Do we need to handle the stepping? */
-               if (is_default_overflow_handler(wp))
-                       step = 1;
-       }
+       /* No exact match found? */
+       if (min_dist > 0 && min_dist != -1)
+               step = watchpoint_report(slots[closest_match], addr, regs);
+
        rcu_read_unlock();
 
        if (!step)
index 684d871..a107375 100644 (file)
@@ -135,7 +135,7 @@ int __kprobes aarch64_insn_read(void *addr, u32 *insnp)
        int ret;
        __le32 val;
 
-       ret = probe_kernel_read(&val, addr, AARCH64_INSN_SIZE);
+       ret = copy_from_kernel_nofault(&val, addr, AARCH64_INSN_SIZE);
        if (!ret)
                *insnp = le32_to_cpu(val);
 
@@ -151,7 +151,7 @@ static int __kprobes __aarch64_insn_write(void *addr, __le32 insn)
        raw_spin_lock_irqsave(&patch_lock, flags);
        waddr = patch_map(addr, FIX_TEXT_POKE0);
 
-       ret = probe_kernel_write(waddr, &insn, AARCH64_INSN_SIZE);
+       ret = copy_to_kernel_nofault(waddr, &insn, AARCH64_INSN_SIZE);
 
        patch_unmap(FIX_TEXT_POKE0);
        raw_spin_unlock_irqrestore(&patch_lock, flags);
index 522e6f5..361a114 100644 (file)
@@ -219,8 +219,7 @@ static int prepare_elf_headers(void **addr, unsigned long *sz)
                                        MEMBLOCK_NONE, &start, &end, NULL)
                nr_ranges++;
 
-       cmem = kmalloc(sizeof(struct crash_mem) +
-                       sizeof(struct crash_mem_range) * nr_ranges, GFP_KERNEL);
+       cmem = kmalloc(struct_size(cmem, ranges, nr_ranges), GFP_KERNEL);
        if (!cmem)
                return -ENOMEM;
 
index 50cc30a..47f651d 100644 (file)
@@ -376,7 +376,7 @@ static int call_undef_hook(struct pt_regs *regs)
 
        if (!user_mode(regs)) {
                __le32 instr_le;
-               if (probe_kernel_address((__force __le32 *)pc, instr_le))
+               if (get_kernel_nofault(instr_le, (__force __le32 *)pc))
                        goto exit;
                instr = le32_to_cpu(instr_le);
        } else if (compat_thumb_mode(regs)) {
@@ -813,6 +813,7 @@ asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr)
                handler[reason], smp_processor_id(), esr,
                esr_get_class_string(esr));
 
+       __show_regs(regs);
        local_daif_mask();
        panic("bad mode");
 }
index e631e64..1e93cfc 100644 (file)
@@ -404,11 +404,6 @@ void __init arm64_memblock_init(void)
        high_memory = __va(memblock_end_of_DRAM() - 1) + 1;
 
        dma_contiguous_reserve(arm64_dma32_phys_limit);
-
-#ifdef CONFIG_ARM64_4K_PAGES
-       hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT);
-#endif
-
 }
 
 void __init bootmem_init(void)
@@ -424,6 +419,16 @@ void __init bootmem_init(void)
        min_low_pfn = min;
 
        arm64_numa_init();
+
+       /*
+        * must be done after arm64_numa_init() which calls numa_init() to
+        * initialize node_online_map that gets used in hugetlb_cma_reserve()
+        * while allocating required CMA size across online nodes.
+        */
+#ifdef CONFIG_ARM64_4K_PAGES
+       hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT);
+#endif
+
        /*
         * Sparsemem tries to allocate bootmem in memory_present(), so must be
         * done after the fixed reservations.
index 990929c..1df25f2 100644 (file)
@@ -723,6 +723,7 @@ int kern_addr_valid(unsigned long addr)
        pmd_t *pmdp, pmd;
        pte_t *ptep, pte;
 
+       addr = arch_kasan_reset_tag(addr);
        if ((((long)addr) >> VA_BITS) != -1UL)
                return 0;
 
index 3c425b8..b4a7ec1 100644 (file)
@@ -72,7 +72,8 @@ static int ftrace_check_current_nop(unsigned long hook)
        uint16_t olds[7];
        unsigned long hook_pos = hook - 2;
 
-       if (probe_kernel_read((void *)olds, (void *)hook_pos, sizeof(nops)))
+       if (copy_from_kernel_nofault((void *)olds, (void *)hook_pos,
+                       sizeof(nops)))
                return -EFAULT;
 
        if (memcmp((void *)nops, (void *)olds, sizeof(nops))) {
@@ -97,7 +98,7 @@ static int ftrace_modify_code(unsigned long hook, unsigned long target,
 
        make_jbsr(target, hook, call, nolr);
 
-       ret = probe_kernel_write((void *)hook_pos, enable ? call : nops,
+       ret = copy_to_kernel_nofault((void *)hook_pos, enable ? call : nops,
                                 sizeof(nops));
        if (ret)
                return -EPERM;
index cea15f2..3a033d2 100644 (file)
@@ -35,7 +35,7 @@ static inline void *dereference_function_descriptor(void *ptr)
        struct fdesc *desc = ptr;
        void *p;
 
-       if (!probe_kernel_address(&desc->ip, p))
+       if (!get_kernel_nofault(p, (void *)&desc->ip))
                ptr = p;
        return ptr;
 }
index cee411e..b2ab2d5 100644 (file)
@@ -108,7 +108,7 @@ ftrace_modify_code(unsigned long ip, unsigned char *old_code,
                goto skip_check;
 
        /* read the text we want to modify */
-       if (probe_kernel_read(replaced, (void *)ip, MCOUNT_INSN_SIZE))
+       if (copy_from_kernel_nofault(replaced, (void *)ip, MCOUNT_INSN_SIZE))
                return -EFAULT;
 
        /* Make sure it is what we expect it to be */
@@ -117,7 +117,7 @@ ftrace_modify_code(unsigned long ip, unsigned char *old_code,
 
 skip_check:
        /* replace the text with the new text */
-       if (probe_kernel_write(((void *)ip), new_code, MCOUNT_INSN_SIZE))
+       if (copy_to_kernel_nofault(((void *)ip), new_code, MCOUNT_INSN_SIZE))
                return -EPERM;
        flush_icache_range(ip, ip + MCOUNT_INSN_SIZE);
 
@@ -129,7 +129,7 @@ static int ftrace_make_nop_check(struct dyn_ftrace *rec, unsigned long addr)
        unsigned char __attribute__((aligned(8))) replaced[MCOUNT_INSN_SIZE];
        unsigned long ip = rec->ip;
 
-       if (probe_kernel_read(replaced, (void *)ip, MCOUNT_INSN_SIZE))
+       if (copy_from_kernel_nofault(replaced, (void *)ip, MCOUNT_INSN_SIZE))
                return -EFAULT;
        if (rec->flags & FTRACE_FL_CONVERTED) {
                struct ftrace_call_insn *call_insn, *tmp_call;
index 67994a7..1dd57ba 100644 (file)
@@ -42,7 +42,7 @@ enum unw_register_index {
 
 struct unw_info_block {
        u64 header;
-       u64 desc[0];            /* unwind descriptors */
+       u64 desc[];             /* unwind descriptors */
        /* personality routine and language-specific data follow behind descriptors */
 };
 
index 6cfae24..d043c2f 100644 (file)
@@ -86,9 +86,9 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
                goto out;
        }
 
-       if ((probe_kernel_read(&prev_insn, p->addr - 1,
-                               sizeof(mips_instruction)) == 0) &&
-                               insn_has_delayslot(prev_insn)) {
+       if (copy_from_kernel_nofault(&prev_insn, p->addr - 1,
+                       sizeof(mips_instruction)) == 0 &&
+           insn_has_delayslot(prev_insn)) {
                pr_notice("Kprobes for branch delayslot are not supported\n");
                ret = -EINVAL;
                goto out;
index 22ab77e..3763b3f 100644 (file)
@@ -131,13 +131,14 @@ static int __ftrace_modify_code(unsigned long pc, unsigned long *old_insn,
        unsigned long orig_insn[3];
 
        if (validate) {
-               if (probe_kernel_read(orig_insn, (void *)pc, MCOUNT_INSN_SIZE))
+               if (copy_from_kernel_nofault(orig_insn, (void *)pc,
+                               MCOUNT_INSN_SIZE))
                        return -EFAULT;
                if (memcmp(orig_insn, old_insn, MCOUNT_INSN_SIZE))
                        return -EINVAL;
        }
 
-       if (probe_kernel_write((void *)pc, new_insn, MCOUNT_INSN_SIZE))
+       if (copy_to_kernel_nofault((void *)pc, new_insn, MCOUNT_INSN_SIZE))
                return -EPERM;
 
        return 0;
index b836fc6..1df0f67 100644 (file)
@@ -172,7 +172,7 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
 
        ip = (void *)(rec->ip + 4 - size);
 
-       ret = probe_kernel_read(insn, ip, size);
+       ret = copy_from_kernel_nofault(insn, ip, size);
        if (ret)
                return ret;
 
index 664278d..c4554ac 100644 (file)
@@ -154,8 +154,8 @@ void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long ip)
 
 int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
 {
-       int ret = probe_kernel_read(bpt->saved_instr, (char *)bpt->bpt_addr,
-                               BREAK_INSTR_SIZE);
+       int ret = copy_from_kernel_nofault(bpt->saved_instr,
+                       (char *)bpt->bpt_addr, BREAK_INSTR_SIZE);
        if (ret)
                return ret;
 
index 230a642..b7abb12 100644 (file)
@@ -293,7 +293,7 @@ void *dereference_function_descriptor(void *ptr)
        Elf64_Fdesc *desc = ptr;
        void *p;
 
-       if (!probe_kernel_address(&desc->addr, p))
+       if (!get_kernel_nofault(p, (void *)&desc->addr))
                ptr = p;
        return ptr;
 }
index 94a9fe2..4b75388 100644 (file)
@@ -57,7 +57,7 @@ void * memcpy(void * dst,const void *src, size_t count)
 EXPORT_SYMBOL(raw_copy_in_user);
 EXPORT_SYMBOL(memcpy);
 
-bool probe_kernel_read_allowed(const void *unsafe_src, size_t size)
+bool copy_from_kernel_nofault_allowed(const void *unsafe_src, size_t size)
 {
        if ((unsigned long)unsafe_src < PAGE_SIZE)
                return false;
index b56f141..b0afbdd 100644 (file)
@@ -205,10 +205,6 @@ static inline void pmd_clear(pmd_t *pmdp)
        *pmdp = __pmd(0);
 }
 
-/* to find an entry in a page-table-directory */
-#define pgd_index(address)      ((address) >> PGDIR_SHIFT)
-#define pgd_offset(mm, address)         ((mm)->pgd + pgd_index(address))
-
 /*
  * PTE updates. This function is called whenever an existing
  * valid PTE is updated. This does -not- include set_pte_at()
@@ -230,6 +226,8 @@ static inline void pmd_clear(pmd_t *pmdp)
  * For other page sizes, we have a single entry in the table.
  */
 #ifdef CONFIG_PPC_8xx
+static pmd_t *pmd_off(struct mm_struct *mm, unsigned long addr);
+
 static inline pte_basic_t pte_update(struct mm_struct *mm, unsigned long addr, pte_t *p,
                                     unsigned long clr, unsigned long set, int huge)
 {
@@ -237,7 +235,7 @@ static inline pte_basic_t pte_update(struct mm_struct *mm, unsigned long addr, p
        pte_basic_t old = pte_val(*p);
        pte_basic_t new = (old & ~(pte_basic_t)clr) | set;
        int num, i;
-       pmd_t *pmd = pmd_offset(pud_offset(p4d_offset(pgd_offset(mm, addr), addr), addr), addr);
+       pmd_t *pmd = pmd_off(mm, addr);
 
        if (!huge)
                num = PAGE_SIZE / SZ_4K;
@@ -286,6 +284,16 @@ static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
        return __pte(pte_update(mm, addr, ptep, ~0, 0, 0));
 }
 
+#if defined(CONFIG_PPC_8xx) && defined(CONFIG_PPC_16K_PAGES)
+#define __HAVE_ARCH_PTEP_GET
+static inline pte_t ptep_get(pte_t *ptep)
+{
+       pte_t pte = {READ_ONCE(ptep->pte), 0, 0, 0};
+
+       return pte;
+}
+#endif
+
 #define __HAVE_ARCH_PTEP_SET_WRPROTECT
 static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr,
                                      pte_t *ptep)
index d198717..324d7b2 100644 (file)
@@ -85,7 +85,7 @@ static inline void *dereference_function_descriptor(void *ptr)
        struct ppc64_opd_entry *desc = ptr;
        void *p;
 
-       if (!probe_kernel_address(&desc->funcaddr, p))
+       if (!get_kernel_nofault(p, (void *)&desc->funcaddr))
                ptr = p;
        return ptr;
 }
diff --git a/arch/powerpc/include/uapi/asm/papr_pdsm.h b/arch/powerpc/include/uapi/asm/papr_pdsm.h
new file mode 100644 (file)
index 0000000..9ccecc1
--- /dev/null
@@ -0,0 +1,132 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * PAPR nvDimm Specific Methods (PDSM) and structs for libndctl
+ *
+ * (C) Copyright IBM 2020
+ *
+ * Author: Vaibhav Jain <vaibhav at linux.ibm.com>
+ */
+
+#ifndef _UAPI_ASM_POWERPC_PAPR_PDSM_H_
+#define _UAPI_ASM_POWERPC_PAPR_PDSM_H_
+
+#include <linux/types.h>
+#include <linux/ndctl.h>
+
+/*
+ * PDSM Envelope:
+ *
+ * The ioctl ND_CMD_CALL exchange data between user-space and kernel via
+ * envelope which consists of 2 headers sections and payload sections as
+ * illustrated below:
+ *  +-----------------+---------------+---------------------------+
+ *  |   64-Bytes      |   8-Bytes     |       Max 184-Bytes       |
+ *  +-----------------+---------------+---------------------------+
+ *  | ND-HEADER       |  PDSM-HEADER  |      PDSM-PAYLOAD         |
+ *  +-----------------+---------------+---------------------------+
+ *  | nd_family       |               |                           |
+ *  | nd_size_out     | cmd_status    |                           |
+ *  | nd_size_in      | reserved      |     nd_pdsm_payload       |
+ *  | nd_command      | payload   --> |                           |
+ *  | nd_fw_size      |               |                           |
+ *  | nd_payload ---> |               |                           |
+ *  +---------------+-----------------+---------------------------+
+ *
+ * ND Header:
+ * This is the generic libnvdimm header described as 'struct nd_cmd_pkg'
+ * which is interpreted by libnvdimm before passed on to papr_scm. Important
+ * member fields used are:
+ * 'nd_family'         : (In) NVDIMM_FAMILY_PAPR_SCM
+ * 'nd_size_in'                : (In) PDSM-HEADER + PDSM-IN-PAYLOAD (usually 0)
+ * 'nd_size_out'        : (In) PDSM-HEADER + PDSM-RETURN-PAYLOAD
+ * 'nd_command'         : (In) One of PAPR_PDSM_XXX
+ * 'nd_fw_size'         : (Out) PDSM-HEADER + size of actual payload returned
+ *
+ * PDSM Header:
+ * This is papr-scm specific header that precedes the payload. This is defined
+ * as nd_cmd_pdsm_pkg.  Following fields aare available in this header:
+ *
+ * 'cmd_status'                : (Out) Errors if any encountered while servicing PDSM.
+ * 'reserved'          : Not used, reserved for future and should be set to 0.
+ * 'payload'            : A union of all the possible payload structs
+ *
+ * PDSM Payload:
+ *
+ * The layout of the PDSM Payload is defined by various structs shared between
+ * papr_scm and libndctl so that contents of payload can be interpreted. As such
+ * its defined as a union of all possible payload structs as
+ * 'union nd_pdsm_payload'. Based on the value of 'nd_cmd_pkg.nd_command'
+ * appropriate member of the union is accessed.
+ */
+
+/* Max payload size that we can handle */
+#define ND_PDSM_PAYLOAD_MAX_SIZE 184
+
+/* Max payload size that we can handle */
+#define ND_PDSM_HDR_SIZE \
+       (sizeof(struct nd_pkg_pdsm) - ND_PDSM_PAYLOAD_MAX_SIZE)
+
+/* Various nvdimm health indicators */
+#define PAPR_PDSM_DIMM_HEALTHY       0
+#define PAPR_PDSM_DIMM_UNHEALTHY     1
+#define PAPR_PDSM_DIMM_CRITICAL      2
+#define PAPR_PDSM_DIMM_FATAL         3
+
+/*
+ * Struct exchanged between kernel & ndctl in for PAPR_PDSM_HEALTH
+ * Various flags indicate the health status of the dimm.
+ *
+ * extension_flags     : Any extension fields present in the struct.
+ * dimm_unarmed                : Dimm not armed. So contents wont persist.
+ * dimm_bad_shutdown   : Previous shutdown did not persist contents.
+ * dimm_bad_restore    : Contents from previous shutdown werent restored.
+ * dimm_scrubbed       : Contents of the dimm have been scrubbed.
+ * dimm_locked         : Contents of the dimm cant be modified until CEC reboot
+ * dimm_encrypted      : Contents of dimm are encrypted.
+ * dimm_health         : Dimm health indicator. One of PAPR_PDSM_DIMM_XXXX
+ */
+struct nd_papr_pdsm_health {
+       union {
+               struct {
+                       __u32 extension_flags;
+                       __u8 dimm_unarmed;
+                       __u8 dimm_bad_shutdown;
+                       __u8 dimm_bad_restore;
+                       __u8 dimm_scrubbed;
+                       __u8 dimm_locked;
+                       __u8 dimm_encrypted;
+                       __u16 dimm_health;
+               };
+               __u8 buf[ND_PDSM_PAYLOAD_MAX_SIZE];
+       };
+};
+
+/*
+ * Methods to be embedded in ND_CMD_CALL request. These are sent to the kernel
+ * via 'nd_cmd_pkg.nd_command' member of the ioctl struct
+ */
+enum papr_pdsm {
+       PAPR_PDSM_MIN = 0x0,
+       PAPR_PDSM_HEALTH,
+       PAPR_PDSM_MAX,
+};
+
+/* Maximal union that can hold all possible payload types */
+union nd_pdsm_payload {
+       struct nd_papr_pdsm_health health;
+       __u8 buf[ND_PDSM_PAYLOAD_MAX_SIZE];
+} __packed;
+
+/*
+ * PDSM-header + payload expected with ND_CMD_CALL ioctl from libnvdimm
+ * Valid member of union 'payload' is identified via 'nd_cmd_pkg.nd_command'
+ * that should always precede this struct when sent to papr_scm via CMD_CALL
+ * interface.
+ */
+struct nd_pkg_pdsm {
+       __s32 cmd_status;       /* Out: Sub-cmd status returned back */
+       __u16 reserved[2];      /* Ignored and to be set as '0' */
+       union nd_pdsm_payload payload;
+} __packed;
+
+#endif /* _UAPI_ASM_POWERPC_PAPR_PDSM_H_ */
index e70ebb5..fa08069 100644 (file)
@@ -270,7 +270,7 @@ BEGIN_FTR_SECTION
 END_FTR_SECTION_IFSET(CPU_FTR_CFAR)
        .endif
 
-       ld      r10,PACA_EXGEN+EX_CTR(r13)
+       ld      r10,IAREA+EX_CTR(r13)
        mtctr   r10
 BEGIN_FTR_SECTION
        ld      r10,IAREA+EX_PPR(r13)
@@ -298,7 +298,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
 
        .if IKVM_SKIP
 89:    mtocrf  0x80,r9
-       ld      r10,PACA_EXGEN+EX_CTR(r13)
+       ld      r10,IAREA+EX_CTR(r13)
        mtctr   r10
        ld      r9,IAREA+EX_R9(r13)
        ld      r10,IAREA+EX_R10(r13)
index 652b285..4090802 100644 (file)
@@ -421,7 +421,7 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
        unsigned int instr;
        struct ppc_inst *addr = (struct ppc_inst *)bpt->bpt_addr;
 
-       err = probe_kernel_address(addr, instr);
+       err = get_kernel_nofault(instr, (unsigned *) addr);
        if (err)
                return err;
 
index 6f96f65..9cc792a 100644 (file)
@@ -289,7 +289,7 @@ int kprobe_handler(struct pt_regs *regs)
        if (!p) {
                unsigned int instr;
 
-               if (probe_kernel_address(addr, instr))
+               if (get_kernel_nofault(instr, addr))
                        goto no_kprobe;
 
                if (instr != BREAKPOINT_INSTRUCTION) {
index f4c2fa1..ae2b188 100644 (file)
@@ -756,7 +756,8 @@ int module_trampoline_target(struct module *mod, unsigned long addr,
 
        stub = (struct ppc64_stub_entry *)addr;
 
-       if (probe_kernel_read(&magic, &stub->magic, sizeof(magic))) {
+       if (copy_from_kernel_nofault(&magic, &stub->magic,
+                       sizeof(magic))) {
                pr_err("%s: fault reading magic for stub %lx for %s\n", __func__, addr, mod->name);
                return -EFAULT;
        }
@@ -766,7 +767,8 @@ int module_trampoline_target(struct module *mod, unsigned long addr,
                return -EFAULT;
        }
 
-       if (probe_kernel_read(&funcdata, &stub->funcdata, sizeof(funcdata))) {
+       if (copy_from_kernel_nofault(&funcdata, &stub->funcdata,
+                       sizeof(funcdata))) {
                pr_err("%s: fault reading funcdata for stub %lx for %s\n", __func__, addr, mod->name);
                 return -EFAULT;
        }
index 7bb7faf..4650b9b 100644 (file)
@@ -1252,29 +1252,31 @@ struct task_struct *__switch_to(struct task_struct *prev,
 static void show_instructions(struct pt_regs *regs)
 {
        int i;
+       unsigned long nip = regs->nip;
        unsigned long pc = regs->nip - (NR_INSN_TO_PRINT * 3 / 4 * sizeof(int));
 
        printk("Instruction dump:");
 
+       /*
+        * If we were executing with the MMU off for instructions, adjust pc
+        * rather than printing XXXXXXXX.
+        */
+       if (!IS_ENABLED(CONFIG_BOOKE) && !(regs->msr & MSR_IR)) {
+               pc = (unsigned long)phys_to_virt(pc);
+               nip = (unsigned long)phys_to_virt(regs->nip);
+       }
+
        for (i = 0; i < NR_INSN_TO_PRINT; i++) {
                int instr;
 
                if (!(i % 8))
                        pr_cont("\n");
 
-#if !defined(CONFIG_BOOKE)
-               /* If executing with the IMMU off, adjust pc rather
-                * than print XXXXXXXX.
-                */
-               if (!(regs->msr & MSR_IR))
-                       pc = (unsigned long)phys_to_virt(pc);
-#endif
-
                if (!__kernel_text_address(pc) ||
-                   probe_kernel_address((const void *)pc, instr)) {
+                   get_kernel_nofault(instr, (const void *)pc)) {
                        pr_cont("XXXXXXXX ");
                } else {
-                       if (regs->nip == pc)
+                       if (nip == pc)
                                pr_cont("<%08x> ", instr);
                        else
                                pr_cont("%08x ", instr);
@@ -1305,7 +1307,8 @@ void show_user_instructions(struct pt_regs *regs)
                for (i = 0; i < 8 && n; i++, n--, pc += sizeof(int)) {
                        int instr;
 
-                       if (probe_user_read(&instr, (void __user *)pc, sizeof(instr))) {
+                       if (copy_from_user_nofault(&instr, (void __user *)pc,
+                                       sizeof(instr))) {
                                seq_buf_printf(&s, "XXXXXXXX ");
                                continue;
                        }
index 5e39962..c1fede6 100644 (file)
@@ -226,7 +226,7 @@ __ftrace_make_nop(struct module *mod,
        unsigned long ip = rec->ip;
        unsigned long tramp;
 
-       if (probe_kernel_read(&op, (void *)ip, MCOUNT_INSN_SIZE))
+       if (copy_from_kernel_nofault(&op, (void *)ip, MCOUNT_INSN_SIZE))
                return -EFAULT;
 
        /* Make sure that that this is still a 24bit jump */
@@ -249,7 +249,7 @@ __ftrace_make_nop(struct module *mod,
        pr_devel("ip:%lx jumps to %lx", ip, tramp);
 
        /* Find where the trampoline jumps to */
-       if (probe_kernel_read(jmp, (void *)tramp, sizeof(jmp))) {
+       if (copy_from_kernel_nofault(jmp, (void *)tramp, sizeof(jmp))) {
                pr_err("Failed to read %lx\n", tramp);
                return -EFAULT;
        }
index 3cb0c98..e738ea6 100644 (file)
@@ -64,9 +64,9 @@ unsigned long __kvmhv_copy_tofrom_guest_radix(int lpid, int pid,
        isync();
 
        if (is_load)
-               ret = probe_user_read(to, (const void __user *)from, n);
+               ret = copy_from_user_nofault(to, (const void __user *)from, n);
        else
-               ret = probe_user_write((void __user *)to, from, n);
+               ret = copy_to_user_nofault((void __user *)to, from, n);
 
        /* switch the pid first to avoid running host with unallocated pid */
        if (quadrant == 1 && pid != old_pid)
index aedfd6e..9cc17eb 100644 (file)
@@ -15,11 +15,11 @@ int probe_user_read_inst(struct ppc_inst *inst,
        unsigned int val, suffix;
        int err;
 
-       err = probe_user_read(&val, nip, sizeof(val));
+       err = copy_from_user_nofault(&val, nip, sizeof(val));
        if (err)
                return err;
        if (get_op(val) == OP_PREFIX) {
-               err = probe_user_read(&suffix, (void __user *)nip + 4, 4);
+               err = copy_from_user_nofault(&suffix, (void __user *)nip + 4, 4);
                *inst = ppc_inst_prefix(val, suffix);
        } else {
                *inst = ppc_inst(val);
@@ -33,11 +33,11 @@ int probe_kernel_read_inst(struct ppc_inst *inst,
        unsigned int val, suffix;
        int err;
 
-       err = probe_kernel_read(&val, src, sizeof(val));
+       err = copy_from_kernel_nofault(&val, src, sizeof(val));
        if (err)
                return err;
        if (get_op(val) == OP_PREFIX) {
-               err = probe_kernel_read(&suffix, (void *)src + 4, 4);
+               err = copy_from_kernel_nofault(&suffix, (void *)src + 4, 4);
                *inst = ppc_inst_prefix(val, suffix);
        } else {
                *inst = ppc_inst(val);
@@ -51,7 +51,7 @@ int probe_user_read_inst(struct ppc_inst *inst,
        unsigned int val;
        int err;
 
-       err = probe_user_read(&val, nip, sizeof(val));
+       err = copy_from_user_nofault(&val, nip, sizeof(val));
        if (!err)
                *inst = ppc_inst(val);
 
@@ -64,7 +64,7 @@ int probe_kernel_read_inst(struct ppc_inst *inst,
        unsigned int val;
        int err;
 
-       err = probe_kernel_read(&val, src, sizeof(val));
+       err = copy_from_kernel_nofault(&val, src, sizeof(val));
        if (!err)
                *inst = ppc_inst(val);
 
index 6f347fa..9db7ada 100644 (file)
@@ -33,7 +33,8 @@ static unsigned int user_getsp32(unsigned int sp, int is_first)
         * which means that we've done all that we can do from
         * interrupt context.
         */
-       if (probe_user_read(stack_frame, (void __user *)p, sizeof(stack_frame)))
+       if (copy_from_user_nofault(stack_frame, (void __user *)p,
+                       sizeof(stack_frame)))
                return 0;
 
        if (!is_first)
@@ -51,7 +52,8 @@ static unsigned long user_getsp64(unsigned long sp, int is_first)
 {
        unsigned long stack_frame[3];
 
-       if (probe_user_read(stack_frame, (void __user *)sp, sizeof(stack_frame)))
+       if (copy_from_user_nofault(stack_frame, (void __user *)sp,
+                       sizeof(stack_frame)))
                return 0;
 
        if (!is_first)
index f7d888d..542e68b 100644 (file)
@@ -44,7 +44,7 @@ static int read_user_stack_32(unsigned int __user *ptr, unsigned int *ret)
            ((unsigned long)ptr & 3))
                return -EFAULT;
 
-       rc = probe_user_read(ret, ptr, sizeof(*ret));
+       rc = copy_from_user_nofault(ret, ptr, sizeof(*ret));
 
        if (IS_ENABLED(CONFIG_PPC64) && rc)
                return read_user_stack_slow(ptr, ret, 4);
index 814d1c2..fa2a1b8 100644 (file)
@@ -50,7 +50,7 @@ static int read_user_stack_64(unsigned long __user *ptr, unsigned long *ret)
            ((unsigned long)ptr & 7))
                return -EFAULT;
 
-       if (!probe_user_read(ret, ptr, sizeof(*ret)))
+       if (!copy_from_user_nofault(ret, ptr, sizeof(*ret)))
                return 0;
 
        return read_user_stack_slow(ptr, ret, 8);
index 13b9dd5..cd6a742 100644 (file)
@@ -418,14 +418,16 @@ static __u64 power_pmu_bhrb_to(u64 addr)
        __u64 target;
 
        if (is_kernel_addr(addr)) {
-               if (probe_kernel_read(&instr, (void *)addr, sizeof(instr)))
+               if (copy_from_kernel_nofault(&instr, (void *)addr,
+                               sizeof(instr)))
                        return 0;
 
                return branch_target((struct ppc_inst *)&instr);
        }
 
        /* Userspace: need copy instruction here then translate it */
-       if (probe_user_read(&instr, (unsigned int __user *)addr, sizeof(instr)))
+       if (copy_from_user_nofault(&instr, (unsigned int __user *)addr,
+                       sizeof(instr)))
                return 0;
 
        target = branch_target((struct ppc_inst *)&instr);
index cbee366..abdef9b 100644 (file)
@@ -35,7 +35,7 @@
  */
 
 static void *spu_syscall_table[] = {
-#define __SYSCALL(nr, entry)   entry,
+#define __SYSCALL(nr, entry) [nr] = entry,
 #include <asm/syscall_table_spu.h>
 #undef __SYSCALL
 };
index f355924..9c56907 100644 (file)
 #include <linux/libnvdimm.h>
 #include <linux/platform_device.h>
 #include <linux/delay.h>
+#include <linux/seq_buf.h>
 
 #include <asm/plpar_wrappers.h>
+#include <asm/papr_pdsm.h>
 
 #define BIND_ANY_ADDR (~0ul)
 
 #define PAPR_SCM_DIMM_CMD_MASK \
        ((1ul << ND_CMD_GET_CONFIG_SIZE) | \
         (1ul << ND_CMD_GET_CONFIG_DATA) | \
-        (1ul << ND_CMD_SET_CONFIG_DATA))
-
+        (1ul << ND_CMD_SET_CONFIG_DATA) | \
+        (1ul << ND_CMD_CALL))
+
+/* DIMM health bitmap bitmap indicators */
+/* SCM device is unable to persist memory contents */
+#define PAPR_PMEM_UNARMED                   (1ULL << (63 - 0))
+/* SCM device failed to persist memory contents */
+#define PAPR_PMEM_SHUTDOWN_DIRTY            (1ULL << (63 - 1))
+/* SCM device contents are persisted from previous IPL */
+#define PAPR_PMEM_SHUTDOWN_CLEAN            (1ULL << (63 - 2))
+/* SCM device contents are not persisted from previous IPL */
+#define PAPR_PMEM_EMPTY                     (1ULL << (63 - 3))
+/* SCM device memory life remaining is critically low */
+#define PAPR_PMEM_HEALTH_CRITICAL           (1ULL << (63 - 4))
+/* SCM device will be garded off next IPL due to failure */
+#define PAPR_PMEM_HEALTH_FATAL              (1ULL << (63 - 5))
+/* SCM contents cannot persist due to current platform health status */
+#define PAPR_PMEM_HEALTH_UNHEALTHY          (1ULL << (63 - 6))
+/* SCM device is unable to persist memory contents in certain conditions */
+#define PAPR_PMEM_HEALTH_NON_CRITICAL       (1ULL << (63 - 7))
+/* SCM device is encrypted */
+#define PAPR_PMEM_ENCRYPTED                 (1ULL << (63 - 8))
+/* SCM device has been scrubbed and locked */
+#define PAPR_PMEM_SCRUBBED_AND_LOCKED       (1ULL << (63 - 9))
+
+/* Bits status indicators for health bitmap indicating unarmed dimm */
+#define PAPR_PMEM_UNARMED_MASK (PAPR_PMEM_UNARMED |            \
+                               PAPR_PMEM_HEALTH_UNHEALTHY)
+
+/* Bits status indicators for health bitmap indicating unflushed dimm */
+#define PAPR_PMEM_BAD_SHUTDOWN_MASK (PAPR_PMEM_SHUTDOWN_DIRTY)
+
+/* Bits status indicators for health bitmap indicating unrestored dimm */
+#define PAPR_PMEM_BAD_RESTORE_MASK  (PAPR_PMEM_EMPTY)
+
+/* Bit status indicators for smart event notification */
+#define PAPR_PMEM_SMART_EVENT_MASK (PAPR_PMEM_HEALTH_CRITICAL | \
+                                   PAPR_PMEM_HEALTH_FATAL |    \
+                                   PAPR_PMEM_HEALTH_UNHEALTHY)
+
+/* private struct associated with each region */
 struct papr_scm_priv {
        struct platform_device *pdev;
        struct device_node *dn;
@@ -39,6 +80,15 @@ struct papr_scm_priv {
        struct resource res;
        struct nd_region *region;
        struct nd_interleave_set nd_set;
+
+       /* Protect dimm health data from concurrent read/writes */
+       struct mutex health_mutex;
+
+       /* Last time the health information of the dimm was updated */
+       unsigned long lasthealth_jiffies;
+
+       /* Health information for the dimm */
+       u64 health_bitmap;
 };
 
 static int drc_pmem_bind(struct papr_scm_priv *p)
@@ -144,6 +194,61 @@ err_out:
        return drc_pmem_bind(p);
 }
 
+/*
+ * Issue hcall to retrieve dimm health info and populate papr_scm_priv with the
+ * health information.
+ */
+static int __drc_pmem_query_health(struct papr_scm_priv *p)
+{
+       unsigned long ret[PLPAR_HCALL_BUFSIZE];
+       long rc;
+
+       /* issue the hcall */
+       rc = plpar_hcall(H_SCM_HEALTH, ret, p->drc_index);
+       if (rc != H_SUCCESS) {
+               dev_err(&p->pdev->dev,
+                       "Failed to query health information, Err:%ld\n", rc);
+               return -ENXIO;
+       }
+
+       p->lasthealth_jiffies = jiffies;
+       p->health_bitmap = ret[0] & ret[1];
+
+       dev_dbg(&p->pdev->dev,
+               "Queried dimm health info. Bitmap:0x%016lx Mask:0x%016lx\n",
+               ret[0], ret[1]);
+
+       return 0;
+}
+
+/* Min interval in seconds for assuming stable dimm health */
+#define MIN_HEALTH_QUERY_INTERVAL 60
+
+/* Query cached health info and if needed call drc_pmem_query_health */
+static int drc_pmem_query_health(struct papr_scm_priv *p)
+{
+       unsigned long cache_timeout;
+       int rc;
+
+       /* Protect concurrent modifications to papr_scm_priv */
+       rc = mutex_lock_interruptible(&p->health_mutex);
+       if (rc)
+               return rc;
+
+       /* Jiffies offset for which the health data is assumed to be same */
+       cache_timeout = p->lasthealth_jiffies +
+               msecs_to_jiffies(MIN_HEALTH_QUERY_INTERVAL * 1000);
+
+       /* Fetch new health info is its older than MIN_HEALTH_QUERY_INTERVAL */
+       if (time_after(jiffies, cache_timeout))
+               rc = __drc_pmem_query_health(p);
+       else
+               /* Assume cached health data is valid */
+               rc = 0;
+
+       mutex_unlock(&p->health_mutex);
+       return rc;
+}
 
 static int papr_scm_meta_get(struct papr_scm_priv *p,
                             struct nd_cmd_get_config_data_hdr *hdr)
@@ -246,16 +351,250 @@ static int papr_scm_meta_set(struct papr_scm_priv *p,
        return 0;
 }
 
+/*
+ * Do a sanity checks on the inputs args to dimm-control function and return
+ * '0' if valid. Validation of PDSM payloads happens later in
+ * papr_scm_service_pdsm.
+ */
+static int is_cmd_valid(struct nvdimm *nvdimm, unsigned int cmd, void *buf,
+                       unsigned int buf_len)
+{
+       unsigned long cmd_mask = PAPR_SCM_DIMM_CMD_MASK;
+       struct nd_cmd_pkg *nd_cmd;
+       struct papr_scm_priv *p;
+       enum papr_pdsm pdsm;
+
+       /* Only dimm-specific calls are supported atm */
+       if (!nvdimm)
+               return -EINVAL;
+
+       /* get the provider data from struct nvdimm */
+       p = nvdimm_provider_data(nvdimm);
+
+       if (!test_bit(cmd, &cmd_mask)) {
+               dev_dbg(&p->pdev->dev, "Unsupported cmd=%u\n", cmd);
+               return -EINVAL;
+       }
+
+       /* For CMD_CALL verify pdsm request */
+       if (cmd == ND_CMD_CALL) {
+               /* Verify the envelope and envelop size */
+               if (!buf ||
+                   buf_len < (sizeof(struct nd_cmd_pkg) + ND_PDSM_HDR_SIZE)) {
+                       dev_dbg(&p->pdev->dev, "Invalid pkg size=%u\n",
+                               buf_len);
+                       return -EINVAL;
+               }
+
+               /* Verify that the nd_cmd_pkg.nd_family is correct */
+               nd_cmd = (struct nd_cmd_pkg *)buf;
+
+               if (nd_cmd->nd_family != NVDIMM_FAMILY_PAPR) {
+                       dev_dbg(&p->pdev->dev, "Invalid pkg family=0x%llx\n",
+                               nd_cmd->nd_family);
+                       return -EINVAL;
+               }
+
+               pdsm = (enum papr_pdsm)nd_cmd->nd_command;
+
+               /* Verify if the pdsm command is valid */
+               if (pdsm <= PAPR_PDSM_MIN || pdsm >= PAPR_PDSM_MAX) {
+                       dev_dbg(&p->pdev->dev, "PDSM[0x%x]: Invalid PDSM\n",
+                               pdsm);
+                       return -EINVAL;
+               }
+
+               /* Have enough space to hold returned 'nd_pkg_pdsm' header */
+               if (nd_cmd->nd_size_out < ND_PDSM_HDR_SIZE) {
+                       dev_dbg(&p->pdev->dev, "PDSM[0x%x]: Invalid payload\n",
+                               pdsm);
+                       return -EINVAL;
+               }
+       }
+
+       /* Let the command be further processed */
+       return 0;
+}
+
+/* Fetch the DIMM health info and populate it in provided package. */
+static int papr_pdsm_health(struct papr_scm_priv *p,
+                           union nd_pdsm_payload *payload)
+{
+       int rc;
+
+       /* Ensure dimm health mutex is taken preventing concurrent access */
+       rc = mutex_lock_interruptible(&p->health_mutex);
+       if (rc)
+               goto out;
+
+       /* Always fetch upto date dimm health data ignoring cached values */
+       rc = __drc_pmem_query_health(p);
+       if (rc) {
+               mutex_unlock(&p->health_mutex);
+               goto out;
+       }
+
+       /* update health struct with various flags derived from health bitmap */
+       payload->health = (struct nd_papr_pdsm_health) {
+               .extension_flags = 0,
+               .dimm_unarmed = !!(p->health_bitmap & PAPR_PMEM_UNARMED_MASK),
+               .dimm_bad_shutdown = !!(p->health_bitmap & PAPR_PMEM_BAD_SHUTDOWN_MASK),
+               .dimm_bad_restore = !!(p->health_bitmap & PAPR_PMEM_BAD_RESTORE_MASK),
+               .dimm_scrubbed = !!(p->health_bitmap & PAPR_PMEM_SCRUBBED_AND_LOCKED),
+               .dimm_locked = !!(p->health_bitmap & PAPR_PMEM_SCRUBBED_AND_LOCKED),
+               .dimm_encrypted = !!(p->health_bitmap & PAPR_PMEM_ENCRYPTED),
+               .dimm_health = PAPR_PDSM_DIMM_HEALTHY,
+       };
+
+       /* Update field dimm_health based on health_bitmap flags */
+       if (p->health_bitmap & PAPR_PMEM_HEALTH_FATAL)
+               payload->health.dimm_health = PAPR_PDSM_DIMM_FATAL;
+       else if (p->health_bitmap & PAPR_PMEM_HEALTH_CRITICAL)
+               payload->health.dimm_health = PAPR_PDSM_DIMM_CRITICAL;
+       else if (p->health_bitmap & PAPR_PMEM_HEALTH_UNHEALTHY)
+               payload->health.dimm_health = PAPR_PDSM_DIMM_UNHEALTHY;
+
+       /* struct populated hence can release the mutex now */
+       mutex_unlock(&p->health_mutex);
+       rc = sizeof(struct nd_papr_pdsm_health);
+
+out:
+       return rc;
+}
+
+/*
+ * 'struct pdsm_cmd_desc'
+ * Identifies supported PDSMs' expected length of in/out payloads
+ * and pdsm service function.
+ *
+ * size_in     : Size of input payload if any in the PDSM request.
+ * size_out    : Size of output payload if any in the PDSM request.
+ * service     : Service function for the PDSM request. Return semantics:
+ *               rc < 0 : Error servicing PDSM and rc indicates the error.
+ *               rc >=0 : Serviced successfully and 'rc' indicate number of
+ *                     bytes written to payload.
+ */
+struct pdsm_cmd_desc {
+       u32 size_in;
+       u32 size_out;
+       int (*service)(struct papr_scm_priv *dimm,
+                      union nd_pdsm_payload *payload);
+};
+
+/* Holds all supported PDSMs' command descriptors */
+static const struct pdsm_cmd_desc __pdsm_cmd_descriptors[] = {
+       [PAPR_PDSM_MIN] = {
+               .size_in = 0,
+               .size_out = 0,
+               .service = NULL,
+       },
+       /* New PDSM command descriptors to be added below */
+
+       [PAPR_PDSM_HEALTH] = {
+               .size_in = 0,
+               .size_out = sizeof(struct nd_papr_pdsm_health),
+               .service = papr_pdsm_health,
+       },
+       /* Empty */
+       [PAPR_PDSM_MAX] = {
+               .size_in = 0,
+               .size_out = 0,
+               .service = NULL,
+       },
+};
+
+/* Given a valid pdsm cmd return its command descriptor else return NULL */
+static inline const struct pdsm_cmd_desc *pdsm_cmd_desc(enum papr_pdsm cmd)
+{
+       if (cmd >= 0 || cmd < ARRAY_SIZE(__pdsm_cmd_descriptors))
+               return &__pdsm_cmd_descriptors[cmd];
+
+       return NULL;
+}
+
+/*
+ * For a given pdsm request call an appropriate service function.
+ * Returns errors if any while handling the pdsm command package.
+ */
+static int papr_scm_service_pdsm(struct papr_scm_priv *p,
+                                struct nd_cmd_pkg *pkg)
+{
+       /* Get the PDSM header and PDSM command */
+       struct nd_pkg_pdsm *pdsm_pkg = (struct nd_pkg_pdsm *)pkg->nd_payload;
+       enum papr_pdsm pdsm = (enum papr_pdsm)pkg->nd_command;
+       const struct pdsm_cmd_desc *pdsc;
+       int rc;
+
+       /* Fetch corresponding pdsm descriptor for validation and servicing */
+       pdsc = pdsm_cmd_desc(pdsm);
+
+       /* Validate pdsm descriptor */
+       /* Ensure that reserved fields are 0 */
+       if (pdsm_pkg->reserved[0] || pdsm_pkg->reserved[1]) {
+               dev_dbg(&p->pdev->dev, "PDSM[0x%x]: Invalid reserved field\n",
+                       pdsm);
+               return -EINVAL;
+       }
+
+       /* If pdsm expects some input, then ensure that the size_in matches */
+       if (pdsc->size_in &&
+           pkg->nd_size_in != (pdsc->size_in + ND_PDSM_HDR_SIZE)) {
+               dev_dbg(&p->pdev->dev, "PDSM[0x%x]: Mismatched size_in=%d\n",
+                       pdsm, pkg->nd_size_in);
+               return -EINVAL;
+       }
+
+       /* If pdsm wants to return data, then ensure that  size_out matches */
+       if (pdsc->size_out &&
+           pkg->nd_size_out != (pdsc->size_out + ND_PDSM_HDR_SIZE)) {
+               dev_dbg(&p->pdev->dev, "PDSM[0x%x]: Mismatched size_out=%d\n",
+                       pdsm, pkg->nd_size_out);
+               return -EINVAL;
+       }
+
+       /* Service the pdsm */
+       if (pdsc->service) {
+               dev_dbg(&p->pdev->dev, "PDSM[0x%x]: Servicing..\n", pdsm);
+
+               rc = pdsc->service(p, &pdsm_pkg->payload);
+
+               if (rc < 0) {
+                       /* error encountered while servicing pdsm */
+                       pdsm_pkg->cmd_status = rc;
+                       pkg->nd_fw_size = ND_PDSM_HDR_SIZE;
+               } else {
+                       /* pdsm serviced and 'rc' bytes written to payload */
+                       pdsm_pkg->cmd_status = 0;
+                       pkg->nd_fw_size = ND_PDSM_HDR_SIZE + rc;
+               }
+       } else {
+               dev_dbg(&p->pdev->dev, "PDSM[0x%x]: Unsupported PDSM request\n",
+                       pdsm);
+               pdsm_pkg->cmd_status = -ENOENT;
+               pkg->nd_fw_size = ND_PDSM_HDR_SIZE;
+       }
+
+       return pdsm_pkg->cmd_status;
+}
+
 static int papr_scm_ndctl(struct nvdimm_bus_descriptor *nd_desc,
                          struct nvdimm *nvdimm, unsigned int cmd, void *buf,
                          unsigned int buf_len, int *cmd_rc)
 {
        struct nd_cmd_get_config_size *get_size_hdr;
+       struct nd_cmd_pkg *call_pkg = NULL;
        struct papr_scm_priv *p;
+       int rc;
 
-       /* Only dimm-specific calls are supported atm */
-       if (!nvdimm)
-               return -EINVAL;
+       rc = is_cmd_valid(nvdimm, cmd, buf, buf_len);
+       if (rc) {
+               pr_debug("Invalid cmd=0x%x. Err=%d\n", cmd, rc);
+               return rc;
+       }
+
+       /* Use a local variable in case cmd_rc pointer is NULL */
+       if (!cmd_rc)
+               cmd_rc = &rc;
 
        p = nvdimm_provider_data(nvdimm);
 
@@ -277,7 +616,13 @@ static int papr_scm_ndctl(struct nvdimm_bus_descriptor *nd_desc,
                *cmd_rc = papr_scm_meta_set(p, buf);
                break;
 
+       case ND_CMD_CALL:
+               call_pkg = (struct nd_cmd_pkg *)buf;
+               *cmd_rc = papr_scm_service_pdsm(p, call_pkg);
+               break;
+
        default:
+               dev_dbg(&p->pdev->dev, "Unknown command = %d\n", cmd);
                return -EINVAL;
        }
 
@@ -286,6 +631,64 @@ static int papr_scm_ndctl(struct nvdimm_bus_descriptor *nd_desc,
        return 0;
 }
 
+static ssize_t flags_show(struct device *dev,
+                         struct device_attribute *attr, char *buf)
+{
+       struct nvdimm *dimm = to_nvdimm(dev);
+       struct papr_scm_priv *p = nvdimm_provider_data(dimm);
+       struct seq_buf s;
+       u64 health;
+       int rc;
+
+       rc = drc_pmem_query_health(p);
+       if (rc)
+               return rc;
+
+       /* Copy health_bitmap locally, check masks & update out buffer */
+       health = READ_ONCE(p->health_bitmap);
+
+       seq_buf_init(&s, buf, PAGE_SIZE);
+       if (health & PAPR_PMEM_UNARMED_MASK)
+               seq_buf_printf(&s, "not_armed ");
+
+       if (health & PAPR_PMEM_BAD_SHUTDOWN_MASK)
+               seq_buf_printf(&s, "flush_fail ");
+
+       if (health & PAPR_PMEM_BAD_RESTORE_MASK)
+               seq_buf_printf(&s, "restore_fail ");
+
+       if (health & PAPR_PMEM_ENCRYPTED)
+               seq_buf_printf(&s, "encrypted ");
+
+       if (health & PAPR_PMEM_SMART_EVENT_MASK)
+               seq_buf_printf(&s, "smart_notify ");
+
+       if (health & PAPR_PMEM_SCRUBBED_AND_LOCKED)
+               seq_buf_printf(&s, "scrubbed locked ");
+
+       if (seq_buf_used(&s))
+               seq_buf_printf(&s, "\n");
+
+       return seq_buf_used(&s);
+}
+DEVICE_ATTR_RO(flags);
+
+/* papr_scm specific dimm attributes */
+static struct attribute *papr_nd_attributes[] = {
+       &dev_attr_flags.attr,
+       NULL,
+};
+
+static struct attribute_group papr_nd_attribute_group = {
+       .name = "papr",
+       .attrs = papr_nd_attributes,
+};
+
+static const struct attribute_group *papr_nd_attr_groups[] = {
+       &papr_nd_attribute_group,
+       NULL,
+};
+
 static int papr_scm_nvdimm_init(struct papr_scm_priv *p)
 {
        struct device *dev = &p->pdev->dev;
@@ -312,8 +715,8 @@ static int papr_scm_nvdimm_init(struct papr_scm_priv *p)
        dimm_flags = 0;
        set_bit(NDD_LABELING, &dimm_flags);
 
-       p->nvdimm = nvdimm_create(p->bus, p, NULL, dimm_flags,
-                                 PAPR_SCM_DIMM_CMD_MASK, 0, NULL);
+       p->nvdimm = nvdimm_create(p->bus, p, papr_nd_attr_groups,
+                                 dimm_flags, PAPR_SCM_DIMM_CMD_MASK, 0, NULL);
        if (!p->nvdimm) {
                dev_err(dev, "Error creating DIMM object for %pOF\n", p->dn);
                goto err;
@@ -399,6 +802,9 @@ static int papr_scm_probe(struct platform_device *pdev)
        if (!p)
                return -ENOMEM;
 
+       /* Initialize the dimm mutex */
+       mutex_init(&p->health_mutex);
+
        /* optional DT properties */
        of_property_read_u32(dn, "ibm,metadata-size", &metadata_size);
 
index 4a8874b..040b9d0 100644 (file)
@@ -1066,10 +1066,10 @@ int fsl_pci_mcheck_exception(struct pt_regs *regs)
 
        if (is_in_pci_mem_space(addr)) {
                if (user_mode(regs))
-                       ret = probe_user_read(&inst, (void __user *)regs->nip,
-                                             sizeof(inst));
+                       ret = copy_from_user_nofault(&inst,
+                                       (void __user *)regs->nip, sizeof(inst));
                else
-                       ret = probe_kernel_address((void *)regs->nip, inst);
+                       ret = get_kernel_nofault(inst, (void *)regs->nip);
 
                if (!ret && mcheck_handle_load(regs, inst)) {
                        regs->nip += 4;
index d969bab..262e5bb 100644 (file)
                        "       bnez %1, 0b\n"                          \
                        "1:\n"                                          \
                        : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr)    \
-                       : "rJ" (__old), "rJ" (__new)                    \
+                       : "rJ" ((long)__old), "rJ" (__new)              \
                        : "memory");                                    \
                break;                                                  \
        case 8:                                                         \
                        RISCV_ACQUIRE_BARRIER                           \
                        "1:\n"                                          \
                        : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr)    \
-                       : "rJ" (__old), "rJ" (__new)                    \
+                       : "rJ" ((long)__old), "rJ" (__new)              \
                        : "memory");                                    \
                break;                                                  \
        case 8:                                                         \
                        "       bnez %1, 0b\n"                          \
                        "1:\n"                                          \
                        : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr)    \
-                       : "rJ" (__old), "rJ" (__new)                    \
+                       : "rJ" ((long)__old), "rJ" (__new)              \
                        : "memory");                                    \
                break;                                                  \
        case 8:                                                         \
                        "       fence rw, rw\n"                         \
                        "1:\n"                                          \
                        : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr)    \
-                       : "rJ" (__old), "rJ" (__new)                    \
+                       : "rJ" ((long)__old), "rJ" (__new)              \
                        : "memory");                                    \
                break;                                                  \
        case 8:                                                         \
index 0839661..2ff63d0 100644 (file)
@@ -38,7 +38,8 @@ static int ftrace_check_current_call(unsigned long hook_pos,
         * Read the text we want to modify;
         * return must be -EFAULT on read error
         */
-       if (probe_kernel_read(replaced, (void *)hook_pos, MCOUNT_INSN_SIZE))
+       if (copy_from_kernel_nofault(replaced, (void *)hook_pos,
+                       MCOUNT_INSN_SIZE))
                return -EFAULT;
 
        /*
index f16ade8..c3275f4 100644 (file)
@@ -62,7 +62,7 @@ int get_step_address(struct pt_regs *regs, unsigned long *next_addr)
        unsigned int rs1_num, rs2_num;
        int op_code;
 
-       if (probe_kernel_address((void *)pc, op_code))
+       if (get_kernel_nofault(op_code, (void *)pc))
                return -EINVAL;
        if ((op_code & __INSN_LENGTH_MASK) != __INSN_LENGTH_GE_32) {
                if (is_c_jalr_insn(op_code) || is_c_jr_insn(op_code)) {
@@ -146,14 +146,14 @@ int do_single_step(struct pt_regs *regs)
                return error;
 
        /* Store the op code in the stepped address */
-       error = probe_kernel_address((void *)addr, stepped_opcode);
+       error = get_kernel_nofault(stepped_opcode, (void *)addr);
        if (error)
                return error;
 
        stepped_address = addr;
 
        /* Replace the op code with the break instruction */
-       error = probe_kernel_write((void *)stepped_address,
+       error = copy_to_kernel_nofault((void *)stepped_address,
                                   arch_kgdb_ops.gdb_bpt_instr,
                                   BREAK_INSTR_SIZE);
        /* Flush and return */
@@ -173,7 +173,7 @@ int do_single_step(struct pt_regs *regs)
 static void undo_single_step(struct pt_regs *regs)
 {
        if (stepped_opcode != 0) {
-               probe_kernel_write((void *)stepped_address,
+               copy_to_kernel_nofault((void *)stepped_address,
                                   (void *)&stepped_opcode, BREAK_INSTR_SIZE);
                flush_icache_range(stepped_address,
                                   stepped_address + BREAK_INSTR_SIZE);
index d4a64df..3fe7a52 100644 (file)
@@ -63,7 +63,7 @@ static int patch_insn_write(void *addr, const void *insn, size_t len)
 
        waddr = patch_map(addr, FIX_TEXT_POKE0);
 
-       ret = probe_kernel_write(waddr, insn, len);
+       ret = copy_to_kernel_nofault(waddr, insn, len);
 
        patch_unmap(FIX_TEXT_POKE0);
 
@@ -76,7 +76,7 @@ NOKPROBE_SYMBOL(patch_insn_write);
 #else
 static int patch_insn_write(void *addr, const void *insn, size_t len)
 {
-       return probe_kernel_write(addr, insn, len);
+       return copy_to_kernel_nofault(addr, insn, len);
 }
 NOKPROBE_SYMBOL(patch_insn_write);
 #endif /* CONFIG_MMU */
index f3619f5..12f8a7f 100644 (file)
@@ -8,6 +8,7 @@
 #include <linux/syscalls.h>
 #include <asm/unistd.h>
 #include <asm/cacheflush.h>
+#include <asm-generic/mman-common.h>
 
 static long riscv_sys_mmap(unsigned long addr, unsigned long len,
                           unsigned long prot, unsigned long flags,
@@ -16,6 +17,11 @@ static long riscv_sys_mmap(unsigned long addr, unsigned long len,
 {
        if (unlikely(offset & (~PAGE_MASK >> page_shift_offset)))
                return -EINVAL;
+
+       if ((prot & PROT_WRITE) && (prot & PROT_EXEC))
+               if (unlikely(!(prot & PROT_READ)))
+                       return -EINVAL;
+
        return ksys_mmap_pgoff(addr, len, prot, flags, fd,
                               offset >> (PAGE_SHIFT - page_shift_offset));
 }
index ecec177..7d95cce 100644 (file)
@@ -137,7 +137,7 @@ static inline unsigned long get_break_insn_length(unsigned long pc)
 {
        bug_insn_t insn;
 
-       if (probe_kernel_address((bug_insn_t *)pc, insn))
+       if (get_kernel_nofault(insn, (bug_insn_t *)pc))
                return 0;
 
        return GET_INSN_LENGTH(insn);
@@ -165,7 +165,7 @@ int is_valid_bugaddr(unsigned long pc)
 
        if (pc < VMALLOC_START)
                return 0;
-       if (probe_kernel_address((bug_insn_t *)pc, insn))
+       if (get_kernel_nofault(insn, (bug_insn_t *)pc))
                return 0;
        if ((insn & __INSN_LENGTH_MASK) == __INSN_LENGTH_32)
                return (insn == __BUG_INSN_32);
index ec2c70f..289a9a5 100644 (file)
@@ -151,6 +151,7 @@ int set_memory_nx(unsigned long addr, int numpages)
 
 int set_direct_map_invalid_noflush(struct page *page)
 {
+       int ret;
        unsigned long start = (unsigned long)page_address(page);
        unsigned long end = start + PAGE_SIZE;
        struct pageattr_masks masks = {
@@ -158,11 +159,16 @@ int set_direct_map_invalid_noflush(struct page *page)
                .clear_mask = __pgprot(_PAGE_PRESENT)
        };
 
-       return walk_page_range(&init_mm, start, end, &pageattr_ops, &masks);
+       mmap_read_lock(&init_mm);
+       ret = walk_page_range(&init_mm, start, end, &pageattr_ops, &masks);
+       mmap_read_unlock(&init_mm);
+
+       return ret;
 }
 
 int set_direct_map_default_noflush(struct page *page)
 {
+       int ret;
        unsigned long start = (unsigned long)page_address(page);
        unsigned long end = start + PAGE_SIZE;
        struct pageattr_masks masks = {
@@ -170,7 +176,11 @@ int set_direct_map_default_noflush(struct page *page)
                .clear_mask = __pgprot(0)
        };
 
-       return walk_page_range(&init_mm, start, end, &pageattr_ops, &masks);
+       mmap_read_lock(&init_mm);
+       ret = walk_page_range(&init_mm, start, end, &pageattr_ops, &masks);
+       mmap_read_unlock(&init_mm);
+
+       return ret;
 }
 
 void __kernel_map_pages(struct page *page, int numpages, int enable)
index 1948249..c7d7ede 100644 (file)
@@ -462,6 +462,7 @@ config NUMA
 
 config NODES_SHIFT
        int
+       depends on NEED_MULTIPLE_NODES
        default "1"
 
 config SCHED_SMT
index d977643..e1ae239 100644 (file)
@@ -693,7 +693,7 @@ static ssize_t prng_chunksize_show(struct device *dev,
                                   struct device_attribute *attr,
                                   char *buf)
 {
-       return snprintf(buf, PAGE_SIZE, "%u\n", prng_chunk_size);
+       return scnprintf(buf, PAGE_SIZE, "%u\n", prng_chunk_size);
 }
 static DEVICE_ATTR(chunksize, 0444, prng_chunksize_show, NULL);
 
@@ -712,7 +712,7 @@ static ssize_t prng_counter_show(struct device *dev,
                counter = prng_data->prngws.byte_counter;
        mutex_unlock(&prng_data->mutex);
 
-       return snprintf(buf, PAGE_SIZE, "%llu\n", counter);
+       return scnprintf(buf, PAGE_SIZE, "%llu\n", counter);
 }
 static DEVICE_ATTR(byte_counter, 0444, prng_counter_show, NULL);
 
@@ -721,7 +721,7 @@ static ssize_t prng_errorflag_show(struct device *dev,
                                   struct device_attribute *attr,
                                   char *buf)
 {
-       return snprintf(buf, PAGE_SIZE, "%d\n", prng_errorflag);
+       return scnprintf(buf, PAGE_SIZE, "%d\n", prng_errorflag);
 }
 static DEVICE_ATTR(errorflag, 0444, prng_errorflag_show, NULL);
 
@@ -731,9 +731,9 @@ static ssize_t prng_mode_show(struct device *dev,
                              char *buf)
 {
        if (prng_mode == PRNG_MODE_TDES)
-               return snprintf(buf, PAGE_SIZE, "TDES\n");
+               return scnprintf(buf, PAGE_SIZE, "TDES\n");
        else
-               return snprintf(buf, PAGE_SIZE, "SHA512\n");
+               return scnprintf(buf, PAGE_SIZE, "SHA512\n");
 }
 static DEVICE_ATTR(mode, 0444, prng_mode_show, NULL);
 
@@ -756,7 +756,7 @@ static ssize_t prng_reseed_limit_show(struct device *dev,
                                      struct device_attribute *attr,
                                      char *buf)
 {
-       return snprintf(buf, PAGE_SIZE, "%u\n", prng_reseed_limit);
+       return scnprintf(buf, PAGE_SIZE, "%u\n", prng_reseed_limit);
 }
 static ssize_t prng_reseed_limit_store(struct device *dev,
                                       struct device_attribute *attr,
@@ -787,7 +787,7 @@ static ssize_t prng_strength_show(struct device *dev,
                                  struct device_attribute *attr,
                                  char *buf)
 {
-       return snprintf(buf, PAGE_SIZE, "256\n");
+       return scnprintf(buf, PAGE_SIZE, "256\n");
 }
 static DEVICE_ATTR(strength, 0444, prng_strength_show, NULL);
 
index f073292..d9d5de0 100644 (file)
@@ -33,7 +33,17 @@ static inline void syscall_rollback(struct task_struct *task,
 static inline long syscall_get_error(struct task_struct *task,
                                     struct pt_regs *regs)
 {
-       return IS_ERR_VALUE(regs->gprs[2]) ? regs->gprs[2] : 0;
+       unsigned long error = regs->gprs[2];
+#ifdef CONFIG_COMPAT
+       if (test_tsk_thread_flag(task, TIF_31BIT)) {
+               /*
+                * Sign-extend the value so (int)-EFOO becomes (long)-EFOO
+                * and will match correctly in comparisons.
+                */
+               error = (long)(int)error;
+       }
+#endif
+       return IS_ERR_VALUE(error) ? error : 0;
 }
 
 static inline long syscall_get_return_value(struct task_struct *task,
index 3bcfdeb..0cd085c 100644 (file)
@@ -36,6 +36,7 @@ struct vdso_data {
        __u32 tk_shift;                 /* Shift used for xtime_nsec    0x60 */
        __u32 ts_dir;                   /* TOD steering direction       0x64 */
        __u64 ts_end;                   /* TOD steering end             0x68 */
+       __u32 hrtimer_res;              /* hrtimer resolution           0x70 */
 };
 
 struct vdso_per_cpu_data {
index 165031b..5d8cc18 100644 (file)
@@ -76,6 +76,7 @@ int main(void)
        OFFSET(__VDSO_TK_SHIFT, vdso_data, tk_shift);
        OFFSET(__VDSO_TS_DIR, vdso_data, ts_dir);
        OFFSET(__VDSO_TS_END, vdso_data, ts_end);
+       OFFSET(__VDSO_CLOCK_REALTIME_RES, vdso_data, hrtimer_res);
        OFFSET(__VDSO_ECTG_BASE, vdso_per_cpu_data, ectg_timer_base);
        OFFSET(__VDSO_ECTG_USER, vdso_per_cpu_data, ectg_user_time);
        OFFSET(__VDSO_GETCPU_VAL, vdso_per_cpu_data, getcpu_val);
@@ -86,7 +87,6 @@ int main(void)
        DEFINE(__CLOCK_REALTIME_COARSE, CLOCK_REALTIME_COARSE);
        DEFINE(__CLOCK_MONOTONIC_COARSE, CLOCK_MONOTONIC_COARSE);
        DEFINE(__CLOCK_THREAD_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID);
-       DEFINE(__CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC);
        DEFINE(__CLOCK_COARSE_RES, LOW_RES_NSEC);
        BLANK();
        /* idle data offsets */
index 50ff6dd..496f74d 100644 (file)
@@ -401,9 +401,9 @@ ENTRY(system_call)
        jnz     .Lsysc_nr_ok
        # svc 0: system call number in %r1
        llgfr   %r1,%r1                         # clear high word in r1
+       sth     %r1,__PT_INT_CODE+2(%r11)
        cghi    %r1,NR_syscalls
        jnl     .Lsysc_nr_ok
-       sth     %r1,__PT_INT_CODE+2(%r11)
        slag    %r8,%r1,3
 .Lsysc_nr_ok:
        xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
index 44e01dd..b388e87 100644 (file)
@@ -83,7 +83,7 @@ int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec,
 {
        struct ftrace_insn orig, new, old;
 
-       if (probe_kernel_read(&old, (void *) rec->ip, sizeof(old)))
+       if (copy_from_kernel_nofault(&old, (void *) rec->ip, sizeof(old)))
                return -EFAULT;
        if (addr == MCOUNT_ADDR) {
                /* Initial code replacement */
@@ -105,7 +105,7 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
 {
        struct ftrace_insn orig, new, old;
 
-       if (probe_kernel_read(&old, (void *) rec->ip, sizeof(old)))
+       if (copy_from_kernel_nofault(&old, (void *) rec->ip, sizeof(old)))
                return -EFAULT;
        /* Replace nop with an ftrace call. */
        ftrace_generate_nop_insn(&orig);
index ccea9a2..90a2a17 100644 (file)
@@ -181,7 +181,7 @@ static ssize_t sys_##_prefix##_##_name##_show(struct kobject *kobj, \
                struct kobj_attribute *attr,                            \
                char *page)                                             \
 {                                                                      \
-       return snprintf(page, PAGE_SIZE, _format, ##args);              \
+       return scnprintf(page, PAGE_SIZE, _format, ##args);             \
 }
 
 #define IPL_ATTR_CCW_STORE_FN(_prefix, _name, _ipl_blk)                        \
index ce60a45..3cc15c0 100644 (file)
@@ -323,6 +323,25 @@ static inline void __poke_user_per(struct task_struct *child,
                child->thread.per_user.end = data;
 }
 
+static void fixup_int_code(struct task_struct *child, addr_t data)
+{
+       struct pt_regs *regs = task_pt_regs(child);
+       int ilc = regs->int_code >> 16;
+       u16 insn;
+
+       if (ilc > 6)
+               return;
+
+       if (ptrace_access_vm(child, regs->psw.addr - (regs->int_code >> 16),
+                       &insn, sizeof(insn), FOLL_FORCE) != sizeof(insn))
+               return;
+
+       /* double check that tracee stopped on svc instruction */
+       if ((insn >> 8) != 0xa)
+               return;
+
+       regs->int_code = 0x20000 | (data & 0xffff);
+}
 /*
  * Write a word to the user area of a process at location addr. This
  * operation does have an additional problem compared to peek_user.
@@ -334,7 +353,9 @@ static int __poke_user(struct task_struct *child, addr_t addr, addr_t data)
        struct user *dummy = NULL;
        addr_t offset;
 
+
        if (addr < (addr_t) &dummy->regs.acrs) {
+               struct pt_regs *regs = task_pt_regs(child);
                /*
                 * psw and gprs are stored on the stack
                 */
@@ -352,7 +373,11 @@ static int __poke_user(struct task_struct *child, addr_t addr, addr_t data)
                                /* Invalid addressing mode bits */
                                return -EINVAL;
                }
-               *(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr) = data;
+
+               if (test_pt_regs_flag(regs, PIF_SYSCALL) &&
+                       addr == offsetof(struct user, regs.gprs[2]))
+                       fixup_int_code(child, data);
+               *(addr_t *)((addr_t) &regs->psw + addr) = data;
 
        } else if (addr < (addr_t) (&dummy->regs.orig_gpr2)) {
                /*
@@ -718,6 +743,10 @@ static int __poke_user_compat(struct task_struct *child,
                        regs->psw.mask = (regs->psw.mask & ~PSW_MASK_BA) |
                                (__u64)(tmp & PSW32_ADDR_AMODE);
                } else {
+
+                       if (test_pt_regs_flag(regs, PIF_SYSCALL) &&
+                               addr == offsetof(struct compat_user, regs.gprs[2]))
+                               fixup_int_code(child, data);
                        /* gpr 0-15 */
                        *(__u32*)((addr_t) &regs->psw + addr*2 + 4) = tmp;
                }
@@ -837,40 +866,66 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
 asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
 {
        unsigned long mask = -1UL;
+       long ret = -1;
+
+       if (is_compat_task())
+               mask = 0xffffffff;
 
        /*
         * The sysc_tracesys code in entry.S stored the system
         * call number to gprs[2].
         */
        if (test_thread_flag(TIF_SYSCALL_TRACE) &&
-           (tracehook_report_syscall_entry(regs) ||
-            regs->gprs[2] >= NR_syscalls)) {
+           tracehook_report_syscall_entry(regs)) {
                /*
-                * Tracing decided this syscall should not happen or the
-                * debugger stored an invalid system call number. Skip
+                * Tracing decided this syscall should not happen. Skip
                 * the system call and the system call restart handling.
                 */
-               clear_pt_regs_flag(regs, PIF_SYSCALL);
-               return -1;
+               goto skip;
        }
 
+#ifdef CONFIG_SECCOMP
        /* Do the secure computing check after ptrace. */
-       if (secure_computing()) {
-               /* seccomp failures shouldn't expose any additional code. */
-               return -1;
+       if (unlikely(test_thread_flag(TIF_SECCOMP))) {
+               struct seccomp_data sd;
+
+               if (is_compat_task()) {
+                       sd.instruction_pointer = regs->psw.addr & 0x7fffffff;
+                       sd.arch = AUDIT_ARCH_S390;
+               } else {
+                       sd.instruction_pointer = regs->psw.addr;
+                       sd.arch = AUDIT_ARCH_S390X;
+               }
+
+               sd.nr = regs->int_code & 0xffff;
+               sd.args[0] = regs->orig_gpr2 & mask;
+               sd.args[1] = regs->gprs[3] & mask;
+               sd.args[2] = regs->gprs[4] & mask;
+               sd.args[3] = regs->gprs[5] & mask;
+               sd.args[4] = regs->gprs[6] & mask;
+               sd.args[5] = regs->gprs[7] & mask;
+
+               if (__secure_computing(&sd) == -1)
+                       goto skip;
        }
+#endif /* CONFIG_SECCOMP */
 
        if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
-               trace_sys_enter(regs, regs->gprs[2]);
+               trace_sys_enter(regs, regs->int_code & 0xffff);
 
-       if (is_compat_task())
-               mask = 0xffffffff;
 
-       audit_syscall_entry(regs->gprs[2], regs->orig_gpr2 & mask,
+       audit_syscall_entry(regs->int_code & 0xffff, regs->orig_gpr2 & mask,
                            regs->gprs[3] &mask, regs->gprs[4] &mask,
                            regs->gprs[5] &mask);
 
+       if ((signed long)regs->gprs[2] >= NR_syscalls) {
+               regs->gprs[2] = -ENOSYS;
+               ret = -ENOSYS;
+       }
        return regs->gprs[2];
+skip:
+       clear_pt_regs_flag(regs, PIF_SYSCALL);
+       return ret;
 }
 
 asmlinkage void do_syscall_trace_exit(struct pt_regs *regs)
index f9d070d..b1113b5 100644 (file)
@@ -301,6 +301,7 @@ void update_vsyscall(struct timekeeper *tk)
 
        vdso_data->tk_mult = tk->tkr_mono.mult;
        vdso_data->tk_shift = tk->tkr_mono.shift;
+       vdso_data->hrtimer_res = hrtimer_resolution;
        smp_wmb();
        ++vdso_data->tb_update_count;
 }
index 66e89b2..c296e5c 100644 (file)
@@ -331,7 +331,7 @@ EXPORT_SYMBOL_GPL(arch_make_page_accessible);
 static ssize_t uv_query_facilities(struct kobject *kobj,
                                   struct kobj_attribute *attr, char *page)
 {
-       return snprintf(page, PAGE_SIZE, "%lx\n%lx\n%lx\n%lx\n",
+       return scnprintf(page, PAGE_SIZE, "%lx\n%lx\n%lx\n%lx\n",
                        uv_info.inst_calls_list[0],
                        uv_info.inst_calls_list[1],
                        uv_info.inst_calls_list[2],
@@ -344,7 +344,7 @@ static struct kobj_attribute uv_query_facilities_attr =
 static ssize_t uv_query_max_guest_cpus(struct kobject *kobj,
                                       struct kobj_attribute *attr, char *page)
 {
-       return snprintf(page, PAGE_SIZE, "%d\n",
+       return scnprintf(page, PAGE_SIZE, "%d\n",
                        uv_info.max_guest_cpus);
 }
 
@@ -354,7 +354,7 @@ static struct kobj_attribute uv_query_max_guest_cpus_attr =
 static ssize_t uv_query_max_guest_vms(struct kobject *kobj,
                                      struct kobj_attribute *attr, char *page)
 {
-       return snprintf(page, PAGE_SIZE, "%d\n",
+       return scnprintf(page, PAGE_SIZE, "%d\n",
                        uv_info.max_num_sec_conf);
 }
 
@@ -364,7 +364,7 @@ static struct kobj_attribute uv_query_max_guest_vms_attr =
 static ssize_t uv_query_max_guest_addr(struct kobject *kobj,
                                       struct kobj_attribute *attr, char *page)
 {
-       return snprintf(page, PAGE_SIZE, "%lx\n",
+       return scnprintf(page, PAGE_SIZE, "%lx\n",
                        uv_info.max_sec_stor_addr);
 }
 
index bec19e7..4a66a1c 100644 (file)
@@ -18,8 +18,8 @@ KBUILD_AFLAGS_64 += -m64 -s
 
 KBUILD_CFLAGS_64 := $(filter-out -m64,$(KBUILD_CFLAGS))
 KBUILD_CFLAGS_64 += -m64 -fPIC -shared -fno-common -fno-builtin
-KBUILD_CFLAGS_64 += -nostdlib -Wl,-soname=linux-vdso64.so.1 \
-                   -Wl,--hash-style=both
+ldflags-y := -fPIC -shared -nostdlib -soname=linux-vdso64.so.1 \
+            --hash-style=both --build-id -T
 
 $(targets:%=$(obj)/%.dbg): KBUILD_CFLAGS = $(KBUILD_CFLAGS_64)
 $(targets:%=$(obj)/%.dbg): KBUILD_AFLAGS = $(KBUILD_AFLAGS_64)
@@ -37,8 +37,8 @@ KASAN_SANITIZE := n
 $(obj)/vdso64_wrapper.o : $(obj)/vdso64.so
 
 # link rule for the .so file, .lds has to be first
-$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) FORCE
-       $(call if_changed,vdso64ld)
+$(obj)/vdso64.so.dbg: $(obj)/vdso64.lds $(obj-vdso64) FORCE
+       $(call if_changed,ld)
 
 # strip rule for the .so file
 $(obj)/%.so: OBJCOPYFLAGS := -S
@@ -50,8 +50,6 @@ $(obj-vdso64): %.o: %.S FORCE
        $(call if_changed_dep,vdso64as)
 
 # actual build commands
-quiet_cmd_vdso64ld = VDSO64L $@
-      cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $(filter %.lds %.o,$^) -o $@
 quiet_cmd_vdso64as = VDSO64A $@
       cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
 
index 0814353..0c79caa 100644 (file)
        .type  __kernel_clock_getres,@function
 __kernel_clock_getres:
        CFI_STARTPROC
-       larl    %r1,4f
+       larl    %r1,3f
+       lg      %r0,0(%r1)
        cghi    %r2,__CLOCK_REALTIME_COARSE
        je      0f
        cghi    %r2,__CLOCK_MONOTONIC_COARSE
        je      0f
-       larl    %r1,3f
+       larl    %r1,_vdso_data
+       llgf    %r0,__VDSO_CLOCK_REALTIME_RES(%r1)
        cghi    %r2,__CLOCK_REALTIME
        je      0f
        cghi    %r2,__CLOCK_MONOTONIC
@@ -36,7 +38,6 @@ __kernel_clock_getres:
        jz      2f
 0:     ltgr    %r3,%r3
        jz      1f                              /* res == NULL */
-       lg      %r0,0(%r1)
        xc      0(8,%r3),0(%r3)                 /* set tp->tv_sec to zero */
        stg     %r0,8(%r3)                      /* store tp->tv_usec */
 1:     lghi    %r2,0
@@ -45,6 +46,5 @@ __kernel_clock_getres:
        svc     0
        br      %r14
        CFI_ENDPROC
-3:     .quad   __CLOCK_REALTIME_RES
-4:     .quad   __CLOCK_COARSE_RES
+3:     .quad   __CLOCK_COARSE_RES
        .size   __kernel_clock_getres,.-__kernel_clock_getres
index 6a24751..d53c2e2 100644 (file)
@@ -105,7 +105,7 @@ static int bad_address(void *p)
 {
        unsigned long dummy;
 
-       return probe_kernel_address((unsigned long *)p, dummy);
+       return get_kernel_nofault(dummy, (unsigned long *)p);
 }
 
 static void dump_pagetable(unsigned long asce, unsigned long address)
index 1b04270..0646c59 100644 (file)
@@ -119,7 +119,7 @@ static void ftrace_mod_code(void)
         * But if one were to fail, then they all should, and if one were
         * to succeed, then they all should.
         */
-       mod_code_status = probe_kernel_write(mod_code_ip, mod_code_newcode,
+       mod_code_status = copy_to_kernel_nofault(mod_code_ip, mod_code_newcode,
                                             MCOUNT_INSN_SIZE);
 
        /* if we fail, then kill any new writers */
@@ -203,7 +203,7 @@ static int ftrace_modify_code(unsigned long ip, unsigned char *old_code,
         */
 
        /* read the text we want to modify */
-       if (probe_kernel_read(replaced, (void *)ip, MCOUNT_INSN_SIZE))
+       if (copy_from_kernel_nofault(replaced, (void *)ip, MCOUNT_INSN_SIZE))
                return -EFAULT;
 
        /* Make sure it is what we expect it to be */
@@ -268,7 +268,7 @@ static int ftrace_mod(unsigned long ip, unsigned long old_addr,
 {
        unsigned char code[MCOUNT_INSN_SIZE];
 
-       if (probe_kernel_read(code, (void *)ip, MCOUNT_INSN_SIZE))
+       if (copy_from_kernel_nofault(code, (void *)ip, MCOUNT_INSN_SIZE))
                return -EFAULT;
 
        if (old_addr != __raw_readl((unsigned long *)code))
index a330254..9c3d32b 100644 (file)
@@ -118,7 +118,7 @@ int is_valid_bugaddr(unsigned long addr)
 
        if (addr < PAGE_OFFSET)
                return 0;
-       if (probe_kernel_address((insn_size_t *)addr, opcode))
+       if (get_kernel_nofault(opcode, (insn_size_t *)addr))
                return 0;
        if (opcode == TRAPA_BUG_OPCODE)
                return 1;
index e929c09..8ccd568 100644 (file)
@@ -7,7 +7,7 @@
 #include <linux/kernel.h>
 #include <os.h>
 
-bool probe_kernel_read_allowed(const void *src, size_t size)
+bool copy_from_kernel_nofault_allowed(const void *src, size_t size)
 {
        void *psrc = (void *)rounddown((unsigned long)src, PAGE_SIZE);
 
index ebedeab..255b2dd 100644 (file)
@@ -278,7 +278,7 @@ static inline unsigned long *regs_get_kernel_stack_nth_addr(struct pt_regs *regs
 }
 
 /* To avoid include hell, we can't include uaccess.h */
-extern long probe_kernel_read(void *dst, const void *src, size_t size);
+extern long copy_from_kernel_nofault(void *dst, const void *src, size_t size);
 
 /**
  * regs_get_kernel_stack_nth() - get Nth entry of the stack
@@ -298,7 +298,7 @@ static inline unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,
 
        addr = regs_get_kernel_stack_nth_addr(regs, n);
        if (addr) {
-               ret = probe_kernel_read(&val, addr, sizeof(val));
+               ret = copy_from_kernel_nofault(&val, addr, sizeof(val));
                if (!ret)
                        return val;
        }
index 456511b..b037cfa 100644 (file)
@@ -106,7 +106,7 @@ void show_opcodes(struct pt_regs *regs, const char *loglvl)
        bad_ip = user_mode(regs) &&
                __chk_range_not_ok(prologue, OPCODE_BUFSIZE, TASK_SIZE_MAX);
 
-       if (bad_ip || probe_kernel_read(opcodes, (u8 *)prologue,
+       if (bad_ip || copy_from_kernel_nofault(opcodes, (u8 *)prologue,
                                        OPCODE_BUFSIZE)) {
                printk("%sCode: Bad RIP value.\n", loglvl);
        } else {
index c84d28e..5150456 100644 (file)
@@ -86,7 +86,7 @@ static int ftrace_verify_code(unsigned long ip, const char *old_code)
         * sure what we read is what we expected it to be before modifying it.
         */
        /* read the text we want to modify */
-       if (probe_kernel_read(cur_code, (void *)ip, MCOUNT_INSN_SIZE)) {
+       if (copy_from_kernel_nofault(cur_code, (void *)ip, MCOUNT_INSN_SIZE)) {
                WARN_ON(1);
                return -EFAULT;
        }
@@ -355,7 +355,7 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
        npages = DIV_ROUND_UP(*tramp_size, PAGE_SIZE);
 
        /* Copy ftrace_caller onto the trampoline memory */
-       ret = probe_kernel_read(trampoline, (void *)start_offset, size);
+       ret = copy_from_kernel_nofault(trampoline, (void *)start_offset, size);
        if (WARN_ON(ret < 0))
                goto fail;
 
@@ -363,13 +363,13 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
 
        /* The trampoline ends with ret(q) */
        retq = (unsigned long)ftrace_stub;
-       ret = probe_kernel_read(ip, (void *)retq, RET_SIZE);
+       ret = copy_from_kernel_nofault(ip, (void *)retq, RET_SIZE);
        if (WARN_ON(ret < 0))
                goto fail;
 
        if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) {
                ip = trampoline + (ftrace_regs_caller_ret - ftrace_regs_caller);
-               ret = probe_kernel_read(ip, (void *)retq, RET_SIZE);
+               ret = copy_from_kernel_nofault(ip, (void *)retq, RET_SIZE);
                if (WARN_ON(ret < 0))
                        goto fail;
        }
@@ -506,7 +506,7 @@ static void *addr_from_call(void *ptr)
        union text_poke_insn call;
        int ret;
 
-       ret = probe_kernel_read(&call, ptr, CALL_INSN_SIZE);
+       ret = copy_from_kernel_nofault(&call, ptr, CALL_INSN_SIZE);
        if (WARN_ON_ONCE(ret < 0))
                return NULL;
 
index c44fe7d..68acd30 100644 (file)
@@ -732,11 +732,11 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
        int err;
 
        bpt->type = BP_BREAKPOINT;
-       err = probe_kernel_read(bpt->saved_instr, (char *)bpt->bpt_addr,
+       err = copy_from_kernel_nofault(bpt->saved_instr, (char *)bpt->bpt_addr,
                                BREAK_INSTR_SIZE);
        if (err)
                return err;
-       err = probe_kernel_write((char *)bpt->bpt_addr,
+       err = copy_to_kernel_nofault((char *)bpt->bpt_addr,
                                 arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE);
        if (!err)
                return err;
@@ -768,7 +768,7 @@ int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt)
        return 0;
 
 knl_write:
-       return probe_kernel_write((char *)bpt->bpt_addr,
+       return copy_to_kernel_nofault((char *)bpt->bpt_addr,
                                  (char *)bpt->saved_instr, BREAK_INSTR_SIZE);
 }
 
index 3bafe1b..ada39dd 100644 (file)
@@ -243,7 +243,7 @@ __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr)
         * Fortunately, we know that the original code is the ideal 5-byte
         * long NOP.
         */
-       if (probe_kernel_read(buf, (void *)addr,
+       if (copy_from_kernel_nofault(buf, (void *)addr,
                MAX_INSN_SIZE * sizeof(kprobe_opcode_t)))
                return 0UL;
 
@@ -346,7 +346,8 @@ int __copy_instruction(u8 *dest, u8 *src, u8 *real, struct insn *insn)
                return 0;
 
        /* This can access kernel text if given address is not recovered */
-       if (probe_kernel_read(dest, (void *)recovered_insn, MAX_INSN_SIZE))
+       if (copy_from_kernel_nofault(dest, (void *)recovered_insn,
+                       MAX_INSN_SIZE))
                return 0;
 
        kernel_insn_init(insn, dest, MAX_INSN_SIZE);
@@ -753,16 +754,11 @@ asm(
 NOKPROBE_SYMBOL(kretprobe_trampoline);
 STACK_FRAME_NON_STANDARD(kretprobe_trampoline);
 
-static struct kprobe kretprobe_kprobe = {
-       .addr = (void *)kretprobe_trampoline,
-};
-
 /*
  * Called from kretprobe_trampoline
  */
 __used __visible void *trampoline_handler(struct pt_regs *regs)
 {
-       struct kprobe_ctlblk *kcb;
        struct kretprobe_instance *ri = NULL;
        struct hlist_head *head, empty_rp;
        struct hlist_node *tmp;
@@ -772,16 +768,12 @@ __used __visible void *trampoline_handler(struct pt_regs *regs)
        void *frame_pointer;
        bool skipped = false;
 
-       preempt_disable();
-
        /*
         * Set a dummy kprobe for avoiding kretprobe recursion.
         * Since kretprobe never run in kprobe handler, kprobe must not
         * be running at this point.
         */
-       kcb = get_kprobe_ctlblk();
-       __this_cpu_write(current_kprobe, &kretprobe_kprobe);
-       kcb->kprobe_status = KPROBE_HIT_ACTIVE;
+       kprobe_busy_begin();
 
        INIT_HLIST_HEAD(&empty_rp);
        kretprobe_hash_lock(current, &head, &flags);
@@ -857,7 +849,7 @@ __used __visible void *trampoline_handler(struct pt_regs *regs)
                        __this_cpu_write(current_kprobe, &ri->rp->kp);
                        ri->ret_addr = correct_ret_addr;
                        ri->rp->handler(ri, regs);
-                       __this_cpu_write(current_kprobe, &kretprobe_kprobe);
+                       __this_cpu_write(current_kprobe, &kprobe_busy);
                }
 
                recycle_rp_inst(ri, &empty_rp);
@@ -873,8 +865,7 @@ __used __visible void *trampoline_handler(struct pt_regs *regs)
 
        kretprobe_hash_unlock(current, &flags);
 
-       __this_cpu_write(current_kprobe, NULL);
-       preempt_enable();
+       kprobe_busy_end();
 
        hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
                hlist_del(&ri->hlist);
index 321c199..7af4c61 100644 (file)
@@ -56,7 +56,7 @@ found:
         * overwritten by jump destination address. In this case, original
         * bytes must be recovered from op->optinsn.copied_insn buffer.
         */
-       if (probe_kernel_read(buf, (void *)addr,
+       if (copy_from_kernel_nofault(buf, (void *)addr,
                MAX_INSN_SIZE * sizeof(kprobe_opcode_t)))
                return 0UL;
 
index ee02863..9e1def3 100644 (file)
@@ -94,12 +94,12 @@ static bool match_id(struct pci_dev *pdev, unsigned short vendor, unsigned short
 }
 
 static bool probe_list(struct pci_dev *pdev, unsigned short vendor,
-                      const unsigned char *rom_list)
+                      const void *rom_list)
 {
        unsigned short device;
 
        do {
-               if (probe_kernel_address(rom_list, device) != 0)
+               if (get_kernel_nofault(device, rom_list) != 0)
                        device = 0;
 
                if (device && match_id(pdev, vendor, device))
@@ -119,19 +119,19 @@ static struct resource *find_oprom(struct pci_dev *pdev)
        for (i = 0; i < ARRAY_SIZE(adapter_rom_resources); i++) {
                struct resource *res = &adapter_rom_resources[i];
                unsigned short offset, vendor, device, list, rev;
-               const unsigned char *rom;
+               const void *rom;
 
                if (res->end == 0)
                        break;
 
                rom = isa_bus_to_virt(res->start);
-               if (probe_kernel_address(rom + 0x18, offset) != 0)
+               if (get_kernel_nofault(offset, rom + 0x18) != 0)
                        continue;
 
-               if (probe_kernel_address(rom + offset + 0x4, vendor) != 0)
+               if (get_kernel_nofault(vendor, rom + offset + 0x4) != 0)
                        continue;
 
-               if (probe_kernel_address(rom + offset + 0x6, device) != 0)
+               if (get_kernel_nofault(device, rom + offset + 0x6) != 0)
                        continue;
 
                if (match_id(pdev, vendor, device)) {
@@ -139,8 +139,8 @@ static struct resource *find_oprom(struct pci_dev *pdev)
                        break;
                }
 
-               if (probe_kernel_address(rom + offset + 0x8, list) == 0 &&
-                   probe_kernel_address(rom + offset + 0xc, rev) == 0 &&
+               if (get_kernel_nofault(list, rom + offset + 0x8) == 0 &&
+                   get_kernel_nofault(rev, rom + offset + 0xc) == 0 &&
                    rev >= 3 && list &&
                    probe_list(pdev, vendor, rom + offset + list)) {
                        oprom = res;
@@ -183,14 +183,14 @@ static int __init romsignature(const unsigned char *rom)
        const unsigned short * const ptr = (const unsigned short *)rom;
        unsigned short sig;
 
-       return probe_kernel_address(ptr, sig) == 0 && sig == ROMSIGNATURE;
+       return get_kernel_nofault(sig, ptr) == 0 && sig == ROMSIGNATURE;
 }
 
 static int __init romchecksum(const unsigned char *rom, unsigned long length)
 {
        unsigned char sum, c;
 
-       for (sum = 0; length && probe_kernel_address(rom++, c) == 0; length--)
+       for (sum = 0; length && get_kernel_nofault(c, rom++) == 0; length--)
                sum += c;
        return !length && !sum;
 }
@@ -211,7 +211,7 @@ void __init probe_roms(void)
 
                video_rom_resource.start = start;
 
-               if (probe_kernel_address(rom + 2, c) != 0)
+               if (get_kernel_nofault(c, rom + 2) != 0)
                        continue;
 
                /* 0 < length <= 0x7f * 512, historically */
@@ -249,7 +249,7 @@ void __init probe_roms(void)
                if (!romsignature(rom))
                        continue;
 
-               if (probe_kernel_address(rom + 2, c) != 0)
+               if (get_kernel_nofault(c, rom + 2) != 0)
                        continue;
 
                /* 0 < length <= 0x7f * 512, historically */
index af75109..f9727b9 100644 (file)
@@ -91,7 +91,7 @@ int is_valid_bugaddr(unsigned long addr)
        if (addr < TASK_SIZE_MAX)
                return 0;
 
-       if (probe_kernel_address((unsigned short *)addr, ud))
+       if (get_kernel_nofault(ud, (unsigned short *)addr))
                return 0;
 
        return ud == INSN_UD0 || ud == INSN_UD2;
@@ -488,7 +488,8 @@ static enum kernel_gp_hint get_kernel_gp_address(struct pt_regs *regs,
        u8 insn_buf[MAX_INSN_SIZE];
        struct insn insn;
 
-       if (probe_kernel_read(insn_buf, (void *)regs->ip, MAX_INSN_SIZE))
+       if (copy_from_kernel_nofault(insn_buf, (void *)regs->ip,
+                       MAX_INSN_SIZE))
                return GP_NO_HINT;
 
        kernel_insn_init(&insn, insn_buf, MAX_INSN_SIZE);
index 66be9bd..1ead568 100644 (file)
@@ -99,7 +99,7 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr,
                return !instr_lo || (instr_lo>>1) == 1;
        case 0x00:
                /* Prefetch instruction is 0x0F0D or 0x0F18 */
-               if (probe_kernel_address(instr, opcode))
+               if (get_kernel_nofault(opcode, instr))
                        return 0;
 
                *prefetch = (instr_lo == 0xF) &&
@@ -133,7 +133,7 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr)
        while (instr < max_instr) {
                unsigned char opcode;
 
-               if (probe_kernel_address(instr, opcode))
+               if (get_kernel_nofault(opcode, instr))
                        break;
 
                instr++;
@@ -301,7 +301,7 @@ static int bad_address(void *p)
 {
        unsigned long dummy;
 
-       return probe_kernel_address((unsigned long *)p, dummy);
+       return get_kernel_nofault(dummy, (unsigned long *)p);
 }
 
 static void dump_pagetable(unsigned long address)
@@ -442,7 +442,7 @@ static void show_ldttss(const struct desc_ptr *gdt, const char *name, u16 index)
                return;
        }
 
-       if (probe_kernel_read(&desc, (void *)(gdt->address + offset),
+       if (copy_from_kernel_nofault(&desc, (void *)(gdt->address + offset),
                              sizeof(struct ldttss_desc))) {
                pr_alert("%s: 0x%hx -- GDT entry is not readable\n",
                         name, index);
index bda909e..8b4afad 100644 (file)
@@ -737,7 +737,7 @@ static void __init test_wp_bit(void)
 
        __set_fixmap(FIX_WP_TEST, __pa_symbol(empty_zero_page), PAGE_KERNEL_RO);
 
-       if (probe_kernel_write((char *)fix_to_virt(FIX_WP_TEST), &z, 1)) {
+       if (copy_to_kernel_nofault((char *)fix_to_virt(FIX_WP_TEST), &z, 1)) {
                clear_fixmap(FIX_WP_TEST);
                printk(KERN_CONT "Ok.\n");
                return;
index e1d7d74..92ec176 100644 (file)
@@ -9,7 +9,7 @@ static __always_inline u64 canonical_address(u64 vaddr, u8 vaddr_bits)
        return ((s64)vaddr << (64 - vaddr_bits)) >> (64 - vaddr_bits);
 }
 
-bool probe_kernel_read_allowed(const void *unsafe_src, size_t size)
+bool copy_from_kernel_nofault_allowed(const void *unsafe_src, size_t size)
 {
        unsigned long vaddr = (unsigned long)unsafe_src;
 
@@ -22,7 +22,7 @@ bool probe_kernel_read_allowed(const void *unsafe_src, size_t size)
               canonical_address(vaddr, boot_cpu_data.x86_virt_bits) == vaddr;
 }
 #else
-bool probe_kernel_read_allowed(const void *unsafe_src, size_t size)
+bool copy_from_kernel_nofault_allowed(const void *unsafe_src, size_t size)
 {
        return (unsigned long)unsafe_src >= TASK_SIZE_MAX;
 }
index 9c97d81..4f15280 100644 (file)
@@ -302,7 +302,7 @@ static const struct pci_raw_ops *__init pci_find_bios(void)
             check <= (union bios32 *) __va(0xffff0);
             ++check) {
                long sig;
-               if (probe_kernel_address(&check->fields.signature, sig))
+               if (get_kernel_nofault(sig, &check->fields.signature))
                        continue;
 
                if (check->fields.signature != BIOS32_SIGNATURE)
index b8f7f19..30bd571 100644 (file)
@@ -287,8 +287,8 @@ void intel_scu_devices_create(void)
 
                adapter = i2c_get_adapter(i2c_bus[i]);
                if (adapter) {
-                       client = i2c_new_device(adapter, i2c_devs[i]);
-                       if (!client)
+                       client = i2c_new_client_device(adapter, i2c_devs[i]);
+                       if (IS_ERR(client))
                                pr_err("can't create i2c device %s\n",
                                        i2c_devs[i]->type);
                } else
index b04e6e7..088bd76 100644 (file)
@@ -34,6 +34,7 @@ KCOV_INSTRUMENT := n
 PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
 PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss
 PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
+PURGATORY_CFLAGS += $(call cc-option,-fno-stack-protector)
 
 # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
 # in turn leaves some undefined symbols like __fentry__ in purgatory and not
index 33b309d..acc49fa 100644 (file)
@@ -386,7 +386,7 @@ static void set_aliased_prot(void *v, pgprot_t prot)
 
        preempt_disable();
 
-       probe_kernel_read(&dummy, v, 1);
+       copy_from_kernel_nofault(&dummy, v, 1);
 
        if (HYPERVISOR_update_va_mapping((unsigned long)v, pte, 0))
                BUG();
index 44f3d09..ae722f8 100644 (file)
@@ -376,7 +376,7 @@ static void __blk_mq_all_tag_iter(struct blk_mq_tags *tags,
 void blk_mq_all_tag_iter(struct blk_mq_tags *tags, busy_tag_iter_fn *fn,
                void *priv)
 {
-       return __blk_mq_all_tag_iter(tags, fn, priv, BT_TAG_ITER_STATIC_RQS);
+       __blk_mq_all_tag_iter(tags, fn, priv, BT_TAG_ITER_STATIC_RQS);
 }
 
 /**
index 4f57d27..a9aa6d1 100644 (file)
@@ -3479,7 +3479,9 @@ static void __blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set,
 
        if (set->nr_maps == 1 && nr_hw_queues > nr_cpu_ids)
                nr_hw_queues = nr_cpu_ids;
-       if (nr_hw_queues < 1 || nr_hw_queues == set->nr_hw_queues)
+       if (nr_hw_queues < 1)
+               return;
+       if (set->nr_maps == 1 && nr_hw_queues == set->nr_hw_queues)
                return;
 
        list_for_each_entry(q, &set->tag_list, tag_set_list)
index 6fdfcb4..d333786 100644 (file)
@@ -910,7 +910,7 @@ static bool ldm_parse_dsk4 (const u8 *buffer, int buflen, struct vblk *vb)
                return false;
 
        disk = &vb->vblk.disk;
-       uuid_copy(&disk->disk_id, (uuid_t *)(buffer + 0x18 + r_name));
+       import_uuid(&disk->disk_id, buffer + 0x18 + r_name);
        return true;
 }
 
index 841580a..d8d6bea 100644 (file)
@@ -93,7 +93,7 @@ struct frag {                         /* VBLK Fragment handling */
        u8              num;            /* Total number of records */
        u8              rec;            /* This is record number n */
        u8              map;            /* Which portions are in use */
-       u8              data[0];
+       u8              data[];
 };
 
 /* In memory LDM database structures. */
index 535f1f8..5ebccbd 100644 (file)
@@ -178,8 +178,6 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
        if (IS_ERR(thread))
                goto err_put_larval;
 
-       wait_for_completion_interruptible(&larval->completion);
-
        return NOTIFY_STOP;
 
 err_put_larval:
index e2c8ab4..4c3bdff 100644 (file)
@@ -74,14 +74,10 @@ static int _skcipher_recvmsg(struct socket *sock, struct msghdr *msg,
                return PTR_ERR(areq);
 
        /* convert iovecs of output buffers into RX SGL */
-       err = af_alg_get_rsgl(sk, msg, flags, areq, -1, &len);
+       err = af_alg_get_rsgl(sk, msg, flags, areq, ctx->used, &len);
        if (err)
                goto free;
 
-       /* Process only as much RX buffers for which we have TX data */
-       if (len > ctx->used)
-               len = ctx->used;
-
        /*
         * If more buffers are to be expected to be processed, process only
         * full block size buffers.
index 37526eb..8d80d93 100644 (file)
@@ -1631,10 +1631,12 @@ static int drbg_uninstantiate(struct drbg_state *drbg)
        if (drbg->random_ready.func) {
                del_random_ready_callback(&drbg->random_ready);
                cancel_work_sync(&drbg->seed_work);
-               crypto_free_rng(drbg->jent);
-               drbg->jent = NULL;
        }
 
+       if (!IS_ERR_OR_NULL(drbg->jent))
+               crypto_free_rng(drbg->jent);
+       drbg->jent = NULL;
+
        if (drbg->d_ops)
                drbg->d_ops->crypto_fini(drbg);
        drbg_dealloc_state(drbg);
index 57d3b2e..0b2c20f 100644 (file)
@@ -120,7 +120,7 @@ static const u32 tegra_ahb_gizmo[] = {
 struct tegra_ahb {
        void __iomem    *regs;
        struct device   *dev;
-       u32             ctx[0];
+       u32             ctx[];
 };
 
 static inline u32 gizmo_readl(struct tegra_ahb *ahb, u32 offset)
index 69361ec..b1cd4d9 100644 (file)
@@ -42,7 +42,6 @@
 #include <linux/workqueue.h>
 #include <linux/scatterlist.h>
 #include <linux/io.h>
-#include <linux/async.h>
 #include <linux/log2.h>
 #include <linux/slab.h>
 #include <linux/glob.h>
@@ -5778,7 +5777,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
        /* perform each probe asynchronously */
        for (i = 0; i < host->n_ports; i++) {
                struct ata_port *ap = host->ports[i];
-               async_schedule(async_port_probe, ap);
+               ap->cookie = async_schedule(async_port_probe, ap);
        }
 
        return 0;
@@ -5920,11 +5919,11 @@ void ata_host_detach(struct ata_host *host)
 {
        int i;
 
-       /* Ensure ata_port probe has completed */
-       async_synchronize_full();
-
-       for (i = 0; i < host->n_ports; i++)
+       for (i = 0; i < host->n_ports; i++) {
+               /* Ensure ata_port probe has completed */
+               async_synchronize_cookie(host->ports[i]->cookie + 1);
                ata_port_detach(host->ports[i]);
+       }
 
        /* the host is dead now, dissociate ACPI */
        ata_acpi_dissociate(host);
index 435781a..4633608 100644 (file)
@@ -3684,12 +3684,13 @@ static unsigned int ata_scsi_mode_select_xlat(struct ata_queued_cmd *qc)
 {
        struct scsi_cmnd *scmd = qc->scsicmd;
        const u8 *cdb = scmd->cmnd;
-       const u8 *p;
        u8 pg, spg;
        unsigned six_byte, pg_len, hdr_len, bd_len;
        int len;
        u16 fp = (u16)-1;
        u8 bp = 0xff;
+       u8 buffer[64];
+       const u8 *p = buffer;
 
        VPRINTK("ENTER\n");
 
@@ -3723,12 +3724,14 @@ static unsigned int ata_scsi_mode_select_xlat(struct ata_queued_cmd *qc)
        if (!scsi_sg_count(scmd) || scsi_sglist(scmd)->length < len)
                goto invalid_param_len;
 
-       p = page_address(sg_page(scsi_sglist(scmd)));
-
        /* Move past header and block descriptors.  */
        if (len < hdr_len)
                goto invalid_param_len;
 
+       if (!sg_copy_to_buffer(scsi_sglist(scmd), scsi_sg_count(scmd),
+                              buffer, sizeof(buffer)))
+               goto invalid_param_len;
+
        if (six_byte)
                bd_len = p[3];
        else
index 980aacd..141ac60 100644 (file)
@@ -907,7 +907,7 @@ static int sata_rcar_probe(struct platform_device *pdev)
        pm_runtime_enable(dev);
        ret = pm_runtime_get_sync(dev);
        if (ret < 0)
-               goto err_pm_disable;
+               goto err_pm_put;
 
        host = ata_host_alloc(dev, 1);
        if (!host) {
@@ -937,7 +937,6 @@ static int sata_rcar_probe(struct platform_device *pdev)
 
 err_pm_put:
        pm_runtime_put(dev);
-err_pm_disable:
        pm_runtime_disable(dev);
        return ret;
 }
@@ -991,8 +990,10 @@ static int sata_rcar_resume(struct device *dev)
        int ret;
 
        ret = pm_runtime_get_sync(dev);
-       if (ret < 0)
+       if (ret < 0) {
+               pm_runtime_put(dev);
                return ret;
+       }
 
        if (priv->type == RCAR_GEN3_SATA) {
                sata_rcar_init_module(priv);
@@ -1017,8 +1018,10 @@ static int sata_rcar_restore(struct device *dev)
        int ret;
 
        ret = pm_runtime_get_sync(dev);
-       if (ret < 0)
+       if (ret < 0) {
+               pm_runtime_put(dev);
                return ret;
+       }
 
        sata_rcar_setup_port(host);
 
index 14345a8..33d0831 100644 (file)
@@ -620,7 +620,7 @@ struct fifo_buffer {
        unsigned int head_index;
        unsigned int size;
        int total; /* sum of all values */
-       int values[0];
+       int values[];
 };
 extern struct fifo_buffer *fifo_alloc(unsigned int fifo_size);
 
index e6fc5ad..dea59c9 100644 (file)
@@ -271,7 +271,7 @@ struct p_rs_param {
        u32 resync_rate;
 
              /* Since protocol version 88 and higher. */
-       char verify_alg[0];
+       char verify_alg[];
 } __packed;
 
 struct p_rs_param_89 {
@@ -305,7 +305,7 @@ struct p_protocol {
        u32 two_primaries;
 
        /* Since protocol version 87 and higher. */
-       char integrity_alg[0];
+       char integrity_alg[];
 
 } __packed;
 
@@ -360,7 +360,7 @@ struct p_sizes {
        u16         dds_flags; /* use enum dds_flags here. */
 
        /* optional queue_limits if (agreed_features & DRBD_FF_WSAME) */
-       struct o_qlim qlim[0];
+       struct o_qlim qlim[];
 } __packed;
 
 struct p_state {
@@ -409,7 +409,7 @@ struct p_compressed_bm {
         */
        u8 encoding;
 
-       u8 code[0];
+       u8 code[];
 } __packed;
 
 struct p_delay_probe93 {
index c33bbbf..475e1a7 100644 (file)
@@ -1368,14 +1368,14 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
            lo->lo_sizelimit != info->lo_sizelimit) {
                size_changed = true;
                sync_blockdev(lo->lo_device);
-               kill_bdev(lo->lo_device);
+               invalidate_bdev(lo->lo_device);
        }
 
        /* I/O need to be drained during transfer transition */
        blk_mq_freeze_queue(lo->lo_queue);
 
        if (size_changed && lo->lo_device->bd_inode->i_mapping->nrpages) {
-               /* If any pages were dirtied after kill_bdev(), try again */
+               /* If any pages were dirtied after invalidate_bdev(), try again */
                err = -EAGAIN;
                pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
                        __func__, lo->lo_number, lo->lo_file_name,
@@ -1615,11 +1615,11 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
                return 0;
 
        sync_blockdev(lo->lo_device);
-       kill_bdev(lo->lo_device);
+       invalidate_bdev(lo->lo_device);
 
        blk_mq_freeze_queue(lo->lo_queue);
 
-       /* kill_bdev should have truncated all the pages */
+       /* invalidate_bdev should have truncated all the pages */
        if (lo->lo_device->bd_inode->i_mapping->nrpages) {
                err = -EAGAIN;
                pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
index 7420648..4f61e92 100644 (file)
@@ -1451,8 +1451,10 @@ static void rbd_osd_req_callback(struct ceph_osd_request *osd_req)
 static void rbd_osd_format_read(struct ceph_osd_request *osd_req)
 {
        struct rbd_obj_request *obj_request = osd_req->r_priv;
+       struct rbd_device *rbd_dev = obj_request->img_request->rbd_dev;
+       struct ceph_options *opt = rbd_dev->rbd_client->client->options;
 
-       osd_req->r_flags = CEPH_OSD_FLAG_READ;
+       osd_req->r_flags = CEPH_OSD_FLAG_READ | opt->read_from_replica;
        osd_req->r_snapid = obj_request->img_request->snap_id;
 }
 
index 3affd18..78fc3da 100644 (file)
@@ -1330,6 +1330,10 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
                   SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
        SYSC_QUIRK("tptc", 0, 0, -ENODEV, -ENODEV, 0x40007c00, 0xffffffff,
                   SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
+       SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, 0x14, 0x50700100, 0xffffffff,
+                  SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
+       SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, -ENODEV, 0x50700101, 0xffffffff,
+                  SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
        SYSC_QUIRK("usb_otg_hs", 0, 0x400, 0x404, 0x408, 0x00000050,
                   0xffffffff, SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
        SYSC_QUIRK("usb_otg_hs", 0, 0, 0x10, -ENODEV, 0x4ea2080d, 0xffffffff,
@@ -1408,8 +1412,6 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
        SYSC_QUIRK("tpcc", 0, 0, -ENODEV, -ENODEV, 0x40014c00, 0xffffffff, 0),
        SYSC_QUIRK("usbhstll", 0, 0, 0x10, 0x14, 0x00000004, 0xffffffff, 0),
        SYSC_QUIRK("usbhstll", 0, 0, 0x10, 0x14, 0x00000008, 0xffffffff, 0),
-       SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, 0x14, 0x50700100, 0xffffffff, 0),
-       SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, -ENODEV, 0x50700101, 0xffffffff, 0),
        SYSC_QUIRK("venc", 0x58003000, 0, -ENODEV, -ENODEV, 0x00000002, 0xffffffff, 0),
        SYSC_QUIRK("vfpe", 0, 0, 0x104, -ENODEV, 0x4d001200, 0xffffffff, 0),
 #endif
index e2330e7..0016170 100644 (file)
@@ -244,6 +244,7 @@ static int ks_sa_rng_probe(struct platform_device *pdev)
        ret = pm_runtime_get_sync(dev);
        if (ret < 0) {
                dev_err(dev, "Failed to enable SA power-domain\n");
+               pm_runtime_put_noidle(dev);
                pm_runtime_disable(dev);
                return ret;
        }
index 31cae88..934c92d 100644 (file)
@@ -171,7 +171,7 @@ static ssize_t read_mem(struct file *file, char __user *buf,
                        if (!ptr)
                                goto failed;
 
-                       probe = probe_kernel_read(bounce, ptr, sz);
+                       probe = copy_from_kernel_nofault(bounce, ptr, sz);
                        unxlate_dev_mem_ptr(p, ptr);
                        if (probe)
                                goto failed;
index b4d9db9..ca74771 100644 (file)
@@ -680,6 +680,7 @@ static int imx8mp_clocks_probe(struct platform_device *pdev)
        hws[IMX8MP_CLK_I2C2_ROOT] = imx_clk_hw_gate4("i2c2_root_clk", "i2c2", ccm_base + 0x4180, 0);
        hws[IMX8MP_CLK_I2C3_ROOT] = imx_clk_hw_gate4("i2c3_root_clk", "i2c3", ccm_base + 0x4190, 0);
        hws[IMX8MP_CLK_I2C4_ROOT] = imx_clk_hw_gate4("i2c4_root_clk", "i2c4", ccm_base + 0x41a0, 0);
+       hws[IMX8MP_CLK_MU_ROOT] = imx_clk_hw_gate4("mu_root_clk", "ipg_root", ccm_base + 0x4210, 0);
        hws[IMX8MP_CLK_OCOTP_ROOT] = imx_clk_hw_gate4("ocotp_root_clk", "ipg_root", ccm_base + 0x4220, 0);
        hws[IMX8MP_CLK_PCIE_ROOT] = imx_clk_hw_gate4("pcie_root_clk", "pcie_aux", ccm_base + 0x4250, 0);
        hws[IMX8MP_CLK_PWM1_ROOT] = imx_clk_hw_gate4("pwm1_root_clk", "pwm1", ccm_base + 0x4280, 0);
index cd04e7d..5129ef8 100644 (file)
@@ -438,6 +438,7 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
        clk[VF610_CLK_SNVS] = imx_clk_gate2("snvs-rtc", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(7));
        clk[VF610_CLK_DAP] = imx_clk_gate("dap", "platform_bus", CCM_CCSR, 24);
        clk[VF610_CLK_OCOTP] = imx_clk_gate("ocotp", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(5));
+       clk[VF610_CLK_CAAM] = imx_clk_gate2("caam", "ipg_bus", CCM_CCGR11, CCM_CCGRx_CGn(0));
 
        imx_check_clocks(clk, ARRAY_SIZE(clk));
 
index a62f228..bc35aa0 100644 (file)
@@ -147,7 +147,7 @@ config CRYPTO_DEV_FSL_CAAM_RNG_API
        select HW_RANDOM
        help
          Selecting this will register the SEC4 hardware rng to
-         the hw_random API for suppying the kernel entropy pool.
+         the hw_random API for supplying the kernel entropy pool.
 
 endif # CRYPTO_DEV_FSL_CAAM_JR
 
index 4fcdd26..f3d20b7 100644 (file)
@@ -54,7 +54,7 @@ static void build_instantiation_desc(u32 *desc, int handle, int do_sk)
 
                /*
                 * load 1 to clear written reg:
-                * resets the done interrrupt and returns the RNG to idle.
+                * resets the done interrupt and returns the RNG to idle.
                 */
                append_load_imm_u32(desc, 1, LDST_SRCDST_WORD_CLRW);
 
@@ -156,7 +156,7 @@ static inline int run_descriptor_deco0(struct device *ctrldev, u32 *desc,
                                     DESC_DER_DECO_STAT_SHIFT;
 
                /*
-                * If an error occured in the descriptor, then
+                * If an error occurred in the descriptor, then
                 * the DECO status field will be set to 0x0D
                 */
                if (deco_state == DECO_STAT_HOST_ERR)
@@ -264,7 +264,7 @@ static void devm_deinstantiate_rng(void *data)
  *        - -ENODEV if DECO0 couldn't be acquired
  *        - -EAGAIN if an error occurred when executing the descriptor
  *           f.i. there was a RNG hardware error due to not "good enough"
- *           entropy being aquired.
+ *           entropy being acquired.
  */
 static int instantiate_rng(struct device *ctrldev, int state_handle_mask,
                           int gen_sk)
@@ -733,8 +733,8 @@ static int caam_probe(struct platform_device *pdev)
        handle_imx6_err005766(&ctrl->mcr);
 
        /*
-        *  Read the Compile Time paramters and SCFGR to determine
-        * if Virtualization is enabled for this platform
+        *  Read the Compile Time parameters and SCFGR to determine
+        * if virtualization is enabled for this platform
         */
        scfgr = rd_reg32(&ctrl->scfgr);
 
@@ -863,9 +863,9 @@ static int caam_probe(struct platform_device *pdev)
                        }
                        /*
                         * if instantiate_rng(...) fails, the loop will rerun
-                        * and the kick_trng(...) function will modfiy the
+                        * and the kick_trng(...) function will modify the
                         * upper and lower limits of the entropy sampling
-                        * interval, leading to a sucessful initialization of
+                        * interval, leading to a successful initialization of
                         * the RNG.
                         */
                        ret = instantiate_rng(dev, inst_handles,
@@ -882,8 +882,8 @@ static int caam_probe(struct platform_device *pdev)
                        return ret;
                }
                /*
-                * Set handles init'ed by this module as the complement of the
-                * already initialized ones
+                * Set handles initialized by this module as the complement of
+                * the already initialized ones
                 */
                ctrlpriv->rng4_sh_init = ~ctrlpriv->rng4_sh_init & RDSTA_MASK;
 
index e796d3c..e134709 100644 (file)
@@ -18,7 +18,7 @@
  */
 
 #define SEC4_SG_LEN_EXT                0x80000000      /* Entry points to table */
-#define SEC4_SG_LEN_FIN                0x40000000      /* Last ent in table */
+#define SEC4_SG_LEN_FIN                0x40000000      /* Last entry in table */
 #define SEC4_SG_BPID_MASK      0x000000ff
 #define SEC4_SG_BPID_SHIFT     16
 #define SEC4_SG_LEN_MASK       0x3fffffff      /* Excludes EXT and FINAL */
  */
 #define HDR_REVERSE            0x00000800
 
-/* Propogate DNR property to SharedDesc */
+/* Propagate DNR property to SharedDesc */
 #define HDR_PROP_DNR           0x00000800
 
 /* JobDesc/SharedDesc share property */
index 68c1fd5..8ccc220 100644 (file)
@@ -453,7 +453,7 @@ struct srtp_decap_pdb {
 #define DSA_PDB_N_MASK         0x7f
 
 struct dsa_sign_pdb {
-       u32 sgf_ln; /* Use DSA_PDB_ defintions per above */
+       u32 sgf_ln; /* Use DSA_PDB_ definitions per above */
        u8 *q;
        u8 *r;
        u8 *g;  /* or Gx,y */
index a242633..476113e 100644 (file)
@@ -376,6 +376,7 @@ static int sev_ioctl_do_pek_csr(struct sev_issue_cmd *argp, bool writable)
        struct sev_device *sev = psp_master->sev_data;
        struct sev_user_data_pek_csr input;
        struct sev_data_pek_csr *data;
+       void __user *input_address;
        void *blob = NULL;
        int ret;
 
@@ -394,6 +395,7 @@ static int sev_ioctl_do_pek_csr(struct sev_issue_cmd *argp, bool writable)
                goto cmd;
 
        /* allocate a physically contiguous buffer to store the CSR blob */
+       input_address = (void __user *)input.address;
        if (input.length > SEV_FW_BLOB_MAX_SIZE) {
                ret = -EFAULT;
                goto e_free;
@@ -426,7 +428,7 @@ cmd:
        }
 
        if (blob) {
-               if (copy_to_user((void __user *)input.address, blob, input.length))
+               if (copy_to_user(input_address, blob, input.length))
                        ret = -EFAULT;
        }
 
@@ -437,7 +439,7 @@ e_free:
        return ret;
 }
 
-void *psp_copy_user_blob(u64 __user uaddr, u32 len)
+void *psp_copy_user_blob(u64 uaddr, u32 len)
 {
        if (!uaddr || !len)
                return ERR_PTR(-EINVAL);
@@ -446,7 +448,7 @@ void *psp_copy_user_blob(u64 __user uaddr, u32 len)
        if (len > SEV_FW_BLOB_MAX_SIZE)
                return ERR_PTR(-EINVAL);
 
-       return memdup_user((void __user *)(uintptr_t)uaddr, len);
+       return memdup_user((void __user *)uaddr, len);
 }
 EXPORT_SYMBOL_GPL(psp_copy_user_blob);
 
@@ -621,6 +623,7 @@ static int sev_ioctl_do_get_id2(struct sev_issue_cmd *argp)
 {
        struct sev_user_data_get_id2 input;
        struct sev_data_get_id *data;
+       void __user *input_address;
        void *id_blob = NULL;
        int ret;
 
@@ -631,6 +634,8 @@ static int sev_ioctl_do_get_id2(struct sev_issue_cmd *argp)
        if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
                return -EFAULT;
 
+       input_address = (void __user *)input.address;
+
        data = kzalloc(sizeof(*data), GFP_KERNEL);
        if (!data)
                return -ENOMEM;
@@ -660,8 +665,7 @@ static int sev_ioctl_do_get_id2(struct sev_issue_cmd *argp)
        }
 
        if (id_blob) {
-               if (copy_to_user((void __user *)input.address,
-                                id_blob, data->len)) {
+               if (copy_to_user(input_address, id_blob, data->len)) {
                        ret = -EFAULT;
                        goto e_free;
                }
@@ -720,6 +724,8 @@ static int sev_ioctl_do_pdh_export(struct sev_issue_cmd *argp, bool writable)
        struct sev_user_data_pdh_cert_export input;
        void *pdh_blob = NULL, *cert_blob = NULL;
        struct sev_data_pdh_cert_export *data;
+       void __user *input_cert_chain_address;
+       void __user *input_pdh_cert_address;
        int ret;
 
        /* If platform is not in INIT state then transition it to INIT. */
@@ -745,6 +751,9 @@ static int sev_ioctl_do_pdh_export(struct sev_issue_cmd *argp, bool writable)
            !input.cert_chain_address)
                goto cmd;
 
+       input_pdh_cert_address = (void __user *)input.pdh_cert_address;
+       input_cert_chain_address = (void __user *)input.cert_chain_address;
+
        /* Allocate a physically contiguous buffer to store the PDH blob. */
        if (input.pdh_cert_len > SEV_FW_BLOB_MAX_SIZE) {
                ret = -EFAULT;
@@ -788,7 +797,7 @@ cmd:
        }
 
        if (pdh_blob) {
-               if (copy_to_user((void __user *)input.pdh_cert_address,
+               if (copy_to_user(input_pdh_cert_address,
                                 pdh_blob, input.pdh_cert_len)) {
                        ret = -EFAULT;
                        goto e_free_cert;
@@ -796,7 +805,7 @@ cmd:
        }
 
        if (cert_blob) {
-               if (copy_to_user((void __user *)input.cert_chain_address,
+               if (copy_to_user(input_cert_chain_address,
                                 cert_blob, input.cert_chain_len))
                        ret = -EFAULT;
        }
index b3fdbdc..31e427e 100644 (file)
@@ -223,7 +223,7 @@ struct chcr_authenc_ctx {
 
 struct __aead_ctx {
        struct chcr_gcm_ctx gcm[0];
-       struct chcr_authenc_ctx authenc[0];
+       struct chcr_authenc_ctx authenc[];
 };
 
 struct chcr_aead_ctx {
@@ -235,7 +235,7 @@ struct chcr_aead_ctx {
        u8 nonce[4];
        u16 hmac_ctrl;
        u16 mayverify;
-       struct  __aead_ctx ctx[0];
+       struct  __aead_ctx ctx[];
 };
 
 struct hmac_ctx {
@@ -247,7 +247,7 @@ struct hmac_ctx {
 struct __crypto_ctx {
        struct hmac_ctx hmacctx[0];
        struct ablk_ctx ablkctx[0];
-       struct chcr_aead_ctx aeadctx[0];
+       struct chcr_aead_ctx aeadctx[];
 };
 
 struct chcr_context {
@@ -257,7 +257,7 @@ struct chcr_context {
        unsigned int  ntxq;
        unsigned int  nrxq;
        struct completion cbc_aes_aio_done;
-       struct __crypto_ctx crypto_ctx[0];
+       struct __crypto_ctx crypto_ctx[];
 };
 
 struct chcr_hctx_per_wr {
index 0e8c7e3..725a739 100644 (file)
@@ -66,7 +66,8 @@ struct hisi_acc_sgl_pool *hisi_acc_create_sgl_pool(struct device *dev,
 
        sgl_size = sizeof(struct acc_hw_sge) * sge_nr +
                   sizeof(struct hisi_acc_hw_sgl);
-       block_size = PAGE_SIZE * (1 << (MAX_ORDER - 1));
+       block_size = 1 << (PAGE_SHIFT + MAX_ORDER <= 32 ?
+                          PAGE_SHIFT + MAX_ORDER - 1 : 31);
        sgl_num_per_block = block_size / sgl_size;
        block_num = count / sgl_num_per_block;
        remain_sgl = count % sgl_num_per_block;
index 60e744f..1e0a1d7 100644 (file)
@@ -118,6 +118,9 @@ static void otx_cpt_aead_callback(int status, void *arg1, void *arg2)
        struct otx_cpt_req_info *cpt_req;
        struct pci_dev *pdev;
 
+       if (!cpt_info)
+               goto complete;
+
        cpt_req = cpt_info->req;
        if (!status) {
                /*
@@ -129,10 +132,10 @@ static void otx_cpt_aead_callback(int status, void *arg1, void *arg2)
                    !cpt_req->is_enc)
                        status = validate_hmac_cipher_null(cpt_req);
        }
-       if (cpt_info) {
-               pdev = cpt_info->pdev;
-               do_request_cleanup(pdev, cpt_info);
-       }
+       pdev = cpt_info->pdev;
+       do_request_cleanup(pdev, cpt_info);
+
+complete:
        if (areq)
                areq->complete(areq, status);
 }
index c9aa15f..193b40e 100644 (file)
@@ -135,7 +135,8 @@ int __init dio_find(int deviceid)
                else
                        va = ioremap(pa, PAGE_SIZE);
 
-                if (probe_kernel_read(&i, (unsigned char *)va + DIO_IDOFF, 1)) {
+               if (copy_from_kernel_nofault(&i,
+                               (unsigned char *)va + DIO_IDOFF, 1)) {
                        if (scode >= DIOII_SCBASE)
                                iounmap(va);
                         continue;             /* no board present at that select code */
@@ -208,7 +209,8 @@ static int __init dio_init(void)
                else
                        va = ioremap(pa, PAGE_SIZE);
 
-                if (probe_kernel_read(&i, (unsigned char *)va + DIO_IDOFF, 1)) {
+               if (copy_from_kernel_nofault(&i,
+                               (unsigned char *)va + DIO_IDOFF, 1)) {
                        if (scode >= DIOII_SCBASE)
                                iounmap(va);
                         continue;              /* no board present at that select code */
index 8853d44..a8cfb59 100644 (file)
@@ -77,7 +77,7 @@ struct milbeaut_hdmac_device {
        struct dma_device ddev;
        struct clk *clk;
        void __iomem *reg_base;
-       struct milbeaut_hdmac_chan channels[0];
+       struct milbeaut_hdmac_chan channels[];
 };
 
 static struct milbeaut_hdmac_chan *
index ab3d2f3..85a5972 100644 (file)
@@ -74,7 +74,7 @@ struct milbeaut_xdmac_chan {
 struct milbeaut_xdmac_device {
        struct dma_device ddev;
        void __iomem *reg_base;
-       struct milbeaut_xdmac_chan channels[0];
+       struct milbeaut_xdmac_chan channels[];
 };
 
 static struct milbeaut_xdmac_chan *
index 4ab493d..347146a 100644 (file)
@@ -127,7 +127,7 @@ struct moxart_desc {
        unsigned int                    dma_cycles;
        struct virt_dma_desc            vd;
        uint8_t                         es;
-       struct moxart_sg                sg[0];
+       struct moxart_sg                sg[];
 };
 
 struct moxart_chan {
index b9f0d96..55fc740 100644 (file)
@@ -225,7 +225,7 @@ struct tegra_dma {
        u32                             global_pause_count;
 
        /* Last member of the structure */
-       struct tegra_dma_channel channels[0];
+       struct tegra_dma_channel channels[];
 };
 
 static inline void tdma_write(struct tegra_dma *tdma, u32 reg, u32 val)
index c4a5c17..35d81bd 100644 (file)
@@ -211,7 +211,7 @@ struct edma_desc {
        u32                             residue;
        u32                             residue_stat;
 
-       struct edma_pset                pset[0];
+       struct edma_pset                pset[];
 };
 
 struct edma_cc;
index 945b7c6..c91e2dc 100644 (file)
@@ -170,7 +170,7 @@ struct udma_desc {
        void *metadata; /* pointer to provided metadata buffer (EPIP, PSdata) */
 
        unsigned int hwdesc_count;
-       struct udma_hwdesc hwdesc[0];
+       struct udma_hwdesc hwdesc[];
 };
 
 enum udma_chan_state {
index 3938269..68e48bf 100644 (file)
@@ -88,7 +88,7 @@ struct timb_dma {
        struct dma_device       dma;
        void __iomem            *membase;
        struct tasklet_struct   tasklet;
-       struct timb_dma_chan    channels[0];
+       struct timb_dma_chan    channels[];
 };
 
 static struct device *chan2dev(struct dma_chan *chan)
index c7ea4f2..fb6c651 100644 (file)
@@ -117,7 +117,7 @@ struct inbound_transaction_resource {
 struct descriptor_resource {
        struct client_resource resource;
        struct fw_descriptor descriptor;
-       u32 data[0];
+       u32 data[];
 };
 
 struct iso_resource {
index 404a035..439d918 100644 (file)
@@ -620,7 +620,7 @@ struct fw_request {
        u32 request_header[4];
        int ack;
        u32 length;
-       u32 data[0];
+       u32 data[];
 };
 
 static void free_response_callback(struct fw_packet *packet,
index 4b0e4ee..71d5f16 100644 (file)
@@ -191,7 +191,7 @@ struct fw_node {
        /* Upper layer specific data. */
        void *data;
 
-       struct fw_node *ports[0];
+       struct fw_node *ports[];
 };
 
 static inline struct fw_node *fw_node_get(struct fw_node *node)
index 6ca2f5a..5fd6a60 100644 (file)
@@ -52,7 +52,7 @@ struct pcl {
 
 struct packet {
        unsigned int length;
-       char data[0];
+       char data[];
 };
 
 struct packet_buffer {
index 3326931..54fdc39 100644 (file)
@@ -111,7 +111,7 @@ struct descriptor_buffer {
        dma_addr_t buffer_bus;
        size_t buffer_size;
        size_t used;
-       struct descriptor buffer[0];
+       struct descriptor buffer[];
 };
 
 struct context {
index b618002..8b8127f 100644 (file)
@@ -262,7 +262,7 @@ struct dmi_system_event_log {
        u8      header_format;
        u8      type_descriptors_supported_count;
        u8      per_log_type_descriptor_length;
-       u8      supported_log_type_descriptos[0];
+       u8      supported_log_type_descriptos[];
 } __packed;
 
 #define DMI_SYSFS_SEL_FIELD(_field) \
index fd7f0fb..d17e4d6 100644 (file)
@@ -21,7 +21,7 @@
 struct cbmem_cons {
        u32 size_dont_access_after_boot;
        u32 cursor;
-       u8  body[0];
+       u8  body[];
 } __packed;
 
 #define CURSOR_MASK ((1 << 28) - 1)
index db08122..d23c5c6 100644 (file)
@@ -32,7 +32,7 @@ struct vpd_cbmem {
        u32 version;
        u32 ro_size;
        u32 rw_size;
-       u8  blob[0];
+       u8  blob[];
 };
 
 struct vpd_section {
index 96758b7..7127a04 100644 (file)
@@ -104,7 +104,7 @@ struct ibft_control {
        u16 tgt0_off;
        u16 nic1_off;
        u16 tgt1_off;
-       u16 expansion[0];
+       u16 expansion[];
 } __attribute__((__packed__));
 
 struct ibft_initiator {
index ce75d1d..e025405 100644 (file)
@@ -103,6 +103,6 @@ struct pcdp {
        u8                      creator_id[4];
        u32                     creator_rev;
        u32                     num_uarts;
-       struct pcdp_uart        uart[0];        /* actual size is num_uarts */
+       struct pcdp_uart        uart[]; /* actual size is num_uarts */
        /* remainder of table is pcdp_device structures */
 } __attribute__((packed));
index 775e389..16596a9 100644 (file)
@@ -696,7 +696,7 @@ static ssize_t amdgpu_set_pp_table(struct device *dev,
  * default power levels, write "r" (reset) to the file to reset them.
  *
  *
- * < For Vega20 >
+ * < For Vega20 and newer ASICs >
  *
  * Reading the file will display:
  *
@@ -1668,7 +1668,7 @@ static ssize_t amdgpu_set_pp_power_profile_mode(struct device *dev,
 }
 
 /**
- * DOC: busy_percent
+ * DOC: gpu_busy_percent
  *
  * The amdgpu driver provides a sysfs API for reading how busy the GPU
  * is as a percentage.  The file gpu_busy_percent is used for this.
index f0587d9..fee6092 100644 (file)
@@ -40,6 +40,7 @@
 #include <drm/drm_file.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_device.h>
+#include <drm/drm_ioctl.h>
 #include <kgd_kfd_interface.h>
 #include <linux/swap.h>
 
@@ -1076,7 +1077,7 @@ static inline int kfd_devcgroup_check_permission(struct kfd_dev *kfd)
 #if defined(CONFIG_CGROUP_DEVICE) || defined(CONFIG_CGROUP_BPF)
        struct drm_device *ddev = kfd->ddev;
 
-       return devcgroup_check_permission(DEVCG_DEV_CHAR, ddev->driver->major,
+       return devcgroup_check_permission(DEVCG_DEV_CHAR, DRM_MAJOR,
                                          ddev->render->index,
                                          DEVCG_ACC_WRITE | DEVCG_ACC_READ);
 #else
index 3f66868..ea29cf9 100644 (file)
@@ -28,8 +28,6 @@ endif
 endif
 
 CFLAGS_$(AMDDALPATH)/dc/dsc/rc_calc.o := $(dsc_ccflags)
-CFLAGS_$(AMDDALPATH)/dc/dsc/rc_calc_dpi.o := $(dsc_ccflags)
-CFLAGS_$(AMDDALPATH)/dc/dsc/dc_dsc.o := $(dsc_ccflags)
 
 DSC = dc_dsc.o rc_calc.o rc_calc_dpi.o
 
index 0ea6662..0c7f247 100644 (file)
  * Author: AMD
  */
 
+#include <drm/drm_dsc.h>
 #include "dc_hw_types.h"
 #include "dsc.h"
 #include <drm/drm_dp_helper.h>
 #include "dc.h"
+#include "rc_calc.h"
 
 /* This module's internal functions */
 
@@ -304,22 +306,6 @@ static inline uint32_t dsc_div_by_10_round_up(uint32_t value)
        return (value + 9) / 10;
 }
 
-static inline uint32_t calc_dsc_bpp_x16(uint32_t stream_bandwidth_kbps, uint32_t pix_clk_100hz, uint32_t bpp_increment_div)
-{
-       uint32_t dsc_target_bpp_x16;
-       float f_dsc_target_bpp;
-       float f_stream_bandwidth_100bps = stream_bandwidth_kbps * 10.0f;
-       uint32_t precision = bpp_increment_div; // bpp_increment_div is actually precision
-
-       f_dsc_target_bpp = f_stream_bandwidth_100bps / pix_clk_100hz;
-
-       // Round down to the nearest precision stop to bring it into DSC spec range
-       dsc_target_bpp_x16 = (uint32_t)(f_dsc_target_bpp * precision);
-       dsc_target_bpp_x16 = (dsc_target_bpp_x16 * 16) / precision;
-
-       return dsc_target_bpp_x16;
-}
-
 /* Get DSC bandwidth range based on [min_bpp, max_bpp] target bitrate range, and timing's pixel clock
  * and uncompressed bandwidth.
  */
index 03ae159..667afbc 100644 (file)
@@ -23,6 +23,7 @@
  * Authors: AMD
  *
  */
+#include <drm/drm_dsc.h>
 
 #include "os_types.h"
 #include "rc_calc.h"
@@ -40,7 +41,8 @@
        break
 
 
-void get_qp_set(qp_set qps, enum colour_mode cm, enum bits_per_comp bpc, enum max_min max_min, float bpp)
+static void get_qp_set(qp_set qps, enum colour_mode cm, enum bits_per_comp bpc,
+                      enum max_min max_min, float bpp)
 {
        int mode = MODE_SELECT(444, 422, 420);
        int sel = table_hash(mode, bpc, max_min);
@@ -85,7 +87,7 @@ void get_qp_set(qp_set qps, enum colour_mode cm, enum bits_per_comp bpc, enum ma
        memcpy(qps, table[index].qps, sizeof(qp_set));
 }
 
-double dsc_roundf(double num)
+static double dsc_roundf(double num)
 {
        if (num < 0.0)
                num = num - 0.5;
@@ -95,7 +97,7 @@ double dsc_roundf(double num)
        return (int)(num);
 }
 
-double dsc_ceil(double num)
+static double dsc_ceil(double num)
 {
        double retval = (int)num;
 
@@ -105,7 +107,7 @@ double dsc_ceil(double num)
        return (int)retval;
 }
 
-void get_ofs_set(qp_set ofs, enum colour_mode mode, float bpp)
+static void get_ofs_set(qp_set ofs, enum colour_mode mode, float bpp)
 {
        int   *p = ofs;
 
@@ -160,7 +162,7 @@ void get_ofs_set(qp_set ofs, enum colour_mode mode, float bpp)
        }
 }
 
-int median3(int a, int b, int c)
+static int median3(int a, int b, int c)
 {
        if (a > b)
                swap(a, b);
@@ -172,13 +174,25 @@ int median3(int a, int b, int c)
        return b;
 }
 
-void calc_rc_params(struct rc_params *rc, enum colour_mode cm, enum bits_per_comp bpc, float bpp, int slice_width, int slice_height, int minor_version)
+static void _do_calc_rc_params(struct rc_params *rc, enum colour_mode cm,
+                              enum bits_per_comp bpc, u8 drm_bpp,
+                              bool is_navite_422_or_420,
+                              int slice_width, int slice_height,
+                              int minor_version)
 {
+       float bpp;
        float bpp_group;
        float initial_xmit_delay_factor;
        int padding_pixels;
        int i;
 
+       bpp = ((float)drm_bpp / 16.0);
+       /* in native_422 or native_420 modes, the bits_per_pixel is double the
+        * target bpp (the latter is what calc_rc_params expects)
+        */
+       if (is_navite_422_or_420)
+               bpp /= 2.0;
+
        rc->rc_quant_incr_limit0 = ((bpc == BPC_8) ? 11 : (bpc == BPC_10 ? 15 : 19)) - ((minor_version == 1 && cm == CM_444) ? 1 : 0);
        rc->rc_quant_incr_limit1 = ((bpc == BPC_8) ? 11 : (bpc == BPC_10 ? 15 : 19)) - ((minor_version == 1 && cm == CM_444) ? 1 : 0);
 
@@ -251,3 +265,128 @@ void calc_rc_params(struct rc_params *rc, enum colour_mode cm, enum bits_per_com
        rc->rc_buf_thresh[13] = 8064;
 }
 
+static u32 _do_bytes_per_pixel_calc(int slice_width, u8 drm_bpp,
+                                   bool is_navite_422_or_420)
+{
+       float bpp;
+       u32 bytes_per_pixel;
+       double d_bytes_per_pixel;
+
+       bpp = ((float)drm_bpp / 16.0);
+       d_bytes_per_pixel = dsc_ceil(bpp * slice_width / 8.0) / slice_width;
+       // TODO: Make sure the formula for calculating this is precise (ceiling
+       // vs. floor, and at what point they should be applied)
+       if (is_navite_422_or_420)
+               d_bytes_per_pixel /= 2;
+
+       bytes_per_pixel = (u32)dsc_ceil(d_bytes_per_pixel * 0x10000000);
+
+       return bytes_per_pixel;
+}
+
+static u32 _do_calc_dsc_bpp_x16(u32 stream_bandwidth_kbps, u32 pix_clk_100hz,
+                               u32 bpp_increment_div)
+{
+       u32 dsc_target_bpp_x16;
+       float f_dsc_target_bpp;
+       float f_stream_bandwidth_100bps;
+       // bpp_increment_div is actually precision
+       u32 precision = bpp_increment_div;
+
+       f_stream_bandwidth_100bps = stream_bandwidth_kbps * 10.0f;
+       f_dsc_target_bpp = f_stream_bandwidth_100bps / pix_clk_100hz;
+
+       // Round down to the nearest precision stop to bring it into DSC spec
+       // range
+       dsc_target_bpp_x16 = (u32)(f_dsc_target_bpp * precision);
+       dsc_target_bpp_x16 = (dsc_target_bpp_x16 * 16) / precision;
+
+       return dsc_target_bpp_x16;
+}
+
+/**
+ * calc_rc_params - reads the user's cmdline mode
+ * @rc: DC internal DSC parameters
+ * @pps: DRM struct with all required DSC values
+ *
+ * This function expects a drm_dsc_config data struct with all the required DSC
+ * values previously filled out by our driver and based on this information it
+ * computes some of the DSC values.
+ *
+ * @note This calculation requires float point operation, most of it executes
+ * under kernel_fpu_{begin,end}.
+ */
+void calc_rc_params(struct rc_params *rc, const struct drm_dsc_config *pps)
+{
+       enum colour_mode mode;
+       enum bits_per_comp bpc;
+       bool is_navite_422_or_420;
+       u8 drm_bpp = pps->bits_per_pixel;
+       int slice_width  = pps->slice_width;
+       int slice_height = pps->slice_height;
+
+       mode = pps->convert_rgb ? CM_RGB : (pps->simple_422  ? CM_444 :
+                                          (pps->native_422  ? CM_422 :
+                                           pps->native_420  ? CM_420 : CM_444));
+       bpc = (pps->bits_per_component == 8) ? BPC_8 : (pps->bits_per_component == 10)
+                                            ? BPC_10 : BPC_12;
+
+       is_navite_422_or_420 = pps->native_422 || pps->native_420;
+
+       DC_FP_START();
+       _do_calc_rc_params(rc, mode, bpc, drm_bpp, is_navite_422_or_420,
+                          slice_width, slice_height,
+                          pps->dsc_version_minor);
+       DC_FP_END();
+}
+
+/**
+ * calc_dsc_bytes_per_pixel - calculate bytes per pixel
+ * @pps: DRM struct with all required DSC values
+ *
+ * Based on the information inside drm_dsc_config, this function calculates the
+ * total of bytes per pixel.
+ *
+ * @note This calculation requires float point operation, most of it executes
+ * under kernel_fpu_{begin,end}.
+ *
+ * Return:
+ * Return the number of bytes per pixel
+ */
+u32 calc_dsc_bytes_per_pixel(const struct drm_dsc_config *pps)
+
+{
+       u32 ret;
+       u8 drm_bpp = pps->bits_per_pixel;
+       int slice_width  = pps->slice_width;
+       bool is_navite_422_or_420 = pps->native_422 || pps->native_420;
+
+       DC_FP_START();
+       ret = _do_bytes_per_pixel_calc(slice_width, drm_bpp,
+                                      is_navite_422_or_420);
+       DC_FP_END();
+       return ret;
+}
+
+/**
+ * calc_dsc_bpp_x16 - retrieve the dsc bits per pixel
+ * @stream_bandwidth_kbps:
+ * @pix_clk_100hz:
+ * @bpp_increment_div:
+ *
+ * Calculate the total of bits per pixel for DSC configuration.
+ *
+ * @note This calculation requires float point operation, most of it executes
+ * under kernel_fpu_{begin,end}.
+ */
+u32 calc_dsc_bpp_x16(u32 stream_bandwidth_kbps, u32 pix_clk_100hz,
+                    u32 bpp_increment_div)
+{
+       u32 dsc_bpp;
+
+       DC_FP_START();
+       dsc_bpp =  _do_calc_dsc_bpp_x16(stream_bandwidth_kbps, pix_clk_100hz,
+                                       bpp_increment_div);
+       DC_FP_END();
+       return dsc_bpp;
+}
index b6b1f09..21723fa 100644 (file)
@@ -77,7 +77,10 @@ struct qp_entry {
 
 typedef struct qp_entry qp_table[];
 
-void calc_rc_params(struct rc_params *rc, enum colour_mode cm, enum bits_per_comp bpc, float bpp, int slice_width, int slice_height, int minor_version);
+void calc_rc_params(struct rc_params *rc, const struct drm_dsc_config *pps);
+u32 calc_dsc_bytes_per_pixel(const struct drm_dsc_config *pps);
+u32 calc_dsc_bpp_x16(u32 stream_bandwidth_kbps, u32 pix_clk_100hz,
+                    u32 bpp_increment_div);
 
 #endif
 
index 1f6e63b..ef830ad 100644 (file)
@@ -27,8 +27,6 @@
 #include "dscc_types.h"
 #include "rc_calc.h"
 
-double dsc_ceil(double num);
-
 static void copy_pps_fields(struct drm_dsc_config *to, const struct drm_dsc_config *from)
 {
        to->line_buf_depth           = from->line_buf_depth;
@@ -100,34 +98,13 @@ static void copy_rc_to_cfg(struct drm_dsc_config *dsc_cfg, const struct rc_param
 
 int dscc_compute_dsc_parameters(const struct drm_dsc_config *pps, struct dsc_parameters *dsc_params)
 {
-       enum colour_mode  mode = pps->convert_rgb ? CM_RGB :
-                                                       (pps->simple_422  ? CM_444 :
-                                                       (pps->native_422  ? CM_422 :
-                                                       pps->native_420  ? CM_420 : CM_444));
-       enum bits_per_comp bpc = (pps->bits_per_component == 8) ? BPC_8 :
-                                                       (pps->bits_per_component == 10) ? BPC_10 : BPC_12;
-       float            bpp = ((float) pps->bits_per_pixel / 16.0);
-       int              slice_width  = pps->slice_width;
-       int              slice_height = pps->slice_height;
        int              ret;
        struct rc_params rc;
        struct drm_dsc_config   dsc_cfg;
 
-       double d_bytes_per_pixel = dsc_ceil(bpp * slice_width / 8.0) / slice_width;
-
-       // TODO: Make sure the formula for calculating this is precise (ceiling vs. floor, and at what point they should be applied)
-       if (pps->native_422 || pps->native_420)
-               d_bytes_per_pixel /= 2;
-
-       dsc_params->bytes_per_pixel = (uint32_t)dsc_ceil(d_bytes_per_pixel * 0x10000000);
-
-       /* in native_422 or native_420 modes, the bits_per_pixel is double the target bpp
-        * (the latter is what calc_rc_params expects)
-        */
-       if (pps->native_422 || pps->native_420)
-               bpp /= 2.0;
+       dsc_params->bytes_per_pixel = calc_dsc_bytes_per_pixel(pps);
 
-       calc_rc_params(&rc, mode, bpc, bpp, slice_width, slice_height, pps->dsc_version_minor);
+       calc_rc_params(&rc, pps);
        dsc_params->pps = *pps;
        dsc_params->pps.initial_scale_value = 8 * rc.rc_model_size / (rc.rc_model_size - rc.initial_fullness_offset);
 
index 9431b48..bcfe34e 100644 (file)
@@ -843,7 +843,7 @@ static bool build_regamma(struct pwl_float_data_ex *rgb_regamma,
        pow_buffer_ptr = -1; // reset back to no optimize
        ret = true;
 release:
-       kfree(coeff);
+       kvfree(coeff);
        return ret;
 }
 
@@ -1777,7 +1777,7 @@ bool calculate_user_regamma_ramp(struct dc_transfer_func *output_tf,
 
        kfree(rgb_regamma);
 rgb_regamma_alloc_fail:
-       kvfree(rgb_user);
+       kfree(rgb_user);
 rgb_user_alloc_fail:
        return ret;
 }
index 85e5b1e..56923a9 100644 (file)
@@ -239,7 +239,7 @@ static void ci_initialize_power_tune_defaults(struct pp_hwmgr *hwmgr)
 
        switch (dev_id) {
        case 0x67BA:
-       case 0x66B1:
+       case 0x67B1:
                smu_data->power_tune_defaults = &defaults_hawaii_pro;
                break;
        case 0x67B8:
index cf80438..e464429 100644 (file)
@@ -61,13 +61,8 @@ int drm_i2c_encoder_init(struct drm_device *dev,
 
        request_module("%s%s", I2C_MODULE_PREFIX, info->type);
 
-       client = i2c_new_device(adap, info);
-       if (!client) {
-               err = -ENOMEM;
-               goto fail;
-       }
-
-       if (!client->dev.driver) {
+       client = i2c_new_client_device(adap, info);
+       if (!i2c_client_has_driver(client)) {
                err = -ENODEV;
                goto fail_unregister;
        }
@@ -84,7 +79,7 @@ int drm_i2c_encoder_init(struct drm_device *dev,
 
        err = encoder_drv->encoder_init(client, dev, encoder);
        if (err)
-               goto fail_unregister;
+               goto fail_module_put;
 
        if (info->platform_data)
                encoder->slave_funcs->set_config(&encoder->base,
@@ -92,10 +87,10 @@ int drm_i2c_encoder_init(struct drm_device *dev,
 
        return 0;
 
+fail_module_put:
+       module_put(module);
 fail_unregister:
        i2c_unregister_device(client);
-       module_put(module);
-fail:
        return err;
 }
 EXPORT_SYMBOL(drm_i2c_encoder_init);
index aa22465..0575a1e 100644 (file)
@@ -2579,14 +2579,14 @@ static void icl_ddi_vswing_sequence(struct intel_encoder *encoder,
 
 static void
 tgl_dkl_phy_ddi_vswing_sequence(struct intel_encoder *encoder, int link_clock,
-                               u32 level)
+                               u32 level, enum intel_output_type type)
 {
        struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
        enum tc_port tc_port = intel_port_to_tc(dev_priv, encoder->port);
        const struct tgl_dkl_phy_ddi_buf_trans *ddi_translations;
        u32 n_entries, val, ln, dpcnt_mask, dpcnt_val;
 
-       if (encoder->type == INTEL_OUTPUT_HDMI) {
+       if (type == INTEL_OUTPUT_HDMI) {
                n_entries = ARRAY_SIZE(tgl_dkl_phy_hdmi_ddi_trans);
                ddi_translations = tgl_dkl_phy_hdmi_ddi_trans;
        } else {
@@ -2638,7 +2638,7 @@ static void tgl_ddi_vswing_sequence(struct intel_encoder *encoder,
        if (intel_phy_is_combo(dev_priv, phy))
                icl_combo_phy_ddi_vswing_sequence(encoder, level, type);
        else
-               tgl_dkl_phy_ddi_vswing_sequence(encoder, link_clock, level);
+               tgl_dkl_phy_ddi_vswing_sequence(encoder, link_clock, level, type);
 }
 
 static u32 translate_signal_level(struct intel_dp *intel_dp, int signal_levels)
@@ -2987,7 +2987,7 @@ icl_program_mg_dp_mode(struct intel_digital_port *intel_dig_port,
                ln1 = intel_de_read(dev_priv, MG_DP_MODE(1, tc_port));
        }
 
-       ln0 &= ~(MG_DP_MODE_CFG_DP_X1_MODE | MG_DP_MODE_CFG_DP_X1_MODE);
+       ln0 &= ~(MG_DP_MODE_CFG_DP_X1_MODE | MG_DP_MODE_CFG_DP_X2_MODE);
        ln1 &= ~(MG_DP_MODE_CFG_DP_X1_MODE | MG_DP_MODE_CFG_DP_X2_MODE);
 
        /* DPPATC */
@@ -3472,7 +3472,9 @@ static void intel_ddi_post_disable_dp(struct intel_atomic_state *state,
                                          INTEL_OUTPUT_DP_MST);
        enum phy phy = intel_port_to_phy(dev_priv, encoder->port);
 
-       intel_dp_set_infoframes(encoder, false, old_crtc_state, old_conn_state);
+       if (!is_mst)
+               intel_dp_set_infoframes(encoder, false,
+                                       old_crtc_state, old_conn_state);
 
        /*
         * Power down sink before disabling the port, otherwise we end
index d18b406..f29e51c 100644 (file)
@@ -397,6 +397,14 @@ static void intel_mst_post_disable_dp(struct intel_atomic_state *state,
         */
        drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port,
                                     false);
+
+       /*
+        * BSpec 4287: disable DIP after the transcoder is disabled and before
+        * the transcoder clock select is set to none.
+        */
+       if (last_mst_stream)
+               intel_dp_set_infoframes(&intel_dig_port->base, false,
+                                       old_crtc_state, NULL);
        /*
         * From TGL spec: "If multi-stream slave transcoder: Configure
         * Transcoder Clock Select to direct no clock to the transcoder"
index da5b610..8691eb6 100644 (file)
@@ -646,7 +646,7 @@ static int engine_setup_common(struct intel_engine_cs *engine)
 struct measure_breadcrumb {
        struct i915_request rq;
        struct intel_ring ring;
-       u32 cs[1024];
+       u32 cs[2048];
 };
 
 static int measure_breadcrumb_dw(struct intel_context *ce)
@@ -668,6 +668,8 @@ static int measure_breadcrumb_dw(struct intel_context *ce)
 
        frame->ring.vaddr = frame->cs;
        frame->ring.size = sizeof(frame->cs);
+       frame->ring.wrap =
+               BITS_PER_TYPE(frame->ring.size) - ilog2(frame->ring.size);
        frame->ring.effective_size = frame->ring.size;
        intel_ring_update_space(&frame->ring);
        frame->rq.ring = &frame->ring;
index 87e6c5b..7c3d8ef 100644 (file)
@@ -1134,6 +1134,13 @@ __unwind_incomplete_requests(struct intel_engine_cs *engine)
                        list_move(&rq->sched.link, pl);
                        set_bit(I915_FENCE_FLAG_PQUEUE, &rq->fence.flags);
 
+                       /* Check in case we rollback so far we wrap [size/2] */
+                       if (intel_ring_direction(rq->ring,
+                                                intel_ring_wrap(rq->ring,
+                                                                rq->tail),
+                                                rq->ring->tail) > 0)
+                               rq->context->lrc.desc |= CTX_DESC_FORCE_RESTORE;
+
                        active = rq;
                } else {
                        struct intel_engine_cs *owner = rq->context->engine;
@@ -1498,8 +1505,9 @@ static u64 execlists_update_context(struct i915_request *rq)
         * HW has a tendency to ignore us rewinding the TAIL to the end of
         * an earlier request.
         */
+       GEM_BUG_ON(ce->lrc_reg_state[CTX_RING_TAIL] != rq->ring->tail);
+       prev = rq->ring->tail;
        tail = intel_ring_set_tail(rq->ring, rq->tail);
-       prev = ce->lrc_reg_state[CTX_RING_TAIL];
        if (unlikely(intel_ring_direction(rq->ring, tail, prev) <= 0))
                desc |= CTX_DESC_FORCE_RESTORE;
        ce->lrc_reg_state[CTX_RING_TAIL] = tail;
@@ -1895,7 +1903,8 @@ static void defer_active(struct intel_engine_cs *engine)
 
 static bool
 need_timeslice(const struct intel_engine_cs *engine,
-              const struct i915_request *rq)
+              const struct i915_request *rq,
+              const struct rb_node *rb)
 {
        int hint;
 
@@ -1903,9 +1912,28 @@ need_timeslice(const struct intel_engine_cs *engine,
                return false;
 
        hint = engine->execlists.queue_priority_hint;
+
+       if (rb) {
+               const struct virtual_engine *ve =
+                       rb_entry(rb, typeof(*ve), nodes[engine->id].rb);
+               const struct intel_engine_cs *inflight =
+                       intel_context_inflight(&ve->context);
+
+               if (!inflight || inflight == engine) {
+                       struct i915_request *next;
+
+                       rcu_read_lock();
+                       next = READ_ONCE(ve->request);
+                       if (next)
+                               hint = max(hint, rq_prio(next));
+                       rcu_read_unlock();
+               }
+       }
+
        if (!list_is_last(&rq->sched.link, &engine->active.requests))
                hint = max(hint, rq_prio(list_next_entry(rq, sched.link)));
 
+       GEM_BUG_ON(hint >= I915_PRIORITY_UNPREEMPTABLE);
        return hint >= effective_prio(rq);
 }
 
@@ -1977,10 +2005,9 @@ static void set_timeslice(struct intel_engine_cs *engine)
        set_timer_ms(&engine->execlists.timer, duration);
 }
 
-static void start_timeslice(struct intel_engine_cs *engine)
+static void start_timeslice(struct intel_engine_cs *engine, int prio)
 {
        struct intel_engine_execlists *execlists = &engine->execlists;
-       const int prio = queue_prio(execlists);
        unsigned long duration;
 
        if (!intel_engine_has_timeslices(engine))
@@ -2140,7 +2167,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
                        __unwind_incomplete_requests(engine);
 
                        last = NULL;
-               } else if (need_timeslice(engine, last) &&
+               } else if (need_timeslice(engine, last, rb) &&
                           timeslice_expired(execlists, last)) {
                        if (i915_request_completed(last)) {
                                tasklet_hi_schedule(&execlists->tasklet);
@@ -2188,7 +2215,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
                                 * Even if ELSP[1] is occupied and not worthy
                                 * of timeslices, our queue might be.
                                 */
-                               start_timeslice(engine);
+                               start_timeslice(engine, queue_prio(execlists));
                                return;
                        }
                }
@@ -2223,7 +2250,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
 
                        if (last && !can_merge_rq(last, rq)) {
                                spin_unlock(&ve->base.active.lock);
-                               start_timeslice(engine);
+                               start_timeslice(engine, rq_prio(rq));
                                return; /* leave this for another sibling */
                        }
 
@@ -4739,6 +4766,14 @@ static int gen12_emit_flush(struct i915_request *request, u32 mode)
        return 0;
 }
 
+static void assert_request_valid(struct i915_request *rq)
+{
+       struct intel_ring *ring __maybe_unused = rq->ring;
+
+       /* Can we unwind this request without appearing to go forwards? */
+       GEM_BUG_ON(intel_ring_direction(ring, rq->wa_tail, rq->head) <= 0);
+}
+
 /*
  * Reserve space for 2 NOOPs at the end of each request to be
  * used as a workaround for not being allowed to do lite
@@ -4751,6 +4786,9 @@ static u32 *gen8_emit_wa_tail(struct i915_request *request, u32 *cs)
        *cs++ = MI_NOOP;
        request->wa_tail = intel_ring_offset(request, cs);
 
+       /* Check that entire request is less than half the ring */
+       assert_request_valid(request);
+
        return cs;
 }
 
index 8cda1b7..bdb3241 100644 (file)
@@ -315,3 +315,7 @@ int intel_ring_cacheline_align(struct i915_request *rq)
        GEM_BUG_ON(rq->ring->emit & (CACHELINE_BYTES - 1));
        return 0;
 }
+
+#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
+#include "selftest_ring.c"
+#endif
index 90a2b9e..85d2bef 100644 (file)
@@ -178,6 +178,12 @@ wa_write_or(struct i915_wa_list *wal, i915_reg_t reg, u32 set)
        wa_write_masked_or(wal, reg, set, set);
 }
 
+static void
+wa_write_clr(struct i915_wa_list *wal, i915_reg_t reg, u32 clr)
+{
+       wa_write_masked_or(wal, reg, clr, 0);
+}
+
 static void
 wa_masked_en(struct i915_wa_list *wal, i915_reg_t reg, u32 val)
 {
@@ -686,6 +692,227 @@ int intel_engine_emit_ctx_wa(struct i915_request *rq)
        return 0;
 }
 
+static void
+gen4_gt_workarounds_init(struct drm_i915_private *i915,
+                        struct i915_wa_list *wal)
+{
+       /* WaDisable_RenderCache_OperationalFlush:gen4,ilk */
+       wa_masked_dis(wal, CACHE_MODE_0, RC_OP_FLUSH_ENABLE);
+}
+
+static void
+g4x_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
+{
+       gen4_gt_workarounds_init(i915, wal);
+
+       /* WaDisableRenderCachePipelinedFlush:g4x,ilk */
+       wa_masked_en(wal, CACHE_MODE_0, CM0_PIPELINED_RENDER_FLUSH_DISABLE);
+}
+
+static void
+ilk_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
+{
+       g4x_gt_workarounds_init(i915, wal);
+
+       wa_masked_en(wal, _3D_CHICKEN2, _3D_CHICKEN2_WM_READ_PIPELINED);
+}
+
+static void
+snb_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
+{
+       /* WaDisableHiZPlanesWhenMSAAEnabled:snb */
+       wa_masked_en(wal,
+                    _3D_CHICKEN,
+                    _3D_CHICKEN_HIZ_PLANE_DISABLE_MSAA_4X_SNB);
+
+       /* WaDisable_RenderCache_OperationalFlush:snb */
+       wa_masked_dis(wal, CACHE_MODE_0, RC_OP_FLUSH_ENABLE);
+
+       /*
+        * BSpec recommends 8x4 when MSAA is used,
+        * however in practice 16x4 seems fastest.
+        *
+        * Note that PS/WM thread counts depend on the WIZ hashing
+        * disable bit, which we don't touch here, but it's good
+        * to keep in mind (see 3DSTATE_PS and 3DSTATE_WM).
+        */
+       wa_add(wal,
+              GEN6_GT_MODE, 0,
+              _MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4),
+              GEN6_WIZ_HASHING_16x4);
+
+       wa_masked_dis(wal, CACHE_MODE_0, CM0_STC_EVICT_DISABLE_LRA_SNB);
+
+       wa_masked_en(wal,
+                    _3D_CHICKEN3,
+                    /* WaStripsFansDisableFastClipPerformanceFix:snb */
+                    _3D_CHICKEN3_SF_DISABLE_FASTCLIP_CULL |
+                    /*
+                     * Bspec says:
+                     * "This bit must be set if 3DSTATE_CLIP clip mode is set
+                     * to normal and 3DSTATE_SF number of SF output attributes
+                     * is more than 16."
+                     */
+                  _3D_CHICKEN3_SF_DISABLE_PIPELINED_ATTR_FETCH);
+}
+
+static void
+ivb_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
+{
+       /* WaDisableEarlyCull:ivb */
+       wa_masked_en(wal, _3D_CHICKEN3, _3D_CHICKEN_SF_DISABLE_OBJEND_CULL);
+
+       /* WaDisablePSDDualDispatchEnable:ivb */
+       if (IS_IVB_GT1(i915))
+               wa_masked_en(wal,
+                            GEN7_HALF_SLICE_CHICKEN1,
+                            GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE);
+
+       /* WaDisable_RenderCache_OperationalFlush:ivb */
+       wa_masked_dis(wal, CACHE_MODE_0_GEN7, RC_OP_FLUSH_ENABLE);
+
+       /* Apply the WaDisableRHWOOptimizationForRenderHang:ivb workaround. */
+       wa_masked_dis(wal,
+                     GEN7_COMMON_SLICE_CHICKEN1,
+                     GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC);
+
+       /* WaApplyL3ControlAndL3ChickenMode:ivb */
+       wa_write(wal, GEN7_L3CNTLREG1, GEN7_WA_FOR_GEN7_L3_CONTROL);
+       wa_write(wal, GEN7_L3_CHICKEN_MODE_REGISTER, GEN7_WA_L3_CHICKEN_MODE);
+
+       /* WaForceL3Serialization:ivb */
+       wa_write_clr(wal, GEN7_L3SQCREG4, L3SQ_URB_READ_CAM_MATCH_DISABLE);
+
+       /*
+        * WaVSThreadDispatchOverride:ivb,vlv
+        *
+        * This actually overrides the dispatch
+        * mode for all thread types.
+        */
+       wa_write_masked_or(wal, GEN7_FF_THREAD_MODE,
+                          GEN7_FF_SCHED_MASK,
+                          GEN7_FF_TS_SCHED_HW |
+                          GEN7_FF_VS_SCHED_HW |
+                          GEN7_FF_DS_SCHED_HW);
+
+       if (0) { /* causes HiZ corruption on ivb:gt1 */
+               /* enable HiZ Raw Stall Optimization */
+               wa_masked_dis(wal, CACHE_MODE_0_GEN7, HIZ_RAW_STALL_OPT_DISABLE);
+       }
+
+       /* WaDisable4x2SubspanOptimization:ivb */
+       wa_masked_en(wal, CACHE_MODE_1, PIXEL_SUBSPAN_COLLECT_OPT_DISABLE);
+
+       /*
+        * BSpec recommends 8x4 when MSAA is used,
+        * however in practice 16x4 seems fastest.
+        *
+        * Note that PS/WM thread counts depend on the WIZ hashing
+        * disable bit, which we don't touch here, but it's good
+        * to keep in mind (see 3DSTATE_PS and 3DSTATE_WM).
+        */
+       wa_add(wal, GEN7_GT_MODE, 0,
+              _MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4),
+              GEN6_WIZ_HASHING_16x4);
+}
+
+static void
+vlv_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
+{
+       /* WaDisableEarlyCull:vlv */
+       wa_masked_en(wal, _3D_CHICKEN3, _3D_CHICKEN_SF_DISABLE_OBJEND_CULL);
+
+       /* WaPsdDispatchEnable:vlv */
+       /* WaDisablePSDDualDispatchEnable:vlv */
+       wa_masked_en(wal,
+                    GEN7_HALF_SLICE_CHICKEN1,
+                    GEN7_MAX_PS_THREAD_DEP |
+                    GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE);
+
+       /* WaDisable_RenderCache_OperationalFlush:vlv */
+       wa_masked_dis(wal, CACHE_MODE_0_GEN7, RC_OP_FLUSH_ENABLE);
+
+       /* WaForceL3Serialization:vlv */
+       wa_write_clr(wal, GEN7_L3SQCREG4, L3SQ_URB_READ_CAM_MATCH_DISABLE);
+
+       /*
+        * WaVSThreadDispatchOverride:ivb,vlv
+        *
+        * This actually overrides the dispatch
+        * mode for all thread types.
+        */
+       wa_write_masked_or(wal,
+                          GEN7_FF_THREAD_MODE,
+                          GEN7_FF_SCHED_MASK,
+                          GEN7_FF_TS_SCHED_HW |
+                          GEN7_FF_VS_SCHED_HW |
+                          GEN7_FF_DS_SCHED_HW);
+
+       /*
+        * BSpec says this must be set, even though
+        * WaDisable4x2SubspanOptimization isn't listed for VLV.
+        */
+       wa_masked_en(wal, CACHE_MODE_1, PIXEL_SUBSPAN_COLLECT_OPT_DISABLE);
+
+       /*
+        * BSpec recommends 8x4 when MSAA is used,
+        * however in practice 16x4 seems fastest.
+        *
+        * Note that PS/WM thread counts depend on the WIZ hashing
+        * disable bit, which we don't touch here, but it's good
+        * to keep in mind (see 3DSTATE_PS and 3DSTATE_WM).
+        */
+       wa_add(wal, GEN7_GT_MODE, 0,
+              _MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4),
+              GEN6_WIZ_HASHING_16x4);
+
+       /*
+        * WaIncreaseL3CreditsForVLVB0:vlv
+        * This is the hardware default actually.
+        */
+       wa_write(wal, GEN7_L3SQCREG1, VLV_B0_WA_L3SQCREG1_VALUE);
+}
+
+static void
+hsw_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
+{
+       /* L3 caching of data atomics doesn't work -- disable it. */
+       wa_write(wal, HSW_SCRATCH1, HSW_SCRATCH1_L3_DATA_ATOMICS_DISABLE);
+
+       wa_add(wal,
+              HSW_ROW_CHICKEN3, 0,
+              _MASKED_BIT_ENABLE(HSW_ROW_CHICKEN3_L3_GLOBAL_ATOMICS_DISABLE),
+               0 /* XXX does this reg exist? */);
+
+       /* WaVSRefCountFullforceMissDisable:hsw */
+       wa_write_clr(wal, GEN7_FF_THREAD_MODE, GEN7_FF_VS_REF_CNT_FFME);
+
+       wa_masked_dis(wal,
+                     CACHE_MODE_0_GEN7,
+                     /* WaDisable_RenderCache_OperationalFlush:hsw */
+                     RC_OP_FLUSH_ENABLE |
+                     /* enable HiZ Raw Stall Optimization */
+                     HIZ_RAW_STALL_OPT_DISABLE);
+
+       /* WaDisable4x2SubspanOptimization:hsw */
+       wa_masked_en(wal, CACHE_MODE_1, PIXEL_SUBSPAN_COLLECT_OPT_DISABLE);
+
+       /*
+        * BSpec recommends 8x4 when MSAA is used,
+        * however in practice 16x4 seems fastest.
+        *
+        * Note that PS/WM thread counts depend on the WIZ hashing
+        * disable bit, which we don't touch here, but it's good
+        * to keep in mind (see 3DSTATE_PS and 3DSTATE_WM).
+        */
+       wa_add(wal, GEN7_GT_MODE, 0,
+              _MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4),
+              GEN6_WIZ_HASHING_16x4);
+
+       /* WaSampleCChickenBitEnable:hsw */
+       wa_masked_en(wal, HALF_SLICE_CHICKEN3, HSW_SAMPLE_C_PERFORMANCE);
+}
+
 static void
 gen9_gt_workarounds_init(struct drm_i915_private *i915, struct i915_wa_list *wal)
 {
@@ -963,6 +1190,20 @@ gt_init_workarounds(struct drm_i915_private *i915, struct i915_wa_list *wal)
                bxt_gt_workarounds_init(i915, wal);
        else if (IS_SKYLAKE(i915))
                skl_gt_workarounds_init(i915, wal);
+       else if (IS_HASWELL(i915))
+               hsw_gt_workarounds_init(i915, wal);
+       else if (IS_VALLEYVIEW(i915))
+               vlv_gt_workarounds_init(i915, wal);
+       else if (IS_IVYBRIDGE(i915))
+               ivb_gt_workarounds_init(i915, wal);
+       else if (IS_GEN(i915, 6))
+               snb_gt_workarounds_init(i915, wal);
+       else if (IS_GEN(i915, 5))
+               ilk_gt_workarounds_init(i915, wal);
+       else if (IS_G4X(i915))
+               g4x_gt_workarounds_init(i915, wal);
+       else if (IS_GEN(i915, 4))
+               gen4_gt_workarounds_init(i915, wal);
        else if (INTEL_GEN(i915) <= 8)
                return;
        else
index 2b2efff..4aa4cc9 100644 (file)
@@ -310,22 +310,20 @@ static bool wait_until_running(struct hang *h, struct i915_request *rq)
                          1000));
 }
 
-static void engine_heartbeat_disable(struct intel_engine_cs *engine,
-                                    unsigned long *saved)
+static void engine_heartbeat_disable(struct intel_engine_cs *engine)
 {
-       *saved = engine->props.heartbeat_interval_ms;
        engine->props.heartbeat_interval_ms = 0;
 
        intel_engine_pm_get(engine);
        intel_engine_park_heartbeat(engine);
 }
 
-static void engine_heartbeat_enable(struct intel_engine_cs *engine,
-                                   unsigned long saved)
+static void engine_heartbeat_enable(struct intel_engine_cs *engine)
 {
        intel_engine_pm_put(engine);
 
-       engine->props.heartbeat_interval_ms = saved;
+       engine->props.heartbeat_interval_ms =
+               engine->defaults.heartbeat_interval_ms;
 }
 
 static int igt_hang_sanitycheck(void *arg)
@@ -473,7 +471,6 @@ static int igt_reset_nop_engine(void *arg)
        for_each_engine(engine, gt, id) {
                unsigned int reset_count, reset_engine_count, count;
                struct intel_context *ce;
-               unsigned long heartbeat;
                IGT_TIMEOUT(end_time);
                int err;
 
@@ -485,7 +482,7 @@ static int igt_reset_nop_engine(void *arg)
                reset_engine_count = i915_reset_engine_count(global, engine);
                count = 0;
 
-               engine_heartbeat_disable(engine, &heartbeat);
+               engine_heartbeat_disable(engine);
                set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
                do {
                        int i;
@@ -529,7 +526,7 @@ static int igt_reset_nop_engine(void *arg)
                        }
                } while (time_before(jiffies, end_time));
                clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
-               engine_heartbeat_enable(engine, heartbeat);
+               engine_heartbeat_enable(engine);
 
                pr_info("%s(%s): %d resets\n", __func__, engine->name, count);
 
@@ -564,7 +561,6 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
 
        for_each_engine(engine, gt, id) {
                unsigned int reset_count, reset_engine_count;
-               unsigned long heartbeat;
                IGT_TIMEOUT(end_time);
 
                if (active && !intel_engine_can_store_dword(engine))
@@ -580,7 +576,7 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
                reset_count = i915_reset_count(global);
                reset_engine_count = i915_reset_engine_count(global, engine);
 
-               engine_heartbeat_disable(engine, &heartbeat);
+               engine_heartbeat_disable(engine);
                set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
                do {
                        if (active) {
@@ -632,7 +628,7 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
                        }
                } while (time_before(jiffies, end_time));
                clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
-               engine_heartbeat_enable(engine, heartbeat);
+               engine_heartbeat_enable(engine);
 
                if (err)
                        break;
@@ -789,7 +785,6 @@ static int __igt_reset_engines(struct intel_gt *gt,
                struct active_engine threads[I915_NUM_ENGINES] = {};
                unsigned long device = i915_reset_count(global);
                unsigned long count = 0, reported;
-               unsigned long heartbeat;
                IGT_TIMEOUT(end_time);
 
                if (flags & TEST_ACTIVE &&
@@ -832,7 +827,7 @@ static int __igt_reset_engines(struct intel_gt *gt,
 
                yield(); /* start all threads before we begin */
 
-               engine_heartbeat_disable(engine, &heartbeat);
+               engine_heartbeat_disable(engine);
                set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
                do {
                        struct i915_request *rq = NULL;
@@ -906,7 +901,7 @@ static int __igt_reset_engines(struct intel_gt *gt,
                        }
                } while (time_before(jiffies, end_time));
                clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
-               engine_heartbeat_enable(engine, heartbeat);
+               engine_heartbeat_enable(engine);
 
                pr_info("i915_reset_engine(%s:%s): %lu resets\n",
                        engine->name, test_name, count);
index 824f99c..924bc01 100644 (file)
@@ -51,22 +51,20 @@ static struct i915_vma *create_scratch(struct intel_gt *gt)
        return vma;
 }
 
-static void engine_heartbeat_disable(struct intel_engine_cs *engine,
-                                    unsigned long *saved)
+static void engine_heartbeat_disable(struct intel_engine_cs *engine)
 {
-       *saved = engine->props.heartbeat_interval_ms;
        engine->props.heartbeat_interval_ms = 0;
 
        intel_engine_pm_get(engine);
        intel_engine_park_heartbeat(engine);
 }
 
-static void engine_heartbeat_enable(struct intel_engine_cs *engine,
-                                   unsigned long saved)
+static void engine_heartbeat_enable(struct intel_engine_cs *engine)
 {
        intel_engine_pm_put(engine);
 
-       engine->props.heartbeat_interval_ms = saved;
+       engine->props.heartbeat_interval_ms =
+               engine->defaults.heartbeat_interval_ms;
 }
 
 static bool is_active(struct i915_request *rq)
@@ -224,7 +222,6 @@ static int live_unlite_restore(struct intel_gt *gt, int prio)
                struct intel_context *ce[2] = {};
                struct i915_request *rq[2];
                struct igt_live_test t;
-               unsigned long saved;
                int n;
 
                if (prio && !intel_engine_has_preemption(engine))
@@ -237,7 +234,7 @@ static int live_unlite_restore(struct intel_gt *gt, int prio)
                        err = -EIO;
                        break;
                }
-               engine_heartbeat_disable(engine, &saved);
+               engine_heartbeat_disable(engine);
 
                for (n = 0; n < ARRAY_SIZE(ce); n++) {
                        struct intel_context *tmp;
@@ -345,7 +342,7 @@ err_ce:
                        intel_context_put(ce[n]);
                }
 
-               engine_heartbeat_enable(engine, saved);
+               engine_heartbeat_enable(engine);
                if (igt_live_test_end(&t))
                        err = -EIO;
                if (err)
@@ -466,7 +463,6 @@ static int live_hold_reset(void *arg)
 
        for_each_engine(engine, gt, id) {
                struct intel_context *ce;
-               unsigned long heartbeat;
                struct i915_request *rq;
 
                ce = intel_context_create(engine);
@@ -475,7 +471,7 @@ static int live_hold_reset(void *arg)
                        break;
                }
 
-               engine_heartbeat_disable(engine, &heartbeat);
+               engine_heartbeat_disable(engine);
 
                rq = igt_spinner_create_request(&spin, ce, MI_ARB_CHECK);
                if (IS_ERR(rq)) {
@@ -535,7 +531,7 @@ static int live_hold_reset(void *arg)
                i915_request_put(rq);
 
 out:
-               engine_heartbeat_enable(engine, heartbeat);
+               engine_heartbeat_enable(engine);
                intel_context_put(ce);
                if (err)
                        break;
@@ -580,10 +576,9 @@ static int live_error_interrupt(void *arg)
 
        for_each_engine(engine, gt, id) {
                const struct error_phase *p;
-               unsigned long heartbeat;
                int err = 0;
 
-               engine_heartbeat_disable(engine, &heartbeat);
+               engine_heartbeat_disable(engine);
 
                for (p = phases; p->error[0] != GOOD; p++) {
                        struct i915_request *client[ARRAY_SIZE(phases->error)];
@@ -682,7 +677,7 @@ out:
                        }
                }
 
-               engine_heartbeat_enable(engine, heartbeat);
+               engine_heartbeat_enable(engine);
                if (err) {
                        intel_gt_set_wedged(gt);
                        return err;
@@ -828,7 +823,7 @@ slice_semaphore_queue(struct intel_engine_cs *outer,
                }
        }
 
-       err = release_queue(outer, vma, n, INT_MAX);
+       err = release_queue(outer, vma, n, I915_PRIORITY_BARRIER);
        if (err)
                goto out;
 
@@ -895,16 +890,14 @@ static int live_timeslice_preempt(void *arg)
                enum intel_engine_id id;
 
                for_each_engine(engine, gt, id) {
-                       unsigned long saved;
-
                        if (!intel_engine_has_preemption(engine))
                                continue;
 
                        memset(vaddr, 0, PAGE_SIZE);
 
-                       engine_heartbeat_disable(engine, &saved);
+                       engine_heartbeat_disable(engine);
                        err = slice_semaphore_queue(engine, vma, count);
-                       engine_heartbeat_enable(engine, saved);
+                       engine_heartbeat_enable(engine);
                        if (err)
                                goto err_pin;
 
@@ -1009,7 +1002,6 @@ static int live_timeslice_rewind(void *arg)
                enum { X = 1, Z, Y };
                struct i915_request *rq[3] = {};
                struct intel_context *ce;
-               unsigned long heartbeat;
                unsigned long timeslice;
                int i, err = 0;
                u32 *slot;
@@ -1028,7 +1020,7 @@ static int live_timeslice_rewind(void *arg)
                 * Expect execution/evaluation order XZY
                 */
 
-               engine_heartbeat_disable(engine, &heartbeat);
+               engine_heartbeat_disable(engine);
                timeslice = xchg(&engine->props.timeslice_duration_ms, 1);
 
                slot = memset32(engine->status_page.addr + 1000, 0, 4);
@@ -1122,7 +1114,7 @@ err:
                wmb();
 
                engine->props.timeslice_duration_ms = timeslice;
-               engine_heartbeat_enable(engine, heartbeat);
+               engine_heartbeat_enable(engine);
                for (i = 0; i < 3; i++)
                        i915_request_put(rq[i]);
                if (igt_flush_test(gt->i915))
@@ -1202,12 +1194,11 @@ static int live_timeslice_queue(void *arg)
                        .priority = I915_USER_PRIORITY(I915_PRIORITY_MAX),
                };
                struct i915_request *rq, *nop;
-               unsigned long saved;
 
                if (!intel_engine_has_preemption(engine))
                        continue;
 
-               engine_heartbeat_disable(engine, &saved);
+               engine_heartbeat_disable(engine);
                memset(vaddr, 0, PAGE_SIZE);
 
                /* ELSP[0]: semaphore wait */
@@ -1284,7 +1275,7 @@ static int live_timeslice_queue(void *arg)
 err_rq:
                i915_request_put(rq);
 err_heartbeat:
-               engine_heartbeat_enable(engine, saved);
+               engine_heartbeat_enable(engine);
                if (err)
                        break;
        }
@@ -1298,6 +1289,121 @@ err_obj:
        return err;
 }
 
+static int live_timeslice_nopreempt(void *arg)
+{
+       struct intel_gt *gt = arg;
+       struct intel_engine_cs *engine;
+       enum intel_engine_id id;
+       struct igt_spinner spin;
+       int err = 0;
+
+       /*
+        * We should not timeslice into a request that is marked with
+        * I915_REQUEST_NOPREEMPT.
+        */
+       if (!IS_ACTIVE(CONFIG_DRM_I915_TIMESLICE_DURATION))
+               return 0;
+
+       if (igt_spinner_init(&spin, gt))
+               return -ENOMEM;
+
+       for_each_engine(engine, gt, id) {
+               struct intel_context *ce;
+               struct i915_request *rq;
+               unsigned long timeslice;
+
+               if (!intel_engine_has_preemption(engine))
+                       continue;
+
+               ce = intel_context_create(engine);
+               if (IS_ERR(ce)) {
+                       err = PTR_ERR(ce);
+                       break;
+               }
+
+               engine_heartbeat_disable(engine);
+               timeslice = xchg(&engine->props.timeslice_duration_ms, 1);
+
+               /* Create an unpreemptible spinner */
+
+               rq = igt_spinner_create_request(&spin, ce, MI_ARB_CHECK);
+               intel_context_put(ce);
+               if (IS_ERR(rq)) {
+                       err = PTR_ERR(rq);
+                       goto out_heartbeat;
+               }
+
+               i915_request_get(rq);
+               i915_request_add(rq);
+
+               if (!igt_wait_for_spinner(&spin, rq)) {
+                       i915_request_put(rq);
+                       err = -ETIME;
+                       goto out_spin;
+               }
+
+               set_bit(I915_FENCE_FLAG_NOPREEMPT, &rq->fence.flags);
+               i915_request_put(rq);
+
+               /* Followed by a maximum priority barrier (heartbeat) */
+
+               ce = intel_context_create(engine);
+               if (IS_ERR(ce)) {
+                       err = PTR_ERR(rq);
+                       goto out_spin;
+               }
+
+               rq = intel_context_create_request(ce);
+               intel_context_put(ce);
+               if (IS_ERR(rq)) {
+                       err = PTR_ERR(rq);
+                       goto out_spin;
+               }
+
+               rq->sched.attr.priority = I915_PRIORITY_BARRIER;
+               i915_request_get(rq);
+               i915_request_add(rq);
+
+               /*
+                * Wait until the barrier is in ELSP, and we know timeslicing
+                * will have been activated.
+                */
+               if (wait_for_submit(engine, rq, HZ / 2)) {
+                       i915_request_put(rq);
+                       err = -ETIME;
+                       goto out_spin;
+               }
+
+               /*
+                * Since the ELSP[0] request is unpreemptible, it should not
+                * allow the maximum priority barrier through. Wait long
+                * enough to see if it is timesliced in by mistake.
+                */
+               if (i915_request_wait(rq, 0, timeslice_threshold(engine)) >= 0) {
+                       pr_err("%s: I915_PRIORITY_BARRIER request completed, bypassing no-preempt request\n",
+                              engine->name);
+                       err = -EINVAL;
+               }
+               i915_request_put(rq);
+
+out_spin:
+               igt_spinner_end(&spin);
+out_heartbeat:
+               xchg(&engine->props.timeslice_duration_ms, timeslice);
+               engine_heartbeat_enable(engine);
+               if (err)
+                       break;
+
+               if (igt_flush_test(gt->i915)) {
+                       err = -EIO;
+                       break;
+               }
+       }
+
+       igt_spinner_fini(&spin);
+       return err;
+}
+
 static int live_busywait_preempt(void *arg)
 {
        struct intel_gt *gt = arg;
@@ -4153,7 +4259,6 @@ static int reset_virtual_engine(struct intel_gt *gt,
 {
        struct intel_engine_cs *engine;
        struct intel_context *ve;
-       unsigned long *heartbeat;
        struct igt_spinner spin;
        struct i915_request *rq;
        unsigned int n;
@@ -4165,15 +4270,9 @@ static int reset_virtual_engine(struct intel_gt *gt,
         * descendents are not executed while the capture is in progress.
         */
 
-       heartbeat = kmalloc_array(nsibling, sizeof(*heartbeat), GFP_KERNEL);
-       if (!heartbeat)
+       if (igt_spinner_init(&spin, gt))
                return -ENOMEM;
 
-       if (igt_spinner_init(&spin, gt)) {
-               err = -ENOMEM;
-               goto out_free;
-       }
-
        ve = intel_execlists_create_virtual(siblings, nsibling);
        if (IS_ERR(ve)) {
                err = PTR_ERR(ve);
@@ -4181,7 +4280,7 @@ static int reset_virtual_engine(struct intel_gt *gt,
        }
 
        for (n = 0; n < nsibling; n++)
-               engine_heartbeat_disable(siblings[n], &heartbeat[n]);
+               engine_heartbeat_disable(siblings[n]);
 
        rq = igt_spinner_create_request(&spin, ve, MI_ARB_CHECK);
        if (IS_ERR(rq)) {
@@ -4252,13 +4351,11 @@ out_rq:
        i915_request_put(rq);
 out_heartbeat:
        for (n = 0; n < nsibling; n++)
-               engine_heartbeat_enable(siblings[n], heartbeat[n]);
+               engine_heartbeat_enable(siblings[n]);
 
        intel_context_put(ve);
 out_spin:
        igt_spinner_fini(&spin);
-out_free:
-       kfree(heartbeat);
        return err;
 }
 
@@ -4314,6 +4411,7 @@ int intel_execlists_live_selftests(struct drm_i915_private *i915)
                SUBTEST(live_timeslice_preempt),
                SUBTEST(live_timeslice_rewind),
                SUBTEST(live_timeslice_queue),
+               SUBTEST(live_timeslice_nopreempt),
                SUBTEST(live_busywait_preempt),
                SUBTEST(live_preempt),
                SUBTEST(live_late_preempt),
@@ -4932,9 +5030,7 @@ static int live_lrc_gpr(void *arg)
                return PTR_ERR(scratch);
 
        for_each_engine(engine, gt, id) {
-               unsigned long heartbeat;
-
-               engine_heartbeat_disable(engine, &heartbeat);
+               engine_heartbeat_disable(engine);
 
                err = __live_lrc_gpr(engine, scratch, false);
                if (err)
@@ -4945,7 +5041,7 @@ static int live_lrc_gpr(void *arg)
                        goto err;
 
 err:
-               engine_heartbeat_enable(engine, heartbeat);
+               engine_heartbeat_enable(engine);
                if (igt_flush_test(gt->i915))
                        err = -EIO;
                if (err)
@@ -5092,10 +5188,9 @@ static int live_lrc_timestamp(void *arg)
         */
 
        for_each_engine(data.engine, gt, id) {
-               unsigned long heartbeat;
                int i, err = 0;
 
-               engine_heartbeat_disable(data.engine, &heartbeat);
+               engine_heartbeat_disable(data.engine);
 
                for (i = 0; i < ARRAY_SIZE(data.ce); i++) {
                        struct intel_context *tmp;
@@ -5128,7 +5223,7 @@ static int live_lrc_timestamp(void *arg)
                }
 
 err:
-               engine_heartbeat_enable(data.engine, heartbeat);
+               engine_heartbeat_enable(data.engine);
                for (i = 0; i < ARRAY_SIZE(data.ce); i++) {
                        if (!data.ce[i])
                                break;
index 8831ffe..63f87d8 100644 (file)
@@ -18,6 +18,20 @@ struct live_mocs {
        void *vaddr;
 };
 
+static struct intel_context *mocs_context_create(struct intel_engine_cs *engine)
+{
+       struct intel_context *ce;
+
+       ce = intel_context_create(engine);
+       if (IS_ERR(ce))
+               return ce;
+
+       /* We build large requests to read the registers from the ring */
+       ce->ring = __intel_context_ring_size(SZ_16K);
+
+       return ce;
+}
+
 static int request_add_sync(struct i915_request *rq, int err)
 {
        i915_request_get(rq);
@@ -301,7 +315,7 @@ static int live_mocs_clean(void *arg)
        for_each_engine(engine, gt, id) {
                struct intel_context *ce;
 
-               ce = intel_context_create(engine);
+               ce = mocs_context_create(engine);
                if (IS_ERR(ce)) {
                        err = PTR_ERR(ce);
                        break;
@@ -395,7 +409,7 @@ static int live_mocs_reset(void *arg)
        for_each_engine(engine, gt, id) {
                struct intel_context *ce;
 
-               ce = intel_context_create(engine);
+               ce = mocs_context_create(engine);
                if (IS_ERR(ce)) {
                        err = PTR_ERR(ce);
                        break;
diff --git a/drivers/gpu/drm/i915/gt/selftest_ring.c b/drivers/gpu/drm/i915/gt/selftest_ring.c
new file mode 100644 (file)
index 0000000..2a8c534
--- /dev/null
@@ -0,0 +1,110 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright Â© 2020 Intel Corporation
+ */
+
+static struct intel_ring *mock_ring(unsigned long sz)
+{
+       struct intel_ring *ring;
+
+       ring = kzalloc(sizeof(*ring) + sz, GFP_KERNEL);
+       if (!ring)
+               return NULL;
+
+       kref_init(&ring->ref);
+       ring->size = sz;
+       ring->wrap = BITS_PER_TYPE(ring->size) - ilog2(sz);
+       ring->effective_size = sz;
+       ring->vaddr = (void *)(ring + 1);
+       atomic_set(&ring->pin_count, 1);
+
+       intel_ring_update_space(ring);
+
+       return ring;
+}
+
+static void mock_ring_free(struct intel_ring *ring)
+{
+       kfree(ring);
+}
+
+static int check_ring_direction(struct intel_ring *ring,
+                               u32 next, u32 prev,
+                               int expected)
+{
+       int result;
+
+       result = intel_ring_direction(ring, next, prev);
+       if (result < 0)
+               result = -1;
+       else if (result > 0)
+               result = 1;
+
+       if (result != expected) {
+               pr_err("intel_ring_direction(%u, %u):%d != %d\n",
+                      next, prev, result, expected);
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int check_ring_step(struct intel_ring *ring, u32 x, u32 step)
+{
+       u32 prev = x, next = intel_ring_wrap(ring, x + step);
+       int err = 0;
+
+       err |= check_ring_direction(ring, next, next,  0);
+       err |= check_ring_direction(ring, prev, prev,  0);
+       err |= check_ring_direction(ring, next, prev,  1);
+       err |= check_ring_direction(ring, prev, next, -1);
+
+       return err;
+}
+
+static int check_ring_offset(struct intel_ring *ring, u32 x, u32 step)
+{
+       int err = 0;
+
+       err |= check_ring_step(ring, x, step);
+       err |= check_ring_step(ring, intel_ring_wrap(ring, x + 1), step);
+       err |= check_ring_step(ring, intel_ring_wrap(ring, x - 1), step);
+
+       return err;
+}
+
+static int igt_ring_direction(void *dummy)
+{
+       struct intel_ring *ring;
+       unsigned int half = 2048;
+       int step, err = 0;
+
+       ring = mock_ring(2 * half);
+       if (!ring)
+               return -ENOMEM;
+
+       GEM_BUG_ON(ring->size != 2 * half);
+
+       /* Precision of wrap detection is limited to ring->size / 2 */
+       for (step = 1; step < half; step <<= 1) {
+               err |= check_ring_offset(ring, 0, step);
+               err |= check_ring_offset(ring, half, step);
+       }
+       err |= check_ring_step(ring, 0, half - 64);
+
+       /* And check unwrapped handling for good measure */
+       err |= check_ring_offset(ring, 0, 2 * half + 64);
+       err |= check_ring_offset(ring, 3 * half, 1);
+
+       mock_ring_free(ring);
+       return err;
+}
+
+int intel_ring_mock_selftests(void)
+{
+       static const struct i915_subtest tests[] = {
+               SUBTEST(igt_ring_direction),
+       };
+
+       return i915_subtests(tests, NULL);
+}
index 6275d69..5049c3d 100644 (file)
 /* Try to isolate the impact of cstates from determing frequency response */
 #define CPU_LATENCY 0 /* -1 to disable pm_qos, 0 to disable cstates */
 
-static unsigned long engine_heartbeat_disable(struct intel_engine_cs *engine)
+static void engine_heartbeat_disable(struct intel_engine_cs *engine)
 {
-       unsigned long old;
-
-       old = fetch_and_zero(&engine->props.heartbeat_interval_ms);
+       engine->props.heartbeat_interval_ms = 0;
 
        intel_engine_pm_get(engine);
        intel_engine_park_heartbeat(engine);
-
-       return old;
 }
 
-static void engine_heartbeat_enable(struct intel_engine_cs *engine,
-                                   unsigned long saved)
+static void engine_heartbeat_enable(struct intel_engine_cs *engine)
 {
        intel_engine_pm_put(engine);
 
-       engine->props.heartbeat_interval_ms = saved;
+       engine->props.heartbeat_interval_ms =
+               engine->defaults.heartbeat_interval_ms;
 }
 
 static void dummy_rps_work(struct work_struct *wrk)
@@ -246,7 +242,6 @@ int live_rps_clock_interval(void *arg)
        intel_gt_check_clock_frequency(gt);
 
        for_each_engine(engine, gt, id) {
-               unsigned long saved_heartbeat;
                struct i915_request *rq;
                u32 cycles;
                u64 dt;
@@ -254,13 +249,13 @@ int live_rps_clock_interval(void *arg)
                if (!intel_engine_can_store_dword(engine))
                        continue;
 
-               saved_heartbeat = engine_heartbeat_disable(engine);
+               engine_heartbeat_disable(engine);
 
                rq = igt_spinner_create_request(&spin,
                                                engine->kernel_context,
                                                MI_NOOP);
                if (IS_ERR(rq)) {
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        err = PTR_ERR(rq);
                        break;
                }
@@ -271,7 +266,7 @@ int live_rps_clock_interval(void *arg)
                        pr_err("%s: RPS spinner did not start\n",
                               engine->name);
                        igt_spinner_end(&spin);
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        intel_gt_set_wedged(engine->gt);
                        err = -EIO;
                        break;
@@ -327,7 +322,7 @@ int live_rps_clock_interval(void *arg)
                intel_uncore_forcewake_put(gt->uncore, FORCEWAKE_ALL);
 
                igt_spinner_end(&spin);
-               engine_heartbeat_enable(engine, saved_heartbeat);
+               engine_heartbeat_enable(engine);
 
                if (err == 0) {
                        u64 time = intel_gt_pm_interval_to_ns(gt, cycles);
@@ -405,7 +400,6 @@ int live_rps_control(void *arg)
 
        intel_gt_pm_get(gt);
        for_each_engine(engine, gt, id) {
-               unsigned long saved_heartbeat;
                struct i915_request *rq;
                ktime_t min_dt, max_dt;
                int f, limit;
@@ -414,7 +408,7 @@ int live_rps_control(void *arg)
                if (!intel_engine_can_store_dword(engine))
                        continue;
 
-               saved_heartbeat = engine_heartbeat_disable(engine);
+               engine_heartbeat_disable(engine);
 
                rq = igt_spinner_create_request(&spin,
                                                engine->kernel_context,
@@ -430,7 +424,7 @@ int live_rps_control(void *arg)
                        pr_err("%s: RPS spinner did not start\n",
                               engine->name);
                        igt_spinner_end(&spin);
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        intel_gt_set_wedged(engine->gt);
                        err = -EIO;
                        break;
@@ -440,7 +434,7 @@ int live_rps_control(void *arg)
                        pr_err("%s: could not set minimum frequency [%x], only %x!\n",
                               engine->name, rps->min_freq, read_cagf(rps));
                        igt_spinner_end(&spin);
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        show_pstate_limits(rps);
                        err = -EINVAL;
                        break;
@@ -457,7 +451,7 @@ int live_rps_control(void *arg)
                        pr_err("%s: could not restore minimum frequency [%x], only %x!\n",
                               engine->name, rps->min_freq, read_cagf(rps));
                        igt_spinner_end(&spin);
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        show_pstate_limits(rps);
                        err = -EINVAL;
                        break;
@@ -472,7 +466,7 @@ int live_rps_control(void *arg)
                min_dt = ktime_sub(ktime_get(), min_dt);
 
                igt_spinner_end(&spin);
-               engine_heartbeat_enable(engine, saved_heartbeat);
+               engine_heartbeat_enable(engine);
 
                pr_info("%s: range:[%x:%uMHz, %x:%uMHz] limit:[%x:%uMHz], %x:%x response %lluns:%lluns\n",
                        engine->name,
@@ -635,7 +629,6 @@ int live_rps_frequency_cs(void *arg)
        rps->work.func = dummy_rps_work;
 
        for_each_engine(engine, gt, id) {
-               unsigned long saved_heartbeat;
                struct i915_request *rq;
                struct i915_vma *vma;
                u32 *cancel, *cntr;
@@ -644,14 +637,14 @@ int live_rps_frequency_cs(void *arg)
                        int freq;
                } min, max;
 
-               saved_heartbeat = engine_heartbeat_disable(engine);
+               engine_heartbeat_disable(engine);
 
                vma = create_spin_counter(engine,
                                          engine->kernel_context->vm, false,
                                          &cancel, &cntr);
                if (IS_ERR(vma)) {
                        err = PTR_ERR(vma);
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        break;
                }
 
@@ -732,7 +725,7 @@ err_vma:
                i915_vma_unpin(vma);
                i915_vma_put(vma);
 
-               engine_heartbeat_enable(engine, saved_heartbeat);
+               engine_heartbeat_enable(engine);
                if (igt_flush_test(gt->i915))
                        err = -EIO;
                if (err)
@@ -778,7 +771,6 @@ int live_rps_frequency_srm(void *arg)
        rps->work.func = dummy_rps_work;
 
        for_each_engine(engine, gt, id) {
-               unsigned long saved_heartbeat;
                struct i915_request *rq;
                struct i915_vma *vma;
                u32 *cancel, *cntr;
@@ -787,14 +779,14 @@ int live_rps_frequency_srm(void *arg)
                        int freq;
                } min, max;
 
-               saved_heartbeat = engine_heartbeat_disable(engine);
+               engine_heartbeat_disable(engine);
 
                vma = create_spin_counter(engine,
                                          engine->kernel_context->vm, true,
                                          &cancel, &cntr);
                if (IS_ERR(vma)) {
                        err = PTR_ERR(vma);
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        break;
                }
 
@@ -874,7 +866,7 @@ err_vma:
                i915_vma_unpin(vma);
                i915_vma_put(vma);
 
-               engine_heartbeat_enable(engine, saved_heartbeat);
+               engine_heartbeat_enable(engine);
                if (igt_flush_test(gt->i915))
                        err = -EIO;
                if (err)
@@ -1066,16 +1058,14 @@ int live_rps_interrupt(void *arg)
        for_each_engine(engine, gt, id) {
                /* Keep the engine busy with a spinner; expect an UP! */
                if (pm_events & GEN6_PM_RP_UP_THRESHOLD) {
-                       unsigned long saved_heartbeat;
-
                        intel_gt_pm_wait_for_idle(engine->gt);
                        GEM_BUG_ON(intel_rps_is_active(rps));
 
-                       saved_heartbeat = engine_heartbeat_disable(engine);
+                       engine_heartbeat_disable(engine);
 
                        err = __rps_up_interrupt(rps, engine, &spin);
 
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        if (err)
                                goto out;
 
@@ -1084,15 +1074,13 @@ int live_rps_interrupt(void *arg)
 
                /* Keep the engine awake but idle and check for DOWN */
                if (pm_events & GEN6_PM_RP_DOWN_THRESHOLD) {
-                       unsigned long saved_heartbeat;
-
-                       saved_heartbeat = engine_heartbeat_disable(engine);
+                       engine_heartbeat_disable(engine);
                        intel_rc6_disable(&gt->rc6);
 
                        err = __rps_down_interrupt(rps, engine);
 
                        intel_rc6_enable(&gt->rc6);
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        if (err)
                                goto out;
                }
@@ -1168,7 +1156,6 @@ int live_rps_power(void *arg)
        rps->work.func = dummy_rps_work;
 
        for_each_engine(engine, gt, id) {
-               unsigned long saved_heartbeat;
                struct i915_request *rq;
                struct {
                        u64 power;
@@ -1178,13 +1165,13 @@ int live_rps_power(void *arg)
                if (!intel_engine_can_store_dword(engine))
                        continue;
 
-               saved_heartbeat = engine_heartbeat_disable(engine);
+               engine_heartbeat_disable(engine);
 
                rq = igt_spinner_create_request(&spin,
                                                engine->kernel_context,
                                                MI_NOOP);
                if (IS_ERR(rq)) {
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        err = PTR_ERR(rq);
                        break;
                }
@@ -1195,7 +1182,7 @@ int live_rps_power(void *arg)
                        pr_err("%s: RPS spinner did not start\n",
                               engine->name);
                        igt_spinner_end(&spin);
-                       engine_heartbeat_enable(engine, saved_heartbeat);
+                       engine_heartbeat_enable(engine);
                        intel_gt_set_wedged(engine->gt);
                        err = -EIO;
                        break;
@@ -1208,7 +1195,7 @@ int live_rps_power(void *arg)
                min.power = measure_power_at(rps, &min.freq);
 
                igt_spinner_end(&spin);
-               engine_heartbeat_enable(engine, saved_heartbeat);
+               engine_heartbeat_enable(engine);
 
                pr_info("%s: min:%llumW @ %uMHz, max:%llumW @ %uMHz\n",
                        engine->name,
index c2578a0..ef1c350 100644 (file)
@@ -751,22 +751,20 @@ out_free:
        return err;
 }
 
-static void engine_heartbeat_disable(struct intel_engine_cs *engine,
-                                    unsigned long *saved)
+static void engine_heartbeat_disable(struct intel_engine_cs *engine)
 {
-       *saved = engine->props.heartbeat_interval_ms;
        engine->props.heartbeat_interval_ms = 0;
 
        intel_engine_pm_get(engine);
        intel_engine_park_heartbeat(engine);
 }
 
-static void engine_heartbeat_enable(struct intel_engine_cs *engine,
-                                   unsigned long saved)
+static void engine_heartbeat_enable(struct intel_engine_cs *engine)
 {
        intel_engine_pm_put(engine);
 
-       engine->props.heartbeat_interval_ms = saved;
+       engine->props.heartbeat_interval_ms =
+               engine->defaults.heartbeat_interval_ms;
 }
 
 static int live_hwsp_rollover_kernel(void *arg)
@@ -785,10 +783,9 @@ static int live_hwsp_rollover_kernel(void *arg)
                struct intel_context *ce = engine->kernel_context;
                struct intel_timeline *tl = ce->timeline;
                struct i915_request *rq[3] = {};
-               unsigned long heartbeat;
                int i;
 
-               engine_heartbeat_disable(engine, &heartbeat);
+               engine_heartbeat_disable(engine);
                if (intel_gt_wait_for_idle(gt, HZ / 2)) {
                        err = -EIO;
                        goto out;
@@ -839,7 +836,7 @@ static int live_hwsp_rollover_kernel(void *arg)
 out:
                for (i = 0; i < ARRAY_SIZE(rq); i++)
                        i915_request_put(rq[i]);
-               engine_heartbeat_enable(engine, heartbeat);
+               engine_heartbeat_enable(engine);
                if (err)
                        break;
        }
index 5ed3232..3278546 100644 (file)
@@ -623,6 +623,8 @@ err_request:
                                err = -EINVAL;
                                goto out_unpin;
                        }
+               } else {
+                       rsvd = 0;
                }
 
                expect = results[0];
index 4dc601d..284cf07 100644 (file)
@@ -3125,6 +3125,7 @@ static void gen11_hpd_irq_setup(struct drm_i915_private *dev_priv)
 
        val = I915_READ(GEN11_DE_HPD_IMR);
        val &= ~hotplug_irqs;
+       val |= ~enabled_irqs & hotplug_irqs;
        I915_WRITE(GEN11_DE_HPD_IMR, val);
        POSTING_READ(GEN11_DE_HPD_IMR);
 
index e991a70..962ded9 100644 (file)
@@ -269,12 +269,48 @@ static bool exclusive_mmio_access(const struct drm_i915_private *i915)
        return IS_GEN(i915, 7);
 }
 
+static void engine_sample(struct intel_engine_cs *engine, unsigned int period_ns)
+{
+       struct intel_engine_pmu *pmu = &engine->pmu;
+       bool busy;
+       u32 val;
+
+       val = ENGINE_READ_FW(engine, RING_CTL);
+       if (val == 0) /* powerwell off => engine idle */
+               return;
+
+       if (val & RING_WAIT)
+               add_sample(&pmu->sample[I915_SAMPLE_WAIT], period_ns);
+       if (val & RING_WAIT_SEMAPHORE)
+               add_sample(&pmu->sample[I915_SAMPLE_SEMA], period_ns);
+
+       /* No need to sample when busy stats are supported. */
+       if (intel_engine_supports_stats(engine))
+               return;
+
+       /*
+        * While waiting on a semaphore or event, MI_MODE reports the
+        * ring as idle. However, previously using the seqno, and with
+        * execlists sampling, we account for the ring waiting as the
+        * engine being busy. Therefore, we record the sample as being
+        * busy if either waiting or !idle.
+        */
+       busy = val & (RING_WAIT_SEMAPHORE | RING_WAIT);
+       if (!busy) {
+               val = ENGINE_READ_FW(engine, RING_MI_MODE);
+               busy = !(val & MODE_IDLE);
+       }
+       if (busy)
+               add_sample(&pmu->sample[I915_SAMPLE_BUSY], period_ns);
+}
+
 static void
 engines_sample(struct intel_gt *gt, unsigned int period_ns)
 {
        struct drm_i915_private *i915 = gt->i915;
        struct intel_engine_cs *engine;
        enum intel_engine_id id;
+       unsigned long flags;
 
        if ((i915->pmu.enable & ENGINE_SAMPLE_MASK) == 0)
                return;
@@ -283,53 +319,17 @@ engines_sample(struct intel_gt *gt, unsigned int period_ns)
                return;
 
        for_each_engine(engine, gt, id) {
-               struct intel_engine_pmu *pmu = &engine->pmu;
-               spinlock_t *mmio_lock;
-               unsigned long flags;
-               bool busy;
-               u32 val;
-
                if (!intel_engine_pm_get_if_awake(engine))
                        continue;
 
-               mmio_lock = NULL;
-               if (exclusive_mmio_access(i915))
-                       mmio_lock = &engine->uncore->lock;
-
-               if (unlikely(mmio_lock))
-                       spin_lock_irqsave(mmio_lock, flags);
-
-               val = ENGINE_READ_FW(engine, RING_CTL);
-               if (val == 0) /* powerwell off => engine idle */
-                       goto skip;
-
-               if (val & RING_WAIT)
-                       add_sample(&pmu->sample[I915_SAMPLE_WAIT], period_ns);
-               if (val & RING_WAIT_SEMAPHORE)
-                       add_sample(&pmu->sample[I915_SAMPLE_SEMA], period_ns);
-
-               /* No need to sample when busy stats are supported. */
-               if (intel_engine_supports_stats(engine))
-                       goto skip;
-
-               /*
-                * While waiting on a semaphore or event, MI_MODE reports the
-                * ring as idle. However, previously using the seqno, and with
-                * execlists sampling, we account for the ring waiting as the
-                * engine being busy. Therefore, we record the sample as being
-                * busy if either waiting or !idle.
-                */
-               busy = val & (RING_WAIT_SEMAPHORE | RING_WAIT);
-               if (!busy) {
-                       val = ENGINE_READ_FW(engine, RING_MI_MODE);
-                       busy = !(val & MODE_IDLE);
+               if (exclusive_mmio_access(i915)) {
+                       spin_lock_irqsave(&engine->uncore->lock, flags);
+                       engine_sample(engine, period_ns);
+                       spin_unlock_irqrestore(&engine->uncore->lock, flags);
+               } else {
+                       engine_sample(engine, period_ns);
                }
-               if (busy)
-                       add_sample(&pmu->sample[I915_SAMPLE_BUSY], period_ns);
 
-skip:
-               if (unlikely(mmio_lock))
-                       spin_unlock_irqrestore(mmio_lock, flags);
                intel_engine_pm_put_async(engine);
        }
 }
index 5003a71..8aa7866 100644 (file)
@@ -42,7 +42,7 @@ enum {
  * active request.
  */
 #define I915_PRIORITY_UNPREEMPTABLE INT_MAX
-#define I915_PRIORITY_BARRIER INT_MAX
+#define I915_PRIORITY_BARRIER (I915_PRIORITY_UNPREEMPTABLE - 1)
 
 struct i915_priolist {
        struct list_head requests[I915_PRIORITY_COUNT];
index 7717581..06cd1d2 100644 (file)
@@ -7896,7 +7896,7 @@ enum {
 
 /* GEN7 chicken */
 #define GEN7_COMMON_SLICE_CHICKEN1             _MMIO(0x7010)
-  #define GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC    ((1 << 10) | (1 << 26))
+  #define GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC    (1 << 10)
   #define GEN9_RHWO_OPTIMIZATION_DISABLE       (1 << 14)
 
 #define COMMON_SLICE_CHICKEN2                                  _MMIO(0x7014)
index 696491d..07f663c 100644 (file)
@@ -6830,16 +6830,6 @@ static void ilk_init_clock_gating(struct drm_i915_private *dev_priv)
        I915_WRITE(ILK_DISPLAY_CHICKEN2,
                   I915_READ(ILK_DISPLAY_CHICKEN2) |
                   ILK_ELPIN_409_SELECT);
-       I915_WRITE(_3D_CHICKEN2,
-                  _3D_CHICKEN2_WM_READ_PIPELINED << 16 |
-                  _3D_CHICKEN2_WM_READ_PIPELINED);
-
-       /* WaDisableRenderCachePipelinedFlush:ilk */
-       I915_WRITE(CACHE_MODE_0,
-                  _MASKED_BIT_ENABLE(CM0_PIPELINED_RENDER_FLUSH_DISABLE));
-
-       /* WaDisable_RenderCache_OperationalFlush:ilk */
-       I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
 
        g4x_disable_trickle_feed(dev_priv);
 
@@ -6902,27 +6892,6 @@ static void gen6_init_clock_gating(struct drm_i915_private *dev_priv)
                   I915_READ(ILK_DISPLAY_CHICKEN2) |
                   ILK_ELPIN_409_SELECT);
 
-       /* WaDisableHiZPlanesWhenMSAAEnabled:snb */
-       I915_WRITE(_3D_CHICKEN,
-                  _MASKED_BIT_ENABLE(_3D_CHICKEN_HIZ_PLANE_DISABLE_MSAA_4X_SNB));
-
-       /* WaDisable_RenderCache_OperationalFlush:snb */
-       I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
-
-       /*
-        * BSpec recoomends 8x4 when MSAA is used,
-        * however in practice 16x4 seems fastest.
-        *
-        * Note that PS/WM thread counts depend on the WIZ hashing
-        * disable bit, which we don't touch here, but it's good
-        * to keep in mind (see 3DSTATE_PS and 3DSTATE_WM).
-        */
-       I915_WRITE(GEN6_GT_MODE,
-                  _MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4));
-
-       I915_WRITE(CACHE_MODE_0,
-                  _MASKED_BIT_DISABLE(CM0_STC_EVICT_DISABLE_LRA_SNB));
-
        I915_WRITE(GEN6_UCGCTL1,
                   I915_READ(GEN6_UCGCTL1) |
                   GEN6_BLBUNIT_CLOCK_GATE_DISABLE |
@@ -6945,18 +6914,6 @@ static void gen6_init_clock_gating(struct drm_i915_private *dev_priv)
                   GEN6_RCPBUNIT_CLOCK_GATE_DISABLE |
                   GEN6_RCCUNIT_CLOCK_GATE_DISABLE);
 
-       /* WaStripsFansDisableFastClipPerformanceFix:snb */
-       I915_WRITE(_3D_CHICKEN3,
-                  _MASKED_BIT_ENABLE(_3D_CHICKEN3_SF_DISABLE_FASTCLIP_CULL));
-
-       /*
-        * Bspec says:
-        * "This bit must be set if 3DSTATE_CLIP clip mode is set to normal and
-        * 3DSTATE_SF number of SF output attributes is more than 16."
-        */
-       I915_WRITE(_3D_CHICKEN3,
-                  _MASKED_BIT_ENABLE(_3D_CHICKEN3_SF_DISABLE_PIPELINED_ATTR_FETCH));
-
        /*
         * According to the spec the following bits should be
         * set in order to enable memory self-refresh and fbc:
@@ -6986,24 +6943,6 @@ static void gen6_init_clock_gating(struct drm_i915_private *dev_priv)
        gen6_check_mch_setup(dev_priv);
 }
 
-static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
-{
-       u32 reg = I915_READ(GEN7_FF_THREAD_MODE);
-
-       /*
-        * WaVSThreadDispatchOverride:ivb,vlv
-        *
-        * This actually overrides the dispatch
-        * mode for all thread types.
-        */
-       reg &= ~GEN7_FF_SCHED_MASK;
-       reg |= GEN7_FF_TS_SCHED_HW;
-       reg |= GEN7_FF_VS_SCHED_HW;
-       reg |= GEN7_FF_DS_SCHED_HW;
-
-       I915_WRITE(GEN7_FF_THREAD_MODE, reg);
-}
-
 static void lpt_init_clock_gating(struct drm_i915_private *dev_priv)
 {
        /*
@@ -7230,45 +7169,10 @@ static void bdw_init_clock_gating(struct drm_i915_private *dev_priv)
 
 static void hsw_init_clock_gating(struct drm_i915_private *dev_priv)
 {
-       /* L3 caching of data atomics doesn't work -- disable it. */
-       I915_WRITE(HSW_SCRATCH1, HSW_SCRATCH1_L3_DATA_ATOMICS_DISABLE);
-       I915_WRITE(HSW_ROW_CHICKEN3,
-                  _MASKED_BIT_ENABLE(HSW_ROW_CHICKEN3_L3_GLOBAL_ATOMICS_DISABLE));
-
        /* This is required by WaCatErrorRejectionIssue:hsw */
        I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
-                       I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
-                       GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
-
-       /* WaVSRefCountFullforceMissDisable:hsw */
-       I915_WRITE(GEN7_FF_THREAD_MODE,
-                  I915_READ(GEN7_FF_THREAD_MODE) & ~GEN7_FF_VS_REF_CNT_FFME);
-
-       /* WaDisable_RenderCache_OperationalFlush:hsw */
-       I915_WRITE(CACHE_MODE_0_GEN7, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
-
-       /* enable HiZ Raw Stall Optimization */
-       I915_WRITE(CACHE_MODE_0_GEN7,
-                  _MASKED_BIT_DISABLE(HIZ_RAW_STALL_OPT_DISABLE));
-
-       /* WaDisable4x2SubspanOptimization:hsw */
-       I915_WRITE(CACHE_MODE_1,
-                  _MASKED_BIT_ENABLE(PIXEL_SUBSPAN_COLLECT_OPT_DISABLE));
-
-       /*
-        * BSpec recommends 8x4 when MSAA is used,
-        * however in practice 16x4 seems fastest.
-        *
-        * Note that PS/WM thread counts depend on the WIZ hashing
-        * disable bit, which we don't touch here, but it's good
-        * to keep in mind (see 3DSTATE_PS and 3DSTATE_WM).
-        */
-       I915_WRITE(GEN7_GT_MODE,
-                  _MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4));
-
-       /* WaSampleCChickenBitEnable:hsw */
-       I915_WRITE(HALF_SLICE_CHICKEN3,
-                  _MASKED_BIT_ENABLE(HSW_SAMPLE_C_PERFORMANCE));
+                  I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
+                  GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
 
        /* WaSwitchSolVfFArbitrationPriority:hsw */
        I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) | HSW_ECOCHK_ARB_PRIO_SOL);
@@ -7282,32 +7186,11 @@ static void ivb_init_clock_gating(struct drm_i915_private *dev_priv)
 
        I915_WRITE(ILK_DSPCLK_GATE_D, ILK_VRHUNIT_CLOCK_GATE_DISABLE);
 
-       /* WaDisableEarlyCull:ivb */
-       I915_WRITE(_3D_CHICKEN3,
-                  _MASKED_BIT_ENABLE(_3D_CHICKEN_SF_DISABLE_OBJEND_CULL));
-
        /* WaDisableBackToBackFlipFix:ivb */
        I915_WRITE(IVB_CHICKEN3,
                   CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE |
                   CHICKEN3_DGMG_DONE_FIX_DISABLE);
 
-       /* WaDisablePSDDualDispatchEnable:ivb */
-       if (IS_IVB_GT1(dev_priv))
-               I915_WRITE(GEN7_HALF_SLICE_CHICKEN1,
-                          _MASKED_BIT_ENABLE(GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE));
-
-       /* WaDisable_RenderCache_OperationalFlush:ivb */
-       I915_WRITE(CACHE_MODE_0_GEN7, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
-
-       /* Apply the WaDisableRHWOOptimizationForRenderHang:ivb workaround. */
-       I915_WRITE(GEN7_COMMON_SLICE_CHICKEN1,
-                  GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC);
-
-       /* WaApplyL3ControlAndL3ChickenMode:ivb */
-       I915_WRITE(GEN7_L3CNTLREG1,
-                       GEN7_WA_FOR_GEN7_L3_CONTROL);
-       I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER,
-                  GEN7_WA_L3_CHICKEN_MODE);
        if (IS_IVB_GT1(dev_priv))
                I915_WRITE(GEN7_ROW_CHICKEN2,
                           _MASKED_BIT_ENABLE(DOP_CLOCK_GATING_DISABLE));
@@ -7319,10 +7202,6 @@ static void ivb_init_clock_gating(struct drm_i915_private *dev_priv)
                           _MASKED_BIT_ENABLE(DOP_CLOCK_GATING_DISABLE));
        }
 
-       /* WaForceL3Serialization:ivb */
-       I915_WRITE(GEN7_L3SQCREG4, I915_READ(GEN7_L3SQCREG4) &
-                  ~L3SQ_URB_READ_CAM_MATCH_DISABLE);
-
        /*
         * According to the spec, bit 13 (RCZUNIT) must be set on IVB.
         * This implements the WaDisableRCZUnitClockGating:ivb workaround.
@@ -7337,29 +7216,6 @@ static void ivb_init_clock_gating(struct drm_i915_private *dev_priv)
 
        g4x_disable_trickle_feed(dev_priv);
 
-       gen7_setup_fixed_func_scheduler(dev_priv);
-
-       if (0) { /* causes HiZ corruption on ivb:gt1 */
-               /* enable HiZ Raw Stall Optimization */
-               I915_WRITE(CACHE_MODE_0_GEN7,
-                          _MASKED_BIT_DISABLE(HIZ_RAW_STALL_OPT_DISABLE));
-       }
-
-       /* WaDisable4x2SubspanOptimization:ivb */
-       I915_WRITE(CACHE_MODE_1,
-                  _MASKED_BIT_ENABLE(PIXEL_SUBSPAN_COLLECT_OPT_DISABLE));
-
-       /*
-        * BSpec recommends 8x4 when MSAA is used,
-        * however in practice 16x4 seems fastest.
-        *
-        * Note that PS/WM thread counts depend on the WIZ hashing
-        * disable bit, which we don't touch here, but it's good
-        * to keep in mind (see 3DSTATE_PS and 3DSTATE_WM).
-        */
-       I915_WRITE(GEN7_GT_MODE,
-                  _MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4));
-
        snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
        snpcr &= ~GEN6_MBC_SNPCR_MASK;
        snpcr |= GEN6_MBC_SNPCR_MED;
@@ -7373,28 +7229,11 @@ static void ivb_init_clock_gating(struct drm_i915_private *dev_priv)
 
 static void vlv_init_clock_gating(struct drm_i915_private *dev_priv)
 {
-       /* WaDisableEarlyCull:vlv */
-       I915_WRITE(_3D_CHICKEN3,
-                  _MASKED_BIT_ENABLE(_3D_CHICKEN_SF_DISABLE_OBJEND_CULL));
-
        /* WaDisableBackToBackFlipFix:vlv */
        I915_WRITE(IVB_CHICKEN3,
                   CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE |
                   CHICKEN3_DGMG_DONE_FIX_DISABLE);
 
-       /* WaPsdDispatchEnable:vlv */
-       /* WaDisablePSDDualDispatchEnable:vlv */
-       I915_WRITE(GEN7_HALF_SLICE_CHICKEN1,
-                  _MASKED_BIT_ENABLE(GEN7_MAX_PS_THREAD_DEP |
-                                     GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE));
-
-       /* WaDisable_RenderCache_OperationalFlush:vlv */
-       I915_WRITE(CACHE_MODE_0_GEN7, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
-
-       /* WaForceL3Serialization:vlv */
-       I915_WRITE(GEN7_L3SQCREG4, I915_READ(GEN7_L3SQCREG4) &
-                  ~L3SQ_URB_READ_CAM_MATCH_DISABLE);
-
        /* WaDisableDopClockGating:vlv */
        I915_WRITE(GEN7_ROW_CHICKEN2,
                   _MASKED_BIT_ENABLE(DOP_CLOCK_GATING_DISABLE));
@@ -7404,8 +7243,6 @@ static void vlv_init_clock_gating(struct drm_i915_private *dev_priv)
                   I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
                   GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
 
-       gen7_setup_fixed_func_scheduler(dev_priv);
-
        /*
         * According to the spec, bit 13 (RCZUNIT) must be set on IVB.
         * This implements the WaDisableRCZUnitClockGating:vlv workaround.
@@ -7419,30 +7256,6 @@ static void vlv_init_clock_gating(struct drm_i915_private *dev_priv)
        I915_WRITE(GEN7_UCGCTL4,
                   I915_READ(GEN7_UCGCTL4) | GEN7_L3BANK2X_CLOCK_GATE_DISABLE);
 
-       /*
-        * BSpec says this must be set, even though
-        * WaDisable4x2SubspanOptimization isn't listed for VLV.
-        */
-       I915_WRITE(CACHE_MODE_1,
-                  _MASKED_BIT_ENABLE(PIXEL_SUBSPAN_COLLECT_OPT_DISABLE));
-
-       /*
-        * BSpec recommends 8x4 when MSAA is used,
-        * however in practice 16x4 seems fastest.
-        *
-        * Note that PS/WM thread counts depend on the WIZ hashing
-        * disable bit, which we don't touch here, but it's good
-        * to keep in mind (see 3DSTATE_PS and 3DSTATE_WM).
-        */
-       I915_WRITE(GEN7_GT_MODE,
-                  _MASKED_FIELD(GEN6_WIZ_HASHING_MASK, GEN6_WIZ_HASHING_16x4));
-
-       /*
-        * WaIncreaseL3CreditsForVLVB0:vlv
-        * This is the hardware default actually.
-        */
-       I915_WRITE(GEN7_L3SQCREG1, VLV_B0_WA_L3SQCREG1_VALUE);
-
        /*
         * WaDisableVLVClockGating_VBIIssue:vlv
         * Disable clock gating on th GCFG unit to prevent a delay
@@ -7495,13 +7308,6 @@ static void g4x_init_clock_gating(struct drm_i915_private *dev_priv)
                dspclk_gate |= DSSUNIT_CLOCK_GATE_DISABLE;
        I915_WRITE(DSPCLK_GATE_D, dspclk_gate);
 
-       /* WaDisableRenderCachePipelinedFlush */
-       I915_WRITE(CACHE_MODE_0,
-                  _MASKED_BIT_ENABLE(CM0_PIPELINED_RENDER_FLUSH_DISABLE));
-
-       /* WaDisable_RenderCache_OperationalFlush:g4x */
-       I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
-
        g4x_disable_trickle_feed(dev_priv);
 }
 
@@ -7517,11 +7323,6 @@ static void i965gm_init_clock_gating(struct drm_i915_private *dev_priv)
        intel_uncore_write(uncore,
                           MI_ARB_STATE,
                           _MASKED_BIT_ENABLE(MI_ARB_DISPLAY_TRICKLE_FEED_DISABLE));
-
-       /* WaDisable_RenderCache_OperationalFlush:gen4 */
-       intel_uncore_write(uncore,
-                          CACHE_MODE_0,
-                          _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
 }
 
 static void i965g_init_clock_gating(struct drm_i915_private *dev_priv)
@@ -7534,9 +7335,6 @@ static void i965g_init_clock_gating(struct drm_i915_private *dev_priv)
        I915_WRITE(RENCLK_GATE_D2, 0);
        I915_WRITE(MI_ARB_STATE,
                   _MASKED_BIT_ENABLE(MI_ARB_DISPLAY_TRICKLE_FEED_DISABLE));
-
-       /* WaDisable_RenderCache_OperationalFlush:gen4 */
-       I915_WRITE(CACHE_MODE_0, _MASKED_BIT_DISABLE(RC_OP_FLUSH_ENABLE));
 }
 
 static void gen3_init_clock_gating(struct drm_i915_private *dev_priv)
index 6a2be7d..6090ce3 100644 (file)
@@ -21,6 +21,7 @@ selftest(fence, i915_sw_fence_mock_selftests)
 selftest(scatterlist, scatterlist_mock_selftests)
 selftest(syncmap, i915_syncmap_mock_selftests)
 selftest(uncore, intel_uncore_mock_selftests)
+selftest(ring, intel_ring_mock_selftests)
 selftest(engine, intel_engine_cs_mock_selftests)
 selftest(timelines, intel_timeline_mock_selftests)
 selftest(requests, i915_request_mock_selftests)
index 4f932a4..603b4a9 100644 (file)
@@ -34,7 +34,7 @@ struct stp_policy_node {
        unsigned int            first_channel;
        unsigned int            last_channel;
        /* this is the one that's exposed to the attributes */
-       unsigned char           priv[0];
+       unsigned char           priv[];
 };
 
 void *stp_policy_node_priv(struct stp_policy_node *pn)
index 3569439..a9be49f 100644 (file)
@@ -23,7 +23,7 @@ void *stp_policy_node_priv(struct stp_policy_node *pn);
 
 struct stp_master {
        unsigned int    nr_free;
-       unsigned long   chan_map[0];
+       unsigned long   chan_map[];
 };
 
 struct stm_device {
@@ -42,7 +42,7 @@ struct stm_device {
        const struct config_item_type           *pdrv_node_type;
        /* master allocation */
        spinlock_t              mc_lock;
-       struct stp_master       *masters[0];
+       struct stp_master       *masters[];
 };
 
 #define to_stm_device(_d)                              \
index d1f278f..26f03a1 100644 (file)
@@ -815,31 +815,6 @@ out_err_silent:
 }
 EXPORT_SYMBOL_GPL(i2c_new_client_device);
 
-/**
- * i2c_new_device - instantiate an i2c device
- * @adap: the adapter managing the device
- * @info: describes one I2C device; bus_num is ignored
- * Context: can sleep
- *
- * This deprecated function has the same functionality as
- * @i2c_new_client_device, it just returns NULL instead of an ERR_PTR in case of
- * an error for compatibility with current I2C API. It will be removed once all
- * users are converted.
- *
- * This returns the new i2c client, which may be saved for later use with
- * i2c_unregister_device(); or NULL to indicate an error.
- */
-struct i2c_client *
-i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
-{
-       struct i2c_client *ret;
-
-       ret = i2c_new_client_device(adap, info);
-       return IS_ERR(ret) ? NULL : ret;
-}
-EXPORT_SYMBOL_GPL(i2c_new_device);
-
-
 /**
  * i2c_unregister_device - reverse effect of i2c_new_*_device()
  * @client: value returned from i2c_new_*_device()
index b34d2ff..56bb840 100644 (file)
@@ -4,7 +4,7 @@
  *
  * This file contains the SMBus functions which are always included in the I2C
  * core because they can be emulated via I2C. SMBus specific extensions
- * (e.g. smbalert) are handled in a seperate i2c-smbus module.
+ * (e.g. smbalert) are handled in a separate i2c-smbus module.
  *
  * All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl>
  * SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> and
index 6542523..13eacf6 100644 (file)
@@ -1021,7 +1021,7 @@ static int __init hp_sdc_register(void)
        hp_sdc.base_io   = (unsigned long) 0xf0428000;
        hp_sdc.data_io   = (unsigned long) hp_sdc.base_io + 1;
        hp_sdc.status_io = (unsigned long) hp_sdc.base_io + 3;
-       if (!probe_kernel_read(&i, (unsigned char *)hp_sdc.data_io, 1))
+       if (!copy_from_kernel_nofault(&i, (unsigned char *)hp_sdc.data_io, 1))
                hp_sdc.dev = (void *)1;
        hp_sdc.dev_err   = hp_sdc_init();
 #endif
index 39de94e..6548a60 100644 (file)
@@ -1389,7 +1389,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
                        if (__set_blocks(n1, n1->keys + n2->keys,
                                         block_bytes(b->c)) >
                            btree_blocks(new_nodes[i]))
-                               goto out_nocoalesce;
+                               goto out_unlock_nocoalesce;
 
                        keys = n2->keys;
                        /* Take the key of the node we're getting rid of */
@@ -1418,7 +1418,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
 
                if (__bch_keylist_realloc(&keylist,
                                          bkey_u64s(&new_nodes[i]->key)))
-                       goto out_nocoalesce;
+                       goto out_unlock_nocoalesce;
 
                bch_btree_node_write(new_nodes[i], &cl);
                bch_keylist_add(&keylist, &new_nodes[i]->key);
@@ -1464,6 +1464,10 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,
        /* Invalidated our iterator */
        return -EINTR;
 
+out_unlock_nocoalesce:
+       for (i = 0; i < nodes; i++)
+               mutex_unlock(&new_nodes[i]->write_lock);
+
 out_nocoalesce:
        closure_sync(&cl);
 
index f9975c2..2014016 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/genhd.h>
 #include <linux/idr.h>
 #include <linux/kthread.h>
+#include <linux/workqueue.h>
 #include <linux/module.h>
 #include <linux/random.h>
 #include <linux/reboot.h>
@@ -819,7 +820,8 @@ static void bcache_device_free(struct bcache_device *d)
 }
 
 static int bcache_device_init(struct bcache_device *d, unsigned int block_size,
-                             sector_t sectors, make_request_fn make_request_fn)
+                             sector_t sectors, make_request_fn make_request_fn,
+                             struct block_device *cached_bdev)
 {
        struct request_queue *q;
        const size_t max_stripes = min_t(size_t, INT_MAX,
@@ -885,6 +887,20 @@ static int bcache_device_init(struct bcache_device *d, unsigned int block_size,
        q->limits.io_min                = block_size;
        q->limits.logical_block_size    = block_size;
        q->limits.physical_block_size   = block_size;
+
+       if (q->limits.logical_block_size > PAGE_SIZE && cached_bdev) {
+               /*
+                * This should only happen with BCACHE_SB_VERSION_BDEV.
+                * Block/page size is checked for BCACHE_SB_VERSION_CDEV.
+                */
+               pr_info("%s: sb/logical block size (%u) greater than page size (%lu) falling back to device logical block size (%u)\n",
+                       d->disk->disk_name, q->limits.logical_block_size,
+                       PAGE_SIZE, bdev_logical_block_size(cached_bdev));
+
+               /* This also adjusts physical block size/min io size if needed */
+               blk_queue_logical_block_size(q, bdev_logical_block_size(cached_bdev));
+       }
+
        blk_queue_flag_set(QUEUE_FLAG_NONROT, d->disk->queue);
        blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, d->disk->queue);
        blk_queue_flag_set(QUEUE_FLAG_DISCARD, d->disk->queue);
@@ -1340,7 +1356,7 @@ static int cached_dev_init(struct cached_dev *dc, unsigned int block_size)
 
        ret = bcache_device_init(&dc->disk, block_size,
                         dc->bdev->bd_part->nr_sects - dc->sb.data_offset,
-                        cached_dev_make_request);
+                        cached_dev_make_request, dc->bdev);
        if (ret)
                return ret;
 
@@ -1453,7 +1469,7 @@ static int flash_dev_run(struct cache_set *c, struct uuid_entry *u)
        kobject_init(&d->kobj, &bch_flash_dev_ktype);
 
        if (bcache_device_init(d, block_bytes(c), u->sectors,
-                       flash_dev_make_request))
+                       flash_dev_make_request, NULL))
                goto err;
 
        bcache_device_attach(d, c, u - c->uuids);
@@ -2364,7 +2380,7 @@ static bool bch_is_open(struct block_device *bdev)
 }
 
 struct async_reg_args {
-       struct work_struct reg_work;
+       struct delayed_work reg_work;
        char *path;
        struct cache_sb *sb;
        struct cache_sb_disk *sb_disk;
@@ -2375,7 +2391,7 @@ static void register_bdev_worker(struct work_struct *work)
 {
        int fail = false;
        struct async_reg_args *args =
-               container_of(work, struct async_reg_args, reg_work);
+               container_of(work, struct async_reg_args, reg_work.work);
        struct cached_dev *dc;
 
        dc = kzalloc(sizeof(*dc), GFP_KERNEL);
@@ -2405,7 +2421,7 @@ static void register_cache_worker(struct work_struct *work)
 {
        int fail = false;
        struct async_reg_args *args =
-               container_of(work, struct async_reg_args, reg_work);
+               container_of(work, struct async_reg_args, reg_work.work);
        struct cache *ca;
 
        ca = kzalloc(sizeof(*ca), GFP_KERNEL);
@@ -2433,11 +2449,12 @@ out:
 static void register_device_aync(struct async_reg_args *args)
 {
        if (SB_IS_BDEV(args->sb))
-               INIT_WORK(&args->reg_work, register_bdev_worker);
+               INIT_DELAYED_WORK(&args->reg_work, register_bdev_worker);
        else
-               INIT_WORK(&args->reg_work, register_cache_worker);
+               INIT_DELAYED_WORK(&args->reg_work, register_cache_worker);
 
-       queue_work(system_wq, &args->reg_work);
+       /* 10 jiffies is enough for a delay */
+       queue_delayed_work(system_wq, &args->reg_work, 10);
 }
 
 static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
index 3362962..b02a3c7 100644 (file)
@@ -193,7 +193,7 @@ struct pwc_raw_frame {
                                   decompressor) */
        __u8   cmd[4];          /* the four byte of the command (in case of
                                   nala, only the first 3 bytes is filled) */
-       __u8   rawframe[0];     /* frame_size = H / 4 * vbandlength */
+       __u8   rawframe[];      /* frame_size = H / 4 * vbandlength */
 } __packed;
 
 /* intermediate buffers with raw data from the USB cam */
index db8cdf5..e9cacc2 100644 (file)
@@ -412,6 +412,7 @@ MODULE_DEVICE_TABLE(of, mt6360_pmu_of_id);
 
 static struct i2c_driver mt6360_pmu_driver = {
        .driver = {
+               .name = "mt6360_pmu",
                .pm = &mt6360_pmu_pm_ops,
                .of_match_table = of_match_ptr(mt6360_pmu_of_id),
        },
index bccd341..d5d2af4 100644 (file)
@@ -828,7 +828,7 @@ static void run_plant_and_detach_test(int is_early)
        char before[BREAK_INSTR_SIZE];
        char after[BREAK_INSTR_SIZE];
 
-       probe_kernel_read(before, (char *)kgdbts_break_test,
+       copy_from_kernel_nofault(before, (char *)kgdbts_break_test,
          BREAK_INSTR_SIZE);
        init_simple_test();
        ts.tst = plant_and_detach_test;
@@ -836,8 +836,8 @@ static void run_plant_and_detach_test(int is_early)
        /* Activate test with initial breakpoint */
        if (!is_early)
                kgdb_breakpoint();
-       probe_kernel_read(after, (char *)kgdbts_break_test,
-         BREAK_INSTR_SIZE);
+       copy_from_kernel_nofault(after, (char *)kgdbts_break_test,
+                       BREAK_INSTR_SIZE);
        if (memcmp(before, after, BREAK_INSTR_SIZE)) {
                printk(KERN_CRIT "kgdbts: ERROR kgdb corrupted memory\n");
                panic("kgdb memory corruption");
index efd1a1d..5d3c691 100644 (file)
@@ -552,6 +552,8 @@ static int bareudp_validate(struct nlattr *tb[], struct nlattr *data[],
 static int bareudp2info(struct nlattr *data[], struct bareudp_conf *conf,
                        struct netlink_ext_ack *extack)
 {
+       memset(conf, 0, sizeof(*conf));
+
        if (!data[IFLA_BAREUDP_PORT]) {
                NL_SET_ERR_MSG(extack, "port not specified");
                return -EINVAL;
index d08a3d5..6ad83a8 100644 (file)
@@ -146,7 +146,7 @@ struct pciefd_rx_dma {
        __le32 irq_status;
        __le32 sys_time_low;
        __le32 sys_time_high;
-       struct pucan_rx_msg msg[0];
+       struct pucan_rx_msg msg[];
 } __packed __aligned(4);
 
 /* Tx Link record */
@@ -194,7 +194,7 @@ struct pciefd_board {
        struct pci_dev *pci_dev;
        int can_count;
        spinlock_t cmd_lock;            /* 64-bits cmds must be atomic */
-       struct pciefd_can *can[0];      /* array of network devices */
+       struct pciefd_can *can[];       /* array of network devices */
 };
 
 /* supported device ids. */
index bc0e47c..1771345 100644 (file)
@@ -891,16 +891,16 @@ void sja1105_ptp_txtstamp_skb(struct dsa_switch *ds, int port,
 
        mutex_lock(&ptp_data->lock);
 
-       rc = sja1105_ptpclkval_read(priv, &ticks, NULL);
+       rc = sja1105_ptpegr_ts_poll(ds, port, &ts);
        if (rc < 0) {
-               dev_err(ds->dev, "Failed to read PTP clock: %d\n", rc);
+               dev_err(ds->dev, "timed out polling for tstamp\n");
                kfree_skb(skb);
                goto out;
        }
 
-       rc = sja1105_ptpegr_ts_poll(ds, port, &ts);
+       rc = sja1105_ptpclkval_read(priv, &ticks, NULL);
        if (rc < 0) {
-               dev_err(ds->dev, "timed out polling for tstamp\n");
+               dev_err(ds->dev, "Failed to read PTP clock: %d\n", rc);
                kfree_skb(skb);
                goto out;
        }
index b9b4edb..9b7f1af 100644 (file)
@@ -1249,8 +1249,12 @@ out_disable_adv_intr:
 
 static void __alx_stop(struct alx_priv *alx)
 {
-       alx_halt(alx);
        alx_free_irq(alx);
+
+       cancel_work_sync(&alx->link_check_wk);
+       cancel_work_sync(&alx->reset_wk);
+
+       alx_halt(alx);
        alx_free_rings(alx);
        alx_free_napis(alx);
 }
@@ -1855,9 +1859,6 @@ static void alx_remove(struct pci_dev *pdev)
        struct alx_priv *alx = pci_get_drvdata(pdev);
        struct alx_hw *hw = &alx->hw;
 
-       cancel_work_sync(&alx->link_check_wk);
-       cancel_work_sync(&alx->reset_wk);
-
        /* restore permanent mac address */
        alx_set_macaddr(hw, hw->perm_addr);
 
index c62589c..b93e05f 100644 (file)
@@ -10037,7 +10037,7 @@ static void bnxt_timer(struct timer_list *t)
        struct bnxt *bp = from_timer(bp, t, timer);
        struct net_device *dev = bp->dev;
 
-       if (!netif_running(dev))
+       if (!netif_running(dev) || !test_bit(BNXT_STATE_OPEN, &bp->state))
                return;
 
        if (atomic_read(&bp->intr_sem) != 0)
@@ -12133,19 +12133,9 @@ static int bnxt_resume(struct device *device)
                goto resume_exit;
        }
 
-       if (bnxt_hwrm_queue_qportcfg(bp)) {
-               rc = -ENODEV;
+       rc = bnxt_hwrm_func_qcaps(bp);
+       if (rc)
                goto resume_exit;
-       }
-
-       if (bp->hwrm_spec_code >= 0x10803) {
-               if (bnxt_alloc_ctx_mem(bp)) {
-                       rc = -ENODEV;
-                       goto resume_exit;
-               }
-       }
-       if (BNXT_NEW_RM(bp))
-               bnxt_hwrm_func_resc_qcaps(bp, false);
 
        if (bnxt_hwrm_func_drv_rgtr(bp, NULL, 0, false)) {
                rc = -ENODEV;
@@ -12161,6 +12151,8 @@ static int bnxt_resume(struct device *device)
 
 resume_exit:
        bnxt_ulp_start(bp, rc);
+       if (!rc)
+               bnxt_reenable_sriov(bp);
        rtnl_unlock();
        return rc;
 }
@@ -12204,6 +12196,9 @@ static pci_ers_result_t bnxt_io_error_detected(struct pci_dev *pdev,
                bnxt_close(netdev);
 
        pci_disable_device(pdev);
+       bnxt_free_ctx_mem(bp);
+       kfree(bp->ctx);
+       bp->ctx = NULL;
        rtnl_unlock();
 
        /* Request a slot slot reset. */
@@ -12237,12 +12232,16 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
                pci_set_master(pdev);
 
                err = bnxt_hwrm_func_reset(bp);
-               if (!err && netif_running(netdev))
-                       err = bnxt_open(netdev);
-
-               if (!err)
-                       result = PCI_ERS_RESULT_RECOVERED;
+               if (!err) {
+                       err = bnxt_hwrm_func_qcaps(bp);
+                       if (!err && netif_running(netdev))
+                               err = bnxt_open(netdev);
+               }
                bnxt_ulp_start(bp, err);
+               if (!err) {
+                       bnxt_reenable_sriov(bp);
+                       result = PCI_ERS_RESULT_RECOVERED;
+               }
        }
 
        if (result != PCI_ERS_RESULT_RECOVERED) {
index 5b9d7c6..6793307 100644 (file)
@@ -2565,15 +2565,14 @@ static int macb_open(struct net_device *dev)
        if (bp->ptp_info)
                bp->ptp_info->ptp_init(dev);
 
+       return 0;
+
 napi_exit:
        for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue)
                napi_disable(&queue->napi);
 pm_exit:
-       if (err) {
-               pm_runtime_put_sync(&bp->pdev->dev);
-               return err;
-       }
-       return 0;
+       pm_runtime_put_sync(&bp->pdev->dev);
+       return err;
 }
 
 static int macb_close(struct net_device *dev)
index 1b4d04e..2baf7b3 100644 (file)
@@ -842,12 +842,13 @@ static int ibmvnic_login(struct net_device *netdev)
        struct ibmvnic_adapter *adapter = netdev_priv(netdev);
        unsigned long timeout = msecs_to_jiffies(30000);
        int retry_count = 0;
+       int retries = 10;
        bool retry;
        int rc;
 
        do {
                retry = false;
-               if (retry_count > IBMVNIC_MAX_QUEUES) {
+               if (retry_count > retries) {
                        netdev_warn(netdev, "Login attempts exceeded\n");
                        return -1;
                }
@@ -862,11 +863,23 @@ static int ibmvnic_login(struct net_device *netdev)
 
                if (!wait_for_completion_timeout(&adapter->init_done,
                                                 timeout)) {
-                       netdev_warn(netdev, "Login timed out\n");
-                       return -1;
+                       netdev_warn(netdev, "Login timed out, retrying...\n");
+                       retry = true;
+                       adapter->init_done_rc = 0;
+                       retry_count++;
+                       continue;
                }
 
-               if (adapter->init_done_rc == PARTIALSUCCESS) {
+               if (adapter->init_done_rc == ABORTED) {
+                       netdev_warn(netdev, "Login aborted, retrying...\n");
+                       retry = true;
+                       adapter->init_done_rc = 0;
+                       retry_count++;
+                       /* FW or device may be busy, so
+                        * wait a bit before retrying login
+                        */
+                       msleep(500);
+               } else if (adapter->init_done_rc == PARTIALSUCCESS) {
                        retry_count++;
                        release_sub_crqs(adapter, 1);
 
index d9fa460..4b2de08 100644 (file)
@@ -151,10 +151,8 @@ static int e1000_vlan_rx_kill_vid(struct net_device *netdev,
                                  __be16 proto, u16 vid);
 static void e1000_restore_vlan(struct e1000_adapter *adapter);
 
-#ifdef CONFIG_PM
-static int e1000_suspend(struct pci_dev *pdev, pm_message_t state);
-static int e1000_resume(struct pci_dev *pdev);
-#endif
+static int __maybe_unused e1000_suspend(struct device *dev);
+static int __maybe_unused e1000_resume(struct device *dev);
 static void e1000_shutdown(struct pci_dev *pdev);
 
 #ifdef CONFIG_NET_POLL_CONTROLLER
@@ -179,16 +177,16 @@ static const struct pci_error_handlers e1000_err_handler = {
        .resume = e1000_io_resume,
 };
 
+static SIMPLE_DEV_PM_OPS(e1000_pm_ops, e1000_suspend, e1000_resume);
+
 static struct pci_driver e1000_driver = {
        .name     = e1000_driver_name,
        .id_table = e1000_pci_tbl,
        .probe    = e1000_probe,
        .remove   = e1000_remove,
-#ifdef CONFIG_PM
-       /* Power Management Hooks */
-       .suspend  = e1000_suspend,
-       .resume   = e1000_resume,
-#endif
+       .driver = {
+               .pm = &e1000_pm_ops,
+       },
        .shutdown = e1000_shutdown,
        .err_handler = &e1000_err_handler
 };
@@ -5060,9 +5058,6 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
        struct e1000_hw *hw = &adapter->hw;
        u32 ctrl, ctrl_ext, rctl, status;
        u32 wufc = adapter->wol;
-#ifdef CONFIG_PM
-       int retval = 0;
-#endif
 
        netif_device_detach(netdev);
 
@@ -5076,12 +5071,6 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
                e1000_down(adapter);
        }
 
-#ifdef CONFIG_PM
-       retval = pci_save_state(pdev);
-       if (retval)
-               return retval;
-#endif
-
        status = er32(STATUS);
        if (status & E1000_STATUS_LU)
                wufc &= ~E1000_WUFC_LNKC;
@@ -5142,37 +5131,26 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
        return 0;
 }
 
-#ifdef CONFIG_PM
-static int e1000_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused e1000_suspend(struct device *dev)
 {
        int retval;
+       struct pci_dev *pdev = to_pci_dev(dev);
        bool wake;
 
        retval = __e1000_shutdown(pdev, &wake);
-       if (retval)
-               return retval;
-
-       if (wake) {
-               pci_prepare_to_sleep(pdev);
-       } else {
-               pci_wake_from_d3(pdev, false);
-               pci_set_power_state(pdev, PCI_D3hot);
-       }
+       device_set_wakeup_enable(dev, wake);
 
-       return 0;
+       return retval;
 }
 
-static int e1000_resume(struct pci_dev *pdev)
+static int __maybe_unused e1000_resume(struct device *dev)
 {
+       struct pci_dev *pdev = to_pci_dev(dev);
        struct net_device *netdev = pci_get_drvdata(pdev);
        struct e1000_adapter *adapter = netdev_priv(netdev);
        struct e1000_hw *hw = &adapter->hw;
        u32 err;
 
-       pci_set_power_state(pdev, PCI_D0);
-       pci_restore_state(pdev);
-       pci_save_state(pdev);
-
        if (adapter->need_ioport)
                err = pci_enable_device(pdev);
        else
@@ -5209,7 +5187,6 @@ static int e1000_resume(struct pci_dev *pdev)
 
        return 0;
 }
-#endif
 
 static void e1000_shutdown(struct pci_dev *pdev)
 {
index a279f4f..6f6479c 100644 (file)
@@ -6349,7 +6349,6 @@ fl_out:
        pm_runtime_put_sync(netdev->dev.parent);
 }
 
-#ifdef CONFIG_PM_SLEEP
 /* S0ix implementation */
 static void e1000e_s0ix_entry_flow(struct e1000_adapter *adapter)
 {
@@ -6571,7 +6570,6 @@ static void e1000e_s0ix_exit_flow(struct e1000_adapter *adapter)
        mac_data &= ~E1000_CTRL_EXT_FORCE_SMBUS;
        ew32(CTRL_EXT, mac_data);
 }
-#endif /* CONFIG_PM_SLEEP */
 
 static int e1000e_pm_freeze(struct device *dev)
 {
@@ -6611,11 +6609,17 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
        struct net_device *netdev = pci_get_drvdata(pdev);
        struct e1000_adapter *adapter = netdev_priv(netdev);
        struct e1000_hw *hw = &adapter->hw;
-       u32 ctrl, ctrl_ext, rctl, status;
-       /* Runtime suspend should only enable wakeup for link changes */
-       u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol;
+       u32 ctrl, ctrl_ext, rctl, status, wufc;
        int retval = 0;
 
+       /* Runtime suspend should only enable wakeup for link changes */
+       if (runtime)
+               wufc = E1000_WUFC_LNKC;
+       else if (device_may_wakeup(&pdev->dev))
+               wufc = adapter->wol;
+       else
+               wufc = 0;
+
        status = er32(STATUS);
        if (status & E1000_STATUS_LU)
                wufc &= ~E1000_WUFC_LNKC;
@@ -6672,7 +6676,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
        if (adapter->hw.phy.type == e1000_phy_igp_3) {
                e1000e_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw);
        } else if (hw->mac.type >= e1000_pch_lpt) {
-               if (!(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC)))
+               if (wufc && !(wufc & (E1000_WUFC_EX | E1000_WUFC_MC | E1000_WUFC_BC)))
                        /* ULP does not support wake from unicast, multicast
                         * or broadcast.
                         */
@@ -6869,7 +6873,6 @@ err_irq:
        return rc;
 }
 
-#ifdef CONFIG_PM
 static int __e1000_resume(struct pci_dev *pdev)
 {
        struct net_device *netdev = pci_get_drvdata(pdev);
@@ -6935,8 +6938,7 @@ static int __e1000_resume(struct pci_dev *pdev)
        return 0;
 }
 
-#ifdef CONFIG_PM_SLEEP
-static int e1000e_pm_suspend(struct device *dev)
+static __maybe_unused int e1000e_pm_suspend(struct device *dev)
 {
        struct net_device *netdev = pci_get_drvdata(to_pci_dev(dev));
        struct e1000_adapter *adapter = netdev_priv(netdev);
@@ -6960,7 +6962,7 @@ static int e1000e_pm_suspend(struct device *dev)
        return rc;
 }
 
-static int e1000e_pm_resume(struct device *dev)
+static __maybe_unused int e1000e_pm_resume(struct device *dev)
 {
        struct net_device *netdev = pci_get_drvdata(to_pci_dev(dev));
        struct e1000_adapter *adapter = netdev_priv(netdev);
@@ -6979,9 +6981,8 @@ static int e1000e_pm_resume(struct device *dev)
 
        return e1000e_pm_thaw(dev);
 }
-#endif /* CONFIG_PM_SLEEP */
 
-static int e1000e_pm_runtime_idle(struct device *dev)
+static __maybe_unused int e1000e_pm_runtime_idle(struct device *dev)
 {
        struct net_device *netdev = dev_get_drvdata(dev);
        struct e1000_adapter *adapter = netdev_priv(netdev);
@@ -6997,7 +6998,7 @@ static int e1000e_pm_runtime_idle(struct device *dev)
        return -EBUSY;
 }
 
-static int e1000e_pm_runtime_resume(struct device *dev)
+static __maybe_unused int e1000e_pm_runtime_resume(struct device *dev)
 {
        struct pci_dev *pdev = to_pci_dev(dev);
        struct net_device *netdev = pci_get_drvdata(pdev);
@@ -7014,7 +7015,7 @@ static int e1000e_pm_runtime_resume(struct device *dev)
        return rc;
 }
 
-static int e1000e_pm_runtime_suspend(struct device *dev)
+static __maybe_unused int e1000e_pm_runtime_suspend(struct device *dev)
 {
        struct pci_dev *pdev = to_pci_dev(dev);
        struct net_device *netdev = pci_get_drvdata(pdev);
@@ -7039,7 +7040,6 @@ static int e1000e_pm_runtime_suspend(struct device *dev)
 
        return 0;
 }
-#endif /* CONFIG_PM */
 
 static void e1000_shutdown(struct pci_dev *pdev)
 {
index 2b5dad2..24f4d8e 100644 (file)
@@ -1544,7 +1544,7 @@ static void mvpp2_read_stats(struct mvpp2_port *port)
        for (q = 0; q < port->ntxqs; q++)
                for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_txq_regs); i++)
                        *pstats++ += mvpp2_read_index(port->priv,
-                                                     MVPP22_CTRS_TX_CTR(port->id, i),
+                                                     MVPP22_CTRS_TX_CTR(port->id, q),
                                                      mvpp2_ethtool_txq_regs[i].offset);
 
        /* Rxqs are numbered from 0 from the user standpoint, but not from the
@@ -1553,7 +1553,7 @@ static void mvpp2_read_stats(struct mvpp2_port *port)
        for (q = 0; q < port->nrxqs; q++)
                for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_rxq_regs); i++)
                        *pstats++ += mvpp2_read_index(port->priv,
-                                                     port->first_rxq + i,
+                                                     port->first_rxq + q,
                                                      mvpp2_ethtool_rxq_regs[i].offset);
 }
 
@@ -5983,8 +5983,8 @@ static int mvpp2_remove(struct platform_device *pdev)
 {
        struct mvpp2 *priv = platform_get_drvdata(pdev);
        struct fwnode_handle *fwnode = pdev->dev.fwnode;
+       int i = 0, poolnum = MVPP2_BM_POOLS_NUM;
        struct fwnode_handle *port_fwnode;
-       int i = 0;
 
        mvpp2_dbgfs_cleanup(priv);
 
@@ -5998,7 +5998,10 @@ static int mvpp2_remove(struct platform_device *pdev)
 
        destroy_workqueue(priv->stats_queue);
 
-       for (i = 0; i < MVPP2_BM_POOLS_NUM; i++) {
+       if (priv->percpu_pools)
+               poolnum = mvpp2_get_nrxqs(priv) * 2;
+
+       for (i = 0; i < poolnum; i++) {
                struct mvpp2_bm_pool *bm_pool = &priv->bm_pools[i];
 
                mvpp2_bm_pool_destroy(&pdev->dev, priv, bm_pool);
index f1ace4f..3e765bd 100644 (file)
@@ -24,7 +24,6 @@
 #include <linux/regmap.h>
 #include <linux/skbuff.h>
 #include <linux/spinlock.h>
-#include <linux/workqueue.h>
 
 #define MTK_STAR_DRVNAME                       "mtk_star_emac"
 
@@ -262,7 +261,6 @@ struct mtk_star_priv {
        spinlock_t lock;
 
        struct rtnl_link_stats64 stats;
-       struct work_struct stats_work;
 };
 
 static struct device *mtk_star_get_dev(struct mtk_star_priv *priv)
@@ -432,42 +430,6 @@ static void mtk_star_intr_disable(struct mtk_star_priv *priv)
        regmap_write(priv->regs, MTK_STAR_REG_INT_MASK, ~0);
 }
 
-static void mtk_star_intr_enable_tx(struct mtk_star_priv *priv)
-{
-       regmap_clear_bits(priv->regs, MTK_STAR_REG_INT_MASK,
-                         MTK_STAR_BIT_INT_STS_TNTC);
-}
-
-static void mtk_star_intr_enable_rx(struct mtk_star_priv *priv)
-{
-       regmap_clear_bits(priv->regs, MTK_STAR_REG_INT_MASK,
-                         MTK_STAR_BIT_INT_STS_FNRC);
-}
-
-static void mtk_star_intr_enable_stats(struct mtk_star_priv *priv)
-{
-       regmap_clear_bits(priv->regs, MTK_STAR_REG_INT_MASK,
-                         MTK_STAR_REG_INT_STS_MIB_CNT_TH);
-}
-
-static void mtk_star_intr_disable_tx(struct mtk_star_priv *priv)
-{
-       regmap_set_bits(priv->regs, MTK_STAR_REG_INT_MASK,
-                       MTK_STAR_BIT_INT_STS_TNTC);
-}
-
-static void mtk_star_intr_disable_rx(struct mtk_star_priv *priv)
-{
-       regmap_set_bits(priv->regs, MTK_STAR_REG_INT_MASK,
-                       MTK_STAR_BIT_INT_STS_FNRC);
-}
-
-static void mtk_star_intr_disable_stats(struct mtk_star_priv *priv)
-{
-       regmap_set_bits(priv->regs, MTK_STAR_REG_INT_MASK,
-                       MTK_STAR_REG_INT_STS_MIB_CNT_TH);
-}
-
 static unsigned int mtk_star_intr_read(struct mtk_star_priv *priv)
 {
        unsigned int val;
@@ -663,20 +625,6 @@ static void mtk_star_update_stats(struct mtk_star_priv *priv)
        stats->rx_errors += stats->rx_fifo_errors;
 }
 
-/* This runs in process context and parallel TX and RX paths executing in
- * napi context may result in losing some stats data but this should happen
- * seldom enough to be acceptable.
- */
-static void mtk_star_update_stats_work(struct work_struct *work)
-{
-       struct mtk_star_priv *priv = container_of(work, struct mtk_star_priv,
-                                                stats_work);
-
-       mtk_star_update_stats(priv);
-       mtk_star_reset_counters(priv);
-       mtk_star_intr_enable_stats(priv);
-}
-
 static struct sk_buff *mtk_star_alloc_skb(struct net_device *ndev)
 {
        uintptr_t tail, offset;
@@ -767,42 +715,25 @@ static void mtk_star_free_tx_skbs(struct mtk_star_priv *priv)
        mtk_star_ring_free_skbs(priv, ring, mtk_star_dma_unmap_tx);
 }
 
-/* All processing for TX and RX happens in the napi poll callback. */
+/* All processing for TX and RX happens in the napi poll callback.
+ *
+ * FIXME: The interrupt handling should be more fine-grained with each
+ * interrupt enabled/disabled independently when needed. Unfortunatly this
+ * turned out to impact the driver's stability and until we have something
+ * working properly, we're disabling all interrupts during TX & RX processing
+ * or when resetting the counter registers.
+ */
 static irqreturn_t mtk_star_handle_irq(int irq, void *data)
 {
        struct mtk_star_priv *priv;
        struct net_device *ndev;
-       bool need_napi = false;
-       unsigned int status;
 
        ndev = data;
        priv = netdev_priv(ndev);
 
        if (netif_running(ndev)) {
-               status = mtk_star_intr_read(priv);
-
-               if (status & MTK_STAR_BIT_INT_STS_TNTC) {
-                       mtk_star_intr_disable_tx(priv);
-                       need_napi = true;
-               }
-
-               if (status & MTK_STAR_BIT_INT_STS_FNRC) {
-                       mtk_star_intr_disable_rx(priv);
-                       need_napi = true;
-               }
-
-               if (need_napi)
-                       napi_schedule(&priv->napi);
-
-               /* One of the counters reached 0x8000000 - update stats and
-                * reset all counters.
-                */
-               if (unlikely(status & MTK_STAR_REG_INT_STS_MIB_CNT_TH)) {
-                       mtk_star_intr_disable_stats(priv);
-                       schedule_work(&priv->stats_work);
-               }
-
-               mtk_star_intr_ack_all(priv);
+               mtk_star_intr_disable(priv);
+               napi_schedule(&priv->napi);
        }
 
        return IRQ_HANDLED;
@@ -1169,8 +1100,6 @@ static void mtk_star_tx_complete_all(struct mtk_star_priv *priv)
        if (wake && netif_queue_stopped(ndev))
                netif_wake_queue(ndev);
 
-       mtk_star_intr_enable_tx(priv);
-
        spin_unlock(&priv->lock);
 }
 
@@ -1332,20 +1261,32 @@ static int mtk_star_process_rx(struct mtk_star_priv *priv, int budget)
 static int mtk_star_poll(struct napi_struct *napi, int budget)
 {
        struct mtk_star_priv *priv;
+       unsigned int status;
        int received = 0;
 
        priv = container_of(napi, struct mtk_star_priv, napi);
 
-       /* Clean-up all TX descriptors. */
-       mtk_star_tx_complete_all(priv);
-       /* Receive up to $budget packets. */
-       received = mtk_star_process_rx(priv, budget);
+       status = mtk_star_intr_read(priv);
+       mtk_star_intr_ack_all(priv);
 
-       if (received < budget) {
-               napi_complete_done(napi, received);
-               mtk_star_intr_enable_rx(priv);
+       if (status & MTK_STAR_BIT_INT_STS_TNTC)
+               /* Clean-up all TX descriptors. */
+               mtk_star_tx_complete_all(priv);
+
+       if (status & MTK_STAR_BIT_INT_STS_FNRC)
+               /* Receive up to $budget packets. */
+               received = mtk_star_process_rx(priv, budget);
+
+       if (unlikely(status & MTK_STAR_REG_INT_STS_MIB_CNT_TH)) {
+               mtk_star_update_stats(priv);
+               mtk_star_reset_counters(priv);
        }
 
+       if (received < budget)
+               napi_complete_done(napi, received);
+
+       mtk_star_intr_enable(priv);
+
        return received;
 }
 
@@ -1532,7 +1473,6 @@ static int mtk_star_probe(struct platform_device *pdev)
        ndev->max_mtu = MTK_STAR_MAX_FRAME_SIZE;
 
        spin_lock_init(&priv->lock);
-       INIT_WORK(&priv->stats_work, mtk_star_update_stats_work);
 
        base = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(base))
index 5ffa32b..55af877 100644 (file)
@@ -978,8 +978,10 @@ int __mlxsw_sp_port_headroom_set(struct mlxsw_sp_port *mlxsw_sp_port, int mtu,
 
                lossy = !(pfc || pause_en);
                thres_cells = mlxsw_sp_pg_buf_threshold_get(mlxsw_sp, mtu);
+               mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, &thres_cells);
                delay_cells = mlxsw_sp_pg_buf_delay_get(mlxsw_sp, mtu, delay,
                                                        pfc, pause_en);
+               mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, &delay_cells);
                total_cells = thres_cells + delay_cells;
 
                taken_headroom_cells += total_cells;
index 6f96ca5..6e87457 100644 (file)
@@ -374,6 +374,19 @@ mlxsw_sp_port_vlan_find_by_vid(const struct mlxsw_sp_port *mlxsw_sp_port,
        return NULL;
 }
 
+static inline void
+mlxsw_sp_port_headroom_8x_adjust(const struct mlxsw_sp_port *mlxsw_sp_port,
+                                u16 *p_size)
+{
+       /* Ports with eight lanes use two headroom buffers between which the
+        * configured headroom size is split. Therefore, multiply the calculated
+        * headroom size by two.
+        */
+       if (mlxsw_sp_port->mapping.width != 8)
+               return;
+       *p_size *= 2;
+}
+
 enum mlxsw_sp_flood_type {
        MLXSW_SP_FLOOD_TYPE_UC,
        MLXSW_SP_FLOOD_TYPE_BC,
index 21bfb2f..f25a8b0 100644 (file)
@@ -312,6 +312,7 @@ static int mlxsw_sp_port_pb_init(struct mlxsw_sp_port *mlxsw_sp_port)
 
                if (i == MLXSW_SP_PB_UNUSED)
                        continue;
+               mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, &size);
                mlxsw_reg_pbmc_lossy_buffer_pack(pbmc_pl, i, size);
        }
        mlxsw_reg_pbmc_lossy_buffer_pack(pbmc_pl,
index 304eb8c..f843545 100644 (file)
@@ -782,6 +782,7 @@ mlxsw_sp_span_port_buffer_update(struct mlxsw_sp_port *mlxsw_sp_port, u16 mtu)
                speed = 0;
 
        buffsize = mlxsw_sp_span_buffsize_get(mlxsw_sp, speed, mtu);
+       mlxsw_sp_port_headroom_8x_adjust(mlxsw_sp_port, (u16 *) &buffsize);
        mlxsw_reg_sbib_pack(sbib_pl, mlxsw_sp_port->local_port, buffsize);
        return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sbib), sbib_pl);
 }
index c5c5c68..f1711ac 100644 (file)
@@ -3091,6 +3091,8 @@ static const struct pci_device_id lan743x_pcidev_tbl[] = {
        { 0, }
 };
 
+MODULE_DEVICE_TABLE(pci, lan743x_pcidev_tbl);
+
 static struct pci_driver lan743x_pcidev_driver = {
        .name     = DRIVER_NAME,
        .id_table = lan743x_pcidev_tbl,
index 8d7b9bb..1003763 100644 (file)
@@ -269,7 +269,7 @@ static ssize_t qlcnic_sysfs_read_crb(struct file *filp, struct kobject *kobj,
                                     struct bin_attribute *attr, char *buf,
                                     loff_t offset, size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        int ret;
 
@@ -286,7 +286,7 @@ static ssize_t qlcnic_sysfs_write_crb(struct file *filp, struct kobject *kobj,
                                      struct bin_attribute *attr, char *buf,
                                      loff_t offset, size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        int ret;
 
@@ -315,7 +315,7 @@ static ssize_t qlcnic_sysfs_read_mem(struct file *filp, struct kobject *kobj,
                                     struct bin_attribute *attr, char *buf,
                                     loff_t offset, size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        u64 data;
        int ret;
@@ -337,7 +337,7 @@ static ssize_t qlcnic_sysfs_write_mem(struct file *filp, struct kobject *kobj,
                                      struct bin_attribute *attr, char *buf,
                                      loff_t offset, size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        u64 data;
        int ret;
@@ -402,7 +402,7 @@ static ssize_t qlcnic_sysfs_write_pm_config(struct file *filp,
                                            char *buf, loff_t offset,
                                            size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        struct qlcnic_pm_func_cfg *pm_cfg;
        u32 id, action, pci_func;
@@ -452,7 +452,7 @@ static ssize_t qlcnic_sysfs_read_pm_config(struct file *filp,
                                           char *buf, loff_t offset,
                                           size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        struct qlcnic_pm_func_cfg *pm_cfg;
        u8 pci_func;
@@ -545,7 +545,7 @@ static ssize_t qlcnic_sysfs_write_esw_config(struct file *file,
                                             char *buf, loff_t offset,
                                             size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        struct qlcnic_esw_func_cfg *esw_cfg;
        struct qlcnic_npar_info *npar;
@@ -629,7 +629,7 @@ static ssize_t qlcnic_sysfs_read_esw_config(struct file *file,
                                            char *buf, loff_t offset,
                                            size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        struct qlcnic_esw_func_cfg *esw_cfg;
        u8 pci_func;
@@ -681,7 +681,7 @@ static ssize_t qlcnic_sysfs_write_npar_config(struct file *file,
                                              char *buf, loff_t offset,
                                              size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        struct qlcnic_info nic_info;
        struct qlcnic_npar_func_cfg *np_cfg;
@@ -728,7 +728,7 @@ static ssize_t qlcnic_sysfs_read_npar_config(struct file *file,
                                             char *buf, loff_t offset,
                                             size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        struct qlcnic_npar_func_cfg *np_cfg;
        struct qlcnic_info nic_info;
@@ -775,7 +775,7 @@ static ssize_t qlcnic_sysfs_get_port_stats(struct file *file,
                                           char *buf, loff_t offset,
                                           size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        struct qlcnic_esw_statistics port_stats;
        int ret;
@@ -810,7 +810,7 @@ static ssize_t qlcnic_sysfs_get_esw_stats(struct file *file,
                                          char *buf, loff_t offset,
                                          size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        struct qlcnic_esw_statistics esw_stats;
        int ret;
@@ -845,7 +845,7 @@ static ssize_t qlcnic_sysfs_clear_esw_stats(struct file *file,
                                            char *buf, loff_t offset,
                                            size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        int ret;
 
@@ -875,7 +875,7 @@ static ssize_t qlcnic_sysfs_clear_port_stats(struct file *file,
                                             size_t size)
 {
 
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        int ret;
 
@@ -904,7 +904,7 @@ static ssize_t qlcnic_sysfs_read_pci_config(struct file *file,
                                            char *buf, loff_t offset,
                                            size_t size)
 {
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
        struct qlcnic_pci_func_cfg *pci_cfg;
        struct qlcnic_pci_info *pci_info;
@@ -946,7 +946,7 @@ static ssize_t qlcnic_83xx_sysfs_flash_read_handler(struct file *filp,
 {
        unsigned char *p_read_buf;
        int  ret, count;
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
 
        if (!size)
@@ -1124,7 +1124,7 @@ static ssize_t qlcnic_83xx_sysfs_flash_write_handler(struct file *filp,
        int  ret;
        static int flash_mode;
        unsigned long data;
-       struct device *dev = container_of(kobj, struct device, kobj);
+       struct device *dev = kobj_to_dev(kobj);
        struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
 
        ret = kstrtoul(buf, 16, &data);
index 7585cd2..fc99e71 100644 (file)
@@ -647,10 +647,10 @@ static int rocker_dma_rings_init(struct rocker *rocker)
 err_dma_event_ring_bufs_alloc:
        rocker_dma_ring_destroy(rocker, &rocker->event_ring);
 err_dma_event_ring_create:
+       rocker_dma_cmd_ring_waits_free(rocker);
+err_dma_cmd_ring_waits_alloc:
        rocker_dma_ring_bufs_free(rocker, &rocker->cmd_ring,
                                  PCI_DMA_BIDIRECTIONAL);
-err_dma_cmd_ring_waits_alloc:
-       rocker_dma_cmd_ring_waits_free(rocker);
 err_dma_cmd_ring_bufs_alloc:
        rocker_dma_ring_destroy(rocker, &rocker->cmd_ring);
        return err;
index fbaf3c9..f34c790 100644 (file)
 #define XAE_RAF_TXVSTRPMODE_MASK       0x00000180 /* Tx VLAN STRIP mode */
 #define XAE_RAF_RXVSTRPMODE_MASK       0x00000600 /* Rx VLAN STRIP mode */
 #define XAE_RAF_NEWFNCENBL_MASK                0x00000800 /* New function mode */
-/* Exteneded Multicast Filtering mode */
+/* Extended Multicast Filtering mode */
 #define XAE_RAF_EMULTIFLTRENBL_MASK    0x00001000
 #define XAE_RAF_STATSRST_MASK          0x00002000 /* Stats. Counter Reset */
 #define XAE_RAF_RXBADFRMEN_MASK                0x00004000 /* Recv Bad Frame Enable */
index ccbb5b4..4502f9c 100644 (file)
@@ -679,18 +679,8 @@ static umode_t region_visible(struct kobject *kobj, struct attribute *a, int n)
                return a->mode;
        }
 
-       if (a == &dev_attr_align.attr) {
-               int i;
-
-               for (i = 0; i < nd_region->ndr_mappings; i++) {
-                       struct nd_mapping *nd_mapping = &nd_region->mapping[i];
-                       struct nvdimm *nvdimm = nd_mapping->nvdimm;
-
-                       if (test_bit(NDD_LABELING, &nvdimm->flags))
-                               return a->mode;
-               }
-               return 0;
-       }
+       if (a == &dev_attr_align.attr)
+               return a->mode;
 
        if (a != &dev_attr_set_cookie.attr
                        && a != &dev_attr_available_size.attr)
index e1d097e..31478c0 100644 (file)
@@ -33,7 +33,7 @@ void flush_cpu_work(void);
 struct op_sample {
        unsigned long eip;
        unsigned long event;
-       unsigned long data[0];
+       unsigned long data[];
 };
 
 struct op_entry;
index 2c1a7d7..77fb23b 100644 (file)
@@ -43,7 +43,7 @@ struct samsung_usb2_phy_driver {
        struct regmap *reg_pmu;
        struct regmap *reg_sys;
        spinlock_t lock;
-       struct samsung_usb2_phy_instance instances[0];
+       struct samsung_usb2_phy_instance instances[];
 };
 
 struct samsung_usb2_common_phy {
index cb7e0f0..1f81569 100644 (file)
@@ -824,13 +824,12 @@ int imx_pinctrl_probe(struct platform_device *pdev,
                                return -EINVAL;
                        }
 
-                       ipctl->input_sel_base = devm_of_iomap(&pdev->dev, np,
-                                                             0, NULL);
+                       ipctl->input_sel_base = of_iomap(np, 0);
                        of_node_put(np);
-                       if (IS_ERR(ipctl->input_sel_base)) {
+                       if (!ipctl->input_sel_base) {
                                dev_err(&pdev->dev,
                                        "iomuxc input select base address not found\n");
-                               return PTR_ERR(ipctl->input_sel_base);
+                               return -ENOMEM;
                        }
                }
        }
index e06fb88..1f47a66 100644 (file)
@@ -126,10 +126,7 @@ static int mcp23s08_spi_regmap_init(struct mcp23s08 *mcp, struct device *dev,
        copy->name = name;
 
        mcp->regmap = devm_regmap_init(dev, &mcp23sxx_spi_regmap, mcp, copy);
-       if (IS_ERR(mcp->regmap))
-               return PTR_ERR(mcp->regmap);
-
-       return 0;
+       return PTR_ERR_OR_ZERO(mcp->regmap);
 }
 
 static int mcp23s08_probe(struct spi_device *spi)
index 1e0614d..f3a8a46 100644 (file)
@@ -958,7 +958,7 @@ static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np,
 }
 
 /**
- * smux_parse_one_pinctrl_entry() - parses a device tree mux entry
+ * pcs_parse_one_pinctrl_entry() - parses a device tree mux entry
  * @pctldev: pin controller device
  * @pcs: pinctrl driver instance
  * @np: device node of the mux entry
index 38c33a7..ec50a3b 100644 (file)
@@ -367,7 +367,8 @@ static const char * const wci20_groups[] = {
 
 static const char * const qpic_pad_groups[] = {
        "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio9", "gpio10",
-       "gpio11", "gpio17",
+       "gpio11", "gpio17", "gpio15", "gpio12", "gpio13", "gpio14", "gpio5",
+       "gpio6", "gpio7", "gpio8",
 };
 
 static const char * const burn0_groups[] = {
index fe0be8a..092a48e 100644 (file)
@@ -170,6 +170,7 @@ struct pmic_gpio_state {
        struct regmap   *map;
        struct pinctrl_dev *ctrl;
        struct gpio_chip chip;
+       struct irq_chip irq;
 };
 
 static const struct pinconf_generic_params pmic_gpio_bindings[] = {
@@ -917,16 +918,6 @@ static int pmic_gpio_populate(struct pmic_gpio_state *state,
        return 0;
 }
 
-static struct irq_chip pmic_gpio_irq_chip = {
-       .name = "spmi-gpio",
-       .irq_ack = irq_chip_ack_parent,
-       .irq_mask = irq_chip_mask_parent,
-       .irq_unmask = irq_chip_unmask_parent,
-       .irq_set_type = irq_chip_set_type_parent,
-       .irq_set_wake = irq_chip_set_wake_parent,
-       .flags = IRQCHIP_MASK_ON_SUSPEND,
-};
-
 static int pmic_gpio_domain_translate(struct irq_domain *domain,
                                      struct irq_fwspec *fwspec,
                                      unsigned long *hwirq,
@@ -1053,8 +1044,16 @@ static int pmic_gpio_probe(struct platform_device *pdev)
        if (!parent_domain)
                return -ENXIO;
 
+       state->irq.name = "spmi-gpio",
+       state->irq.irq_ack = irq_chip_ack_parent,
+       state->irq.irq_mask = irq_chip_mask_parent,
+       state->irq.irq_unmask = irq_chip_unmask_parent,
+       state->irq.irq_set_type = irq_chip_set_type_parent,
+       state->irq.irq_set_wake = irq_chip_set_wake_parent,
+       state->irq.flags = IRQCHIP_MASK_ON_SUSPEND,
+
        girq = &state->chip.irq;
-       girq->chip = &pmic_gpio_irq_chip;
+       girq->chip = &state->irq;
        girq->default_type = IRQ_TYPE_NONE;
        girq->handler = handle_level_irq;
        girq->fwnode = of_node_to_fwnode(state->dev->of_node);
index 21661f6..195cfe5 100644 (file)
@@ -731,8 +731,8 @@ static int tegra_pinctrl_resume(struct device *dev)
 }
 
 const struct dev_pm_ops tegra_pinctrl_pm = {
-       .suspend = &tegra_pinctrl_suspend,
-       .resume = &tegra_pinctrl_resume
+       .suspend_noirq = &tegra_pinctrl_suspend,
+       .resume_noirq = &tegra_pinctrl_resume
 };
 
 static bool tegra_pinctrl_gpio_node_has_range(struct tegra_pmx *pmx)
index 0e90c5d..eb8ed28 100644 (file)
@@ -39,7 +39,7 @@ struct rio_id_table {
        u16 start;      /* logical minimal id */
        u32 max;        /* max number of IDs in table */
        spinlock_t lock;
-       unsigned long table[0];
+       unsigned long table[];
 };
 
 static int next_destid = 0;
index eb13c47..bb1c840 100644 (file)
@@ -182,10 +182,9 @@ enum qdio_irq_poll_states {
 };
 
 struct qdio_input_q {
-       /* first ACK'ed buffer */
-       int ack_start;
-       /* how many SBALs are acknowledged */
-       int ack_count;
+       /* Batch of SBALs that we processed while polling the queue: */
+       unsigned int batch_start;
+       unsigned int batch_count;
        /* last time of noticing incoming data */
        u64 timestamp;
 };
index 286b044..da95c92 100644 (file)
@@ -110,8 +110,8 @@ static int qstat_show(struct seq_file *m, void *v)
        seq_printf(m, "nr_used: %d  ftc: %d\n",
                   atomic_read(&q->nr_buf_used), q->first_to_check);
        if (q->is_input_q) {
-               seq_printf(m, "ack start: %d  ack count: %d\n",
-                          q->u.in.ack_start, q->u.in.ack_count);
+               seq_printf(m, "batch start: %u  batch count: %u\n",
+                          q->u.in.batch_start, q->u.in.batch_count);
                seq_printf(m, "DSCI: %x   IRQs disabled: %u\n",
                           *(u8 *)q->irq_ptr->dsci,
                           test_bit(QDIO_IRQ_DISABLED,
index 610c05f..0c919a1 100644 (file)
@@ -254,10 +254,17 @@ static inline int set_buf_states(struct qdio_q *q, int bufnr,
        if (is_qebsm(q))
                return qdio_do_sqbs(q, state, bufnr, count);
 
+       /* Ensure that all preceding changes to the SBALs are visible: */
+       mb();
+
        for (i = 0; i < count; i++) {
-               xchg(&q->slsb.val[bufnr], state);
+               WRITE_ONCE(q->slsb.val[bufnr], state);
                bufnr = next_buf(bufnr);
        }
+
+       /* Make our SLSB changes visible: */
+       mb();
+
        return count;
 }
 
@@ -393,15 +400,15 @@ int debug_get_buf_state(struct qdio_q *q, unsigned int bufnr,
 
 static inline void qdio_stop_polling(struct qdio_q *q)
 {
-       if (!q->u.in.ack_count)
+       if (!q->u.in.batch_count)
                return;
 
        qperf_inc(q, stop_polling);
 
        /* show the card that we are not polling anymore */
-       set_buf_states(q, q->u.in.ack_start, SLSB_P_INPUT_NOT_INIT,
-                      q->u.in.ack_count);
-       q->u.in.ack_count = 0;
+       set_buf_states(q, q->u.in.batch_start, SLSB_P_INPUT_NOT_INIT,
+                      q->u.in.batch_count);
+       q->u.in.batch_count = 0;
 }
 
 static inline void account_sbals(struct qdio_q *q, unsigned int count)
@@ -441,42 +448,13 @@ static void process_buffer_error(struct qdio_q *q, unsigned int start,
 static inline void inbound_handle_work(struct qdio_q *q, unsigned int start,
                                       int count, bool auto_ack)
 {
-       int new;
-
-       if (auto_ack) {
-               if (!q->u.in.ack_count) {
-                       q->u.in.ack_count = count;
-                       q->u.in.ack_start = start;
-                       return;
-               }
-
-               /* delete the previous ACK's */
-               set_buf_states(q, q->u.in.ack_start, SLSB_P_INPUT_NOT_INIT,
-                              q->u.in.ack_count);
-               q->u.in.ack_count = count;
-               q->u.in.ack_start = start;
-               return;
-       }
-
-       /*
-        * ACK the newest buffer. The ACK will be removed in qdio_stop_polling
-        * or by the next inbound run.
-        */
-       new = add_buf(start, count - 1);
-       set_buf_state(q, new, SLSB_P_INPUT_ACK);
-
-       /* delete the previous ACKs */
-       if (q->u.in.ack_count)
-               set_buf_states(q, q->u.in.ack_start, SLSB_P_INPUT_NOT_INIT,
-                              q->u.in.ack_count);
+       /* ACK the newest SBAL: */
+       if (!auto_ack)
+               set_buf_state(q, add_buf(start, count - 1), SLSB_P_INPUT_ACK);
 
-       q->u.in.ack_count = 1;
-       q->u.in.ack_start = new;
-       count--;
-       if (!count)
-               return;
-       /* need to change ALL buffers to get more interrupts */
-       set_buf_states(q, start, SLSB_P_INPUT_NOT_INIT, count);
+       if (!q->u.in.batch_count)
+               q->u.in.batch_start = start;
+       q->u.in.batch_count += count;
 }
 
 static int get_inbound_buffer_frontier(struct qdio_q *q, unsigned int start)
@@ -525,15 +503,18 @@ static int get_inbound_buffer_frontier(struct qdio_q *q, unsigned int start)
                        account_sbals_error(q, count);
                return count;
        case SLSB_CU_INPUT_EMPTY:
-       case SLSB_P_INPUT_NOT_INIT:
-       case SLSB_P_INPUT_ACK:
                if (q->irq_ptr->perf_stat_enabled)
                        q->q_stats.nr_sbal_nop++;
                DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "in nop:%1d %#02x",
                              q->nr, start);
                return 0;
+       case SLSB_P_INPUT_NOT_INIT:
+       case SLSB_P_INPUT_ACK:
+               /* We should never see this state, throw a WARN: */
        default:
-               WARN_ON_ONCE(1);
+               dev_WARN_ONCE(&q->irq_ptr->cdev->dev, 1,
+                             "found state %#x at index %u on queue %u\n",
+                             state, start, q->nr);
                return 0;
        }
 }
@@ -738,11 +719,14 @@ static int get_outbound_buffer_frontier(struct qdio_q *q, unsigned int start)
                DBF_DEV_EVENT(DBF_INFO, q->irq_ptr, "out primed:%1d",
                              q->nr);
                return 0;
-       case SLSB_P_OUTPUT_NOT_INIT:
        case SLSB_P_OUTPUT_HALTED:
                return 0;
+       case SLSB_P_OUTPUT_NOT_INIT:
+               /* We should never see this state, throw a WARN: */
        default:
-               WARN_ON_ONCE(1);
+               dev_WARN_ONCE(&q->irq_ptr->cdev->dev, 1,
+                             "found state %#x at index %u on queue %u\n",
+                             state, start, q->nr);
                return 0;
        }
 }
@@ -938,10 +922,10 @@ static void qdio_int_handler_pci(struct qdio_irq *irq_ptr)
        }
 }
 
-static void qdio_handle_activate_check(struct ccw_device *cdev,
-                               unsigned long intparm, int cstat, int dstat)
+static void qdio_handle_activate_check(struct qdio_irq *irq_ptr,
+                                      unsigned long intparm, int cstat,
+                                      int dstat)
 {
-       struct qdio_irq *irq_ptr = cdev->private->qdio_data;
        struct qdio_q *q;
 
        DBF_ERROR("%4x ACT CHECK", irq_ptr->schid.sch_no);
@@ -968,11 +952,9 @@ no_handler:
        lgr_info_log();
 }
 
-static void qdio_establish_handle_irq(struct ccw_device *cdev, int cstat,
+static void qdio_establish_handle_irq(struct qdio_irq *irq_ptr, int cstat,
                                      int dstat)
 {
-       struct qdio_irq *irq_ptr = cdev->private->qdio_data;
-
        DBF_DEV_EVENT(DBF_INFO, irq_ptr, "qest irq");
 
        if (cstat)
@@ -1019,7 +1001,7 @@ void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,
 
        switch (irq_ptr->state) {
        case QDIO_IRQ_STATE_INACTIVE:
-               qdio_establish_handle_irq(cdev, cstat, dstat);
+               qdio_establish_handle_irq(irq_ptr, cstat, dstat);
                break;
        case QDIO_IRQ_STATE_CLEANUP:
                qdio_set_state(irq_ptr, QDIO_IRQ_STATE_INACTIVE);
@@ -1031,7 +1013,7 @@ void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,
                        return;
                }
                if (cstat || dstat)
-                       qdio_handle_activate_check(cdev, intparm, cstat,
+                       qdio_handle_activate_check(irq_ptr, intparm, cstat,
                                                   dstat);
                break;
        case QDIO_IRQ_STATE_STOPPED:
@@ -1446,12 +1428,12 @@ static int handle_inbound(struct qdio_q *q, unsigned int callflags,
 
        qperf_inc(q, inbound_call);
 
-       /* If any ACKed SBALs are returned to HW, adjust ACK tracking: */
-       overlap = min(count - sub_buf(q->u.in.ack_start, bufnr),
-                     q->u.in.ack_count);
+       /* If any processed SBALs are returned to HW, adjust our tracking: */
+       overlap = min_t(int, count - sub_buf(q->u.in.batch_start, bufnr),
+                            q->u.in.batch_count);
        if (overlap > 0) {
-               q->u.in.ack_start = add_buf(q->u.in.ack_start, overlap);
-               q->u.in.ack_count -= overlap;
+               q->u.in.batch_start = add_buf(q->u.in.batch_start, overlap);
+               q->u.in.batch_count -= overlap;
        }
 
        count = set_buf_states(q, bufnr, SLSB_CU_INPUT_EMPTY, count);
@@ -1535,12 +1517,11 @@ static int handle_outbound(struct qdio_q *q, unsigned int callflags,
 int do_QDIO(struct ccw_device *cdev, unsigned int callflags,
            int q_nr, unsigned int bufnr, unsigned int count)
 {
-       struct qdio_irq *irq_ptr;
+       struct qdio_irq *irq_ptr = cdev->private->qdio_data;
 
        if (bufnr >= QDIO_MAX_BUFFERS_PER_Q || count > QDIO_MAX_BUFFERS_PER_Q)
                return -EINVAL;
 
-       irq_ptr = cdev->private->qdio_data;
        if (!irq_ptr)
                return -ENODEV;
 
index 004ce02..3c3d403 100644 (file)
@@ -195,11 +195,10 @@ static inline struct ep11_cprb *alloc_cprb(size_t payload_len)
        size_t len = sizeof(struct ep11_cprb) + payload_len;
        struct ep11_cprb *cprb;
 
-       cprb = kmalloc(len, GFP_KERNEL);
+       cprb = kzalloc(len, GFP_KERNEL);
        if (!cprb)
                return NULL;
 
-       memset(cprb, 0, len);
        cprb->cprb_len = sizeof(struct ep11_cprb);
        cprb->cprb_ver_id = 0x04;
        memcpy(cprb->func_id, "T4", 2);
index 957889a..5730572 100644 (file)
@@ -1372,27 +1372,6 @@ static struct ccw_device_id virtio_ids[] = {
        {},
 };
 
-#ifdef CONFIG_PM_SLEEP
-static int virtio_ccw_freeze(struct ccw_device *cdev)
-{
-       struct virtio_ccw_device *vcdev = dev_get_drvdata(&cdev->dev);
-
-       return virtio_device_freeze(&vcdev->vdev);
-}
-
-static int virtio_ccw_restore(struct ccw_device *cdev)
-{
-       struct virtio_ccw_device *vcdev = dev_get_drvdata(&cdev->dev);
-       int ret;
-
-       ret = virtio_ccw_set_transport_rev(vcdev);
-       if (ret)
-               return ret;
-
-       return virtio_device_restore(&vcdev->vdev);
-}
-#endif
-
 static struct ccw_driver virtio_ccw_driver = {
        .driver = {
                .owner = THIS_MODULE,
@@ -1405,11 +1384,6 @@ static struct ccw_driver virtio_ccw_driver = {
        .set_online = virtio_ccw_online,
        .notify = virtio_ccw_cio_notify,
        .int_class = IRQIO_VIR,
-#ifdef CONFIG_PM_SLEEP
-       .freeze = virtio_ccw_freeze,
-       .thaw = virtio_ccw_restore,
-       .restore = virtio_ccw_restore,
-#endif
 };
 
 static int __init pure_hex(char **cp, unsigned int *val, int min_digit,
index d022407..bef47f3 100644 (file)
@@ -40,6 +40,7 @@ static struct scsi_host_template aic94xx_sht = {
        /* .name is initialized */
        .name                   = "aic94xx",
        .queuecommand           = sas_queuecommand,
+       .dma_need_drain         = ata_scsi_dma_need_drain,
        .target_alloc           = sas_target_alloc,
        .slave_configure        = sas_slave_configure,
        .scan_finished          = asd_scan_finished,
index 2e1718f..09a7669 100644 (file)
@@ -1756,6 +1756,7 @@ static struct scsi_host_template sht_v1_hw = {
        .proc_name              = DRV_NAME,
        .module                 = THIS_MODULE,
        .queuecommand           = sas_queuecommand,
+       .dma_need_drain         = ata_scsi_dma_need_drain,
        .target_alloc           = sas_target_alloc,
        .slave_configure        = hisi_sas_slave_configure,
        .scan_finished          = hisi_sas_scan_finished,
index e7e7849..968d387 100644 (file)
@@ -3532,6 +3532,7 @@ static struct scsi_host_template sht_v2_hw = {
        .proc_name              = DRV_NAME,
        .module                 = THIS_MODULE,
        .queuecommand           = sas_queuecommand,
+       .dma_need_drain         = ata_scsi_dma_need_drain,
        .target_alloc           = sas_target_alloc,
        .slave_configure        = hisi_sas_slave_configure,
        .scan_finished          = hisi_sas_scan_finished,
index 3e6b78a..55e2321 100644 (file)
@@ -3075,6 +3075,7 @@ static struct scsi_host_template sht_v3_hw = {
        .proc_name              = DRV_NAME,
        .module                 = THIS_MODULE,
        .queuecommand           = sas_queuecommand,
+       .dma_need_drain         = ata_scsi_dma_need_drain,
        .target_alloc           = sas_target_alloc,
        .slave_configure        = hisi_sas_slave_configure,
        .scan_finished          = hisi_sas_scan_finished,
index 7d77997..7d86f4c 100644 (file)
@@ -6731,6 +6731,7 @@ static struct scsi_host_template driver_template = {
        .compat_ioctl = ipr_ioctl,
 #endif
        .queuecommand = ipr_queuecommand,
+       .dma_need_drain = ata_scsi_dma_need_drain,
        .eh_abort_handler = ipr_eh_abort,
        .eh_device_reset_handler = ipr_eh_dev_reset,
        .eh_host_reset_handler = ipr_eh_host_reset,
index 974c3b9..085e285 100644 (file)
@@ -153,6 +153,7 @@ static struct scsi_host_template isci_sht = {
        .name                           = DRV_NAME,
        .proc_name                      = DRV_NAME,
        .queuecommand                   = sas_queuecommand,
+       .dma_need_drain                 = ata_scsi_dma_need_drain,
        .target_alloc                   = sas_target_alloc,
        .slave_configure                = sas_slave_configure,
        .scan_finished                  = isci_host_scan_finished,
index 5973eed..b0de3bd 100644 (file)
@@ -33,6 +33,7 @@ static struct scsi_host_template mvs_sht = {
        .module                 = THIS_MODULE,
        .name                   = DRV_NAME,
        .queuecommand           = sas_queuecommand,
+       .dma_need_drain         = ata_scsi_dma_need_drain,
        .target_alloc           = sas_target_alloc,
        .slave_configure        = sas_slave_configure,
        .scan_finished          = mvs_scan_finished,
index a8f5344..9e99262 100644 (file)
@@ -87,6 +87,7 @@ static struct scsi_host_template pm8001_sht = {
        .module                 = THIS_MODULE,
        .name                   = DRV_NAME,
        .queuecommand           = sas_queuecommand,
+       .dma_need_drain         = ata_scsi_dma_need_drain,
        .target_alloc           = sas_target_alloc,
        .slave_configure        = sas_slave_configure,
        .scan_finished          = pm8001_scan_finished,
index 53dd876..516a7f5 100644 (file)
@@ -106,8 +106,10 @@ static int ufs_bsg_request(struct bsg_job *job)
                desc_op = bsg_request->upiu_req.qr.opcode;
                ret = ufs_bsg_alloc_desc_buffer(hba, job, &desc_buff,
                                                &desc_len, desc_op);
-               if (ret)
+               if (ret) {
+                       pm_runtime_put_sync(hba->dev);
                        goto out;
+               }
 
                /* fall through */
        case UPIU_TRANSACTION_NOP_OUT:
index 038aec3..a01eda7 100644 (file)
@@ -67,7 +67,7 @@ struct knav_reg_config {
        u32             link_ram_size0;
        u32             link_ram_base1;
        u32             __pad2[2];
-       u32             starvation[0];
+       u32             starvation[];
 };
 
 struct knav_reg_region {
index e8ab583..113116d 100644 (file)
@@ -107,7 +107,7 @@ static void tosa_lcd_tg_on(struct tosa_lcd_data *data)
        /* TG LCD GVSS */
        tosa_tg_send(spi, TG_PINICTL, 0x0);
 
-       if (!data->i2c) {
+       if (IS_ERR_OR_NULL(data->i2c)) {
                /*
                 * after the pannel is powered up the first time,
                 * we can access the i2c bus so probe for the DAC
@@ -119,7 +119,7 @@ static void tosa_lcd_tg_on(struct tosa_lcd_data *data)
                        .addr   = DAC_BASE,
                        .platform_data = data->spi,
                };
-               data->i2c = i2c_new_device(adap, &info);
+               data->i2c = i2c_new_client_device(adap, &info);
        }
 }
 
index f02be0d..8d418ab 100644 (file)
@@ -402,7 +402,7 @@ int __init hpfb_init(void)
        if (err)
                return err;
 
-       err = probe_kernel_read(&i, (unsigned char *)INTFBVADDR + DIO_IDOFF, 1);
+       err = copy_from_kernel_nofault(&i, (unsigned char *)INTFBVADDR + DIO_IDOFF, 1);
 
        if (!err && (i == DIO_ID_FBUFFER) && topcat_sid_ok(sid = DIO_SECID(INTFBVADDR))) {
                if (!request_mem_region(INTFBPADDR, DIO_DEVSIZE, "Internal Topcat"))
index 3041092..449680a 100644 (file)
@@ -73,7 +73,7 @@ struct w1_netlink_msg
                        __u32           res;
                } mst;
        } id;
-       __u8                            data[0];
+       __u8                            data[];
 };
 
 /**
@@ -122,7 +122,7 @@ struct w1_netlink_cmd
        __u8                            cmd;
        __u8                            res;
        __u16                           len;
-       __u8                            data[0];
+       __u8                            data[];
 };
 
 #ifdef __KERNEL__
index aa1d341..96757f3 100644 (file)
@@ -648,7 +648,7 @@ static void afs_do_lookup_success(struct afs_operation *op)
                        vp = &op->file[0];
                        abort_code = vp->scb.status.abort_code;
                        if (abort_code != 0) {
-                               op->abort_code = abort_code;
+                               op->ac.abort_code = abort_code;
                                op->error = afs_abort_to_error(abort_code);
                        }
                        break;
@@ -696,10 +696,11 @@ static const struct afs_operation_ops afs_inline_bulk_status_operation = {
        .success        = afs_do_lookup_success,
 };
 
-static const struct afs_operation_ops afs_fetch_status_operation = {
+static const struct afs_operation_ops afs_lookup_fetch_status_operation = {
        .issue_afs_rpc  = afs_fs_fetch_status,
        .issue_yfs_rpc  = yfs_fs_fetch_status,
        .success        = afs_do_lookup_success,
+       .aborted        = afs_check_for_remote_deletion,
 };
 
 /*
@@ -844,7 +845,7 @@ static struct inode *afs_do_lookup(struct inode *dir, struct dentry *dentry,
                 * to FS.FetchStatus for op->file[1].
                 */
                op->fetch_status.which = 1;
-               op->ops = &afs_fetch_status_operation;
+               op->ops = &afs_lookup_fetch_status_operation;
                afs_begin_vnode_operation(op);
                afs_wait_for_operation(op);
        }
@@ -1236,6 +1237,17 @@ void afs_d_release(struct dentry *dentry)
        _enter("%pd", dentry);
 }
 
+void afs_check_for_remote_deletion(struct afs_operation *op)
+{
+       struct afs_vnode *vnode = op->file[0].vnode;
+
+       switch (op->ac.abort_code) {
+       case VNOVNODE:
+               set_bit(AFS_VNODE_DELETED, &vnode->flags);
+               afs_break_callback(vnode, afs_cb_break_for_deleted);
+       }
+}
+
 /*
  * Create a new inode for create/mkdir/symlink
  */
@@ -1268,7 +1280,7 @@ static void afs_vnode_new_inode(struct afs_operation *op)
 static void afs_create_success(struct afs_operation *op)
 {
        _enter("op=%08x", op->debug_id);
-       afs_check_for_remote_deletion(op, op->file[0].vnode);
+       op->ctime = op->file[0].scb.status.mtime_client;
        afs_vnode_commit_status(op, &op->file[0]);
        afs_update_dentry_version(op, &op->file[0], op->dentry);
        afs_vnode_new_inode(op);
@@ -1302,6 +1314,7 @@ static const struct afs_operation_ops afs_mkdir_operation = {
        .issue_afs_rpc  = afs_fs_make_dir,
        .issue_yfs_rpc  = yfs_fs_make_dir,
        .success        = afs_create_success,
+       .aborted        = afs_check_for_remote_deletion,
        .edit_dir       = afs_create_edit_dir,
        .put            = afs_create_put,
 };
@@ -1325,6 +1338,7 @@ static int afs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 
        afs_op_set_vnode(op, 0, dvnode);
        op->file[0].dv_delta = 1;
+       op->file[0].update_ctime = true;
        op->dentry      = dentry;
        op->create.mode = S_IFDIR | mode;
        op->create.reason = afs_edit_dir_for_mkdir;
@@ -1350,7 +1364,7 @@ static void afs_dir_remove_subdir(struct dentry *dentry)
 static void afs_rmdir_success(struct afs_operation *op)
 {
        _enter("op=%08x", op->debug_id);
-       afs_check_for_remote_deletion(op, op->file[0].vnode);
+       op->ctime = op->file[0].scb.status.mtime_client;
        afs_vnode_commit_status(op, &op->file[0]);
        afs_update_dentry_version(op, &op->file[0], op->dentry);
 }
@@ -1382,6 +1396,7 @@ static const struct afs_operation_ops afs_rmdir_operation = {
        .issue_afs_rpc  = afs_fs_remove_dir,
        .issue_yfs_rpc  = yfs_fs_remove_dir,
        .success        = afs_rmdir_success,
+       .aborted        = afs_check_for_remote_deletion,
        .edit_dir       = afs_rmdir_edit_dir,
        .put            = afs_rmdir_put,
 };
@@ -1404,6 +1419,7 @@ static int afs_rmdir(struct inode *dir, struct dentry *dentry)
 
        afs_op_set_vnode(op, 0, dvnode);
        op->file[0].dv_delta = 1;
+       op->file[0].update_ctime = true;
 
        op->dentry      = dentry;
        op->ops         = &afs_rmdir_operation;
@@ -1479,7 +1495,8 @@ static void afs_dir_remove_link(struct afs_operation *op)
 static void afs_unlink_success(struct afs_operation *op)
 {
        _enter("op=%08x", op->debug_id);
-       afs_check_for_remote_deletion(op, op->file[0].vnode);
+       op->ctime = op->file[0].scb.status.mtime_client;
+       afs_check_dir_conflict(op, &op->file[0]);
        afs_vnode_commit_status(op, &op->file[0]);
        afs_vnode_commit_status(op, &op->file[1]);
        afs_update_dentry_version(op, &op->file[0], op->dentry);
@@ -1511,6 +1528,7 @@ static const struct afs_operation_ops afs_unlink_operation = {
        .issue_afs_rpc  = afs_fs_remove_file,
        .issue_yfs_rpc  = yfs_fs_remove_file,
        .success        = afs_unlink_success,
+       .aborted        = afs_check_for_remote_deletion,
        .edit_dir       = afs_unlink_edit_dir,
        .put            = afs_unlink_put,
 };
@@ -1537,6 +1555,7 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
 
        afs_op_set_vnode(op, 0, dvnode);
        op->file[0].dv_delta = 1;
+       op->file[0].update_ctime = true;
 
        /* Try to make sure we have a callback promise on the victim. */
        ret = afs_validate(vnode, op->key);
@@ -1561,9 +1580,25 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
        spin_unlock(&dentry->d_lock);
 
        op->file[1].vnode = vnode;
+       op->file[1].update_ctime = true;
+       op->file[1].op_unlinked = true;
        op->dentry      = dentry;
        op->ops         = &afs_unlink_operation;
-       return afs_do_sync_operation(op);
+       afs_begin_vnode_operation(op);
+       afs_wait_for_operation(op);
+
+       /* If there was a conflict with a third party, check the status of the
+        * unlinked vnode.
+        */
+       if (op->error == 0 && (op->flags & AFS_OPERATION_DIR_CONFLICT)) {
+               op->file[1].update_ctime = false;
+               op->fetch_status.which = 1;
+               op->ops = &afs_fetch_status_operation;
+               afs_begin_vnode_operation(op);
+               afs_wait_for_operation(op);
+       }
+
+       return afs_put_operation(op);
 
 error:
        return afs_put_operation(op);
@@ -1573,6 +1608,7 @@ static const struct afs_operation_ops afs_create_operation = {
        .issue_afs_rpc  = afs_fs_create_file,
        .issue_yfs_rpc  = yfs_fs_create_file,
        .success        = afs_create_success,
+       .aborted        = afs_check_for_remote_deletion,
        .edit_dir       = afs_create_edit_dir,
        .put            = afs_create_put,
 };
@@ -1601,6 +1637,7 @@ static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
 
        afs_op_set_vnode(op, 0, dvnode);
        op->file[0].dv_delta = 1;
+       op->file[0].update_ctime = true;
 
        op->dentry      = dentry;
        op->create.mode = S_IFREG | mode;
@@ -1620,6 +1657,7 @@ static void afs_link_success(struct afs_operation *op)
        struct afs_vnode_param *vp = &op->file[1];
 
        _enter("op=%08x", op->debug_id);
+       op->ctime = dvp->scb.status.mtime_client;
        afs_vnode_commit_status(op, dvp);
        afs_vnode_commit_status(op, vp);
        afs_update_dentry_version(op, dvp, op->dentry);
@@ -1640,6 +1678,7 @@ static const struct afs_operation_ops afs_link_operation = {
        .issue_afs_rpc  = afs_fs_link,
        .issue_yfs_rpc  = yfs_fs_link,
        .success        = afs_link_success,
+       .aborted        = afs_check_for_remote_deletion,
        .edit_dir       = afs_create_edit_dir,
        .put            = afs_link_put,
 };
@@ -1672,6 +1711,8 @@ static int afs_link(struct dentry *from, struct inode *dir,
        afs_op_set_vnode(op, 0, dvnode);
        afs_op_set_vnode(op, 1, vnode);
        op->file[0].dv_delta = 1;
+       op->file[0].update_ctime = true;
+       op->file[1].update_ctime = true;
 
        op->dentry              = dentry;
        op->dentry_2            = from;
@@ -1689,6 +1730,7 @@ static const struct afs_operation_ops afs_symlink_operation = {
        .issue_afs_rpc  = afs_fs_symlink,
        .issue_yfs_rpc  = yfs_fs_symlink,
        .success        = afs_create_success,
+       .aborted        = afs_check_for_remote_deletion,
        .edit_dir       = afs_create_edit_dir,
        .put            = afs_create_put,
 };
@@ -1740,9 +1782,13 @@ static void afs_rename_success(struct afs_operation *op)
 {
        _enter("op=%08x", op->debug_id);
 
+       op->ctime = op->file[0].scb.status.mtime_client;
+       afs_check_dir_conflict(op, &op->file[1]);
        afs_vnode_commit_status(op, &op->file[0]);
-       if (op->file[1].vnode != op->file[0].vnode)
+       if (op->file[1].vnode != op->file[0].vnode) {
+               op->ctime = op->file[1].scb.status.mtime_client;
                afs_vnode_commit_status(op, &op->file[1]);
+       }
 }
 
 static void afs_rename_edit_dir(struct afs_operation *op)
@@ -1860,6 +1906,8 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
        afs_op_set_vnode(op, 1, new_dvnode); /* May be same as orig_dvnode */
        op->file[0].dv_delta = 1;
        op->file[1].dv_delta = 1;
+       op->file[0].update_ctime = true;
+       op->file[1].update_ctime = true;
 
        op->dentry              = old_dentry;
        op->dentry_2            = new_dentry;
index b14e3d9..04f75a4 100644 (file)
@@ -16,6 +16,7 @@ static void afs_silly_rename_success(struct afs_operation *op)
 {
        _enter("op=%08x", op->debug_id);
 
+       afs_check_dir_conflict(op, &op->file[0]);
        afs_vnode_commit_status(op, &op->file[0]);
 }
 
@@ -69,6 +70,11 @@ static int afs_do_silly_rename(struct afs_vnode *dvnode, struct afs_vnode *vnode
                return PTR_ERR(op);
 
        afs_op_set_vnode(op, 0, dvnode);
+       afs_op_set_vnode(op, 1, dvnode);
+       op->file[0].dv_delta = 1;
+       op->file[1].dv_delta = 1;
+       op->file[0].update_ctime = true;
+       op->file[1].update_ctime = true;
 
        op->dentry              = old;
        op->dentry_2            = new;
@@ -129,6 +135,7 @@ int afs_sillyrename(struct afs_vnode *dvnode, struct afs_vnode *vnode,
        switch (ret) {
        case 0:
                /* The rename succeeded. */
+               set_bit(AFS_VNODE_SILLY_DELETED, &vnode->flags);
                d_move(dentry, sdentry);
                break;
        case -ERESTARTSYS:
@@ -148,19 +155,11 @@ out:
 
 static void afs_silly_unlink_success(struct afs_operation *op)
 {
-       struct afs_vnode *vnode = op->file[1].vnode;
-
        _enter("op=%08x", op->debug_id);
-       afs_check_for_remote_deletion(op, op->file[0].vnode);
+       afs_check_dir_conflict(op, &op->file[0]);
        afs_vnode_commit_status(op, &op->file[0]);
        afs_vnode_commit_status(op, &op->file[1]);
        afs_update_dentry_version(op, &op->file[0], op->dentry);
-
-       drop_nlink(&vnode->vfs_inode);
-       if (vnode->vfs_inode.i_nlink == 0) {
-               set_bit(AFS_VNODE_DELETED, &vnode->flags);
-               clear_bit(AFS_VNODE_CB_PROMISED, &vnode->flags);
-       }
 }
 
 static void afs_silly_unlink_edit_dir(struct afs_operation *op)
@@ -181,6 +180,7 @@ static const struct afs_operation_ops afs_silly_unlink_operation = {
        .issue_afs_rpc  = afs_fs_remove_file,
        .issue_yfs_rpc  = yfs_fs_remove_file,
        .success        = afs_silly_unlink_success,
+       .aborted        = afs_check_for_remote_deletion,
        .edit_dir       = afs_silly_unlink_edit_dir,
 };
 
@@ -200,12 +200,30 @@ static int afs_do_silly_unlink(struct afs_vnode *dvnode, struct afs_vnode *vnode
 
        afs_op_set_vnode(op, 0, dvnode);
        afs_op_set_vnode(op, 1, vnode);
+       op->file[0].dv_delta = 1;
+       op->file[0].update_ctime = true;
+       op->file[1].op_unlinked = true;
+       op->file[1].update_ctime = true;
 
        op->dentry      = dentry;
        op->ops         = &afs_silly_unlink_operation;
 
        trace_afs_silly_rename(vnode, true);
-       return afs_do_sync_operation(op);
+       afs_begin_vnode_operation(op);
+       afs_wait_for_operation(op);
+
+       /* If there was a conflict with a third party, check the status of the
+        * unlinked vnode.
+        */
+       if (op->error == 0 && (op->flags & AFS_OPERATION_DIR_CONFLICT)) {
+               op->file[1].update_ctime = false;
+               op->fetch_status.which = 1;
+               op->ops = &afs_fetch_status_operation;
+               afs_begin_vnode_operation(op);
+               afs_wait_for_operation(op);
+       }
+
+       return afs_put_operation(op);
 }
 
 /*
index 506c474..6f6ed16 100644 (file)
@@ -225,7 +225,6 @@ static void afs_fetch_data_success(struct afs_operation *op)
        struct afs_vnode *vnode = op->file[0].vnode;
 
        _enter("op=%08x", op->debug_id);
-       afs_check_for_remote_deletion(op, vnode);
        afs_vnode_commit_status(op, &op->file[0]);
        afs_stat_v(vnode, n_fetches);
        atomic_long_add(op->fetch.req->actual_len, &op->net->n_fetch_bytes);
@@ -240,6 +239,7 @@ static const struct afs_operation_ops afs_fetch_data_operation = {
        .issue_afs_rpc  = afs_fs_fetch_data,
        .issue_yfs_rpc  = yfs_fs_fetch_data,
        .success        = afs_fetch_data_success,
+       .aborted        = afs_check_for_remote_deletion,
        .put            = afs_fetch_data_put,
 };
 
index 71eea2a..ffb8575 100644 (file)
@@ -175,10 +175,7 @@ static void afs_kill_lockers_enoent(struct afs_vnode *vnode)
 
 static void afs_lock_success(struct afs_operation *op)
 {
-       struct afs_vnode *vnode = op->file[0].vnode;
-
        _enter("op=%08x", op->debug_id);
-       afs_check_for_remote_deletion(op, vnode);
        afs_vnode_commit_status(op, &op->file[0]);
 }
 
@@ -186,6 +183,7 @@ static const struct afs_operation_ops afs_set_lock_operation = {
        .issue_afs_rpc  = afs_fs_set_lock,
        .issue_yfs_rpc  = yfs_fs_set_lock,
        .success        = afs_lock_success,
+       .aborted        = afs_check_for_remote_deletion,
 };
 
 /*
index 2d2dff5..c264839 100644 (file)
@@ -187,9 +187,17 @@ void afs_wait_for_operation(struct afs_operation *op)
                op->error = afs_wait_for_call_to_complete(op->call, &op->ac);
        }
 
-       if (op->error == 0) {
+       switch (op->error) {
+       case 0:
                _debug("success");
                op->ops->success(op);
+               break;
+       case -ECONNABORTED:
+               if (op->ops->aborted)
+                       op->ops->aborted(op);
+               break;
+       default:
+               break;
        }
 
        afs_end_vnode_operation(op);
index b34f74b..5d9ef51 100644 (file)
@@ -314,7 +314,7 @@ void afs_fs_probe_timer(struct timer_list *timer)
 {
        struct afs_net *net = container_of(timer, struct afs_net, fs_probe_timer);
 
-       if (!queue_work(afs_wq, &net->fs_prober))
+       if (!net->live || !queue_work(afs_wq, &net->fs_prober))
                afs_dec_servers_outstanding(net);
 }
 
@@ -458,3 +458,12 @@ dont_wait:
                return -ETIME;
        return -EDESTADDRREQ;
 }
+
+/*
+ * Clean up the probing when the namespace is killed off.
+ */
+void afs_fs_probe_cleanup(struct afs_net *net)
+{
+       if (del_timer_sync(&net->fs_probe_timer))
+               afs_dec_servers_outstanding(net);
+}
index cd0a006..1d13d2e 100644 (file)
@@ -165,9 +165,11 @@ static void afs_apply_status(struct afs_operation *op,
 {
        struct afs_file_status *status = &vp->scb.status;
        struct afs_vnode *vnode = vp->vnode;
+       struct inode *inode = &vnode->vfs_inode;
        struct timespec64 t;
        umode_t mode;
        bool data_changed = false;
+       bool change_size = vp->set_size;
 
        _enter("{%llx:%llu.%u} %s",
               vp->fid.vid, vp->fid.vnode, vp->fid.unique,
@@ -186,25 +188,25 @@ static void afs_apply_status(struct afs_operation *op,
        }
 
        if (status->nlink != vnode->status.nlink)
-               set_nlink(&vnode->vfs_inode, status->nlink);
+               set_nlink(inode, status->nlink);
 
        if (status->owner != vnode->status.owner)
-               vnode->vfs_inode.i_uid = make_kuid(&init_user_ns, status->owner);
+               inode->i_uid = make_kuid(&init_user_ns, status->owner);
 
        if (status->group != vnode->status.group)
-               vnode->vfs_inode.i_gid = make_kgid(&init_user_ns, status->group);
+               inode->i_gid = make_kgid(&init_user_ns, status->group);
 
        if (status->mode != vnode->status.mode) {
-               mode = vnode->vfs_inode.i_mode;
+               mode = inode->i_mode;
                mode &= ~S_IALLUGO;
                mode |= status->mode;
-               WRITE_ONCE(vnode->vfs_inode.i_mode, mode);
+               WRITE_ONCE(inode->i_mode, mode);
        }
 
        t = status->mtime_client;
-       vnode->vfs_inode.i_ctime = t;
-       vnode->vfs_inode.i_mtime = t;
-       vnode->vfs_inode.i_atime = t;
+       inode->i_mtime = t;
+       if (vp->update_ctime)
+               inode->i_ctime = op->ctime;
 
        if (vnode->status.data_version != status->data_version)
                data_changed = true;
@@ -226,6 +228,7 @@ static void afs_apply_status(struct afs_operation *op,
                } else {
                        set_bit(AFS_VNODE_ZAP_DATA, &vnode->flags);
                }
+               change_size = true;
        } else if (vnode->status.type == AFS_FTYPE_DIR) {
                /* Expected directory change is handled elsewhere so
                 * that we can locally edit the directory and save on a
@@ -233,11 +236,22 @@ static void afs_apply_status(struct afs_operation *op,
                 */
                if (test_bit(AFS_VNODE_DIR_VALID, &vnode->flags))
                        data_changed = false;
+               change_size = true;
        }
 
        if (data_changed) {
-               inode_set_iversion_raw(&vnode->vfs_inode, status->data_version);
-               afs_set_i_size(vnode, status->size);
+               inode_set_iversion_raw(inode, status->data_version);
+
+               /* Only update the size if the data version jumped.  If the
+                * file is being modified locally, then we might have our own
+                * idea of what the size should be that's not the same as
+                * what's on the server.
+                */
+               if (change_size) {
+                       afs_set_i_size(vnode, status->size);
+                       inode->i_ctime = t;
+                       inode->i_atime = t;
+               }
        }
 }
 
@@ -267,32 +281,39 @@ void afs_vnode_commit_status(struct afs_operation *op, struct afs_vnode_param *v
 
        _enter("");
 
-       ASSERTCMP(op->error, ==, 0);
-
        write_seqlock(&vnode->cb_lock);
 
        if (vp->scb.have_error) {
+               /* A YFS server will return this from RemoveFile2 and AFS and
+                * YFS will return this from InlineBulkStatus.
+                */
                if (vp->scb.status.abort_code == VNOVNODE) {
                        set_bit(AFS_VNODE_DELETED, &vnode->flags);
                        clear_nlink(&vnode->vfs_inode);
                        __afs_break_callback(vnode, afs_cb_break_for_deleted);
+                       op->flags &= ~AFS_OPERATION_DIR_CONFLICT;
                }
-       } else {
-               if (vp->scb.have_status)
-                       afs_apply_status(op, vp);
+       } else if (vp->scb.have_status) {
+               afs_apply_status(op, vp);
                if (vp->scb.have_cb)
                        afs_apply_callback(op, vp);
+       } else if (vp->op_unlinked && !(op->flags & AFS_OPERATION_DIR_CONFLICT)) {
+               drop_nlink(&vnode->vfs_inode);
+               if (vnode->vfs_inode.i_nlink == 0) {
+                       set_bit(AFS_VNODE_DELETED, &vnode->flags);
+                       __afs_break_callback(vnode, afs_cb_break_for_deleted);
+               }
        }
 
        write_sequnlock(&vnode->cb_lock);
 
-       if (op->error == 0 && vp->scb.have_status)
+       if (vp->scb.have_status)
                afs_cache_permit(vnode, op->key, vp->cb_break_before, &vp->scb);
 }
 
 static void afs_fetch_status_success(struct afs_operation *op)
 {
-       struct afs_vnode_param *vp = &op->file[0];
+       struct afs_vnode_param *vp = &op->file[op->fetch_status.which];
        struct afs_vnode *vnode = vp->vnode;
        int ret;
 
@@ -306,10 +327,11 @@ static void afs_fetch_status_success(struct afs_operation *op)
        }
 }
 
-static const struct afs_operation_ops afs_fetch_status_operation = {
+const struct afs_operation_ops afs_fetch_status_operation = {
        .issue_afs_rpc  = afs_fs_fetch_status,
        .issue_yfs_rpc  = yfs_fs_fetch_status,
        .success        = afs_fetch_status_success,
+       .aborted        = afs_check_for_remote_deletion,
 };
 
 /*
@@ -716,6 +738,9 @@ int afs_getattr(const struct path *path, struct kstat *stat,
        do {
                read_seqbegin_or_lock(&vnode->cb_lock, &seq);
                generic_fillattr(inode, stat);
+               if (test_bit(AFS_VNODE_SILLY_DELETED, &vnode->flags) &&
+                   stat->nlink > 0)
+                       stat->nlink -= 1;
        } while (need_seqretry(&vnode->cb_lock, seq));
 
        done_seqretry(&vnode->cb_lock, seq);
@@ -785,7 +810,15 @@ void afs_evict_inode(struct inode *inode)
 
 static void afs_setattr_success(struct afs_operation *op)
 {
+       struct inode *inode = &op->file[0].vnode->vfs_inode;
+
        afs_vnode_commit_status(op, &op->file[0]);
+       if (op->setattr.attr->ia_valid & ATTR_SIZE) {
+               loff_t i_size = inode->i_size, size = op->setattr.attr->ia_size;
+               if (size > i_size)
+                       pagecache_isize_extended(inode, i_size, size);
+               truncate_pagecache(inode, size);
+       }
 }
 
 static const struct afs_operation_ops afs_setattr_operation = {
@@ -801,17 +834,31 @@ int afs_setattr(struct dentry *dentry, struct iattr *attr)
 {
        struct afs_operation *op;
        struct afs_vnode *vnode = AFS_FS_I(d_inode(dentry));
+       int ret;
 
        _enter("{%llx:%llu},{n=%pd},%x",
               vnode->fid.vid, vnode->fid.vnode, dentry,
               attr->ia_valid);
 
        if (!(attr->ia_valid & (ATTR_SIZE | ATTR_MODE | ATTR_UID | ATTR_GID |
-                               ATTR_MTIME))) {
+                               ATTR_MTIME | ATTR_MTIME_SET | ATTR_TIMES_SET |
+                               ATTR_TOUCH))) {
                _leave(" = 0 [unsupported]");
                return 0;
        }
 
+       if (attr->ia_valid & ATTR_SIZE) {
+               if (!S_ISREG(vnode->vfs_inode.i_mode))
+                       return -EISDIR;
+
+               ret = inode_newsize_ok(&vnode->vfs_inode, attr->ia_size);
+               if (ret)
+                       return ret;
+
+               if (attr->ia_size == i_size_read(&vnode->vfs_inode))
+                       attr->ia_valid &= ~ATTR_SIZE;
+       }
+
        /* flush any dirty data outstanding on a regular file */
        if (S_ISREG(vnode->vfs_inode.i_mode))
                filemap_write_and_wait(vnode->vfs_inode.i_mapping);
@@ -825,8 +872,12 @@ int afs_setattr(struct dentry *dentry, struct iattr *attr)
        afs_op_set_vnode(op, 0, vnode);
        op->setattr.attr = attr;
 
-       if (attr->ia_valid & ATTR_SIZE)
+       if (attr->ia_valid & ATTR_SIZE) {
                op->file[0].dv_delta = 1;
+               op->file[0].set_size = true;
+       }
+       op->ctime = attr->ia_ctime;
+       op->file[0].update_ctime = 1;
 
        op->ops = &afs_setattr_operation;
        return afs_do_sync_operation(op);
index 0c9806e..d520535 100644 (file)
@@ -634,6 +634,7 @@ struct afs_vnode {
 #define AFS_VNODE_AUTOCELL     6               /* set if Vnode is an auto mount point */
 #define AFS_VNODE_PSEUDODIR    7               /* set if Vnode is a pseudo directory */
 #define AFS_VNODE_NEW_CONTENT  8               /* Set if file has new content (create/trunc-0) */
+#define AFS_VNODE_SILLY_DELETED        9               /* Set if file has been silly-deleted */
 
        struct list_head        wb_keys;        /* List of keys available for writeback */
        struct list_head        pending_locks;  /* locks waiting to be granted */
@@ -744,8 +745,11 @@ struct afs_vnode_param {
        afs_dataversion_t       dv_before;      /* Data version before the call */
        unsigned int            cb_break_before; /* cb_break + cb_s_break before the call */
        u8                      dv_delta;       /* Expected change in data version */
-       bool                    put_vnode;      /* T if we have a ref on the vnode */
-       bool                    need_io_lock;   /* T if we need the I/O lock on this */
+       bool                    put_vnode:1;    /* T if we have a ref on the vnode */
+       bool                    need_io_lock:1; /* T if we need the I/O lock on this */
+       bool                    update_ctime:1; /* Need to update the ctime */
+       bool                    set_size:1;     /* Must update i_size */
+       bool                    op_unlinked:1;  /* True if file was unlinked by op */
 };
 
 /*
@@ -766,9 +770,9 @@ struct afs_operation {
        struct dentry           *dentry;        /* Dentry to be altered */
        struct dentry           *dentry_2;      /* Second dentry to be altered */
        struct timespec64       mtime;          /* Modification time to record */
+       struct timespec64       ctime;          /* Change time to set */
        short                   nr_files;       /* Number of entries in file[], more_files */
        short                   error;
-       unsigned int            abort_code;
        unsigned int            debug_id;
 
        unsigned int            cb_v_break;     /* Volume break counter before op */
@@ -837,6 +841,7 @@ struct afs_operation {
 #define AFS_OPERATION_LOCK_1           0x0200  /* Set if have io_lock on file[1] */
 #define AFS_OPERATION_TRIED_ALL                0x0400  /* Set if we've tried all the fileservers */
 #define AFS_OPERATION_RETRY_SERVER     0x0800  /* Set if we should retry the current server */
+#define AFS_OPERATION_DIR_CONFLICT     0x1000  /* Set if we detected a 3rd-party dir change */
 };
 
 /*
@@ -932,6 +937,7 @@ extern const struct address_space_operations afs_dir_aops;
 extern const struct dentry_operations afs_fs_dentry_operations;
 
 extern void afs_d_release(struct dentry *);
+extern void afs_check_for_remote_deletion(struct afs_operation *);
 
 /*
  * dir_edit.c
@@ -1059,10 +1065,13 @@ extern int afs_wait_for_fs_probes(struct afs_server_list *, unsigned long);
 extern void afs_probe_fileserver(struct afs_net *, struct afs_server *);
 extern void afs_fs_probe_dispatcher(struct work_struct *);
 extern int afs_wait_for_one_fs_probe(struct afs_server *, bool);
+extern void afs_fs_probe_cleanup(struct afs_net *);
 
 /*
  * inode.c
  */
+extern const struct afs_operation_ops afs_fetch_status_operation;
+
 extern void afs_vnode_commit_status(struct afs_operation *, struct afs_vnode_param *);
 extern int afs_fetch_status(struct afs_vnode *, struct key *, bool, afs_access_t *);
 extern int afs_ilookup5_test_by_fid(struct inode *, void *);
@@ -1435,7 +1444,6 @@ extern ssize_t afs_listxattr(struct dentry *, char *, size_t);
 /*
  * yfsclient.c
  */
-extern void yfs_fs_fetch_file_status(struct afs_operation *);
 extern void yfs_fs_fetch_data(struct afs_operation *);
 extern void yfs_fs_create_file(struct afs_operation *);
 extern void yfs_fs_make_dir(struct afs_operation *);
@@ -1481,15 +1489,6 @@ static inline struct inode *AFS_VNODE_TO_I(struct afs_vnode *vnode)
        return &vnode->vfs_inode;
 }
 
-static inline void afs_check_for_remote_deletion(struct afs_operation *op,
-                                                struct afs_vnode *vnode)
-{
-       if (op->error == -ENOENT) {
-               set_bit(AFS_VNODE_DELETED, &vnode->flags);
-               afs_break_callback(vnode, afs_cb_break_for_deleted);
-       }
-}
-
 /*
  * Note that a dentry got changed.  We need to set d_fsdata to the data version
  * number derived from the result of the operation.  It doesn't matter if
@@ -1504,6 +1503,18 @@ static inline void afs_update_dentry_version(struct afs_operation *op,
                        (void *)(unsigned long)dir_vp->scb.status.data_version;
 }
 
+/*
+ * Check for a conflicting operation on a directory that we just unlinked from.
+ * If someone managed to sneak a link or an unlink in on the file we just
+ * unlinked, we won't be able to trust nlink on an AFS file (but not YFS).
+ */
+static inline void afs_check_dir_conflict(struct afs_operation *op,
+                                         struct afs_vnode_param *dvp)
+{
+       if (dvp->dv_before + dvp->dv_delta != dvp->scb.status.data_version)
+               op->flags |= AFS_OPERATION_DIR_CONFLICT;
+}
+
 static inline int afs_io_error(struct afs_call *call, enum afs_io_error where)
 {
        trace_afs_io_error(call->debug_id, -EIO, where);
index 9c79c91..31b472f 100644 (file)
@@ -100,6 +100,7 @@ static int __net_init afs_net_init(struct net *net_ns)
        timer_setup(&net->fs_timer, afs_servers_timer, 0);
        INIT_WORK(&net->fs_prober, afs_fs_probe_dispatcher);
        timer_setup(&net->fs_probe_timer, afs_fs_probe_timer, 0);
+       atomic_set(&net->servers_outstanding, 1);
 
        ret = -ENOMEM;
        sysnames = kzalloc(sizeof(*sysnames), GFP_KERNEL);
@@ -130,6 +131,7 @@ static int __net_init afs_net_init(struct net *net_ns)
 
 error_open_socket:
        net->live = false;
+       afs_fs_probe_cleanup(net);
        afs_cell_purge(net);
        afs_purge_servers(net);
 error_cell_init:
@@ -150,6 +152,7 @@ static void __net_exit afs_net_exit(struct net *net_ns)
        struct afs_net *net = afs_net(net_ns);
 
        net->live = false;
+       afs_fs_probe_cleanup(net);
        afs_cell_purge(net);
        afs_purge_servers(net);
        afs_close_socket(net);
index 52b19e9..5334f1b 100644 (file)
@@ -83,6 +83,7 @@ int afs_abort_to_error(u32 abort_code)
        case UAENOLCK:                  return -ENOLCK;
        case UAENOTEMPTY:               return -ENOTEMPTY;
        case UAELOOP:                   return -ELOOP;
+       case UAEOVERFLOW:               return -EOVERFLOW;
        case UAENOMEDIUM:               return -ENOMEDIUM;
        case UAEDQUOT:                  return -EDQUOT;
 
index 039e348..e82e452 100644 (file)
@@ -605,11 +605,12 @@ void afs_purge_servers(struct afs_net *net)
        _enter("");
 
        if (del_timer_sync(&net->fs_timer))
-               atomic_dec(&net->servers_outstanding);
+               afs_dec_servers_outstanding(net);
 
        afs_queue_server_manager(net);
 
        _debug("wait");
+       atomic_dec(&net->servers_outstanding);
        wait_var_event(&net->servers_outstanding,
                       !atomic_read(&net->servers_outstanding));
        _leave("");
index 768497f..7437806 100644 (file)
@@ -194,11 +194,11 @@ int afs_write_end(struct file *file, struct address_space *mapping,
 
        i_size = i_size_read(&vnode->vfs_inode);
        if (maybe_i_size > i_size) {
-               spin_lock(&vnode->wb_lock);
+               write_seqlock(&vnode->cb_lock);
                i_size = i_size_read(&vnode->vfs_inode);
                if (maybe_i_size > i_size)
                        i_size_write(&vnode->vfs_inode, maybe_i_size);
-               spin_unlock(&vnode->wb_lock);
+               write_sequnlock(&vnode->cb_lock);
        }
 
        if (!PageUptodate(page)) {
@@ -393,6 +393,7 @@ static void afs_store_data_success(struct afs_operation *op)
 {
        struct afs_vnode *vnode = op->file[0].vnode;
 
+       op->ctime = op->file[0].scb.status.mtime_client;
        afs_vnode_commit_status(op, &op->file[0]);
        if (op->error == 0) {
                afs_pages_written_back(vnode, op->store.first, op->store.last);
@@ -491,6 +492,7 @@ static int afs_write_back_from_locked_page(struct address_space *mapping,
        unsigned long count, priv;
        unsigned n, offset, to, f, t;
        pgoff_t start, first, last;
+       loff_t i_size, end;
        int loop, ret;
 
        _enter(",%lx", primary_page->index);
@@ -591,7 +593,12 @@ no_more:
        first = primary_page->index;
        last = first + count - 1;
 
+       end = (loff_t)last * PAGE_SIZE + to;
+       i_size = i_size_read(&vnode->vfs_inode);
+
        _debug("write back %lx[%u..] to %lx[..%u]", first, offset, last, to);
+       if (end > i_size)
+               to = i_size & ~PAGE_MASK;
 
        ret = afs_store_data(mapping, first, last, offset, to);
        switch (ret) {
@@ -844,6 +851,7 @@ vm_fault_t afs_page_mkwrite(struct vm_fault *vmf)
                             vmf->page->index, priv);
        SetPagePrivate(vmf->page);
        set_page_private(vmf->page, priv);
+       file_update_time(file);
 
        sb_end_pagefault(inode->i_sb);
        return VM_FAULT_LOCKED;
index 52d5af5..8c24fdc 100644 (file)
@@ -329,29 +329,6 @@ static void xdr_decode_YFSFetchVolumeStatus(const __be32 **_bp,
        *_bp += sizeof(*x) / sizeof(__be32);
 }
 
-/*
- * Deliver a reply that's a status, callback and volsync.
- */
-static int yfs_deliver_fs_status_cb_and_volsync(struct afs_call *call)
-{
-       struct afs_operation *op = call->op;
-       const __be32 *bp;
-       int ret;
-
-       ret = afs_transfer_reply(call);
-       if (ret < 0)
-               return ret;
-
-       /* unmarshall the reply once we've received all of it */
-       bp = call->buffer;
-       xdr_decode_YFSFetchStatus(&bp, call, &op->file[0].scb);
-       xdr_decode_YFSCallBack(&bp, call, &op->file[0].scb);
-       xdr_decode_YFSVolSync(&bp, &op->volsync);
-
-       _leave(" = 0 [done]");
-       return 0;
-}
-
 /*
  * Deliver reply data to operations that just return a file status and a volume
  * sync record.
@@ -374,48 +351,6 @@ static int yfs_deliver_status_and_volsync(struct afs_call *call)
        return 0;
 }
 
-/*
- * YFS.FetchStatus operation type
- */
-static const struct afs_call_type yfs_RXYFSFetchStatus_vnode = {
-       .name           = "YFS.FetchStatus(vnode)",
-       .op             = yfs_FS_FetchStatus,
-       .deliver        = yfs_deliver_fs_status_cb_and_volsync,
-       .destructor     = afs_flat_call_destructor,
-};
-
-/*
- * Fetch the status information for a file.
- */
-void yfs_fs_fetch_file_status(struct afs_operation *op)
-{
-       struct afs_vnode_param *vp = &op->file[0];
-       struct afs_call *call;
-       __be32 *bp;
-
-       _enter(",%x,{%llx:%llu},,",
-              key_serial(op->key), vp->fid.vid, vp->fid.vnode);
-
-       call = afs_alloc_flat_call(op->net, &yfs_RXYFSFetchStatus_vnode,
-                                  sizeof(__be32) * 2 +
-                                  sizeof(struct yfs_xdr_YFSFid),
-                                  sizeof(struct yfs_xdr_YFSFetchStatus) +
-                                  sizeof(struct yfs_xdr_YFSCallBack) +
-                                  sizeof(struct yfs_xdr_YFSVolSync));
-       if (!call)
-               return afs_op_nomem(op);
-
-       /* marshall the parameters */
-       bp = call->request;
-       bp = xdr_encode_u32(bp, YFSFETCHSTATUS);
-       bp = xdr_encode_u32(bp, 0); /* RPC flags */
-       bp = xdr_encode_YFSFid(bp, &vp->fid);
-       yfs_check_req(call, bp);
-
-       trace_afs_make_fs_call(call, &vp->fid);
-       afs_make_op_call(op, call, GFP_NOFS);
-}
-
 /*
  * Deliver reply data to an YFS.FetchData64.
  */
@@ -1604,13 +1539,37 @@ void yfs_fs_release_lock(struct afs_operation *op)
        afs_make_op_call(op, call, GFP_NOFS);
 }
 
+/*
+ * Deliver a reply to YFS.FetchStatus
+ */
+static int yfs_deliver_fs_fetch_status(struct afs_call *call)
+{
+       struct afs_operation *op = call->op;
+       struct afs_vnode_param *vp = &op->file[op->fetch_status.which];
+       const __be32 *bp;
+       int ret;
+
+       ret = afs_transfer_reply(call);
+       if (ret < 0)
+               return ret;
+
+       /* unmarshall the reply once we've received all of it */
+       bp = call->buffer;
+       xdr_decode_YFSFetchStatus(&bp, call, &vp->scb);
+       xdr_decode_YFSCallBack(&bp, call, &vp->scb);
+       xdr_decode_YFSVolSync(&bp, &op->volsync);
+
+       _leave(" = 0 [done]");
+       return 0;
+}
+
 /*
  * YFS.FetchStatus operation type
  */
 static const struct afs_call_type yfs_RXYFSFetchStatus = {
        .name           = "YFS.FetchStatus",
        .op             = yfs_FS_FetchStatus,
-       .deliver        = yfs_deliver_fs_status_cb_and_volsync,
+       .deliver        = yfs_deliver_fs_fetch_status,
        .destructor     = afs_flat_call_destructor,
 };
 
@@ -1619,7 +1578,7 @@ static const struct afs_call_type yfs_RXYFSFetchStatus = {
  */
 void yfs_fs_fetch_status(struct afs_operation *op)
 {
-       struct afs_vnode_param *vp = &op->file[0];
+       struct afs_vnode_param *vp = &op->file[op->fetch_status.which];
        struct afs_call *call;
        __be32 *bp;
 
index 7ecddc2..91e7cc4 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -67,7 +67,7 @@ struct aio_ring {
        unsigned        header_length;  /* size of aio_ring */
 
 
-       struct io_event         io_events[0];
+       struct io_event         io_events[];
 }; /* 128 bytes + ring size */
 
 /*
index 47860e5..0ae656e 100644 (file)
@@ -75,7 +75,7 @@ static void bdev_write_inode(struct block_device *bdev)
 }
 
 /* Kill _all_ buffers and pagecache , dirty or not.. */
-void kill_bdev(struct block_device *bdev)
+static void kill_bdev(struct block_device *bdev)
 {
        struct address_space *mapping = bdev->bd_inode->i_mapping;
 
@@ -84,8 +84,7 @@ void kill_bdev(struct block_device *bdev)
 
        invalidate_bh_lrus();
        truncate_inode_pages(mapping, 0);
-}      
-EXPORT_SYMBOL(kill_bdev);
+}
 
 /* Invalidate clean unused buffers and pagecache. */
 void invalidate_bdev(struct block_device *bdev)
@@ -1565,10 +1564,8 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
         */
        if (!for_part) {
                ret = devcgroup_inode_permission(bdev->bd_inode, perm);
-               if (ret != 0) {
-                       bdput(bdev);
+               if (ret != 0)
                        return ret;
-               }
        }
 
  restart:
@@ -1637,8 +1634,10 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
                                goto out_clear;
                        BUG_ON(for_part);
                        ret = __blkdev_get(whole, mode, 1);
-                       if (ret)
+                       if (ret) {
+                               bdput(whole);
                                goto out_clear;
+                       }
                        bdev->bd_contains = whole;
                        bdev->bd_part = disk_get_part(disk, partno);
                        if (!(disk->flags & GENHD_FL_UP) ||
@@ -1688,7 +1687,6 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
        disk_unblock_events(disk);
        put_disk_and_module(disk);
  out:
-       bdput(bdev);
 
        return ret;
 }
@@ -1755,6 +1753,9 @@ int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder)
                bdput(whole);
        }
 
+       if (res)
+               bdput(bdev);
+
        return res;
 }
 EXPORT_SYMBOL(blkdev_get);
index 4ccb3c9..2e42f47 100644 (file)
@@ -9,7 +9,8 @@ ext4-y  := balloc.o bitmap.o block_validity.o dir.o ext4_jbd2.o extents.o \
                extents_status.o file.o fsmap.o fsync.o hash.o ialloc.o \
                indirect.o inline.o inode.o ioctl.o mballoc.o migrate.o \
                mmp.o move_extent.o namei.o page-io.o readpage.o resize.o \
-               super.o symlink.o sysfs.o xattr.o xattr_trusted.o xattr_user.o
+               super.o symlink.o sysfs.o xattr.o xattr_hurd.o xattr_trusted.o \
+               xattr_user.o
 
 ext4-$(CONFIG_EXT4_FS_POSIX_ACL)       += acl.o
 ext4-$(CONFIG_EXT4_FS_SECURITY)                += xattr_security.o
index c654205..1d82336 100644 (file)
@@ -675,6 +675,7 @@ static int ext4_d_compare(const struct dentry *dentry, unsigned int len,
        struct qstr qstr = {.name = str, .len = len };
        const struct dentry *parent = READ_ONCE(dentry->d_parent);
        const struct inode *inode = READ_ONCE(parent->d_inode);
+       char strbuf[DNAME_INLINE_LEN];
 
        if (!inode || !IS_CASEFOLDED(inode) ||
            !EXT4_SB(inode->i_sb)->s_encoding) {
@@ -683,6 +684,21 @@ static int ext4_d_compare(const struct dentry *dentry, unsigned int len,
                return memcmp(str, name->name, len);
        }
 
+       /*
+        * If the dentry name is stored in-line, then it may be concurrently
+        * modified by a rename.  If this happens, the VFS will eventually retry
+        * the lookup, so it doesn't matter what ->d_compare() returns.
+        * However, it's unsafe to call utf8_strncasecmp() with an unstable
+        * string.  Therefore, we have to copy the name into a temporary buffer.
+        */
+       if (len <= DNAME_INLINE_LEN - 1) {
+               memcpy(strbuf, str, len);
+               strbuf[len] = 0;
+               qstr.name = strbuf;
+               /* prevent compiler from optimizing out the temporary buffer */
+               barrier();
+       }
+
        return ext4_ci_compare(inode, name, &qstr, false);
 }
 
index b08841f..42f5060 100644 (file)
@@ -426,13 +426,16 @@ struct flex_groups {
 #define EXT4_VERITY_FL                 0x00100000 /* Verity protected inode */
 #define EXT4_EA_INODE_FL               0x00200000 /* Inode used for large EA */
 /* 0x00400000 was formerly EXT4_EOFBLOCKS_FL */
+
+#define EXT4_DAX_FL                    0x02000000 /* Inode is DAX */
+
 #define EXT4_INLINE_DATA_FL            0x10000000 /* Inode has inline data. */
 #define EXT4_PROJINHERIT_FL            0x20000000 /* Create with parents projid */
 #define EXT4_CASEFOLD_FL               0x40000000 /* Casefolded directory */
 #define EXT4_RESERVED_FL               0x80000000 /* reserved for ext4 lib */
 
-#define EXT4_FL_USER_VISIBLE           0x705BDFFF /* User visible flags */
-#define EXT4_FL_USER_MODIFIABLE                0x604BC0FF /* User modifiable flags */
+#define EXT4_FL_USER_VISIBLE           0x725BDFFF /* User visible flags */
+#define EXT4_FL_USER_MODIFIABLE                0x624BC0FF /* User modifiable flags */
 
 /* Flags we can manipulate with through EXT4_IOC_FSSETXATTR */
 #define EXT4_FL_XFLAG_VISIBLE          (EXT4_SYNC_FL | \
@@ -440,14 +443,16 @@ struct flex_groups {
                                         EXT4_APPEND_FL | \
                                         EXT4_NODUMP_FL | \
                                         EXT4_NOATIME_FL | \
-                                        EXT4_PROJINHERIT_FL)
+                                        EXT4_PROJINHERIT_FL | \
+                                        EXT4_DAX_FL)
 
 /* Flags that should be inherited by new inodes from their parent. */
 #define EXT4_FL_INHERITED (EXT4_SECRM_FL | EXT4_UNRM_FL | EXT4_COMPR_FL |\
                           EXT4_SYNC_FL | EXT4_NODUMP_FL | EXT4_NOATIME_FL |\
                           EXT4_NOCOMPR_FL | EXT4_JOURNAL_DATA_FL |\
                           EXT4_NOTAIL_FL | EXT4_DIRSYNC_FL |\
-                          EXT4_PROJINHERIT_FL | EXT4_CASEFOLD_FL)
+                          EXT4_PROJINHERIT_FL | EXT4_CASEFOLD_FL |\
+                          EXT4_DAX_FL)
 
 /* Flags that are appropriate for regular files (all but dir-specific ones). */
 #define EXT4_REG_FLMASK (~(EXT4_DIRSYNC_FL | EXT4_TOPDIR_FL | EXT4_CASEFOLD_FL |\
@@ -459,6 +464,10 @@ struct flex_groups {
 /* The only flags that should be swapped */
 #define EXT4_FL_SHOULD_SWAP (EXT4_HUGE_FILE_FL | EXT4_EXTENTS_FL)
 
+/* Flags which are mutually exclusive to DAX */
+#define EXT4_DAX_MUT_EXCL (EXT4_VERITY_FL | EXT4_ENCRYPT_FL |\
+                          EXT4_JOURNAL_DATA_FL)
+
 /* Mask out flags that are inappropriate for the given type of inode. */
 static inline __u32 ext4_mask_flags(umode_t mode, __u32 flags)
 {
@@ -499,6 +508,7 @@ enum {
        EXT4_INODE_VERITY       = 20,   /* Verity protected inode */
        EXT4_INODE_EA_INODE     = 21,   /* Inode used for large EA */
 /* 22 was formerly EXT4_INODE_EOFBLOCKS */
+       EXT4_INODE_DAX          = 25,   /* Inode is DAX */
        EXT4_INODE_INLINE_DATA  = 28,   /* Data in inode. */
        EXT4_INODE_PROJINHERIT  = 29,   /* Create with parents projid */
        EXT4_INODE_CASEFOLD     = 30,   /* Casefolded directory */
@@ -1135,9 +1145,9 @@ struct ext4_inode_info {
 #define EXT4_MOUNT_MINIX_DF            0x00080 /* Mimics the Minix statfs */
 #define EXT4_MOUNT_NOLOAD              0x00100 /* Don't use existing journal*/
 #ifdef CONFIG_FS_DAX
-#define EXT4_MOUNT_DAX                 0x00200 /* Direct Access */
+#define EXT4_MOUNT_DAX_ALWAYS          0x00200 /* Direct Access */
 #else
-#define EXT4_MOUNT_DAX                 0
+#define EXT4_MOUNT_DAX_ALWAYS          0
 #endif
 #define EXT4_MOUNT_DATA_FLAGS          0x00C00 /* Mode for data writes: */
 #define EXT4_MOUNT_JOURNAL_DATA                0x00400 /* Write data to journal */
@@ -1180,6 +1190,8 @@ struct ext4_inode_info {
                                                      blocks */
 #define EXT4_MOUNT2_HURD_COMPAT                0x00000004 /* Support HURD-castrated
                                                      file systems */
+#define EXT4_MOUNT2_DAX_NEVER          0x00000008 /* Do not allow Direct Access */
+#define EXT4_MOUNT2_DAX_INODE          0x00000010 /* For printing options only */
 
 #define EXT4_MOUNT2_EXPLICIT_JOURNAL_CHECKSUM  0x00000008 /* User explicitly
                                                specified journal checksum */
@@ -1992,6 +2004,7 @@ static inline bool ext4_has_incompat_features(struct super_block *sb)
  */
 #define EXT4_FLAGS_RESIZING    0
 #define EXT4_FLAGS_SHUTDOWN    1
+#define EXT4_FLAGS_BDEV_IS_DAX 2
 
 static inline int ext4_forced_shutdown(struct ext4_sb_info *sbi)
 {
@@ -2705,7 +2718,7 @@ extern int ext4_can_truncate(struct inode *inode);
 extern int ext4_truncate(struct inode *);
 extern int ext4_break_layouts(struct inode *);
 extern int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length);
-extern void ext4_set_inode_flags(struct inode *);
+extern void ext4_set_inode_flags(struct inode *, bool init);
 extern int ext4_alloc_da_blocks(struct inode *inode);
 extern void ext4_set_aops(struct inode *inode);
 extern int ext4_writepage_trans_blocks(struct inode *);
index 7d088ff..221f240 100644 (file)
@@ -2844,7 +2844,7 @@ again:
                         * in use to avoid freeing it when removing blocks.
                         */
                        if (sbi->s_cluster_ratio > 1) {
-                               pblk = ext4_ext_pblock(ex) + end - ee_block + 2;
+                               pblk = ext4_ext_pblock(ex) + end - ee_block + 1;
                                partial.pclu = EXT4_B2C(sbi, pblk);
                                partial.state = nofree;
                        }
index 54d324e..df25d38 100644 (file)
@@ -1116,7 +1116,7 @@ got:
        ei->i_block_group = group;
        ei->i_last_alloc_group = ~0;
 
-       ext4_set_inode_flags(inode);
+       ext4_set_inode_flags(inode, true);
        if (IS_DIRSYNC(inode))
                ext4_handle_sync(handle);
        if (insert_inode_locked(inode) < 0) {
index 40ec5c7..10dd470 100644 (file)
@@ -4403,9 +4403,11 @@ int ext4_get_inode_loc(struct inode *inode, struct ext4_iloc *iloc)
                !ext4_test_inode_state(inode, EXT4_STATE_XATTR));
 }
 
-static bool ext4_should_use_dax(struct inode *inode)
+static bool ext4_should_enable_dax(struct inode *inode)
 {
-       if (!test_opt(inode->i_sb, DAX))
+       struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
+
+       if (test_opt2(inode->i_sb, DAX_NEVER))
                return false;
        if (!S_ISREG(inode->i_mode))
                return false;
@@ -4417,14 +4419,21 @@ static bool ext4_should_use_dax(struct inode *inode)
                return false;
        if (ext4_test_inode_flag(inode, EXT4_INODE_VERITY))
                return false;
-       return true;
+       if (!test_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags))
+               return false;
+       if (test_opt(inode->i_sb, DAX_ALWAYS))
+               return true;
+
+       return ext4_test_inode_flag(inode, EXT4_INODE_DAX);
 }
 
-void ext4_set_inode_flags(struct inode *inode)
+void ext4_set_inode_flags(struct inode *inode, bool init)
 {
        unsigned int flags = EXT4_I(inode)->i_flags;
        unsigned int new_fl = 0;
 
+       WARN_ON_ONCE(IS_DAX(inode) && init);
+
        if (flags & EXT4_SYNC_FL)
                new_fl |= S_SYNC;
        if (flags & EXT4_APPEND_FL)
@@ -4435,8 +4444,13 @@ void ext4_set_inode_flags(struct inode *inode)
                new_fl |= S_NOATIME;
        if (flags & EXT4_DIRSYNC_FL)
                new_fl |= S_DIRSYNC;
-       if (ext4_should_use_dax(inode))
+
+       /* Because of the way inode_set_flags() works we must preserve S_DAX
+        * here if already set. */
+       new_fl |= (inode->i_flags & S_DAX);
+       if (init && ext4_should_enable_dax(inode))
                new_fl |= S_DAX;
+
        if (flags & EXT4_ENCRYPT_FL)
                new_fl |= S_ENCRYPTED;
        if (flags & EXT4_CASEFOLD_FL)
@@ -4650,7 +4664,7 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
                 * not initialized on a new filesystem. */
        }
        ei->i_flags = le32_to_cpu(raw_inode->i_flags);
-       ext4_set_inode_flags(inode);
+       ext4_set_inode_flags(inode, true);
        inode->i_blocks = ext4_inode_blocks(raw_inode, ei);
        ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl_lo);
        if (ext4_has_feature_64bit(sb))
index 2162db0..999cf6a 100644 (file)
@@ -292,6 +292,38 @@ static int ext4_ioctl_check_immutable(struct inode *inode, __u32 new_projid,
        return 0;
 }
 
+static void ext4_dax_dontcache(struct inode *inode, unsigned int flags)
+{
+       struct ext4_inode_info *ei = EXT4_I(inode);
+
+       if (S_ISDIR(inode->i_mode))
+               return;
+
+       if (test_opt2(inode->i_sb, DAX_NEVER) ||
+           test_opt(inode->i_sb, DAX_ALWAYS))
+               return;
+
+       if ((ei->i_flags ^ flags) & EXT4_DAX_FL)
+               d_mark_dontcache(inode);
+}
+
+static bool dax_compatible(struct inode *inode, unsigned int oldflags,
+                          unsigned int flags)
+{
+       if (flags & EXT4_DAX_FL) {
+               if ((oldflags & EXT4_DAX_MUT_EXCL) ||
+                    ext4_test_inode_state(inode,
+                                         EXT4_STATE_VERITY_IN_PROGRESS)) {
+                       return false;
+               }
+       }
+
+       if ((flags & EXT4_DAX_MUT_EXCL) && (oldflags & EXT4_DAX_FL))
+                       return false;
+
+       return true;
+}
+
 static int ext4_ioctl_setflags(struct inode *inode,
                               unsigned int flags)
 {
@@ -300,7 +332,6 @@ static int ext4_ioctl_setflags(struct inode *inode,
        int err = -EPERM, migrate = 0;
        struct ext4_iloc iloc;
        unsigned int oldflags, mask, i;
-       unsigned int jflag;
        struct super_block *sb = inode->i_sb;
 
        /* Is it quota file? Do not allow user to mess with it */
@@ -309,9 +340,6 @@ static int ext4_ioctl_setflags(struct inode *inode,
 
        oldflags = ei->i_flags;
 
-       /* The JOURNAL_DATA flag is modifiable only by root */
-       jflag = flags & EXT4_JOURNAL_DATA_FL;
-
        err = vfs_ioc_setflags_prepare(inode, oldflags, flags);
        if (err)
                goto flags_out;
@@ -320,10 +348,16 @@ static int ext4_ioctl_setflags(struct inode *inode,
         * The JOURNAL_DATA flag can only be changed by
         * the relevant capability.
         */
-       if ((jflag ^ oldflags) & (EXT4_JOURNAL_DATA_FL)) {
+       if ((flags ^ oldflags) & (EXT4_JOURNAL_DATA_FL)) {
                if (!capable(CAP_SYS_RESOURCE))
                        goto flags_out;
        }
+
+       if (!dax_compatible(inode, oldflags, flags)) {
+               err = -EOPNOTSUPP;
+               goto flags_out;
+       }
+
        if ((flags ^ oldflags) & EXT4_EXTENTS_FL)
                migrate = 1;
 
@@ -369,6 +403,8 @@ static int ext4_ioctl_setflags(struct inode *inode,
        if (err)
                goto flags_err;
 
+       ext4_dax_dontcache(inode, flags);
+
        for (i = 0, mask = 1; i < 32; i++, mask <<= 1) {
                if (!(mask & EXT4_FL_USER_MODIFIABLE))
                        continue;
@@ -381,7 +417,8 @@ static int ext4_ioctl_setflags(struct inode *inode,
                        ext4_clear_inode_flag(inode, i);
        }
 
-       ext4_set_inode_flags(inode);
+       ext4_set_inode_flags(inode, false);
+
        inode->i_ctime = current_time(inode);
 
        err = ext4_mark_iloc_dirty(handle, inode, &iloc);
@@ -390,17 +427,18 @@ flags_err:
        if (err)
                goto flags_out;
 
-       if ((jflag ^ oldflags) & (EXT4_JOURNAL_DATA_FL)) {
+       if ((flags ^ oldflags) & (EXT4_JOURNAL_DATA_FL)) {
                /*
                 * Changes to the journaling mode can cause unsafe changes to
-                * S_DAX if we are using the DAX mount option.
+                * S_DAX if the inode is DAX
                 */
-               if (test_opt(inode->i_sb, DAX)) {
+               if (IS_DAX(inode)) {
                        err = -EBUSY;
                        goto flags_out;
                }
 
-               err = ext4_change_inode_journal_flag(inode, jflag);
+               err = ext4_change_inode_journal_flag(inode,
+                                                    flags & EXT4_JOURNAL_DATA_FL);
                if (err)
                        goto flags_out;
        }
@@ -527,12 +565,15 @@ static inline __u32 ext4_iflags_to_xflags(unsigned long iflags)
                xflags |= FS_XFLAG_NOATIME;
        if (iflags & EXT4_PROJINHERIT_FL)
                xflags |= FS_XFLAG_PROJINHERIT;
+       if (iflags & EXT4_DAX_FL)
+               xflags |= FS_XFLAG_DAX;
        return xflags;
 }
 
 #define EXT4_SUPPORTED_FS_XFLAGS (FS_XFLAG_SYNC | FS_XFLAG_IMMUTABLE | \
                                  FS_XFLAG_APPEND | FS_XFLAG_NODUMP | \
-                                 FS_XFLAG_NOATIME | FS_XFLAG_PROJINHERIT)
+                                 FS_XFLAG_NOATIME | FS_XFLAG_PROJINHERIT | \
+                                 FS_XFLAG_DAX)
 
 /* Transfer xflags flags to internal */
 static inline unsigned long ext4_xflags_to_iflags(__u32 xflags)
@@ -551,6 +592,8 @@ static inline unsigned long ext4_xflags_to_iflags(__u32 xflags)
                iflags |= EXT4_NOATIME_FL;
        if (xflags & FS_XFLAG_PROJINHERIT)
                iflags |= EXT4_PROJINHERIT_FL;
+       if (xflags & FS_XFLAG_DAX)
+               iflags |= EXT4_DAX_FL;
 
        return iflags;
 }
index a908311..c0a331e 100644 (file)
@@ -4708,7 +4708,7 @@ ext4_fsblk_t ext4_mb_new_blocks(handle_t *handle,
        }
 
        ac->ac_op = EXT4_MB_HISTORY_PREALLOC;
-       seq = *this_cpu_ptr(&discard_pa_seq);
+       seq = this_cpu_read(discard_pa_seq);
        if (!ext4_mb_use_preallocated(ac)) {
                ac->ac_op = EXT4_MB_HISTORY_ALLOC;
                ext4_mb_normalize_request(ac, ar);
index c668f6b..330957e 100644 (file)
@@ -522,9 +522,6 @@ static void ext4_handle_error(struct super_block *sb)
                smp_wmb();
                sb->s_flags |= SB_RDONLY;
        } else if (test_opt(sb, ERRORS_PANIC)) {
-               if (EXT4_SB(sb)->s_journal &&
-                 !(EXT4_SB(sb)->s_journal->j_flags & JBD2_REC_ERR))
-                       return;
                panic("EXT4-fs (device %s): panic forced after error\n",
                        sb->s_id);
        }
@@ -725,23 +722,20 @@ void __ext4_abort(struct super_block *sb, const char *function,
        va_end(args);
 
        if (sb_rdonly(sb) == 0) {
-               ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
                EXT4_SB(sb)->s_mount_flags |= EXT4_MF_FS_ABORTED;
+               if (EXT4_SB(sb)->s_journal)
+                       jbd2_journal_abort(EXT4_SB(sb)->s_journal, -EIO);
+
+               ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
                /*
                 * Make sure updated value of ->s_mount_flags will be visible
                 * before ->s_flags update
                 */
                smp_wmb();
                sb->s_flags |= SB_RDONLY;
-               if (EXT4_SB(sb)->s_journal)
-                       jbd2_journal_abort(EXT4_SB(sb)->s_journal, -EIO);
        }
-       if (test_opt(sb, ERRORS_PANIC) && !system_going_down()) {
-               if (EXT4_SB(sb)->s_journal &&
-                 !(EXT4_SB(sb)->s_journal->j_flags & JBD2_REC_ERR))
-                       return;
+       if (test_opt(sb, ERRORS_PANIC) && !system_going_down())
                panic("EXT4-fs panic from previous error\n");
-       }
 }
 
 void __ext4_msg(struct super_block *sb,
@@ -1324,6 +1318,9 @@ static int ext4_set_context(struct inode *inode, const void *ctx, size_t len,
        if (WARN_ON_ONCE(IS_DAX(inode) && i_size_read(inode)))
                return -EINVAL;
 
+       if (ext4_test_inode_flag(inode, EXT4_INODE_DAX))
+               return -EOPNOTSUPP;
+
        res = ext4_convert_inline_data(inode);
        if (res)
                return res;
@@ -1349,7 +1346,7 @@ static int ext4_set_context(struct inode *inode, const void *ctx, size_t len,
                         * Update inode->i_flags - S_ENCRYPTED will be enabled,
                         * S_DAX may be disabled
                         */
-                       ext4_set_inode_flags(inode);
+                       ext4_set_inode_flags(inode, false);
                }
                return res;
        }
@@ -1376,7 +1373,7 @@ retry:
                 * Update inode->i_flags - S_ENCRYPTED will be enabled,
                 * S_DAX may be disabled
                 */
-               ext4_set_inode_flags(inode);
+               ext4_set_inode_flags(inode, false);
                res = ext4_mark_inode_dirty(handle, inode);
                if (res)
                        EXT4_ERROR_INODE(inode, "Failed to mark inode dirty");
@@ -1514,7 +1511,8 @@ enum {
        Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
        Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
        Opt_noquota, Opt_barrier, Opt_nobarrier, Opt_err,
-       Opt_usrquota, Opt_grpquota, Opt_prjquota, Opt_i_version, Opt_dax,
+       Opt_usrquota, Opt_grpquota, Opt_prjquota, Opt_i_version,
+       Opt_dax, Opt_dax_always, Opt_dax_inode, Opt_dax_never,
        Opt_stripe, Opt_delalloc, Opt_nodelalloc, Opt_warn_on_error,
        Opt_nowarn_on_error, Opt_mblk_io_submit,
        Opt_lazytime, Opt_nolazytime, Opt_debug_want_extra_isize,
@@ -1581,6 +1579,9 @@ static const match_table_t tokens = {
        {Opt_nobarrier, "nobarrier"},
        {Opt_i_version, "i_version"},
        {Opt_dax, "dax"},
+       {Opt_dax_always, "dax=always"},
+       {Opt_dax_inode, "dax=inode"},
+       {Opt_dax_never, "dax=never"},
        {Opt_stripe, "stripe=%u"},
        {Opt_delalloc, "delalloc"},
        {Opt_warn_on_error, "warn_on_error"},
@@ -1729,6 +1730,7 @@ static int clear_qf_name(struct super_block *sb, int qtype)
 #define MOPT_NO_EXT3   0x0200
 #define MOPT_EXT4_ONLY (MOPT_NO_EXT2 | MOPT_NO_EXT3)
 #define MOPT_STRING    0x0400
+#define MOPT_SKIP      0x0800
 
 static const struct mount_opts {
        int     token;
@@ -1778,7 +1780,13 @@ static const struct mount_opts {
        {Opt_min_batch_time, 0, MOPT_GTE0},
        {Opt_inode_readahead_blks, 0, MOPT_GTE0},
        {Opt_init_itable, 0, MOPT_GTE0},
-       {Opt_dax, EXT4_MOUNT_DAX, MOPT_SET},
+       {Opt_dax, EXT4_MOUNT_DAX_ALWAYS, MOPT_SET | MOPT_SKIP},
+       {Opt_dax_always, EXT4_MOUNT_DAX_ALWAYS,
+               MOPT_EXT4_ONLY | MOPT_SET | MOPT_SKIP},
+       {Opt_dax_inode, EXT4_MOUNT2_DAX_INODE,
+               MOPT_EXT4_ONLY | MOPT_SET | MOPT_SKIP},
+       {Opt_dax_never, EXT4_MOUNT2_DAX_NEVER,
+               MOPT_EXT4_ONLY | MOPT_SET | MOPT_SKIP},
        {Opt_stripe, 0, MOPT_GTE0},
        {Opt_resuid, 0, MOPT_GTE0},
        {Opt_resgid, 0, MOPT_GTE0},
@@ -2123,13 +2131,56 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token,
                }
                sbi->s_jquota_fmt = m->mount_opt;
 #endif
-       } else if (token == Opt_dax) {
+       } else if (token == Opt_dax || token == Opt_dax_always ||
+                  token == Opt_dax_inode || token == Opt_dax_never) {
 #ifdef CONFIG_FS_DAX
-               ext4_msg(sb, KERN_WARNING,
-               "DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
-               sbi->s_mount_opt |= m->mount_opt;
+               switch (token) {
+               case Opt_dax:
+               case Opt_dax_always:
+                       if (is_remount &&
+                           (!(sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) ||
+                            (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER))) {
+                       fail_dax_change_remount:
+                               ext4_msg(sb, KERN_ERR, "can't change "
+                                        "dax mount option while remounting");
+                               return -1;
+                       }
+                       if (is_remount &&
+                           (test_opt(sb, DATA_FLAGS) ==
+                            EXT4_MOUNT_JOURNAL_DATA)) {
+                                   ext4_msg(sb, KERN_ERR, "can't mount with "
+                                            "both data=journal and dax");
+                                   return -1;
+                       }
+                       ext4_msg(sb, KERN_WARNING,
+                               "DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
+                       sbi->s_mount_opt |= EXT4_MOUNT_DAX_ALWAYS;
+                       sbi->s_mount_opt2 &= ~EXT4_MOUNT2_DAX_NEVER;
+                       break;
+               case Opt_dax_never:
+                       if (is_remount &&
+                           (!(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) ||
+                            (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS)))
+                               goto fail_dax_change_remount;
+                       sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_NEVER;
+                       sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS;
+                       break;
+               case Opt_dax_inode:
+                       if (is_remount &&
+                           ((sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) ||
+                            (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) ||
+                            !(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_INODE)))
+                               goto fail_dax_change_remount;
+                       sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS;
+                       sbi->s_mount_opt2 &= ~EXT4_MOUNT2_DAX_NEVER;
+                       /* Strictly for printing options */
+                       sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_INODE;
+                       break;
+               }
 #else
                ext4_msg(sb, KERN_INFO, "dax option not supported");
+               sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_NEVER;
+               sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS;
                return -1;
 #endif
        } else if (token == Opt_data_err_abort) {
@@ -2293,7 +2344,7 @@ static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
        for (m = ext4_mount_opts; m->token != Opt_err; m++) {
                int want_set = m->flags & MOPT_SET;
                if (((m->flags & (MOPT_SET|MOPT_CLEAR)) == 0) ||
-                   (m->flags & MOPT_CLEAR_ERR))
+                   (m->flags & MOPT_CLEAR_ERR) || m->flags & MOPT_SKIP)
                        continue;
                if (!nodefs && !(m->mount_opt & (sbi->s_mount_opt ^ def_mount_opt)))
                        continue; /* skip if same as the default */
@@ -2353,6 +2404,17 @@ static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
 
        fscrypt_show_test_dummy_encryption(seq, sep, sb);
 
+       if (test_opt(sb, DAX_ALWAYS)) {
+               if (IS_EXT2_SB(sb))
+                       SEQ_OPTS_PUTS("dax");
+               else
+                       SEQ_OPTS_PUTS("dax=always");
+       } else if (test_opt2(sb, DAX_NEVER)) {
+               SEQ_OPTS_PUTS("dax=never");
+       } else if (test_opt2(sb, DAX_INODE)) {
+               SEQ_OPTS_PUTS("dax=inode");
+       }
+
        ext4_show_quota_options(seq, sb);
        return 0;
 }
@@ -2383,6 +2445,7 @@ static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es,
                ext4_msg(sb, KERN_ERR, "revision level too high, "
                         "forcing read-only mode");
                err = -EROFS;
+               goto done;
        }
        if (read_only)
                goto done;
@@ -4017,7 +4080,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
                                 "both data=journal and delalloc");
                        goto failed_mount;
                }
-               if (test_opt(sb, DAX)) {
+               if (test_opt(sb, DAX_ALWAYS)) {
                        ext4_msg(sb, KERN_ERR, "can't mount with "
                                 "both data=journal and dax");
                        goto failed_mount;
@@ -4127,13 +4190,16 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
                goto failed_mount;
        }
 
-       if (sbi->s_mount_opt & EXT4_MOUNT_DAX) {
+       if (bdev_dax_supported(sb->s_bdev, blocksize))
+               set_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags);
+
+       if (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) {
                if (ext4_has_feature_inline_data(sb)) {
                        ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem"
                                        " that may contain inline data");
                        goto failed_mount;
                }
-               if (!bdev_dax_supported(sb->s_bdev, blocksize)) {
+               if (!test_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags)) {
                        ext4_msg(sb, KERN_ERR,
                                "DAX unsupported by block device.");
                        goto failed_mount;
@@ -5447,12 +5513,6 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
                        err = -EINVAL;
                        goto restore_opts;
                }
-               if (test_opt(sb, DAX)) {
-                       ext4_msg(sb, KERN_ERR, "can't mount with "
-                                "both data=journal and dax");
-                       err = -EINVAL;
-                       goto restore_opts;
-               }
        } else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) {
                if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
                        ext4_msg(sb, KERN_ERR, "can't mount with "
@@ -5468,12 +5528,6 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
                goto restore_opts;
        }
 
-       if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT4_MOUNT_DAX) {
-               ext4_msg(sb, KERN_WARNING, "warning: refusing change of "
-                       "dax flag with busy inodes while remounting");
-               sbi->s_mount_opt ^= EXT4_MOUNT_DAX;
-       }
-
        if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED)
                ext4_abort(sb, EXT4_ERR_ESHUTDOWN, "Abort forced by user");
 
index dec1244..bbd5e7e 100644 (file)
@@ -113,6 +113,9 @@ static int ext4_begin_enable_verity(struct file *filp)
        handle_t *handle;
        int err;
 
+       if (IS_DAX(inode) || ext4_test_inode_flag(inode, EXT4_INODE_DAX))
+               return -EINVAL;
+
        if (ext4_verity_in_progress(inode))
                return -EBUSY;
 
@@ -241,7 +244,7 @@ static int ext4_end_enable_verity(struct file *filp, const void *desc,
                if (err)
                        goto out_stop;
                ext4_set_inode_flag(inode, EXT4_INODE_VERITY);
-               ext4_set_inode_flags(inode);
+               ext4_set_inode_flags(inode, false);
                err = ext4_mark_iloc_dirty(handle, inode, &iloc);
        }
 out_stop:
index 9b29a40..7d2f657 100644 (file)
@@ -93,6 +93,7 @@ static const struct xattr_handler * const ext4_xattr_handler_map[] = {
 #ifdef CONFIG_EXT4_FS_SECURITY
        [EXT4_XATTR_INDEX_SECURITY]          = &ext4_xattr_security_handler,
 #endif
+       [EXT4_XATTR_INDEX_HURD]              = &ext4_xattr_hurd_handler,
 };
 
 const struct xattr_handler *ext4_xattr_handlers[] = {
@@ -105,6 +106,7 @@ const struct xattr_handler *ext4_xattr_handlers[] = {
 #ifdef CONFIG_EXT4_FS_SECURITY
        &ext4_xattr_security_handler,
 #endif
+       &ext4_xattr_hurd_handler,
        NULL
 };
 
index ffe21ac..730b91f 100644 (file)
@@ -124,6 +124,7 @@ struct ext4_xattr_inode_array {
 extern const struct xattr_handler ext4_xattr_user_handler;
 extern const struct xattr_handler ext4_xattr_trusted_handler;
 extern const struct xattr_handler ext4_xattr_security_handler;
+extern const struct xattr_handler ext4_xattr_hurd_handler;
 
 #define EXT4_XATTR_NAME_ENCRYPTION_CONTEXT "c"
 
diff --git a/fs/ext4/xattr_hurd.c b/fs/ext4/xattr_hurd.c
new file mode 100644 (file)
index 0000000..8cfa74a
--- /dev/null
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * linux/fs/ext4/xattr_hurd.c
+ * Handler for extended gnu attributes for the Hurd.
+ *
+ * Copyright (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
+ * Copyright (C) 2020 by Jan (janneke) Nieuwenhuizen, <janneke@gnu.org>
+ */
+
+#include <linux/init.h>
+#include <linux/string.h>
+#include "ext4.h"
+#include "xattr.h"
+
+static bool
+ext4_xattr_hurd_list(struct dentry *dentry)
+{
+       return test_opt(dentry->d_sb, XATTR_USER);
+}
+
+static int
+ext4_xattr_hurd_get(const struct xattr_handler *handler,
+                   struct dentry *unused, struct inode *inode,
+                   const char *name, void *buffer, size_t size)
+{
+       if (!test_opt(inode->i_sb, XATTR_USER))
+               return -EOPNOTSUPP;
+
+       return ext4_xattr_get(inode, EXT4_XATTR_INDEX_HURD,
+                             name, buffer, size);
+}
+
+static int
+ext4_xattr_hurd_set(const struct xattr_handler *handler,
+                   struct dentry *unused, struct inode *inode,
+                   const char *name, const void *value,
+                   size_t size, int flags)
+{
+       if (!test_opt(inode->i_sb, XATTR_USER))
+               return -EOPNOTSUPP;
+
+       return ext4_xattr_set(inode, EXT4_XATTR_INDEX_HURD,
+                             name, value, size, flags);
+}
+
+const struct xattr_handler ext4_xattr_hurd_handler = {
+       .prefix = XATTR_HURD_PREFIX,
+       .list   = ext4_xattr_hurd_list,
+       .get    = ext4_xattr_hurd_get,
+       .set    = ext4_xattr_hurd_set,
+};
index 0b65a91..47c5f3a 100644 (file)
@@ -903,13 +903,15 @@ void io_wq_cancel_all(struct io_wq *wq)
 struct io_cb_cancel_data {
        work_cancel_fn *fn;
        void *data;
+       int nr_running;
+       int nr_pending;
+       bool cancel_all;
 };
 
 static bool io_wq_worker_cancel(struct io_worker *worker, void *data)
 {
        struct io_cb_cancel_data *match = data;
        unsigned long flags;
-       bool ret = false;
 
        /*
         * Hold the lock to avoid ->cur_work going out of scope, caller
@@ -920,74 +922,90 @@ static bool io_wq_worker_cancel(struct io_worker *worker, void *data)
            !(worker->cur_work->flags & IO_WQ_WORK_NO_CANCEL) &&
            match->fn(worker->cur_work, match->data)) {
                send_sig(SIGINT, worker->task, 1);
-               ret = true;
+               match->nr_running++;
        }
        spin_unlock_irqrestore(&worker->lock, flags);
 
-       return ret;
+       return match->nr_running && !match->cancel_all;
 }
 
-static enum io_wq_cancel io_wqe_cancel_work(struct io_wqe *wqe,
-                                           struct io_cb_cancel_data *match)
+static void io_wqe_cancel_pending_work(struct io_wqe *wqe,
+                                      struct io_cb_cancel_data *match)
 {
        struct io_wq_work_node *node, *prev;
        struct io_wq_work *work;
        unsigned long flags;
-       bool found = false;
 
-       /*
-        * First check pending list, if we're lucky we can just remove it
-        * from there. CANCEL_OK means that the work is returned as-new,
-        * no completion will be posted for it.
-        */
+retry:
        spin_lock_irqsave(&wqe->lock, flags);
        wq_list_for_each(node, prev, &wqe->work_list) {
                work = container_of(node, struct io_wq_work, list);
+               if (!match->fn(work, match->data))
+                       continue;
 
-               if (match->fn(work, match->data)) {
-                       wq_list_del(&wqe->work_list, node, prev);
-                       found = true;
-                       break;
-               }
-       }
-       spin_unlock_irqrestore(&wqe->lock, flags);
-
-       if (found) {
+               wq_list_del(&wqe->work_list, node, prev);
+               spin_unlock_irqrestore(&wqe->lock, flags);
                io_run_cancel(work, wqe);
-               return IO_WQ_CANCEL_OK;
+               match->nr_pending++;
+               if (!match->cancel_all)
+                       return;
+
+               /* not safe to continue after unlock */
+               goto retry;
        }
+       spin_unlock_irqrestore(&wqe->lock, flags);
+}
 
-       /*
-        * Now check if a free (going busy) or busy worker has the work
-        * currently running. If we find it there, we'll return CANCEL_RUNNING
-        * as an indication that we attempt to signal cancellation. The
-        * completion will run normally in this case.
-        */
+static void io_wqe_cancel_running_work(struct io_wqe *wqe,
+                                      struct io_cb_cancel_data *match)
+{
        rcu_read_lock();
-       found = io_wq_for_each_worker(wqe, io_wq_worker_cancel, match);
+       io_wq_for_each_worker(wqe, io_wq_worker_cancel, match);
        rcu_read_unlock();
-       return found ? IO_WQ_CANCEL_RUNNING : IO_WQ_CANCEL_NOTFOUND;
 }
 
 enum io_wq_cancel io_wq_cancel_cb(struct io_wq *wq, work_cancel_fn *cancel,
-                                 void *data)
+                                 void *data, bool cancel_all)
 {
        struct io_cb_cancel_data match = {
-               .fn     = cancel,
-               .data   = data,
+               .fn             = cancel,
+               .data           = data,
+               .cancel_all     = cancel_all,
        };
-       enum io_wq_cancel ret = IO_WQ_CANCEL_NOTFOUND;
        int node;
 
+       /*
+        * First check pending list, if we're lucky we can just remove it
+        * from there. CANCEL_OK means that the work is returned as-new,
+        * no completion will be posted for it.
+        */
        for_each_node(node) {
                struct io_wqe *wqe = wq->wqes[node];
 
-               ret = io_wqe_cancel_work(wqe, &match);
-               if (ret != IO_WQ_CANCEL_NOTFOUND)
-                       break;
+               io_wqe_cancel_pending_work(wqe, &match);
+               if (match.nr_pending && !match.cancel_all)
+                       return IO_WQ_CANCEL_OK;
        }
 
-       return ret;
+       /*
+        * Now check if a free (going busy) or busy worker has the work
+        * currently running. If we find it there, we'll return CANCEL_RUNNING
+        * as an indication that we attempt to signal cancellation. The
+        * completion will run normally in this case.
+        */
+       for_each_node(node) {
+               struct io_wqe *wqe = wq->wqes[node];
+
+               io_wqe_cancel_running_work(wqe, &match);
+               if (match.nr_running && !match.cancel_all)
+                       return IO_WQ_CANCEL_RUNNING;
+       }
+
+       if (match.nr_running)
+               return IO_WQ_CANCEL_RUNNING;
+       if (match.nr_pending)
+               return IO_WQ_CANCEL_OK;
+       return IO_WQ_CANCEL_NOTFOUND;
 }
 
 static bool io_wq_io_cb_cancel_data(struct io_wq_work *work, void *data)
@@ -997,21 +1015,7 @@ static bool io_wq_io_cb_cancel_data(struct io_wq_work *work, void *data)
 
 enum io_wq_cancel io_wq_cancel_work(struct io_wq *wq, struct io_wq_work *cwork)
 {
-       return io_wq_cancel_cb(wq, io_wq_io_cb_cancel_data, (void *)cwork);
-}
-
-static bool io_wq_pid_match(struct io_wq_work *work, void *data)
-{
-       pid_t pid = (pid_t) (unsigned long) data;
-
-       return work->task_pid == pid;
-}
-
-enum io_wq_cancel io_wq_cancel_pid(struct io_wq *wq, pid_t pid)
-{
-       void *data = (void *) (unsigned long) pid;
-
-       return io_wq_cancel_cb(wq, io_wq_pid_match, data);
+       return io_wq_cancel_cb(wq, io_wq_io_cb_cancel_data, (void *)cwork, false);
 }
 
 struct io_wq *io_wq_create(unsigned bounded, struct io_wq_data *data)
index 8e138fa..071f1a9 100644 (file)
@@ -90,7 +90,6 @@ struct io_wq_work {
        const struct cred *creds;
        struct fs_struct *fs;
        unsigned flags;
-       pid_t task_pid;
 };
 
 static inline struct io_wq_work *wq_next_work(struct io_wq_work *work)
@@ -125,12 +124,11 @@ static inline bool io_wq_is_hashed(struct io_wq_work *work)
 
 void io_wq_cancel_all(struct io_wq *wq);
 enum io_wq_cancel io_wq_cancel_work(struct io_wq *wq, struct io_wq_work *cwork);
-enum io_wq_cancel io_wq_cancel_pid(struct io_wq *wq, pid_t pid);
 
 typedef bool (work_cancel_fn)(struct io_wq_work *, void *);
 
 enum io_wq_cancel io_wq_cancel_cb(struct io_wq *wq, work_cancel_fn *cancel,
-                                       void *data);
+                                       void *data, bool cancel_all);
 
 struct task_struct *io_wq_get_task(struct io_wq *wq);
 
index 155f3d8..a78201b 100644 (file)
@@ -541,6 +541,7 @@ enum {
        REQ_F_NO_FILE_TABLE_BIT,
        REQ_F_QUEUE_TIMEOUT_BIT,
        REQ_F_WORK_INITIALIZED_BIT,
+       REQ_F_TASK_PINNED_BIT,
 
        /* not a real bit, just to check we're not overflowing the space */
        __REQ_F_LAST_BIT,
@@ -598,6 +599,8 @@ enum {
        REQ_F_QUEUE_TIMEOUT     = BIT(REQ_F_QUEUE_TIMEOUT_BIT),
        /* io_wq_work is initialized */
        REQ_F_WORK_INITIALIZED  = BIT(REQ_F_WORK_INITIALIZED_BIT),
+       /* req->task is refcounted */
+       REQ_F_TASK_PINNED       = BIT(REQ_F_TASK_PINNED_BIT),
 };
 
 struct async_poll {
@@ -910,6 +913,21 @@ struct sock *io_uring_get_socket(struct file *file)
 }
 EXPORT_SYMBOL(io_uring_get_socket);
 
+static void io_get_req_task(struct io_kiocb *req)
+{
+       if (req->flags & REQ_F_TASK_PINNED)
+               return;
+       get_task_struct(req->task);
+       req->flags |= REQ_F_TASK_PINNED;
+}
+
+/* not idempotent -- it doesn't clear REQ_F_TASK_PINNED */
+static void __io_put_req_task(struct io_kiocb *req)
+{
+       if (req->flags & REQ_F_TASK_PINNED)
+               put_task_struct(req->task);
+}
+
 static void io_file_put_work(struct work_struct *work);
 
 /*
@@ -1045,8 +1063,6 @@ static inline void io_req_work_grab_env(struct io_kiocb *req,
                }
                spin_unlock(&current->fs->lock);
        }
-       if (!req->work.task_pid)
-               req->work.task_pid = task_pid_vnr(current);
 }
 
 static inline void io_req_work_drop_env(struct io_kiocb *req)
@@ -1087,6 +1103,7 @@ static inline void io_prep_async_work(struct io_kiocb *req,
                        req->work.flags |= IO_WQ_WORK_UNBOUND;
        }
 
+       io_req_init_async(req);
        io_req_work_grab_env(req, def);
 
        *link = io_prep_linked_timeout(req);
@@ -1398,9 +1415,7 @@ static void __io_req_aux_free(struct io_kiocb *req)
        kfree(req->io);
        if (req->file)
                io_put_file(req, req->file, (req->flags & REQ_F_FIXED_FILE));
-       if (req->task)
-               put_task_struct(req->task);
-
+       __io_put_req_task(req);
        io_req_work_drop_env(req);
 }
 
@@ -1727,6 +1742,18 @@ static int io_put_kbuf(struct io_kiocb *req)
        return cflags;
 }
 
+static void io_iopoll_queue(struct list_head *again)
+{
+       struct io_kiocb *req;
+
+       do {
+               req = list_first_entry(again, struct io_kiocb, list);
+               list_del(&req->list);
+               refcount_inc(&req->refs);
+               io_queue_async_work(req);
+       } while (!list_empty(again));
+}
+
 /*
  * Find and free completed poll iocbs
  */
@@ -1735,12 +1762,21 @@ static void io_iopoll_complete(struct io_ring_ctx *ctx, unsigned int *nr_events,
 {
        struct req_batch rb;
        struct io_kiocb *req;
+       LIST_HEAD(again);
+
+       /* order with ->result store in io_complete_rw_iopoll() */
+       smp_rmb();
 
        rb.to_free = rb.need_iter = 0;
        while (!list_empty(done)) {
                int cflags = 0;
 
                req = list_first_entry(done, struct io_kiocb, list);
+               if (READ_ONCE(req->result) == -EAGAIN) {
+                       req->iopoll_completed = 0;
+                       list_move_tail(&req->list, &again);
+                       continue;
+               }
                list_del(&req->list);
 
                if (req->flags & REQ_F_BUFFER_SELECTED)
@@ -1758,18 +1794,9 @@ static void io_iopoll_complete(struct io_ring_ctx *ctx, unsigned int *nr_events,
        if (ctx->flags & IORING_SETUP_SQPOLL)
                io_cqring_ev_posted(ctx);
        io_free_req_many(ctx, &rb);
-}
 
-static void io_iopoll_queue(struct list_head *again)
-{
-       struct io_kiocb *req;
-
-       do {
-               req = list_first_entry(again, struct io_kiocb, list);
-               list_del(&req->list);
-               refcount_inc(&req->refs);
-               io_queue_async_work(req);
-       } while (!list_empty(again));
+       if (!list_empty(&again))
+               io_iopoll_queue(&again);
 }
 
 static int io_do_iopoll(struct io_ring_ctx *ctx, unsigned int *nr_events,
@@ -1777,7 +1804,6 @@ static int io_do_iopoll(struct io_ring_ctx *ctx, unsigned int *nr_events,
 {
        struct io_kiocb *req, *tmp;
        LIST_HEAD(done);
-       LIST_HEAD(again);
        bool spin;
        int ret;
 
@@ -1803,13 +1829,6 @@ static int io_do_iopoll(struct io_ring_ctx *ctx, unsigned int *nr_events,
                if (!list_empty(&done))
                        break;
 
-               if (req->result == -EAGAIN) {
-                       list_move_tail(&req->list, &again);
-                       continue;
-               }
-               if (!list_empty(&again))
-                       break;
-
                ret = kiocb->ki_filp->f_op->iopoll(kiocb, spin);
                if (ret < 0)
                        break;
@@ -1822,9 +1841,6 @@ static int io_do_iopoll(struct io_ring_ctx *ctx, unsigned int *nr_events,
        if (!list_empty(&done))
                io_iopoll_complete(ctx, nr_events, &done);
 
-       if (!list_empty(&again))
-               io_iopoll_queue(&again);
-
        return ret;
 }
 
@@ -1973,11 +1989,15 @@ static void io_complete_rw_iopoll(struct kiocb *kiocb, long res, long res2)
        if (kiocb->ki_flags & IOCB_WRITE)
                kiocb_end_write(req);
 
-       if (res != req->result)
+       if (res != -EAGAIN && res != req->result)
                req_set_fail_links(req);
-       req->result = res;
-       if (res != -EAGAIN)
+
+       WRITE_ONCE(req->result, res);
+       /* order with io_poll_complete() checking ->result */
+       if (res != -EAGAIN) {
+               smp_wmb();
                WRITE_ONCE(req->iopoll_completed, 1);
+       }
 }
 
 /*
@@ -2650,8 +2670,8 @@ copy_iov:
                }
        }
 out_free:
-       kfree(iovec);
-       req->flags &= ~REQ_F_NEED_CLEANUP;
+       if (!(req->flags & REQ_F_NEED_CLEANUP))
+               kfree(iovec);
        return ret;
 }
 
@@ -2773,8 +2793,8 @@ copy_iov:
                }
        }
 out_free:
-       req->flags &= ~REQ_F_NEED_CLEANUP;
-       kfree(iovec);
+       if (!(req->flags & REQ_F_NEED_CLEANUP))
+               kfree(iovec);
        return ret;
 }
 
@@ -4236,6 +4256,28 @@ static void io_async_queue_proc(struct file *file, struct wait_queue_head *head,
        __io_queue_proc(&pt->req->apoll->poll, pt, head);
 }
 
+static void io_sq_thread_drop_mm(struct io_ring_ctx *ctx)
+{
+       struct mm_struct *mm = current->mm;
+
+       if (mm) {
+               kthread_unuse_mm(mm);
+               mmput(mm);
+       }
+}
+
+static int io_sq_thread_acquire_mm(struct io_ring_ctx *ctx,
+                                  struct io_kiocb *req)
+{
+       if (io_op_defs[req->opcode].needs_mm && !current->mm) {
+               if (unlikely(!mmget_not_zero(ctx->sqo_mm)))
+                       return -EFAULT;
+               kthread_use_mm(ctx->sqo_mm);
+       }
+
+       return 0;
+}
+
 static void io_async_task_func(struct callback_head *cb)
 {
        struct io_kiocb *req = container_of(cb, struct io_kiocb, task_work);
@@ -4270,11 +4312,16 @@ static void io_async_task_func(struct callback_head *cb)
 
        if (!canceled) {
                __set_current_state(TASK_RUNNING);
+               if (io_sq_thread_acquire_mm(ctx, req)) {
+                       io_cqring_add_event(req, -EFAULT);
+                       goto end_req;
+               }
                mutex_lock(&ctx->uring_lock);
                __io_queue_sqe(req, NULL);
                mutex_unlock(&ctx->uring_lock);
        } else {
                io_cqring_ev_posted(ctx);
+end_req:
                req_set_fail_links(req);
                io_double_put_req(req);
        }
@@ -4366,8 +4413,7 @@ static bool io_arm_poll_handler(struct io_kiocb *req)
                memcpy(&apoll->work, &req->work, sizeof(req->work));
        had_io = req->io != NULL;
 
-       get_task_struct(current);
-       req->task = current;
+       io_get_req_task(req);
        req->apoll = apoll;
        INIT_HLIST_NODE(&req->hash_node);
 
@@ -4555,8 +4601,7 @@ static int io_poll_add_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe
        events = READ_ONCE(sqe->poll_events);
        poll->events = demangle_poll(events) | EPOLLERR | EPOLLHUP;
 
-       get_task_struct(current);
-       req->task = current;
+       io_get_req_task(req);
        return 0;
 }
 
@@ -4772,7 +4817,7 @@ static int io_async_cancel_one(struct io_ring_ctx *ctx, void *sqe_addr)
        enum io_wq_cancel cancel_ret;
        int ret = 0;
 
-       cancel_ret = io_wq_cancel_cb(ctx->io_wq, io_cancel_cb, sqe_addr);
+       cancel_ret = io_wq_cancel_cb(ctx->io_wq, io_cancel_cb, sqe_addr, false);
        switch (cancel_ret) {
        case IO_WQ_CANCEL_OK:
                ret = 0;
@@ -5817,17 +5862,14 @@ static int io_init_req(struct io_ring_ctx *ctx, struct io_kiocb *req,
        req->flags = 0;
        /* one is dropped after submission, the other at completion */
        refcount_set(&req->refs, 2);
-       req->task = NULL;
+       req->task = current;
        req->result = 0;
 
        if (unlikely(req->opcode >= IORING_OP_LAST))
                return -EINVAL;
 
-       if (io_op_defs[req->opcode].needs_mm && !current->mm) {
-               if (unlikely(!mmget_not_zero(ctx->sqo_mm)))
-                       return -EFAULT;
-               kthread_use_mm(ctx->sqo_mm);
-       }
+       if (unlikely(io_sq_thread_acquire_mm(ctx, req)))
+               return -EFAULT;
 
        sqe_flags = READ_ONCE(sqe->flags);
        /* enforce forwards compatibility on users */
@@ -5936,16 +5978,6 @@ fail_req:
        return submitted;
 }
 
-static inline void io_sq_thread_drop_mm(struct io_ring_ctx *ctx)
-{
-       struct mm_struct *mm = current->mm;
-
-       if (mm) {
-               kthread_unuse_mm(mm);
-               mmput(mm);
-       }
-}
-
 static int io_sq_thread(void *data)
 {
        struct io_ring_ctx *ctx = data;
@@ -7331,7 +7363,17 @@ static void io_ring_exit_work(struct work_struct *work)
        if (ctx->rings)
                io_cqring_overflow_flush(ctx, true);
 
-       wait_for_completion(&ctx->ref_comp);
+       /*
+        * If we're doing polled IO and end up having requests being
+        * submitted async (out-of-line), then completions can come in while
+        * we're waiting for refs to drop. We need to reap these manually,
+        * as nobody else will be looking for them.
+        */
+       while (!wait_for_completion_timeout(&ctx->ref_comp, HZ/20)) {
+               io_iopoll_reap_events(ctx);
+               if (ctx->rings)
+                       io_cqring_overflow_flush(ctx, true);
+       }
        io_ring_ctx_free(ctx);
 }
 
@@ -7365,9 +7407,22 @@ static int io_uring_release(struct inode *inode, struct file *file)
        return 0;
 }
 
+static bool io_wq_files_match(struct io_wq_work *work, void *data)
+{
+       struct files_struct *files = data;
+
+       return work->files == files;
+}
+
 static void io_uring_cancel_files(struct io_ring_ctx *ctx,
                                  struct files_struct *files)
 {
+       if (list_empty_careful(&ctx->inflight_list))
+               return;
+
+       /* cancel all at once, should be faster than doing it one by one*/
+       io_wq_cancel_cb(ctx->io_wq, io_wq_files_match, files, true);
+
        while (!list_empty_careful(&ctx->inflight_list)) {
                struct io_kiocb *cancel_req = NULL, *req;
                DEFINE_WAIT(wait);
@@ -7423,6 +7478,14 @@ static void io_uring_cancel_files(struct io_ring_ctx *ctx,
        }
 }
 
+static bool io_cancel_task_cb(struct io_wq_work *work, void *data)
+{
+       struct io_kiocb *req = container_of(work, struct io_kiocb, work);
+       struct task_struct *task = data;
+
+       return req->task == task;
+}
+
 static int io_uring_flush(struct file *file, void *data)
 {
        struct io_ring_ctx *ctx = file->private_data;
@@ -7433,7 +7496,7 @@ static int io_uring_flush(struct file *file, void *data)
         * If the task is going away, cancel work it may have pending
         */
        if (fatal_signal_pending(current) || (current->flags & PF_EXITING))
-               io_wq_cancel_pid(ctx->io_wq, task_pid_vnr(current));
+               io_wq_cancel_cb(ctx->io_wq, io_cancel_task_cb, current, true);
 
        return 0;
 }
index a49d0e6..e494443 100644 (file)
@@ -1140,6 +1140,7 @@ static journal_t *journal_init_common(struct block_device *bdev,
        init_waitqueue_head(&journal->j_wait_commit);
        init_waitqueue_head(&journal->j_wait_updates);
        init_waitqueue_head(&journal->j_wait_reserved);
+       mutex_init(&journal->j_abort_mutex);
        mutex_init(&journal->j_barrier);
        mutex_init(&journal->j_checkpoint_mutex);
        spin_lock_init(&journal->j_revoke_lock);
@@ -1402,7 +1403,8 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags)
                printk(KERN_ERR "JBD2: Error %d detected when updating "
                       "journal superblock for %s.\n", ret,
                       journal->j_devname);
-               jbd2_journal_abort(journal, ret);
+               if (!is_journal_aborted(journal))
+                       jbd2_journal_abort(journal, ret);
        }
 
        return ret;
@@ -2153,6 +2155,13 @@ void jbd2_journal_abort(journal_t *journal, int errno)
 {
        transaction_t *transaction;
 
+       /*
+        * Lock the aborting procedure until everything is done, this avoid
+        * races between filesystem's error handling flow (e.g. ext4_abort()),
+        * ensure panic after the error info is written into journal's
+        * superblock.
+        */
+       mutex_lock(&journal->j_abort_mutex);
        /*
         * ESHUTDOWN always takes precedence because a file system check
         * caused by any other journal abort error is not required after
@@ -2167,6 +2176,7 @@ void jbd2_journal_abort(journal_t *journal, int errno)
                        journal->j_errno = errno;
                        jbd2_journal_update_sb_errno(journal);
                }
+               mutex_unlock(&journal->j_abort_mutex);
                return;
        }
 
@@ -2188,10 +2198,7 @@ void jbd2_journal_abort(journal_t *journal, int errno)
         * layer could realise that a filesystem check is needed.
         */
        jbd2_journal_update_sb_errno(journal);
-
-       write_lock(&journal->j_state_lock);
-       journal->j_flags |= JBD2_REC_ERR;
-       write_unlock(&journal->j_state_lock);
+       mutex_unlock(&journal->j_abort_mutex);
 }
 
 /**
index 0637271..8ff4d1a 100644 (file)
@@ -259,7 +259,7 @@ struct jffs2_full_dirent
        uint32_t ino; /* == zero for unlink */
        unsigned int nhash;
        unsigned char type;
-       unsigned char name[0];
+       unsigned char name[];
 };
 
 /*
index 60207a2..e4131cb 100644 (file)
@@ -61,7 +61,7 @@ struct jffs2_sum_dirent_flash
        jint32_t ino;           /* == zero for unlink */
        uint8_t nsize;          /* dirent name size */
        uint8_t type;           /* dirent type */
-       uint8_t name[0];        /* dirent name */
+       uint8_t name[]; /* dirent name */
 } __attribute__((packed));
 
 struct jffs2_sum_xattr_flash
@@ -117,7 +117,7 @@ struct jffs2_sum_dirent_mem
        jint32_t ino;           /* == zero for unlink */
        uint8_t nsize;          /* dirent name size */
        uint8_t type;           /* dirent type */
-       uint8_t name[0];        /* dirent name */
+       uint8_t name[]; /* dirent name */
 } __attribute__((packed));
 
 struct jffs2_sum_xattr_mem
index 9955d75..ad31ec4 100644 (file)
@@ -26,8 +26,9 @@ static int boot_config_proc_show(struct seq_file *m, void *v)
 static int __init copy_xbc_key_value_list(char *dst, size_t size)
 {
        struct xbc_node *leaf, *vnode;
-       const char *val;
        char *key, *end = dst + size;
+       const char *val;
+       char q;
        int ret = 0;
 
        key = kzalloc(XBC_KEYLEN_MAX, GFP_KERNEL);
@@ -41,16 +42,20 @@ static int __init copy_xbc_key_value_list(char *dst, size_t size)
                        break;
                dst += ret;
                vnode = xbc_node_get_child(leaf);
-               if (vnode && xbc_node_is_array(vnode)) {
+               if (vnode) {
                        xbc_array_for_each_value(vnode, val) {
-                               ret = snprintf(dst, rest(dst, end), "\"%s\"%s",
-                                       val, vnode->next ? ", " : "\n");
+                               if (strchr(val, '"'))
+                                       q = '\'';
+                               else
+                                       q = '"';
+                               ret = snprintf(dst, rest(dst, end), "%c%s%c%s",
+                                       q, val, q, vnode->next ? ", " : "\n");
                                if (ret < 0)
                                        goto out;
                                dst += ret;
                        }
                } else {
-                       ret = snprintf(dst, rest(dst, end), "\"%s\"\n", val);
+                       ret = snprintf(dst, rest(dst, end), "\"\"\n");
                        if (ret < 0)
                                break;
                        dst += ret;
index 8ba492d..e502414 100644 (file)
@@ -512,7 +512,8 @@ read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos)
                                 * Using bounce buffer to bypass the
                                 * hardened user copy kernel text checks.
                                 */
-                               if (probe_kernel_read(buf, (void *) start, tsz)) {
+                               if (copy_from_kernel_nofault(buf, (void *)start,
+                                               tsz)) {
                                        if (clear_user(buffer, tsz)) {
                                                ret = -EFAULT;
                                                goto out;
index 7187bd1..8d64edb 100644 (file)
@@ -262,7 +262,7 @@ struct squashfs_dir_index {
        __le32                  index;
        __le32                  start_block;
        __le32                  size;
-       unsigned char           name[0];
+       unsigned char           name[];
 };
 
 struct squashfs_base_inode {
@@ -327,7 +327,7 @@ struct squashfs_symlink_inode {
        __le32                  inode_number;
        __le32                  nlink;
        __le32                  symlink_size;
-       char                    symlink[0];
+       char                    symlink[];
 };
 
 struct squashfs_reg_inode {
@@ -341,7 +341,7 @@ struct squashfs_reg_inode {
        __le32                  fragment;
        __le32                  offset;
        __le32                  file_size;
-       __le16                  block_list[0];
+       __le16                  block_list[];
 };
 
 struct squashfs_lreg_inode {
@@ -358,7 +358,7 @@ struct squashfs_lreg_inode {
        __le32                  fragment;
        __le32                  offset;
        __le32                  xattr;
-       __le16                  block_list[0];
+       __le16                  block_list[];
 };
 
 struct squashfs_dir_inode {
@@ -389,7 +389,7 @@ struct squashfs_ldir_inode {
        __le16                  i_count;
        __le16                  offset;
        __le32                  xattr;
-       struct squashfs_dir_index       index[0];
+       struct squashfs_dir_index       index[];
 };
 
 union squashfs_inode {
@@ -410,7 +410,7 @@ struct squashfs_dir_entry {
        __le16                  inode_number;
        __le16                  type;
        __le16                  size;
-       char                    name[0];
+       char                    name[];
 };
 
 struct squashfs_dir_header {
@@ -428,12 +428,12 @@ struct squashfs_fragment_entry {
 struct squashfs_xattr_entry {
        __le16                  type;
        __le16                  size;
-       char                    data[0];
+       char                    data[];
 };
 
 struct squashfs_xattr_val {
        __le32                  vsize;
-       char                    value[0];
+       char                    value[];
 };
 
 struct squashfs_xattr_id {
index 40f85de..8e1e624 100644 (file)
@@ -122,7 +122,7 @@ static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma,
 #ifndef __HAVE_ARCH_HUGE_PTEP_GET
 static inline pte_t huge_ptep_get(pte_t *ptep)
 {
-       return READ_ONCE(*ptep);
+       return ptep_get(ptep);
 }
 #endif
 
index 27bdd27..77941ef 100644 (file)
@@ -89,7 +89,7 @@ struct displayid_detailed_timings_1 {
 
 struct displayid_detailed_timing_block {
        struct displayid_block base;
-       struct displayid_detailed_timings_1 timings[0];
+       struct displayid_detailed_timings_1 timings[];
 };
 
 #define for_each_displayid_db(displayid, block, idx, length) \
diff --git a/include/dt-bindings/clock/r8a774e1-cpg-mssr.h b/include/dt-bindings/clock/r8a774e1-cpg-mssr.h
new file mode 100644 (file)
index 0000000..b2fc1d1
--- /dev/null
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: GPL-2.0
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+#ifndef __DT_BINDINGS_CLOCK_R8A774E1_CPG_MSSR_H__
+#define __DT_BINDINGS_CLOCK_R8A774E1_CPG_MSSR_H__
+
+#include <dt-bindings/clock/renesas-cpg-mssr.h>
+
+/* R8A774E1 CPG Core Clocks */
+#define R8A774E1_CLK_Z                 0
+#define R8A774E1_CLK_Z2                        1
+#define R8A774E1_CLK_ZG                        2
+#define R8A774E1_CLK_ZTR               3
+#define R8A774E1_CLK_ZTRD2             4
+#define R8A774E1_CLK_ZT                        5
+#define R8A774E1_CLK_ZX                        6
+#define R8A774E1_CLK_S0D1              7
+#define R8A774E1_CLK_S0D2              8
+#define R8A774E1_CLK_S0D3              9
+#define R8A774E1_CLK_S0D4              10
+#define R8A774E1_CLK_S0D6              11
+#define R8A774E1_CLK_S0D8              12
+#define R8A774E1_CLK_S0D12             13
+#define R8A774E1_CLK_S1D2              14
+#define R8A774E1_CLK_S1D4              15
+#define R8A774E1_CLK_S2D1              16
+#define R8A774E1_CLK_S2D2              17
+#define R8A774E1_CLK_S2D4              18
+#define R8A774E1_CLK_S3D1              19
+#define R8A774E1_CLK_S3D2              20
+#define R8A774E1_CLK_S3D4              21
+#define R8A774E1_CLK_LB                        22
+#define R8A774E1_CLK_CL                        23
+#define R8A774E1_CLK_ZB3               24
+#define R8A774E1_CLK_ZB3D2             25
+#define R8A774E1_CLK_ZB3D4             26
+#define R8A774E1_CLK_CR                        27
+#define R8A774E1_CLK_CRD2              28
+#define R8A774E1_CLK_SD0H              29
+#define R8A774E1_CLK_SD0               30
+#define R8A774E1_CLK_SD1H              31
+#define R8A774E1_CLK_SD1               32
+#define R8A774E1_CLK_SD2H              33
+#define R8A774E1_CLK_SD2               34
+#define R8A774E1_CLK_SD3H              35
+#define R8A774E1_CLK_SD3               36
+#define R8A774E1_CLK_RPC               37
+#define R8A774E1_CLK_RPCD2             38
+#define R8A774E1_CLK_MSO               39
+#define R8A774E1_CLK_HDMI              40
+#define R8A774E1_CLK_CSI0              41
+#define R8A774E1_CLK_CP                        42
+#define R8A774E1_CLK_CPEX              43
+#define R8A774E1_CLK_R                 44
+#define R8A774E1_CLK_OSC               45
+#define R8A774E1_CLK_CANFD             46
+
+#endif /* __DT_BINDINGS_CLOCK_R8A774E1_CPG_MSSR_H__ */
index 95394f3..0f2d60e 100644 (file)
 #define VF610_CLK_WKPU                 186
 #define VF610_CLK_TCON0                        187
 #define VF610_CLK_TCON1                        188
-#define VF610_CLK_END                  189
+#define VF610_CLK_CAAM                 189
+#define VF610_CLK_END                  190
 
 #endif /* __DT_BINDINGS_CLOCK_VF610_H */
diff --git a/include/dt-bindings/mux/mux-j721e-wiz.h b/include/dt-bindings/mux/mux-j721e-wiz.h
new file mode 100644 (file)
index 0000000..fd1c4ea
--- /dev/null
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * This header provides constants for J721E WIZ.
+ */
+
+#ifndef _DT_BINDINGS_J721E_WIZ
+#define _DT_BINDINGS_J721E_WIZ
+
+#define SERDES0_LANE0_QSGMII_LANE1     0x0
+#define SERDES0_LANE0_PCIE0_LANE0      0x1
+#define SERDES0_LANE0_USB3_0_SWAP      0x2
+
+#define SERDES0_LANE1_QSGMII_LANE2     0x0
+#define SERDES0_LANE1_PCIE0_LANE1      0x1
+#define SERDES0_LANE1_USB3_0           0x2
+
+#define SERDES1_LANE0_QSGMII_LANE3     0x0
+#define SERDES1_LANE0_PCIE1_LANE0      0x1
+#define SERDES1_LANE0_USB3_1_SWAP      0x2
+#define SERDES1_LANE0_SGMII_LANE0      0x3
+
+#define SERDES1_LANE1_QSGMII_LANE4     0x0
+#define SERDES1_LANE1_PCIE1_LANE1      0x1
+#define SERDES1_LANE1_USB3_1           0x2
+#define SERDES1_LANE1_SGMII_LANE1      0x3
+
+#define SERDES2_LANE0_PCIE2_LANE0      0x1
+#define SERDES2_LANE0_SGMII_LANE0      0x3
+#define SERDES2_LANE0_USB3_1_SWAP      0x2
+
+#define SERDES2_LANE1_PCIE2_LANE1      0x1
+#define SERDES2_LANE1_USB3_1           0x2
+#define SERDES2_LANE1_SGMII_LANE1      0x3
+
+#define SERDES3_LANE0_PCIE3_LANE0      0x1
+#define SERDES3_LANE0_USB3_0_SWAP      0x2
+
+#define SERDES3_LANE1_PCIE3_LANE1      0x1
+#define SERDES3_LANE1_USB3_0           0x2
+
+#define SERDES4_LANE0_EDP_LANE0                0x0
+#define SERDES4_LANE0_QSGMII_LANE5     0x2
+
+#define SERDES4_LANE1_EDP_LANE1                0x0
+#define SERDES4_LANE1_QSGMII_LANE6     0x2
+
+#define SERDES4_LANE2_EDP_LANE2                0x0
+#define SERDES4_LANE2_QSGMII_LANE7     0x2
+
+#define SERDES4_LANE3_EDP_LANE3                0x0
+#define SERDES4_LANE3_QSGMII_LANE8     0x2
+
+#endif /* _DT_BINDINGS_J721E_WIZ */
index 499de62..b0eea7c 100644 (file)
@@ -3,7 +3,7 @@
  * This header provides constants for pinctrl bindings for TI's K3 SoC
  * family.
  *
- * Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
+ * Copyright (C) 2018 Texas Instruments Incorporated - https://www.ti.com/
  */
 #ifndef _DT_BINDINGS_PINCTRL_TI_K3_H
 #define _DT_BINDINGS_PINCTRL_TI_K3_H
diff --git a/include/dt-bindings/power/r8a774e1-sysc.h b/include/dt-bindings/power/r8a774e1-sysc.h
new file mode 100644 (file)
index 0000000..7edb816
--- /dev/null
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: GPL-2.0
+ *
+ * Copyright (C) 2020 Renesas Electronics Corp.
+ */
+#ifndef __DT_BINDINGS_POWER_R8A774E1_SYSC_H__
+#define __DT_BINDINGS_POWER_R8A774E1_SYSC_H__
+
+/*
+ * These power domain indices match the numbers of the interrupt bits
+ * representing the power areas in the various Interrupt Registers
+ * (e.g. SYSCISR, Interrupt Status Register)
+ */
+
+#define R8A774E1_PD_CA57_CPU0           0
+#define R8A774E1_PD_CA57_CPU1           1
+#define R8A774E1_PD_CA57_CPU2           2
+#define R8A774E1_PD_CA57_CPU3           3
+#define R8A774E1_PD_CA53_CPU0           5
+#define R8A774E1_PD_CA53_CPU1           6
+#define R8A774E1_PD_CA53_CPU2           7
+#define R8A774E1_PD_CA53_CPU3           8
+#define R8A774E1_PD_A3VP                9
+#define R8A774E1_PD_CA57_SCU           12
+#define R8A774E1_PD_A3VC               14
+#define R8A774E1_PD_3DG_A              17
+#define R8A774E1_PD_3DG_B              18
+#define R8A774E1_PD_3DG_C              19
+#define R8A774E1_PD_3DG_D              20
+#define R8A774E1_PD_CA53_SCU           21
+#define R8A774E1_PD_3DG_E              22
+#define R8A774E1_PD_A2VC1              26
+
+/* Always-on power area */
+#define R8A774E1_PD_ALWAYS_ON          32
+
+#endif /* __DT_BINDINGS_POWER_R8A774E1_SYSC_H__ */
index 9e9ccb2..38afb34 100644 (file)
@@ -27,7 +27,7 @@ struct encrypted_key_payload {
        unsigned short payload_datalen;         /* payload data length */
        unsigned short encrypted_key_format;    /* encrypted key format */
        u8 *decrypted_data;     /* decrypted data */
-       u8 payload_data[0];     /* payload data + datablob + hmac */
+       u8 payload_data[];      /* payload data + datablob + hmac */
 };
 
 extern struct key_type key_type_encrypted;
index a183278..2b0b15a 100644 (file)
@@ -28,7 +28,7 @@ struct rxkad_key {
        u8      primary_flag;           /* T if key for primary cell for this user */
        u16     ticket_len;             /* length of ticket[] */
        u8      session_key[8];         /* DES session key */
-       u8      ticket[0];              /* the encrypted ticket */
+       u8      ticket[];               /* the encrypted ticket */
 };
 
 /*
@@ -100,7 +100,7 @@ struct rxrpc_key_data_v1 {
        u32             expiry;                 /* time_t */
        u32             kvno;
        u8              session_key[8];
-       u8              ticket[0];
+       u8              ticket[];
 };
 
 /*
index a954def..900b9f4 100644 (file)
@@ -34,7 +34,7 @@
 struct can_skb_priv {
        int ifindex;
        int skbcnt;
-       struct can_frame cf[0];
+       struct can_frame cf[];
 };
 
 static inline struct can_skb_priv *can_skb_prv(struct sk_buff *skb)
index 60de3fe..405657a 100644 (file)
@@ -36,7 +36,7 @@ struct cb710_chip {
        unsigned                slot_mask;
        unsigned                slots;
        spinlock_t              irq_lock;
-       struct cb710_slot       slot[0];
+       struct cb710_slot       slot[];
 };
 
 /* NOTE: cb710_chip.slots is modified only during device init/exit and
index 2247e71..e5ed1c5 100644 (file)
@@ -52,8 +52,7 @@ struct ceph_options {
        unsigned long osd_idle_ttl;             /* jiffies */
        unsigned long osd_keepalive_timeout;    /* jiffies */
        unsigned long osd_request_timeout;      /* jiffies */
-
-       u32 osd_req_flags;  /* CEPH_OSD_FLAG_*, applied to each OSD request */
+       u32 read_from_replica;  /* CEPH_OSD_FLAG_BALANCE/LOCALIZE_READS */
 
        /*
         * any type that can't be simply compared or doesn't need
@@ -76,6 +75,7 @@ struct ceph_options {
 #define CEPH_OSD_KEEPALIVE_DEFAULT     msecs_to_jiffies(5 * 1000)
 #define CEPH_OSD_IDLE_TTL_DEFAULT      msecs_to_jiffies(60 * 1000)
 #define CEPH_OSD_REQUEST_TIMEOUT_DEFAULT 0  /* no timeout */
+#define CEPH_READ_FROM_REPLICA_DEFAULT 0  /* read from primary */
 
 #define CEPH_MONC_HUNT_INTERVAL                msecs_to_jiffies(3 * 1000)
 #define CEPH_MONC_PING_INTERVAL                msecs_to_jiffies(10 * 1000)
index 21aed09..e368384 100644 (file)
@@ -5,20 +5,20 @@
 #ifndef __ASSEMBLY__
 
 #ifdef __CHECKER__
-# define __user                __attribute__((noderef, address_space(1)))
 # define __kernel      __attribute__((address_space(0)))
+# define __user                __attribute__((noderef, address_space(__user)))
 # define __safe                __attribute__((safe))
 # define __force       __attribute__((force))
 # define __nocast      __attribute__((nocast))
-# define __iomem       __attribute__((noderef, address_space(2)))
+# define __iomem       __attribute__((noderef, address_space(__iomem)))
 # define __must_hold(x)        __attribute__((context(x,1,1)))
 # define __acquires(x) __attribute__((context(x,0,1)))
 # define __releases(x) __attribute__((context(x,1,0)))
 # define __acquire(x)  __context__(x,1)
 # define __release(x)  __context__(x,-1)
 # define __cond_lock(x,c)      ((c) ? ({ __acquire(x); 1; }) : 0)
-# define __percpu      __attribute__((noderef, address_space(3)))
-# define __rcu         __attribute__((noderef, address_space(4)))
+# define __percpu      __attribute__((noderef, address_space(__percpu)))
+# define __rcu         __attribute__((noderef, address_space(__rcu)))
 # define __private     __attribute__((noderef))
 extern void __chk_user_ptr(const volatile void __user *);
 extern void __chk_io_ptr(const volatile void __iomem *);
index e1c0333..6283917 100644 (file)
@@ -153,7 +153,7 @@ struct dma_interleaved_template {
        bool dst_sgl;
        size_t numf;
        size_t frame_size;
-       struct data_chunk sgl[0];
+       struct data_chunk sgl[];
 };
 
 /**
@@ -535,7 +535,7 @@ struct dmaengine_unmap_data {
        struct device *dev;
        struct kref kref;
        size_t len;
-       dma_addr_t addr[0];
+       dma_addr_t addr[];
 };
 
 struct dma_async_tx_descriptor;
index 6c4ab4d..3f881a8 100644 (file)
@@ -2592,7 +2592,6 @@ extern void bdput(struct block_device *);
 extern void invalidate_bdev(struct block_device *);
 extern void iterate_bdevs(void (*)(struct block_device *, void *), void *);
 extern int sync_blockdev(struct block_device *bdev);
-extern void kill_bdev(struct block_device *);
 extern struct super_block *freeze_bdev(struct block_device *);
 extern void emergency_thaw_all(void);
 extern void emergency_thaw_bdev(struct super_block *sb);
@@ -2608,7 +2607,6 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
 #else
 static inline void bd_forget(struct inode *inode) {}
 static inline int sync_blockdev(struct block_device *bdev) { return 0; }
-static inline void kill_bdev(struct block_device *bdev) {}
 static inline void invalidate_bdev(struct block_device *bdev) {}
 
 static inline struct super_block *freeze_bdev(struct block_device *sb)
index ce0b5fb..3f0b19d 100644 (file)
@@ -46,7 +46,7 @@ struct fscache_cache_tag {
        unsigned long           flags;
 #define FSCACHE_TAG_RESERVED   0               /* T if tag is reserved for a cache */
        atomic_t                usage;
-       char                    name[0];        /* tag name */
+       char                    name[]; /* tag name */
 };
 
 /*
index c10617b..b8b8963 100644 (file)
@@ -408,7 +408,7 @@ static inline bool i2c_detect_slave_mode(struct device *dev) { return false; }
  * that are present.  This information is used to grow the driver model tree.
  * For mainboards this is done statically using i2c_register_board_info();
  * bus numbers identify adapters that aren't yet available.  For add-on boards,
- * i2c_new_device() does this dynamically with the adapter already known.
+ * i2c_new_client_device() does this dynamically with the adapter already known.
  */
 struct i2c_board_info {
        char            type[I2C_NAME_SIZE];
@@ -439,13 +439,11 @@ struct i2c_board_info {
 
 
 #if IS_ENABLED(CONFIG_I2C)
-/* Add-on boards should register/unregister their devices; e.g. a board
+/*
+ * Add-on boards should register/unregister their devices; e.g. a board
  * with integrated I2C, a config eeprom, sensors, and a codec that's
  * used in conjunction with the primary hardware.
  */
-struct i2c_client *
-i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info);
-
 struct i2c_client *
 i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *info);
 
index f613d85..d56128d 100644 (file)
@@ -765,6 +765,11 @@ struct journal_s
         */
        int                     j_errno;
 
+       /**
+        * @j_abort_mutex: Lock the whole aborting procedure.
+        */
+       struct mutex            j_abort_mutex;
+
        /**
         * @j_sb_buffer: The first part of the superblock buffer.
         */
@@ -1247,7 +1252,6 @@ JBD2_FEATURE_INCOMPAT_FUNCS(csum3,                CSUM_V3)
 #define JBD2_ABORT_ON_SYNCDATA_ERR     0x040   /* Abort the journal on file
                                                 * data write error in ordered
                                                 * mode */
-#define JBD2_REC_ERR   0x080   /* The errno in the sb has been recorded */
 
 /*
  * Function declarations for the journaling transaction and buffer
index 1776eb2..ea67910 100644 (file)
@@ -208,7 +208,7 @@ struct crash_mem_range {
 struct crash_mem {
        unsigned int max_nr_ranges;
        unsigned int nr_ranges;
-       struct crash_mem_range ranges[0];
+       struct crash_mem_range ranges[];
 };
 
 extern int crash_exclude_mem_range(struct crash_mem *mem,
index 594265b..6adf90f 100644 (file)
@@ -161,7 +161,7 @@ struct kretprobe_instance {
        kprobe_opcode_t *ret_addr;
        struct task_struct *task;
        void *fp;
-       char data[0];
+       char data[];
 };
 
 struct kretprobe_blackpoint {
@@ -350,6 +350,10 @@ static inline struct kprobe_ctlblk *get_kprobe_ctlblk(void)
        return this_cpu_ptr(&kprobe_ctlblk);
 }
 
+extern struct kprobe kprobe_busy;
+void kprobe_busy_begin(void);
+void kprobe_busy_end(void);
+
 kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset);
 int register_kprobe(struct kprobe *p);
 void unregister_kprobe(struct kprobe *p);
index 62ec926..d564855 100644 (file)
@@ -409,7 +409,7 @@ struct kvm_irq_routing_table {
         * Array indexed by gsi. Each entry contains list of irq chips
         * the gsi is connected to.
         */
-       struct hlist_head map[0];
+       struct hlist_head map[];
 };
 #endif
 
index af83285..e7e5256 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/acpi.h>
 #include <linux/cdrom.h>
 #include <linux/sched.h>
+#include <linux/async.h>
 
 /*
  * Define if arch has non-standard setup.  This is a _PCI_ standard
@@ -609,7 +610,7 @@ struct ata_host {
        struct task_struct      *eh_owner;
 
        struct ata_port         *simplex_claimed;       /* channel owning the DMA */
-       struct ata_port         *ports[0];
+       struct ata_port         *ports[];
 };
 
 struct ata_queued_cmd {
@@ -872,6 +873,8 @@ struct ata_port {
        struct timer_list       fastdrain_timer;
        unsigned long           fastdrain_cnt;
 
+       async_cookie_t          cookie;
+
        int                     em_message_type;
        void                    *private_data;
 
@@ -1092,7 +1095,11 @@ extern int ata_scsi_ioctl(struct scsi_device *dev, unsigned int cmd,
 #define ATA_SCSI_COMPAT_IOCTL /* empty */
 #endif
 extern int ata_scsi_queuecmd(struct Scsi_Host *h, struct scsi_cmnd *cmd);
+#if IS_ENABLED(CONFIG_ATA)
 bool ata_scsi_dma_need_drain(struct request *rq);
+#else
+#define ata_scsi_dma_need_drain NULL
+#endif
 extern int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *dev,
                            unsigned int cmd, void __user *arg);
 extern bool ata_link_online(struct ata_link *link);
index 6590450..93fcef1 100644 (file)
@@ -304,16 +304,33 @@ static inline __must_check size_t __ab_c_size(size_t a, size_t b, size_t c)
  * struct_size() - Calculate size of structure with trailing array.
  * @p: Pointer to the structure.
  * @member: Name of the array member.
- * @n: Number of elements in the array.
+ * @count: Number of elements in the array.
  *
  * Calculates size of memory needed for structure @p followed by an
- * array of @n @member elements.
+ * array of @count number of @member elements.
  *
  * Return: number of bytes needed or SIZE_MAX on overflow.
  */
-#define struct_size(p, member, n)                                      \
-       __ab_c_size(n,                                                  \
+#define struct_size(p, member, count)                                  \
+       __ab_c_size(count,                                              \
                    sizeof(*(p)->member) + __must_be_array((p)->member),\
                    sizeof(*(p)))
 
+/**
+ * flex_array_size() - Calculate size of a flexible array member
+ *                     within an enclosing structure.
+ *
+ * @p: Pointer to the structure.
+ * @member: Name of the flexible array member.
+ * @count: Number of elements in the array.
+ *
+ * Calculates size of a flexible array of @count number of @member
+ * elements, at the end of structure @p.
+ *
+ * Return: number of bytes needed or SIZE_MAX on overflow.
+ */
+#define flex_array_size(p, member, count)                              \
+       array_size(count,                                               \
+                   sizeof(*(p)->member) + __must_be_array((p)->member))
+
 #endif /* __LINUX_OVERFLOW_H */
index 32b6c52..56c1e8e 100644 (file)
@@ -249,6 +249,13 @@ static inline pte_t ptep_get_and_clear(struct mm_struct *mm,
 }
 #endif
 
+#ifndef __HAVE_ARCH_PTEP_GET
+static inline pte_t ptep_get(pte_t *ptep)
+{
+       return READ_ONCE(*ptep);
+}
+#endif
+
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
 #ifndef __HAVE_ARCH_PMDP_HUGE_GET_AND_CLEAR
 static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm,
index 7fbc867..49d155c 100644 (file)
@@ -597,7 +597,7 @@ int sev_guest_df_flush(int *error);
  */
 int sev_guest_decommission(struct sev_data_decommission *data, int *error);
 
-void *psp_copy_user_blob(u64 __user uaddr, u32 len);
+void *psp_copy_user_blob(u64 uaddr, u32 len);
 
 #else  /* !CONFIG_CRYPTO_DEV_SP_PSP */
 
index 8ccd821..7673123 100644 (file)
@@ -221,7 +221,7 @@ struct sctp_datahdr {
        __be16 stream;
        __be16 ssn;
        __u32 ppid;
-       __u8  payload[0];
+       __u8  payload[];
 };
 
 struct sctp_data_chunk {
@@ -269,7 +269,7 @@ struct sctp_inithdr {
        __be16 num_outbound_streams;
        __be16 num_inbound_streams;
        __be32 initial_tsn;
-       __u8  params[0];
+       __u8  params[];
 };
 
 struct sctp_init_chunk {
@@ -299,13 +299,13 @@ struct sctp_cookie_preserve_param {
 /* Section 3.3.2.1 Host Name Address (11) */
 struct sctp_hostname_param {
        struct sctp_paramhdr param_hdr;
-       uint8_t hostname[0];
+       uint8_t hostname[];
 };
 
 /* Section 3.3.2.1 Supported Address Types (12) */
 struct sctp_supported_addrs_param {
        struct sctp_paramhdr param_hdr;
-       __be16 types[0];
+       __be16 types[];
 };
 
 /* ADDIP Section 3.2.6 Adaptation Layer Indication */
@@ -317,25 +317,25 @@ struct sctp_adaptation_ind_param {
 /* ADDIP Section 4.2.7 Supported Extensions Parameter */
 struct sctp_supported_ext_param {
        struct sctp_paramhdr param_hdr;
-       __u8 chunks[0];
+       __u8 chunks[];
 };
 
 /* AUTH Section 3.1 Random */
 struct sctp_random_param {
        struct sctp_paramhdr param_hdr;
-       __u8 random_val[0];
+       __u8 random_val[];
 };
 
 /* AUTH Section 3.2 Chunk List */
 struct sctp_chunks_param {
        struct sctp_paramhdr param_hdr;
-       __u8 chunks[0];
+       __u8 chunks[];
 };
 
 /* AUTH Section 3.3 HMAC Algorithm */
 struct sctp_hmac_algo_param {
        struct sctp_paramhdr param_hdr;
-       __be16 hmac_ids[0];
+       __be16 hmac_ids[];
 };
 
 /* RFC 2960.  Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2):
@@ -350,7 +350,7 @@ struct sctp_initack_chunk {
 /* Section 3.3.3.1 State Cookie (7) */
 struct sctp_cookie_param {
        struct sctp_paramhdr p;
-       __u8 body[0];
+       __u8 body[];
 };
 
 /* Section 3.3.3.1 Unrecognized Parameters (8) */
@@ -384,7 +384,7 @@ struct sctp_sackhdr {
        __be32 a_rwnd;
        __be16 num_gap_ack_blocks;
        __be16 num_dup_tsns;
-       union sctp_sack_variable variable[0];
+       union sctp_sack_variable variable[];
 };
 
 struct sctp_sack_chunk {
@@ -436,7 +436,7 @@ struct sctp_shutdown_chunk {
 struct sctp_errhdr {
        __be16 cause;
        __be16 length;
-       __u8  variable[0];
+       __u8  variable[];
 };
 
 struct sctp_operr_chunk {
@@ -594,7 +594,7 @@ struct sctp_fwdtsn_skip {
 
 struct sctp_fwdtsn_hdr {
        __be32 new_cum_tsn;
-       struct sctp_fwdtsn_skip skip[0];
+       struct sctp_fwdtsn_skip skip[];
 };
 
 struct sctp_fwdtsn_chunk {
@@ -611,7 +611,7 @@ struct sctp_ifwdtsn_skip {
 
 struct sctp_ifwdtsn_hdr {
        __be32 new_cum_tsn;
-       struct sctp_ifwdtsn_skip skip[0];
+       struct sctp_ifwdtsn_skip skip[];
 };
 
 struct sctp_ifwdtsn_chunk {
@@ -658,7 +658,7 @@ struct sctp_addip_param {
 
 struct sctp_addiphdr {
        __be32  serial;
-       __u8    params[0];
+       __u8    params[];
 };
 
 struct sctp_addip_chunk {
@@ -718,7 +718,7 @@ struct sctp_addip_chunk {
 struct sctp_authhdr {
        __be16 shkey_id;
        __be16 hmac_id;
-       __u8   hmac[0];
+       __u8   hmac[];
 };
 
 struct sctp_auth_chunk {
@@ -733,7 +733,7 @@ struct sctp_infox {
 
 struct sctp_reconf_chunk {
        struct sctp_chunkhdr chunk_hdr;
-       __u8 params[0];
+       __u8 params[];
 };
 
 struct sctp_strreset_outreq {
@@ -741,13 +741,13 @@ struct sctp_strreset_outreq {
        __be32 request_seq;
        __be32 response_seq;
        __be32 send_reset_at_tsn;
-       __be16 list_of_streams[0];
+       __be16 list_of_streams[];
 };
 
 struct sctp_strreset_inreq {
        struct sctp_paramhdr param_hdr;
        __be32 request_seq;
-       __be16 list_of_streams[0];
+       __be16 list_of_streams[];
 };
 
 struct sctp_strreset_tsnreq {
index 299cbb8..44073d0 100644 (file)
@@ -124,7 +124,7 @@ struct tifm_adapter {
        int                 (*has_ms_pif)(struct tifm_adapter *fm,
                                          struct tifm_dev *sock);
 
-       struct tifm_dev     *sockets[0];
+       struct tifm_dev     *sockets[];
 };
 
 struct tifm_adapter *tifm_alloc_adapter(unsigned int num_sockets,
index 7bcadca..0a76ddc 100644 (file)
@@ -301,13 +301,14 @@ copy_struct_from_user(void *dst, size_t ksize, const void __user *src,
        return 0;
 }
 
-bool probe_kernel_read_allowed(const void *unsafe_src, size_t size);
+bool copy_from_kernel_nofault_allowed(const void *unsafe_src, size_t size);
 
-extern long probe_kernel_read(void *dst, const void *src, size_t size);
-extern long probe_user_read(void *dst, const void __user *src, size_t size);
+long copy_from_kernel_nofault(void *dst, const void *src, size_t size);
+long notrace copy_to_kernel_nofault(void *dst, const void *src, size_t size);
 
-extern long notrace probe_kernel_write(void *dst, const void *src, size_t size);
-extern long notrace probe_user_write(void __user *dst, const void *src, size_t size);
+long copy_from_user_nofault(void *dst, const void __user *src, size_t size);
+long notrace copy_to_user_nofault(void __user *dst, const void *src,
+               size_t size);
 
 long strncpy_from_kernel_nofault(char *dst, const void *unsafe_addr,
                long count);
@@ -317,14 +318,16 @@ long strncpy_from_user_nofault(char *dst, const void __user *unsafe_addr,
 long strnlen_user_nofault(const void __user *unsafe_addr, long count);
 
 /**
- * probe_kernel_address(): safely attempt to read from a location
- * @addr: address to read from
- * @retval: read into this variable
+ * get_kernel_nofault(): safely attempt to read from a location
+ * @val: read into this variable
+ * @ptr: address to read from
  *
  * Returns 0 on success, or -EFAULT.
  */
-#define probe_kernel_address(addr, retval)             \
-       probe_kernel_read(&retval, addr, sizeof(retval))
+#define get_kernel_nofault(val, ptr) ({                                \
+       const typeof(val) *__gk_ptr = (ptr);                    \
+       copy_from_kernel_nofault(&(val), __gk_ptr, sizeof(val));\
+})
 
 #ifndef user_access_begin
 #define user_access_begin(ptr,len) access_ok(ptr, len)
index d7338bf..16e8b2f 100644 (file)
@@ -161,10 +161,51 @@ struct nf_flow_route {
 struct flow_offload *flow_offload_alloc(struct nf_conn *ct);
 void flow_offload_free(struct flow_offload *flow);
 
-int nf_flow_table_offload_add_cb(struct nf_flowtable *flow_table,
-                                flow_setup_cb_t *cb, void *cb_priv);
-void nf_flow_table_offload_del_cb(struct nf_flowtable *flow_table,
-                                 flow_setup_cb_t *cb, void *cb_priv);
+static inline int
+nf_flow_table_offload_add_cb(struct nf_flowtable *flow_table,
+                            flow_setup_cb_t *cb, void *cb_priv)
+{
+       struct flow_block *block = &flow_table->flow_block;
+       struct flow_block_cb *block_cb;
+       int err = 0;
+
+       down_write(&flow_table->flow_block_lock);
+       block_cb = flow_block_cb_lookup(block, cb, cb_priv);
+       if (block_cb) {
+               err = -EEXIST;
+               goto unlock;
+       }
+
+       block_cb = flow_block_cb_alloc(cb, cb_priv, cb_priv, NULL);
+       if (IS_ERR(block_cb)) {
+               err = PTR_ERR(block_cb);
+               goto unlock;
+       }
+
+       list_add_tail(&block_cb->list, &block->cb_list);
+
+unlock:
+       up_write(&flow_table->flow_block_lock);
+       return err;
+}
+
+static inline void
+nf_flow_table_offload_del_cb(struct nf_flowtable *flow_table,
+                            flow_setup_cb_t *cb, void *cb_priv)
+{
+       struct flow_block *block = &flow_table->flow_block;
+       struct flow_block_cb *block_cb;
+
+       down_write(&flow_table->flow_block_lock);
+       block_cb = flow_block_cb_lookup(block, cb, cb_priv);
+       if (block_cb) {
+               list_del(&block_cb->list);
+               flow_block_cb_free(block_cb);
+       } else {
+               WARN_ON(true);
+       }
+       up_write(&flow_table->flow_block_lock);
+}
 
 int flow_offload_route_init(struct flow_offload *flow,
                            const struct nf_flow_route *route);
index 79654bc..8250d6f 100644 (file)
@@ -66,7 +66,16 @@ static inline struct nf_flowtable *tcf_ct_ft(const struct tc_action *a)
 #endif /* CONFIG_NF_CONNTRACK */
 
 #if IS_ENABLED(CONFIG_NET_ACT_CT)
-void tcf_ct_flow_table_restore_skb(struct sk_buff *skb, unsigned long cookie);
+static inline void
+tcf_ct_flow_table_restore_skb(struct sk_buff *skb, unsigned long cookie)
+{
+       enum ip_conntrack_info ctinfo = cookie & NFCT_INFOMASK;
+       struct nf_conn *ct;
+
+       ct = (struct nf_conn *)(cookie & NFCT_PTRMASK);
+       nf_conntrack_get(&ct->ct_general);
+       nf_ct_set(skb, ct, ctinfo);
+}
 #else
 static inline void
 tcf_ct_flow_table_restore_skb(struct sk_buff *skb, unsigned long cookie) { }
index 1257f26..93b1142 100644 (file)
@@ -254,7 +254,6 @@ TRACE_EVENT(block_bio_bounce,
  * block_bio_complete - completed all work on the block operation
  * @q: queue holding the block operation
  * @bio: block operation completed
- * @error: io error value
  *
  * This tracepoint indicates there is no further work to do on this
  * block IO operation @bio.
index 379a612..f44eb0a 100644 (file)
@@ -262,6 +262,7 @@ struct fsxattr {
 #define FS_EA_INODE_FL                 0x00200000 /* Inode used for large EA */
 #define FS_EOFBLOCKS_FL                        0x00400000 /* Reserved for ext4 */
 #define FS_NOCOW_FL                    0x00800000 /* Do not cow file */
+#define FS_DAX_FL                      0x02000000 /* Inode is DAX */
 #define FS_INLINE_DATA_FL              0x10000000 /* Reserved for ext4 */
 #define FS_PROJINHERIT_FL              0x20000000 /* Create with parents projid */
 #define FS_CASEFOLD_FL                 0x40000000 /* Folder is case insensitive */
index de5d902..0e09dc5 100644 (file)
@@ -244,6 +244,7 @@ struct nd_cmd_pkg {
 #define NVDIMM_FAMILY_HPE2 2
 #define NVDIMM_FAMILY_MSFT 3
 #define NVDIMM_FAMILY_HYPERV 4
+#define NVDIMM_FAMILY_PAPR 5
 
 #define ND_IOCTL_CALL                  _IOWR(ND_IOCTL, ND_CMD_CALL,\
                                        struct nd_cmd_pkg)
index c1395b5..9463db2 100644 (file)
@@ -7,6 +7,7 @@
   Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
   Copyright (c) 2001-2002 Silicon Graphics, Inc.  All Rights Reserved.
   Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
+  Copyright (c) 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include <linux/libc-compat.h>
@@ -31,6 +32,9 @@
 #define XATTR_BTRFS_PREFIX "btrfs."
 #define XATTR_BTRFS_PREFIX_LEN (sizeof(XATTR_BTRFS_PREFIX) - 1)
 
+#define XATTR_HURD_PREFIX "gnu."
+#define XATTR_HURD_PREFIX_LEN (sizeof(XATTR_HURD_PREFIX) - 1)
+
 #define XATTR_SECURITY_PREFIX  "security."
 #define XATTR_SECURITY_PREFIX_LEN (sizeof(XATTR_SECURITY_PREFIX) - 1)
 
index ccc0f98..bc8d25f 100644 (file)
@@ -169,18 +169,18 @@ int __weak kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
 {
        int err;
 
-       err = probe_kernel_read(bpt->saved_instr, (char *)bpt->bpt_addr,
+       err = copy_from_kernel_nofault(bpt->saved_instr, (char *)bpt->bpt_addr,
                                BREAK_INSTR_SIZE);
        if (err)
                return err;
-       err = probe_kernel_write((char *)bpt->bpt_addr,
+       err = copy_to_kernel_nofault((char *)bpt->bpt_addr,
                                 arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE);
        return err;
 }
 
 int __weak kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt)
 {
-       return probe_kernel_write((char *)bpt->bpt_addr,
+       return copy_to_kernel_nofault((char *)bpt->bpt_addr,
                                  (char *)bpt->saved_instr, BREAK_INSTR_SIZE);
 }
 
index 4b280fc..61774ae 100644 (file)
@@ -247,7 +247,7 @@ char *kgdb_mem2hex(char *mem, char *buf, int count)
         */
        tmp = buf + count;
 
-       err = probe_kernel_read(tmp, mem, count);
+       err = copy_from_kernel_nofault(tmp, mem, count);
        if (err)
                return NULL;
        while (count > 0) {
@@ -283,7 +283,7 @@ int kgdb_hex2mem(char *buf, char *mem, int count)
                *tmp_raw |= hex_to_bin(*tmp_hex--) << 4;
        }
 
-       return probe_kernel_write(mem, tmp_raw, count);
+       return copy_to_kernel_nofault(mem, tmp_raw, count);
 }
 
 /*
@@ -335,7 +335,7 @@ static int kgdb_ebin2mem(char *buf, char *mem, int count)
                size++;
        }
 
-       return probe_kernel_write(mem, c, size);
+       return copy_to_kernel_nofault(mem, c, size);
 }
 
 #if DBG_MAX_REG_NUM > 0
index ec19056..5c79490 100644 (file)
@@ -2326,7 +2326,8 @@ void kdb_ps1(const struct task_struct *p)
        int cpu;
        unsigned long tmp;
 
-       if (!p || probe_kernel_read(&tmp, (char *)p, sizeof(unsigned long)))
+       if (!p ||
+           copy_from_kernel_nofault(&tmp, (char *)p, sizeof(unsigned long)))
                return;
 
        cpu = kdb_process_cpu(p);
index b8e6306..004c5b6 100644 (file)
@@ -325,7 +325,7 @@ char *kdb_strdup(const char *str, gfp_t type)
  */
 int kdb_getarea_size(void *res, unsigned long addr, size_t size)
 {
-       int ret = probe_kernel_read((char *)res, (char *)addr, size);
+       int ret = copy_from_kernel_nofault((char *)res, (char *)addr, size);
        if (ret) {
                if (!KDB_STATE(SUPPRESS)) {
                        kdb_printf("kdb_getarea: Bad address 0x%lx\n", addr);
@@ -350,7 +350,7 @@ int kdb_getarea_size(void *res, unsigned long addr, size_t size)
  */
 int kdb_putarea_size(unsigned long addr, void *res, size_t size)
 {
-       int ret = probe_kernel_read((char *)addr, (char *)res, size);
+       int ret = copy_from_kernel_nofault((char *)addr, (char *)res, size);
        if (ret) {
                if (!KDB_STATE(SUPPRESS)) {
                        kdb_printf("kdb_putarea: Bad address 0x%lx\n", addr);
@@ -624,7 +624,8 @@ char kdb_task_state_char (const struct task_struct *p)
        char state;
        unsigned long tmp;
 
-       if (!p || probe_kernel_read(&tmp, (char *)p, sizeof(unsigned long)))
+       if (!p ||
+           copy_from_kernel_nofault(&tmp, (char *)p, sizeof(unsigned long)))
                return 'E';
 
        cpu = kdb_process_cpu(p);
index d006668..a0ce3c1 100644 (file)
@@ -73,18 +73,18 @@ config SWIOTLB
 config DMA_NONCOHERENT_MMAP
        bool
 
+config DMA_COHERENT_POOL
+       bool
+
 config DMA_REMAP
+       bool
        depends on MMU
        select GENERIC_ALLOCATOR
        select DMA_NONCOHERENT_MMAP
-       bool
-
-config DMA_COHERENT_POOL
-       bool
-       select DMA_REMAP
 
 config DMA_DIRECT_REMAP
        bool
+       select DMA_REMAP
        select DMA_COHERENT_POOL
 
 config DMA_CMA
index 35bb51c..8cfa012 100644 (file)
@@ -175,10 +175,9 @@ static int __init dma_atomic_pool_init(void)
         * sizes to 128KB per 1GB of memory, min 128KB, max MAX_ORDER-1.
         */
        if (!atomic_pool_size) {
-               atomic_pool_size = max(totalram_pages() >> PAGE_SHIFT, 1UL) *
-                                       SZ_128K;
-               atomic_pool_size = min_t(size_t, atomic_pool_size,
-                                        1 << (PAGE_SHIFT + MAX_ORDER-1));
+               unsigned long pages = totalram_pages() / (SZ_1G / SZ_128K);
+               pages = min_t(unsigned long, pages, MAX_ORDER_NR_PAGES);
+               atomic_pool_size = max_t(size_t, pages << PAGE_SHIFT, SZ_128K);
        }
        INIT_WORK(&atomic_pool_work, atomic_pool_work_fn);
 
index 50cd84f..4a904cc 100644 (file)
 
 
 static int kprobes_initialized;
+/* kprobe_table can be accessed by
+ * - Normal hlist traversal and RCU add/del under kprobe_mutex is held.
+ * Or
+ * - RCU hlist traversal under disabling preempt (breakpoint handlers)
+ */
 static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
 static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
 
@@ -326,7 +331,8 @@ struct kprobe *get_kprobe(void *addr)
        struct kprobe *p;
 
        head = &kprobe_table[hash_ptr(addr, KPROBE_HASH_BITS)];
-       hlist_for_each_entry_rcu(p, head, hlist) {
+       hlist_for_each_entry_rcu(p, head, hlist,
+                                lockdep_is_held(&kprobe_mutex)) {
                if (p->addr == addr)
                        return p;
        }
@@ -586,11 +592,12 @@ static void kprobe_optimizer(struct work_struct *work)
        mutex_unlock(&module_mutex);
        mutex_unlock(&text_mutex);
        cpus_read_unlock();
-       mutex_unlock(&kprobe_mutex);
 
        /* Step 5: Kick optimizer again if needed */
        if (!list_empty(&optimizing_list) || !list_empty(&unoptimizing_list))
                kick_kprobe_optimizer();
+
+       mutex_unlock(&kprobe_mutex);
 }
 
 /* Wait for completing optimization and unoptimization */
@@ -668,8 +675,6 @@ static void force_unoptimize_kprobe(struct optimized_kprobe *op)
        lockdep_assert_cpus_held();
        arch_unoptimize_kprobe(op);
        op->kp.flags &= ~KPROBE_FLAG_OPTIMIZED;
-       if (kprobe_disabled(&op->kp))
-               arch_disarm_kprobe(&op->kp);
 }
 
 /* Unoptimize a kprobe if p is optimized */
@@ -849,7 +854,7 @@ static void optimize_all_kprobes(void)
        kprobes_allow_optimization = true;
        for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
                head = &kprobe_table[i];
-               hlist_for_each_entry_rcu(p, head, hlist)
+               hlist_for_each_entry(p, head, hlist)
                        if (!kprobe_disabled(p))
                                optimize_kprobe(p);
        }
@@ -876,7 +881,7 @@ static void unoptimize_all_kprobes(void)
        kprobes_allow_optimization = false;
        for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
                head = &kprobe_table[i];
-               hlist_for_each_entry_rcu(p, head, hlist) {
+               hlist_for_each_entry(p, head, hlist) {
                        if (!kprobe_disabled(p))
                                unoptimize_kprobe(p, false);
                }
@@ -1236,6 +1241,26 @@ __releases(hlist_lock)
 }
 NOKPROBE_SYMBOL(kretprobe_table_unlock);
 
+struct kprobe kprobe_busy = {
+       .addr = (void *) get_kprobe,
+};
+
+void kprobe_busy_begin(void)
+{
+       struct kprobe_ctlblk *kcb;
+
+       preempt_disable();
+       __this_cpu_write(current_kprobe, &kprobe_busy);
+       kcb = get_kprobe_ctlblk();
+       kcb->kprobe_status = KPROBE_HIT_ACTIVE;
+}
+
+void kprobe_busy_end(void)
+{
+       __this_cpu_write(current_kprobe, NULL);
+       preempt_enable();
+}
+
 /*
  * This function is called from finish_task_switch when task tk becomes dead,
  * so that we can recycle any function-return probe instances associated
@@ -1253,6 +1278,8 @@ void kprobe_flush_task(struct task_struct *tk)
                /* Early boot.  kretprobe_table_locks not yet initialized. */
                return;
 
+       kprobe_busy_begin();
+
        INIT_HLIST_HEAD(&empty_rp);
        hash = hash_ptr(tk, KPROBE_HASH_BITS);
        head = &kretprobe_inst_table[hash];
@@ -1266,6 +1293,8 @@ void kprobe_flush_task(struct task_struct *tk)
                hlist_del(&ri->hlist);
                kfree(ri);
        }
+
+       kprobe_busy_end();
 }
 NOKPROBE_SYMBOL(kprobe_flush_task);
 
@@ -1499,12 +1528,14 @@ static struct kprobe *__get_valid_kprobe(struct kprobe *p)
 {
        struct kprobe *ap, *list_p;
 
+       lockdep_assert_held(&kprobe_mutex);
+
        ap = get_kprobe(p->addr);
        if (unlikely(!ap))
                return NULL;
 
        if (p != ap) {
-               list_for_each_entry_rcu(list_p, &ap->list, list)
+               list_for_each_entry(list_p, &ap->list, list)
                        if (list_p == p)
                        /* kprobe p is a valid probe */
                                goto valid;
@@ -1669,7 +1700,9 @@ static int aggr_kprobe_disabled(struct kprobe *ap)
 {
        struct kprobe *kp;
 
-       list_for_each_entry_rcu(kp, &ap->list, list)
+       lockdep_assert_held(&kprobe_mutex);
+
+       list_for_each_entry(kp, &ap->list, list)
                if (!kprobe_disabled(kp))
                        /*
                         * There is an active probe on the list.
@@ -1748,7 +1781,7 @@ static int __unregister_kprobe_top(struct kprobe *p)
        else {
                /* If disabling probe has special handlers, update aggrprobe */
                if (p->post_handler && !kprobe_gone(p)) {
-                       list_for_each_entry_rcu(list_p, &ap->list, list) {
+                       list_for_each_entry(list_p, &ap->list, list) {
                                if ((list_p != p) && (list_p->post_handler))
                                        goto noclean;
                        }
@@ -2062,13 +2095,15 @@ static void kill_kprobe(struct kprobe *p)
 {
        struct kprobe *kp;
 
+       lockdep_assert_held(&kprobe_mutex);
+
        p->flags |= KPROBE_FLAG_GONE;
        if (kprobe_aggrprobe(p)) {
                /*
                 * If this is an aggr_kprobe, we have to list all the
                 * chained probes and mark them GONE.
                 */
-               list_for_each_entry_rcu(kp, &p->list, list)
+               list_for_each_entry(kp, &p->list, list)
                        kp->flags |= KPROBE_FLAG_GONE;
                p->post_handler = NULL;
                kill_optimized_kprobe(p);
@@ -2312,7 +2347,7 @@ static int kprobes_module_callback(struct notifier_block *nb,
        mutex_lock(&kprobe_mutex);
        for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
                head = &kprobe_table[i];
-               hlist_for_each_entry_rcu(p, head, hlist)
+               hlist_for_each_entry(p, head, hlist)
                        if (within_module_init((unsigned long)p->addr, mod) ||
                            (checkcore &&
                             within_module_core((unsigned long)p->addr, mod))) {
@@ -2550,7 +2585,7 @@ static int arm_all_kprobes(void)
        for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
                head = &kprobe_table[i];
                /* Arm all kprobes on a best-effort basis */
-               hlist_for_each_entry_rcu(p, head, hlist) {
+               hlist_for_each_entry(p, head, hlist) {
                        if (!kprobe_disabled(p)) {
                                err = arm_kprobe(p);
                                if (err)  {
@@ -2593,7 +2628,7 @@ static int disarm_all_kprobes(void)
        for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
                head = &kprobe_table[i];
                /* Disarm all kprobes on a best-effort basis */
-               hlist_for_each_entry_rcu(p, head, hlist) {
+               hlist_for_each_entry(p, head, hlist) {
                        if (!arch_trampoline_kprobe(p) && !kprobe_disabled(p)) {
                                err = disarm_kprobe(p, false);
                                if (err) {
index 8e3d2d7..132f84a 100644 (file)
@@ -201,7 +201,7 @@ void *kthread_probe_data(struct task_struct *task)
        struct kthread *kthread = to_kthread(task);
        void *data = NULL;
 
-       probe_kernel_read(&data, &kthread->data, sizeof(data));
+       copy_from_kernel_nofault(&data, &kthread->data, sizeof(data));
        return data;
 }
 
index 5773f0b..5ef0484 100644 (file)
@@ -3,6 +3,9 @@
  * Copyright (C) 2006 Jens Axboe <axboe@kernel.dk>
  *
  */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
 #include <linux/kernel.h>
 #include <linux/blkdev.h>
 #include <linux/blktrace_api.h>
@@ -344,7 +347,8 @@ static int __blk_trace_remove(struct request_queue *q)
 {
        struct blk_trace *bt;
 
-       bt = xchg(&q->blk_trace, NULL);
+       bt = rcu_replace_pointer(q->blk_trace, NULL,
+                                lockdep_is_held(&q->blk_trace_mutex));
        if (!bt)
                return -EINVAL;
 
@@ -494,6 +498,17 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
         */
        strreplace(buts->name, '/', '_');
 
+       /*
+        * bdev can be NULL, as with scsi-generic, this is a helpful as
+        * we can be.
+        */
+       if (rcu_dereference_protected(q->blk_trace,
+                                     lockdep_is_held(&q->blk_trace_mutex))) {
+               pr_warn("Concurrent blktraces are not allowed on %s\n",
+                       buts->name);
+               return -EBUSY;
+       }
+
        bt = kzalloc(sizeof(*bt), GFP_KERNEL);
        if (!bt)
                return -ENOMEM;
@@ -543,10 +558,7 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
        bt->pid = buts->pid;
        bt->trace_state = Blktrace_setup;
 
-       ret = -EBUSY;
-       if (cmpxchg(&q->blk_trace, NULL, bt))
-               goto err;
-
+       rcu_assign_pointer(q->blk_trace, bt);
        get_probe_ref();
 
        ret = 0;
@@ -1629,7 +1641,8 @@ static int blk_trace_remove_queue(struct request_queue *q)
 {
        struct blk_trace *bt;
 
-       bt = xchg(&q->blk_trace, NULL);
+       bt = rcu_replace_pointer(q->blk_trace, NULL,
+                                lockdep_is_held(&q->blk_trace_mutex));
        if (bt == NULL)
                return -EINVAL;
 
@@ -1661,10 +1674,7 @@ static int blk_trace_setup_queue(struct request_queue *q,
 
        blk_trace_setup_lba(bt, bdev);
 
-       ret = -EBUSY;
-       if (cmpxchg(&q->blk_trace, NULL, bt))
-               goto free_bt;
-
+       rcu_assign_pointer(q->blk_trace, bt);
        get_probe_ref();
        return 0;
 
index e729c9e..dc05626 100644 (file)
@@ -141,7 +141,7 @@ bpf_probe_read_user_common(void *dst, u32 size, const void __user *unsafe_ptr)
 {
        int ret;
 
-       ret = probe_user_read(dst, unsafe_ptr, size);
+       ret = copy_from_user_nofault(dst, unsafe_ptr, size);
        if (unlikely(ret < 0))
                memset(dst, 0, size);
        return ret;
@@ -196,7 +196,7 @@ bpf_probe_read_kernel_common(void *dst, u32 size, const void *unsafe_ptr)
 
        if (unlikely(ret < 0))
                goto fail;
-       ret = probe_kernel_read(dst, unsafe_ptr, size);
+       ret = copy_from_kernel_nofault(dst, unsafe_ptr, size);
        if (unlikely(ret < 0))
                goto fail;
        return ret;
@@ -326,7 +326,7 @@ BPF_CALL_3(bpf_probe_write_user, void __user *, unsafe_ptr, const void *, src,
        if (unlikely(!nmi_uaccess_okay()))
                return -EPERM;
 
-       return probe_user_write(unsafe_ptr, src, size);
+       return copy_to_user_nofault(unsafe_ptr, src, size);
 }
 
 static const struct bpf_func_proto bpf_probe_write_user_proto = {
@@ -661,7 +661,7 @@ BPF_CALL_5(bpf_seq_printf, struct seq_file *, m, char *, fmt, u32, fmt_size,
 
                        copy_size = (fmt[i + 2] == '4') ? 4 : 16;
 
-                       err = probe_kernel_read(bufs->buf[memcpy_cnt],
+                       err = copy_from_kernel_nofault(bufs->buf[memcpy_cnt],
                                                (void *) (long) args[fmt_cnt],
                                                copy_size);
                        if (err < 0)
index c163c35..1903b80 100644 (file)
@@ -2260,7 +2260,7 @@ ftrace_find_tramp_ops_next(struct dyn_ftrace *rec,
 
                if (hash_contains_ip(ip, op->func_hash))
                        return op;
-       } 
+       }
 
        return NULL;
 }
@@ -3599,7 +3599,7 @@ static int t_show(struct seq_file *m, void *v)
                        if (direct)
                                seq_printf(m, "\n\tdirect-->%pS", (void *)direct);
                }
-       }       
+       }
 
        seq_putc(m, '\n');
 
@@ -7151,6 +7151,10 @@ static int pid_open(struct inode *inode, struct file *file, int type)
        case TRACE_NO_PIDS:
                seq_ops = &ftrace_no_pid_sops;
                break;
+       default:
+               trace_array_put(tr);
+               WARN_ON_ONCE(1);
+               return -EINVAL;
        }
 
        ret = seq_open(file, seq_ops);
@@ -7229,6 +7233,10 @@ pid_write(struct file *filp, const char __user *ubuf,
                other_pids = rcu_dereference_protected(tr->function_pids,
                                             lockdep_is_held(&ftrace_lock));
                break;
+       default:
+               ret = -EINVAL;
+               WARN_ON_ONCE(1);
+               goto out;
        }
 
        ret = trace_pid_write(filtered_pids, &pid_list, ubuf, cnt);
index ec44b0e..bb62269 100644 (file)
@@ -3570,7 +3570,6 @@ static void *s_next(struct seq_file *m, void *v, loff_t *pos)
 
 void tracing_iter_reset(struct trace_iterator *iter, int cpu)
 {
-       struct ring_buffer_event *event;
        struct ring_buffer_iter *buf_iter;
        unsigned long entries = 0;
        u64 ts;
@@ -3588,7 +3587,7 @@ void tracing_iter_reset(struct trace_iterator *iter, int cpu)
         * that a reset never took place on a cpu. This is evident
         * by the timestamp being before the start of the buffer.
         */
-       while ((event = ring_buffer_iter_peek(buf_iter, &ts))) {
+       while (ring_buffer_iter_peek(buf_iter, &ts)) {
                if (ts >= iter->array_buffer->time_start)
                        break;
                entries++;
index def769d..13db400 100644 (file)
@@ -61,6 +61,9 @@ enum trace_type {
 #undef __field_desc
 #define __field_desc(type, container, item)
 
+#undef __field_packed
+#define __field_packed(type, container, item)
+
 #undef __array
 #define __array(type, item, size)      type    item[size];
 
index a523da0..18c4a58 100644 (file)
@@ -78,8 +78,8 @@ FTRACE_ENTRY_PACKED(funcgraph_entry, ftrace_graph_ent_entry,
 
        F_STRUCT(
                __field_struct( struct ftrace_graph_ent,        graph_ent       )
-               __field_desc(   unsigned long,  graph_ent,      func            )
-               __field_desc(   int,            graph_ent,      depth           )
+               __field_packed( unsigned long,  graph_ent,      func            )
+               __field_packed( int,            graph_ent,      depth           )
        ),
 
        F_printk("--> %ps (%d)", (void *)__entry->func, __entry->depth)
@@ -92,11 +92,11 @@ FTRACE_ENTRY_PACKED(funcgraph_exit, ftrace_graph_ret_entry,
 
        F_STRUCT(
                __field_struct( struct ftrace_graph_ret,        ret     )
-               __field_desc(   unsigned long,  ret,            func    )
-               __field_desc(   unsigned long,  ret,            overrun )
-               __field_desc(   unsigned long long, ret,        calltime)
-               __field_desc(   unsigned long long, ret,        rettime )
-               __field_desc(   int,            ret,            depth   )
+               __field_packed( unsigned long,  ret,            func    )
+               __field_packed( unsigned long,  ret,            overrun )
+               __field_packed( unsigned long long, ret,        calltime)
+               __field_packed( unsigned long long, ret,        rettime )
+               __field_packed( int,            ret,            depth   )
        ),
 
        F_printk("<-- %ps (%d) (start: %llx  end: %llx) over: %d",
index 77ce5a3..70d3d0a 100644 (file)
@@ -45,6 +45,9 @@ static int ftrace_event_register(struct trace_event_call *call,
 #undef __field_desc
 #define __field_desc(type, container, item)            type item;
 
+#undef __field_packed
+#define __field_packed(type, container, item)          type item;
+
 #undef __array
 #define __array(type, item, size)                      type item[size];
 
@@ -85,6 +88,13 @@ static void __always_unused ____ftrace_check_##name(void)            \
        .size = sizeof(_type), .align = __alignof__(_type),             \
        is_signed_type(_type), .filter_type = _filter_type },
 
+
+#undef __field_ext_packed
+#define __field_ext_packed(_type, _item, _filter_type) {       \
+       .type = #_type, .name = #_item,                         \
+       .size = sizeof(_type), .align = 1,                      \
+       is_signed_type(_type), .filter_type = _filter_type },
+
 #undef __field
 #define __field(_type, _item) __field_ext(_type, _item, FILTER_OTHER)
 
@@ -94,6 +104,9 @@ static void __always_unused ____ftrace_check_##name(void)            \
 #undef __field_desc
 #define __field_desc(_type, _container, _item) __field_ext(_type, _item, FILTER_OTHER)
 
+#undef __field_packed
+#define __field_packed(_type, _container, _item) __field_ext_packed(_type, _item, FILTER_OTHER)
+
 #undef __array
 #define __array(_type, _item, _len) {                                  \
        .type = #_type"["__stringify(_len)"]", .name = #_item,          \
@@ -129,6 +142,9 @@ static struct trace_event_fields ftrace_event_fields_##name[] = {   \
 #undef __field_desc
 #define __field_desc(type, container, item)
 
+#undef __field_packed
+#define __field_packed(type, container, item)
+
 #undef __array
 #define __array(type, item, len)
 
index 8a4c8d5..dd4dff7 100644 (file)
@@ -42,7 +42,7 @@ static int allocate_ftrace_ops(struct trace_array *tr)
        if (!ops)
                return -ENOMEM;
 
-       /* Currently only the non stack verision is supported */
+       /* Currently only the non stack version is supported */
        ops->func = function_trace_call;
        ops->flags = FTRACE_OPS_FL_RECURSION_SAFE | FTRACE_OPS_FL_PID;
 
index 6048f1b..aefb606 100644 (file)
@@ -1222,7 +1222,7 @@ fetch_store_strlen(unsigned long addr)
 #endif
 
        do {
-               ret = probe_kernel_read(&c, (u8 *)addr + len, 1);
+               ret = copy_from_kernel_nofault(&c, (u8 *)addr + len, 1);
                len++;
        } while (c && ret == 0 && len < MAX_STRING_SIZE);
 
@@ -1290,7 +1290,7 @@ probe_mem_read_user(void *dest, void *src, size_t size)
 {
        const void __user *uaddr =  (__force const void __user *)src;
 
-       return probe_user_read(dest, uaddr, size);
+       return copy_from_user_nofault(dest, uaddr, size);
 }
 
 static nokprobe_inline int
@@ -1300,7 +1300,7 @@ probe_mem_read(void *dest, void *src, size_t size)
        if ((unsigned long)src < TASK_SIZE)
                return probe_mem_read_user(dest, src, size);
 #endif
-       return probe_kernel_read(dest, src, size);
+       return copy_from_kernel_nofault(dest, src, size);
 }
 
 /* Note that we don't verify it, since the code does not come from user space */
index b8a928e..d2867cc 100644 (file)
@@ -639,8 +639,8 @@ static int traceprobe_parse_probe_arg_body(char *arg, ssize_t *size,
                        ret = -EINVAL;
                        goto fail;
                }
-               if ((code->op == FETCH_OP_IMM || code->op == FETCH_OP_COMM) ||
-                    parg->count) {
+               if ((code->op == FETCH_OP_IMM || code->op == FETCH_OP_COMM ||
+                    code->op == FETCH_OP_DATA) || parg->count) {
                        /*
                         * IMM, DATA and COMM is pointing actual address, those
                         * must be kept, and if parg->count != 0, this is an
index a0ff9e2..a22b628 100644 (file)
@@ -236,7 +236,7 @@ struct trace_probe_event {
        struct trace_event_call         call;
        struct list_head                files;
        struct list_head                probes;
-       struct trace_uprobe_filter      filter[0];
+       struct trace_uprobe_filter      filter[];
 };
 
 struct trace_probe {
index 9fbe1e2..c41c3c1 100644 (file)
@@ -4638,11 +4638,11 @@ void print_worker_info(const char *log_lvl, struct task_struct *task)
         * Carefully copy the associated workqueue's workfn, name and desc.
         * Keep the original last '\0' in case the original is garbage.
         */
-       probe_kernel_read(&fn, &worker->current_func, sizeof(fn));
-       probe_kernel_read(&pwq, &worker->current_pwq, sizeof(pwq));
-       probe_kernel_read(&wq, &pwq->wq, sizeof(wq));
-       probe_kernel_read(name, wq->name, sizeof(name) - 1);
-       probe_kernel_read(desc, worker->desc, sizeof(desc) - 1);
+       copy_from_kernel_nofault(&fn, &worker->current_func, sizeof(fn));
+       copy_from_kernel_nofault(&pwq, &worker->current_pwq, sizeof(pwq));
+       copy_from_kernel_nofault(&wq, &pwq->wq, sizeof(wq));
+       copy_from_kernel_nofault(name, wq->name, sizeof(name) - 1);
+       copy_from_kernel_nofault(desc, worker->desc, sizeof(desc) - 1);
 
        if (fn || name[0] || desc[0]) {
                printk("%sWorkqueue: %s %ps", log_lvl, name, fn);
index d74ac0f..9ad9210 100644 (file)
@@ -229,7 +229,6 @@ config DEBUG_INFO_COMPRESSED
        bool "Compressed debugging information"
        depends on DEBUG_INFO
        depends on $(cc-option,-gz=zlib)
-       depends on $(as-option,-Wa$(comma)--compress-debug-sections=zlib)
        depends on $(ld-option,--compress-debug-sections=zlib)
        help
          Compress the debug information using zlib.  Requires GCC 5.0+ or Clang
index 4e865d4..707453f 100644 (file)
@@ -91,6 +91,7 @@ int seq_buf_printf(struct seq_buf *s, const char *fmt, ...)
 
        return ret;
 }
+EXPORT_SYMBOL_GPL(seq_buf_printf);
 
 #ifdef CONFIG_BINARY_PRINTF
 /**
index f258743..bd7c7ff 100644 (file)
@@ -419,8 +419,8 @@ static bool test_kernel_ptr(unsigned long addr, int size)
        /* should be at least readable kernel address */
        if (access_ok(ptr, 1) ||
            access_ok(ptr + size - 1, 1) ||
-           probe_kernel_address(ptr, buf) ||
-           probe_kernel_address(ptr + size - 1, buf)) {
+           get_kernel_nofault(buf, ptr) ||
+           get_kernel_nofault(buf, ptr + size - 1)) {
                pr_err("invalid kernel ptr: %#lx\n", addr);
                return true;
        }
@@ -437,7 +437,7 @@ static bool __maybe_unused test_magic(unsigned long addr, int offset,
        if (!addr)
                return false;
 
-       if (probe_kernel_address(ptr, magic) || magic != expected) {
+       if (get_kernel_nofault(magic, ptr) || magic != expected) {
                pr_err("invalid magic at %#lx + %#x = %#x, expected %#x\n",
                       addr, offset, magic, expected);
                return true;
index 72c1abf..da13793 100644 (file)
@@ -979,10 +979,10 @@ err_check_expect_stats2:
 err_world2_obj_get:
        for (i--; i >= 0; i--)
                world_obj_put(&world2, objagg, hints_case->key_ids[i]);
-       objagg_hints_put(hints);
-       objagg_destroy(objagg2);
        i = hints_case->key_ids_count;
+       objagg_destroy(objagg2);
 err_check_expect_hints_stats:
+       objagg_hints_put(hints);
 err_hints_get:
 err_check_expect_stats:
 err_world_obj_get:
index b5b1de8..4f37651 100644 (file)
@@ -120,9 +120,9 @@ void __dump_page(struct page *page, const char *reason)
                 * mapping can be invalid pointer and we don't want to crash
                 * accessing it, so probe everything depending on it carefully
                 */
-               if (probe_kernel_read(&host, &mapping->host,
+               if (copy_from_kernel_nofault(&host, &mapping->host,
                                        sizeof(struct inode *)) ||
-                   probe_kernel_read(&a_ops, &mapping->a_ops,
+                   copy_from_kernel_nofault(&a_ops, &mapping->a_ops,
                                sizeof(struct address_space_operations *))) {
                        pr_warn("failed to read mapping->host or a_ops, mapping not a valid kernel address?\n");
                        goto out_mapping;
@@ -133,7 +133,7 @@ void __dump_page(struct page *page, const char *reason)
                        goto out_mapping;
                }
 
-               if (probe_kernel_read(&dentry_first,
+               if (copy_from_kernel_nofault(&dentry_first,
                        &host->i_dentry.first, sizeof(struct hlist_node *))) {
                        pr_warn("mapping->a_ops:%ps with invalid mapping->host inode address %px\n",
                                a_ops, host);
@@ -146,7 +146,7 @@ void __dump_page(struct page *page, const char *reason)
                }
 
                dentry_ptr = container_of(dentry_first, struct dentry, d_u.d_alias);
-               if (probe_kernel_read(&dentry, dentry_ptr,
+               if (copy_from_kernel_nofault(&dentry, dentry_ptr,
                                                        sizeof(struct dentry))) {
                        pr_warn("mapping->aops:%ps with invalid mapping->host->i_dentry.first %px\n",
                                a_ops, dentry_ptr);
index de9e362..6f47697 100644 (file)
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -2196,7 +2196,7 @@ static inline pte_t gup_get_pte(pte_t *ptep)
  */
 static inline pte_t gup_get_pte(pte_t *ptep)
 {
-       return READ_ONCE(*ptep);
+       return ptep_get(ptep);
 }
 #endif /* CONFIG_GUP_GET_PTE_LOW_HIGH */
 
@@ -2425,7 +2425,7 @@ static int gup_hugepte(pte_t *ptep, unsigned long sz, unsigned long addr,
        if (pte_end < end)
                end = pte_end;
 
-       pte = READ_ONCE(*ptep);
+       pte = huge_ptep_get(ptep);
 
        if (!pte_access_permitted(pte, flags & FOLL_WRITE))
                return 0;
index 88845ed..f98ff91 100644 (file)
@@ -6,14 +6,15 @@
 #include <linux/mm.h>
 #include <linux/uaccess.h>
 
-bool __weak probe_kernel_read_allowed(const void *unsafe_src, size_t size)
+bool __weak copy_from_kernel_nofault_allowed(const void *unsafe_src,
+               size_t size)
 {
        return true;
 }
 
 #ifdef HAVE_GET_KERNEL_NOFAULT
 
-#define probe_kernel_read_loop(dst, src, len, type, err_label)         \
+#define copy_from_kernel_nofault_loop(dst, src, len, type, err_label)  \
        while (len >= sizeof(type)) {                                   \
                __get_kernel_nofault(dst, src, type, err_label);                \
                dst += sizeof(type);                                    \
@@ -21,25 +22,25 @@ bool __weak probe_kernel_read_allowed(const void *unsafe_src, size_t size)
                len -= sizeof(type);                                    \
        }
 
-long probe_kernel_read(void *dst, const void *src, size_t size)
+long copy_from_kernel_nofault(void *dst, const void *src, size_t size)
 {
-       if (!probe_kernel_read_allowed(src, size))
+       if (!copy_from_kernel_nofault_allowed(src, size))
                return -ERANGE;
 
        pagefault_disable();
-       probe_kernel_read_loop(dst, src, size, u64, Efault);
-       probe_kernel_read_loop(dst, src, size, u32, Efault);
-       probe_kernel_read_loop(dst, src, size, u16, Efault);
-       probe_kernel_read_loop(dst, src, size, u8, Efault);
+       copy_from_kernel_nofault_loop(dst, src, size, u64, Efault);
+       copy_from_kernel_nofault_loop(dst, src, size, u32, Efault);
+       copy_from_kernel_nofault_loop(dst, src, size, u16, Efault);
+       copy_from_kernel_nofault_loop(dst, src, size, u8, Efault);
        pagefault_enable();
        return 0;
 Efault:
        pagefault_enable();
        return -EFAULT;
 }
-EXPORT_SYMBOL_GPL(probe_kernel_read);
+EXPORT_SYMBOL_GPL(copy_from_kernel_nofault);
 
-#define probe_kernel_write_loop(dst, src, len, type, err_label)                \
+#define copy_to_kernel_nofault_loop(dst, src, len, type, err_label)    \
        while (len >= sizeof(type)) {                                   \
                __put_kernel_nofault(dst, src, type, err_label);                \
                dst += sizeof(type);                                    \
@@ -47,13 +48,13 @@ EXPORT_SYMBOL_GPL(probe_kernel_read);
                len -= sizeof(type);                                    \
        }
 
-long probe_kernel_write(void *dst, const void *src, size_t size)
+long copy_to_kernel_nofault(void *dst, const void *src, size_t size)
 {
        pagefault_disable();
-       probe_kernel_write_loop(dst, src, size, u64, Efault);
-       probe_kernel_write_loop(dst, src, size, u32, Efault);
-       probe_kernel_write_loop(dst, src, size, u16, Efault);
-       probe_kernel_write_loop(dst, src, size, u8, Efault);
+       copy_to_kernel_nofault_loop(dst, src, size, u64, Efault);
+       copy_to_kernel_nofault_loop(dst, src, size, u32, Efault);
+       copy_to_kernel_nofault_loop(dst, src, size, u16, Efault);
+       copy_to_kernel_nofault_loop(dst, src, size, u8, Efault);
        pagefault_enable();
        return 0;
 Efault:
@@ -67,7 +68,7 @@ long strncpy_from_kernel_nofault(char *dst, const void *unsafe_addr, long count)
 
        if (unlikely(count <= 0))
                return 0;
-       if (!probe_kernel_read_allowed(unsafe_addr, count))
+       if (!copy_from_kernel_nofault_allowed(unsafe_addr, count))
                return -ERANGE;
 
        pagefault_disable();
@@ -87,7 +88,7 @@ Efault:
 }
 #else /* HAVE_GET_KERNEL_NOFAULT */
 /**
- * probe_kernel_read(): safely attempt to read from kernel-space
+ * copy_from_kernel_nofault(): safely attempt to read from kernel-space
  * @dst: pointer to the buffer that shall take the data
  * @src: address to read from
  * @size: size of the data chunk
@@ -98,15 +99,15 @@ Efault:
  *
  * We ensure that the copy_from_user is executed in atomic context so that
  * do_page_fault() doesn't attempt to take mmap_lock.  This makes
- * probe_kernel_read() suitable for use within regions where the caller
+ * copy_from_kernel_nofault() suitable for use within regions where the caller
  * already holds mmap_lock, or other locks which nest inside mmap_lock.
  */
-long probe_kernel_read(void *dst, const void *src, size_t size)
+long copy_from_kernel_nofault(void *dst, const void *src, size_t size)
 {
        long ret;
        mm_segment_t old_fs = get_fs();
 
-       if (!probe_kernel_read_allowed(src, size))
+       if (!copy_from_kernel_nofault_allowed(src, size))
                return -ERANGE;
 
        set_fs(KERNEL_DS);
@@ -120,10 +121,10 @@ long probe_kernel_read(void *dst, const void *src, size_t size)
                return -EFAULT;
        return 0;
 }
-EXPORT_SYMBOL_GPL(probe_kernel_read);
+EXPORT_SYMBOL_GPL(copy_from_kernel_nofault);
 
 /**
- * probe_kernel_write(): safely attempt to write to a location
+ * copy_to_kernel_nofault(): safely attempt to write to a location
  * @dst: address to write to
  * @src: pointer to the data that shall be written
  * @size: size of the data chunk
@@ -131,7 +132,7 @@ EXPORT_SYMBOL_GPL(probe_kernel_read);
  * Safely write to address @dst from the buffer at @src.  If a kernel fault
  * happens, handle that and return -EFAULT.
  */
-long probe_kernel_write(void *dst, const void *src, size_t size)
+long copy_to_kernel_nofault(void *dst, const void *src, size_t size)
 {
        long ret;
        mm_segment_t old_fs = get_fs();
@@ -174,7 +175,7 @@ long strncpy_from_kernel_nofault(char *dst, const void *unsafe_addr, long count)
 
        if (unlikely(count <= 0))
                return 0;
-       if (!probe_kernel_read_allowed(unsafe_addr, count))
+       if (!copy_from_kernel_nofault_allowed(unsafe_addr, count))
                return -ERANGE;
 
        set_fs(KERNEL_DS);
@@ -193,7 +194,7 @@ long strncpy_from_kernel_nofault(char *dst, const void *unsafe_addr, long count)
 #endif /* HAVE_GET_KERNEL_NOFAULT */
 
 /**
- * probe_user_read(): safely attempt to read from a user-space location
+ * copy_from_user_nofault(): safely attempt to read from a user-space location
  * @dst: pointer to the buffer that shall take the data
  * @src: address to read from. This must be a user address.
  * @size: size of the data chunk
@@ -201,7 +202,7 @@ long strncpy_from_kernel_nofault(char *dst, const void *unsafe_addr, long count)
  * Safely read from user address @src to the buffer at @dst. If a kernel fault
  * happens, handle that and return -EFAULT.
  */
-long probe_user_read(void *dst, const void __user *src, size_t size)
+long copy_from_user_nofault(void *dst, const void __user *src, size_t size)
 {
        long ret = -EFAULT;
        mm_segment_t old_fs = get_fs();
@@ -218,10 +219,10 @@ long probe_user_read(void *dst, const void __user *src, size_t size)
                return -EFAULT;
        return 0;
 }
-EXPORT_SYMBOL_GPL(probe_user_read);
+EXPORT_SYMBOL_GPL(copy_from_user_nofault);
 
 /**
- * probe_user_write(): safely attempt to write to a user-space location
+ * copy_to_user_nofault(): safely attempt to write to a user-space location
  * @dst: address to write to
  * @src: pointer to the data that shall be written
  * @size: size of the data chunk
@@ -229,7 +230,7 @@ EXPORT_SYMBOL_GPL(probe_user_read);
  * Safely write to address @dst from the buffer at @src.  If a kernel fault
  * happens, handle that and return -EFAULT.
  */
-long probe_user_write(void __user *dst, const void *src, size_t size)
+long copy_to_user_nofault(void __user *dst, const void *src, size_t size)
 {
        long ret = -EFAULT;
        mm_segment_t old_fs = get_fs();
@@ -246,7 +247,7 @@ long probe_user_write(void __user *dst, const void *src, size_t size)
                return -EFAULT;
        return 0;
 }
-EXPORT_SYMBOL_GPL(probe_user_write);
+EXPORT_SYMBOL_GPL(copy_to_user_nofault);
 
 /**
  * strncpy_from_user_nofault: - Copy a NUL terminated string from unsafe user
index 5e313fa..2a99df7 100644 (file)
@@ -25,7 +25,7 @@ void rodata_test(void)
        }
 
        /* test 2: write to the variable; this should fault */
-       if (!probe_kernel_write((void *)&rodata_test_data,
+       if (!copy_to_kernel_nofault((void *)&rodata_test_data,
                                (void *)&zero, sizeof(zero))) {
                pr_err("test data was not read only\n");
                return;
index b8f798b..fe81773 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -292,7 +292,7 @@ static inline void *get_freepointer_safe(struct kmem_cache *s, void *object)
                return get_freepointer(s, object);
 
        freepointer_addr = (unsigned long)object + s->offset;
-       probe_kernel_read(&p, (void **)freepointer_addr, sizeof(p));
+       copy_from_kernel_nofault(&p, (void **)freepointer_addr, sizeof(p));
        return freelist_ptr(s, p, freepointer_addr);
 }
 
index afe0e81..4e7edd7 100644 (file)
@@ -332,6 +332,7 @@ struct ceph_options *ceph_alloc_options(void)
        opt->mount_timeout = CEPH_MOUNT_TIMEOUT_DEFAULT;
        opt->osd_idle_ttl = CEPH_OSD_IDLE_TTL_DEFAULT;
        opt->osd_request_timeout = CEPH_OSD_REQUEST_TIMEOUT_DEFAULT;
+       opt->read_from_replica = CEPH_READ_FROM_REPLICA_DEFAULT;
        return opt;
 }
 EXPORT_SYMBOL(ceph_alloc_options);
@@ -490,16 +491,13 @@ int ceph_parse_param(struct fs_parameter *param, struct ceph_options *opt,
        case Opt_read_from_replica:
                switch (result.uint_32) {
                case Opt_read_from_replica_no:
-                       opt->osd_req_flags &= ~(CEPH_OSD_FLAG_BALANCE_READS |
-                                               CEPH_OSD_FLAG_LOCALIZE_READS);
+                       opt->read_from_replica = 0;
                        break;
                case Opt_read_from_replica_balance:
-                       opt->osd_req_flags |= CEPH_OSD_FLAG_BALANCE_READS;
-                       opt->osd_req_flags &= ~CEPH_OSD_FLAG_LOCALIZE_READS;
+                       opt->read_from_replica = CEPH_OSD_FLAG_BALANCE_READS;
                        break;
                case Opt_read_from_replica_localize:
-                       opt->osd_req_flags |= CEPH_OSD_FLAG_LOCALIZE_READS;
-                       opt->osd_req_flags &= ~CEPH_OSD_FLAG_BALANCE_READS;
+                       opt->read_from_replica = CEPH_OSD_FLAG_LOCALIZE_READS;
                        break;
                default:
                        BUG();
@@ -613,9 +611,9 @@ int ceph_print_client_options(struct seq_file *m, struct ceph_client *client,
                }
                seq_putc(m, ',');
        }
-       if (opt->osd_req_flags & CEPH_OSD_FLAG_BALANCE_READS) {
+       if (opt->read_from_replica == CEPH_OSD_FLAG_BALANCE_READS) {
                seq_puts(m, "read_from_replica=balance,");
-       } else if (opt->osd_req_flags & CEPH_OSD_FLAG_LOCALIZE_READS) {
+       } else if (opt->read_from_replica == CEPH_OSD_FLAG_LOCALIZE_READS) {
                seq_puts(m, "read_from_replica=localize,");
        }
 
index 4fea3c3..2db8b44 100644 (file)
@@ -445,8 +445,10 @@ static void target_copy(struct ceph_osd_request_target *dest,
        dest->size = src->size;
        dest->min_size = src->min_size;
        dest->sort_bitwise = src->sort_bitwise;
+       dest->recovery_deletes = src->recovery_deletes;
 
        dest->flags = src->flags;
+       dest->used_replica = src->used_replica;
        dest->paused = src->paused;
 
        dest->epoch = src->epoch;
@@ -1117,10 +1119,10 @@ struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *osdc,
                                       truncate_size, truncate_seq);
        }
 
-       req->r_flags = flags;
        req->r_base_oloc.pool = layout->pool_id;
        req->r_base_oloc.pool_ns = ceph_try_get_string(layout->pool_ns);
        ceph_oid_printf(&req->r_base_oid, "%llx.%08llx", vino.ino, objnum);
+       req->r_flags = flags | osdc->client->options->read_from_replica;
 
        req->r_snapid = vino.snap;
        if (flags & CEPH_OSD_FLAG_WRITE)
@@ -2431,14 +2433,11 @@ promote:
 
 static void account_request(struct ceph_osd_request *req)
 {
-       struct ceph_osd_client *osdc = req->r_osdc;
-
        WARN_ON(req->r_flags & (CEPH_OSD_FLAG_ACK | CEPH_OSD_FLAG_ONDISK));
        WARN_ON(!(req->r_flags & (CEPH_OSD_FLAG_READ | CEPH_OSD_FLAG_WRITE)));
 
        req->r_flags |= CEPH_OSD_FLAG_ONDISK;
-       req->r_flags |= osdc->client->options->osd_req_flags;
-       atomic_inc(&osdc->num_requests);
+       atomic_inc(&req->r_osdc->num_requests);
 
        req->r_start_stamp = jiffies;
        req->r_start_latency = ktime_get();
index 83330a6..12fda8f 100644 (file)
@@ -4605,7 +4605,11 @@ static void tcp_data_queue_ofo(struct sock *sk, struct sk_buff *skb)
        if (tcp_ooo_try_coalesce(sk, tp->ooo_last_skb,
                                 skb, &fragstolen)) {
 coalesce_done:
-               tcp_grow_window(sk, skb);
+               /* For non sack flows, do not grow window to force DUPACK
+                * and trigger fast retransmit.
+                */
+               if (tcp_is_sack(tp))
+                       tcp_grow_window(sk, skb);
                kfree_skb_partial(skb, fragstolen);
                skb = NULL;
                goto add_sack;
@@ -4689,7 +4693,11 @@ add_sack:
                tcp_sack_new_ofo_skb(sk, seq, end_seq);
 end:
        if (skb) {
-               tcp_grow_window(sk, skb);
+               /* For non sack flows, do not grow window to force DUPACK
+                * and trigger fast retransmit.
+                */
+               if (tcp_is_sack(tp))
+                       tcp_grow_window(sk, skb);
                skb_condense(skb);
                skb_set_owner_r(skb, sk);
        }
index 7e12d21..8cd2782 100644 (file)
@@ -2615,6 +2615,7 @@ void ipv6_mc_destroy_dev(struct inet6_dev *idev)
                idev->mc_list = i->next;
 
                write_unlock_bh(&idev->lock);
+               ip6_mc_clear_src(i);
                ma_put(i);
                write_lock_bh(&idev->lock);
        }
index 809687d..db56535 100644 (file)
@@ -135,8 +135,6 @@ static inline __be32 mptcp_option(u8 subopt, u8 len, u8 nib, u8 field)
                     ((nib & 0xF) << 8) | field);
 }
 
-#define MPTCP_PM_MAX_ADDR      4
-
 struct mptcp_addr_info {
        sa_family_t             family;
        __be16                  port;
@@ -234,10 +232,7 @@ static inline struct mptcp_data_frag *mptcp_rtx_head(const struct sock *sk)
 {
        struct mptcp_sock *msk = mptcp_sk(sk);
 
-       if (list_empty(&msk->rtx_queue))
-               return NULL;
-
-       return list_first_entry(&msk->rtx_queue, struct mptcp_data_frag, list);
+       return list_first_entry_or_null(&msk->rtx_queue, struct mptcp_data_frag, list);
 }
 
 struct mptcp_subflow_request_sock {
index bf13257..bbdb74b 100644 (file)
@@ -1053,8 +1053,10 @@ int mptcp_subflow_create_socket(struct sock *sk, struct socket **new_sock)
        err = tcp_set_ulp(sf->sk, "mptcp");
        release_sock(sf->sk);
 
-       if (err)
+       if (err) {
+               sock_release(sf);
                return err;
+       }
 
        /* the newly created socket really belongs to the owning MPTCP master
         * socket, even if for additional subflows the allocation is performed
index d7bd8b1..832eabe 100644 (file)
@@ -939,7 +939,8 @@ ctnetlink_alloc_filter(const struct nlattr * const cda[], u8 family)
                        filter->mark.mask = 0xffffffff;
                }
        } else if (cda[CTA_MARK_MASK]) {
-               return ERR_PTR(-EINVAL);
+               err = -EINVAL;
+               goto err_filter;
        }
 #endif
        if (!cda[CTA_FILTER])
@@ -947,15 +948,17 @@ ctnetlink_alloc_filter(const struct nlattr * const cda[], u8 family)
 
        err = ctnetlink_parse_zone(cda[CTA_ZONE], &filter->zone);
        if (err < 0)
-               return ERR_PTR(err);
+               goto err_filter;
 
        err = ctnetlink_parse_filter(cda[CTA_FILTER], filter);
        if (err < 0)
-               return ERR_PTR(err);
+               goto err_filter;
 
        if (filter->orig_flags) {
-               if (!cda[CTA_TUPLE_ORIG])
-                       return ERR_PTR(-EINVAL);
+               if (!cda[CTA_TUPLE_ORIG]) {
+                       err = -EINVAL;
+                       goto err_filter;
+               }
 
                err = ctnetlink_parse_tuple_filter(cda, &filter->orig,
                                                   CTA_TUPLE_ORIG,
@@ -963,23 +966,32 @@ ctnetlink_alloc_filter(const struct nlattr * const cda[], u8 family)
                                                   &filter->zone,
                                                   filter->orig_flags);
                if (err < 0)
-                       return ERR_PTR(err);
+                       goto err_filter;
        }
 
        if (filter->reply_flags) {
-               if (!cda[CTA_TUPLE_REPLY])
-                       return ERR_PTR(-EINVAL);
+               if (!cda[CTA_TUPLE_REPLY]) {
+                       err = -EINVAL;
+                       goto err_filter;
+               }
 
                err = ctnetlink_parse_tuple_filter(cda, &filter->reply,
                                                   CTA_TUPLE_REPLY,
                                                   filter->family,
                                                   &filter->zone,
                                                   filter->orig_flags);
-               if (err < 0)
-                       return ERR_PTR(err);
+               if (err < 0) {
+                       err = -EINVAL;
+                       goto err_filter;
+               }
        }
 
        return filter;
+
+err_filter:
+       kfree(filter);
+
+       return ERR_PTR(err);
 }
 
 static bool ctnetlink_needs_filter(u8 family, const struct nlattr * const *cda)
index 6a3034f..afa8517 100644 (file)
@@ -387,51 +387,6 @@ static void nf_flow_offload_work_gc(struct work_struct *work)
        queue_delayed_work(system_power_efficient_wq, &flow_table->gc_work, HZ);
 }
 
-int nf_flow_table_offload_add_cb(struct nf_flowtable *flow_table,
-                                flow_setup_cb_t *cb, void *cb_priv)
-{
-       struct flow_block *block = &flow_table->flow_block;
-       struct flow_block_cb *block_cb;
-       int err = 0;
-
-       down_write(&flow_table->flow_block_lock);
-       block_cb = flow_block_cb_lookup(block, cb, cb_priv);
-       if (block_cb) {
-               err = -EEXIST;
-               goto unlock;
-       }
-
-       block_cb = flow_block_cb_alloc(cb, cb_priv, cb_priv, NULL);
-       if (IS_ERR(block_cb)) {
-               err = PTR_ERR(block_cb);
-               goto unlock;
-       }
-
-       list_add_tail(&block_cb->list, &block->cb_list);
-
-unlock:
-       up_write(&flow_table->flow_block_lock);
-       return err;
-}
-EXPORT_SYMBOL_GPL(nf_flow_table_offload_add_cb);
-
-void nf_flow_table_offload_del_cb(struct nf_flowtable *flow_table,
-                                 flow_setup_cb_t *cb, void *cb_priv)
-{
-       struct flow_block *block = &flow_table->flow_block;
-       struct flow_block_cb *block_cb;
-
-       down_write(&flow_table->flow_block_lock);
-       block_cb = flow_block_cb_lookup(block, cb, cb_priv);
-       if (block_cb) {
-               list_del(&block_cb->list);
-               flow_block_cb_free(block_cb);
-       } else {
-               WARN_ON(true);
-       }
-       up_write(&flow_table->flow_block_lock);
-}
-EXPORT_SYMBOL_GPL(nf_flow_table_offload_del_cb);
 
 static int nf_flow_nat_port_tcp(struct sk_buff *skb, unsigned int thoff,
                                __be16 port, __be16 new_port)
index 073aa10..7647ecf 100644 (file)
@@ -6550,12 +6550,22 @@ err1:
        return err;
 }
 
+static void nft_flowtable_hook_release(struct nft_flowtable_hook *flowtable_hook)
+{
+       struct nft_hook *this, *next;
+
+       list_for_each_entry_safe(this, next, &flowtable_hook->list, list) {
+               list_del(&this->list);
+               kfree(this);
+       }
+}
+
 static int nft_delflowtable_hook(struct nft_ctx *ctx,
                                 struct nft_flowtable *flowtable)
 {
        const struct nlattr * const *nla = ctx->nla;
        struct nft_flowtable_hook flowtable_hook;
-       struct nft_hook *this, *next, *hook;
+       struct nft_hook *this, *hook;
        struct nft_trans *trans;
        int err;
 
@@ -6564,33 +6574,40 @@ static int nft_delflowtable_hook(struct nft_ctx *ctx,
        if (err < 0)
                return err;
 
-       list_for_each_entry_safe(this, next, &flowtable_hook.list, list) {
+       list_for_each_entry(this, &flowtable_hook.list, list) {
                hook = nft_hook_list_find(&flowtable->hook_list, this);
                if (!hook) {
                        err = -ENOENT;
                        goto err_flowtable_del_hook;
                }
                hook->inactive = true;
-               list_del(&this->list);
-               kfree(this);
        }
 
        trans = nft_trans_alloc(ctx, NFT_MSG_DELFLOWTABLE,
                                sizeof(struct nft_trans_flowtable));
-       if (!trans)
-               return -ENOMEM;
+       if (!trans) {
+               err = -ENOMEM;
+               goto err_flowtable_del_hook;
+       }
 
        nft_trans_flowtable(trans) = flowtable;
        nft_trans_flowtable_update(trans) = true;
        INIT_LIST_HEAD(&nft_trans_flowtable_hooks(trans));
+       nft_flowtable_hook_release(&flowtable_hook);
 
        list_add_tail(&trans->list, &ctx->net->nft.commit_list);
 
        return 0;
 
 err_flowtable_del_hook:
-       list_for_each_entry(hook, &flowtable_hook.list, list)
+       list_for_each_entry(this, &flowtable_hook.list, list) {
+               hook = nft_hook_list_find(&flowtable->hook_list, this);
+               if (!hook)
+                       break;
+
                hook->inactive = false;
+       }
+       nft_flowtable_hook_release(&flowtable_hook);
 
        return err;
 }
index 8b5acc6..8c04388 100644 (file)
@@ -1242,7 +1242,9 @@ static int nft_pipapo_insert(const struct net *net, const struct nft_set *set,
                end += NFT_PIPAPO_GROUPS_PADDED_SIZE(f);
        }
 
-       if (!*this_cpu_ptr(m->scratch) || bsize_max > m->bsize_max) {
+       if (!*get_cpu_ptr(m->scratch) || bsize_max > m->bsize_max) {
+               put_cpu_ptr(m->scratch);
+
                err = pipapo_realloc_scratch(m, bsize_max);
                if (err)
                        return err;
@@ -1250,6 +1252,8 @@ static int nft_pipapo_insert(const struct net *net, const struct nft_set *set,
                this_cpu_write(nft_pipapo_scratch_index, false);
 
                m->bsize_max = bsize_max;
+       } else {
+               put_cpu_ptr(m->scratch);
        }
 
        *ext2 = &e->ext;
index 62f416b..b6aad3f 100644 (file)
@@ -271,12 +271,14 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
 
                        if (nft_rbtree_interval_start(new)) {
                                if (nft_rbtree_interval_end(rbe) &&
-                                   nft_set_elem_active(&rbe->ext, genmask))
+                                   nft_set_elem_active(&rbe->ext, genmask) &&
+                                   !nft_set_elem_expired(&rbe->ext))
                                        overlap = false;
                        } else {
                                overlap = nft_rbtree_interval_end(rbe) &&
                                          nft_set_elem_active(&rbe->ext,
-                                                             genmask);
+                                                             genmask) &&
+                                         !nft_set_elem_expired(&rbe->ext);
                        }
                } else if (d > 0) {
                        p = &parent->rb_right;
@@ -284,9 +286,11 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
                        if (nft_rbtree_interval_end(new)) {
                                overlap = nft_rbtree_interval_end(rbe) &&
                                          nft_set_elem_active(&rbe->ext,
-                                                             genmask);
+                                                             genmask) &&
+                                         !nft_set_elem_expired(&rbe->ext);
                        } else if (nft_rbtree_interval_end(rbe) &&
-                                  nft_set_elem_active(&rbe->ext, genmask)) {
+                                  nft_set_elem_active(&rbe->ext, genmask) &&
+                                  !nft_set_elem_expired(&rbe->ext)) {
                                overlap = true;
                        }
                } else {
@@ -294,15 +298,18 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
                            nft_rbtree_interval_start(new)) {
                                p = &parent->rb_left;
 
-                               if (nft_set_elem_active(&rbe->ext, genmask))
+                               if (nft_set_elem_active(&rbe->ext, genmask) &&
+                                   !nft_set_elem_expired(&rbe->ext))
                                        overlap = false;
                        } else if (nft_rbtree_interval_start(rbe) &&
                                   nft_rbtree_interval_end(new)) {
                                p = &parent->rb_right;
 
-                               if (nft_set_elem_active(&rbe->ext, genmask))
+                               if (nft_set_elem_active(&rbe->ext, genmask) &&
+                                   !nft_set_elem_expired(&rbe->ext))
                                        overlap = false;
-                       } else if (nft_set_elem_active(&rbe->ext, genmask)) {
+                       } else if (nft_set_elem_active(&rbe->ext, genmask) &&
+                                  !nft_set_elem_expired(&rbe->ext)) {
                                *ext = &rbe->ext;
                                return -EEXIST;
                        } else {
index 5ae069d..8dfff43 100644 (file)
@@ -264,7 +264,13 @@ struct rds_ib_device {
        int                     *vector_load;
 };
 
-#define ibdev_to_node(ibdev) dev_to_node((ibdev)->dev.parent)
+static inline int ibdev_to_node(struct ib_device *ibdev)
+{
+       struct device *parent;
+
+       parent = ibdev->dev.parent;
+       return parent ? dev_to_node(parent) : NUMA_NO_NODE;
+}
 #define rdsibdev_to_node(rdsibdev) ibdev_to_node(rdsibdev->dev)
 
 /* bits for i_ack_flags */
index e29f0f4..e9f3576 100644 (file)
@@ -1543,17 +1543,6 @@ static void __exit ct_cleanup_module(void)
        destroy_workqueue(act_ct_wq);
 }
 
-void tcf_ct_flow_table_restore_skb(struct sk_buff *skb, unsigned long cookie)
-{
-       enum ip_conntrack_info ctinfo = cookie & NFCT_INFOMASK;
-       struct nf_conn *ct;
-
-       ct = (struct nf_conn *)(cookie & NFCT_PTRMASK);
-       nf_conntrack_get(&ct->ct_general);
-       nf_ct_set(skb, ct, ctinfo);
-}
-EXPORT_SYMBOL_GPL(tcf_ct_flow_table_restore_skb);
-
 module_init(ct_init_module);
 module_exit(ct_cleanup_module);
 MODULE_AUTHOR("Paul Blakey <paulb@mellanox.com>");
index f3ac549..0ed6e4d 100644 (file)
@@ -211,7 +211,7 @@ config SAMPLE_WATCHDOG
 
 config SAMPLE_WATCH_QUEUE
        bool "Build example /dev/watch_queue notification consumer"
-       depends on HEADERS_INSTALL
+       depends on CC_CAN_LINK && HEADERS_INSTALL
        help
          Build example userspace program to use the new mount_notify(),
          sb_notify() syscalls and the KEYCTL_WATCH_KEY keyctl() function.
index d523450..6aba02a 100644 (file)
@@ -6,6 +6,7 @@
 #include <linux/timer.h>
 #include <linux/err.h>
 #include <linux/jiffies.h>
+#include <linux/workqueue.h>
 
 /*
  * Any file that uses trace points, must include the header.
@@ -20,6 +21,16 @@ struct trace_array *tr;
 static void mytimer_handler(struct timer_list *unused);
 static struct task_struct *simple_tsk;
 
+static void trace_work_fn(struct work_struct *work)
+{
+       /*
+        * Disable tracing for event "sample_event".
+        */
+       trace_array_set_clr_event(tr, "sample-subsystem", "sample_event",
+                       false);
+}
+static DECLARE_WORK(trace_work, trace_work_fn);
+
 /*
  * mytimer: Timer setup to disable tracing for event "sample_event". This
  * timer is only for the purposes of the sample module to demonstrate access of
@@ -29,11 +40,7 @@ static DEFINE_TIMER(mytimer, mytimer_handler);
 
 static void mytimer_handler(struct timer_list *unused)
 {
-       /*
-        * Disable tracing for event "sample_event".
-        */
-       trace_array_set_clr_event(tr, "sample-subsystem", "sample_event",
-                       false);
+       schedule_work(&trace_work);
 }
 
 static void simple_thread_func(int count)
@@ -76,6 +83,7 @@ static int simple_thread(void *arg)
                simple_thread_func(count++);
 
        del_timer(&mytimer);
+       cancel_work_sync(&trace_work);
 
        /*
         * trace_array_put() decrements the reference counter associated with
@@ -107,8 +115,12 @@ static int __init sample_trace_array_init(void)
        trace_printk_init_buffers();
 
        simple_tsk = kthread_run(simple_thread, NULL, "sample-instance");
-       if (IS_ERR(simple_tsk))
+       if (IS_ERR(simple_tsk)) {
+               trace_array_put(tr);
+               trace_array_destroy(tr);
                return -1;
+       }
+
        return 0;
 }
 
index 3223448..ad3e560 100644 (file)
@@ -267,7 +267,7 @@ struct amt_host_if_msg_header {
 struct amt_host_if_resp_header {
        struct amt_host_if_msg_header header;
        uint32_t status;
-       unsigned char data[0];
+       unsigned char data[];
 } __attribute__((packed));
 
 const uuid_le MEI_IAMTHIF = UUID_LE(0x12f80028, 0xb4b7, 0x4b2d,  \
index 8511fb6..792b22f 100644 (file)
@@ -1,7 +1,5 @@
-# List of programs to build
-hostprogs := watch_test
+# SPDX-License-Identifier: GPL-2.0-only
+userprogs := watch_test
+always-y := $(userprogs)
 
-# Tell kbuild to always build the programs
-always-y := $(hostprogs)
-
-HOSTCFLAGS_watch_test.o += -I$(objtree)/usr/include
+userccflags += -I usr/include
index 0c3dc98..9a15fbf 100644 (file)
@@ -86,20 +86,21 @@ cc-cross-prefix = $(firstword $(foreach c, $(1), \
                        $(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c))))
 
 # output directory for tests below
-TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/)
+TMPOUT = $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_$$$$
 
 # try-run
 # Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise)
 # Exit code chooses option. "$$TMP" serves as a temporary file and is
 # automatically cleaned up.
 try-run = $(shell set -e;              \
-       TMP="$(TMPOUT).$$$$.tmp";       \
-       TMPO="$(TMPOUT).$$$$.o";        \
+       TMP=$(TMPOUT)/tmp;              \
+       TMPO=$(TMPOUT)/tmp.o;           \
+       mkdir -p $(TMPOUT);             \
+       trap "rm -rf $(TMPOUT)" EXIT;   \
        if ($(1)) >/dev/null 2>&1;      \
        then echo "$(2)";               \
        else echo "$(3)";               \
-       fi;                             \
-       rm -f "$$TMP" "$$TMPO")
+       fi)
 
 # as-option
 # Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,)
index c264da2..a5fe72c 100644 (file)
@@ -25,18 +25,12 @@ failure = $(if-success,$(1),n,y)
 
 # $(cc-option,<flag>)
 # Return y if the compiler supports <flag>, n otherwise
-cc-option = $(success,$(CC) -Werror $(CLANG_FLAGS) $(1) -S -x c /dev/null -o /dev/null)
+cc-option = $(success,mkdir .tmp_$$$$; trap "rm -rf .tmp_$$$$" EXIT; $(CC) -Werror $(CLANG_FLAGS) $(1) -c -x c /dev/null -o .tmp_$$$$/tmp.o)
 
 # $(ld-option,<flag>)
 # Return y if the linker supports <flag>, n otherwise
 ld-option = $(success,$(LD) -v $(1))
 
-# $(as-option,<flag>)
-# /dev/zero is used as output instead of /dev/null as some assembler cribs when
-# both input and output are same. Also both of them have same write behaviour so
-# can be easily substituted.
-as-option = $(success, $(CC) $(CLANG_FLAGS) $(1) -c -x assembler /dev/null -o /dev/zero)
-
 # $(as-instr,<instr>)
 # Return y if the assembler supports <instr>, n otherwise
 as-instr = $(success,printf "%b\n" "$(1)" | $(CC) $(CLANG_FLAGS) -c -x assembler -o /dev/null -)
index 13e5fba..66a6d51 100755 (executable)
@@ -27,7 +27,10 @@ parse_symbol() {
        elif [[ "${modcache[$module]+isset}" == "isset" ]]; then
                local objfile=${modcache[$module]}
        else
-               [[ $modpath == "" ]] && return
+               if [[ $modpath == "" ]]; then
+                       echo "WARNING! Modules path isn't set, but is needed to parse this symbol" >&2
+                       return
+               fi
                local objfile=$(find "$modpath" -name "${module//_/[-_]}.ko*" -print -quit)
                [[ $objfile == "" ]] && return
                modcache[$module]=$objfile
index 955cf3a..224f510 100755 (executable)
@@ -11,7 +11,7 @@ then
        echo "asm/inline/volatile keywords."
        echo
        echo "INFILE: header file to operate on"
-       echo "OUTFILE: output file which the processed header is writen to"
+       echo "OUTFILE: output file which the processed header is written to"
 
        exit 1
 fi
index 74eab03..f9b1952 100644 (file)
 #undef has_rel_mcount
 #undef tot_relsize
 #undef get_mcountsym
+#undef find_symtab
+#undef get_shnum
+#undef set_shnum
+#undef get_shstrndx
+#undef get_symindex
 #undef get_sym_str_and_relp
 #undef do_func
 #undef Elf_Addr
 # define __has_rel_mcount      __has64_rel_mcount
 # define has_rel_mcount                has64_rel_mcount
 # define tot_relsize           tot64_relsize
+# define find_symtab           find_symtab64
+# define get_shnum             get_shnum64
+# define set_shnum             set_shnum64
+# define get_shstrndx          get_shstrndx64
+# define get_symindex          get_symindex64
 # define get_sym_str_and_relp  get_sym_str_and_relp_64
 # define do_func               do64
 # define get_mcountsym         get_mcountsym_64
 # define __has_rel_mcount      __has32_rel_mcount
 # define has_rel_mcount                has32_rel_mcount
 # define tot_relsize           tot32_relsize
+# define find_symtab           find_symtab32
+# define get_shnum             get_shnum32
+# define set_shnum             set_shnum32
+# define get_shstrndx          get_shstrndx32
+# define get_symindex          get_symindex32
 # define get_sym_str_and_relp  get_sym_str_and_relp_32
 # define do_func               do32
 # define get_mcountsym         get_mcountsym_32
@@ -173,6 +188,67 @@ static int MIPS_is_fake_mcount(Elf_Rel const *rp)
        return is_fake;
 }
 
+static unsigned int get_symindex(Elf_Sym const *sym, Elf32_Word const *symtab,
+                                Elf32_Word const *symtab_shndx)
+{
+       unsigned long offset;
+       int index;
+
+       if (sym->st_shndx != SHN_XINDEX)
+               return w2(sym->st_shndx);
+
+       offset = (unsigned long)sym - (unsigned long)symtab;
+       index = offset / sizeof(*sym);
+
+       return w(symtab_shndx[index]);
+}
+
+static unsigned int get_shnum(Elf_Ehdr const *ehdr, Elf_Shdr const *shdr0)
+{
+       if (shdr0 && !ehdr->e_shnum)
+               return w(shdr0->sh_size);
+
+       return w2(ehdr->e_shnum);
+}
+
+static void set_shnum(Elf_Ehdr *ehdr, Elf_Shdr *shdr0, unsigned int new_shnum)
+{
+       if (new_shnum >= SHN_LORESERVE) {
+               ehdr->e_shnum = 0;
+               shdr0->sh_size = w(new_shnum);
+       } else
+               ehdr->e_shnum = w2(new_shnum);
+}
+
+static int get_shstrndx(Elf_Ehdr const *ehdr, Elf_Shdr const *shdr0)
+{
+       if (ehdr->e_shstrndx != SHN_XINDEX)
+               return w2(ehdr->e_shstrndx);
+
+       return w(shdr0->sh_link);
+}
+
+static void find_symtab(Elf_Ehdr *const ehdr, Elf_Shdr const *shdr0,
+                       unsigned const nhdr, Elf32_Word **symtab,
+                       Elf32_Word **symtab_shndx)
+{
+       Elf_Shdr const *relhdr;
+       unsigned k;
+
+       *symtab = NULL;
+       *symtab_shndx = NULL;
+
+       for (relhdr = shdr0, k = nhdr; k; --k, ++relhdr) {
+               if (relhdr->sh_type == SHT_SYMTAB)
+                       *symtab = (void *)ehdr + relhdr->sh_offset;
+               else if (relhdr->sh_type == SHT_SYMTAB_SHNDX)
+                       *symtab_shndx = (void *)ehdr + relhdr->sh_offset;
+
+               if (*symtab && *symtab_shndx)
+                       break;
+       }
+}
+
 /* Append the new shstrtab, Elf_Shdr[], __mcount_loc and its relocations. */
 static int append_func(Elf_Ehdr *const ehdr,
                        Elf_Shdr *const shstr,
@@ -188,10 +264,12 @@ static int append_func(Elf_Ehdr *const ehdr,
        char const *mc_name = (sizeof(Elf_Rela) == rel_entsize)
                ? ".rela__mcount_loc"
                :  ".rel__mcount_loc";
-       unsigned const old_shnum = w2(ehdr->e_shnum);
        uint_t const old_shoff = _w(ehdr->e_shoff);
        uint_t const old_shstr_sh_size   = _w(shstr->sh_size);
        uint_t const old_shstr_sh_offset = _w(shstr->sh_offset);
+       Elf_Shdr *const shdr0 = (Elf_Shdr *)(old_shoff + (void *)ehdr);
+       unsigned int const old_shnum = get_shnum(ehdr, shdr0);
+       unsigned int const new_shnum = 2 + old_shnum; /* {.rel,}__mcount_loc */
        uint_t t = 1 + strlen(mc_name) + _w(shstr->sh_size);
        uint_t new_e_shoff;
 
@@ -201,6 +279,8 @@ static int append_func(Elf_Ehdr *const ehdr,
        t += (_align & -t);  /* word-byte align */
        new_e_shoff = t;
 
+       set_shnum(ehdr, shdr0, new_shnum);
+
        /* body for new shstrtab */
        if (ulseek(sb.st_size, SEEK_SET) < 0)
                return -1;
@@ -255,7 +335,6 @@ static int append_func(Elf_Ehdr *const ehdr,
                return -1;
 
        ehdr->e_shoff = _w(new_e_shoff);
-       ehdr->e_shnum = w2(2 + w2(ehdr->e_shnum));  /* {.rel,}__mcount_loc */
        if (ulseek(0, SEEK_SET) < 0)
                return -1;
        if (uwrite(ehdr, sizeof(*ehdr)) < 0)
@@ -434,6 +513,8 @@ static int find_secsym_ndx(unsigned const txtndx,
                                uint_t *const recvalp,
                                unsigned int *sym_index,
                                Elf_Shdr const *const symhdr,
+                               Elf32_Word const *symtab,
+                               Elf32_Word const *symtab_shndx,
                                Elf_Ehdr const *const ehdr)
 {
        Elf_Sym const *const sym0 = (Elf_Sym const *)(_w(symhdr->sh_offset)
@@ -445,7 +526,7 @@ static int find_secsym_ndx(unsigned const txtndx,
        for (symp = sym0, t = nsym; t; --t, ++symp) {
                unsigned int const st_bind = ELF_ST_BIND(symp->st_info);
 
-               if (txtndx == w2(symp->st_shndx)
+               if (txtndx == get_symindex(symp, symtab, symtab_shndx)
                        /* avoid STB_WEAK */
                    && (STB_LOCAL == st_bind || STB_GLOBAL == st_bind)) {
                        /* function symbols on ARM have quirks, avoid them */
@@ -516,21 +597,23 @@ static unsigned tot_relsize(Elf_Shdr const *const shdr0,
        return totrelsz;
 }
 
-
 /* Overall supervision for Elf32 ET_REL file. */
 static int do_func(Elf_Ehdr *const ehdr, char const *const fname,
                   unsigned const reltype)
 {
        Elf_Shdr *const shdr0 = (Elf_Shdr *)(_w(ehdr->e_shoff)
                + (void *)ehdr);
-       unsigned const nhdr = w2(ehdr->e_shnum);
-       Elf_Shdr *const shstr = &shdr0[w2(ehdr->e_shstrndx)];
+       unsigned const nhdr = get_shnum(ehdr, shdr0);
+       Elf_Shdr *const shstr = &shdr0[get_shstrndx(ehdr, shdr0)];
        char const *const shstrtab = (char const *)(_w(shstr->sh_offset)
                + (void *)ehdr);
 
        Elf_Shdr const *relhdr;
        unsigned k;
 
+       Elf32_Word *symtab;
+       Elf32_Word *symtab_shndx;
+
        /* Upper bound on space: assume all relevant relocs are for mcount. */
        unsigned       totrelsz;
 
@@ -561,6 +644,8 @@ static int do_func(Elf_Ehdr *const ehdr, char const *const fname,
                return -1;
        }
 
+       find_symtab(ehdr, shdr0, nhdr, &symtab, &symtab_shndx);
+
        for (relhdr = shdr0, k = nhdr; k; --k, ++relhdr) {
                char const *const txtname = has_rel_mcount(relhdr, shdr0,
                        shstrtab, fname);
@@ -577,6 +662,7 @@ static int do_func(Elf_Ehdr *const ehdr, char const *const fname,
                        result = find_secsym_ndx(w(relhdr->sh_info), txtname,
                                                &recval, &recsym,
                                                &shdr0[symsec_sh_link],
+                                               symtab, symtab_shndx,
                                                ehdr);
                        if (result)
                                goto out;
index 298b737..16c1894 100644 (file)
@@ -107,7 +107,7 @@ struct ima_digest_data {
                } ng;
                u8 data[2];
        } xattr;
-       u8 digest[0];
+       u8 digest[];
 } __packed;
 
 /*
@@ -119,7 +119,7 @@ struct signature_v2_hdr {
        uint8_t hash_algo;      /* Digest algorithm [enum hash_algo] */
        __be32 keyid;           /* IMA key identifier - not X509/PGP specific */
        __be16 sig_size;        /* signature size */
-       uint8_t sig[0];         /* signature payload */
+       uint8_t sig[];          /* signature payload */
 } __packed;
 
 /* integrity data associated with an inode */
index da94a1b..0cc7cdd 100644 (file)
@@ -27,6 +27,9 @@ static int cond_evaluate_expr(struct policydb *p, struct cond_expr *expr)
        int s[COND_EXPR_MAXDEPTH];
        int sp = -1;
 
+       if (expr->len == 0)
+               return -1;
+
        for (i = 0; i < expr->len; i++) {
                struct cond_expr_node *node = &expr->nodes[i];
 
@@ -392,27 +395,19 @@ static int cond_read_node(struct policydb *p, struct cond_node *node, void *fp)
 
                rc = next_entry(buf, fp, sizeof(u32) * 2);
                if (rc)
-                       goto err;
+                       return rc;
 
                expr->expr_type = le32_to_cpu(buf[0]);
                expr->bool = le32_to_cpu(buf[1]);
 
-               if (!expr_node_isvalid(p, expr)) {
-                       rc = -EINVAL;
-                       goto err;
-               }
+               if (!expr_node_isvalid(p, expr))
+                       return -EINVAL;
        }
 
        rc = cond_read_av_list(p, fp, &node->true_list, NULL);
        if (rc)
-               goto err;
-       rc = cond_read_av_list(p, fp, &node->false_list, &node->true_list);
-       if (rc)
-               goto err;
-       return 0;
-err:
-       cond_node_destroy(node);
-       return rc;
+               return rc;
+       return cond_read_av_list(p, fp, &node->false_list, &node->true_list);
 }
 
 int cond_read_list(struct policydb *p, void *fp)
index 313919b..ef0afd8 100644 (file)
@@ -2888,8 +2888,12 @@ err:
        if (*names) {
                for (i = 0; i < *len; i++)
                        kfree((*names)[i]);
+               kfree(*names);
        }
        kfree(*values);
+       *len = 0;
+       *names = NULL;
+       *values = NULL;
        goto out;
 }
 
index b04b728..5e159ab 100644 (file)
@@ -36,7 +36,7 @@ struct sof_probe_point_desc {
 struct sof_ipc_probe_dma_add_params {
        struct sof_ipc_cmd_hdr hdr;
        unsigned int num_elems;
-       struct sof_probe_dma dma[0];
+       struct sof_probe_dma dma[];
 } __packed;
 
 struct sof_ipc_probe_info_params {
@@ -51,19 +51,19 @@ struct sof_ipc_probe_info_params {
 struct sof_ipc_probe_dma_remove_params {
        struct sof_ipc_cmd_hdr hdr;
        unsigned int num_elems;
-       unsigned int stream_tag[0];
+       unsigned int stream_tag[];
 } __packed;
 
 struct sof_ipc_probe_point_add_params {
        struct sof_ipc_cmd_hdr hdr;
        unsigned int num_elems;
-       struct sof_probe_point_desc desc[0];
+       struct sof_probe_point_desc desc[];
 } __packed;
 
 struct sof_ipc_probe_point_remove_params {
        struct sof_ipc_cmd_hdr hdr;
        unsigned int num_elems;
-       unsigned int buffer_id[0];
+       unsigned int buffer_id[];
 } __packed;
 
 int sof_ipc_probe_init(struct snd_sof_dev *sdev,
index db18994..02dabc9 100644 (file)
 #define X86_FEATURE_AVX512_4FMAPS      (18*32+ 3) /* AVX-512 Multiply Accumulation Single precision */
 #define X86_FEATURE_FSRM               (18*32+ 4) /* Fast Short Rep Mov */
 #define X86_FEATURE_AVX512_VP2INTERSECT (18*32+ 8) /* AVX-512 Intersect for D/Q */
+#define X86_FEATURE_SRBDS_CTRL         (18*32+ 9) /* "" SRBDS mitigation MSR available */
 #define X86_FEATURE_MD_CLEAR           (18*32+10) /* VERW clears CPU buffers */
 #define X86_FEATURE_TSX_FORCE_ABORT    (18*32+13) /* "" TSX_FORCE_ABORT */
 #define X86_FEATURE_PCONFIG            (18*32+18) /* Intel PCONFIG */
 #define X86_BUG_SWAPGS                 X86_BUG(21) /* CPU is affected by speculation through SWAPGS */
 #define X86_BUG_TAA                    X86_BUG(22) /* CPU is affected by TSX Async Abort(TAA) */
 #define X86_BUG_ITLB_MULTIHIT          X86_BUG(23) /* CPU may incur MCE during certain page attribute changes */
+#define X86_BUG_SRBDS                  X86_BUG(24) /* CPU may leak RNG bits if not mitigated */
 
 #endif /* _ASM_X86_CPUFEATURES_H */
index ef452b8..e8370e6 100644 (file)
 #define TSX_CTRL_RTM_DISABLE           BIT(0)  /* Disable RTM feature */
 #define TSX_CTRL_CPUID_CLEAR           BIT(1)  /* Disable TSX enumeration */
 
+/* SRBDS support */
+#define MSR_IA32_MCU_OPT_CTRL          0x00000123
+#define RNGDS_MITG_DIS                 BIT(0)
+
 #define MSR_IA32_SYSENTER_CS           0x00000174
 #define MSR_IA32_SYSENTER_ESP          0x00000175
 #define MSR_IA32_SYSENTER_EIP          0x00000176
index 43e2490..17c5a03 100644 (file)
@@ -385,33 +385,48 @@ struct kvm_sync_regs {
 #define KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT (1 << 4)
 
 #define KVM_STATE_NESTED_FORMAT_VMX    0
-#define KVM_STATE_NESTED_FORMAT_SVM    1       /* unused */
+#define KVM_STATE_NESTED_FORMAT_SVM    1
 
 #define KVM_STATE_NESTED_GUEST_MODE    0x00000001
 #define KVM_STATE_NESTED_RUN_PENDING   0x00000002
 #define KVM_STATE_NESTED_EVMCS         0x00000004
 #define KVM_STATE_NESTED_MTF_PENDING   0x00000008
+#define KVM_STATE_NESTED_GIF_SET       0x00000100
 
 #define KVM_STATE_NESTED_SMM_GUEST_MODE        0x00000001
 #define KVM_STATE_NESTED_SMM_VMXON     0x00000002
 
 #define KVM_STATE_NESTED_VMX_VMCS_SIZE 0x1000
 
+#define KVM_STATE_NESTED_SVM_VMCB_SIZE 0x1000
+
+#define KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE        0x00000001
+
 struct kvm_vmx_nested_state_data {
        __u8 vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE];
        __u8 shadow_vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE];
-       __u64 preemption_timer_deadline;
 };
 
 struct kvm_vmx_nested_state_hdr {
+       __u32 flags;
        __u64 vmxon_pa;
        __u64 vmcs12_pa;
+       __u64 preemption_timer_deadline;
 
        struct {
                __u16 flags;
        } smm;
 };
 
+struct kvm_svm_nested_state_data {
+       /* Save area only used if KVM_STATE_NESTED_RUN_PENDING.  */
+       __u8 vmcb12[KVM_STATE_NESTED_SVM_VMCB_SIZE];
+};
+
+struct kvm_svm_nested_state_hdr {
+       __u64 vmcb_pa;
+};
+
 /* for KVM_CAP_NESTED_STATE */
 struct kvm_nested_state {
        __u16 flags;
@@ -420,6 +435,7 @@ struct kvm_nested_state {
 
        union {
                struct kvm_vmx_nested_state_hdr vmx;
+               struct kvm_svm_nested_state_hdr svm;
 
                /* Pad the header to 128 bytes.  */
                __u8 pad[120];
@@ -432,6 +448,7 @@ struct kvm_nested_state {
         */
        union {
                struct kvm_vmx_nested_state_data vmx[0];
+               struct kvm_svm_nested_state_data svm[0];
        } data;
 };
 
index 30d7d04..be5e2e7 100644 (file)
@@ -2,7 +2,14 @@
 #ifndef _UAPI_ASM_X86_UNISTD_H
 #define _UAPI_ASM_X86_UNISTD_H
 
-/* x32 syscall flag bit */
+/*
+ * x32 syscall flag bit.  Some user programs expect syscall NR macros
+ * and __X32_SYSCALL_BIT to have type int, even though syscall numbers
+ * are, for practical purposes, unsigned long.
+ *
+ * Fortunately, expressions like (nr & ~__X32_SYSCALL_BIT) do the right
+ * thing regardless.
+ */
 #define __X32_SYSCALL_BIT      0x40000000
 
 #ifndef __KERNEL__
index e95b72e..b8ff9e8 100644 (file)
        { EXIT_REASON_UMWAIT,                "UMWAIT" }, \
        { EXIT_REASON_TPAUSE,                "TPAUSE" }
 
+#define VMX_EXIT_REASON_FLAGS \
+       { VMX_EXIT_REASONS_FAILED_VMENTRY,      "FAILED_VMENTRY" }
+
 #define VMX_ABORT_SAVE_GUEST_MSR_FAIL        1
 #define VMX_ABORT_LOAD_HOST_PDPTE_FAIL       2
 #define VMX_ABORT_LOAD_HOST_MSR_FAIL         4
index 0efaf45..e0878f5 100644 (file)
 #include <linux/kernel.h>
 #include <linux/bootconfig.h>
 
-static int xbc_show_array(struct xbc_node *node)
+static int xbc_show_value(struct xbc_node *node)
 {
        const char *val;
+       char q;
        int i = 0;
 
        xbc_array_for_each_value(node, val) {
-               printf("\"%s\"%s", val, node->next ? ", " : ";\n");
+               if (strchr(val, '"'))
+                       q = '\'';
+               else
+                       q = '"';
+               printf("%c%s%c%s", q, val, q, node->next ? ", " : ";\n");
                i++;
        }
        return i;
@@ -48,10 +53,7 @@ static void xbc_show_compact_tree(void)
                        continue;
                } else if (cnode && xbc_node_is_value(cnode)) {
                        printf("%s = ", xbc_node_get_data(node));
-                       if (cnode->next)
-                               xbc_show_array(cnode);
-                       else
-                               printf("\"%s\";\n", xbc_node_get_data(cnode));
+                       xbc_show_value(cnode);
                } else {
                        printf("%s;\n", xbc_node_get_data(node));
                }
@@ -205,11 +207,13 @@ int show_xbc(const char *path)
        }
 
        ret = load_xbc_from_initrd(fd, &buf);
-       if (ret < 0)
+       if (ret < 0) {
                pr_err("Failed to load a boot config from initrd: %d\n", ret);
-       else
-               xbc_show_compact_tree();
-
+               goto out;
+       }
+       xbc_show_compact_tree();
+       ret = 0;
+out:
        close(fd);
        free(buf);
 
index eff16b7..3c2ab9e 100755 (executable)
@@ -55,6 +55,9 @@ echo "Apply command test"
 xpass $BOOTCONF -a $TEMPCONF $INITRD
 new_size=$(stat -c %s $INITRD)
 
+echo "Show command test"
+xpass $BOOTCONF $INITRD
+
 echo "File size check"
 xpass test $new_size -eq $(expr $bconf_size + $initrd_size + 9 + 12)
 
@@ -114,6 +117,13 @@ xpass grep -q "bar" $OUTFILE
 xpass grep -q "baz" $OUTFILE
 xpass grep -q "qux" $OUTFILE
 
+echo "Double/single quotes test"
+echo "key = '\"string\"';" > $TEMPCONF
+$BOOTCONF -a $TEMPCONF $INITRD
+$BOOTCONF $INITRD > $TEMPCONF
+cat $TEMPCONF
+xpass grep \'\"string\"\' $TEMPCONF
+
 echo "=== expected failure cases ==="
 for i in samples/bad-* ; do
   xfail $BOOTCONF -a $i $INITRD
index 3a3201e..f4a0130 100644 (file)
@@ -855,9 +855,11 @@ __SYSCALL(__NR_clone3, sys_clone3)
 __SYSCALL(__NR_openat2, sys_openat2)
 #define __NR_pidfd_getfd 438
 __SYSCALL(__NR_pidfd_getfd, sys_pidfd_getfd)
+#define __NR_faccessat2 439
+__SYSCALL(__NR_faccessat2, sys_faccessat2)
 
 #undef __NR_syscalls
-#define __NR_syscalls 439
+#define __NR_syscalls 440
 
 /*
  * 32 bit systems traditionally used different
index 2813e57..14b67cd 100644 (file)
@@ -1969,6 +1969,30 @@ enum drm_i915_perf_property_id {
         */
        DRM_I915_PERF_PROP_HOLD_PREEMPTION,
 
+       /**
+        * Specifying this pins all contexts to the specified SSEU power
+        * configuration for the duration of the recording.
+        *
+        * This parameter's value is a pointer to a struct
+        * drm_i915_gem_context_param_sseu.
+        *
+        * This property is available in perf revision 4.
+        */
+       DRM_I915_PERF_PROP_GLOBAL_SSEU,
+
+       /**
+        * This optional parameter specifies the timer interval in nanoseconds
+        * at which the i915 driver will check the OA buffer for available data.
+        * Minimum allowed value is 100 microseconds. A default value is used by
+        * the driver if this parameter is not specified. Note that larger timer
+        * values will reduce cpu consumption during OA perf captures. However,
+        * excessively large values would potentially result in OA buffer
+        * overwrites as captures reach end of the OA buffer.
+        *
+        * This property is available in perf revision 5.
+        */
+       DRM_I915_PERF_PROP_POLL_OA_PERIOD,
+
        DRM_I915_PERF_PROP_MAX /* non-ABI */
 };
 
index ca88b7b..2f86b2a 100644 (file)
 #define DN_ATTRIB      0x00000020      /* File changed attibutes */
 #define DN_MULTISHOT   0x80000000      /* Don't remove notifier */
 
+/*
+ * The constants AT_REMOVEDIR and AT_EACCESS have the same value.  AT_EACCESS is
+ * meaningful only to faccessat, while AT_REMOVEDIR is meaningful only to
+ * unlinkat.  The two functions do completely different things and therefore,
+ * the flags can be allowed to overlap.  For example, passing AT_REMOVEDIR to
+ * faccessat would be undefined behavior and thus treating it equivalent to
+ * AT_EACCESS is valid undefined behavior.
+ */
 #define AT_FDCWD               -100    /* Special value used to indicate
                                            openat should use the current
                                            working directory. */
 #define AT_SYMLINK_NOFOLLOW    0x100   /* Do not follow symbolic links.  */
+#define AT_EACCESS             0x200   /* Test access permitted for
+                                           effective IDs, not real IDs.  */
 #define AT_REMOVEDIR           0x200   /* Remove directory instead of
                                            unlinking file.  */
 #define AT_SYMLINK_FOLLOW      0x400   /* Follow symbolic links.  */
index 379a612..f44eb0a 100644 (file)
@@ -262,6 +262,7 @@ struct fsxattr {
 #define FS_EA_INODE_FL                 0x00200000 /* Inode used for large EA */
 #define FS_EOFBLOCKS_FL                        0x00400000 /* Reserved for ext4 */
 #define FS_NOCOW_FL                    0x00800000 /* Do not cow file */
+#define FS_DAX_FL                      0x02000000 /* Inode is DAX */
 #define FS_INLINE_DATA_FL              0x10000000 /* Reserved for ext4 */
 #define FS_PROJINHERIT_FL              0x20000000 /* Create with parents projid */
 #define FS_CASEFOLD_FL                 0x40000000 /* Folder is case insensitive */
index a10e3cd..7875709 100644 (file)
@@ -19,7 +19,8 @@
 #define FSCRYPT_POLICY_FLAGS_PAD_MASK          0x03
 #define FSCRYPT_POLICY_FLAG_DIRECT_KEY         0x04
 #define FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64     0x08
-#define FSCRYPT_POLICY_FLAGS_VALID             0x0F
+#define FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32     0x10
+#define FSCRYPT_POLICY_FLAGS_VALID             0x1F
 
 /* Encryption algorithms */
 #define FSCRYPT_MODE_AES_256_XTS               1
index fdd632c..4fdf303 100644 (file)
@@ -188,10 +188,13 @@ struct kvm_s390_cmma_log {
 struct kvm_hyperv_exit {
 #define KVM_EXIT_HYPERV_SYNIC          1
 #define KVM_EXIT_HYPERV_HCALL          2
+#define KVM_EXIT_HYPERV_SYNDBG         3
        __u32 type;
+       __u32 pad1;
        union {
                struct {
                        __u32 msr;
+                       __u32 pad2;
                        __u64 control;
                        __u64 evt_page;
                        __u64 msg_page;
@@ -201,6 +204,15 @@ struct kvm_hyperv_exit {
                        __u64 result;
                        __u64 params[2];
                } hcall;
+               struct {
+                       __u32 msr;
+                       __u32 pad2;
+                       __u64 control;
+                       __u64 status;
+                       __u64 send_page;
+                       __u64 recv_page;
+                       __u64 pending_page;
+               } syndbg;
        } u;
 };
 
@@ -1017,6 +1029,8 @@ struct kvm_ppc_resize_hpt {
 #define KVM_CAP_S390_VCPU_RESETS 179
 #define KVM_CAP_S390_PROTECTED 180
 #define KVM_CAP_PPC_SECURE_GUEST 181
+#define KVM_CAP_HALT_POLL 182
+#define KVM_CAP_ASYNC_PF_INT 183
 
 #ifdef KVM_CAP_IRQ_ROUTING
 
index d119278..82cc58f 100644 (file)
@@ -123,7 +123,10 @@ struct statx {
        __u32   stx_dev_major;  /* ID of device containing file [uncond] */
        __u32   stx_dev_minor;
        /* 0x90 */
-       __u64   __spare2[14];   /* Spare space for future expansion */
+       __u64   stx_mnt_id;
+       __u64   __spare2;
+       /* 0xa0 */
+       __u64   __spare3[12];   /* Spare space for future expansion */
        /* 0x100 */
 };
 
@@ -148,6 +151,7 @@ struct statx {
 #define STATX_BLOCKS           0x00000400U     /* Want/got stx_blocks */
 #define STATX_BASIC_STATS      0x000007ffU     /* The stuff in the normal stat struct */
 #define STATX_BTIME            0x00000800U     /* Want/got stx_btime */
+#define STATX_MNT_ID           0x00001000U     /* Got stx_mnt_id */
 
 #define STATX__RESERVED                0x80000000U     /* Reserved for future struct statx expansion */
 
@@ -177,7 +181,9 @@ struct statx {
 #define STATX_ATTR_NODUMP              0x00000040 /* [I] File is not to be dumped */
 #define STATX_ATTR_ENCRYPTED           0x00000800 /* [I] File requires key to decrypt in fs */
 #define STATX_ATTR_AUTOMOUNT           0x00001000 /* Dir: Automount trigger */
+#define STATX_ATTR_MOUNT_ROOT          0x00002000 /* Root of a mount */
 #define STATX_ATTR_VERITY              0x00100000 /* [I] Verity protected file */
+#define STATX_ATTR_DAX                 0x00002000 /* [I] File is DAX */
 
 
 #endif /* _UAPI_LINUX_STAT_H */
index 9fe72e4..0c23496 100644 (file)
@@ -15,6 +15,8 @@
 #include <linux/types.h>
 #include <linux/ioctl.h>
 
+#define VHOST_FILE_UNBIND -1
+
 /* ioctls */
 
 #define VHOST_VIRTIO 0xAF
 /* Get the max ring size. */
 #define VHOST_VDPA_GET_VRING_NUM       _IOR(VHOST_VIRTIO, 0x76, __u16)
 
+/* Set event fd for config interrupt*/
+#define VHOST_VDPA_SET_CONFIG_CALL     _IOW(VHOST_VIRTIO, 0x77, int)
 #endif
index e1bd2a9..5b36c58 100644 (file)
@@ -1425,13 +1425,28 @@ static unsigned int type_size(const char *name)
        return 0;
 }
 
+static int append(char **buf, const char *delim, const char *str)
+{
+       char *new_buf;
+
+       new_buf = realloc(*buf, strlen(*buf) + strlen(delim) + strlen(str) + 1);
+       if (!new_buf)
+               return -1;
+       strcat(new_buf, delim);
+       strcat(new_buf, str);
+       *buf = new_buf;
+       return 0;
+}
+
 static int event_read_fields(struct tep_event *event, struct tep_format_field **fields)
 {
        struct tep_format_field *field = NULL;
        enum tep_event_type type;
        char *token;
        char *last_token;
+       char *delim = " ";
        int count = 0;
+       int ret;
 
        do {
                unsigned int size_dynamic = 0;
@@ -1490,24 +1505,51 @@ static int event_read_fields(struct tep_event *event, struct tep_format_field **
                                        field->flags |= TEP_FIELD_IS_POINTER;
 
                                if (field->type) {
-                                       char *new_type;
-                                       new_type = realloc(field->type,
-                                                          strlen(field->type) +
-                                                          strlen(last_token) + 2);
-                                       if (!new_type) {
-                                               free(last_token);
-                                               goto fail;
-                                       }
-                                       field->type = new_type;
-                                       strcat(field->type, " ");
-                                       strcat(field->type, last_token);
+                                       ret = append(&field->type, delim, last_token);
                                        free(last_token);
+                                       if (ret < 0)
+                                               goto fail;
                                } else
                                        field->type = last_token;
                                last_token = token;
+                               delim = " ";
                                continue;
                        }
 
+                       /* Handle __attribute__((user)) */
+                       if ((type == TEP_EVENT_DELIM) &&
+                           strcmp("__attribute__", last_token) == 0 &&
+                           token[0] == '(') {
+                               int depth = 1;
+                               int ret;
+
+                               ret = append(&field->type, " ", last_token);
+                               ret |= append(&field->type, "", "(");
+                               if (ret < 0)
+                                       goto fail;
+
+                               delim = " ";
+                               while ((type = read_token(&token)) != TEP_EVENT_NONE) {
+                                       if (type == TEP_EVENT_DELIM) {
+                                               if (token[0] == '(')
+                                                       depth++;
+                                               else if (token[0] == ')')
+                                                       depth--;
+                                               if (!depth)
+                                                       break;
+                                               ret = append(&field->type, "", token);
+                                               delim = "";
+                                       } else {
+                                               ret = append(&field->type, delim, token);
+                                               delim = " ";
+                                       }
+                                       if (ret < 0)
+                                               goto fail;
+                                       free(last_token);
+                                       last_token = token;
+                               }
+                               continue;
+                       }
                        break;
                }
 
@@ -1523,8 +1565,6 @@ static int event_read_fields(struct tep_event *event, struct tep_format_field **
                if (strcmp(token, "[") == 0) {
                        enum tep_event_type last_type = type;
                        char *brackets = token;
-                       char *new_brackets;
-                       int len;
 
                        field->flags |= TEP_FIELD_IS_ARRAY;
 
@@ -1536,29 +1576,27 @@ static int event_read_fields(struct tep_event *event, struct tep_format_field **
                                field->arraylen = 0;
 
                        while (strcmp(token, "]") != 0) {
+                               const char *delim;
+
                                if (last_type == TEP_EVENT_ITEM &&
                                    type == TEP_EVENT_ITEM)
-                                       len = 2;
+                                       delim = " ";
                                else
-                                       len = 1;
+                                       delim = "";
+
                                last_type = type;
 
-                               new_brackets = realloc(brackets,
-                                                      strlen(brackets) +
-                                                      strlen(token) + len);
-                               if (!new_brackets) {
+                               ret = append(&brackets, delim, token);
+                               if (ret < 0) {
                                        free(brackets);
                                        goto fail;
                                }
-                               brackets = new_brackets;
-                               if (len == 2)
-                                       strcat(brackets, " ");
-                               strcat(brackets, token);
                                /* We only care about the last token */
                                field->arraylen = strtoul(token, NULL, 0);
                                free_token(token);
                                type = read_token(&token);
                                if (type == TEP_EVENT_NONE) {
+                                       free(brackets);
                                        do_warning_event(event, "failed to find token");
                                        goto fail;
                                }
@@ -1566,13 +1604,11 @@ static int event_read_fields(struct tep_event *event, struct tep_format_field **
 
                        free_token(token);
 
-                       new_brackets = realloc(brackets, strlen(brackets) + 2);
-                       if (!new_brackets) {
+                       ret = append(&brackets, "", "]");
+                       if (ret < 0) {
                                free(brackets);
                                goto fail;
                        }
-                       brackets = new_brackets;
-                       strcat(brackets, "]");
 
                        /* add brackets to type */
 
@@ -1582,34 +1618,23 @@ static int event_read_fields(struct tep_event *event, struct tep_format_field **
                         * the format: type [] item;
                         */
                        if (type == TEP_EVENT_ITEM) {
-                               char *new_type;
-                               new_type = realloc(field->type,
-                                                  strlen(field->type) +
-                                                  strlen(field->name) +
-                                                  strlen(brackets) + 2);
-                               if (!new_type) {
+                               ret = append(&field->type, " ", field->name);
+                               if (ret < 0) {
                                        free(brackets);
                                        goto fail;
                                }
-                               field->type = new_type;
-                               strcat(field->type, " ");
-                               strcat(field->type, field->name);
+                               ret = append(&field->type, "", brackets);
+
                                size_dynamic = type_size(field->name);
                                free_token(field->name);
-                               strcat(field->type, brackets);
                                field->name = field->alias = token;
                                type = read_token(&token);
                        } else {
-                               char *new_type;
-                               new_type = realloc(field->type,
-                                                  strlen(field->type) +
-                                                  strlen(brackets) + 1);
-                               if (!new_type) {
+                               ret = append(&field->type, "", brackets);
+                               if (ret < 0) {
                                        free(brackets);
                                        goto fail;
                                }
-                               field->type = new_type;
-                               strcat(field->type, brackets);
                        }
                        free(brackets);
                }
@@ -2046,19 +2071,16 @@ process_op(struct tep_event *event, struct tep_print_arg *arg, char **tok)
                /* could just be a type pointer */
                if ((strcmp(arg->op.op, "*") == 0) &&
                    type == TEP_EVENT_DELIM && (strcmp(token, ")") == 0)) {
-                       char *new_atom;
+                       int ret;
 
                        if (left->type != TEP_PRINT_ATOM) {
                                do_warning_event(event, "bad pointer type");
                                goto out_free;
                        }
-                       new_atom = realloc(left->atom.atom,
-                                           strlen(left->atom.atom) + 3);
-                       if (!new_atom)
+                       ret = append(&left->atom.atom, " ", "*");
+                       if (ret < 0)
                                goto out_warn_free;
 
-                       left->atom.atom = new_atom;
-                       strcat(left->atom.atom, " *");
                        free(arg->op.op);
                        *arg = *left;
                        free(left);
@@ -3062,6 +3084,37 @@ err:
        return TEP_EVENT_ERROR;
 }
 
+static enum tep_event_type
+process_builtin_expect(struct tep_event *event, struct tep_print_arg *arg, char **tok)
+{
+       enum tep_event_type type;
+       char *token = NULL;
+
+       /* Handle __builtin_expect( cond, #) */
+       type = process_arg(event, arg, &token);
+
+       if (type != TEP_EVENT_DELIM || token[0] != ',')
+               goto out_free;
+
+       free_token(token);
+
+       /* We don't care what the second parameter is of the __builtin_expect() */
+       if (read_expect_type(TEP_EVENT_ITEM, &token) < 0)
+               goto out_free;
+
+       if (read_expected(TEP_EVENT_DELIM, ")") < 0)
+               goto out_free;
+
+       free_token(token);
+       type = read_token_item(tok);
+       return type;
+
+out_free:
+       free_token(token);
+       *tok = NULL;
+       return TEP_EVENT_ERROR;
+}
+
 static enum tep_event_type
 process_function(struct tep_event *event, struct tep_print_arg *arg,
                 char *token, char **tok)
@@ -3106,6 +3159,10 @@ process_function(struct tep_event *event, struct tep_print_arg *arg,
                free_token(token);
                return process_dynamic_array_len(event, arg, tok);
        }
+       if (strcmp(token, "__builtin_expect") == 0) {
+               free_token(token);
+               return process_builtin_expect(event, arg, tok);
+       }
 
        func = find_func_handler(event->tep, token);
        if (func) {
@@ -3151,18 +3208,15 @@ process_arg_token(struct tep_event *event, struct tep_print_arg *arg,
                }
                /* atoms can be more than one token long */
                while (type == TEP_EVENT_ITEM) {
-                       char *new_atom;
-                       new_atom = realloc(atom,
-                                          strlen(atom) + strlen(token) + 2);
-                       if (!new_atom) {
+                       int ret;
+
+                       ret = append(&atom, " ", token);
+                       if (ret < 0) {
                                free(atom);
                                *tok = NULL;
                                free_token(token);
                                return TEP_EVENT_ERROR;
                        }
-                       atom = new_atom;
-                       strcat(atom, " ");
-                       strcat(atom, token);
                        free_token(token);
                        type = read_token_item(&token);
                }
index 877ca6b..5136338 100644 (file)
@@ -396,6 +396,18 @@ else
       NO_LIBBPF := 1
       NO_JVMTI := 1
     else
+      ifneq ($(filter s% -fsanitize=address%,$(EXTRA_CFLAGS),),)
+        ifneq ($(shell ldconfig -p | grep libasan >/dev/null 2>&1; echo $$?), 0)
+          msg := $(error No libasan found, please install libasan);
+        endif
+      endif
+
+      ifneq ($(filter s% -fsanitize=undefined%,$(EXTRA_CFLAGS),),)
+        ifneq ($(shell ldconfig -p | grep libubsan >/dev/null 2>&1; echo $$?), 0)
+          msg := $(error No libubsan found, please install libubsan);
+        endif
+      endif
+
       ifneq ($(filter s% -static%,$(LDFLAGS),),)
         msg := $(error No static glibc found, please install glibc-static);
       else
index 37b844f..78847b3 100644 (file)
 435    common  clone3                  sys_clone3
 437    common  openat2                 sys_openat2
 438    common  pidfd_getfd             sys_pidfd_getfd
+439    common  faccessat2              sys_faccessat2
 
 #
 # x32-specific system call numbers start at 512 to avoid cache impact
index b63b3fb..5f1d2a8 100644 (file)
@@ -478,8 +478,7 @@ static size_t hists__fprintf_nr_sample_events(struct hists *hists, struct report
        if (rep->time_str)
                ret += fprintf(fp, " (time slices: %s)", rep->time_str);
 
-       if (symbol_conf.show_ref_callgraph &&
-           strstr(evname, "call-graph=no")) {
+       if (symbol_conf.show_ref_callgraph && evname && strstr(evname, "call-graph=no")) {
                ret += fprintf(fp, ", show reference callgraph");
        }
 
index 5da2436..181d65e 100644 (file)
@@ -3837,6 +3837,9 @@ int cmd_script(int argc, const char **argv)
        if (err)
                goto out_delete;
 
+       if (zstd_init(&(session->zstd_data), 0) < 0)
+               pr_warning("Decompression initialization failed. Reported data may be incomplete.\n");
+
        err = __cmd_script(&script);
 
        flush_scripting();
index 811cc0e..110f0c6 100644 (file)
@@ -65,6 +65,7 @@ size_t syscall_arg__scnprintf_statx_mask(char *bf, size_t size, struct syscall_a
        P_FLAG(SIZE);
        P_FLAG(BLOCKS);
        P_FLAG(BTIME);
+       P_FLAG(MNT_ID);
 
 #undef P_FLAG
 
index b020a86..9887ae0 100644 (file)
@@ -142,7 +142,8 @@ static int
 gen_read_mem(struct bpf_insn_pos *pos,
             int src_base_addr_reg,
             int dst_addr_reg,
-            long offset)
+            long offset,
+            int probeid)
 {
        /* mov arg3, src_base_addr_reg */
        if (src_base_addr_reg != BPF_REG_ARG3)
@@ -159,7 +160,7 @@ gen_read_mem(struct bpf_insn_pos *pos,
                ins(BPF_MOV64_REG(BPF_REG_ARG1, dst_addr_reg), pos);
 
        /* Call probe_read  */
-       ins(BPF_EMIT_CALL(BPF_FUNC_probe_read), pos);
+       ins(BPF_EMIT_CALL(probeid), pos);
        /*
         * Error processing: if read fail, goto error code,
         * will be relocated. Target should be the start of
@@ -241,7 +242,7 @@ static int
 gen_prologue_slowpath(struct bpf_insn_pos *pos,
                      struct probe_trace_arg *args, int nargs)
 {
-       int err, i;
+       int err, i, probeid;
 
        for (i = 0; i < nargs; i++) {
                struct probe_trace_arg *arg = &args[i];
@@ -276,11 +277,16 @@ gen_prologue_slowpath(struct bpf_insn_pos *pos,
                                stack_offset), pos);
 
                ref = arg->ref;
+               probeid = BPF_FUNC_probe_read_kernel;
                while (ref) {
                        pr_debug("prologue: arg %d: offset %ld\n",
                                 i, ref->offset);
+
+                       if (ref->user_access)
+                               probeid = BPF_FUNC_probe_read_user;
+
                        err = gen_read_mem(pos, BPF_REG_3, BPF_REG_7,
-                                          ref->offset);
+                                          ref->offset, probeid);
                        if (err) {
                                pr_err("prologue: failed to generate probe_read function call\n");
                                goto errout;
index c4ca932..acef87d 100644 (file)
@@ -26,7 +26,7 @@ do { \
                YYABORT; \
 } while (0)
 
-static struct list_head* alloc_list()
+static struct list_head* alloc_list(void)
 {
        struct list_head *list;
 
@@ -349,7 +349,7 @@ PE_PMU_EVENT_PRE '-' PE_PMU_EVENT_SUF sep_dc
        struct list_head *list;
        char pmu_name[128];
 
-       snprintf(&pmu_name, 128, "%s-%s", $1, $3);
+       snprintf(pmu_name, sizeof(pmu_name), "%s-%s", $1, $3);
        free($1);
        free($3);
        if (parse_events_multi_pmu_add(_parse_state, pmu_name, &list) < 0)
index 85e0c7f..f971d9a 100644 (file)
@@ -86,7 +86,6 @@ int perf_pmu__check_alias(struct perf_pmu *pmu, struct list_head *head_terms,
                          struct perf_pmu_info *info);
 struct list_head *perf_pmu__alias(struct perf_pmu *pmu,
                                  struct list_head *head_terms);
-int perf_pmu_wrap(void);
 void perf_pmu_error(struct list_head *list, char *name, char const *msg);
 
 int perf_pmu__new_format(struct list_head *list, char *name,
index a08f373..df713a5 100644 (file)
@@ -1575,7 +1575,7 @@ static int parse_perf_probe_arg(char *str, struct perf_probe_arg *arg)
        }
 
        tmp = strchr(str, '@');
-       if (tmp && tmp != str && strcmp(tmp + 1, "user")) { /* user attr */
+       if (tmp && tmp != str && !strcmp(tmp + 1, "user")) { /* user attr */
                if (!user_access_is_supported()) {
                        semantic_error("ftrace does not support user access\n");
                        return -EINVAL;
@@ -1995,7 +1995,10 @@ static int __synthesize_probe_trace_arg_ref(struct probe_trace_arg_ref *ref,
                if (depth < 0)
                        return depth;
        }
-       err = strbuf_addf(buf, "%+ld(", ref->offset);
+       if (ref->user_access)
+               err = strbuf_addf(buf, "%s%ld(", "+u", ref->offset);
+       else
+               err = strbuf_addf(buf, "%+ld(", ref->offset);
        return (err < 0) ? err : depth;
 }
 
index 8c85294..064b63a 100644 (file)
@@ -1044,7 +1044,7 @@ static struct {
        DEFINE_TYPE(FTRACE_README_PROBE_TYPE_X, "*type: * x8/16/32/64,*"),
        DEFINE_TYPE(FTRACE_README_KRETPROBE_OFFSET, "*place (kretprobe): *"),
        DEFINE_TYPE(FTRACE_README_UPROBE_REF_CTR, "*ref_ctr_offset*"),
-       DEFINE_TYPE(FTRACE_README_USER_ACCESS, "*[u]<offset>*"),
+       DEFINE_TYPE(FTRACE_README_USER_ACCESS, "*u]<offset>*"),
        DEFINE_TYPE(FTRACE_README_MULTIPROBE_EVENT, "*Create/append/*"),
        DEFINE_TYPE(FTRACE_README_IMMEDIATE_VALUE, "*\\imm-value,*"),
 };
index 3c6976f..57d0706 100644 (file)
@@ -668,7 +668,7 @@ static void print_aggr(struct perf_stat_config *config,
        int s;
        bool first;
 
-       if (!(config->aggr_map || config->aggr_get_id))
+       if (!config->aggr_map || !config->aggr_get_id)
                return;
 
        aggr_update_shadow(config, evlist);
@@ -1169,7 +1169,7 @@ static void print_percore(struct perf_stat_config *config,
        int s;
        bool first = true;
 
-       if (!(config->aggr_map || config->aggr_get_id))
+       if (!config->aggr_map || !config->aggr_get_id)
                return;
 
        if (config->percore_show_thread)
index db3c07b..b5f7a99 100644 (file)
@@ -51,7 +51,7 @@ struct nd_cmd_translate_spa {
                __u32 nfit_device_handle;
                __u32 _reserved;
                __u64 dpa;
-       } __packed devices[0];
+       } __packed devices[];
 
 } __packed;
 
@@ -74,7 +74,7 @@ struct nd_cmd_ars_err_inj_stat {
        struct nd_error_stat_query_record {
                __u64 err_inj_stat_spa_range_base;
                __u64 err_inj_stat_spa_range_length;
-       } __packed record[0];
+       } __packed record[];
 } __packed;
 
 #define ND_INTEL_SMART                  1
@@ -180,7 +180,7 @@ struct nd_intel_fw_send_data {
        __u32 context;
        __u32 offset;
        __u32 length;
-       __u8 data[0];
+       __u8 data[];
 /* this field is not declared due ot variable data from input */
 /*     __u32 status; */
 } __packed;
index a4605b5..8ec1922 100755 (executable)
@@ -263,10 +263,16 @@ CASENO=0
 
 testcase() { # testfile
   CASENO=$((CASENO+1))
-  desc=`grep "^#[ \t]*description:" $1 | cut -f2 -d:`
+  desc=`grep "^#[ \t]*description:" $1 | cut -f2- -d:`
   prlog -n "[$CASENO]$INSTANCE$desc"
 }
 
+checkreq() { # testfile
+  requires=`grep "^#[ \t]*requires:" $1 | cut -f2- -d:`
+  # Use eval to pass quoted-patterns correctly.
+  eval check_requires "$requires"
+}
+
 test_on_instance() { # testfile
   grep -q "^#[ \t]*flags:.*instance" $1
 }
@@ -356,7 +362,8 @@ trap 'SIG_RESULT=$XFAIL' $SIG_XFAIL
 
 __run_test() { # testfile
   # setup PID and PPID, $$ is not updated.
-  (cd $TRACING_DIR; read PID _ < /proc/self/stat; set -e; set -x; initialize_ftrace; . $1)
+  (cd $TRACING_DIR; read PID _ < /proc/self/stat; set -e; set -x;
+   checkreq $1; initialize_ftrace; . $1)
   [ $? -ne 0 ] && kill -s $SIG_FAIL $SIG_PID
 }
 
index 3b1f45e..13b4dab 100644 (file)
@@ -1,9 +1,8 @@
 #!/bin/sh
 # description: Snapshot and tracing setting
+# requires: snapshot
 # flags: instance
 
-[ ! -f snapshot ] && exit_unsupported
-
 echo "Set tracing off"
 echo 0 > tracing_on
 
index 5058fbc..435d07b 100644 (file)
@@ -1,10 +1,9 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: trace_pipe and trace_marker
+# requires: trace_marker
 # flags: instance
 
-[ ! -f trace_marker ] && exit_unsupported
-
 echo "test input 1" > trace_marker
 
 : "trace interface never consume the ring buffer"
index 801ecb6..e52e470 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Test ftrace direct functions against kprobes
+# requires: kprobe_events
 
 rmmod ftrace-direct ||:
 if ! modprobe ftrace-direct ; then
@@ -8,11 +9,6 @@ if ! modprobe ftrace-direct ; then
   exit_unresolved;
 fi
 
-if [ ! -f kprobe_events ]; then
-       echo "No kprobe_events file -please build CONFIG_KPROBE_EVENTS"
-       exit_unresolved;
-fi
-
 echo "Let the module run a little"
 sleep 1
 
index c6d8387..68550f9 100644 (file)
@@ -1,11 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Generic dynamic event - add/remove kprobe events
-
-[ -f dynamic_events ] || exit_unsupported
-
-grep -q "place: \[<module>:\]<symbol>" README || exit_unsupported
-grep -q "place (kretprobe): \[<module>:\]<symbol>" README || exit_unsupported
+# requires: dynamic_events "place: [<module>:]<symbol>":README "place (kretprobe): [<module>:]<symbol>":README
 
 echo 0 > events/enable
 echo > dynamic_events
index 62b77b5..2b94611 100644 (file)
@@ -1,10 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Generic dynamic event - add/remove synthetic events
-
-[ -f dynamic_events ] || exit_unsupported
-
-grep -q "s:\[synthetic/\]" README || exit_unsupported
+# requires: dynamic_events "s:[synthetic/]":README
 
 echo 0 > events/enable
 echo > dynamic_events
index e084210..c969be9 100644 (file)
@@ -1,16 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Generic dynamic event - selective clear (compatibility)
-
-[ -f dynamic_events ] || exit_unsupported
-
-grep -q "place: \[<module>:\]<symbol>" README || exit_unsupported
-grep -q "place (kretprobe): \[<module>:\]<symbol>" README || exit_unsupported
-
-grep -q "s:\[synthetic/\]" README || exit_unsupported
-
-[ -f synthetic_events ] || exit_unsupported
-[ -f kprobe_events ] || exit_unsupported
+# requires: dynamic_events kprobe_events synthetic_events "place: [<module>:]<symbol>":README "place (kretprobe): [<module>:]<symbol>":README "s:[synthetic/]":README
 
 echo 0 > events/enable
 echo > dynamic_events
index 901922e..16d543e 100644 (file)
@@ -1,13 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Generic dynamic event - generic clear event
-
-[ -f dynamic_events ] || exit_unsupported
-
-grep -q "place: \[<module>:\]<symbol>" README || exit_unsupported
-grep -q "place (kretprobe): \[<module>:\]<symbol>" README || exit_unsupported
-
-grep -q "s:\[synthetic/\]" README || exit_unsupported
+# requires: dynamic_events "place: [<module>:]<symbol>":README "place (kretprobe): [<module>:]<symbol>":README "s:[synthetic/]":README
 
 echo 0 > events/enable
 echo > dynamic_events
index dfb0d51..cfe5bd2 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event tracing - enable/disable with event level files
+# requires: set_event events/sched
 # flags: instance
 
 do_reset() {
@@ -13,11 +14,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
 echo 'sched:sched_switch' > set_event
 
 yield
index f0f366f..e6eb78f 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event tracing - restricts events based on pid notrace filtering
+# requires: set_event events/sched set_event_pid set_event_notrace_pid
 # flags: instance
 
 do_reset() {
@@ -56,16 +57,6 @@ enable_events() {
     echo 1 > tracing_on
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f set_event_pid -o ! -f set_event_notrace_pid ]; then
-    echo "event pid notrace filtering is not supported"
-    exit_unsupported
-fi
-
 echo 0 > options/event-fork
 
 do_reset
index f9cb214..7f5f97d 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event tracing - restricts events based on pid
+# requires: set_event set_event_pid events/sched
 # flags: instance
 
 do_reset() {
@@ -16,16 +17,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f set_event_pid ]; then
-    echo "event pid filtering is not supported"
-    exit_unsupported
-fi
-
 echo 0 > options/event-fork
 
 echo 1 > events/sched/sched_switch/enable
index 83a8c57..b1ede62 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event tracing - enable/disable with subsystem level files
+# requires: set_event events/sched/enable
 # flags: instance
 
 do_reset() {
@@ -13,11 +14,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
 echo 'sched:*' > set_event
 
 yield
index 84d7bda..93c10ea 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event tracing - enable/disable with top level files
+# requires: available_events set_event events/enable
 
 do_reset() {
     echo > set_event
@@ -12,11 +13,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f available_events -o ! -f set_event -o ! -d events ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
 echo '*:*' > set_event
 
 yield
index f598538..cf3ea42 100644 (file)
@@ -1,17 +1,11 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - function graph filters with stack tracer
+# requires: stack_trace set_ftrace_filter function_graph:tracer
 
 # Make sure that function graph filtering works, and is not
 # affected by other tracers enabled (like stack tracer)
 
-if ! grep -q function_graph available_tracers; then
-    echo "no function graph tracer configured"
-    exit_unsupported
-fi
-
-check_filter_file set_ftrace_filter
-
 do_reset() {
     if [ -e /proc/sys/kernel/stack_tracer_enabled ]; then
            echo 0 > /proc/sys/kernel/stack_tracer_enabled
@@ -37,12 +31,6 @@ fi
 
 echo function_graph > current_tracer
 
-if [ ! -f stack_trace ]; then
-    echo "Stack tracer not configured"
-    do_reset
-    exit_unsupported;
-fi
-
 echo "Now testing with stack tracer"
 
 echo 1 > /proc/sys/kernel/stack_tracer_enabled
index d610f47..b3ccdae 100644 (file)
@@ -1,16 +1,10 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - function graph filters
+# requires: set_ftrace_filter function_graph:tracer
 
 # Make sure that function graph filtering works
 
-if ! grep -q function_graph available_tracers; then
-    echo "no function graph tracer configured"
-    exit_unsupported
-fi
-
-check_filter_file set_ftrace_filter
-
 fail() { # msg
     echo $1
     exit_fail
index 28936f4..4b994b6 100644 (file)
@@ -1,16 +1,10 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - function glob filters
+# requires: set_ftrace_filter function:tracer
 
 # Make sure that function glob matching filter works.
 
-if ! grep -q function available_tracers; then
-    echo "no function tracer configured"
-    exit_unsupported
-fi
-
-check_filter_file set_ftrace_filter
-
 disable_tracing
 clear_trace
 
index 71db68a..acb17ce 100644 (file)
@@ -1,22 +1,11 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - function pid notrace filters
+# requires: set_ftrace_notrace_pid set_ftrace_filter function:tracer
 # flags: instance
 
 # Make sure that function pid matching filter with notrace works.
 
-if ! grep -q function available_tracers; then
-    echo "no function tracer configured"
-    exit_unsupported
-fi
-
-if [ ! -f set_ftrace_notrace_pid ]; then
-    echo "set_ftrace_notrace_pid not found? Is function tracer not set?"
-    exit_unsupported
-fi
-
-check_filter_file set_ftrace_filter
-
 do_function_fork=1
 
 if [ ! -f options/function-fork ]; then
index d58403c..9f0a968 100644 (file)
@@ -1,23 +1,12 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - function pid filters
+# requires: set_ftrace_pid set_ftrace_filter function:tracer
 # flags: instance
 
 # Make sure that function pid matching filter works.
 # Also test it on an instance directory
 
-if ! grep -q function available_tracers; then
-    echo "no function tracer configured"
-    exit_unsupported
-fi
-
-if [ ! -f set_ftrace_pid ]; then
-    echo "set_ftrace_pid not found? Is function tracer not set?"
-    exit_unsupported
-fi
-
-check_filter_file set_ftrace_filter
-
 do_function_fork=1
 
 if [ ! -f options/function-fork ]; then
index b2aff78..0f41e44 100644 (file)
@@ -1,10 +1,9 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - stacktrace filter command
+# requires: set_ftrace_filter
 # flags: instance
 
-check_filter_file set_ftrace_filter
-
 echo _do_fork:stacktrace >> set_ftrace_filter
 
 grep -q "_do_fork:stacktrace:unlimited" set_ftrace_filter
index 71fa3f4..0c6cf77 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - function trace with cpumask
+# requires: function:tracer
 
 if ! which nproc ; then
   nproc() {
@@ -15,11 +16,6 @@ if [ $NP -eq 1 ] ;then
   exit_unresolved
 fi
 
-if ! grep -q "function" available_tracers ; then
-  echo "Function trace is not enabled"
-  exit_unsupported
-fi
-
 ORIG_CPUMASK=`cat tracing_cpumask`
 
 do_reset() {
index e9b1fd5..3145b0f 100644 (file)
@@ -3,15 +3,14 @@
 # description: ftrace - test for function event triggers
 # flags: instance
 #
+# The triggers are set within the set_ftrace_filter file
+# requires: set_ftrace_filter
+#
 # Ftrace allows to add triggers to functions, such as enabling or disabling
 # tracing, enabling or disabling trace events, or recording a stack trace
 # within the ring buffer.
 #
 # This test is designed to test event triggers
-#
-
-# The triggers are set within the set_ftrace_filter file
-check_filter_file set_ftrace_filter
 
 do_reset() {
     reset_ftrace_filter
index 1a4b4a4..37c8feb 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - function trace on module
-
-check_filter_file set_ftrace_filter
+# requires: set_ftrace_filter
 
 : "mod: allows to filter a non exist function"
 echo 'non_exist_func:mod:non_exist_module' > set_ftrace_filter
index 0d50105..4daeffb 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - function profiling
-
-[ ! -f function_profile_enabled ] && exit_unsupported
+# requires: function_profile_enabled
 
 : "Enable function profile"
 echo 1 > function_profile_enabled
index a3dadb6..1dbd766 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - function profiler with function tracing
+# requires: function_profile_enabled set_ftrace_filter function_graph:tracer
 
 # There was a bug after a rewrite of the ftrace infrastructure that
 # caused the function_profiler not to be able to run with the function
 # This test triggers those bugs on those kernels.
 #
 # We need function_graph and profiling to to run this test
-if ! grep -q function_graph available_tracers; then
-    echo "no function graph tracer configured"
-    exit_unsupported;
-fi
-
-check_filter_file set_ftrace_filter
-
-if [ ! -f function_profile_enabled ]; then
-    echo "function_profile_enabled not found, function profiling enabled?"
-    exit_unsupported
-fi
 
 fail() { # mesg
     echo $1
index 70bad44..e96e279 100644 (file)
@@ -2,6 +2,9 @@
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - test reading of set_ftrace_filter
 #
+# The triggers are set within the set_ftrace_filter file
+# requires: set_ftrace_filter
+#
 # The set_ftrace_filter file of ftrace is used to list functions as well as
 # triggers (probes) attached to functions. The code to read this file is not
 # straight forward and has had various bugs in the past. This test is designed
@@ -9,9 +12,6 @@
 # file in various ways (cat vs dd).
 #
 
-# The triggers are set within the set_ftrace_filter file
-check_filter_file set_ftrace_filter
-
 fail() { # mesg
     echo $1
     exit_fail
index 51e9e80..61264e4 100644 (file)
@@ -1,15 +1,9 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - Max stack tracer
+# requires: stack_trace stack_trace_filter
 # Test the basic function of max-stack usage tracing
 
-if [ ! -f stack_trace ]; then
-  echo "Max stack tracer is not supported - please make CONFIG_STACK_TRACER=y"
-  exit_unsupported
-fi
-
-check_filter_file stack_trace_filter
-
 echo > stack_trace_filter
 echo 0 > stack_max_size
 echo 1 > /proc/sys/kernel/stack_tracer_enabled
index 3ed173f..aee2228 100644 (file)
@@ -3,6 +3,9 @@
 # description: ftrace - test for function traceon/off triggers
 # flags: instance
 #
+# The triggers are set within the set_ftrace_filter file
+# requires: set_ftrace_filter
+#
 # Ftrace allows to add triggers to functions, such as enabling or disabling
 # tracing, enabling or disabling trace events, or recording a stack trace
 # within the ring buffer.
@@ -10,9 +13,6 @@
 # This test is designed to test enabling and disabling tracing triggers
 #
 
-# The triggers are set within the set_ftrace_filter file
-check_filter_file set_ftrace_filter
-
 fail() { # mesg
     echo $1
     exit_fail
index 2346582..6c19062 100644 (file)
@@ -1,21 +1,15 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: ftrace - test tracing error log support
+# event tracing is currently the only ftrace tracer that uses the
+# tracing error_log, hence this check
+# requires: set_event error_log
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-# event tracing is currently the only ftrace tracer that uses the
-# tracing error_log, hence this check
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-[ -f error_log ] || exit_unsupported
-
 ftrace_errlog_check 'event filter parse error' '((sig >= 10 && sig < 15) || dsig ^== 17) && comm != bash' 'events/signal/signal_generate/filter'
 
 exit 0
index 697c77e..c5dec55 100644 (file)
@@ -1,10 +1,3 @@
-check_filter_file() { # check filter file introduced by dynamic ftrace
-    if [ ! -f "$1" ]; then
-        echo "$1 not found? Is dynamic ftrace not set?"
-        exit_unsupported
-    fi
-}
-
 clear_trace() { # reset trace output
     echo > trace
 }
@@ -113,6 +106,27 @@ initialize_ftrace() { # Reset ftrace to initial-state
     enable_tracing
 }
 
+check_requires() { # Check required files and tracers
+    for i in "$@" ; do
+        r=${i%:README}
+        t=${i%:tracer}
+        if [ $t != $i ]; then
+            if ! grep -wq $t available_tracers ; then
+                echo "Required tracer $t is not configured."
+                exit_unsupported
+            fi
+        elif [ $r != $i ]; then
+            if ! grep -Fq "$r" README ; then
+                echo "Required feature pattern \"$r\" is not in README."
+                exit_unsupported
+            fi
+        elif [ ! -e $i ]; then
+            echo "Required feature interface $i doesn't exist."
+            exit_unsupported
+        fi
+    done
+}
+
 LOCALHOST=127.0.0.1
 
 yield() {
index 4fa0f79..0eb47fb 100644 (file)
@@ -1,11 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Test creation and deletion of trace instances while setting an event
-
-if [ ! -d instances ] ; then
-    echo "no instance directory with this kernel"
-    exit_unsupported;
-fi
+# requires: instances
 
 fail() { # mesg
     rmdir foo 2>/dev/null
index b846512..607521d 100644 (file)
@@ -1,11 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Test creation and deletion of trace instances
-
-if [ ! -d instances ] ; then
-    echo "no instance directory with this kernel"
-    exit_unsupported;
-fi
+# requires: instances
 
 fail() { # mesg
     rmdir x y z 2>/dev/null
index bb1eb5a..eba858c 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe dynamic event - adding and removing
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 echo p:myevent _do_fork > kprobe_events
 grep myevent kprobe_events
index 442c1a8..d10bf4f 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe dynamic event - busy event check
-
-[ -f kprobe_events ] || exit_unsupported
+# requires: kprobe_events
 
 echo p:myevent _do_fork > kprobe_events
 test -d events/kprobes/myevent
index bcdecf8..61f2ac4 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe dynamic event with arguments
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 echo 'p:testprobe _do_fork $stack $stack0 +0($stack)' > kprobe_events
 grep testprobe kprobe_events | grep -q 'arg1=\$stack arg2=\$stack0 arg3=+0(\$stack)'
index 15c1f70..05aaeed 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe event with comm arguments
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 grep -A1 "fetcharg:" README | grep -q "\$comm" || exit_unsupported # this is too old
 
index 46e7744..b5fa054 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe event string type argument
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 case `uname -m` in
 x86_64)
index 2b6dd33..b8c75a3 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe event symbol argument
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 SYMBOL="linux_proc_banner"
 
index 6f0f199..474ca1a 100644 (file)
@@ -1,10 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe event argument syntax
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
-
-grep "x8/16/32/64" README > /dev/null || exit_unsupported # version issue
+# requires: kprobe_events "x8/16/32/64":README
 
 PROBEFUNC="vfs_read"
 GOODREG=
index 81490ec..0610e0b 100644 (file)
@@ -1,10 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobes event arguments with types
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
-
-grep "x8/16/32/64" README > /dev/null || exit_unsupported # version issue
+# requires: kprobe_events "x8/16/32/64":README
 
 gen_event() { # Bitsize
   echo "p:testprobe _do_fork \$stack0:s$1 \$stack0:u$1 \$stack0:x$1 \$stack0:b4@4/$1"
index 0f60087..a30a9c0 100644 (file)
@@ -1,10 +1,8 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe event user-memory access
+# requires: kprobe_events '$arg<N>':README
 
-[ -f kprobe_events ] || exit_unsupported # this is configurable
-
-grep -q '\$arg<N>' README || exit_unresolved # depends on arch
 grep -A10 "fetcharg:" README | grep -q 'ustring' || exit_unsupported
 grep -A10 "fetcharg:" README | grep -q '\[u\]<offset>' || exit_unsupported
 
index 3ff2367..1f6981e 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe event auto/manual naming
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 :;: "Add an event on function without name" ;:
 
index df50728..81d8b58 100644 (file)
@@ -1,11 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe dynamic event with function tracer
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
-grep "function" available_tracers || exit_unsupported # this is configurable
-
-check_filter_file set_ftrace_filter
+# requires: kprobe_events stack_trace_filter function:tracer
 
 # prepare
 echo nop > current_tracer
index d861bd7..7e74ee1 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe dynamic event - probing module
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 rmmod trace-printk ||:
 if ! modprobe trace-printk ; then
index 44494ba..366b7e1 100644 (file)
@@ -1,10 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Create/delete multiprobe on kprobe event
-
-[ -f kprobe_events ] || exit_unsupported
-
-grep -q "Create/append/" README || exit_unsupported
+# requires: kprobe_events "Create/append/":README
 
 # Choose 2 symbols for target
 SYM1=_do_fork
index eb0f4ab..b4d8346 100644 (file)
@@ -1,10 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe event parser error log check
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
-
-[ -f error_log ] || exit_unsupported
+# requires: kprobe_events error_log
 
 check_error() { # command-with-error-pos-by-^
     ftrace_errlog_check 'trace_kprobe' "$1" 'kprobe_events'
index ac9ab4a..523fde6 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kretprobe dynamic event with arguments
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 # Add new kretprobe event
 echo 'r:testprobe2 _do_fork $retval' > kprobe_events
index 8e05b17..4f0b268 100644 (file)
@@ -1,9 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kretprobe dynamic event with maxactive
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
-grep -q 'r\[maxactive\]' README || exit_unsupported # this is older version
+# requires: kprobe_events 'r[maxactive]':README
 
 # Test if we successfully reject unknown messages
 if echo 'a:myprobeaccept inet_csk_accept' > kprobe_events; then false; else true; fi
index 6e3dbe5..312d237 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Register/unregister many kprobe events
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 # ftrace fentry skip size depends on the machine architecture.
 # Currently HAVE_KPROBES_ON_FTRACE defined on x86 and powerpc64le
index a902aa0..624269c 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe events - probe points
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 TARGET_FUNC=tracefs_create_dir
 
index 0384b52..ff6c44a 100644 (file)
@@ -1,8 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Kprobe dynamic event - adding and removing
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
+# requires: kprobe_events
 
 ! grep -q 'myevent' kprobe_profile
 echo p:myevent _do_fork > kprobe_events
index 14229d5..7b5b60c 100644 (file)
@@ -1,10 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Uprobe event parser error log check
-
-[ -f uprobe_events ] || exit_unsupported # this is configurable
-
-[ -f error_log ] || exit_unsupported
+# requires: uprobe_events error_log
 
 check_error() { # command-with-error-pos-by-^
     ftrace_errlog_check 'trace_uprobe' "$1" 'uprobe_events'
index 2b82c80..22bff12 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: test for the preemptirqsoff tracer
+# requires: preemptoff:tracer irqsoff:tracer
 
 MOD=preemptirq_delay_test
 
@@ -27,9 +28,6 @@ unres() { #msg
 modprobe $MOD || unres "$MOD module not available"
 rmmod $MOD
 
-grep -q "preemptoff" available_tracers || unsup "preemptoff tracer not enabled"
-grep -q "irqsoff" available_tracers || unsup "irqsoff tracer not enabled"
-
 reset_tracer
 
 # Simulate preemptoff section for half a second couple of times
index e1a5d14..2cd8947 100644 (file)
@@ -1,6 +1,10 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: %HERE DESCRIBE WHAT THIS DOES%
+# requires: %HERE LIST THE REQUIRED FILES, TRACERS OR README-STRINGS%
+# The required tracer needs :tracer suffix, e.g. function:tracer
+# The required README string needs :README suffix, e.g. "x8/16/32/64":README
+# and the README string is treated as a fixed-string instead of regexp pattern.
 # you have to add ".tc" extention for your testcase file
 # Note that all tests are run with "errexit" option.
 
index b0893d7..11be10e 100644 (file)
@@ -1,17 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Test wakeup tracer
+# requires: wakeup:tracer
 
 if ! which chrt ; then
   echo "chrt is not found. This test requires nice command."
   exit_unresolved
 fi
 
-if ! grep -wq "wakeup" available_tracers ; then
-  echo "wakeup tracer is not supported"
-  exit_unsupported
-fi
-
 echo wakeup > current_tracer
 echo 1 > tracing_on
 echo 0 > tracing_max_latency
index b9b6669..3a77198 100644 (file)
@@ -1,17 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: Test wakeup RT tracer
+# requires: wakeup_rt:tracer
 
 if ! which chrt ; then
   echo "chrt is not found. This test requires chrt command."
   exit_unresolved
 fi
 
-if ! grep -wq "wakeup_rt" available_tracers ; then
-  echo "wakeup_rt tracer is not supported"
-  exit_unsupported
-fi
-
 echo wakeup_rt > current_tracer
 echo 1 > tracing_on
 echo 0 > tracing_max_latency
index 3f2aee1..1590d6b 100644 (file)
@@ -1,24 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test inter-event histogram trigger expected fail actions
+# requires: set_event snapshot "snapshot()":README
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f snapshot ]; then
-    echo "snapshot is not supported"
-    exit_unsupported
-fi
-
-grep -q "snapshot()" README || exit_unsupported # version issue
-
 echo "Test expected snapshot action failure"
 
 echo 'hist:keys=comm:onmatch(sched.sched_wakeup).snapshot()' >> events/sched/sched_waking/trigger && exit_fail
index e232059..41119e0 100644 (file)
@@ -1,27 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test field variable support
+# requires: set_event synthetic_events events/sched/sched_process_fork/hist
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic event is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test field variable support"
 
 echo 'wakeup_latency u64 lat; pid_t pid; int prio; char comm[16]' > synthetic_events
index 07cfcb8..7449a4b 100644 (file)
@@ -1,27 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test inter-event combined histogram trigger
+# requires: set_event synthetic_events events/sched/sched_process_fork/hist
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic event is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test create synthetic event"
 
 echo 'waking_latency  u64 lat pid_t pid' > synthetic_events
index 73e413c..3ad6e3f 100644 (file)
@@ -1,27 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test multiple actions on hist trigger
+# requires: set_event synthetic_events events/sched/sched_process_fork/hist
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic event is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test multiple actions on hist trigger"
 echo 'wakeup_latency u64 lat; pid_t pid' >> synthetic_events
 TRIGGER1=events/sched/sched_wakeup/trigger
index c80007a..adaabb8 100644 (file)
@@ -1,19 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test inter-event histogram trigger onchange action
+# requires: set_event "onchange(var)":README
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-grep -q "onchange(var)" README || exit_unsupported # version issue
-
 echo "Test onchange action"
 
 echo 'hist:keys=comm:newprio=prio:onchange($newprio).save(comm,prio) if comm=="ping"' >> events/sched/sched_waking/trigger
index ebe0ad8..20e3947 100644 (file)
@@ -1,27 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test inter-event histogram trigger onmatch action
+# requires: set_event synthetic_events events/sched/sched_process_fork/hist
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic event is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test create synthetic event"
 
 echo 'wakeup_latency  u64 lat pid_t pid char comm[16]' > synthetic_events
index 2a2ef76..f4b03ab 100644 (file)
@@ -1,27 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test inter-event histogram trigger onmatch-onmax action
+# requires: set_event synthetic_events events/sched/sched_process_fork/hist
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic event is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test create synthetic event"
 
 echo 'wakeup_latency  u64 lat pid_t pid char comm[16]' > synthetic_events
index 98d73bf..71c9b59 100644 (file)
@@ -1,27 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test inter-event histogram trigger onmax action
+# requires: set_event synthetic_events events/sched/sched_process_fork/hist
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic event is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test create synthetic event"
 
 echo 'wakeup_latency  u64 lat pid_t pid char comm[16]' > synthetic_events
index 01b01b9..67fa328 100644 (file)
@@ -1,31 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test inter-event histogram trigger snapshot action
+# requires: set_event snapshot events/sched/sched_process_fork/hist "onchange(var)":README "snapshot()":README
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f snapshot ]; then
-    echo "snapshot is not supported"
-    exit_unsupported
-fi
-
-grep -q "onchange(var)" README || exit_unsupported # version issue
-
-grep -q "snapshot()" README || exit_unsupported # version issue
-
 echo "Test snapshot action"
 
 echo 1 > events/sched/enable
index df44b14..a152b55 100644 (file)
@@ -1,22 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test synthetic event create remove
+# requires: set_event synthetic_events
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic event is not supported"
-    exit_unsupported
-fi
-
 echo "Test create synthetic event"
 
 echo 'wakeup_latency  u64 lat pid_t pid char comm[16]' > synthetic_events
index 88e6c3f..59216f3 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test synthetic_events syntax parser
+# requires: set_event synthetic_events
 
 do_reset() {
     reset_trigger
@@ -14,16 +15,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic event is not supported"
-    exit_unsupported
-fi
-
 reset_tracer
 do_reset
 
index c3baa48..c126d23 100644 (file)
@@ -1,29 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test inter-event histogram trigger trace action
+# requires: set_event synthetic_events events/sched/sched_process_fork/hist "trace(<synthetic_event>":README
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic event is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
-grep -q "trace(<synthetic_event>" README || exit_unsupported # version issue
-
 echo "Test create synthetic event"
 
 echo 'wakeup_latency  u64 lat pid_t pid char comm[16]' > synthetic_events
index eddb51e..c226ace 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test event enable/disable trigger
+# requires: set_event events/sched/sched_process_fork/trigger
 # flags: instance
 
 fail() { #msg
@@ -8,16 +9,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
 FEATURE=`grep enable_event events/sched/sched_process_fork/trigger`
 if [ -z "$FEATURE" ]; then
     echo "event enable/disable trigger is not supported"
index 2dcc229..d9a198c 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test trigger filter
+# requires: set_event events/sched/sched_process_fork/trigger
 # flags: instance
 
 fail() { #msg
@@ -8,16 +9,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test trigger filter"
 echo 1 > tracing_on
 echo 'traceoff if child_pid == 0' > events/sched/sched_process_fork/trigger
index fab4431..4562e13 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test histogram modifiers
+# requires: set_event events/sched/sched_process_fork/trigger events/sched/sched_process_fork/hist
 # flags: instance
 
 fail() { #msg
@@ -8,21 +9,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test histogram with execname modifier"
 
 echo 'hist:keys=common_pid.execname' > events/sched/sched_process_fork/trigger
index d44087a..52cfe78 100644 (file)
@@ -1,23 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test histogram parser errors
-
-if [ ! -f set_event -o ! -d events/kmem ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/kmem/kmalloc/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/kmem/kmalloc/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
-[ -f error_log ] || exit_unsupported
+# requires: set_event events/kmem/kmalloc/trigger events/kmem/kmalloc/hist error_log
 
 check_error() { # command-with-error-pos-by-^
     ftrace_errlog_check 'hist:kmem:kmalloc' "$1" 'events/kmem/kmalloc/trigger'
index 177e8d4..2950bfb 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test histogram trigger
+# requires: set_event events/sched/sched_process_fork/trigger events/sched/sched_process_fork/hist
 # flags: instance
 
 fail() { #msg
@@ -8,22 +9,7 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
-echo "Test histogram basic tigger"
+echo "Test histogram basic trigger"
 
 echo 'hist:keys=parent_pid:vals=child_pid' > events/sched/sched_process_fork/trigger
 for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
index 68ff3f4..7129b52 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test multiple histogram triggers
+# requires: set_event events/sched/sched_process_fork/trigger events/sched/sched_process_fork/hist
 # flags: instance
 
 fail() { #msg
@@ -8,21 +9,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test histogram multiple triggers"
 
 echo 'hist:keys=parent_pid:vals=child_pid' > events/sched/sched_process_fork/trigger
index ac73850..33f5bde 100644 (file)
@@ -1,27 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test snapshot-trigger
+# requires: set_event events/sched/sched_process_fork/trigger snapshot
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f snapshot ]; then
-    echo "snapshot is not supported"
-    exit_unsupported
-fi
-
 FEATURE=`grep snapshot events/sched/sched_process_fork/trigger`
 if [ -z "$FEATURE" ]; then
     echo "snapshot trigger is not supported"
index 398c05c..320ea9b 100644 (file)
@@ -1,29 +1,20 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test stacktrace-trigger
+# requires: set_event events/sched/sched_process_fork/trigger
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
 FEATURE=`grep stacktrace events/sched/sched_process_fork/trigger`
 if [ -z "$FEATURE" ]; then
     echo "stacktrace trigger is not supported"
     exit_unsupported
 fi
 
-echo "Test stacktrace tigger"
+echo "Test stacktrace trigger"
 echo 0 > trace
 echo 0 > options/stacktrace
 echo 'stacktrace' > events/sched/sched_process_fork/trigger
index ab6bedb..68f3af9 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: trace_marker trigger - test histogram trigger
+# requires: set_event events/ftrace/print/trigger events/ftrace/print/hist
 # flags: instance
 
 fail() { #msg
@@ -8,27 +9,7 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -d events/ftrace/print ]; then
-    echo "event trace_marker is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/ftrace/print/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/ftrace/print/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
-echo "Test histogram trace_marker tigger"
+echo "Test histogram trace_marker trigger"
 
 echo 'hist:keys=common_pid' > events/ftrace/print/trigger
 for i in `seq 1 10` ; do echo "hello" > trace_marker; done
index df246e5..27da2db 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: trace_marker trigger - test snapshot trigger
+# requires: set_event snapshot events/ftrace/print/trigger
 # flags: instance
 
 fail() { #msg
@@ -8,26 +9,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f snapshot ]; then
-    echo "snapshot is not supported"
-    exit_unsupported
-fi
-
-if [ ! -d events/ftrace/print ]; then
-    echo "event trace_marker is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/ftrace/print/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
 test_trace() {
     file=$1
     x=$2
@@ -46,7 +27,7 @@ test_trace() {
     done
 }
 
-echo "Test snapshot trace_marker tigger"
+echo "Test snapshot trace_marker trigger"
 
 echo 'snapshot' > events/ftrace/print/trigger
 
index 18b4d1c..531139f 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: trace_marker trigger - test histogram with synthetic event against kernel event
+# requires: set_event synthetic_events events/sched/sched_waking events/ftrace/print/trigger events/ftrace/print/hist
 # flags:
 
 fail() { #msg
@@ -8,36 +9,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic events not supported"
-    exit_unsupported
-fi
-
-if [ ! -d events/ftrace/print ]; then
-    echo "event trace_marker is not supported"
-    exit_unsupported
-fi
-
-if [ ! -d events/sched/sched_waking ]; then
-    echo "event sched_waking is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/ftrace/print/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/ftrace/print/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test histogram kernel event to trace_marker latency histogram trigger"
 
 echo 'latency u64 lat' > synthetic_events
index dd262d6..cc99cbb 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: trace_marker trigger - test histogram with synthetic event
+# requires: set_event synthetic_events events/ftrace/print/trigger events/ftrace/print/hist
 # flags:
 
 fail() { #msg
@@ -8,31 +9,6 @@ fail() { #msg
     exit_fail
 }
 
-if [ ! -f set_event ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f synthetic_events ]; then
-    echo "synthetic events not supported"
-    exit_unsupported
-fi
-
-if [ ! -d events/ftrace/print ]; then
-    echo "event trace_marker is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/ftrace/print/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/ftrace/print/hist ]; then
-    echo "hist trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test histogram trace_marker to trace_marker latency histogram trigger"
 
 echo 'latency u64 lat' > synthetic_events
index d5d2dcb..9ca0467 100644 (file)
@@ -1,22 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 # description: event trigger - test traceon/off trigger
+# requires: set_event events/sched/sched_process_fork/trigger
 
 fail() { #msg
     echo $1
     exit_fail
 }
 
-if [ ! -f set_event -o ! -d events/sched ]; then
-    echo "event tracing is not supported"
-    exit_unsupported
-fi
-
-if [ ! -f events/sched/sched_process_fork/trigger ]; then
-    echo "event trigger is not supported"
-    exit_unsupported
-fi
-
 echo "Test traceoff trigger"
 echo 1 > tracing_on
 echo 'traceoff' > events/sched/sched_process_fork/trigger
index c0aa46c..252140a 100644 (file)
@@ -1615,6 +1615,7 @@ TEST_F(TRACE_poke, getpid_runs_normally)
 # define ARCH_REGS     s390_regs
 # define SYSCALL_NUM   gprs[2]
 # define SYSCALL_RET   gprs[2]
+# define SYSCALL_NUM_RET_SHARE_REG
 #elif defined(__mips__)
 # define ARCH_REGS     struct pt_regs
 # define SYSCALL_NUM   regs[2]