Merge tag 'imx-dt-4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo...
authorOlof Johansson <olof@lixom.net>
Wed, 12 Dec 2018 20:54:48 +0000 (12:54 -0800)
committerOlof Johansson <olof@lixom.net>
Wed, 12 Dec 2018 20:54:48 +0000 (12:54 -0800)
i.MX device tree update for 4.21:
 - New boards support: emtrion emCON-MX6, imx6ul-pico-pi, imx7d-sdb-reva
   and vf610 based Liebherr's BK4 device, ZII SCU4 AIB board.
 - Add flexcan support for i.MX6UL SoC, turn on stop mode wakeup feature
   for flexcan, and enable devices on a few i.MX6 NXP boards.
 - Enable AUO G101EVN010 lcd panel and Goodix touch support for
   imx6ul-ccimx6ulsbcpro board.
 - Enable sensors support for imx6qdl-sabresd board: egalax touch, light,
   magnetometer and accelerometer sensor.
 - Switch more boards to use SPDX identifier.
 - Fix memory node duplication in i.MX device tree sources.
 - Correct GIC PPI interrupts mask for i.MX6UL and i.MX7 SoCs.
 - Drop 'snps,dw-pcie' compatible from LS1021A PCIe device to avoid
   incorrect device matching.
 - Add the gpu nodes for the adreno 200 GPU on iMX51 and iMX53, which
   are now supported by the freedreno driver.
 - Add DCP device support for i.MX6ULL, which requires explicit clock
   enabling.
 - Add '#thermal-sensor-cells' for thermal device and '#cooling-cells'
   for cooling devices.
 - Add missing clock information for EPIT on i.MX25 SoC.
 - Add PWM and qdma devices for LS1021A SoC.
 - Update cooling maps of LS1021A SoC to include all devices affected by
   individual trip points.
 - Random device addition and cleanup on various boards.

* tag 'imx-dt-4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: (82 commits)
  ARM: dts: imx51-zii-rdu1: Do not specify "power-gpio" for hpa1
  ARM: dts: imx6ul: Remove extra space between node name and brace
  ARM: dts: imx6qdl-sabresd: Use GPIO_ACTIVE_HIGH for regulators
  ARM: dts: imx6ul: add flexcan support
  ARM: dts: imx5: add gpu nodes
  ARM: dts: imx6qdl-sabresd: add accelerometer sensor support
  ARM: dts: imx6qdl-sabresd: add magnetometer sensor support
  ARM: dts: imx6qdl-sabresd: add light sensor support
  ARM: dts: imx6qdl-sabresd: Move regulators outside of "simple-bus"
  ARM: dts: imx6qdl: Fix memory node duplication
  ARM: dts: imx6dl-mamoj: Add a memory node
  ARM: dts: imx53-voipac-dmm-668: Fix memory node duplication
  ARM: dts: vf610-zii-scu4-aib: Add HI8435 support
  ARM: dts: imx6qdl-sabresd: add egalax touch screen support on i2c2 bus
  ARM: dts: imx7s: Add flexcan stop mode wakeup support
  ARM: dts: imx6ul: Add flexcan stop mode wakeup support
  ARM: dts: imx6qdl: Add flexcan stop mode wakeup support
  ARM: dts: imx6sx: Add flexcan stop mode wakeup support
  ARM: dts: imx6ul-pico: Add the imx6ul-pico-pi variant
  ARM: dts: imx6ul-pico-hobbit: Extend peripherals support
  ...

Signed-off-by: Olof Johansson <olof@lixom.net>
696 files changed:
.mailmap
Documentation/ABI/testing/sysfs-class-led-trigger-pattern
Documentation/devicetree/bindings/arm/amlogic,scpi.txt
Documentation/devicetree/bindings/arm/amlogic.txt
Documentation/devicetree/bindings/arm/renesas,prr.txt [new file with mode: 0644]
Documentation/devicetree/bindings/arm/rockchip.txt
Documentation/devicetree/bindings/arm/shmobile.txt
Documentation/devicetree/bindings/arm/sunxi.txt
Documentation/devicetree/bindings/arm/tegra/nvidia,tegra186-pmc.txt
Documentation/devicetree/bindings/gpu/arm,mali-utgard.txt
Documentation/devicetree/bindings/i2c/i2c-omap.txt
Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt
Documentation/devicetree/bindings/media/cedrus.txt
Documentation/devicetree/bindings/memory-controllers/nvidia,tegra20-emc.txt [moved from Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-emc.txt with 95% similarity]
Documentation/devicetree/bindings/net/dwmac-sun8i.txt
Documentation/devicetree/bindings/soc/bcm/brcm,bcm2835-vchiq.txt
Documentation/devicetree/bindings/thermal/nvidia,tegra186-bpmp-thermal.txt
Documentation/devicetree/bindings/timer/amlogic,meson6-timer.txt
Documentation/devicetree/bindings/timer/mrvl,mmp-timer.txt
Documentation/devicetree/bindings/usb/nvidia,tegra124-xusb.txt
Documentation/devicetree/bindings/vendor-prefixes.txt
Documentation/i2c/busses/i2c-nvidia-gpu [new file with mode: 0644]
Documentation/x86/x86_64/mm.txt
Documentation/x86/zero-page.txt
MAINTAINERS
Makefile
arch/alpha/include/asm/termios.h
arch/alpha/include/uapi/asm/ioctls.h
arch/alpha/include/uapi/asm/termbits.h
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/am3517-evm.dts
arch/arm/boot/dts/am437x-gp-evm.dts
arch/arm/boot/dts/arm-realview-pbx.dtsi
arch/arm/boot/dts/aspeed-bmc-arm-centriq2400-rep.dts
arch/arm/boot/dts/aspeed-bmc-facebook-cmm.dts [new file with mode: 0644]
arch/arm/boot/dts/aspeed-bmc-intel-s2600wf.dts
arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts
arch/arm/boot/dts/aspeed-bmc-opp-palmetto.dts
arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts
arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts
arch/arm/boot/dts/aspeed-bmc-portwell-neptune.dts
arch/arm/boot/dts/axp81x.dtsi
arch/arm/boot/dts/bcm-nsp.dtsi
arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
arch/arm/boot/dts/bcm2835-rpi-zero.dts
arch/arm/boot/dts/bcm2835-rpi.dtsi
arch/arm/boot/dts/bcm2836-rpi-2-b.dts
arch/arm/boot/dts/bcm2836-rpi.dtsi [new file with mode: 0644]
arch/arm/boot/dts/bcm2837-rpi-3-b-plus.dts
arch/arm/boot/dts/bcm2837-rpi-3-b.dts
arch/arm/boot/dts/bcm2837-rpi-cm3.dtsi
arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts [new file with mode: 0644]
arch/arm/boot/dts/bcm47081.dtsi
arch/arm/boot/dts/bcm4709.dtsi
arch/arm/boot/dts/bcm47094.dtsi
arch/arm/boot/dts/bcm47189-tenda-ac9.dts
arch/arm/boot/dts/bcm5301x.dtsi
arch/arm/boot/dts/bcm53573.dtsi
arch/arm/boot/dts/bcm63138.dtsi
arch/arm/boot/dts/bcm958522er.dts
arch/arm/boot/dts/bcm958525er.dts
arch/arm/boot/dts/bcm958525xmc.dts
arch/arm/boot/dts/bcm958622hr.dts
arch/arm/boot/dts/bcm958623hr.dts
arch/arm/boot/dts/bcm958625hr.dts
arch/arm/boot/dts/bcm958625k.dts
arch/arm/boot/dts/bcm963138dvt.dts
arch/arm/boot/dts/bcm988312hr.dts
arch/arm/boot/dts/emev2.dtsi
arch/arm/boot/dts/exynos3250-artik5.dtsi
arch/arm/boot/dts/exynos3250-monk.dts
arch/arm/boot/dts/exynos3250-rinato.dts
arch/arm/boot/dts/exynos3250.dtsi
arch/arm/boot/dts/exynos4210-trats.dts
arch/arm/boot/dts/exynos4210.dtsi
arch/arm/boot/dts/exynos4412-itop-scp-core.dtsi
arch/arm/boot/dts/exynos4412-midas.dtsi
arch/arm/boot/dts/exynos4412-odroid-common.dtsi
arch/arm/boot/dts/exynos4412-odroidu3.dts
arch/arm/boot/dts/exynos4412.dtsi
arch/arm/boot/dts/exynos5250-arndale.dts
arch/arm/boot/dts/exynos5250.dtsi
arch/arm/boot/dts/exynos5420-arndale-octa.dts
arch/arm/boot/dts/exynos5420-pinctrl.dtsi
arch/arm/boot/dts/exynos5420-smdk5420.dts
arch/arm/boot/dts/exynos5422-odroid-core.dtsi
arch/arm/boot/dts/exynos5422-odroidhc1.dts
arch/arm/boot/dts/exynos5422-odroidxu3-common.dtsi
arch/arm/boot/dts/facebook-bmc-flash-layout.dtsi [new file with mode: 0644]
arch/arm/boot/dts/imx53-ppd.dts
arch/arm/boot/dts/imx6sll.dtsi
arch/arm/boot/dts/imx6sx-sdb.dtsi
arch/arm/boot/dts/iwg20d-q7-common.dtsi
arch/arm/boot/dts/meson.dtsi
arch/arm/boot/dts/meson6-atv1200.dts
arch/arm/boot/dts/meson6.dtsi
arch/arm/boot/dts/meson8-minix-neo-x8.dts
arch/arm/boot/dts/meson8.dtsi
arch/arm/boot/dts/meson8b-mxq.dts
arch/arm/boot/dts/meson8b.dtsi
arch/arm/boot/dts/meson8m2.dtsi
arch/arm/boot/dts/mmp2.dtsi
arch/arm/boot/dts/omap3-gta04.dtsi
arch/arm/boot/dts/pxa27x.dtsi
arch/arm/boot/dts/pxa2xx.dtsi
arch/arm/boot/dts/pxa300-raumfeld-common.dtsi [new file with mode: 0644]
arch/arm/boot/dts/pxa300-raumfeld-connector.dts [new file with mode: 0644]
arch/arm/boot/dts/pxa300-raumfeld-controller.dts [new file with mode: 0644]
arch/arm/boot/dts/pxa300-raumfeld-speaker-l.dts [new file with mode: 0644]
arch/arm/boot/dts/pxa300-raumfeld-speaker-m.dts [new file with mode: 0644]
arch/arm/boot/dts/pxa300-raumfeld-speaker-one.dts [new file with mode: 0644]
arch/arm/boot/dts/pxa300-raumfeld-speaker-s.dts [new file with mode: 0644]
arch/arm/boot/dts/pxa300-raumfeld-tuneable-clock.dtsi [new file with mode: 0644]
arch/arm/boot/dts/pxa3xx.dtsi
arch/arm/boot/dts/qcom-apq8064-arrow-sd-600eval-pins.dtsi [deleted file]
arch/arm/boot/dts/qcom-apq8064-arrow-sd-600eval.dts [deleted file]
arch/arm/boot/dts/qcom-apq8084.dtsi
arch/arm/boot/dts/qcom-msm8974-lge-nexus5-hammerhead.dts
arch/arm/boot/dts/qcom-msm8974.dtsi
arch/arm/boot/dts/r8a7740.dtsi
arch/arm/boot/dts/r8a7743-iwg20m.dtsi
arch/arm/boot/dts/r8a7743.dtsi
arch/arm/boot/dts/r8a7744-iwg20d-q7-dbcm-ca.dts [new file with mode: 0644]
arch/arm/boot/dts/r8a7744-iwg20d-q7.dts [new file with mode: 0644]
arch/arm/boot/dts/r8a7744-iwg20m.dtsi [new file with mode: 0644]
arch/arm/boot/dts/r8a7744.dtsi [new file with mode: 0644]
arch/arm/boot/dts/r8a77470-iwg23s-sbc.dts
arch/arm/boot/dts/r8a77470.dtsi
arch/arm/boot/dts/r8a7790-lager.dts
arch/arm/boot/dts/r8a7791-koelsch.dts
arch/arm/boot/dts/r8a7791-porter.dts
arch/arm/boot/dts/r9a06g032.dtsi
arch/arm/boot/dts/rk3066a.dtsi
arch/arm/boot/dts/rk3188.dtsi
arch/arm/boot/dts/rk322x.dtsi
arch/arm/boot/dts/rk3288-rock2-som.dtsi
arch/arm/boot/dts/rk3288-veyron-mickey.dts
arch/arm/boot/dts/rk3288.dtsi
arch/arm/boot/dts/rk3xxx.dtsi
arch/arm/boot/dts/s5pv210.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/socfpga_arria10_socdk_nand.dts
arch/arm/boot/dts/socfpga_arria10_socdk_qspi.dts
arch/arm/boot/dts/socfpga_arria10_socdk_sdmmc.dts
arch/arm/boot/dts/socfpga_arria5.dtsi
arch/arm/boot/dts/socfpga_arria5_socdk.dts
arch/arm/boot/dts/socfpga_cyclone5.dtsi
arch/arm/boot/dts/socfpga_cyclone5_de0_nano_soc.dts
arch/arm/boot/dts/socfpga_cyclone5_mcv.dtsi
arch/arm/boot/dts/socfpga_cyclone5_mcvevk.dts
arch/arm/boot/dts/socfpga_cyclone5_socdk.dts
arch/arm/boot/dts/socfpga_cyclone5_sockit.dts
arch/arm/boot/dts/socfpga_cyclone5_socrates.dts
arch/arm/boot/dts/socfpga_cyclone5_sodia.dts
arch/arm/boot/dts/socfpga_cyclone5_vining_fpga.dts
arch/arm/boot/dts/socfpga_vt.dts
arch/arm/boot/dts/sun4i-a10-inet9f-rev03.dts
arch/arm/boot/dts/sun4i-a10-pcduino.dts
arch/arm/boot/dts/sun4i-a10.dtsi
arch/arm/boot/dts/sun5i-a10s-auxtek-t003.dts
arch/arm/boot/dts/sun5i-a10s-auxtek-t004.dts
arch/arm/boot/dts/sun5i-a10s-mk802.dts
arch/arm/boot/dts/sun5i-a10s-olinuxino-micro.dts
arch/arm/boot/dts/sun5i-a10s-r7-tv-dongle.dts
arch/arm/boot/dts/sun5i-a10s-wobo-i5.dts
arch/arm/boot/dts/sun5i-a10s.dtsi
arch/arm/boot/dts/sun5i-a13-empire-electronix-d709.dts
arch/arm/boot/dts/sun5i-a13-hsg-h702.dts
arch/arm/boot/dts/sun5i-a13-licheepi-one.dts
arch/arm/boot/dts/sun5i-a13-olinuxino-micro.dts
arch/arm/boot/dts/sun5i-a13-olinuxino.dts
arch/arm/boot/dts/sun5i-a13-utoo-p66.dts
arch/arm/boot/dts/sun5i-a13.dtsi
arch/arm/boot/dts/sun5i-gr8-chip-pro.dts
arch/arm/boot/dts/sun5i-gr8-evb.dts
arch/arm/boot/dts/sun5i-gr8.dtsi
arch/arm/boot/dts/sun5i-r8-chip.dts
arch/arm/boot/dts/sun5i-reference-design-tablet.dtsi
arch/arm/boot/dts/sun5i.dtsi
arch/arm/boot/dts/sun6i-a31-app4-evb1.dts
arch/arm/boot/dts/sun6i-a31-colombus.dts
arch/arm/boot/dts/sun6i-a31-hummingbird.dts
arch/arm/boot/dts/sun6i-a31-i7.dts
arch/arm/boot/dts/sun6i-a31-m9.dts
arch/arm/boot/dts/sun6i-a31-mele-a1000g-quad.dts
arch/arm/boot/dts/sun6i-a31.dtsi
arch/arm/boot/dts/sun6i-a31s-colorfly-e708-q1.dts
arch/arm/boot/dts/sun6i-a31s-cs908.dts
arch/arm/boot/dts/sun6i-a31s-inet-q972.dts
arch/arm/boot/dts/sun6i-a31s-primo81.dts
arch/arm/boot/dts/sun6i-a31s-sina31s-core.dtsi
arch/arm/boot/dts/sun6i-a31s-sina31s.dts
arch/arm/boot/dts/sun6i-a31s-sinovoip-bpi-m2.dts
arch/arm/boot/dts/sun6i-a31s-yones-toptech-bs1078-v2.dts
arch/arm/boot/dts/sun6i-reference-design-tablet.dtsi
arch/arm/boot/dts/sun7i-a20-bananapi-m1-plus.dts
arch/arm/boot/dts/sun7i-a20-bananapi.dts
arch/arm/boot/dts/sun7i-a20-bananapro.dts
arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
arch/arm/boot/dts/sun7i-a20-cubietruck.dts
arch/arm/boot/dts/sun7i-a20-hummingbird.dts
arch/arm/boot/dts/sun7i-a20-i12-tvbox.dts
arch/arm/boot/dts/sun7i-a20-icnova-swac.dts
arch/arm/boot/dts/sun7i-a20-itead-ibox.dts
arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
arch/arm/boot/dts/sun7i-a20-m3.dts
arch/arm/boot/dts/sun7i-a20-mk808c.dts
arch/arm/boot/dts/sun7i-a20-olimex-som-evb-emmc.dts
arch/arm/boot/dts/sun7i-a20-olimex-som-evb.dts
arch/arm/boot/dts/sun7i-a20-olimex-som204-evb-emmc.dts
arch/arm/boot/dts/sun7i-a20-olimex-som204-evb.dts
arch/arm/boot/dts/sun7i-a20-olinuxino-lime.dts
arch/arm/boot/dts/sun7i-a20-olinuxino-lime2-emmc.dts
arch/arm/boot/dts/sun7i-a20-olinuxino-lime2.dts
arch/arm/boot/dts/sun7i-a20-olinuxino-micro-emmc.dts
arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts
arch/arm/boot/dts/sun7i-a20-orangepi-mini.dts
arch/arm/boot/dts/sun7i-a20-orangepi.dts
arch/arm/boot/dts/sun7i-a20-pcduino3-nano.dts
arch/arm/boot/dts/sun7i-a20-pcduino3.dts
arch/arm/boot/dts/sun7i-a20-wexler-tab7200.dts
arch/arm/boot/dts/sun7i-a20-wits-pro-a20-dkt.dts
arch/arm/boot/dts/sun7i-a20.dtsi
arch/arm/boot/dts/sun8i-a23-a33.dtsi
arch/arm/boot/dts/sun8i-a23-evb.dts
arch/arm/boot/dts/sun8i-a23-gt90h-v4.dts
arch/arm/boot/dts/sun8i-a23-polaroid-mid2407pxe03.dts
arch/arm/boot/dts/sun8i-a23-polaroid-mid2809pxe04.dts
arch/arm/boot/dts/sun8i-a23.dtsi
arch/arm/boot/dts/sun8i-a33-ga10h-v1.1.dts
arch/arm/boot/dts/sun8i-a33-inet-d978-rev2.dts
arch/arm/boot/dts/sun8i-a33-olinuxino.dts
arch/arm/boot/dts/sun8i-a33-sinlinx-sina33.dts
arch/arm/boot/dts/sun8i-a33.dtsi
arch/arm/boot/dts/sun8i-a83t-tbs-a711.dts
arch/arm/boot/dts/sun8i-a83t.dtsi
arch/arm/boot/dts/sun8i-h3.dtsi
arch/arm/boot/dts/sun8i-q8-common.dtsi
arch/arm/boot/dts/sun8i-r16-bananapi-m2m.dts
arch/arm/boot/dts/sun8i-r16-nintendo-nes-classic.dts
arch/arm/boot/dts/sun8i-r16-parrot.dts
arch/arm/boot/dts/sun8i-r40.dtsi
arch/arm/boot/dts/sun8i-reference-design-tablet.dtsi
arch/arm/boot/dts/sun8i-t3-cqa3t-bv3.dts [new file with mode: 0644]
arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts
arch/arm/boot/dts/sun8i-v3s.dtsi
arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts [new file with mode: 0644]
arch/arm/boot/dts/suniv-f1c100s.dtsi [new file with mode: 0644]
arch/arm/boot/dts/sunxi-h3-h5.dtsi
arch/arm/boot/dts/sunxi-itead-core-common.dtsi
arch/arm/boot/dts/sunxi-reference-design-tablet.dtsi
arch/arm/boot/dts/tegra124.dtsi
arch/arm/boot/dts/tegra20.dtsi
arch/arm/boot/dts/vexpress-v2m-rs1.dtsi
arch/arm/boot/dts/vexpress-v2m.dtsi
arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts
arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts
arch/arm/boot/dts/vexpress-v2p-ca5s.dts
arch/arm/boot/dts/vexpress-v2p-ca9.dts
arch/arm/boot/dts/vf610m4-colibri.dts
arch/arm/configs/multi_v7_defconfig
arch/arm/include/asm/pgtable-2level.h
arch/arm/mach-mmp/mmp2-dt.c
arch/arm/mm/proc-v7.S
arch/arm64/boot/dts/allwinner/Makefile
arch/arm64/boot/dts/allwinner/axp803.dtsi
arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts
arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
arch/arm64/boot/dts/allwinner/sun50i-a64-pinebook.dts
arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
arch/arm64/boot/dts/allwinner/sun50i-a64-sopine.dtsi
arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi
arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-lite2.dts [new file with mode: 0644]
arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-one-plus.dts
arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dts
arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi
arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
arch/arm64/boot/dts/amlogic/Makefile
arch/arm64/boot/dts/amlogic/meson-axg-s400.dts
arch/arm64/boot/dts/amlogic/meson-axg.dtsi
arch/arm64/boot/dts/amlogic/meson-gx-p23x-q20x.dtsi
arch/arm64/boot/dts/amlogic/meson-gx.dtsi
arch/arm64/boot/dts/amlogic/meson-gxbb-nanopi-k2.dts
arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dts [new file with mode: 0644]
arch/arm64/boot/dts/amlogic/meson-gxl-s905d-p230.dts
arch/arm64/boot/dts/amlogic/meson-gxl-s905d-phicomm-n1.dts [new file with mode: 0644]
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-p212.dts
arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dts
arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts
arch/arm64/boot/dts/arm/rtsm_ve-motherboard.dtsi
arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts
arch/arm64/boot/dts/exynos/exynos5433-tmu.dtsi
arch/arm64/boot/dts/exynos/exynos5433.dtsi
arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
arch/arm64/boot/dts/hisilicon/hi3660.dtsi
arch/arm64/boot/dts/hisilicon/hi3670-hikey970.dts
arch/arm64/boot/dts/hisilicon/hi3670.dtsi
arch/arm64/boot/dts/hisilicon/hi3798cv200-poplar.dts
arch/arm64/boot/dts/hisilicon/hi6220-hikey.dts
arch/arm64/boot/dts/hisilicon/hi6220.dtsi
arch/arm64/boot/dts/hisilicon/hikey970-pinctrl.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/marvell/Makefile
arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
arch/arm64/boot/dts/marvell/armada-37xx.dtsi
arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts
arch/arm64/boot/dts/marvell/armada-8040-mcbin-singleshot.dts [new file with mode: 0644]
arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts
arch/arm64/boot/dts/marvell/armada-8040-mcbin.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/mediatek/mt8173.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.dtsi
arch/arm64/boot/dts/nvidia/tegra210-p2597.dtsi
arch/arm64/boot/dts/nvidia/tegra210.dtsi
arch/arm64/boot/dts/qcom/Makefile
arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi
arch/arm64/boot/dts/qcom/msm8916-pins.dtsi
arch/arm64/boot/dts/qcom/msm8916.dtsi
arch/arm64/boot/dts/qcom/msm8996-pins.dtsi
arch/arm64/boot/dts/qcom/msm8996.dtsi
arch/arm64/boot/dts/qcom/msm8998-mtp.dtsi
arch/arm64/boot/dts/qcom/msm8998-pins.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/qcom/msm8998.dtsi
arch/arm64/boot/dts/qcom/pm8998.dtsi
arch/arm64/boot/dts/qcom/pms405.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/qcom/qcs404-evb-1000.dts [new file with mode: 0644]
arch/arm64/boot/dts/qcom/qcs404-evb-4000.dts [new file with mode: 0644]
arch/arm64/boot/dts/qcom/qcs404-evb.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/qcom/qcs404.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/qcom/sdm845-mtp.dts
arch/arm64/boot/dts/qcom/sdm845.dtsi
arch/arm64/boot/dts/renesas/r8a774a1.dtsi
arch/arm64/boot/dts/renesas/r8a7795-es1-salvator-x.dts
arch/arm64/boot/dts/renesas/r8a7795-es1.dtsi
arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts
arch/arm64/boot/dts/renesas/r8a7795-salvator-xs.dts
arch/arm64/boot/dts/renesas/r8a7795.dtsi
arch/arm64/boot/dts/renesas/r8a7796.dtsi
arch/arm64/boot/dts/renesas/r8a77965.dtsi
arch/arm64/boot/dts/renesas/r8a77970.dtsi
arch/arm64/boot/dts/renesas/r8a77980-condor.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-draak.dts
arch/arm64/boot/dts/renesas/r8a77995.dtsi
arch/arm64/boot/dts/renesas/salvator-common.dtsi
arch/arm64/boot/dts/renesas/ulcb.dtsi
arch/arm64/boot/dts/rockchip/Makefile
arch/arm64/boot/dts/rockchip/rk3328-rock64.dts
arch/arm64/boot/dts/rockchip/rk3328.dtsi
arch/arm64/boot/dts/rockchip/rk3368.dtsi
arch/arm64/boot/dts/rockchip/rk3399-gru-chromebook.dtsi
arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dts
arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet-inx.dts [new file with mode: 0644]
arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet-kd.dts [new file with mode: 0644]
arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi [new file with mode: 0644]
arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts
arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
arch/arm64/boot/dts/rockchip/rk3399.dtsi
arch/arm64/boot/dts/sprd/sc9836.dtsi
arch/arm64/boot/dts/sprd/sc9860.dtsi
arch/arm64/include/asm/processor.h
arch/arm64/mm/init.c
arch/arm64/mm/mmu.c
arch/m68k/include/asm/pgtable_mm.h
arch/microblaze/include/asm/pgtable.h
arch/mips/cavium-octeon/executive/cvmx-helper.c
arch/mips/mm/dma-noncoherent.c
arch/nds32/include/asm/pgtable.h
arch/parisc/include/asm/pgtable.h
arch/s390/Makefile
arch/s390/boot/compressed/Makefile
arch/s390/configs/debug_defconfig
arch/s390/configs/performance_defconfig
arch/s390/defconfig
arch/s390/include/asm/mmu_context.h
arch/s390/include/asm/pgalloc.h
arch/s390/include/asm/pgtable.h
arch/s390/include/asm/processor.h
arch/s390/include/asm/thread_info.h
arch/s390/include/asm/tlb.h
arch/s390/kernel/entry.S
arch/s390/kernel/perf_cpum_cf.c
arch/s390/kernel/perf_cpum_sf.c
arch/s390/kernel/vdso32/Makefile
arch/s390/kernel/vdso64/Makefile
arch/s390/kernel/vmlinux.lds.S
arch/s390/mm/pgalloc.c
arch/s390/numa/numa.c
arch/um/drivers/ubd_kern.c
arch/x86/Kconfig
arch/x86/Makefile
arch/x86/include/asm/mce.h
arch/x86/include/asm/mshyperv.h
arch/x86/include/asm/page_64_types.h
arch/x86/include/asm/pgtable_64_types.h
arch/x86/include/asm/qspinlock.h
arch/x86/include/asm/xen/page.h
arch/x86/kernel/cpu/mcheck/mce.c
arch/x86/kernel/cpu/mshyperv.c
arch/x86/kernel/cpu/vmware.c
arch/x86/kernel/ldt.c
arch/x86/kernel/vsmp_64.c
arch/x86/xen/mmu_pv.c
arch/x86/xen/p2m.c
arch/x86/xen/spinlock.c
block/bio.c
block/blk-lib.c
block/blk-merge.c
block/blk.h
drivers/acpi/nfit/mce.c
drivers/ata/sata_rcar.c
drivers/block/xen-blkfront.c
drivers/clk/clk-fixed-factor.c
drivers/clk/meson/axg.c
drivers/clk/meson/gxbb.c
drivers/clk/qcom/gcc-qcs404.c
drivers/clocksource/i8253.c
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
drivers/gpu/drm/amd/amdgpu/vega20_reg_init.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h
drivers/gpu/drm/amd/display/dc/core/dc_link.c
drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
drivers/gpu/drm/amd/include/amd_shared.h
drivers/gpu/drm/amd/include/atomfirmware.h
drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h
drivers/gpu/drm/amd/powerplay/inc/vega20_ppsmc.h
drivers/gpu/drm/etnaviv/etnaviv_sched.c
drivers/gpu/drm/exynos/exynos5433_drm_decon.c
drivers/gpu/drm/exynos/exynos_drm_crtc.c
drivers/gpu/drm/exynos/exynos_drm_drv.h
drivers/gpu/drm/exynos/exynos_drm_dsi.c
drivers/gpu/drm/exynos/exynos_drm_fbdev.c
drivers/gpu/drm/i915/gvt/gtt.c
drivers/gpu/drm/i915/gvt/gtt.h
drivers/gpu/drm/i915/gvt/handlers.c
drivers/gpu/drm/i915/gvt/mmio_context.c
drivers/gpu/drm/i915/i915_drv.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem_execbuffer.c
drivers/gpu/drm/i915/i915_gem_gtt.c
drivers/gpu/drm/i915/i915_gem_gtt.h
drivers/gpu/drm/i915/i915_reg.h
drivers/gpu/drm/i915/intel_audio.c
drivers/gpu/drm/i915/intel_cdclk.c
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_lpe_audio.c
drivers/gpu/drm/i915/intel_pm.c
drivers/gpu/drm/i915/selftests/huge_pages.c
drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
drivers/gpu/drm/sun4i/sun4i_lvds.c
drivers/gpu/drm/sun4i/sun4i_rgb.c
drivers/gpu/drm/sun4i/sun4i_tcon.c
drivers/gpu/vga/vga_switcheroo.c
drivers/hid/hid-alps.c
drivers/hid/hid-asus.c
drivers/hid/hid-ids.h
drivers/hid/hid-quirks.c
drivers/hid/i2c-hid/i2c-hid-core.c
drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c
drivers/hid/usbhid/hiddev.c
drivers/hwmon/hwmon.c
drivers/hwmon/ibmpowernv.c
drivers/i2c/busses/Kconfig
drivers/i2c/busses/Makefile
drivers/i2c/busses/i2c-nvidia-gpu.c [new file with mode: 0644]
drivers/i2c/busses/i2c-qcom-geni.c
drivers/leds/trigger/ledtrig-pattern.c
drivers/mtd/devices/Kconfig
drivers/mtd/maps/sa1100-flash.c
drivers/mtd/nand/raw/nand_base.c
drivers/mtd/spi-nor/cadence-quadspi.c
drivers/mtd/spi-nor/spi-nor.c
drivers/net/bonding/bond_main.c
drivers/net/dsa/microchip/ksz_common.c
drivers/net/dsa/mv88e6xxx/global1.c
drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
drivers/net/ethernet/aquantia/atlantic/aq_hw.h
drivers/net/ethernet/aquantia/atlantic/aq_main.c
drivers/net/ethernet/aquantia/atlantic/aq_nic.c
drivers/net/ethernet/aquantia/atlantic/aq_nic.h
drivers/net/ethernet/aquantia/atlantic/aq_ring.c
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils_fw2x.c
drivers/net/ethernet/atheros/alx/alx.h
drivers/net/ethernet/atheros/alx/main.c
drivers/net/ethernet/broadcom/bcmsysport.c
drivers/net/ethernet/broadcom/genet/bcmgenet.c
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
drivers/net/ethernet/ibm/ibmvnic.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/ice/ice.h
drivers/net/ethernet/intel/ice/ice_common.c
drivers/net/ethernet/intel/ice/ice_ethtool.c
drivers/net/ethernet/intel/ice/ice_hw_autogen.h
drivers/net/ethernet/intel/ice/ice_lib.c
drivers/net/ethernet/intel/ice/ice_main.c
drivers/net/ethernet/intel/ice/ice_switch.c
drivers/net/ethernet/intel/ice/ice_switch.h
drivers/net/ethernet/intel/ice/ice_txrx.c
drivers/net/ethernet/intel/ice/ice_txrx.h
drivers/net/ethernet/intel/ice/ice_type.h
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c
drivers/net/ethernet/intel/igb/igb_ptp.c
drivers/net/ethernet/marvell/mvneta.c
drivers/net/ethernet/mellanox/mlx4/en_tx.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/qlogic/qed/qed_fcoe.c
drivers/net/ethernet/qlogic/qed/qed_iscsi.c
drivers/net/ethernet/qlogic/qed/qed_l2.c
drivers/net/ethernet/qlogic/qed/qed_mcp.c
drivers/net/ethernet/qlogic/qed/qed_rdma.c
drivers/net/ethernet/qlogic/qed/qed_roce.c
drivers/net/ethernet/qlogic/qed/qed_sp.h
drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
drivers/net/ethernet/qlogic/qed/qed_spq.c
drivers/net/ethernet/qlogic/qed/qed_sriov.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c
drivers/net/ethernet/stmicro/stmmac/common.h
drivers/net/ethernet/stmicro/stmmac/descs_com.h
drivers/net/ethernet/stmicro/stmmac/enh_desc.c
drivers/net/ethernet/stmicro/stmmac/ring_mode.c
drivers/net/fddi/defza.c
drivers/net/fddi/defza.h
drivers/net/phy/broadcom.c
drivers/net/phy/realtek.c
drivers/net/usb/smsc95xx.c
drivers/nvme/host/core.c
drivers/nvme/host/multipath.c
drivers/nvme/target/core.c
drivers/nvme/target/rdma.c
drivers/of/device.c
drivers/of/of_numa.c
drivers/s390/net/qeth_core.h
drivers/s390/net/qeth_core_main.c
drivers/s390/net/qeth_core_mpc.h
drivers/s390/net/qeth_l2_main.c
drivers/s390/net/qeth_l3_main.c
drivers/tty/serial/sh-sci.c
drivers/tty/tty_baudrate.c
drivers/tty/vt/vt.c
drivers/usb/typec/ucsi/Kconfig
drivers/usb/typec/ucsi/Makefile
drivers/usb/typec/ucsi/ucsi_ccg.c [new file with mode: 0644]
drivers/xen/grant-table.c
drivers/xen/privcmd-buf.c
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/free-space-cache.c
fs/btrfs/inode.c
fs/btrfs/ioctl.c
fs/btrfs/super.c
fs/btrfs/tree-checker.c
fs/btrfs/tree-log.c
fs/ceph/file.c
fs/ceph/mds_client.c
fs/ceph/quota.c
fs/ext4/inode.c
fs/ext4/namei.c
fs/ext4/resize.c
fs/ext4/super.c
fs/ext4/xattr.c
fs/namespace.c
fs/xfs/libxfs/xfs_attr_leaf.c
fs/xfs/xfs_ioctl.c
fs/xfs/xfs_message.c
include/asm-generic/4level-fixup.h
include/asm-generic/5level-fixup.h
include/asm-generic/pgtable-nop4d-hack.h
include/asm-generic/pgtable-nop4d.h
include/asm-generic/pgtable-nopmd.h
include/asm-generic/pgtable-nopud.h
include/asm-generic/pgtable.h
include/dt-bindings/power/rk3066-power.h [new file with mode: 0644]
include/dt-bindings/power/rk3188-power.h [new file with mode: 0644]
include/dt-bindings/thermal/tegra194-bpmp-thermal.h [new file with mode: 0644]
include/linux/ceph/ceph_features.h
include/linux/compiler-gcc.h
include/linux/compiler.h
include/linux/compiler_attributes.h
include/linux/compiler_types.h
include/linux/hid.h
include/linux/i8253.h
include/linux/mm.h
include/linux/mtd/nand.h
include/linux/netdevice.h
include/linux/netfilter/ipset/ip_set.h
include/linux/netfilter/ipset/ip_set_comment.h
include/linux/nmi.h
include/net/addrconf.h
include/net/if_inet6.h
include/net/netfilter/nf_conntrack_l4proto.h
include/uapi/linux/kfd_ioctl.h
include/uapi/linux/netfilter/nf_tables.h
include/uapi/linux/netfilter_bridge.h
include/uapi/linux/sctp.h
include/xen/xen-ops.h
kernel/bpf/core.c
kernel/bpf/syscall.c
kernel/resource.c
kernel/sched/core.c
kernel/sched/fair.c
kernel/time/posix-cpu-timers.c
kernel/trace/trace_probe.c
kernel/user_namespace.c
lib/raid6/test/Makefile
net/core/dev.c
net/core/flow_dissector.c
net/core/netpoll.c
net/core/rtnetlink.c
net/core/skbuff.c
net/core/sock.c
net/ipv4/inet_fragment.c
net/ipv4/ip_fragment.c
net/ipv4/ip_sockglue.c
net/ipv6/af_inet6.c
net/ipv6/anycast.c
net/ipv6/ip6_fib.c
net/ipv6/netfilter/nf_conntrack_reasm.c
net/netfilter/ipset/ip_set_core.c
net/netfilter/ipset/ip_set_hash_netportnet.c
net/netfilter/ipset/ip_set_list_set.c
net/netfilter/nf_conntrack_core.c
net/netfilter/nf_conntrack_proto_dccp.c
net/netfilter/nf_conntrack_proto_generic.c
net/netfilter/nf_conntrack_proto_icmp.c
net/netfilter/nf_conntrack_proto_icmpv6.c
net/netfilter/nf_conntrack_proto_sctp.c
net/netfilter/nf_conntrack_proto_tcp.c
net/netfilter/nf_conntrack_proto_udp.c
net/netfilter/nfnetlink_cttimeout.c
net/netfilter/nft_compat.c
net/netfilter/nft_numgen.c
net/netfilter/nft_osf.c
net/netfilter/xt_IDLETIMER.c
net/openvswitch/conntrack.c
net/rxrpc/ar-internal.h
net/rxrpc/call_event.c
net/rxrpc/output.c
net/sched/act_mirred.c
net/sched/cls_flower.c
net/sched/sch_netem.c
net/sctp/outqueue.c
net/tipc/link.c
scripts/kconfig/merge_config.sh
scripts/package/builddeb
scripts/package/mkdebian
scripts/package/mkspec
scripts/setlocalversion
sound/pci/hda/thinkpad_helper.c
tools/arch/arm64/include/asm/barrier.h
tools/perf/Documentation/perf-list.txt
tools/perf/Makefile.perf
tools/perf/builtin-record.c
tools/perf/builtin-stat.c
tools/perf/builtin-top.c
tools/perf/builtin-trace.c
tools/perf/examples/bpf/augmented_raw_syscalls.c [new file with mode: 0644]
tools/perf/jvmti/jvmti_agent.c
tools/perf/scripts/python/exported-sql-viewer.py
tools/perf/tests/attr/test-record-group-sampling
tools/perf/util/evlist.c
tools/perf/util/evlist.h
tools/perf/util/evsel.c
tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
tools/perf/util/intel-pt-decoder/intel-pt-log.c
tools/perf/util/intel-pt-decoder/intel-pt-log.h
tools/perf/util/intel-pt.c
tools/perf/util/pmu.c

index a76be45..28fecaf 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -159,6 +159,7 @@ Peter Oruba <peter@oruba.de>
 Peter Oruba <peter.oruba@amd.com>
 Pratyush Anand <pratyush.anand@gmail.com> <pratyush.anand@st.com>
 Praveen BP <praveenbp@ti.com>
+Punit Agrawal <punitagrawal@gmail.com> <punit.agrawal@arm.com>
 Qais Yousef <qsyousef@gmail.com> <qais.yousef@imgtec.com>
 Oleksij Rempel <linux@rempel-privat.de> <bug-track@fisher-privat.net>
 Oleksij Rempel <linux@rempel-privat.de> <external.Oleksij.Rempel@de.bosch.com>
index fb3d1e0..1e5d172 100644 (file)
@@ -37,8 +37,8 @@ Description:
                  0-|   /             \/             \/
                    +---0----1----2----3----4----5----6------------> time (s)
 
-               2. To make the LED go instantly from one brigntess value to another,
-               we should use use zero-time lengths (the brightness must be same as
+               2. To make the LED go instantly from one brightness value to another,
+               we should use zero-time lengths (the brightness must be same as
                the previous tuple's). So the format should be:
                "brightness_1 duration_1 brightness_1 0 brightness_2 duration_2
                brightness_2 0 ...". For example:
index 7b9a861..5ab59da 100644 (file)
@@ -17,4 +17,11 @@ Required sub-node properties:
 - compatible : should be "amlogic,meson-gxbb-scp-shmem" for SRAM based shared
                memory on Amlogic GXBB SoC.
 
+Sensor bindings for the sensors based on SCPI Message Protocol
+--------------------------------------------------------------
+SCPI provides an API to access the various sensors on the SoC.
+
+Required properties:
+- compatible : should be "amlogic,meson-gxbb-scpi-sensors".
+
 [0] Documentation/devicetree/bindings/arm/arm,scpi.txt
index 4498292..8dbc259 100644 (file)
@@ -91,8 +91,10 @@ Board compatible values (alphabetically, grouped by SoC):
 
   - "amlogic,p230" (Meson gxl s905d)
   - "amlogic,p231" (Meson gxl s905d)
+  - "phicomm,n1" (Meson gxl s905d)
 
   - "amlogic,p241" (Meson gxl s805x)
+  - "libretech,aml-s805x-ac" (Meson gxl s805x)
 
   - "amlogic,p281" (Meson gxl s905w)
   - "oranth,tx3-mini" (Meson gxl s905w)
diff --git a/Documentation/devicetree/bindings/arm/renesas,prr.txt b/Documentation/devicetree/bindings/arm/renesas,prr.txt
new file mode 100644 (file)
index 0000000..08e482e
--- /dev/null
@@ -0,0 +1,20 @@
+Renesas Product Register
+
+Most Renesas ARM SoCs have a Product Register or Boundary Scan ID Register that
+allows to retrieve SoC product and revision information.  If present, a device
+node for this register should be added.
+
+Required properties:
+  - compatible: Must be one of:
+    "renesas,prr"
+    "renesas,bsid"
+  - reg: Base address and length of the register block.
+
+
+Examples
+--------
+
+       prr: chipid@ff000044 {
+               compatible = "renesas,prr";
+               reg = <0 0xff000044 0 4>;
+       };
index 0cc7123..7ce7382 100644 (file)
@@ -152,6 +152,40 @@ Rockchip platforms device tree bindings
       - compatible = "google,veyron-pinky-rev2", "google,veyron-pinky",
                     "google,veyron", "rockchip,rk3288";
 
+- Google Scarlet - with display from Kingdisplay
+    Required root node properties:
+      - compatible = "google,scarlet-rev15-sku7", "google,scarlet-rev15",
+                    "google,scarlet-rev14-sku7", "google,scarlet-rev14",
+                    "google,scarlet-rev13-sku7", "google,scarlet-rev13",
+                    "google,scarlet-rev12-sku7", "google,scarlet-rev12",
+                    "google,scarlet-rev11-sku7", "google,scarlet-rev11",
+                    "google,scarlet-rev10-sku7", "google,scarlet-rev10",
+                    "google,scarlet-rev9-sku7",  "google,scarlet-rev9",
+                    "google,scarlet-rev8-sku7",  "google,scarlet-rev8",
+                    "google,scarlet-rev7-sku7",  "google,scarlet-rev7",
+                    "google,scarlet-rev6-sku7",  "google,scarlet-rev6",
+                    "google,scarlet-rev5-sku7",  "google,scarlet-rev5",
+                    "google,scarlet-rev4-sku7",  "google,scarlet-rev4",
+                    "google,scarlet-rev3-sku7",  "google,scarlet-rev3",
+                    "google,scarlet", "google,gru", "rockchip,rk3399";
+
+- Google Scarlet - with display from Innolux
+    Required root node properties:
+      - compatible = "google,scarlet-rev15-sku6", "google,scarlet-rev15",
+                    "google,scarlet-rev14-sku6", "google,scarlet-rev14",
+                    "google,scarlet-rev13-sku6", "google,scarlet-rev13",
+                    "google,scarlet-rev12-sku6", "google,scarlet-rev12",
+                    "google,scarlet-rev11-sku6", "google,scarlet-rev11",
+                    "google,scarlet-rev10-sku6", "google,scarlet-rev10",
+                    "google,scarlet-rev9-sku6",  "google,scarlet-rev9",
+                    "google,scarlet-rev8-sku6",  "google,scarlet-rev8",
+                    "google,scarlet-rev7-sku6",  "google,scarlet-rev7",
+                    "google,scarlet-rev6-sku6",  "google,scarlet-rev6",
+                    "google,scarlet-rev5-sku6",  "google,scarlet-rev5",
+                    "google,scarlet-rev4-sku6",  "google,scarlet-rev4",
+                    "google,scarlet", "google,gru", "rockchip,rk3399";
+
+
 - Google Speedy (Asus C201 Chromebook):
     Required root node properties:
       - compatible = "google,veyron-speedy-rev9", "google,veyron-speedy-rev8",
index f5e0f82..7f91c2a 100644 (file)
@@ -27,7 +27,7 @@ SoCs:
     compatible = "renesas,r8a77470"
   - RZ/G2M (R8A774A1)
     compatible = "renesas,r8a774a1"
-  - RZ/G2E (RA8774C0)
+  - RZ/G2E (R8A774C0)
     compatible = "renesas,r8a774c0"
   - R-Car M1A (R8A77781)
     compatible = "renesas,r8a7778"
@@ -101,6 +101,10 @@ Boards:
     compatible = "iwave,g20d", "iwave,g20m", "renesas,r8a7743"
   - iWave Systems RZ/G1M Qseven System On Module (iW-RainboW-G20M-Qseven)
     compatible = "iwave,g20m", "renesas,r8a7743"
+  - iWave Systems RZ/G1N Qseven Development Platform (iW-RainboW-G20D-Qseven)
+    compatible = "iwave,g20d", "iwave,g20m", "renesas,r8a7744"
+  - iWave Systems RZ/G1N Qseven System On Module (iW-RainboW-G20M-Qseven)
+    compatible = "iwave,g20m", "renesas,r8a7744"
   - Kingfisher (SBEV-RCAR-KF-M03)
     compatible = "shimafuji,kingfisher"
   - Koelsch (RTP0RC7791SEB00010S)
@@ -149,21 +153,3 @@ Boards:
     compatible = "renesas,v3msk", "renesas,r8a77970"
   - Wheat (RTP0RC7792ASKB0000JE)
     compatible = "renesas,wheat", "renesas,r8a7792"
-
-
-Most Renesas ARM SoCs have a Product Register or Boundary Scan ID Register that
-allows to retrieve SoC product and revision information.  If present, a device
-node for this register should be added.
-
-Required properties:
-  - compatible: Must be "renesas,prr" or "renesas,bsid"
-  - reg: Base address and length of the register block.
-
-
-Examples
---------
-
-       prr: chipid@ff000044 {
-               compatible = "renesas,prr";
-               reg = <0 0xff000044 0 4>;
-       };
index e4beec3..94b9c12 100644 (file)
@@ -14,7 +14,8 @@ using one of the following compatible strings:
   allwinner,sun8i-a83t
   allwinner,sun8i-h2-plus
   allwinner,sun8i-h3
-  allwinner-sun8i-r40
+  allwinner,sun8i-r40
+  allwinner,sun8i-t3
   allwinner,sun8i-v3s
   allwinner,sun9i-a80
   allwinner,sun50i-a64
index c9fd6d1..2d89cdc 100644 (file)
@@ -15,6 +15,9 @@ Required properties:
 
 Optional properties:
 - nvidia,invert-interrupt: If present, inverts the PMU interrupt signal.
+- interrupt-controller: Identifies the node as an interrupt controller.
+- #interrupt-cells: Specifies the number of cells needed to encode an
+  interrupt source. The value must be 2.
 
 Example:
 
index 63cd911..3f128e4 100644 (file)
@@ -11,6 +11,7 @@ Required properties:
       + allwinner,sun4i-a10-mali
       + allwinner,sun7i-a20-mali
       + allwinner,sun8i-h3-mali
+      + allwinner,sun50i-a64-mali
       + allwinner,sun50i-h5-mali
       + amlogic,meson-gxbb-mali
       + amlogic,meson-gxl-mali
@@ -73,6 +74,10 @@ to specify one more vendor-specific compatible, among:
     Required properties:
       * resets: phandle to the reset line for the GPU
 
+  - allwinner,sun50i-a64-mali
+    Required properties:
+      * resets: phandle to the reset line for the GPU
+
   - allwinner,sun50i-h5-mali
     Required properties:
       * resets: phandle to the reset line for the GPU
index 7e49839..4b90ba9 100644 (file)
@@ -1,8 +1,12 @@
 I2C for OMAP platforms
 
 Required properties :
-- compatible : Must be "ti,omap2420-i2c", "ti,omap2430-i2c", "ti,omap3-i2c"
-  or "ti,omap4-i2c"
+- compatible : Must be
+       "ti,omap2420-i2c" for OMAP2420 SoCs
+       "ti,omap2430-i2c" for OMAP2430 SoCs
+       "ti,omap3-i2c" for OMAP3 SoCs
+       "ti,omap4-i2c" for OMAP4+ SoCs
+       "ti,am654-i2c", "ti,omap4-i2c" for AM654 SoCs
 - ti,hwmods : Must be "i2c<n>", n being the instance number (1-based)
 - #address-cells = <1>;
 - #size-cells = <0>;
index b3c86f4..c81993f 100644 (file)
@@ -140,6 +140,10 @@ VADC_GND_REF and VADC_VDD_VADC.
 
 Example:
 
+#include <dt-bindings/iio/qcom,spmi-vadc.h>
+#include <linux/irq.h>
+/* ... */
+
        /* VADC node */
        pmic_vadc: vadc@3100 {
                compatible = "qcom,spmi-vadc";
@@ -151,7 +155,7 @@ Example:
                io-channel-ranges;
 
                /* Channel node */
-               usb_id_nopull {
+               adc-chan@VADC_LR_MUX10_USB_ID {
                        reg = <VADC_LR_MUX10_USB_ID>;
                        qcom,decimation = <512>;
                        qcom,ratiometric;
index a089a0c..33833a4 100644 (file)
@@ -31,7 +31,7 @@ reserved-memory {
        ranges;
 
        /* Address must be kept in the lower 256 MiBs of DRAM for VE. */
-       cma_pool: cma@4a000000 {
+       cma_pool: default-pool {
                compatible = "shared-dma-pool";
                size = <0x6000000>;
                alloc-ranges = <0x4a000000 0x6000000>;
@@ -10,6 +10,8 @@ Properties:
   and chosen using the ramcode board selector. If omitted, only one
   set of tables can be present and said tables will be used
   irrespective of ram-code configuration.
+- interrupts : Should contain EMC General interrupt.
+- clocks : Should contain EMC clock.
 
 Child device nodes describe the memory settings for different configurations and clock rates.
 
@@ -20,6 +22,8 @@ Example:
                #size-cells = < 0 >;
                compatible = "nvidia,tegra20-emc";
                reg = <0x7000f4000 0x200>;
+               interrupts = <0 78 0x04>;
+               clocks = <&tegra_car TEGRA20_CLK_EMC>;
        }
 
 
index 5bb3a18..54c66d0 100644 (file)
@@ -10,6 +10,7 @@ Required properties:
                "allwinner,sun8i-r40-gmac"
                "allwinner,sun8i-v3s-emac"
                "allwinner,sun50i-a64-emac"
+               "allwinner,sun50i-h6-emac", "allwinner-sun50i-a64-emac"
 - reg: address and length of the register for the device.
 - interrupts: interrupt for the device
 - interrupt-names: must be "macirq"
index 8dd7b3a..f331316 100644 (file)
@@ -2,7 +2,8 @@ Broadcom VCHIQ firmware services
 
 Required properties:
 
-- compatible:  Should be "brcm,bcm2835-vchiq"
+- compatible:  Should be "brcm,bcm2835-vchiq" on BCM2835, otherwise
+               "brcm,bcm2836-vchiq".
 - reg:         Physical base address and length of the doorbell register pair
 - interrupts:  The interrupt number
                  See bindings/interrupt-controller/brcm,bcm2835-armctrl-ic.txt
index 276387d..e17c07b 100644 (file)
@@ -15,7 +15,8 @@ Required properties:
 - compatible:
     Array of strings.
     One of:
-    - "nvidia,tegra186-bpmp-thermal".
+    - "nvidia,tegra186-bpmp-thermal"
+    - "nvidia,tegra194-bpmp-thermal"
 - #thermal-sensor-cells: Cell for sensor index.
     Single-cell integer.
     Must be <1>.
index a092053..a9da22b 100644 (file)
@@ -4,12 +4,19 @@ Required properties:
 
 - compatible : should be "amlogic,meson6-timer"
 - reg : Specifies base physical address and size of the registers.
-- interrupts : The interrupt of the first timer
+- interrupts : The four interrupts, one for each timer event
+- clocks : phandles to the pclk (system clock) and XTAL clocks
+- clock-names : must contain "pclk" and "xtal"
 
 Example:
 
 timer@c1109940 {
        compatible = "amlogic,meson6-timer";
        reg = <0xc1109940 0x14>;
-       interrupts = <0 10 1>;
+       interrupts = <GIC_SPI 10 IRQ_TYPE_EDGE_RISING>,
+                    <GIC_SPI 11 IRQ_TYPE_EDGE_RISING>,
+                    <GIC_SPI 6 IRQ_TYPE_EDGE_RISING>,
+                    <GIC_SPI 29 IRQ_TYPE_EDGE_RISING>;
+       clocks = <&xtal>, <&clk81>;
+       clock-names = "xtal", "pclk";
 };
index 9a6e251..b8f02c6 100644 (file)
@@ -5,9 +5,13 @@ Required properties:
 - reg : Address and length of the register set of timer controller.
 - interrupts : Should be the interrupt number.
 
+Optional properties:
+- clocks : Should contain a single entry describing the clock input.
+
 Example:
        timer0: timer@d4014000 {
                compatible = "mrvl,mmp-timer";
                reg = <0xd4014000 0x100>;
                interrupts = <13>;
+               clocks = <&coreclk 2>;
        };
index 3eee9e5..4156c3e 100644 (file)
@@ -59,6 +59,14 @@ For Tegra210:
 - avdd-pll-uerefe-supply: PLLE reference PLL power supply. Must supply 1.05 V.
 - dvdd-pex-pll-supply: PCIe/USB3 PLL power supply. Must supply 1.05 V.
 - hvdd-pex-pll-e-supply: High-voltage PLLE power supply. Must supply 1.8 V.
+- power-domains: A list of PM domain specifiers that reference each power-domain
+  used by the xHCI controller. This list must comprise of a specifier for the
+  XUSBA and XUSBC power-domains. See ../power/power_domain.txt and
+  ../arm/tegra/nvidia,tegra20-pmc.txt for details.
+- power-domain-names: A list of names that represent each of the specifiers in
+  the 'power-domains' property. Must include 'xusb_ss' and 'xusb_host' which
+  represent the power-domains XUSBA and XUSBC, respectively. See
+  ../power/power_domain.txt for details.
 
 Optional properties:
 --------------------
index 4b1a2a8..8c413d8 100644 (file)
@@ -296,6 +296,7 @@ panasonic   Panasonic Corporation
 parade Parade Technologies Inc.
 pericom        Pericom Technology Inc.
 pervasive      Pervasive Displays, Inc.
+phicomm PHICOMM Co., Ltd.
 phytec PHYTEC Messtechnik GmbH
 picochip       Picochip Ltd
 pine64 Pine64
diff --git a/Documentation/i2c/busses/i2c-nvidia-gpu b/Documentation/i2c/busses/i2c-nvidia-gpu
new file mode 100644 (file)
index 0000000..31884d2
--- /dev/null
@@ -0,0 +1,18 @@
+Kernel driver i2c-nvidia-gpu
+
+Datasheet: not publicly available.
+
+Authors:
+       Ajay Gupta <ajayg@nvidia.com>
+
+Description
+-----------
+
+i2c-nvidia-gpu is a driver for I2C controller included in NVIDIA Turing
+and later GPUs and it is used to communicate with Type-C controller on GPUs.
+
+If your 'lspci -v' listing shows something like the following,
+
+01:00.3 Serial bus controller [0c80]: NVIDIA Corporation Device 1ad9 (rev a1)
+
+then this driver should support the I2C controller of your GPU.
index 73aaaa3..804f942 100644 (file)
@@ -34,23 +34,24 @@ __________________|____________|__________________|_________|___________________
 ____________________________________________________________|___________________________________________________________
                   |            |                  |         |
  ffff800000000000 | -128    TB | ffff87ffffffffff |    8 TB | ... guard hole, also reserved for hypervisor
- ffff880000000000 | -120    TB | ffffc7ffffffffff |   64 TB | direct mapping of all physical memory (page_offset_base)
- ffffc80000000000 |  -56    TB | ffffc8ffffffffff |    1 TB | ... unused hole
+ ffff880000000000 | -120    TB | ffff887fffffffff |  0.5 TB | LDT remap for PTI
+ ffff888000000000 | -119.5  TB | ffffc87fffffffff |   64 TB | direct mapping of all physical memory (page_offset_base)
+ ffffc88000000000 |  -55.5  TB | ffffc8ffffffffff |  0.5 TB | ... unused hole
  ffffc90000000000 |  -55    TB | ffffe8ffffffffff |   32 TB | vmalloc/ioremap space (vmalloc_base)
  ffffe90000000000 |  -23    TB | ffffe9ffffffffff |    1 TB | ... unused hole
  ffffea0000000000 |  -22    TB | ffffeaffffffffff |    1 TB | virtual memory map (vmemmap_base)
  ffffeb0000000000 |  -21    TB | ffffebffffffffff |    1 TB | ... unused hole
  ffffec0000000000 |  -20    TB | fffffbffffffffff |   16 TB | KASAN shadow memory
- fffffc0000000000 |   -4    TB | fffffdffffffffff |    2 TB | ... unused hole
-                  |            |                  |         | vaddr_end for KASLR
- fffffe0000000000 |   -2    TB | fffffe7fffffffff |  0.5 TB | cpu_entry_area mapping
- fffffe8000000000 |   -1.5  TB | fffffeffffffffff |  0.5 TB | LDT remap for PTI
- ffffff0000000000 |   -1    TB | ffffff7fffffffff |  0.5 TB | %esp fixup stacks
 __________________|____________|__________________|_________|____________________________________________________________
                                                             |
-                                                            | Identical layout to the 47-bit one from here on:
+                                                            | Identical layout to the 56-bit one from here on:
 ____________________________________________________________|____________________________________________________________
                   |            |                  |         |
+ fffffc0000000000 |   -4    TB | fffffdffffffffff |    2 TB | ... unused hole
+                  |            |                  |         | vaddr_end for KASLR
+ fffffe0000000000 |   -2    TB | fffffe7fffffffff |  0.5 TB | cpu_entry_area mapping
+ fffffe8000000000 |   -1.5  TB | fffffeffffffffff |  0.5 TB | ... unused hole
+ ffffff0000000000 |   -1    TB | ffffff7fffffffff |  0.5 TB | %esp fixup stacks
  ffffff8000000000 | -512    GB | ffffffeeffffffff |  444 GB | ... unused hole
  ffffffef00000000 |  -68    GB | fffffffeffffffff |   64 GB | EFI region mapping space
  ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | ... unused hole
@@ -83,7 +84,7 @@ Notes:
 __________________|____________|__________________|_________|___________________________________________________________
                   |            |                  |         |
  0000800000000000 |  +64    PB | ffff7fffffffffff | ~16K PB | ... huge, still almost 64 bits wide hole of non-canonical
-                  |            |                  |         |     virtual memory addresses up to the -128 TB
+                  |            |                  |         |     virtual memory addresses up to the -64 PB
                   |            |                  |         |     starting offset of kernel mappings.
 __________________|____________|__________________|_________|___________________________________________________________
                                                             |
@@ -91,23 +92,24 @@ __________________|____________|__________________|_________|___________________
 ____________________________________________________________|___________________________________________________________
                   |            |                  |         |
  ff00000000000000 |  -64    PB | ff0fffffffffffff |    4 PB | ... guard hole, also reserved for hypervisor
- ff10000000000000 |  -60    PB | ff8fffffffffffff |   32 PB | direct mapping of all physical memory (page_offset_base)
- ff90000000000000 |  -28    PB | ff9fffffffffffff |    4 PB | LDT remap for PTI
+ ff10000000000000 |  -60    PB | ff10ffffffffffff | 0.25 PB | LDT remap for PTI
+ ff11000000000000 |  -59.75 PB | ff90ffffffffffff |   32 PB | direct mapping of all physical memory (page_offset_base)
+ ff91000000000000 |  -27.75 PB | ff9fffffffffffff | 3.75 PB | ... unused hole
  ffa0000000000000 |  -24    PB | ffd1ffffffffffff | 12.5 PB | vmalloc/ioremap space (vmalloc_base)
  ffd2000000000000 |  -11.5  PB | ffd3ffffffffffff |  0.5 PB | ... unused hole
  ffd4000000000000 |  -11    PB | ffd5ffffffffffff |  0.5 PB | virtual memory map (vmemmap_base)
  ffd6000000000000 |  -10.5  PB | ffdeffffffffffff | 2.25 PB | ... unused hole
  ffdf000000000000 |   -8.25 PB | fffffdffffffffff |   ~8 PB | KASAN shadow memory
- fffffc0000000000 |   -4    TB | fffffdffffffffff |    2 TB | ... unused hole
-                  |            |                  |         | vaddr_end for KASLR
- fffffe0000000000 |   -2    TB | fffffe7fffffffff |  0.5 TB | cpu_entry_area mapping
- fffffe8000000000 |   -1.5  TB | fffffeffffffffff |  0.5 TB | ... unused hole
- ffffff0000000000 |   -1    TB | ffffff7fffffffff |  0.5 TB | %esp fixup stacks
 __________________|____________|__________________|_________|____________________________________________________________
                                                             |
                                                             | Identical layout to the 47-bit one from here on:
 ____________________________________________________________|____________________________________________________________
                   |            |                  |         |
+ fffffc0000000000 |   -4    TB | fffffdffffffffff |    2 TB | ... unused hole
+                  |            |                  |         | vaddr_end for KASLR
+ fffffe0000000000 |   -2    TB | fffffe7fffffffff |  0.5 TB | cpu_entry_area mapping
+ fffffe8000000000 |   -1.5  TB | fffffeffffffffff |  0.5 TB | ... unused hole
+ ffffff0000000000 |   -1    TB | ffffff7fffffffff |  0.5 TB | %esp fixup stacks
  ffffff8000000000 | -512    GB | ffffffeeffffffff |  444 GB | ... unused hole
  ffffffef00000000 |  -68    GB | fffffffeffffffff |   64 GB | EFI region mapping space
  ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | ... unused hole
index 97b7adb..68aed07 100644 (file)
@@ -25,7 +25,7 @@ Offset        Proto   Name            Meaning
 0C8/004        ALL     ext_cmd_line_ptr  cmd_line_ptr high 32bits
 140/080        ALL     edid_info       Video mode setup (struct edid_info)
 1C0/020        ALL     efi_info        EFI 32 information (struct efi_info)
-1E0/004        ALL     alk_mem_k       Alternative mem check, in KB
+1E0/004        ALL     alt_mem_k       Alternative mem check, in KB
 1E4/004        ALL     scratch         Scratch field for the kernel setup code
 1E8/001        ALL     e820_entries    Number of entries in e820_table (below)
 1E9/001        ALL     eddbuf_entries  Number of entries in eddbuf (below)
index f485597..e3dfefb 100644 (file)
@@ -6607,9 +6607,9 @@ F:        arch/*/include/asm/suspend*.h
 
 HID CORE LAYER
 M:     Jiri Kosina <jikos@kernel.org>
-R:     Benjamin Tissoires <benjamin.tissoires@redhat.com>
+M:     Benjamin Tissoires <benjamin.tissoires@redhat.com>
 L:     linux-input@vger.kernel.org
-T:     git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git
+T:     git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
 S:     Maintained
 F:     drivers/hid/
 F:     include/linux/hid*
@@ -6861,6 +6861,13 @@ L:       linux-acpi@vger.kernel.org
 S:     Maintained
 F:     drivers/i2c/i2c-core-acpi.c
 
+I2C CONTROLLER DRIVER FOR NVIDIA GPU
+M:     Ajay Gupta <ajayg@nvidia.com>
+L:     linux-i2c@vger.kernel.org
+S:     Maintained
+F:     Documentation/i2c/busses/i2c-nvidia-gpu
+F:     drivers/i2c/busses/i2c-nvidia-gpu.c
+
 I2C MUXES
 M:     Peter Rosin <peda@axentia.se>
 L:     linux-i2c@vger.kernel.org
@@ -8367,7 +8374,7 @@ F:        drivers/media/dvb-frontends/lgdt3305.*
 LIBATA PATA ARASAN COMPACT FLASH CONTROLLER
 M:     Viresh Kumar <vireshk@kernel.org>
 L:     linux-ide@vger.kernel.org
-T:     git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
+T:     git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
 S:     Maintained
 F:     include/linux/pata_arasan_cf_data.h
 F:     drivers/ata/pata_arasan_cf.c
@@ -8384,7 +8391,7 @@ F:        drivers/ata/ata_generic.c
 LIBATA PATA FARADAY FTIDE010 AND GEMINI SATA BRIDGE DRIVERS
 M:     Linus Walleij <linus.walleij@linaro.org>
 L:     linux-ide@vger.kernel.org
-T:     git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
+T:     git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
 S:     Maintained
 F:     drivers/ata/pata_ftide010.c
 F:     drivers/ata/sata_gemini.c
@@ -8403,7 +8410,7 @@ F:        include/linux/ahci_platform.h
 LIBATA SATA PROMISE TX2/TX4 CONTROLLER DRIVER
 M:     Mikael Pettersson <mikpelinux@gmail.com>
 L:     linux-ide@vger.kernel.org
-T:     git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
+T:     git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
 S:     Maintained
 F:     drivers/ata/sata_promise.*
 
@@ -10784,6 +10791,14 @@ L:     linux-omap@vger.kernel.org
 S:     Maintained
 F:     arch/arm/mach-omap2/omap_hwmod.*
 
+OMAP I2C DRIVER
+M:     Vignesh R <vigneshr@ti.com>
+L:     linux-omap@vger.kernel.org
+L:     linux-i2c@vger.kernel.org
+S:     Maintained
+F:     Documentation/devicetree/bindings/i2c/i2c-omap.txt
+F:     drivers/i2c/busses/i2c-omap.c
+
 OMAP IMAGING SUBSYSTEM (OMAP3 ISP and OMAP4 ISS)
 M:     Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 L:     linux-media@vger.kernel.org
@@ -12359,6 +12374,13 @@ L:     linux-arm-msm@vger.kernel.org
 S:     Maintained
 F:     drivers/iommu/qcom_iommu.c
 
+QUALCOMM TSENS THERMAL DRIVER
+M:     Amit Kucheria <amit.kucheria@linaro.org>
+L:     linux-pm@vger.kernel.org
+L:     linux-arm-msm@vger.kernel.org
+S:     Maintained
+F:     drivers/thermal/qcom/
+
 QUALCOMM VENUS VIDEO ACCELERATOR DRIVER
 M:     Stanimir Varbanov <stanimir.varbanov@linaro.org>
 L:     linux-media@vger.kernel.org
@@ -15436,9 +15458,9 @@ F:      include/linux/usb/gadget*
 
 USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...)
 M:     Jiri Kosina <jikos@kernel.org>
-R:     Benjamin Tissoires <benjamin.tissoires@redhat.com>
+M:     Benjamin Tissoires <benjamin.tissoires@redhat.com>
 L:     linux-usb@vger.kernel.org
-T:     git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git
+T:     git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
 S:     Maintained
 F:     Documentation/hid/hiddev.txt
 F:     drivers/hid/usbhid/
index 9fce8b9..2f36db8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
 VERSION = 4
 PATCHLEVEL = 20
 SUBLEVEL = 0
-EXTRAVERSION = -rc1
+EXTRAVERSION = -rc2
 NAME = "People's Front"
 
 # *DOCUMENTATION*
index 6a8c53d..b7c77bb 100644 (file)
 })
 
 #define user_termios_to_kernel_termios(k, u) \
-       copy_from_user(k, u, sizeof(struct termios))
+       copy_from_user(k, u, sizeof(struct termios2))
 
 #define kernel_termios_to_user_termios(u, k) \
+       copy_to_user(u, k, sizeof(struct termios2))
+
+#define user_termios_to_kernel_termios_1(k, u) \
+       copy_from_user(k, u, sizeof(struct termios))
+
+#define kernel_termios_to_user_termios_1(u, k) \
        copy_to_user(u, k, sizeof(struct termios))
 
 #endif /* _ALPHA_TERMIOS_H */
index 1e9121c..9713116 100644 (file)
 #define TCXONC         _IO('t', 30)
 #define TCFLSH         _IO('t', 31)
 
+#define TCGETS2                _IOR('T', 42, struct termios2)
+#define TCSETS2                _IOW('T', 43, struct termios2)
+#define TCSETSW2       _IOW('T', 44, struct termios2)
+#define TCSETSF2       _IOW('T', 45, struct termios2)
+
 #define TIOCSWINSZ     _IOW('t', 103, struct winsize)
 #define TIOCGWINSZ     _IOR('t', 104, struct winsize)
 #define        TIOCSTART       _IO('t', 110)           /* start output, like ^Q */
index de6c836..4575ba3 100644 (file)
@@ -26,6 +26,19 @@ struct termios {
        speed_t c_ospeed;               /* output speed */
 };
 
+/* Alpha has identical termios and termios2 */
+
+struct termios2 {
+       tcflag_t c_iflag;               /* input mode flags */
+       tcflag_t c_oflag;               /* output mode flags */
+       tcflag_t c_cflag;               /* control mode flags */
+       tcflag_t c_lflag;               /* local mode flags */
+       cc_t c_cc[NCCS];                /* control characters */
+       cc_t c_line;                    /* line discipline (== c_cc[19]) */
+       speed_t c_ispeed;               /* input speed */
+       speed_t c_ospeed;               /* output speed */
+};
+
 /* Alpha has matching termios and ktermios */
 
 struct ktermios {
@@ -152,6 +165,7 @@ struct ktermios {
 #define B3000000  00034
 #define B3500000  00035
 #define B4000000  00036
+#define BOTHER    00037
 
 #define CSIZE  00001400
 #define   CS5  00000000
@@ -169,6 +183,9 @@ struct ktermios {
 #define CMSPAR   010000000000          /* mark or space (stick) parity */
 #define CRTSCTS          020000000000          /* flow control */
 
+#define CIBAUD 07600000
+#define IBSHIFT        16
+
 /* c_lflag bits */
 #define ISIG   0x00000080
 #define ICANON 0x00000100
index 1d6d916..17212ce 100644 (file)
@@ -89,6 +89,7 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \
        bcm4708-asus-rt-ac68u.dtb \
        bcm4708-buffalo-wzr-1750dhp.dtb \
        bcm4708-linksys-ea6300-v1.dtb \
+       bcm4708-linksys-ea6500-v2.dtb \
        bcm4708-luxul-xap-1510.dtb \
        bcm4708-luxul-xwc-1000.dtb \
        bcm4708-netgear-r6250.dtb \
@@ -784,12 +785,18 @@ dtb-$(CONFIG_ARCH_ACTIONS) += \
        owl-s500-sparky.dtb
 dtb-$(CONFIG_ARCH_PRIMA2) += \
        prima2-evb.dtb
+dtb-$(CONFIG_ARCH_PXA) += \
+       pxa300-raumfeld-connector.dtb \
+       pxa300-raumfeld-controller.dtb \
+       pxa300-raumfeld-speaker-l.dtb \
+       pxa300-raumfeld-speaker-m.dtb \
+       pxa300-raumfeld-speaker-one.dtb \
+       pxa300-raumfeld-speaker-s.dtb
 dtb-$(CONFIG_ARCH_OXNAS) += \
        ox810se-wd-mbwe.dtb \
        ox820-cloudengines-pogoplug-series-3.dtb
 dtb-$(CONFIG_ARCH_QCOM) += \
        qcom-apq8060-dragonboard.dtb \
-       qcom-apq8064-arrow-sd-600eval.dtb \
        qcom-apq8064-cm-qs600.dtb \
        qcom-apq8064-ifc6410.dtb \
        qcom-apq8064-sony-xperia-yuga.dtb \
@@ -835,6 +842,8 @@ dtb-$(CONFIG_ARCH_RENESAS) += \
        r8a7743-iwg20d-q7.dtb \
        r8a7743-iwg20d-q7-dbcm-ca.dtb \
        r8a7743-sk-rzg1m.dtb \
+       r8a7744-iwg20d-q7.dtb \
+       r8a7744-iwg20d-q7-dbcm-ca.dtb \
        r8a7745-iwg22d-sodimm.dtb \
        r8a7745-iwg22d-sodimm-dbhd-ca.dtb \
        r8a7745-sk-rzg1e.dtb \
@@ -1066,12 +1075,15 @@ dtb-$(CONFIG_MACH_SUN8I) += \
        sun8i-r16-nintendo-super-nes-classic.dtb \
        sun8i-r16-parrot.dtb \
        sun8i-r40-bananapi-m2-ultra.dtb \
+       sun8i-t3-cqa3t-bv3.dtb \
        sun8i-v3s-licheepi-zero.dtb \
        sun8i-v3s-licheepi-zero-dock.dtb \
        sun8i-v40-bananapi-m2-berry.dtb
 dtb-$(CONFIG_MACH_SUN9I) += \
        sun9i-a80-optimus.dtb \
        sun9i-a80-cubieboard4.dtb
+dtb-$(CONFIG_MACH_SUNIV) += \
+       suniv-f1c100s-licheepi-nano.dtb
 dtb-$(CONFIG_ARCH_TANGO) += \
        tango4-vantage-1172.dtb
 dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += \
@@ -1218,6 +1230,7 @@ dtb-$(CONFIG_ARCH_ASPEED) += \
        aspeed-ast2500-evb.dtb \
        aspeed-bmc-arm-centriq2400-rep.dtb \
        aspeed-bmc-arm-stardragon4800-rep2.dtb \
+       aspeed-bmc-facebook-cmm.dtb \
        aspeed-bmc-facebook-tiogapass.dtb \
        aspeed-bmc-intel-s2600wf.dtb \
        aspeed-bmc-opp-lanyang.dtb \
index d4d33cd..07f5939 100644 (file)
                display0 = &lcd0;
        };
 
+       chosen {
+               stdout-path = &uart3;
+       };
+
        memory@80000000 {
                device_type = "memory";
                reg = <0x80000000 0x10000000>; /* 256 MB */
index 601bf4d..f4a20ca 100644 (file)
                debounce-delay-ms = <5>;
                col-scan-delay-us = <2>;
 
-               row-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH /* Bank3, pin21 */
+               pinctrl-names = "default", "sleep";
+               pinctrl-0 = <&matrix_keypad_default>;
+               pinctrl-1 = <&matrix_keypad_sleep>;
+
+               linux,wakeup;
+
+               row-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH /* Bank0, pin3 */
                                &gpio4 3 GPIO_ACTIVE_HIGH /* Bank4, pin3 */
                                &gpio4 2 GPIO_ACTIVE_HIGH>; /* Bank4, pin2 */
 
        beeper: beeper {
                compatible = "gpio-beeper";
                pinctrl-names = "default";
-               pinctrl-0 = <&beeper_pins>;
+               pinctrl-0 = <&beeper_pins_default>;
+               pinctrl-1 = <&beeper_pins_sleep>;
                gpios = <&gpio4 12 GPIO_ACTIVE_HIGH>;
        };
 };
 
 &am43xx_pinmux {
        pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&wlan_pins_default>;
+       pinctrl-0 = <&wlan_pins_default &ddr3_vtt_toggle_default &unused_pins &debugss_pins>;
        pinctrl-1 = <&wlan_pins_sleep>;
 
+       ddr3_vtt_toggle_default: ddr_vtt_toggle_default {
+               pinctrl-single,pins = <
+                       0x25C (DS0_PULL_UP_DOWN_EN | PIN_OUTPUT_PULLUP | DS0_FORCE_OFF_MODE | MUX_MODE7) /* spi0_cs0.gpio5_7 */
+               >;
+       };
+
        i2c0_pins: i2c0_pins {
                pinctrl-single,pins = <
                        AM4372_IOPAD(0x988, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)  /* i2c0_sda.i2c0_sda */
                >;
        };
 
+       beeper_pins_default: beeper_pins_default {
+               pinctrl-single,pins = <
+                       AM4372_IOPAD(0x9e0, PIN_OUTPUT_PULLUP | MUX_MODE7)      /* cam1_field.gpio4_12 */
+               >;
+       };
+
+       beeper_pins_sleep: beeper_pins_sleep {
+               pinctrl-single,pins = <
+                       AM4372_IOPAD(0x9e0, PIN_INPUT_PULLDOWN | MUX_MODE7)     /* cam1_field.gpio4_12 */
+               >;
+       };
+
+       unused_pins: unused_pins {
+               pinctrl-single,pins = <
+                       AM4372_IOPAD(0x854, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x858, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x860, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x864, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x868, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x86c, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x950, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x990, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x994, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x998, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x99c, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0x9a0, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xa3c, PIN_INPUT | PULL_DISABLE | MUX_MODE7)
+                       AM4372_IOPAD(0xa40, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xa44, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xa48, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xa4c, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xa50, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xa54, PIN_INPUT | PULL_DISABLE | MUX_MODE7)
+                       AM4372_IOPAD(0xa58, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xa60, PIN_INPUT | PULL_DISABLE | MUX_MODE7)
+                       AM4372_IOPAD(0xa68, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xa70, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xa78, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xa7c, PIN_INPUT | PULL_DISABLE)
+                       AM4372_IOPAD(0xac8, PIN_INPUT_PULLDOWN)
+                       AM4372_IOPAD(0xad4, PIN_INPUT_PULLDOWN)
+                       AM4372_IOPAD(0xad8, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xadc, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xae0, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xae4, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xae8, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xaec, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xaf0, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xaf4, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xaf8, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xafc, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xb00, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xb04, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xb08, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xb0c, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xb10, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xb14, PIN_INPUT_PULLDOWN | MUX_MODE7)
+                       AM4372_IOPAD(0xb18, PIN_INPUT_PULLDOWN | MUX_MODE7)
+               >;
+       };
+
+       debugss_pins: pinmux_debugss_pins {
+               pinctrl-single,pins = <
+                       AM4372_IOPAD(0xa90, PIN_INPUT_PULLDOWN)
+                       AM4372_IOPAD(0xa94, PIN_INPUT_PULLDOWN)
+                       AM4372_IOPAD(0xa98, PIN_INPUT_PULLDOWN)
+                       AM4372_IOPAD(0xa9c, PIN_INPUT_PULLDOWN)
+                       AM4372_IOPAD(0xaa0, PIN_INPUT_PULLDOWN)
+                       AM4372_IOPAD(0xaa4, PIN_INPUT_PULLDOWN)
+                       AM4372_IOPAD(0xaa8, PIN_INPUT_PULLDOWN)
+               >;
+       };
+
        uart0_pins_default: uart0_pins_default {
                pinctrl-single,pins = <
-                       AM4372_IOPAD(0x968, PIN_INPUT | MUX_MODE0)              /* uart0_ctsn.uart0_ctsn */
-                       AM4372_IOPAD(0x96C, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* uart0_rtsn.uart0_rtsn */
-                       AM4372_IOPAD(0x970, PIN_INPUT_PULLUP | MUX_MODE0)       /* uart0_rxd.uart0_rxd */
-                       AM4372_IOPAD(0x974, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* uart0_txd.uart0_txd */
+                       AM4372_IOPAD(0x968, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE0) /* uart0_ctsn.uart0_ctsn */
+                       AM4372_IOPAD(0x96C, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE0) /* uart0_rtsn.uart0_rtsn */
+                       AM4372_IOPAD(0x970, PIN_INPUT_PULLUP | SLEWCTRL_FAST | DS0_PULL_UP_DOWN_EN | MUX_MODE0) /* uart0_rxd.uart0_rxd */
+                       AM4372_IOPAD(0x974, PIN_INPUT | PULL_DISABLE | SLEWCTRL_FAST | DS0_PULL_UP_DOWN_EN | MUX_MODE0) /* uart0_txd.uart0_txd */
                >;
        };
 
-       beeper_pins: beeper_pins {
+       uart0_pins_sleep: uart0_pins_sleep {
                pinctrl-single,pins = <
-                       AM4372_IOPAD(0x9e0, PIN_OUTPUT_PULLUP | MUX_MODE7)      /* cam1_field.gpio4_12 */
+                       AM4372_IOPAD(0x968, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7) /* uart0_ctsn.uart0_ctsn */
+                       AM4372_IOPAD(0x96C, DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7) /* uart0_rtsn.uart0_rtsn */
+                       AM4372_IOPAD(0x970, PIN_INPUT_PULLUP | SLEWCTRL_FAST | DS0_PULL_UP_DOWN_EN | MUX_MODE0) /* uart0_rxd.uart0_rxd */
+                       AM4372_IOPAD(0x974, PIN_INPUT_PULLDOWN | SLEWCTRL_FAST | DS0_PULL_UP_DOWN_EN | MUX_MODE0) /* uart0_txd.uart0_txd */
+               >;
+       };
+
+       matrix_keypad_default: matrix_keypad_default {
+               pinctrl-single,pins = <
+                       AM4372_IOPAD(0x9a4, PIN_OUTPUT | MUX_MODE7)
+                       AM4372_IOPAD(0x9a8, PIN_OUTPUT | MUX_MODE7)
+                       AM4372_IOPAD(0x9ac, PIN_INPUT | PULL_DISABLE | MUX_MODE9)
+                       AM4372_IOPAD(0x954, PIN_INPUT_PULLDOWN | MUX_MODE0)
                >;
        };
 
+       matrix_keypad_sleep: matrix_keypad_sleep {
+               pinctrl-single,pins = <
+                       AM4372_IOPAD(0x9a4, PULL_UP | MUX_MODE7)
+                       AM4372_IOPAD(0x9a8, PULL_UP | MUX_MODE7)
+                       AM4372_IOPAD(0x9ac, PIN_INPUT | PULL_DISABLE | MUX_MODE9)
+                       AM4372_IOPAD(0x954, PIN_INPUT_PULLDOWN | MUX_MODE0)
+               >;
+       };
 };
 
 &uart0 {
        status = "okay";
-       pinctrl-names = "default";
+       pinctrl-names = "default", "sleep";
        pinctrl-0 = <&uart0_pins_default>;
+       pinctrl-1 = <&uart0_pins_sleep>;
 };
 
 &i2c0 {
index a567669..916a977 100644 (file)
@@ -44,7 +44,7 @@
        };
 
        /* The voltage to the MMC card is hardwired at 3.3V */
-       vmmc: fixedregulator@0 {
+       vmmc: regulator-vmmc {
                compatible = "regulator-fixed";
                regulator-name = "vmmc";
                regulator-min-microvolt = <3300000>;
@@ -52,7 +52,7 @@
                regulator-boot-on;
         };
 
-       veth: fixedregulator@0 {
+       veth: regulator-veth {
                compatible = "regulator-fixed";
                regulator-name = "veth";
                regulator-min-microvolt = <3300000>;
                };
        };
 };
-
index df12276..c2ece0b 100644 (file)
@@ -13,7 +13,7 @@
                bootargs = "console=ttyS4,115200 earlyprintk";
        };
 
-       memory {
+       memory@80000000 {
                reg = <0x80000000 0x40000000>;
        };
 
diff --git a/arch/arm/boot/dts/aspeed-bmc-facebook-cmm.dts b/arch/arm/boot/dts/aspeed-bmc-facebook-cmm.dts
new file mode 100644 (file)
index 0000000..9f194b5
--- /dev/null
@@ -0,0 +1,368 @@
+// SPDX-License-Identifier: GPL-2.0+
+// Copyright (c) 2018 Facebook Inc.
+/dts-v1/;
+
+#include "aspeed-g5.dtsi"
+
+/ {
+       model = "Facebook Backpack CMM BMC";
+       compatible = "facebook,cmm-bmc", "aspeed,ast2500";
+
+       aliases {
+               /*
+                * Override the default uart aliases to avoid breaking
+                * the legacy applications.
+                */
+               serial0 = &uart5;
+               serial1 = &uart1;
+               serial2 = &uart3;
+               serial3 = &uart4;
+
+               /*
+                * Hardcode the bus number of i2c switches' channels to
+                * avoid breaking the legacy applications.
+                */
+               i2c16 = &imux16;
+               i2c17 = &imux17;
+               i2c18 = &imux18;
+               i2c19 = &imux19;
+               i2c20 = &imux20;
+               i2c21 = &imux21;
+               i2c22 = &imux22;
+               i2c23 = &imux23;
+               i2c24 = &imux24;
+               i2c25 = &imux25;
+               i2c26 = &imux26;
+               i2c27 = &imux27;
+               i2c28 = &imux28;
+               i2c29 = &imux29;
+               i2c30 = &imux30;
+               i2c31 = &imux31;
+               i2c32 = &imux32;
+               i2c33 = &imux33;
+               i2c34 = &imux34;
+               i2c35 = &imux35;
+               i2c36 = &imux36;
+               i2c37 = &imux37;
+               i2c38 = &imux38;
+               i2c39 = &imux39;
+       };
+
+       chosen {
+               stdout-path = &uart1;
+               bootargs = "console=ttyS1,9600n8 root=/dev/ram rw earlyprintk";
+       };
+
+       memory@80000000 {
+               reg = <0x80000000 0x20000000>;
+       };
+};
+
+&pinctrl {
+       aspeed,external-nodes = <&gfx &lhc>;
+};
+
+/*
+ * Update reset type to "system" (full chip) to fix warm reboot hang issue
+ * when reset type is set to default ("soc", gated by reset mask registers).
+ */
+&wdt1 {
+       status = "okay";
+       aspeed,reset-type = "system";
+};
+
+/*
+ * wdt2 is not used by Backpack CMM.
+ */
+&wdt2 {
+       status = "disabled";
+};
+
+&fmc {
+       status = "okay";
+       flash@0 {
+               status = "okay";
+               m25p,fast-read;
+               label = "bmc";
+#include "facebook-bmc-flash-layout.dtsi"
+       };
+};
+
+&uart1 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_txd1_default
+                    &pinctrl_rxd1_default
+                    &pinctrl_ncts1_default
+                    &pinctrl_ndcd1_default
+                    &pinctrl_ndsr1_default
+                    &pinctrl_ndtr1_default
+                    &pinctrl_nrts1_default>;
+};
+
+&uart3 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_txd3_default
+                    &pinctrl_rxd3_default
+                    &pinctrl_ncts3_default
+                    &pinctrl_ndcd3_default
+                    &pinctrl_nri3_default>;
+};
+
+&uart4 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_txd4_default
+                    &pinctrl_rxd4_default>;
+};
+
+&uart5 {
+       status = "okay";
+};
+
+&mac1 {
+       status = "okay";
+       no-hw-checksum;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_rgmii2_default &pinctrl_mdio2_default>;
+};
+
+/*
+ * I2C bus reserved for communication with COM-E.
+ */
+&i2c0 {
+       status = "okay";
+};
+
+/*
+ * I2C bus to Line Cards and Fabric Cards.
+ */
+&i2c1 {
+       status = "okay";
+
+       i2c-switch@77 {
+               compatible = "nxp,pca9548";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0x77>;
+
+               imux16: i2c@0 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0>;
+               };
+
+               imux17: i2c@1 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <1>;
+               };
+
+               imux18: i2c@2 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <2>;
+               };
+
+               imux19: i2c@3 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <3>;
+               };
+
+               imux20: i2c@4 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <4>;
+               };
+
+               imux21: i2c@5 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <5>;
+               };
+
+               imux22: i2c@6 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <6>;
+               };
+
+               imux23: i2c@7 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <7>;
+               };
+       };
+};
+
+/*
+ * I2C bus to Power Distribution Board.
+ */
+&i2c2 {
+       status = "okay";
+
+       i2c-switch@71 {
+               compatible = "nxp,pca9548";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0x71>;
+
+               imux24: i2c@0 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0>;
+               };
+
+               imux25: i2c@1 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <1>;
+               };
+
+               imux26: i2c@2 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <2>;
+               };
+
+               imux27: i2c@3 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <3>;
+               };
+
+               imux28: i2c@4 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <4>;
+               };
+
+               imux29: i2c@5 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <5>;
+               };
+
+               imux30: i2c@6 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <6>;
+               };
+
+               imux31: i2c@7 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <7>;
+               };
+       };
+};
+
+/*
+ * I2c bus connected with temperature sensors on CMM.
+ */
+&i2c3 {
+       status = "okay";
+};
+
+/*
+ * I2C bus reserved for communication with COM-E.
+ */
+&i2c4 {
+       status = "okay";
+};
+
+/*
+ * I2c bus connected with ADM1278.
+ */
+&i2c5 {
+       status = "okay";
+};
+
+/*
+ * I2c bus connected with I/O Expander.
+ */
+&i2c6 {
+       status = "okay";
+};
+
+/*
+ * I2c bus connected with I/O Expander and EPROMs.
+ */
+&i2c7 {
+       status = "okay";
+};
+
+/*
+ * I2C bus to Fan Control Board.
+ */
+&i2c8 {
+       status = "okay";
+
+       i2c-switch@77 {
+               compatible = "nxp,pca9548";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0x77>;
+
+               imux32: i2c@0 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0>;
+               };
+
+               imux33: i2c@1 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <1>;
+               };
+
+               imux34: i2c@2 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <2>;
+               };
+
+               imux35: i2c@3 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <3>;
+               };
+
+               imux36: i2c@4 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <4>;
+               };
+
+               imux37: i2c@5 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <5>;
+               };
+
+               imux38: i2c@6 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <6>;
+               };
+
+               imux39: i2c@7 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <7>;
+               };
+       };
+};
+
+/*
+ * I2C bus to CMM CPLD.
+ */
+&i2c13 {
+       status = "okay";
+};
+
+&adc {
+       status = "okay";
+};
index 7a291de..22dade6 100644 (file)
@@ -13,7 +13,7 @@
                bootargs = "earlyprintk";
        };
 
-       memory {
+       memory@80000000 {
                reg = <0x80000000 0x20000000>;
        };
 
index d598b63..024e52a 100644 (file)
@@ -14,7 +14,7 @@
                bootargs = "console=ttyS4,115200 earlyprintk";
        };
 
-       memory {
+       memory@80000000 {
                reg = <0x80000000 0x40000000>;
        };
 
 &adc {
        status = "okay";
 };
-
index c7084a8..9aa1d44 100644 (file)
                        no-map;
                        reg = <0x5f000000 0x01000000>; /* 16M */
                };
+
+               coldfire_memory: codefire_memory@5ee00000 {
+                       reg = <0x5ee00000 0x00200000>;
+                       no-map;
+               };
+
+               flash_memory: region@98000000 {
+                       no-map;
+                       reg = <0x98000000 0x01000000>; /* 16MB */
+               };
        };
 
        leds {
                };
        };
 
+       fsi: gpio-fsi {
+               compatible = "aspeed,ast2400-cf-fsi-master", "fsi-master";
+               #address-cells = <2>;
+               #size-cells = <0>;
+
+               memory-region = <&coldfire_memory>;
+               aspeed,sram = <&sram>;
+               aspeed,cvic = <&cvic>;
+
+               clock-gpios = <&gpio ASPEED_GPIO(A, 4) GPIO_ACTIVE_HIGH>;
+               data-gpios = <&gpio ASPEED_GPIO(A, 5) GPIO_ACTIVE_HIGH>;
+               mux-gpios = <&gpio ASPEED_GPIO(A, 6) GPIO_ACTIVE_HIGH>;
+               enable-gpios = <&gpio ASPEED_GPIO(D, 0) GPIO_ACTIVE_HIGH>;
+               trans-gpios = <&gpio ASPEED_GPIO(H, 6) GPIO_ACTIVE_HIGH>;
+       };
+
        gpio-keys {
                compatible = "gpio-keys";
 
        status = "okay";
 };
 
+&lpc_ctrl {
+       status = "okay";
+       memory-region = <&flash_memory>;
+       flash = <&spi>;
+};
+
 &gpio {
        pin_func_mode0 {
                gpio-hog;
                line-name = "SYS_PWROK_BMC";
        };
 
-       pin_gpio_h6 {
-               gpio-hog;
-               gpios = <ASPEED_GPIO(H, 6) GPIO_ACTIVE_HIGH>;
-               output-high;
-               line-name = "SCM1_FSI0_DATA_EN";
-       };
-
        pin_gpio_h7 {
                gpio-hog;
                gpios = <ASPEED_GPIO(H, 7) GPIO_ACTIVE_HIGH>;
index 7d28c03..76fe994 100644 (file)
                        no-map;
                        reg = <0x98000000 0x04000000>; /* 64M */
                };
+
+               coldfire_memory: codefire_memory@9ef00000 {
+                       reg = <0x9ef00000 0x00100000>;
+                       no-map;
+               };
        };
 
        leds {
        };
 
        fsi: gpio-fsi {
-               compatible = "fsi-master-gpio", "fsi-master";
+               compatible = "aspeed,ast2500-cf-fsi-master", "fsi-master";
                #address-cells = <2>;
                #size-cells = <0>;
                no-gpio-delays;
 
+               memory-region = <&coldfire_memory>;
+               aspeed,sram = <&sram>;
+               aspeed,cvic = <&cvic>;
+
                clock-gpios = <&gpio ASPEED_GPIO(AA, 0) GPIO_ACTIVE_HIGH>;
                data-gpios = <&gpio ASPEED_GPIO(AA, 2) GPIO_ACTIVE_HIGH>;
                mux-gpios = <&gpio ASPEED_GPIO(A, 6) GPIO_ACTIVE_HIGH>;
                        linux,code = <ASPEED_GPIO(Q, 7)>;
                };
        };
+
+       iio-hwmon-battery {
+               compatible = "iio-hwmon";
+               io-channels = <&adc 12>;
+       };
 };
 
 &fmc {
 &ibt {
        status = "okay";
 };
+
+&vhub {
+       status = "okay";
+};
+
+&adc {
+       status = "okay";
+};
index 6560361..ad54117 100644 (file)
                };
        };
 
+       iio-hwmon-battery {
+               compatible = "iio-hwmon";
+               io-channels = <&adc 12>;
+       };
+
        gpio-keys-polled {
                compatible = "gpio-keys-polled";
                #address-cells = <1>;
 &ibt {
        status = "okay";
 };
+
+&adc {
+       status = "okay";
+};
index 43ed139..33d7045 100644 (file)
@@ -17,7 +17,7 @@
                bootargs = "console=ttyS4,115200 earlyprintk";
        };
 
-       memory {
+       memory@80000000 {
                reg = <0x80000000 0x20000000>;
        };
 
index 043c717..bd83962 100644 (file)
        interrupt-controller;
        #interrupt-cells = <1>;
 
+       ac_power_supply: ac-power-supply {
+               compatible = "x-powers,axp813-ac-power-supply";
+               status = "disabled";
+       };
+
        axp_adc: adc {
                compatible = "x-powers,axp813-adc";
                #io-channel-cells = <1>;
index 2fd111d..0d2538b 100644 (file)
        model = "Broadcom Northstar Plus SoC";
        interrupt-parent = <&gic>;
 
+       aliases {
+               serial0 = &uart0;
+               serial1 = &uart1;
+               ethernet0 = &amac0;
+               ethernet1 = &amac1;
+               ethernet2 = &amac2;
+       };
+
        cpus {
                #address-cells = <1>;
                #size-cells = <0>;
index b7f79f1..644d907 100644 (file)
@@ -1,12 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2017 Stefan Wahren <stefan.wahren@i2se.com>
- *
- * The code contained herein is licensed under the GNU General Public
- * License. You may obtain a copy of the GNU General Public License
- * Version 2 or later at the following locations:
- *
- * http://www.opensource.org/licenses/gpl-license.html
- * http://www.gnu.org/copyleft/gpl.html
  */
 
 /dts-v1/;
index 7036240..00323ba 100644 (file)
@@ -1,12 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2016 Stefan Wahren <stefan.wahren@i2se.com>
- *
- * The code contained herein is licensed under the GNU General Public
- * License. You may obtain a copy of the GNU General Public License
- * Version 2 or later at the following locations:
- *
- * http://www.opensource.org/licenses/gpl-license.html
- * http://www.gnu.org/copyleft/gpl.html
  */
 
 /dts-v1/;
index cb2d6d7..29f970f 100644 (file)
@@ -30,9 +30,9 @@
                        #power-domain-cells = <1>;
                };
 
-               mailbox@7e00b840 {
+               vchiq: mailbox@7e00b840 {
                        compatible = "brcm,bcm2835-vchiq";
-                       reg = <0x7e00b840 0xf>;
+                       reg = <0x7e00b840 0x3c>;
                        interrupts = <0 2>;
                };
        };
index 2fef70a..ac4408b 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
 /dts-v1/;
 #include "bcm2836.dtsi"
-#include "bcm2835-rpi.dtsi"
+#include "bcm2836-rpi.dtsi"
 #include "bcm283x-rpi-smsc9514.dtsi"
 #include "bcm283x-rpi-usb-host.dtsi"
 
diff --git a/arch/arm/boot/dts/bcm2836-rpi.dtsi b/arch/arm/boot/dts/bcm2836-rpi.dtsi
new file mode 100644 (file)
index 0000000..c4c858b
--- /dev/null
@@ -0,0 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "bcm2835-rpi.dtsi"
+
+&vchiq {
+       compatible = "brcm,bcm2836-vchiq", "brcm,bcm2835-vchiq";
+};
index 4adb85e..eca36e3 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
 /dts-v1/;
 #include "bcm2837.dtsi"
-#include "bcm2835-rpi.dtsi"
+#include "bcm2836-rpi.dtsi"
 #include "bcm283x-rpi-lan7515.dtsi"
 #include "bcm283x-rpi-usb-host.dtsi"
 
index c318bcb..a0ba0f6 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
 /dts-v1/;
 #include "bcm2837.dtsi"
-#include "bcm2835-rpi.dtsi"
+#include "bcm2836-rpi.dtsi"
 #include "bcm283x-rpi-smsc9514.dtsi"
 #include "bcm283x-rpi-usb-host.dtsi"
 
index 7b7ab6a..4a89a18 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
 /dts-v1/;
 #include "bcm2837.dtsi"
-#include "bcm2835-rpi.dtsi"
+#include "bcm2836-rpi.dtsi"
 
 / {
        memory {
diff --git a/arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts b/arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts
new file mode 100644 (file)
index 0000000..babcfec
--- /dev/null
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Copyright (C) 2017 RafaÅ‚ MiÅ‚ecki <rafal@milecki.pl>
+ * Copyright (C) 2018 Rene Kjellerup <rk.katana.steel@gmail.com>
+ */
+
+/dts-v1/;
+
+#include "bcm4708.dtsi"
+#include "bcm5301x-nand-cs0-bch8.dtsi"
+
+/ {
+       compatible = "linksys,ea6500-v2", "brcm,bcm4708";
+       model = "Linksys EA6500 V2";
+
+       chosen {
+               bootargs = "console=ttyS0,115200";
+       };
+
+       memory {
+               reg = <0x00000000 0x08000000>;
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               wps {
+                       label = "WPS";
+                       linux,code = <KEY_WPS_BUTTON>;
+                       gpios = <&chipcommon 7 GPIO_ACTIVE_LOW>;
+               };
+
+               restart {
+                       label = "Reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&chipcommon 11 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&usb3_phy {
+       status = "okay";
+};
index 9829d04..ed13af0 100644 (file)
@@ -1,20 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 /*
  * Broadcom BCM470X / BCM5301X ARM platform code.
  * DTS for BCM47081 SoC.
  *
  * Copyright Â© 2014 RafaÅ‚ MiÅ‚ecki <zajec5@gmail.com>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
  */
 
 #include "bcm5301x.dtsi"
index c645fea..e1bb866 100644 (file)
@@ -1,7 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 /*
  * Copyright (C) 2016 RafaÅ‚ MiÅ‚ecki <rafal@milecki.pl>
- *
- * Licensed under the ISC license.
  */
 
 #include "bcm4708.dtsi"
index f7c3e27..cdc5ff5 100644 (file)
@@ -1,7 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 /*
  * Copyright (C) 2016 RafaÅ‚ MiÅ‚ecki <rafal@milecki.pl>
- *
- * Licensed under the ISC license.
  */
 
 #include "bcm4708.dtsi"
index 19e61b5..e15e2a1 100644 (file)
@@ -1,7 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 /*
  * Copyright (C) 2016 RafaÅ‚ MiÅ‚ecki <rafal@milecki.pl>
- *
- * Licensed under the ISC license.
  */
 
 /dts-v1/;
index 7a5c188..fd7af94 100644 (file)
@@ -37,6 +37,8 @@
                        reg = <0x0400 0x100>;
                        interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&iprocslow>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinmux_uart1>;
                        status = "disabled";
                };
        };
                status = "disabled";
        };
 
+       dmu@1800c000 {
+               compatible = "simple-bus";
+               ranges = <0 0x1800c000 0x1000>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               cru@100 {
+                       compatible = "simple-bus";
+                       reg = <0x100 0x1a4>;
+                       ranges;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       pin-controller@1c0 {
+                               compatible = "brcm,bcm4708-pinmux";
+                               reg = <0x1c0 0x24>;
+                               reg-names = "cru_gpio_control";
+
+                               spi-pins {
+                                       groups = "spi_grp";
+                                       function = "spi";
+                               };
+
+                               i2c {
+                                       groups = "i2c_grp";
+                                       function = "i2c";
+                               };
+
+                               pwm {
+                                       groups = "pwm0_grp", "pwm1_grp",
+                                                "pwm2_grp", "pwm3_grp";
+                                       function = "pwm";
+                               };
+
+                               pinmux_uart1: uart1 {
+                                       groups = "uart1_grp";
+                                       function = "uart1";
+                               };
+                       };
+               };
+       };
+
        lcpll0: lcpll0@1800c100 {
                #clock-cells = <1>;
                compatible = "brcm,nsp-lcpll0";
index 453a2a3..5054fa9 100644 (file)
@@ -1,7 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 /*
  * Copyright (C) 2016 RafaÅ‚ MiÅ‚ecki <rafal@milecki.pl>
- *
- * Licensed under the ISC license.
  */
 
 #include <dt-bindings/gpio/gpio.h>
index 6df6151..f597640 100644 (file)
                        reg = <0x4800e0 0x10>;
                        #reset-cells = <2>;
                };
+
+               ahci: sata@8000 {
+                       compatible = "brcm,bcm63138-ahci", "brcm,sata3-ahci";
+                       reg-names = "ahci", "top-ctrl";
+                       reg = <0xa000 0x9ac>, <0x8040 0x24>;
+                       interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&pmb0 3 1>;
+                       reset-names = "ahci";
+                       status = "disabled";
+
+                       sata0: sata-port@0 {
+                               reg = <0>;
+                               phys = <&sata_phy0>;
+                       };
+               };
+
+               sata_phy: sata-phy@8100 {
+                       compatible = "brcm,bcm63138-sata-phy", "brcm,phy-sata3";
+                       reg = <0x8100 0x1e00>;
+                       reg-names = "phy";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+
+                       sata_phy0: sata-phy@0 {
+                               reg = <0>;
+                               #phy-cells = <0>;
+                       };
+               };
        };
 
        /* Legacy UBUS base */
index f9dd342..21479b4 100644 (file)
        model = "NorthStar Plus SVK (BCM958522ER)";
        compatible = "brcm,bcm58522", "brcm,nsp";
 
-       aliases {
-               serial0 = &uart0;
-       };
-
        chosen {
                stdout-path = "serial0:115200n8";
        };
index 374508a..cda3d79 100644 (file)
        model = "NorthStar Plus SVK (BCM958525ER)";
        compatible = "brcm,bcm58525", "brcm,nsp";
 
-       aliases {
-               serial0 = &uart0;
-       };
-
        chosen {
                stdout-path = "serial0:115200n8";
        };
index 403250c..f866498 100644 (file)
        model = "NorthStar Plus XMC (BCM958525xmc)";
        compatible = "brcm,bcm58525", "brcm,nsp";
 
-       aliases {
-               serial0 = &uart0;
-       };
-
        chosen {
                stdout-path = "serial0:115200n8";
        };
index ecd05e2..df60602 100644 (file)
        model = "NorthStar Plus SVK (BCM958622HR)";
        compatible = "brcm,bcm58622", "brcm,nsp";
 
-       aliases {
-               serial0 = &uart0;
-       };
-
        chosen {
                stdout-path = "serial0:115200n8";
        };
index f5e85b3..3893e7a 100644 (file)
        model = "NorthStar Plus SVK (BCM958623HR)";
        compatible = "brcm,bcm58623", "brcm,nsp";
 
-       aliases {
-               serial0 = &uart0;
-       };
-
        chosen {
                stdout-path = "serial0:115200n8";
        };
index a53a2f6..cf226b0 100644 (file)
        model = "NorthStar Plus SVK (BCM958625HR)";
        compatible = "brcm,bcm58625", "brcm,nsp";
 
-       aliases {
-               serial0 = &uart0;
-       };
-
        chosen {
                stdout-path = "serial0:115200n8";
        };
index 3ea5f73..10b3d51 100644 (file)
        model = "NorthStar Plus SVK (BCM958625K)";
        compatible = "brcm,bcm58625", "brcm,nsp";
 
-       aliases {
-               serial0 = &uart0;
-               serial1 = &uart1;
-       };
-
        chosen {
                stdout-path = "serial0:115200n8";
        };
index c616736..8dca97e 100644 (file)
                brcm,nand-oob-sectors-size = <16>;
        };
 };
+
+&ahci {
+       status = "okay";
+};
+
+&sata_phy {
+       status = "okay";
+};
index ea9a080..e39db14 100644 (file)
        model = "NorthStar Plus SVK (BCM988312HR)";
        compatible = "brcm,bcm88312", "brcm,nsp";
 
-       aliases {
-               serial0 = &uart0;
-       };
-
        chosen {
                stdout-path = "serial0:115200n8";
        };
index 373ea87..67d8601 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the EMEV2 SoC
+ * Device Tree Source for the Emma Mobile EV2 SoC
  *
  * Copyright (C) 2012 Renesas Solutions Corp.
  */
index 7c22cbf..ace50e1 100644 (file)
                        cooling-maps {
                                map0 {
                                        /* Corresponds to 500MHz */
-                                       cooling-device = <&cpu0 5 5>;
+                                       cooling-device = <&cpu0 5 5>,
+                                                        <&cpu1 5 5>;
                                };
                                map1 {
                                        /* Corresponds to 200MHz */
-                                       cooling-device = <&cpu0 8 8>;
+                                       cooling-device = <&cpu0 8 8>,
+                                                        <&cpu1 8 8>;
                                };
                        };
                };
index 6ffedf4..e257655 100644 (file)
                        cooling-maps {
                                map0 {
                                        /* Correspond to 500MHz at freq_table */
-                                       cooling-device = <&cpu0 5 5>;
+                                       cooling-device = <&cpu0 5 5>,
+                                                        <&cpu1 5 5>;
                                };
                                map1 {
                                        /* Correspond to 200MHz at freq_table */
-                                       cooling-device = <&cpu0 8 8>;
+                                       cooling-device = <&cpu0 8 8>,
+                                                        <&cpu1 8 8>;
                                };
                        };
                };
index 2a6b828..7479993 100644 (file)
                        cooling-maps {
                                map0 {
                                        /* Corresponds to 500MHz */
-                                       cooling-device = <&cpu0 5 5>;
+                                       cooling-device = <&cpu0 5 5>,
+                                                        <&cpu1 5 5>;
                                };
                                map1 {
                                        /* Corresponds to 200MHz */
-                                       cooling-device = <&cpu0 8 8>;
+                                       cooling-device = <&cpu0 8 8>,
+                                                        <&cpu1 8 8>;
                                };
                        };
                };
index 27a1ee2..608d174 100644 (file)
                };
 
                hsotg: hsotg@12480000 {
-                       compatible = "snps,dwc2";
+                       compatible = "samsung,s3c6400-hsotg", "snps,dwc2";
                        reg = <0x12480000 0x20000>;
                        interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cmu CLK_USBOTG>;
index f9bbc63..8dbc47d 100644 (file)
                        cooling-maps {
                                map0 {
                                     /* Corresponds to 800MHz at freq_table */
-                                    cooling-device = <&cpu0 2 2>;
+                                    cooling-device = <&cpu0 2 2>, <&cpu1 2 2>;
                                };
                                map1 {
                                     /* Corresponds to 200MHz at freq_table */
-                                    cooling-device = <&cpu0 4 4>;
+                                    cooling-device = <&cpu0 4 4>, <&cpu1 4 4>;
                               };
                       };
                };
index b6091c2..b491c34 100644 (file)
@@ -51,7 +51,7 @@
                        #cooling-cells = <2>; /* min followed by max */
                };
 
-               cpu@901 {
+               cpu1: cpu@901 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a9";
                        reg = <0x901>;
                        opp-400000000 {
                                opp-hz = /bits/ 64 <400000000>;
                                opp-microvolt = <1150000>;
+                               opp-suspend;
                        };
                };
 
                        };
                        opp-200000000 {
                                opp-hz = /bits/ 64 <200000000>;
+                               opp-suspend;
                        };
                };
        };
index ab7affa..0038465 100644 (file)
                        cooling-maps {
                                map0 {
                                     /* Corresponds to 800MHz at freq_table */
-                                    cooling-device = <&cpu0 7 7>;
+                                    cooling-device = <&cpu0 7 7>, <&cpu1 7 7>,
+                                                     <&cpu2 7 7>, <&cpu3 7 7>;
                                };
                                map1 {
                                     /* Corresponds to 200MHz at freq_table */
-                                    cooling-device = <&cpu0 13 13>;
+                                    cooling-device = <&cpu0 13 13>,
+                                                     <&cpu1 13 13>,
+                                                     <&cpu2 13 13>,
+                                                     <&cpu3 13 13>;
                               };
                       };
                };
                };
 
                s5m8767_osc: clocks {
+                       compatible = "samsung,s5m8767-clk";
                        #clock-cells = <1>;
                        clock-output-names = "s5m8767_ap",
                                        "s5m8767_cp", "s5m8767_bt";
index aed2f2e..4c15cb6 100644 (file)
                        cooling-maps {
                                map0 {
                                     /* Corresponds to 800MHz at freq_table */
-                                    cooling-device = <&cpu0 7 7>;
+                                    cooling-device = <&cpu0 7 7>, <&cpu1 7 7>,
+                                                     <&cpu2 7 7>, <&cpu3 7 7>;
                                };
                                map1 {
                                     /* Corresponds to 200MHz at freq_table */
-                                    cooling-device = <&cpu0 13 13>;
+                                    cooling-device = <&cpu0 13 13>,
+                                                     <&cpu1 13 13>,
+                                                     <&cpu2 13 13>,
+                                                     <&cpu3 13 13>;
                               };
                       };
                };
index 2caa313..3a9eb1e 100644 (file)
                        cooling-maps {
                                cooling_map0: map0 {
                                     /* Corresponds to 800MHz at freq_table */
-                                    cooling-device = <&cpu0 7 7>;
+                                    cooling-device = <&cpu0 7 7>, <&cpu1 7 7>,
+                                                     <&cpu2 7 7>, <&cpu3 7 7>;
                                };
                                cooling_map1: map1 {
                                     /* Corresponds to 200MHz at freq_table */
-                                    cooling-device = <&cpu0 13 13>;
+                                    cooling-device = <&cpu0 13 13>,
+                                                     <&cpu1 13 13>,
+                                                     <&cpu2 13 13>,
+                                                     <&cpu3 13 13>;
                               };
                       };
                };
index 459919b..2bdf899 100644 (file)
                        cooling-maps {
                                map0 {
                                     trip = <&cpu_alert1>;
-                                    cooling-device = <&cpu0 9 9>;
+                                    cooling-device = <&cpu0 9 9>, <&cpu1 9 9>,
+                                                     <&cpu2 9 9>, <&cpu3 9 9>,
+                                                     <&fan0 1 2>;
                                };
                                map1 {
                                     trip = <&cpu_alert2>;
-                                    cooling-device = <&cpu0 15 15>;
+                                    cooling-device = <&cpu0 15 15>,
+                                                     <&cpu1 15 15>,
+                                                     <&cpu2 15 15>,
+                                                     <&cpu3 15 15>,
+                                                     <&fan0 2 3>;
                                };
                                map2 {
                                     trip = <&cpu_alert0>;
                                     cooling-device = <&fan0 0 1>;
                                };
-                               map3 {
-                                    trip = <&cpu_alert1>;
-                                    cooling-device = <&fan0 1 2>;
-                               };
-                               map4 {
-                                    trip = <&cpu_alert2>;
-                                    cooling-device = <&fan0 2 3>;
-                               };
                        };
                };
        };
index 51f72f0..26ad6ab 100644 (file)
@@ -45,7 +45,7 @@
                        #cooling-cells = <2>; /* min followed by max */
                };
 
-               cpu@a01 {
+               cpu1: cpu@a01 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a9";
                        reg = <0xA01>;
@@ -55,7 +55,7 @@
                        #cooling-cells = <2>; /* min followed by max */
                };
 
-               cpu@a02 {
+               cpu2: cpu@a02 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a9";
                        reg = <0xA02>;
@@ -65,7 +65,7 @@
                        #cooling-cells = <2>; /* min followed by max */
                };
 
-               cpu@a03 {
+               cpu3: cpu@a03 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a9";
                        reg = <0xA03>;
                        opp-400000000 {
                                opp-hz = /bits/ 64 <400000000>;
                                opp-microvolt = <1050000>;
+                               opp-suspend;
                        };
                };
 
                        opp-200000000 {
                                opp-hz = /bits/ 64 <200000000>;
                                opp-microvolt = <1000000>;
+                               opp-suspend;
                        };
                };
 
index 7d1f2dc..2ca9319 100644 (file)
@@ -10,6 +10,7 @@
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/clock/samsung,s2mps11.h>
 #include "exynos5250.dtsi"
 
 / {
        };
 };
 
-&dp {
-       status = "okay";
-       samsung,color-space = <0>;
-       samsung,color-depth = <1>;
-       samsung,link-rate = <0x0a>;
-       samsung,lane-count = <4>;
-
-       display-timings {
-               native-mode = <&timing0>;
-
-               timing0: timing {
-                       /* 2560x1600 DP panel */
-                       clock-frequency = <50000>;
-                       hactive = <2560>;
-                       vactive = <1600>;
-                       hfront-porch = <48>;
-                       hback-porch = <80>;
-                       hsync-len = <32>;
-                       vback-porch = <16>;
-                       vfront-porch = <8>;
-                       vsync-len = <6>;
-               };
-       };
-};
-
 &fimd {
        status = "okay";
 };
                                             <&gpx2 4 GPIO_ACTIVE_HIGH>,
                                             <&gpx2 5 GPIO_ACTIVE_HIGH>;
 
+               s5m8767_osc: clocks {
+                       compatible = "samsung,s5m8767-clk";
+                       #clock-cells = <1>;
+                       clock-output-names = "s5m8767_ap", "unused1", "unused2";
+               };
+
                regulators {
                        ldo1_reg: LDO1 {
                                regulator-name = "VDD_ALIVE_1.0V";
 };
 
 &rtc {
+       clocks = <&clock CLK_RTC>, <&s5m8767_osc S2MPS11_CLK_AP>;
+       clock-names = "rtc", "rtc_src";
        status = "okay";
 };
 
index 5044f75..80986b9 100644 (file)
@@ -59,7 +59,7 @@
                        operating-points-v2 = <&cpu0_opp_table>;
                        #cooling-cells = <2>; /* min followed by max */
                };
-               cpu@1 {
+               cpu1: cpu@1 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a15";
                        reg = <1>;
                        cooling-maps {
                                map0 {
                                     /* Corresponds to 800MHz at freq_table */
-                                    cooling-device = <&cpu0 9 9>;
+                                    cooling-device = <&cpu0 9 9>, <&cpu1 9 9>;
                                };
                                map1 {
                                     /* Corresponds to 200MHz at freq_table */
-                                    cooling-device = <&cpu0 15 15>;
+                                    cooling-device = <&cpu0 15 15>,
+                                                     <&cpu1 15 15>;
                               };
                       };
                };
index cdda614..3447160 100644 (file)
@@ -89,6 +89,7 @@
                pinctrl-0 = <&s2mps11_irq>;
 
                s2mps11_osc: clocks {
+                       compatible = "samsung,s2mps11-clk";
                        #clock-cells = <1>;
                        clock-output-names = "s2mps11_ap",
                                        "s2mps11_cp", "s2mps11_bt";
index dda8ca2..b82af7c 100644 (file)
                samsung,pin-pud = <EXYNOS_PIN_PULL_UP>;
                samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV4>;
        };
+
+       sd2_wp: sd2-wp {
+               samsung,pins = "gpc4-0";
+               samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
+               samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
+               samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV4>;
+       };
 };
 
 &pinctrl_2 {
index 831c733..3cf9050 100644 (file)
                reg = <0x66>;
 
                s2mps11_osc: clocks {
+                       compatible = "samsung,s2mps11-clk";
                        #clock-cells = <1>;
                        clock-output-names = "s2mps11_ap",
                                        "s2mps11_cp", "s2mps11_bt";
index 2fac4ba..bf09eab 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Hardkernel Odroid XU3/XU4/HC1 boards core device tree source
+ * Hardkernel Odroid XU3/XU3-Lite/XU4/HC1 boards core device tree source
  *
  * Copyright (c) 2017 Marek Szyprowski
  * Copyright (c) 2013-2017 Samsung Electronics Co., Ltd.
                pinctrl-0 = <&s2mps11_irq>;
 
                s2mps11_osc: clocks {
+                       compatible = "samsung,s2mps11-clk";
                        #clock-cells = <1>;
                        clock-output-names = "s2mps11_ap",
                                        "s2mps11_cp", "s2mps11_bt";
 
                        ldo13_reg: LDO13 {
                                regulator-name = "vddq_mmc2";
-                               regulator-min-microvolt = <2800000>;
+                               regulator-min-microvolt = <1800000>;
                                regulator-max-microvolt = <2800000>;
                        };
 
        samsung,dw-mshc-sdr-timing = <0 4>;
        samsung,dw-mshc-ddr-timing = <0 2>;
        pinctrl-names = "default";
-       pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_bus1 &sd2_bus4>;
+       pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_wp &sd2_bus1 &sd2_bus4>;
        bus-width = <4>;
        cap-sd-highspeed;
+       max-frequency = <200000000>;
        vmmc-supply = <&ldo19_reg>;
        vqmmc-supply = <&ldo13_reg>;
+       sd-uhs-sdr50;
+       sd-uhs-sdr104;
+       sd-uhs-ddr50;
 };
 
 &nocp_mem0_0 {
index 8f332be..d271e75 100644 (file)
                                 */
                                map0 {
                                        trip = <&cpu0_alert0>;
-                                       cooling-device = <&cpu0 0 2>;
-                               };
-                               map1 {
-                                       trip = <&cpu0_alert0>;
-                                       cooling-device = <&cpu4 0 2>;
+                                       cooling-device = <&cpu0 0 2>,
+                                                        <&cpu1 0 2>,
+                                                        <&cpu2 0 2>,
+                                                        <&cpu3 0 2>,
+                                                        <&cpu4 0 2>,
+                                                        <&cpu5 0 2>,
+                                                        <&cpu6 0 2>,
+                                                        <&cpu7 0 2>;
                                };
                                /*
                                 * When reaching cpu0_alert1, reduce CPU
                                 * further, down to 600 MHz (12 steps for big,
                                 * 7 steps for LITTLE).
                                 */
-                               map2 {
-                                       trip = <&cpu0_alert1>;
-                                       cooling-device = <&cpu0 3 7>;
-                               };
-                               map3 {
+                               map1 {
                                        trip = <&cpu0_alert1>;
-                                       cooling-device = <&cpu4 3 12>;
+                                       cooling-device = <&cpu0 3 7>,
+                                                        <&cpu1 3 7>,
+                                                        <&cpu2 3 7>,
+                                                        <&cpu3 3 7>,
+                                                        <&cpu4 3 12>,
+                                                        <&cpu5 3 12>,
+                                                        <&cpu6 3 12>,
+                                                        <&cpu7 3 12>;
                                };
                        };
                };
                        cooling-maps {
                                map0 {
                                        trip = <&cpu1_alert0>;
-                                       cooling-device = <&cpu0 0 2>;
+                                       cooling-device = <&cpu0 0 2>,
+                                                        <&cpu1 0 2>,
+                                                        <&cpu2 0 2>,
+                                                        <&cpu3 0 2>,
+                                                        <&cpu4 0 2>,
+                                                        <&cpu5 0 2>,
+                                                        <&cpu6 0 2>,
+                                                        <&cpu7 0 2>;
                                };
                                map1 {
-                                       trip = <&cpu1_alert0>;
-                                       cooling-device = <&cpu4 0 2>;
-                               };
-                               map2 {
-                                       trip = <&cpu1_alert1>;
-                                       cooling-device = <&cpu0 3 7>;
-                               };
-                               map3 {
                                        trip = <&cpu1_alert1>;
-                                       cooling-device = <&cpu4 3 12>;
+                                       cooling-device = <&cpu0 3 7>,
+                                                        <&cpu1 3 7>,
+                                                        <&cpu2 3 7>,
+                                                        <&cpu3 3 7>,
+                                                        <&cpu4 3 12>,
+                                                        <&cpu5 3 12>,
+                                                        <&cpu6 3 12>,
+                                                        <&cpu7 3 12>;
                                };
                        };
                };
                        cooling-maps {
                                map0 {
                                        trip = <&cpu2_alert0>;
-                                       cooling-device = <&cpu0 0 2>;
+                                       cooling-device = <&cpu0 0 2>,
+                                                        <&cpu1 0 2>,
+                                                        <&cpu2 0 2>,
+                                                        <&cpu3 0 2>,
+                                                        <&cpu4 0 2>,
+                                                        <&cpu5 0 2>,
+                                                        <&cpu6 0 2>,
+                                                        <&cpu7 0 2>;
                                };
                                map1 {
-                                       trip = <&cpu2_alert0>;
-                                       cooling-device = <&cpu4 0 2>;
-                               };
-                               map2 {
-                                       trip = <&cpu2_alert1>;
-                                       cooling-device = <&cpu0 3 7>;
-                               };
-                               map3 {
                                        trip = <&cpu2_alert1>;
-                                       cooling-device = <&cpu4 3 12>;
+                                       cooling-device = <&cpu0 3 7>,
+                                                        <&cpu1 3 7>,
+                                                        <&cpu2 3 7>,
+                                                        <&cpu3 3 7>,
+                                                        <&cpu4 3 12>,
+                                                        <&cpu5 3 12>,
+                                                        <&cpu6 3 12>,
+                                                        <&cpu7 3 12>;
                                };
                        };
                };
                        cooling-maps {
                                map0 {
                                        trip = <&cpu3_alert0>;
-                                       cooling-device = <&cpu0 0 2>;
+                                       cooling-device = <&cpu0 0 2>,
+                                                        <&cpu1 0 2>,
+                                                        <&cpu2 0 2>,
+                                                        <&cpu3 0 2>,
+                                                        <&cpu4 0 2>,
+                                                        <&cpu5 0 2>,
+                                                        <&cpu6 0 2>,
+                                                        <&cpu7 0 2>;
                                };
                                map1 {
-                                       trip = <&cpu3_alert0>;
-                                       cooling-device = <&cpu4 0 2>;
-                               };
-                               map2 {
-                                       trip = <&cpu3_alert1>;
-                                       cooling-device = <&cpu0 3 7>;
-                               };
-                               map3 {
                                        trip = <&cpu3_alert1>;
-                                       cooling-device = <&cpu4 3 12>;
+                                       cooling-device = <&cpu0 3 7>,
+                                                        <&cpu1 3 7>,
+                                                        <&cpu2 3 7>,
+                                                        <&cpu3 3 7>,
+                                                        <&cpu4 3 12>,
+                                                        <&cpu5 3 12>,
+                                                        <&cpu6 3 12>,
+                                                        <&cpu7 3 12>;
                                };
                        };
                };
index e522edb..b299e54 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Hardkernel Odroid XU3 board device tree source
+ * Hardkernel Odroid XU3/XU3-Lite/XU4 boards common device tree source
  *
  * Copyright (c) 2013 Samsung Electronics Co., Ltd.
  *             http://www.samsung.com
                                 */
                                map3 {
                                        trip = <&cpu0_alert3>;
-                                       cooling-device = <&cpu0 0 2>;
-                               };
-                               map4 {
-                                       trip = <&cpu0_alert3>;
-                                       cooling-device = <&cpu4 0 2>;
+                                       cooling-device = <&cpu0 0 2>,
+                                                        <&cpu1 0 2>,
+                                                        <&cpu2 0 2>,
+                                                        <&cpu3 0 2>,
+                                                        <&cpu4 0 2>,
+                                                        <&cpu5 0 2>,
+                                                        <&cpu6 0 2>,
+                                                        <&cpu7 0 2>;
                                };
                                /*
                                 * When reaching cpu0_alert4, reduce CPU
                                 * further, down to 600 MHz (12 steps for big,
                                 * 7 steps for LITTLE).
                                 */
-                               map5 {
-                                       trip = <&cpu0_alert4>;
-                                       cooling-device = <&cpu0 3 7>;
-                               };
-                               map6 {
+                               map4 {
                                        trip = <&cpu0_alert4>;
-                                       cooling-device = <&cpu4 3 12>;
+                                       cooling-device = <&cpu0 3 7>,
+                                                        <&cpu1 3 7>,
+                                                        <&cpu2 3 7>,
+                                                        <&cpu3 3 7>,
+                                                        <&cpu4 3 12>,
+                                                        <&cpu5 3 12>,
+                                                        <&cpu6 3 12>,
+                                                        <&cpu7 3 12>;
                                };
                        };
                };
                                };
                                map3 {
                                        trip = <&cpu1_alert3>;
-                                       cooling-device = <&cpu0 0 2>;
+                                       cooling-device = <&cpu0 0 2>,
+                                                        <&cpu1 0 2>,
+                                                        <&cpu2 0 2>,
+                                                        <&cpu3 0 2>,
+                                                        <&cpu4 0 2>,
+                                                        <&cpu5 0 2>,
+                                                        <&cpu6 0 2>,
+                                                        <&cpu7 0 2>;
                                };
                                map4 {
-                                       trip = <&cpu1_alert3>;
-                                       cooling-device = <&cpu4 0 2>;
-                               };
-                               map5 {
-                                       trip = <&cpu1_alert4>;
-                                       cooling-device = <&cpu0 3 7>;
-                               };
-                               map6 {
                                        trip = <&cpu1_alert4>;
-                                       cooling-device = <&cpu4 3 12>;
+                                       cooling-device = <&cpu0 3 7>,
+                                                        <&cpu1 3 7>,
+                                                        <&cpu2 3 7>,
+                                                        <&cpu3 3 7>,
+                                                        <&cpu4 3 12>,
+                                                        <&cpu5 3 12>,
+                                                        <&cpu6 3 12>,
+                                                        <&cpu7 3 12>;
                                };
                        };
                };
                                };
                                map3 {
                                        trip = <&cpu2_alert3>;
-                                       cooling-device = <&cpu0 0 2>;
+                                       cooling-device = <&cpu0 0 2>,
+                                                        <&cpu1 0 2>,
+                                                        <&cpu2 0 2>,
+                                                        <&cpu3 0 2>,
+                                                        <&cpu4 0 2>,
+                                                        <&cpu5 0 2>,
+                                                        <&cpu6 0 2>,
+                                                        <&cpu7 0 2>;
                                };
                                map4 {
-                                       trip = <&cpu2_alert3>;
-                                       cooling-device = <&cpu4 0 2>;
-                               };
-                               map5 {
-                                       trip = <&cpu2_alert4>;
-                                       cooling-device = <&cpu0 3 7>;
-                               };
-                               map6 {
                                        trip = <&cpu2_alert4>;
-                                       cooling-device = <&cpu4 3 12>;
+                                       cooling-device = <&cpu0 3 7>,
+                                                        <&cpu1 3 7>,
+                                                        <&cpu2 3 7>,
+                                                        <&cpu3 3 7>,
+                                                        <&cpu4 3 12>,
+                                                        <&cpu5 3 12>,
+                                                        <&cpu6 3 12>,
+                                                        <&cpu7 3 12>;
                                };
                        };
                };
                                };
                                map3 {
                                        trip = <&cpu3_alert3>;
-                                       cooling-device = <&cpu0 0 2>;
+                                       cooling-device = <&cpu0 0 2>,
+                                                        <&cpu1 0 2>,
+                                                        <&cpu2 0 2>,
+                                                        <&cpu3 0 2>,
+                                                        <&cpu4 0 2>,
+                                                        <&cpu5 0 2>,
+                                                        <&cpu6 0 2>,
+                                                        <&cpu7 0 2>;
                                };
                                map4 {
-                                       trip = <&cpu3_alert3>;
-                                       cooling-device = <&cpu4 0 2>;
-                               };
-                               map5 {
-                                       trip = <&cpu3_alert4>;
-                                       cooling-device = <&cpu0 3 7>;
-                               };
-                               map6 {
                                        trip = <&cpu3_alert4>;
-                                       cooling-device = <&cpu4 3 12>;
+                                       cooling-device = <&cpu0 3 7>,
+                                                        <&cpu1 3 7>,
+                                                        <&cpu2 3 7>,
+                                                        <&cpu3 3 7>,
+                                                        <&cpu4 3 12>,
+                                                        <&cpu5 3 12>,
+                                                        <&cpu6 3 12>,
+                                                        <&cpu7 3 12>;
                                };
                        };
                };
        cap-mmc-highspeed;
        mmc-hs200-1_8v;
        mmc-hs400-1_8v;
+       max-frequency = <200000000>;
        vmmc-supply = <&ldo18_reg>;
        vqmmc-supply = <&ldo3_reg>;
 };
diff --git a/arch/arm/boot/dts/facebook-bmc-flash-layout.dtsi b/arch/arm/boot/dts/facebook-bmc-flash-layout.dtsi
new file mode 100644 (file)
index 0000000..87bb8b5
--- /dev/null
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0+
+// Copyright (c) 2018 Facebook Inc.
+
+partitions {
+       compatible = "fixed-partitions";
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       u-boot@0 {
+               reg = <0x0 0x60000>;
+               label = "u-boot";
+       };
+
+       u-boot-env@60000 {
+               reg = <0x60000 0x20000>;
+               label = "env";
+       };
+
+       fit@80000 {
+               reg = <0x80000 0x1b80000>;
+               label = "fit";
+       };
+
+       /*
+        * "data0" partition is used by several Facebook BMC platforms
+        * as persistent data store.
+        */
+       data0@1c00000 {
+               reg = <0x1c00000 0x400000>;
+               label = "data0";
+       };
+
+       /*
+        * Although the master partition can be created by enabling
+        * MTD_PARTITIONED_MASTER option, below "flash0" partition is
+        * explicitly created to avoid breaking legacy applications.
+        */
+       flash0@0 {
+               reg = <0x0 0x2000000>;
+               label = "flash0";
+       };
+};
index b560ff8..5ff9a17 100644 (file)
@@ -55,7 +55,7 @@
        };
 
        chosen {
-               stdout-path = "&uart1:115200n8";
+               stdout-path = "serial0:115200n8";
        };
 
        memory@70000000 {
index 1292d9f..62847c6 100644 (file)
                        i2c1: i2c@21a0000 {
                                #address-cells = <1>;
                                #size-cells = <0>;
-                               compatible = "fs,imx6sll-i2c", "fsl,imx21-i2c";
+                               compatible = "fsl,imx6sll-i2c", "fsl,imx21-i2c";
                                reg = <0x021a0000 0x4000>;
                                interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
                                clocks = <&clks IMX6SLL_CLK_I2C1>;
index a146f86..08ede56 100644 (file)
                regulator-name = "enet_3v3";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
-               gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio2 6 GPIO_ACTIVE_LOW>;
+               regulator-boot-on;
+               regulator-always-on;
        };
 
        reg_pcie_gpio: regulator-pcie-gpio {
        phy-supply = <&reg_enet_3v3>;
        phy-mode = "rgmii";
        phy-handle = <&ethphy1>;
+       phy-reset-gpios = <&gpio2 7 GPIO_ACTIVE_LOW>;
        status = "okay";
 
        mdio {
                                MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3   0x3081
                                MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN    0x3081
                                MX6SX_PAD_ENET2_RX_CLK__ENET2_REF_CLK_25M       0x91
+                               /* phy reset */
+                               MX6SX_PAD_ENET2_CRS__GPIO2_IO_7         0x10b0
                        >;
                };
 
index ca9154d..e2b1ab9 100644 (file)
        status = "okay";
 };
 
+&cmt0 {
+       status = "okay";
+};
+
 &hsusb {
        status = "okay";
        pinctrl-0 = <&usb0_pins>;
        };
 };
 
+&rwdt {
+       timeout-sec = <60>;
+       status = "okay";
+};
+
 &scif0 {
        pinctrl-0 = <&scif0_pins>;
        pinctrl-names = "default";
index 0d9faf1..0839da0 100644 (file)
                                interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
                        };
 
-                       timer@9940 {
+                       timer_abcde: timer@9940 {
                                compatible = "amlogic,meson6-timer";
                                reg = <0x9940 0x18>;
-                               interrupts = <GIC_SPI 10 IRQ_TYPE_EDGE_RISING>;
+                               interrupts = <GIC_SPI 10 IRQ_TYPE_EDGE_RISING>,
+                                            <GIC_SPI 11 IRQ_TYPE_EDGE_RISING>,
+                                            <GIC_SPI 6 IRQ_TYPE_EDGE_RISING>,
+                                            <GIC_SPI 29 IRQ_TYPE_EDGE_RISING>;
                        };
                };
 
index 9444b0d..fc48cff 100644 (file)
                serial0 = &uart_AO;
        };
 
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
        memory {
                reg = <0x40000000 0x80000000>;
        };
index 9b46321..ca978ab 100644 (file)
        status = "disabled";
 };
 
+&timer_abcde {
+       clocks = <&xtal>, <&clk81>;
+       clock-names = "xtal", "pclk";
+};
+
 &uart_AO {
        clocks = <&xtal>, <&clk81>, <&clk81>;
        clock-names = "xtal", "pclk", "baud";
index 8bceb8d..55fb090 100644 (file)
                serial0 = &uart_AO;
        };
 
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
        memory {
                reg = <0x40000000 0x80000000>;
        };
index 7162e0c..3be5fbd 100644 (file)
                        mux {
                                groups = "uart_tx_ao_a", "uart_rx_ao_a";
                                function = "uart_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2c_mst_sck_ao", "i2c_mst_sda_ao";
                                function = "i2c_mst_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "remote_input";
                                function = "remote";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_f_ao";
                                function = "pwm_f_ao";
+                               bias-disable;
                        };
                };
        };
                                groups = "sd_d0_a", "sd_d1_a", "sd_d2_a",
                                        "sd_d3_a", "sd_clk_a", "sd_cmd_a";
                                function = "sd_a";
+                               bias-disable;
                        };
                };
 
                                groups = "sd_d0_b", "sd_d1_b", "sd_d2_b",
                                        "sd_d3_b", "sd_clk_b", "sd_cmd_b";
                                function = "sd_b";
+                               bias-disable;
                        };
                };
 
                                groups = "sd_d0_c", "sd_d1_c", "sd_d2_c",
                                        "sd_d3_c", "sd_clk_c", "sd_cmd_c";
                                function = "sd_c";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "nor_d", "nor_q", "nor_c", "nor_cs";
                                function = "nor";
+                               bias-disable;
                        };
                };
 
                                         "eth_rxd1", "eth_rxd0", "eth_mdio",
                                         "eth_mdc";
                                function = "ethernet";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_e";
                                function = "pwm_e";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_tx_a1",
                                       "uart_rx_a1";
                                function = "uart_a";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_a1",
                                       "uart_rts_a1";
                                function = "uart_a";
+                               bias-disable;
                        };
                };
        };
        clocks = <&clkc CLKID_CLK81>;
 };
 
+&timer_abcde {
+       clocks = <&clkc CLKID_XTAL>, <&clkc CLKID_CLK81>;
+       clock-names = "xtal", "pclk";
+};
+
 &uart_AO {
        compatible = "amlogic,meson8-uart", "amlogic,meson-uart";
        clocks = <&clkc CLKID_CLK81>, <&clkc CLKID_XTAL>, <&clkc CLKID_CLK81>;
index c7fdaea..5c9b76a 100644 (file)
                serial0 = &uart_AO;
        };
 
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
        memory {
                reg = <0x40000000 0x40000000>;
        };
index cd1ca9d..587a855 100644 (file)
                        mux {
                                groups = "uart_tx_ao_a", "uart_rx_ao_a";
                                function = "uart_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "remote_input";
                                function = "remote";
+                               bias-disable;
                        };
                };
        };
                                         "eth_txd2",
                                         "eth_txd3";
                                function = "ethernet";
+                               bias-disable;
                        };
                };
 
                                         "eth_mdio_en",
                                         "eth_mdc";
                                function = "ethernet";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2c_sda_a", "i2c_sck_a";
                                function = "i2c_a";
+                               bias-disable;
                        };
                };
 
                                groups = "sd_d0_b", "sd_d1_b", "sd_d2_b",
                                        "sd_d3_b", "sd_clk_b", "sd_cmd_b";
                                function = "sd_b";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_c1";
                                function = "pwm_c";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_tx_b0",
                                       "uart_rx_b0";
                                function = "uart_b";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_b0",
                                       "uart_rts_b0";
                                function = "uart_b";
+                               bias-disable;
                        };
                };
        };
        clock-names = "core", "clkin";
 };
 
+&timer_abcde {
+       clocks = <&clkc CLKID_XTAL>, <&clkc CLKID_CLK81>;
+       clock-names = "xtal", "pclk";
+};
+
 &uart_AO {
        compatible = "amlogic,meson8b-uart", "amlogic,meson-uart";
        clocks = <&clkc CLKID_CLK81>, <&clkc CLKID_XTAL>, <&clkc CLKID_CLK81>;
index 3e1f922..d1a28c2 100644 (file)
@@ -45,6 +45,7 @@
                                 "eth_rxd1", "eth_rxd0",
                                 "eth_mdio", "eth_mdc";
                        function = "ethernet";
+                       bias-disable;
                };
        };
 };
index 766bbb8..ee03e08 100644 (file)
                                reg-names = "mux status", "mux mask";
                                mrvl,intc-nr-irqs = <2>;
                        };
+
+                       usb_otg_phy0: usb-otg-phy@d4207000 {
+                               compatible = "marvell,mmp2-usb-phy";
+                               reg = <0xd4207000 0x40>;
+                               #phy-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       usb_otg0: usb-otg@d4208000 {
+                               compatible = "marvell,pxau2o-ehci";
+                               reg = <0xd4208000 0x200>;
+                               interrupts = <44>;
+                               clocks = <&soc_clocks MMP2_CLK_USB>;
+                               clock-names = "USBCLK";
+                               phys = <&usb_otg_phy0>;
+                               phy-names = "usb";
+                               status = "disabled";
+                       };
+
+                       mmc1: mmc@d4280000 {
+                               compatible = "mrvl,pxav3-mmc";
+                               reg = <0xd4280000 0x120>;
+                               clocks = <&soc_clocks MMP2_CLK_SDH0>;
+                               clock-names = "io";
+                               interrupts = <39>;
+                               status = "disabled";
+                       };
+
+                       mmc2: mmc@d4280800 {
+                               compatible = "mrvl,pxav3-mmc";
+                               reg = <0xd4280800 0x120>;
+                               clocks = <&soc_clocks MMP2_CLK_SDH1>;
+                               clock-names = "io";
+                               interrupts = <52>;
+                               status = "disabled";
+                       };
+
+                       mmc3: mmc@d4281000 {
+                               compatible = "mrvl,pxav3-mmc";
+                               reg = <0xd4281000 0x120>;
+                               clocks = <&soc_clocks MMP2_CLK_SDH2>;
+                               clock-names = "io";
+                               interrupts = <53>;
+                               status = "disabled";
+                       };
+
+                       mmc4: mmc@d4281800 {
+                               compatible = "mrvl,pxav3-mmc";
+                               reg = <0xd4281800 0x120>;
+                               clocks = <&soc_clocks MMP2_CLK_SDH3>;
+                               clock-names = "io";
+                               interrupts = <54>;
+                               status = "disabled";
+                       };
                };
 
                apb@d4000000 {  /* APB */
                                compatible = "mrvl,mmp-timer";
                                reg = <0xd4014000 0x100>;
                                interrupts = <13>;
+                               clocks = <&soc_clocks MMP2_CLK_TIMER>;
                        };
 
                        uart1: uart@d4030000 {
                                status = "disabled";
                        };
 
-                       gpio@d4019000 {
+                       gpio: gpio@d4019000 {
                                compatible = "marvell,mmp2-gpio";
                                #address-cells = <1>;
                                #size-cells = <1>;
                                clocks = <&soc_clocks MMP2_CLK_GPIO>;
                                resets = <&soc_clocks MMP2_CLK_GPIO>;
                                interrupt-controller;
-                               #interrupt-cells = <1>;
+                               #interrupt-cells = <2>;
                                ranges;
 
                                gcb0: gpio@d4019000 {
                                status = "disabled";
                        };
 
-                       twsi2: i2c@d4025000 {
+                       twsi2: i2c@d4031000 {
                                compatible = "mrvl,mmp-twsi";
-                               reg = <0xd4025000 0x1000>;
-                               interrupts = <58>;
+                               reg = <0xd4031000 0x1000>;
+                               interrupt-parent = <&intcmux17>;
+                               interrupts = <0>;
                                clocks = <&soc_clocks MMP2_CLK_TWSI1>;
                                resets = <&soc_clocks MMP2_CLK_TWSI1>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       twsi3: i2c@d4032000 {
+                               compatible = "mrvl,mmp-twsi";
+                               reg = <0xd4032000 0x1000>;
+                               interrupt-parent = <&intcmux17>;
+                               interrupts = <1>;
+                               clocks = <&soc_clocks MMP2_CLK_TWSI2>;
+                               resets = <&soc_clocks MMP2_CLK_TWSI2>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       twsi4: i2c@d4033000 {
+                               compatible = "mrvl,mmp-twsi";
+                               reg = <0xd4033000 0x1000>;
+                               interrupt-parent = <&intcmux17>;
+                               interrupts = <2>;
+                               clocks = <&soc_clocks MMP2_CLK_TWSI3>;
+                               resets = <&soc_clocks MMP2_CLK_TWSI3>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+
+                       twsi5: i2c@d4033800 {
+                               compatible = "mrvl,mmp-twsi";
+                               reg = <0xd4033800 0x1000>;
+                               interrupt-parent = <&intcmux17>;
+                               interrupts = <3>;
+                               clocks = <&soc_clocks MMP2_CLK_TWSI4>;
+                               resets = <&soc_clocks MMP2_CLK_TWSI4>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       twsi6: i2c@d4034000 {
+                               compatible = "mrvl,mmp-twsi";
+                               reg = <0xd4034000 0x1000>;
+                               interrupt-parent = <&intcmux17>;
+                               interrupts = <4>;
+                               clocks = <&soc_clocks MMP2_CLK_TWSI5>;
+                               resets = <&soc_clocks MMP2_CLK_TWSI5>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
                                status = "disabled";
                        };
 
                                resets = <&soc_clocks MMP2_CLK_RTC>;
                                status = "disabled";
                        };
+
+                       ssp1: ssp@d4035000 {
+                               compatible = "marvell,mmp2-ssp";
+                               reg = <0xd4035000 0x1000>;
+                               clocks = <&soc_clocks MMP2_CLK_SSP0>;
+                               interrupts = <0>;
+                               status = "disabled";
+                       };
+
+                       ssp2: ssp@d4036000 {
+                               compatible = "marvell,mmp2-ssp";
+                               reg = <0xd4036000 0x1000>;
+                               clocks = <&soc_clocks MMP2_CLK_SSP1>;
+                               interrupts = <1>;
+                               status = "disabled";
+                       };
+
+                       ssp3: ssp@d4037000 {
+                               compatible = "marvell,mmp2-ssp";
+                               reg = <0xd4037000 0x1000>;
+                               clocks = <&soc_clocks MMP2_CLK_SSP2>;
+                               interrupts = <20>;
+                               status = "disabled";
+                       };
+
+                       ssp4: ssp@d4039000 {
+                               compatible = "marvell,mmp2-ssp";
+                               reg = <0xd4039000 0x1000>;
+                               clocks = <&soc_clocks MMP2_CLK_SSP3>;
+                               interrupts = <21>;
+                               status = "disabled";
+                       };
                };
 
                soc_clocks: clocks{
index d5fe553..e53d326 100644 (file)
                        OMAP3_CORE1_IOPAD(0x2190, PIN_OUTPUT | MUX_MODE0)       /* mcbsp1_dx.mcbsp1_dx */
                        OMAP3_CORE1_IOPAD(0x2192, PIN_INPUT | MUX_MODE0)        /* mcbsp1_dx.mcbsp1_dr */
                        /* mcbsp_clks is used as PENIRQ */
-                       /* OMAP3_CORE1_IOPAD(0x2194, PIN_INPUT | MUX_MODE0)     /* mcbsp_clks.mcbsp_clks */
+                       /* OMAP3_CORE1_IOPAD(0x2194, PIN_INPUT | MUX_MODE0)        mcbsp_clks.mcbsp_clks */
                        OMAP3_CORE1_IOPAD(0x2196, PIN_INPUT | MUX_MODE0)        /* mcbsp_clks.mcbsp1_fsx */
                        OMAP3_CORE1_IOPAD(0x2198, PIN_INPUT | MUX_MODE0)        /* mcbsp1_clkx.mcbsp1_clkx */
                >;
index 3228ad5..ccbecad 100644 (file)
@@ -35,7 +35,7 @@
                        clocks = <&clks CLK_NONE>;
                };
 
-               pxa27x_ohci: usb@4c000000 {
+               usb0: usb@4c000000 {
                        compatible = "marvell,pxa-ohci";
                        reg = <0x4c000000 0x10000>;
                        interrupts = <3>;
index 080d5c5..e83879d 100644 (file)
@@ -43,8 +43,6 @@
        };
 
        cpus {
-               #address-cells = <0>;
-               #size-cells = <0>;
                cpu {
                        compatible = "marvell,xscale";
                        device_type = "cpu";
                        status = "disabled";
                };
 
-               hwuart: serial@41100000 {
+               hwuart: serial@41600000 {
                        compatible = "mrvl,pxa-uart";
-                       reg = <0x41100000 0x30>;
+                       reg = <0x41600000 0x30>;
                        interrupts = <7>;
                        status = "disabled";
                };
                        status = "disabled";
                };
 
-               usb0: ohci@4c000000 {
-                       compatible = "marvell,pxa-ohci";
-                       reg = <0x4c000000 0x10000>;
-                       interrupts = <3>;
-                       status = "disabled";
-               };
-
                mmc0: mmc@41100000 {
                        compatible = "marvell,pxa-mmc";
                        reg = <0x41100000 0x1000>;
diff --git a/arch/arm/boot/dts/pxa300-raumfeld-common.dtsi b/arch/arm/boot/dts/pxa300-raumfeld-common.dtsi
new file mode 100644 (file)
index 0000000..8ac24e3
--- /dev/null
@@ -0,0 +1,405 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include "pxa3xx.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+
+/ {
+       /* Will be overridden by bootloader */
+       hw-revision = <0>;
+
+       chosen {
+               bootargs = "root=ubi0:RootFS rootfstype=ubifs rw ubi.mtd=3";
+               stdout-path = &ffuart;
+       };
+
+       memory {
+               device_type = "memory";
+               reg = <0xa0000000 0x8000000>;   /* 128 MB */
+       };
+
+       reg_3v3: regulator-3v3 {
+               compatible = "regulator-fixed";
+               regulator-name = "3v3-fixed-supply";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
+
+       reg_1v8: regulator-1v8 {
+               compatible = "regulator-fixed";
+               regulator-name = "1v8-fixed-supply";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
+       };
+
+       reg_va_5v0: regulator-va-5v0 {
+               compatible = "regulator-fixed";
+               regulator-name = "va-5v0-fixed-supply";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio 124 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       ssp_dai0: ssp-dai0 {
+               compatible = "mrvl,pxa-ssp-dai";
+               pinctrl-names = "default";
+               pinctrl-0 = <&ssp0_dai_pins>;
+               port = <&ssp1>;
+               #sound-dai-cells = <0>;
+               dmas = <&pdma 13 3
+                       &pdma 14 3>;
+               dma-names = "rx", "tx";
+               clock-names = "extclk";
+       };
+
+       ssp_dai1: ssp-dai1 {
+               compatible = "mrvl,pxa-ssp-dai";
+               pinctrl-names = "default";
+               pinctrl-0 = <&ssp1_dai_pins>;
+               port = <&ssp2>;
+               #sound-dai-cells = <0>;
+               dmas = <&pdma 15 3
+                       &pdma 16 3>;
+               dma-names = "rx", "tx";
+               clock-names = "extclk";
+       };
+
+       spi: spi {
+               compatible = "spi-gpio";
+               #address-cells = <0x1>;
+               #size-cells = <0>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&spi_pins>;
+               gpio-sck = <&gpio 95 GPIO_ACTIVE_HIGH>;
+               gpio-miso = <&gpio 98 GPIO_ACTIVE_HIGH>;
+               gpio-mosi = <&gpio 97 GPIO_ACTIVE_HIGH>;
+               cs-gpios = <
+                       &gpio 34 GPIO_ACTIVE_HIGH
+                       &gpio 125 GPIO_ACTIVE_HIGH
+                       &gpio 96 GPIO_ACTIVE_HIGH
+               >;
+               num-chipselects = <3>;
+
+               dac: dac@2 {
+                       compatible = "ti,dac7512";
+                       reg = <2>;
+                       spi-max-frequency = <1000000>;
+                       vcc-supply = <&reg_3v3>;
+               };
+       };
+
+       keys: gpio-keys {
+               compatible = "gpio-keys";
+               pinctrl-names = "default";
+               pinctrl-0 = <&gpio_keys_pins>;
+
+               on-off {
+                       label = "on_off button";
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_F6>;
+               };
+
+               rescue-boot {
+                       label = "rescue boot button";
+                       gpios = <&gpio 115 GPIO_ACTIVE_HIGH>;
+                       linux,code = <KEY_F4>;
+               };
+
+               setup {
+                       label = "setup";
+                       gpios = <&gpio 119 GPIO_ACTIVE_HIGH>;
+                       linux,code = <KEY_F3>;
+               };
+       };
+
+       rotary: rotary-encoder {
+               compatible = "rotary-encoder";
+               gpios = <
+                       &gpio 19 GPIO_ACTIVE_LOW
+                       &gpio 20 GPIO_ACTIVE_HIGH
+               >;
+               linux,axis = <REL_X>;
+               rotary-encoder,relative-axis;
+       };
+
+       leds: leds {
+               compatible = "gpio-leds";
+               pinctrl-names = "default";
+               pinctrl-0 = <&led_pins_a &led_pins_b>;
+
+               left {
+                       label = "raumfeld:1";
+                       gpios = <&gpio 36 GPIO_ACTIVE_LOW>;
+               };
+
+               right {
+                       label = "raumfeld:2";
+                       gpios = <&gpio 35 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       poweroff {
+               compatible = "gpio-poweroff";
+               pinctrl-names = "default";
+               pinctrl-0 = <&poweroff_pins>;
+               gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
+       };
+
+       mmc0_pwrseq: mmc-pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               pinctrl-names = "default";
+               pinctrl-0 = <&mmc0_pwrseq_pins>;
+               reset-gpios = <
+                       &gpio 113 GPIO_ACTIVE_LOW       /* W2W_RESET    */
+                       &gpio 114 GPIO_ACTIVE_LOW       /* W2W_PDN      */
+               >;
+       };
+
+       ethernet: ethernet@10000000 {
+               compatible = "smsc,lan9115";
+               pinctrl-names = "default";
+               pinctrl-0 = <&smsc_pins &smsc_bus_pins>;
+               reg = <0x10000000 0x100000>;
+               phy-mode = "mii";
+               interrupt-parent = <&gpio>;
+               interrupts = <40 IRQ_TYPE_EDGE_FALLING>;
+               vdd33a-supply = <&reg_3v3>;
+               vddvario-supply = <&reg_1v8>;
+               reset-gpios = <&gpio 39 GPIO_ACTIVE_LOW>;
+               reg-io-width = <4>;
+               smsc,save-mac-address;
+               smsc,irq-push-pull;
+       };
+};
+
+&ffuart {
+       status = "okay";
+};
+
+&pwri2c {
+       status = "okay";
+
+       max8660: regulator@34 {
+               compatible = "maxim,max8660";
+               reg = <0x34>;
+
+               regulators {
+                       regulator-v3 {
+                               regulator-compatible= "V3(DCDC)";
+                               regulator-min-microvolt = <725000>;
+                               regulator-max-microvolt = <1800000>;
+                       };
+
+                       regulator-v4 {
+                               regulator-compatible= "V4(DCDC)";
+                               regulator-min-microvolt = <725000>;
+                               regulator-max-microvolt = <1800000>;
+                       };
+
+                       regulator-v5 {
+                               regulator-compatible= "V5(LDO)";
+                               regulator-min-microvolt = <1700000>;
+                               regulator-max-microvolt = <2000000>;
+                       };
+
+                       reg_vcc_sdio: regulator-v6 {
+                               regulator-compatible= "V6(LDO)";
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                       };
+
+                       regulator-v7 {
+                               regulator-compatible= "V7(LDO)";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                       };
+               };
+       };
+};
+
+&pxai2c1 {
+       status = "okay";
+       mrvl,i2c-fast-mode;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pxai2c1_pins>;
+};
+
+&ssp1 {
+       status = "okay";
+};
+
+&ssp2 {
+       status = "okay";
+};
+
+&nand_controller {
+       status = "okay";
+
+       nand@0 {
+               reg = <0>;
+               nand-rb = <0>;
+               nand-ecc-mode = "hw";
+               marvell,nand-keep-config;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "Bootloader";
+                               reg = <0x0000000 0xa0000>;
+                               read-only;
+                       };
+
+                       partition@a0000 {
+                               label = "BootloaderEnvironment";
+                               reg = <0x0a0000 0x20000>;
+                       };
+
+                       partition@c0000 {
+                               label = "BootloaderSplashScreen";
+                               reg = <0x0c0000 0x60000>;
+                       };
+
+                       partition@120000 {
+                               label = "UBI";
+                               reg = <0x120000 0x7ee0000>;
+                       };
+               };
+       };
+};
+
+&usb0 {
+       status = "okay";
+       marvell,enable-port1;
+       marvell,port-mode = <2>; /* PMM_GLOBAL_MODE */
+       pinctrl-names = "default";
+       pinctrl-0 = <&pxa3xx_ohci_pins>;
+};
+
+&mmc0 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc0_pins>;
+       pxa-mmc,detect-delay-ms = <200>;
+       vmmc-supply = <&reg_vcc_sdio>;
+       mmc-pwrseq = <&mmc0_pwrseq>;
+       non-removable;
+       bus-width = <4>;
+};
+
+&pinctrl {
+       poweroff_pins: poweroff-pins {
+               pinctrl-single,pins = <MFP_PIN_PXA300(16) MFP_AF0>;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
+       };
+
+       led_pins_a: led-pins-a {
+               pinctrl-single,pins = <MFP_PIN_PXA300(35) MFP_AF0>;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+
+       led_pins_b: led-pins-b {
+               pinctrl-single,pins = <MFP_PIN_PXA300(36) MFP_AF0>;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_DRIVE_HIGH);
+       };
+
+       pxai2c1_pins: pxai2c1-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(21) MFP_AF1      /* I2C_SCL      */
+                       MFP_PIN_PXA300(22) MFP_AF1      /* I2C_SDA      */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_HIGH);
+       };
+
+       gpio_keys_pins: gpio-keys-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(14) MFP_AF0      /* SCK          */
+                       MFP_PIN_PXA300(115) MFP_AF0     /* MOSI         */
+                       MFP_PIN_PXA300(119) MFP_AF0     /* MISO         */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
+       };
+
+       spi_pins: spi-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(95) MFP_AF0      /* SCK          */
+                       MFP_PIN_PXA300(97) MFP_AF0      /* MOSI         */
+                       MFP_PIN_PXA300(98) MFP_AF0      /* MISO         */
+                       MFP_PIN_PXA300(34) MFP_AF0      /* CS#0         */
+                       MFP_PIN_PXA300(125) MFP_AF0     /* CS#1         */
+                       MFP_PIN_PXA300(96) MFP_AF0      /* CS#2         */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+
+       pxa3xx_ohci_pins: pxa3xx-ohci-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300_2(0) MFP_AF1     /* USBHPEN      */
+                       MFP_PIN_PXA300_2(1) MFP_AF1     /* USBHPWR      */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+
+       smsc_pins: smsc-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(39) MFP_AF0      /* RESET        */
+                       MFP_PIN_PXA300(40) MFP_AF0      /* IRQ          */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+
+       smsc_bus_pins: smsc-bus-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(1) MFP_AF1       /* nCS2         */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
+       };
+
+       mmc0_pins: mmc0-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(3) MFP_AF4       /* MMC1_DAT0    */
+                       MFP_PIN_PXA300(4) MFP_AF4       /* MMC1_DAT1    */
+                       MFP_PIN_PXA300(5) MFP_AF4       /* MMC1_DAT2    */
+                       MFP_PIN_PXA300(6) MFP_AF4       /* MMC1_DAT3    */
+                       MFP_PIN_PXA300(7) MFP_AF4       /* MMC1_CLK     */
+                       MFP_PIN_PXA300(8) MFP_AF4       /* MMC1_CMD     */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_DRIVE_HIGH);
+       };
+
+       mmc0_pwrseq_pins: mmc0-pwrseq-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(113) MFP_AF0     /* W2W_RESET    */
+                       MFP_PIN_PXA300(114) MFP_AF0     /* W2W_PDN      */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
+       };
+
+       ssp0_dai_pins: ssp0-dai-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(85) MFP_AF1      /* SSP1_SCLK    */
+                       MFP_PIN_PXA300(86) MFP_AF1      /* SSP1_FRM     */
+                       MFP_PIN_PXA300(87) MFP_AF1      /* SSP1_TXD     */
+                       MFP_PIN_PXA300(88) MFP_AF1      /* SSP1_RXD     */
+                       MFP_PIN_PXA300(89) MFP_AF1      /* SSP1_EXTCLK  */
+                       MFP_PIN_PXA300(90) MFP_AF1      /* SSP1_SYSCLK  */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+
+       ssp1_dai_pins: ssp1-dai-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(25) MFP_AF2      /* SSP2_SCLK    */
+                       MFP_PIN_PXA300(26) MFP_AF2      /* SSP2_FRM     */
+                       MFP_PIN_PXA300(27) MFP_AF2      /* SSP2_TXD     */
+                       MFP_PIN_PXA300(29) MFP_AF2      /* SSP2_EXTCLK  */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+};
diff --git a/arch/arm/boot/dts/pxa300-raumfeld-connector.dts b/arch/arm/boot/dts/pxa300-raumfeld-connector.dts
new file mode 100644 (file)
index 0000000..3e94454
--- /dev/null
@@ -0,0 +1,73 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/dts-v1/;
+
+#include "pxa300-raumfeld-common.dtsi"
+#include "pxa300-raumfeld-tuneable-clock.dtsi"
+
+/ {
+       model = "Raumfeld Connector (PXA3xx)";
+       compatible = "raumfeld,raumfeld-connector-pxa303", "marvell,pxa300";
+
+       sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "Raumfeld Connector";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               simple-audio-card,dai-link@0 {
+                       reg = <0>;
+                       format = "i2s";
+                       bitclock-master = <&dailink_master_analog>;
+                       frame-master = <&dailink_master_analog>;
+                       mclk-fs = <256>;
+
+                       dailink_master_analog: cpu {
+                               sound-dai = <&ssp_dai0>;
+                       };
+
+                       codec {
+                               sound-dai = <&cs4270>;
+                       };
+               };
+
+               simple-audio-card,dai-link@1 {
+                       reg = <1>;
+                       format = "i2s";
+                       bitclock-master = <&dailink_master_digital>;
+                       frame-master = <&dailink_master_digital>;
+                       mclk-fs = <256>;
+
+                       dailink_master_digital: cpu {
+                               sound-dai = <&ssp_dai1>;
+                       };
+
+                       codec {
+                               sound-dai = <&ak4104>;
+                       };
+               };
+       };
+};
+
+&ssp1 {
+       status = "okay";
+};
+
+&ssp2 {
+       status = "okay";
+};
+
+&spi {
+       ak4104: optical-transmitter@0 {
+               compatible = "asahi-kasei,ak4104";
+               reg = <0>;
+               vdd-supply = <&reg_3v3>;
+               spi-max-frequency = <5000000>;
+               reset-gpios = <&gpio 38 GPIO_ACTIVE_HIGH>;
+               #sound-dai-cells = <0>;
+       };
+};
+
+&rotary {
+       status = "disabled";
+};
diff --git a/arch/arm/boot/dts/pxa300-raumfeld-controller.dts b/arch/arm/boot/dts/pxa300-raumfeld-controller.dts
new file mode 100644 (file)
index 0000000..65d8250
--- /dev/null
@@ -0,0 +1,266 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/dts-v1/;
+
+#include "pxa300-raumfeld-common.dtsi"
+
+/ {
+       model = "Raumfeld Controller (PXA3xx)";
+       compatible = "raumfeld,raumfeld-controller-pxa303", "marvell,pxa300";
+
+       reg_vbatt: regulator-vbatt {
+               compatible = "regulator-fixed";
+               regulator-name = "vbatt-fixed-supply";
+               regulator-min-microvolt = <3700000>;
+               regulator-max-microvolt = <3700000>;
+               regulator-always-on;
+       };
+
+       lcd_supply: regulator-va-tft {
+               compatible = "regulator-fixed";
+               regulator-name = "va-tft-fixed-supply";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio 33 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       onewire {
+               compatible = "w1-gpio";
+               pinctrl-names = "default";
+               pinctrl-0 = <&w1_pins>;
+               gpios = <
+                       &gpio 126 GPIO_OPEN_DRAIN       /* W1 I/O       */
+                       &gpio 105 GPIO_ACTIVE_HIGH      /* pullup       */
+               >;
+
+               w1_ds2760: slave-ds2760 {
+                       compatible = "maxim,ds2760";
+                       power-supplies = <&charger>;
+               };
+       };
+
+       charger: charger {
+               compatible = "gpio-charger";
+               charger-type = "mains";
+               gpios = <&gpio 101 GPIO_ACTIVE_LOW>;
+       };
+
+       /*
+        * One of the following two will be set to "okay" by the bootloader,
+        * depending on the hardware revision.
+        */
+       backlight-controller-pwm {
+               compatible = "pwm-backlight";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pwm0_pins>;
+               pwms = <&pwm0 10000>;
+               power-supply = <&reg_vbatt>;
+               status = "disabled";
+
+               brightness-levels = <
+                        0  1  2  3  4  5  6  7  8  9
+                       10 11 12 13 14 15 16 17 18 19
+                       20 21 22 23 24 25 26 27 28 29
+                       30 31 32 33 34 35 36 37 38 39
+                       40 41 42 43 44 45 46 47 48 49
+                       50 51 52 53 54 55 56 57 58 59
+                       60 61 62 63 64 65 66 67 68 69
+                       70 71 72 73 74 75 76 77 78 79
+                       80 81 82 83 84 85 86 87 88 89
+                       90 91 92 93 94 95 96 97 98 99
+                       100
+               >;
+               default-brightness-level = <100>;
+       };
+
+       backlight-controller {
+               compatible = "lltc,lt3593";
+               pinctrl-names = "default";
+               pinctrl-0 = <&lt3593_pins>;
+               lltc,ctrl-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
+               status = "disabled";
+
+               led {
+                       label = "backlight";
+                       default-state = "on";
+               };
+       };
+};
+
+&reg_va_5v0 {
+       status = "disabled";
+};
+
+&ethernet {
+       status = "disabled";
+};
+
+&leds {
+       status = "disabled";
+};
+
+&dac {
+       status = "disabled";
+};
+
+&pwm0 {
+       status = "okay";
+};
+
+&keys {
+       dock-detect {
+               label = "dock detect";
+               gpios = <&gpio 116 GPIO_ACTIVE_HIGH>;
+               linux,code = <KEY_F5>;
+       };
+};
+
+&spi {
+       accelerometer@1 {
+               compatible = "st,lis302dl-spi";
+               pinctrl-names = "default";
+               pinctrl-0 = <&lis302_pins>;
+               reg = <1>;
+               spi-max-frequency = <1000000>;
+               interrupt-parent = <&gpio>;
+               interrupts = <104 IRQ_TYPE_EDGE_FALLING>;
+
+               st,click-single-x;
+               st,click-single-y;
+               st,click-single-z;
+               st,click-thresh-x = <10>;
+               st,click-thresh-y = <10>;
+               st,click-thresh-z = <10>;
+               st,irq1-click;
+               st,irq2-click;
+               st,wakeup-x-lo;
+               st,wakeup-x-hi;
+               st,wakeup-y-lo;
+               st,wakeup-y-hi;
+               st,wakeup-z-lo;
+               st,wakeup-z-hi;
+       };
+};
+
+&lcdc {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&lcdc_pins>;
+       lcd-supply = <&lcd_supply>;
+
+       port {
+               lcdc_out: endpoint {
+                       remote-endpoint = <&panel_in>;
+                       bus-width = <16>;
+               };
+       };
+
+       panel {
+               compatible = "sharp,lq043t3dx0-panel";
+               display-timings {
+                       native-mode = <&timing0>;
+                       timing0: timing {
+                               clock-frequency = <9009000>;
+                               pixelclk-active = <0>;  /* negative edge */
+                               hactive = <480>;
+                               vactive = <272>;
+                               hsync-len = <41>;
+                               hback-porch = <2>;
+                               hfront-porch = <1>;
+                               vsync-len = <10>;
+                               vback-porch = <3>;
+                               vfront-porch = <1>;
+                       };
+               };
+
+               port {
+                       panel_in: endpoint {
+                               remote-endpoint = <&lcdc_out>;
+                       };
+               };
+       };
+};
+
+&gcu {
+       status = "okay";
+};
+
+&pxai2c1 {
+       touchscreen@a {
+               compatible = "eeti,exc3000-i2c";
+               pinctrl-names = "default";
+               pinctrl-0 = <&eeti_ts_pins>;
+               reg = <0xa>;
+               interrupt-parent = <&gpio>;
+               interrupts = <32 IRQ_TYPE_EDGE_RISING>;
+               attn-gpios = <&gpio 32 GPIO_ACTIVE_HIGH>;
+               touchscreen-inverted-y;
+       };
+};
+
+&pinctrl {
+       lis302_pins: lis302-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(104) MFP_AF0     /* IRQ  */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+
+       eeti_ts_pins: eeti-ts-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(32) MFP_AF0      /* IRQ */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
+       };
+
+       lt3593_pins: lt3593-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(17) MFP_AF0      /* Backlight    */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+
+       pwm0_pins: pwm0-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(17) MFP_AF1      /* PWM  */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+
+       w1_pins: w1-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(126) MFP_AF0     /* PWM  */
+                       MFP_PIN_PXA300(105) MFP_AF0     /* PWM  */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
+       };
+
+       lcdc_pins: lcdc-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(54) MFP_AF1      /* LDD_0        */
+                       MFP_PIN_PXA300(55) MFP_AF1      /* LDD_1        */
+                       MFP_PIN_PXA300(56) MFP_AF1      /* LDD_2        */
+                       MFP_PIN_PXA300(57) MFP_AF1      /* LDD_3        */
+                       MFP_PIN_PXA300(58) MFP_AF1      /* LDD_4        */
+                       MFP_PIN_PXA300(59) MFP_AF1      /* LDD_5        */
+                       MFP_PIN_PXA300(60) MFP_AF1      /* LDD_6        */
+                       MFP_PIN_PXA300(61) MFP_AF1      /* LDD_7        */
+                       MFP_PIN_PXA300(62) MFP_AF1      /* LDD_8        */
+                       MFP_PIN_PXA300(63) MFP_AF1      /* LDD_9        */
+                       MFP_PIN_PXA300(64) MFP_AF1      /* LDD_10       */
+                       MFP_PIN_PXA300(65) MFP_AF1      /* LDD_11       */
+                       MFP_PIN_PXA300(66) MFP_AF1      /* LDD_12       */
+                       MFP_PIN_PXA300(67) MFP_AF1      /* LDD_13       */
+                       MFP_PIN_PXA300(68) MFP_AF1      /* LDD_14       */
+                       MFP_PIN_PXA300(69) MFP_AF1      /* LDD_15       */
+                       MFP_PIN_PXA300(70) MFP_AF1      /* LDD_16       */
+                       MFP_PIN_PXA300(71) MFP_AF1      /* LDD_17       */
+                       MFP_PIN_PXA300(72) MFP_AF1      /* LCD_FCLK     */
+                       MFP_PIN_PXA300(73) MFP_AF1      /* LCD_LCLK     */
+                       MFP_PIN_PXA300(74) MFP_AF1      /* LCD_PCLK     */
+                       MFP_PIN_PXA300(75) MFP_AF1      /* LCD_BIAS     */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+};
diff --git a/arch/arm/boot/dts/pxa300-raumfeld-speaker-l.dts b/arch/arm/boot/dts/pxa300-raumfeld-speaker-l.dts
new file mode 100644 (file)
index 0000000..5a0f7f1
--- /dev/null
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/dts-v1/;
+
+#include "pxa300-raumfeld-common.dtsi"
+#include "pxa300-raumfeld-tuneable-clock.dtsi"
+
+/ {
+       model = "Raumfeld Speaker L (PXA3xx)";
+       compatible = "raumfeld,raumfeld-speaker-l-pxa303", "marvell,pxa300";
+};
diff --git a/arch/arm/boot/dts/pxa300-raumfeld-speaker-m.dts b/arch/arm/boot/dts/pxa300-raumfeld-speaker-m.dts
new file mode 100644 (file)
index 0000000..fa10d89
--- /dev/null
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/dts-v1/;
+
+#include "pxa300-raumfeld-common.dtsi"
+#include "pxa300-raumfeld-tuneable-clock.dtsi"
+
+/ {
+       model = "Raumfeld Speaker M (PXA3xx)";
+       compatible = "raumfeld,raumfeld-speaker-m-pxa303", "marvell,pxa300";
+};
diff --git a/arch/arm/boot/dts/pxa300-raumfeld-speaker-one.dts b/arch/arm/boot/dts/pxa300-raumfeld-speaker-one.dts
new file mode 100644 (file)
index 0000000..5f9e375
--- /dev/null
@@ -0,0 +1,137 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/dts-v1/;
+
+#include "pxa300-raumfeld-common.dtsi"
+
+/ {
+       model = "Raumfeld Speaker One (PXA3xx)";
+       compatible = "raumfeld,raumfeld-speaker-one-pxa303", "marvell,pxa300";
+
+       wm8782: wm8782 {
+               compatible = "wm8782";
+               #sound-dai-cells = <0>;
+               Vdd-supply = <&reg_3v3>;
+               Vdda-supply = <&reg_va_5v0>;
+       };
+
+       xo_11mhz: oscillator-11mhz {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <11289600>;
+               clock-accuracy = <100>;
+       };
+
+       xo_audio: clock-gate {
+               compatible = "gpio-gate-clock";
+               pinctrlnames = "default";
+               pinctrl-0 = <&xo_audio_pins>;
+               clocks = <&xo_11mhz>;
+               #clock-cells = <0>;
+               enable-gpios = <&gpio 111 GPIO_ACTIVE_HIGH>;
+       };
+
+       reg_va_30v0: regulator-va-30v0 {
+               compatible = "regulator-fixed";
+               regulator-name = "va-30v0-fixed-supply";
+               regulator-min-microvolt = <30000000>;
+               regulator-max-microvolt = <30000000>;
+       };
+
+       sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "Raumfeld Speaker";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               simple-audio-card,dai-link@0 {
+                       reg = <0>;
+                       format = "i2s";
+                       bitclock-master = <&dailink_master_analog_out>;
+                       frame-master = <&dailink_master_analog_out>;
+                       mclk-fs = <256>;
+
+                       dailink_master_analog_out: cpu {
+                               sound-dai = <&ssp_dai0>;
+                       };
+
+                       codec {
+                               sound-dai = <&sta320>;
+                       };
+               };
+
+               simple-audio-card,dai-link@1 {
+                       reg = <1>;
+                       format = "i2s";
+                       bitclock-master = <&dailink_master_analog_in>;
+                       frame-master = <&dailink_master_analog_in>;
+                       mclk-fs = <256>;
+
+                       dailink_master_analog_in: cpu {
+                               sound-dai = <&ssp_dai0>;
+                       };
+
+                       codec {
+                               sound-dai = <&wm8782>;
+                       };
+               };
+       };
+};
+
+&ssp_dai0 {
+       clocks = <&xo_audio>;
+};
+
+&spi {
+       dac@2 {
+               compatible = "ti,dac7512";
+               reg = <2>;
+               spi-max-frequency = <1000000>;
+               vcc-supply = <&reg_3v3>;
+       };
+};
+
+&rotary {
+       status = "okay";
+};
+
+&pxai2c1 {
+       sta320: codec@1a {
+               compatible = "st,sta32x";
+               reg = <0x1a>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&sta320_pins>;
+               clocks = <&xo_audio>;
+               clock-names = "xti";
+               reset-gpios = <&gpio 120 GPIO_ACTIVE_HIGH>;
+               Vdda-supply = <&reg_3v3>;
+               Vdd3-supply = <&reg_3v3>;
+               Vcc-supply = <&reg_va_30v0>;
+               #sound-dai-cells = <0>;
+               st,thermal-warning-adjustment;
+               st,thermal-warning-recovery;
+               st,fault-detect-recovery;
+               st,drop-compensation-ns = <80>;
+               st,max-power-use-mpcc;
+               st,invalid-input-detect-mute;
+               /* 2 (half-bridge) and 1 (full-bridge) on-board power */
+               st,output-conf = /bits/ 8 <0x1>;
+               st,needs_esd_watchdog;
+       };
+};
+
+&pinctrl {
+       xo_audio_pins: xo-audio-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(111) MFP_AF0     /* ENABLE */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+
+       sta320_pins: sta320-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(120) MFP_AF0     /* CODEC_RESET  */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT);
+       };
+};
diff --git a/arch/arm/boot/dts/pxa300-raumfeld-speaker-s.dts b/arch/arm/boot/dts/pxa300-raumfeld-speaker-s.dts
new file mode 100644 (file)
index 0000000..36e20cb
--- /dev/null
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/dts-v1/;
+
+#include "pxa300-raumfeld-common.dtsi"
+#include "pxa300-raumfeld-tuneable-clock.dtsi"
+
+/ {
+       model = "Raumfeld Speaker S (PXA3xx)";
+       compatible = "raumfeld,raumfeld-speaker-s-pxa303", "marvell,pxa300";
+};
diff --git a/arch/arm/boot/dts/pxa300-raumfeld-tuneable-clock.dtsi b/arch/arm/boot/dts/pxa300-raumfeld-tuneable-clock.dtsi
new file mode 100644 (file)
index 0000000..561483b
--- /dev/null
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <dt-bindings/clock/maxim,max9485.h>
+
+/ {
+       xo_27mhz: oscillator-27mhz {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <27000000>;
+               clock-accuracy = <100>;
+       };
+
+       sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "Raumfeld Speaker";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               simple-audio-card,dai-link@0 {
+                       reg = <0>;
+                       format = "i2s";
+                       bitclock-master = <&dailink_master_analog>;
+                       frame-master = <&dailink_master_analog>;
+                       mclk-fs = <256>;
+
+                       dailink_master_analog: cpu {
+                               sound-dai = <&ssp_dai0>;
+                       };
+
+                       codec {
+                               sound-dai = <&cs4270>;
+                       };
+               };
+       };
+};
+
+&ssp_dai0 {
+       clocks = <&max9485 MAX9485_CLKOUT1>;
+};
+
+&ssp_dai1 {
+       clocks = <&max9485 MAX9485_CLKOUT1>;
+};
+
+&pxai2c1 {
+       cs4270: codec@48 {
+               compatible = "cirrus,cs4270";
+               pinctrl-names = "default";
+               pinctrl-0 = <&cs4270_pins>;
+               reg = <0x48>;
+               va-supply = <&reg_va_5v0>;
+               vd-supply = <&reg_3v3>;
+               vlc-supply = <&reg_3v3>;
+               reset-gpios = <&gpio 120 GPIO_ACTIVE_HIGH>;
+               #sound-dai-cells = <0>;
+       };
+
+       max9485: clock-generator@63 {
+               compatible = "maxim,max9485";
+               pinctrl-names = "default";
+               pinctrl-0 = <&max9485_pins>;
+               reg = <0x63>;
+               vdd-supply = <&reg_3v3>;
+               clock-names = "xclk";
+               clocks = <&xo_27mhz>;
+               reset-gpios = <&gpio 111 GPIO_ACTIVE_HIGH>;
+               #clock-cells = <1>;
+       };
+};
+
+&pinctrl {
+       cs4270_pins: cs4270-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(120) MFP_AF0     /* RESET */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+
+       max9485_pins: max9485-pins {
+               pinctrl-single,pins = <
+                       MFP_PIN_PXA300(111) MFP_AF0     /* RESET */
+               >;
+               pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW);
+       };
+};
index 3a8f0ed..e1e607f 100644 (file)
                pinctrl: pinctrl@40e10000 {
                        compatible = "pinconf-single";
                        reg = <0x40e10000 0xffff>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
                        #pinctrl-cells = <1>;
                        pinctrl-single,register-width = <32>;
                        pinctrl-single,function-mask = <0x7>;
                        status = "disabled";
                };
 
-               pxa3xx_ohci: usb@4c000000 {
+               usb0: usb@4c000000 {
                        compatible = "marvell,pxa-ohci";
                        reg = <0x4c000000 0x10000>;
                        interrupts = <3>;
                        clocks = <&clks CLK_SSP4>;
                        status = "disabled";
                };
+
+               timer@40a00000 {
+                       compatible = "marvell,pxa-timer";
+                       reg = <0x40a00000 0x20>;
+                       interrupts = <26>;
+                       clocks = <&clks CLK_OSTIMER>;
+                       status = "okay";
+               };
+
+               gcu: display-controller@54000000 {
+                       compatible = "marvell,pxa300-gcu";
+                       reg = <0x54000000 0x1000>;
+                       interrupts = <39>;
+                       clocks = <&clks CLK_PXA300_GCU>;
+                       status = "disabled";
+               };
        };
 
        clocks {
                #size-cells = <1>;
                ranges;
 
-               clks: pxa3xx_clks@41300004 {
+               clks: clocks {
                        compatible = "marvell,pxa300-clocks";
                        #clock-cells = <1>;
                        status = "okay";
                };
        };
-
-       timer@40a00000 {
-               compatible = "marvell,pxa-timer";
-               reg = <0x40a00000 0x20>;
-               interrupts = <26>;
-               clocks = <&clks CLK_OSTIMER>;
-               status = "okay";
-       };
 };
diff --git a/arch/arm/boot/dts/qcom-apq8064-arrow-sd-600eval-pins.dtsi b/arch/arm/boot/dts/qcom-apq8064-arrow-sd-600eval-pins.dtsi
deleted file mode 100644 (file)
index 8df7315..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-&tlmm_pinmux {
-       card_detect: card-detect {
-               mux {
-                       pins = "gpio26";
-                       function = "gpio";
-                       bias-disable;
-               };
-       };
-
-       pcie_pins: pcie-pinmux {
-               mux {
-                       pins = "gpio27";
-                       function = "gpio";
-               };
-               conf {
-                       pins = "gpio27";
-                       drive-strength = <12>;
-                       bias-disable;
-               };
-       };
-
-       user_leds: user-leds {
-               mux {
-                       pins = "gpio3", "gpio7", "gpio10", "gpio11";
-                       function = "gpio";
-               };
-
-               conf {
-                       pins = "gpio3", "gpio7", "gpio10", "gpio11";
-                       function = "gpio";
-                       output-low;
-               };
-       };
-
-       magneto_pins: magneto-pins {
-               mux {
-                       pins = "gpio31", "gpio48";
-                       function = "gpio";
-                       bias-disable;
-               };
-       };
-};
-
-&pm8921_mpps {
-       mpp_leds: mpp-leds {
-               pinconf {
-                       pins = "mpp7", "mpp8";
-                       function = "digital";
-                       output-low;
-               };
-       };
-};
diff --git a/arch/arm/boot/dts/qcom-apq8064-arrow-sd-600eval.dts b/arch/arm/boot/dts/qcom-apq8064-arrow-sd-600eval.dts
deleted file mode 100644 (file)
index 76b56ea..0000000
+++ /dev/null
@@ -1,415 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#include "qcom-apq8064-v2.0.dtsi"
-#include "qcom-apq8064-arrow-sd-600eval-pins.dtsi"
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/mfd/qcom-rpm.h>
-
-/ {
-       model = "Arrow Electronics, APQ8064 SD_600eval";
-       compatible = "arrow,sd_600eval", "qcom,apq8064";
-
-       aliases {
-               serial0 = &gsbi7_serial;
-               serial1 = &gsbi1_serial;
-               i2c0 = &gsbi2_i2c;
-               i2c1 = &gsbi3_i2c;
-               i2c2 = &gsbi4_i2c;
-               i2c3 = &gsbi7_i2c;
-               spi0 = &gsbi5_spi;
-       };
-
-       regulators {
-               compatible = "simple-bus";
-               vph: regulator-fixed@1 {
-                       compatible = "regulator-fixed";
-                       regulator-min-microvolt = <4500000>;
-                       regulator-max-microvolt = <4500000>;
-                       regulator-name = "VPH";
-                       regulator-type = "voltage";
-                       regulator-boot-on;
-               };
-
-               /* on board fixed 3.3v supply */
-               vcc3v3: vcc3v3 {
-                       compatible = "regulator-fixed";
-                       regulator-name = "VCC3V3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
-
-       };
-
-       hdmi-out {
-               compatible = "hdmi-connector";
-               type = "a";
-
-               port {
-                       hdmi_con: endpoint {
-                               remote-endpoint = <&hdmi_out>;
-                       };
-               };
-       };
-
-       soc {
-               rpm@108000 {
-                       regulators {
-                               vdd_s1-supply = <&vph>;
-                               vdd_s2-supply = <&vph>;
-                               vdd_s3-supply = <&vph>;
-                               vdd_s4-supply = <&vph>;
-                               vdd_s5-supply = <&vph>;
-                               vdd_s6-supply = <&vph>;
-                               vdd_s7-supply = <&vph>;
-                               vdd_l1_l2_l12_l18-supply = <&pm8921_s4>;
-                               vdd_l3_l15_l17-supply = <&vph>;
-                               vdd_l4_l14-supply = <&vph>;
-                               vdd_l5_l8_l16-supply = <&vph>;
-                               vdd_l6_l7-supply = <&vph>;
-                               vdd_l9_l11-supply = <&vph>;
-                               vdd_l10_l22-supply = <&vph>;
-                               vdd_l21_l23_l29-supply = <&vph>;
-                               vdd_l24-supply = <&pm8921_s1>;
-                               vdd_l25-supply = <&pm8921_s1>;
-                               vdd_l26-supply = <&pm8921_s7>;
-                               vdd_l27-supply = <&pm8921_s7>;
-                               vdd_l28-supply = <&pm8921_s7>;
-                               vin_lvs1_3_6-supply = <&pm8921_s4>;
-                               vin_lvs2-supply = <&pm8921_s1>;
-                               vin_lvs4_5_7-supply = <&pm8921_s4>;
-
-                               s1 {
-                                       regulator-always-on;
-                                       regulator-min-microvolt = <1225000>;
-                                       regulator-max-microvolt = <1225000>;
-                                       qcom,switch-mode-frequency = <3200000>;
-                                       bias-pull-down;
-                               };
-
-                               s2 {
-                                       regulator-min-microvolt = <1300000>;
-                                       regulator-max-microvolt = <1300000>;
-                                       qcom,switch-mode-frequency = <1600000>;
-                                       bias-pull-down;
-                                       regulator-always-on;
-                               };
-
-                               s3 {
-                                       regulator-min-microvolt = <1000000>;
-                                       regulator-max-microvolt = <1400000>;
-                                       qcom,switch-mode-frequency = <4800000>;
-                               };
-
-                               s4 {
-                                       regulator-min-microvolt = <1800000>;
-                                       regulator-max-microvolt = <1800000>;
-                                       qcom,switch-mode-frequency = <1600000>;
-                                       qcom,force-mode = <QCOM_RPM_FORCE_MODE_AUTO>;
-                                       bias-pull-down;
-                                       regulator-always-on;
-                               };
-
-                               s7 {
-                                       regulator-min-microvolt = <1300000>;
-                                       regulator-max-microvolt = <1300000>;
-                                       qcom,switch-mode-frequency = <3200000>;
-                                };
-
-                               l3 {
-                                       regulator-min-microvolt = <3050000>;
-                                       regulator-max-microvolt = <3300000>;
-                                       bias-pull-down;
-                               };
-
-                               l4 {
-                                       regulator-min-microvolt = <1000000>;
-                                       regulator-max-microvolt = <1800000>;
-                                       bias-pull-down;
-                               };
-
-                               l5 {
-                                       regulator-min-microvolt = <2750000>;
-                                       regulator-max-microvolt = <3000000>;
-                                       bias-pull-down;
-                                       regulator-boot-on;
-                                       regulator-always-on;
-                               };
-
-                               l6 {
-                                       regulator-min-microvolt = <2950000>;
-                                       regulator-max-microvolt = <2950000>;
-                                       bias-pull-down;
-                               };
-
-                               /**
-                                * 1.8v required on LS expansion
-                                * for mezzanine boards
-                                */
-                               l15 {
-                                       regulator-min-microvolt = <1800000>;
-                                       regulator-max-microvolt = <1800000>;
-                                       regulator-always-on;
-                               };
-
-                               l23 {
-                                       regulator-min-microvolt = <1700000>;
-                                       regulator-max-microvolt = <1900000>;
-                                       bias-pull-down;
-                               };
-
-                               lvs6 {
-                                       bias-pull-down;
-                               };
-
-                               lvs7 {
-                                       bias-pull-down;
-                               };
-                       };
-               };
-
-               gsbi@12440000 {
-                       status = "okay";
-                       qcom,mode = <GSBI_PROT_UART_W_FC>;
-                       serial@12450000 {
-                               label = "LS-UART1";
-                               status = "okay";
-                               pinctrl-names = "default";
-                               pinctrl-0 = <&gsbi1_uart_4pins>;
-                       };
-               };
-
-               gsbi@12480000 {
-                       status = "okay";
-                       qcom,mode = <GSBI_PROT_I2C>;
-                       i2c@124a0000 {
-                               /* On Low speed expansion and Sensors */
-                               label = "LS-I2C0";
-                               status = "okay";
-                               lis3mdl_mag@1e {
-                                       compatible = "st,lis3mdl-magn";
-                                       reg = <0x1e>;
-                                       vdd-supply = <&vcc3v3>;
-                                       vddio-supply = <&pm8921_s4>;
-                                       pinctrl-names = "default";
-                                       pinctrl-0 = <&magneto_pins>;
-                                       interrupt-parent = <&tlmm_pinmux>;
-
-                                       st,drdy-int-pin = <2>;
-                                       interrupts = <48 IRQ_TYPE_EDGE_RISING>, /* DRDY line */
-                                                    <31 IRQ_TYPE_EDGE_RISING>; /* INT */
-                               };
-                       };
-               };
-
-               gsbi@16200000 {
-                       status = "okay";
-                       qcom,mode = <GSBI_PROT_I2C>;
-                       i2c@16280000 {
-                       /* On Low speed expansion */
-                               status = "okay";
-                               label = "LS-I2C1";
-                               clock-frequency = <200000>;
-                               eeprom@52 {
-                                       compatible = "atmel,24c128";
-                                       reg = <0x52>;
-                                       pagesize = <64>;
-                               };
-                       };
-               };
-
-               gsbi@16300000 {
-                       status = "okay";
-                       qcom,mode = <GSBI_PROT_I2C>;
-                       i2c@16380000 {
-                               /* On High speed expansion */
-                               label = "HS-CAM-I2C3";
-                               status = "okay";
-                       };
-               };
-
-               gsbi@1a200000 {
-                       status = "okay";
-                       spi@1a280000 {
-                               /* On Low speed expansion */
-                               label = "LS-SPI0";
-                               status = "okay";
-                       };
-               };
-
-               /* DEBUG UART  */
-               gsbi@16600000 {
-                       status = "okay";
-                       qcom,mode = <GSBI_PROT_I2C_UART>;
-                       serial@16640000 {
-                               label = "LS-UART0";
-                               status = "okay";
-                               pinctrl-names = "default";
-                               pinctrl-0 = <&gsbi7_uart_2pins>;
-                       };
-
-                       i2c@16680000 {
-                               /* On High speed expansion */
-                               status = "okay";
-                               label = "HS-CAM-I2C2";
-                       };
-               };
-
-               leds {
-                       pinctrl-names = "default";
-                       pinctrl-0 = <&user_leds>, <&mpp_leds>;
-
-                       compatible = "gpio-leds";
-
-                       user-led0 {
-                               label = "user0-led";
-                               gpios = <&tlmm_pinmux 3 GPIO_ACTIVE_HIGH>;
-                               linux,default-trigger = "heartbeat";
-                               default-state = "off";
-                       };
-
-                       user-led1 {
-                               label = "user1-led";
-                               gpios = <&tlmm_pinmux 7 GPIO_ACTIVE_HIGH>;
-                               linux,default-trigger = "mmc0";
-                               default-state = "off";
-                       };
-
-                       user-led2 {
-                               label = "user2-led";
-                               gpios = <&tlmm_pinmux 10 GPIO_ACTIVE_HIGH>;
-                               linux,default-trigger = "mmc1";
-                               default-state = "off";
-                       };
-
-                       user-led3 {
-                               label = "user3-led";
-                               gpios = <&tlmm_pinmux 11 GPIO_ACTIVE_HIGH>;
-                               linux,default-trigger = "none";
-                               default-state = "off";
-                       };
-
-                       wifi-led {
-                               label = "WiFi-led";
-                               gpios = <&pm8921_mpps 7 GPIO_ACTIVE_HIGH>;
-                               default-state = "off";
-                       };
-
-                       bt-led {
-                               label = "BT-led";
-                               gpios = <&pm8921_mpps 8 GPIO_ACTIVE_HIGH>;
-                               default-state = "off";
-                       };
-               };
-
-               pci@1b500000 {
-                       status = "okay";
-                       vdda-supply = <&pm8921_s3>;
-                       vdda_phy-supply = <&pm8921_lvs6>;
-                       vdda_refclk-supply = <&vcc3v3>;
-                       pinctrl-0 = <&pcie_pins>;
-                       pinctrl-names = "default";
-                       perst-gpio = <&tlmm_pinmux 27 GPIO_ACTIVE_LOW>;
-               };
-
-               phy@1b400000 {
-                       status = "okay";
-               };
-
-               sata@29000000 {
-                       status  = "okay";
-                       target-supply   = <&pm8921_lvs7>;
-               };
-
-               /* OTG */
-               usb@12500000 {
-                       status = "okay";
-                       dr_mode = "peripheral";
-                       ulpi {
-                               phy {
-                                       v3p3-supply = <&pm8921_l3>;
-                                       v1p8-supply = <&pm8921_l4>;
-                               };
-                       };
-               };
-
-               usb@12520000 {
-                       status = "okay";
-                       dr_mode = "otg";
-                       ulpi {
-                               phy {
-                                       v3p3-supply = <&pm8921_l3>;
-                                       v1p8-supply = <&pm8921_l23>;
-                               };
-                       };
-               };
-
-               usb@12530000 {
-                       status = "okay";
-                       dr_mode = "otg";
-                       ulpi {
-                               phy {
-                                       v3p3-supply = <&pm8921_l3>;
-                                       v1p8-supply = <&pm8921_l23>;
-                               };
-                       };
-               };
-
-               amba {
-                       /* eMMC */
-                       sdcc@12400000 {
-                               status = "okay";
-                               vmmc-supply = <&pm8921_l5>;
-                               vqmmc-supply = <&pm8921_s4>;
-                       };
-
-                       /* External micro SD card */
-                       sdcc@12180000 {
-                               status = "okay";
-                               vmmc-supply = <&pm8921_l6>;
-                               pinctrl-names   = "default";
-                               pinctrl-0       = <&card_detect>;
-                               cd-gpios        = <&tlmm_pinmux 26 GPIO_ACTIVE_HIGH>;
-                       };
-               };
-
-               riva-pil@3204000 {
-                       status = "okay";
-
-                       pinctrl-names = "default";
-                       pinctrl-0 = <&riva_wlan_pin_a>, <&riva_bt_pin_a>, <&riva_fm_pin_a>;
-               };
-
-               hdmi-tx@4a00000 {
-                       status = "okay";
-                       core-vdda-supply = <&pm8921_hdmi_switch>;
-                       hdmi-mux-supply = <&vcc3v3>;
-
-                       hpd-gpio = <&tlmm_pinmux 72 GPIO_ACTIVE_HIGH>;
-
-                       ports {
-                               port@1 {
-                                       endpoint {
-                                               remote-endpoint = <&hdmi_con>;
-                                       };
-                               };
-                       };
-               };
-
-               hdmi-phy@4a00400 {
-                       status = "okay";
-                       core-vdda-supply = <&pm8921_hdmi_switch>;
-               };
-
-               mdp@5100000 {
-                       status = "okay";
-
-                       ports {
-                               port@3 {
-                                       endpoint {
-                                               remote-endpoint = <&hdmi_in>;
-                                       };
-                               };
-                       };
-               };
-       };
-};
index 0e1e987..899f285 100644 (file)
                };
 
                sdhci@f9824900 {
-                       compatible = "qcom,sdhci-msm-v4";
+                       compatible = "qcom,apq8084-sdhci", "qcom,sdhci-msm-v4";
                        reg = <0xf9824900 0x11c>, <0xf9824000 0x800>;
                        reg-names = "hc_mem", "core_mem";
                        interrupts = <0 123 0>, <0 138 0>;
                };
 
                sdhci@f98a4900 {
-                       compatible = "qcom,sdhci-msm-v4";
+                       compatible = "qcom,apq8084-sdhci", "qcom,sdhci-msm-v4";
                        reg = <0xf98a4900 0x11c>, <0xf98a4000 0x800>;
                        reg-names = "hc_mem", "core_mem";
                        interrupts = <0 125 0>, <0 221 0>;
index ed8f064..51444c5 100644 (file)
                                ak8963@f {
                                        compatible = "asahi-kasei,ak8963";
                                        reg = <0x0f>;
-                                       // Currently only works in polling mode.
-                                       // gpios = <&msmgpio 61 0>;
+                                       gpios = <&msmgpio 67 0>;
                                        vid-supply = <&pm8941_lvs1>;
                                        vdd-supply = <&pm8941_l17>;
                                };
index aba159d..ca266a5 100644 (file)
                        };
                };
 
-               tsens: thermal-sensor@fc4a8000 {
+               tsens: thermal-sensor@fc4a9000 {
                        compatible = "qcom,msm8974-tsens";
-                       reg = <0xfc4a8000 0x2000>;
+                       reg = <0xfc4a9000 0x1000>, /* TM */
+                             <0xfc4a8000 0x1000>; /* SROT */
                        nvmem-cells = <&tsens_calib>, <&tsens_backup>;
                        nvmem-cell-names = "calib", "calib_backup";
+                       #qcom,sensors = <11>;
                        #thermal-sensor-cells = <1>;
                };
 
                };
 
                sdhci@f9824900 {
-                       compatible = "qcom,sdhci-msm-v4";
+                       compatible = "qcom,msm8974-sdhci", "qcom,sdhci-msm-v4";
                        reg = <0xf9824900 0x11c>, <0xf9824000 0x800>;
                        reg-names = "hc_mem", "core_mem";
                        interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
                };
 
                sdhci@f9864900 {
-                       compatible = "qcom,sdhci-msm-v4";
+                       compatible = "qcom,msm8974-sdhci", "qcom,sdhci-msm-v4";
                        reg = <0xf9864900 0x11c>, <0xf9864000 0x800>;
                        reg-names = "hc_mem", "core_mem";
                        interrupts = <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>,
                };
 
                sdhci@f98a4900 {
-                       compatible = "qcom,sdhci-msm-v4";
+                       compatible = "qcom,msm8974-sdhci", "qcom,sdhci-msm-v4";
                        reg = <0xf98a4900 0x11c>, <0xf98a4000 0x800>;
                        reg-names = "hc_mem", "core_mem";
                        interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
index 383cba6..12ffe73 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the r8a7740 SoC
+ * Device Tree Source for the R-Mobile A1 (R8A77400) SoC
  *
  * Copyright (C) 2012 Renesas Solutions Corp.
  */
index 0e2e033..b3fee1d 100644 (file)
        };
 };
 
-&cmt0 {
-       status = "okay";
-};
-
 &extal_clk {
        clock-frequency = <20000000>;
 };
        };
 };
 
-&rwdt {
-       timeout-sec = <60>;
-       status = "okay";
-};
-
 &sdhi0 {
        pinctrl-0 = <&sdhi0_pins>;
        pinctrl-names = "default";
index 24715f7..3cc33f7 100644 (file)
 
                thermal: thermal@e61f0000 {
                        compatible = "renesas,thermal-r8a7743",
-                                    "renesas,rcar-gen2-thermal",
-                                    "renesas,rcar-thermal";
+                                    "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>;
diff --git a/arch/arm/boot/dts/r8a7744-iwg20d-q7-dbcm-ca.dts b/arch/arm/boot/dts/r8a7744-iwg20d-q7-dbcm-ca.dts
new file mode 100644 (file)
index 0000000..3e58c2e
--- /dev/null
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the iWave Systems RZ/G1N Qseven board development
+ * platform with camera daughter board
+ *
+ * Copyright (C) 2018 Renesas Electronics Corp.
+ */
+
+/dts-v1/;
+#include "r8a7744-iwg20m.dtsi"
+#include "iwg20d-q7-common.dtsi"
+#include "iwg20d-q7-dbcm-ca.dtsi"
+
+/ {
+       model = "iWave Systems RZ/G1N Qseven development platform with camera add-on";
+       compatible = "iwave,g20d", "iwave,g20m", "renesas,r8a7744";
+};
diff --git a/arch/arm/boot/dts/r8a7744-iwg20d-q7.dts b/arch/arm/boot/dts/r8a7744-iwg20d-q7.dts
new file mode 100644 (file)
index 0000000..1fdac52
--- /dev/null
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the iWave-RZ/G1N Qseven board
+ *
+ * Copyright (C) 2018 Renesas Electronics Corp.
+ */
+
+/dts-v1/;
+#include "r8a7744-iwg20m.dtsi"
+#include "iwg20d-q7-common.dtsi"
+
+/ {
+       model = "iWave Systems RainboW-G20D-Qseven board based on RZ/G1N";
+       compatible = "iwave,g20d", "iwave,g20m", "renesas,r8a7744";
+};
diff --git a/arch/arm/boot/dts/r8a7744-iwg20m.dtsi b/arch/arm/boot/dts/r8a7744-iwg20m.dtsi
new file mode 100644 (file)
index 0000000..82ee3c1
--- /dev/null
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the iWave RZ/G1N Qseven SOM
+ *
+ * Copyright (C) 2018 Renesas Electronics Corp.
+ */
+
+#include "r8a7744.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "iwave,g20m", "renesas,r8a7744";
+
+       memory@40000000 {
+               device_type = "memory";
+               reg = <0 0x40000000 0 0x40000000>;
+       };
+
+       reg_3p3v: 3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "3P3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               regulator-boot-on;
+       };
+};
+
+&extal_clk {
+       clock-frequency = <20000000>;
+};
+
+&pfc {
+       mmcif0_pins: mmc {
+               groups = "mmc_data8_b", "mmc_ctrl";
+               function = "mmc";
+       };
+
+       qspi_pins: qspi {
+               groups = "qspi_ctrl", "qspi_data2";
+               function = "qspi";
+       };
+
+       sdhi0_pins: sd0 {
+               groups = "sdhi0_data4", "sdhi0_ctrl";
+               function = "sdhi0";
+               power-source = <3300>;
+       };
+};
+
+&mmcif0 {
+       pinctrl-0 = <&mmcif0_pins>;
+       pinctrl-names = "default";
+
+       vmmc-supply = <&reg_3p3v>;
+       bus-width = <8>;
+       non-removable;
+       status = "okay";
+};
+
+&qspi {
+       pinctrl-0 = <&qspi_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       /* WARNING - This device contains the bootloader. Handle with care. */
+       flash: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+               spi-tx-bus-width = <2>;
+               spi-rx-bus-width = <2>;
+               m25p,fast-read;
+               spi-cpol;
+               spi-cpha;
+       };
+};
+
+&sdhi0 {
+       pinctrl-0 = <&sdhi0_pins>;
+       pinctrl-names = "default";
+
+       vmmc-supply = <&reg_3p3v>;
+       vqmmc-supply = <&reg_3p3v>;
+       cd-gpios = <&gpio7 11 GPIO_ACTIVE_LOW>;
+       status = "okay";
+};
diff --git a/arch/arm/boot/dts/r8a7744.dtsi b/arch/arm/boot/dts/r8a7744.dtsi
new file mode 100644 (file)
index 0000000..04148d6
--- /dev/null
@@ -0,0 +1,1741 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree Source for the r8a7744 SoC
+ *
+ * Copyright (C) 2018 Renesas Electronics Corp.
+ */
+
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/r8a7744-cpg-mssr.h>
+#include <dt-bindings/power/r8a7744-sysc.h>
+
+/ {
+       compatible = "renesas,r8a7744";
+       #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>;
+       };
+
+       /* External CAN clock */
+       can_clk: can {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               /* This value must be overridden by the board. */
+               clock-frequency = <0>;
+       };
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               enable-method = "renesas,apmu";
+
+               cpu0: cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a15";
+                       reg = <0>;
+                       clock-frequency = <1500000000>;
+                       clocks = <&cpg CPG_CORE R8A7744_CLK_Z>;
+                       clock-latency = <300000>; /* 300 us */
+                       power-domains = <&sysc R8A7744_PD_CA15_CPU0>;
+                       next-level-cache = <&L2_CA15>;
+
+                       /* kHz - uV - OPPs unknown yet */
+                       operating-points = <1500000 1000000>,
+                                          <1312500 1000000>,
+                                          <1125000 1000000>,
+                                          < 937500 1000000>,
+                                          < 750000 1000000>,
+                                          < 375000 1000000>;
+               };
+
+               cpu1: cpu@1 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a15";
+                       reg = <1>;
+                       clock-frequency = <1500000000>;
+                       clocks = <&cpg CPG_CORE R8A7744_CLK_Z>;
+                       clock-latency = <300000>; /* 300 us */
+                       power-domains = <&sysc R8A7744_PD_CA15_CPU1>;
+                       next-level-cache = <&L2_CA15>;
+
+                       /* kHz - uV - OPPs unknown yet */
+                       operating-points = <1500000 1000000>,
+                                          <1312500 1000000>,
+                                          <1125000 1000000>,
+                                          < 937500 1000000>,
+                                          < 750000 1000000>,
+                                          < 375000 1000000>;
+               };
+
+               L2_CA15: cache-controller-0 {
+                       compatible = "cache";
+                       cache-unified;
+                       cache-level = <2>;
+                       power-domains = <&sysc R8A7744_PD_CA15_SCU>;
+               };
+       };
+
+       /* External root clock */
+       extal_clk: extal {
+               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 {
+               compatible = "arm,cortex-a15-pmu";
+               interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+                                     <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-affinity = <&cpu0>, <&cpu1>;
+       };
+
+       /* External SCIF clock */
+       scif_clk: scif {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               /* This value must be overridden by the board. */
+               clock-frequency = <0>;
+       };
+
+       soc {
+               compatible = "simple-bus";
+               interrupt-parent = <&gic>;
+
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a7744-wdt",
+                                    "renesas,rcar-gen2-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
+               };
+
+               gpio0: gpio@e6050000 {
+                       compatible = "renesas,gpio-r8a7744",
+                                    "renesas,rcar-gen2-gpio";
+                       reg = <0 0xe6050000 0 0x50>;
+                       interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 0 32>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 912>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 912>;
+               };
+
+               gpio1: gpio@e6051000 {
+                       compatible = "renesas,gpio-r8a7744",
+                                    "renesas,rcar-gen2-gpio";
+                       reg = <0 0xe6051000 0 0x50>;
+                       interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 32 26>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 911>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 911>;
+               };
+
+               gpio2: gpio@e6052000 {
+                       compatible = "renesas,gpio-r8a7744",
+                                    "renesas,rcar-gen2-gpio";
+                       reg = <0 0xe6052000 0 0x50>;
+                       interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 64 32>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 910>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 910>;
+               };
+
+               gpio3: gpio@e6053000 {
+                       compatible = "renesas,gpio-r8a7744",
+                                    "renesas,rcar-gen2-gpio";
+                       reg = <0 0xe6053000 0 0x50>;
+                       interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 96 32>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 909>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 909>;
+               };
+
+               gpio4: gpio@e6054000 {
+                       compatible = "renesas,gpio-r8a7744",
+                                    "renesas,rcar-gen2-gpio";
+                       reg = <0 0xe6054000 0 0x50>;
+                       interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 128 32>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 908>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 908>;
+               };
+
+               gpio5: gpio@e6055000 {
+                       compatible = "renesas,gpio-r8a7744",
+                                    "renesas,rcar-gen2-gpio";
+                       reg = <0 0xe6055000 0 0x50>;
+                       interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 160 32>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 907>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 907>;
+               };
+
+               gpio6: gpio@e6055400 {
+                       compatible = "renesas,gpio-r8a7744",
+                                    "renesas,rcar-gen2-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 905>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 905>;
+               };
+
+               gpio7: gpio@e6055800 {
+                       compatible = "renesas,gpio-r8a7744",
+                                    "renesas,rcar-gen2-gpio";
+                       reg = <0 0xe6055800 0 0x50>;
+                       interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       gpio-ranges = <&pfc 0 224 26>;
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+                       clocks = <&cpg CPG_MOD 904>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 904>;
+               };
+
+               pfc: pin-controller@e6060000 {
+                       compatible = "renesas,pfc-r8a7744";
+                       reg = <0 0xe6060000 0 0x250>;
+               };
+
+               tpu: pwm@e60f0000 {
+                       compatible = "renesas,tpu-r8a7744", "renesas,tpu";
+                       reg = <0 0xe60f0000 0 0x148>;
+                       clocks = <&cpg CPG_MOD 304>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 304>;
+                       #pwm-cells = <3>;
+                       status = "disabled";
+               };
+
+               cpg: clock-controller@e6150000 {
+                       compatible = "renesas,r8a7744-cpg-mssr";
+                       reg = <0 0xe6150000 0 0x1000>;
+                       clocks = <&extal_clk>, <&usb_extal_clk>;
+                       clock-names = "extal", "usb_extal";
+                       #clock-cells = <2>;
+                       #power-domain-cells = <0>;
+                       #reset-cells = <1>;
+               };
+
+               apmu@e6152000 {
+                       compatible = "renesas,r8a7744-apmu", "renesas,apmu";
+                       reg = <0 0xe6152000 0 0x188>;
+                       cpus = <&cpu0 &cpu1>;
+               };
+
+               rst: reset-controller@e6160000 {
+                       compatible = "renesas,r8a7744-rst";
+                       reg = <0 0xe6160000 0 0x100>;
+               };
+
+               sysc: system-controller@e6180000 {
+                       compatible = "renesas,r8a7744-sysc";
+                       reg = <0 0xe6180000 0 0x200>;
+                       #power-domain-cells = <1>;
+               };
+
+               irqc: interrupt-controller@e61c0000 {
+                       compatible = "renesas,irqc-r8a7744", "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 12 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 407>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 407>;
+               };
+
+               thermal: thermal@e61f0000 {
+                       compatible = "renesas,thermal-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 522>;
+                       #thermal-sensor-cells = <0>;
+               };
+
+               ipmmu_sy0: mmu@e6280000 {
+                       compatible = "renesas,ipmmu-r8a7744",
+                                    "renesas,ipmmu-vmsa";
+                       reg = <0 0xe6280000 0 0x1000>;
+                       interrupts = <GIC_SPI 223 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>;
+                       #iommu-cells = <1>;
+                       status = "disabled";
+               };
+
+               ipmmu_sy1: mmu@e6290000 {
+                       compatible = "renesas,ipmmu-r8a7744",
+                                    "renesas,ipmmu-vmsa";
+                       reg = <0 0xe6290000 0 0x1000>;
+                       interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>;
+                       #iommu-cells = <1>;
+                       status = "disabled";
+               };
+
+               ipmmu_ds: mmu@e6740000 {
+                       compatible = "renesas,ipmmu-r8a7744",
+                                    "renesas,ipmmu-vmsa";
+                       reg = <0 0xe6740000 0 0x1000>;
+                       interrupts = <GIC_SPI 198 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 199 IRQ_TYPE_LEVEL_HIGH>;
+                       #iommu-cells = <1>;
+                       status = "disabled";
+               };
+
+               ipmmu_mp: mmu@ec680000 {
+                       compatible = "renesas,ipmmu-r8a7744",
+                                    "renesas,ipmmu-vmsa";
+                       reg = <0 0xec680000 0 0x1000>;
+                       interrupts = <GIC_SPI 226 IRQ_TYPE_LEVEL_HIGH>;
+                       #iommu-cells = <1>;
+                       status = "disabled";
+               };
+
+               ipmmu_mx: mmu@fe951000 {
+                       compatible = "renesas,ipmmu-r8a7744",
+                                    "renesas,ipmmu-vmsa";
+                       reg = <0 0xfe951000 0 0x1000>;
+                       interrupts = <GIC_SPI 222 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 221 IRQ_TYPE_LEVEL_HIGH>;
+                       #iommu-cells = <1>;
+                       status = "disabled";
+               };
+
+               ipmmu_gp: mmu@e62a0000 {
+                       compatible = "renesas,ipmmu-r8a7744",
+                                    "renesas,ipmmu-vmsa";
+                       reg = <0 0xe62a0000 0 0x1000>;
+                       interrupts = <GIC_SPI 260 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 261 IRQ_TYPE_LEVEL_HIGH>;
+                       #iommu-cells = <1>;
+                       status = "disabled";
+               };
+
+               icram0: sram@e63a0000 {
+                       compatible = "mmio-sram";
+                       reg = <0 0xe63a0000 0 0x12000>;
+               };
+
+               icram1: sram@e63c0000 {
+                       compatible = "mmio-sram";
+                       reg = <0 0xe63c0000 0 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0 0 0xe63c0000 0x1000>;
+
+                       smp-sram@0 {
+                               compatible = "renesas,smp-sram";
+                               reg = <0 0x100>;
+                       };
+               };
+
+               icram2: sram@e6300000 {
+                       compatible = "mmio-sram";
+                       reg = <0 0xe6300000 0 0x40000>;
+               };
+
+               /* The memory map in the User's Manual maps the cores to
+                * bus numbers
+                */
+               i2c0: i2c@e6508000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 931>;
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c1: i2c@e6518000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7744",
+                                    "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 R8A7744_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-r8a7744",
+                                    "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 R8A7744_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-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 928>;
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c4: i2c@e6520000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7744",
+                                    "renesas,rcar-gen2-i2c";
+                       reg = <0 0xe6520000 0 0x40>;
+                       interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 927>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 927>;
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c5: i2c@e6528000 {
+                       /* doesn't need pinmux */
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a7744",
+                                    "renesas,rcar-gen2-i2c";
+                       reg = <0 0xe6528000 0 0x40>;
+                       interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 925>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 925>;
+                       i2c-scl-internal-delay-ns = <110>;
+                       status = "disabled";
+               };
+
+               iic0: i2c@e6500000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 318>;
+                       status = "disabled";
+               };
+
+               iic1: i2c@e6510000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 323>;
+                       status = "disabled";
+               };
+
+               iic3: i2c@e60b0000 {
+                       /* doesn't need pinmux */
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a7744";
+                       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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 926>;
+                       status = "disabled";
+               };
+
+               hsusb: usb@e6590000 {
+                       compatible = "renesas,usbhs-r8a7744",
+                                    "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 R8A7744_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-r8a7744",
+                                    "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 R8A7744_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,r8a7744-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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 330>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac1: dma-controller@e65b0000 {
+                       compatible = "renesas,r8a7744-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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 331>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               dmac0: dma-controller@e6700000 {
+                       compatible = "renesas,dmac-r8a7744",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xe6700000 0 0x20000>;
+                       interrupts = <GIC_SPI 197 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>;
+                       interrupt-names = "error",
+                                         "ch0", "ch1", "ch2", "ch3",
+                                         "ch4", "ch5", "ch6", "ch7",
+                                         "ch8", "ch9", "ch10", "ch11",
+                                         "ch12", "ch13", "ch14";
+                       clocks = <&cpg CPG_MOD 219>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 219>;
+                       #dma-cells = <1>;
+                       dma-channels = <15>;
+               };
+
+               dmac1: dma-controller@e6720000 {
+                       compatible = "renesas,dmac-r8a7744",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xe6720000 0 0x20000>;
+                       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>;
+                       interrupt-names = "error",
+                                         "ch0", "ch1", "ch2", "ch3",
+                                         "ch4", "ch5", "ch6", "ch7",
+                                         "ch8", "ch9", "ch10", "ch11",
+                                         "ch12", "ch13", "ch14";
+                       clocks = <&cpg CPG_MOD 218>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 218>;
+                       #dma-cells = <1>;
+                       dma-channels = <15>;
+               };
+
+               avb: ethernet@e6800000 {
+                       compatible = "renesas,etheravb-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 812>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               qspi: spi@e6b10000 {
+                       compatible = "renesas,qspi-r8a7744", "renesas,qspi";
+                       reg = <0 0xe6b10000 0 0x2c>;
+                       interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 917>;
+                       dmas = <&dmac0 0x17>, <&dmac0 0x18>,
+                              <&dmac1 0x17>, <&dmac1 0x18>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       num-cs = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&cpg 917>;
+                       status = "disabled";
+               };
+
+               scifa0: serial@e6c40000 {
+                       compatible = "renesas,scifa-r8a7744",
+                                    "renesas,rcar-gen2-scifa", "renesas,scifa";
+                       reg = <0 0xe6c40000 0 0x40>;
+                       interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 204>;
+                       clock-names = "fck";
+                       dmas = <&dmac0 0x21>, <&dmac0 0x22>,
+                              <&dmac1 0x21>, <&dmac1 0x22>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 204>;
+                       status = "disabled";
+               };
+
+               scifa1: serial@e6c50000 {
+                       compatible = "renesas,scifa-r8a7744",
+                                    "renesas,rcar-gen2-scifa", "renesas,scifa";
+                       reg = <0 0xe6c50000 0 0x40>;
+                       interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 203>;
+                       clock-names = "fck";
+                       dmas = <&dmac0 0x25>, <&dmac0 0x26>,
+                              <&dmac1 0x25>, <&dmac1 0x26>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 203>;
+                       status = "disabled";
+               };
+
+               scifa2: serial@e6c60000 {
+                       compatible = "renesas,scifa-r8a7744",
+                                    "renesas,rcar-gen2-scifa", "renesas,scifa";
+                       reg = <0 0xe6c60000 0 0x40>;
+                       interrupts = <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 202>;
+                       clock-names = "fck";
+                       dmas = <&dmac0 0x27>, <&dmac0 0x28>,
+                              <&dmac1 0x27>, <&dmac1 0x28>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 202>;
+                       status = "disabled";
+               };
+
+               scifa3: serial@e6c70000 {
+                       compatible = "renesas,scifa-r8a7744",
+                                    "renesas,rcar-gen2-scifa", "renesas,scifa";
+                       reg = <0 0xe6c70000 0 0x40>;
+                       interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 1106>;
+                       clock-names = "fck";
+                       dmas = <&dmac0 0x1b>, <&dmac0 0x1c>,
+                              <&dmac1 0x1b>, <&dmac1 0x1c>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 1106>;
+                       status = "disabled";
+               };
+
+               scifa4: serial@e6c78000 {
+                       compatible = "renesas,scifa-r8a7744",
+                                    "renesas,rcar-gen2-scifa", "renesas,scifa";
+                       reg = <0 0xe6c78000 0 0x40>;
+                       interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 1107>;
+                       clock-names = "fck";
+                       dmas = <&dmac0 0x1f>, <&dmac0 0x20>,
+                              <&dmac1 0x1f>, <&dmac1 0x20>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 1107>;
+                       status = "disabled";
+               };
+
+               scifa5: serial@e6c80000 {
+                       compatible = "renesas,scifa-r8a7744",
+                                    "renesas,rcar-gen2-scifa", "renesas,scifa";
+                       reg = <0 0xe6c80000 0 0x40>;
+                       interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 1108>;
+                       clock-names = "fck";
+                       dmas = <&dmac0 0x23>, <&dmac0 0x24>,
+                              <&dmac1 0x23>, <&dmac1 0x24>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 1108>;
+                       status = "disabled";
+               };
+
+               scifb0: serial@e6c20000 {
+                       compatible = "renesas,scifb-r8a7744",
+                                    "renesas,rcar-gen2-scifb", "renesas,scifb";
+                       reg = <0 0xe6c20000 0 0x100>;
+                       interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 206>;
+                       clock-names = "fck";
+                       dmas = <&dmac0 0x3d>, <&dmac0 0x3e>,
+                              <&dmac1 0x3d>, <&dmac1 0x3e>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 206>;
+                       status = "disabled";
+               };
+
+               scifb1: serial@e6c30000 {
+                       compatible = "renesas,scifb-r8a7744",
+                                    "renesas,rcar-gen2-scifb", "renesas,scifb";
+                       reg = <0 0xe6c30000 0 0x100>;
+                       interrupts = <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 207>;
+                       clock-names = "fck";
+                       dmas = <&dmac0 0x19>, <&dmac0 0x1a>,
+                              <&dmac1 0x19>, <&dmac1 0x1a>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 207>;
+                       status = "disabled";
+               };
+
+               scifb2: serial@e6ce0000 {
+                       compatible = "renesas,scifb-r8a7744",
+                                    "renesas,rcar-gen2-scifb", "renesas,scifb";
+                       reg = <0 0xe6ce0000 0 0x100>;
+                       interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 216>;
+                       clock-names = "fck";
+                       dmas = <&dmac0 0x1d>, <&dmac0 0x1e>,
+                              <&dmac1 0x1d>, <&dmac1 0x1e>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 216>;
+                       status = "disabled";
+               };
+
+               scif0: serial@e6e60000 {
+                       compatible = "renesas,scif-r8a7744",
+                                    "renesas,rcar-gen2-scif", "renesas,scif";
+                       reg = <0 0xe6e60000 0 0x40>;
+                       interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 721>,
+                                <&cpg CPG_CORE R8A7744_CLK_ZS>, <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x29>, <&dmac0 0x2a>,
+                              <&dmac1 0x29>, <&dmac1 0x2a>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 721>;
+                       status = "disabled";
+               };
+
+               scif1: serial@e6e68000 {
+                       compatible = "renesas,scif-r8a7744",
+                                    "renesas,rcar-gen2-scif", "renesas,scif";
+                       reg = <0 0xe6e68000 0 0x40>;
+                       interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 720>,
+                                <&cpg CPG_CORE R8A7744_CLK_ZS>, <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x2d>, <&dmac0 0x2e>,
+                              <&dmac1 0x2d>, <&dmac1 0x2e>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 720>;
+                       status = "disabled";
+               };
+
+               scif2: serial@e6e58000 {
+                       compatible = "renesas,scif-r8a7744",
+                                    "renesas,rcar-gen2-scif", "renesas,scif";
+                       reg = <0 0xe6e58000 0 0x40>;
+                       interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 719>,
+                                <&cpg CPG_CORE R8A7744_CLK_ZS>, <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x2b>, <&dmac0 0x2c>,
+                              <&dmac1 0x2b>, <&dmac1 0x2c>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 719>;
+                       status = "disabled";
+               };
+
+               scif3: serial@e6ea8000 {
+                       compatible = "renesas,scif-r8a7744",
+                                    "renesas,rcar-gen2-scif", "renesas,scif";
+                       reg = <0 0xe6ea8000 0 0x40>;
+                       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 718>,
+                                <&cpg CPG_CORE R8A7744_CLK_ZS>, <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x2f>, <&dmac0 0x30>,
+                              <&dmac1 0x2f>, <&dmac1 0x30>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 718>;
+                       status = "disabled";
+               };
+
+               scif4: serial@e6ee0000 {
+                       compatible = "renesas,scif-r8a7744",
+                                    "renesas,rcar-gen2-scif", "renesas,scif";
+                       reg = <0 0xe6ee0000 0 0x40>;
+                       interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 715>,
+                                <&cpg CPG_CORE R8A7744_CLK_ZS>, <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0xfb>, <&dmac0 0xfc>,
+                              <&dmac1 0xfb>, <&dmac1 0xfc>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 715>;
+                       status = "disabled";
+               };
+
+               scif5: serial@e6ee8000 {
+                       compatible = "renesas,scif-r8a7744",
+                                    "renesas,rcar-gen2-scif", "renesas,scif";
+                       reg = <0 0xe6ee8000 0 0x40>;
+                       interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 714>,
+                                <&cpg CPG_CORE R8A7744_CLK_ZS>, <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0xfd>, <&dmac0 0xfe>,
+                              <&dmac1 0xfd>, <&dmac1 0xfe>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 714>;
+                       status = "disabled";
+               };
+
+               hscif0: serial@e62c0000 {
+                       compatible = "renesas,hscif-r8a7744",
+                                    "renesas,rcar-gen2-hscif", "renesas,hscif";
+                       reg = <0 0xe62c0000 0 0x60>;
+                       interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 717>,
+                                <&cpg CPG_CORE R8A7744_CLK_ZS>, <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x39>, <&dmac0 0x3a>,
+                              <&dmac1 0x39>, <&dmac1 0x3a>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 717>;
+                       status = "disabled";
+               };
+
+               hscif1: serial@e62c8000 {
+                       compatible = "renesas,hscif-r8a7744",
+                                    "renesas,rcar-gen2-hscif", "renesas,hscif";
+                       reg = <0 0xe62c8000 0 0x60>;
+                       interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 716>,
+                                <&cpg CPG_CORE R8A7744_CLK_ZS>, <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x4d>, <&dmac0 0x4e>,
+                              <&dmac1 0x4d>, <&dmac1 0x4e>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 716>;
+                       status = "disabled";
+               };
+
+               hscif2: serial@e62d0000 {
+                       compatible = "renesas,hscif-r8a7744",
+                                    "renesas,rcar-gen2-hscif", "renesas,hscif";
+                       reg = <0 0xe62d0000 0 0x60>;
+                       interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 713>,
+                                <&cpg CPG_CORE R8A7744_CLK_ZS>, <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x3b>, <&dmac0 0x3c>,
+                              <&dmac1 0x3b>, <&dmac1 0x3c>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 713>;
+                       status = "disabled";
+               };
+
+               pwm0: pwm@e6e30000 {
+                       compatible = "renesas,pwm-r8a7744", "renesas,pwm-rcar";
+                       reg = <0 0xe6e30000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
+                       status = "disabled";
+               };
+
+               pwm1: pwm@e6e31000 {
+                       compatible = "renesas,pwm-r8a7744", "renesas,pwm-rcar";
+                       reg = <0 0xe6e31000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
+                       status = "disabled";
+               };
+
+               pwm2: pwm@e6e32000 {
+                       compatible = "renesas,pwm-r8a7744", "renesas,pwm-rcar";
+                       reg = <0 0xe6e32000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
+                       status = "disabled";
+               };
+
+               pwm3: pwm@e6e33000 {
+                       compatible = "renesas,pwm-r8a7744", "renesas,pwm-rcar";
+                       reg = <0 0xe6e33000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
+                       status = "disabled";
+               };
+
+               pwm4: pwm@e6e34000 {
+                       compatible = "renesas,pwm-r8a7744", "renesas,pwm-rcar";
+                       reg = <0 0xe6e34000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
+                       status = "disabled";
+               };
+
+               pwm5: pwm@e6e35000 {
+                       compatible = "renesas,pwm-r8a7744", "renesas,pwm-rcar";
+                       reg = <0 0xe6e35000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
+                       status = "disabled";
+               };
+
+               pwm6: pwm@e6e36000 {
+                       compatible = "renesas,pwm-r8a7744", "renesas,pwm-rcar";
+                       reg = <0 0xe6e36000 0 0x8>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       #pwm-cells = <2>;
+                       status = "disabled";
+               };
+
+               msiof0: spi@e6e20000 {
+                       compatible = "renesas,msiof-r8a7744",
+                                    "renesas,rcar-gen2-msiof";
+                       reg = <0 0xe6e20000 0 0x0064>;
+                       interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 000>;
+                       dmas = <&dmac0 0x51>, <&dmac0 0x52>,
+                              <&dmac1 0x51>, <&dmac1 0x52>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&cpg 000>;
+                       status = "disabled";
+               };
+
+               msiof1: spi@e6e10000 {
+                       compatible = "renesas,msiof-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&cpg 208>;
+                       status = "disabled";
+               };
+
+               msiof2: spi@e6e00000 {
+                       compatible = "renesas,msiof-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&cpg 205>;
+                       status = "disabled";
+               };
+
+               can0: can@e6e80000 {
+                       compatible = "renesas,can-r8a7744",
+                                    "renesas,rcar-gen2-can";
+                       reg = <0 0xe6e80000 0 0x1000>;
+                       interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 916>,
+                                <&cpg CPG_CORE R8A7744_CLK_RCAN>,
+                                <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 916>;
+                       status = "disabled";
+               };
+
+               can1: can@e6e88000 {
+                       compatible = "renesas,can-r8a7744",
+                                    "renesas,rcar-gen2-can";
+                       reg = <0 0xe6e88000 0 0x1000>;
+                       interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 915>,
+                                <&cpg CPG_CORE R8A7744_CLK_RCAN>,
+                                <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 915>;
+                       status = "disabled";
+               };
+
+               vin0: video@e6ef0000 {
+                       compatible = "renesas,vin-r8a7744",
+                                    "renesas,rcar-gen2-vin";
+                       reg = <0 0xe6ef0000 0 0x1000>;
+                       interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 811>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 811>;
+                       status = "disabled";
+               };
+
+               vin1: video@e6ef1000 {
+                       compatible = "renesas,vin-r8a7744",
+                                    "renesas,rcar-gen2-vin";
+                       reg = <0 0xe6ef1000 0 0x1000>;
+                       interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 810>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 810>;
+                       status = "disabled";
+               };
+
+               vin2: video@e6ef2000 {
+                       compatible = "renesas,vin-r8a7744",
+                                    "renesas,rcar-gen2-vin";
+                       reg = <0 0xe6ef2000 0 0x1000>;
+                       interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 809>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 809>;
+                       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-r8a7744",
+                                    "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 R8A7744_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 R8A7744_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-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 502>;
+                       #dma-cells = <1>;
+                       dma-channels = <13>;
+               };
+
+               audma1: dma-controller@ec720000 {
+                       compatible = "renesas,dmac-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 501>;
+                       #dma-cells = <1>;
+                       dma-channels = <13>;
+               };
+
+               /*
+                * pci1 and xhci share the same phy, therefore only one of them
+                * can be active at any one time. If both of them are enabled,
+                * a race condition will determine who'll control the phy.
+                * A firmware file is needed by the xhci driver in order for
+                * USB 3.0 to work properly.
+                */
+               xhci: usb@ee000000 {
+                       compatible = "renesas,xhci-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 328>;
+                       phys = <&usb2 1>;
+                       phy-names = "usb";
+                       status = "disabled";
+               };
+
+               pci0: pci@ee090000 {
+                       compatible = "renesas,pci-r8a7744",
+                                    "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 R8A7744_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 = <0xff00 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@ee0d0000 {
+                       compatible = "renesas,pci-r8a7744",
+                                    "renesas,pci-rcar-gen2";
+                       device_type = "pci";
+                       reg = <0 0xee0d0000 0 0xc00>,
+                             <0 0xee0c0000 0 0x1100>;
+                       interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 703>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 703>;
+                       status = "disabled";
+
+                       bus-range = <1 1>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       #interrupt-cells = <1>;
+                       ranges = <0x02000000 0 0xee0c0000 0 0xee0c0000 0 0x00010000>;
+                       interrupt-map-mask = <0xff00 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 = <0x10800 0 0 0 0>;
+                               phys = <&usb2 0>;
+                               phy-names = "usb";
+                       };
+
+                       usb@2,0 {
+                               reg = <0x11000 0 0 0 0>;
+                               phys = <&usb2 0>;
+                               phy-names = "usb";
+                       };
+               };
+
+               sdhi0: sd@ee100000 {
+                       compatible = "renesas,sdhi-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 314>;
+                       status = "disabled";
+               };
+
+               sdhi1: sd@ee140000 {
+                       compatible = "renesas,sdhi-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 312>;
+                       status = "disabled";
+               };
+
+               sdhi2: sd@ee160000 {
+                       compatible = "renesas,sdhi-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 311>;
+                       status = "disabled";
+               };
+
+               mmcif0: mmc@ee200000 {
+                       compatible = "renesas,mmcif-r8a7744",
+                                    "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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 315>;
+                       reg-io-width = <4>;
+                       max-frequency = <97500000>;
+                       status = "disabled";
+               };
+
+               gic: interrupt-controller@f1001000 {
+                       compatible = "arm,gic-400";
+                       #interrupt-cells = <3>;
+                       #address-cells = <0>;
+                       interrupt-controller;
+                       reg = <0 0xf1001000 0 0x1000>, <0 0xf1002000 0 0x2000>,
+                             <0 0xf1004000 0 0x2000>, <0 0xf1006000 0 0x2000>;
+                       interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
+                       clocks = <&cpg CPG_MOD 408>;
+                       clock-names = "clk";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 408>;
+               };
+
+               vsp@fe928000 {
+                       compatible = "renesas,vsp1";
+                       reg = <0 0xfe928000 0 0x8000>;
+                       interrupts = <GIC_SPI 267 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 131>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 131>;
+               };
+
+               vsp@fe930000 {
+                       compatible = "renesas,vsp1";
+                       reg = <0 0xfe930000 0 0x8000>;
+                       interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 128>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 128>;
+               };
+
+               vsp@fe938000 {
+                       compatible = "renesas,vsp1";
+                       reg = <0 0xfe938000 0 0x8000>;
+                       interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 127>;
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 127>;
+               };
+
+               pciec: pcie@fe000000 {
+                       compatible = "renesas,pcie-r8a7744",
+                                    "renesas,pcie-rcar-gen2";
+                       reg = <0 0xfe000000 0 0x80000>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       bus-range = <0x00 0xff>;
+                       device_type = "pci";
+                       ranges = <0x01000000 0 0x00000000 0 0xfe100000 0 0x00100000
+                                 0x02000000 0 0xfe200000 0 0xfe200000 0 0x00200000
+                                 0x02000000 0 0x30000000 0 0x30000000 0 0x08000000
+                                 0x42000000 0 0x38000000 0 0x38000000 0 0x08000000>;
+                       /* Map all possible DDR as inbound ranges */
+                       dma-ranges = <0x42000000 0 0x40000000 0 0x40000000 0 0x80000000
+                                     0x43000000 2 0x00000000 2 0x00000000 1 0x00000000>;
+                       interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0>;
+                       interrupt-map = <0 0 0 0 &gic GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 319>, <&pcie_bus_clk>;
+                       clock-names = "pcie", "pcie_bus";
+                       power-domains = <&sysc R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 319>;
+                       status = "disabled";
+               };
+
+               du: display@feb00000 {
+                       reg = <0 0xfeb00000 0 0x40000>,
+                             <0 0xfeb90000 0 0x1c>;
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
+                                       reg = <0>;
+                                       du_out_rgb: endpoint {
+                                       };
+                               };
+                               port@1 {
+                                       reg = <1>;
+                                       du_out_lvds0: endpoint {
+                                       };
+                               };
+                       };
+                       /* placeholder */
+               };
+
+               prr: chipid@ff000044 {
+                       compatible = "renesas,prr";
+                       reg = <0 0xff000044 0 4>;
+               };
+
+               cmt0: timer@ffca0000 {
+                       compatible = "renesas,r8a7744-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 R8A7744_PD_ALWAYS_ON>;
+                       resets = <&cpg 124>;
+                       status = "disabled";
+               };
+
+               cmt1: timer@e6130000 {
+                       compatible = "renesas,r8a7744-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 R8A7744_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 {
+               compatible = "arm,armv7-timer";
+               interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
+                                     <&gic GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>;
+       };
+
+       /* External USB clock - can be overridden by the board */
+       usb_extal_clk: usb_extal {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <48000000>;
+       };
+};
index 22da819..40b7f98 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 /dts-v1/;
+#include <dt-bindings/gpio/gpio.h>
 #include "r8a77470.dtsi"
 / {
        model = "iWave iW-RainboW-G23S single board computer based on RZ/G1C";
                device_type = "memory";
                reg = <0 0x40000000 0 0x20000000>;
        };
+
+       reg_1p8v: reg-1p8v {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-1.8V";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       reg_3p3v: reg-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-3.3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       vccq_sdhi2: regulator-vccq-sdhi2 {
+               compatible = "regulator-gpio";
+
+               regulator-name = "SDHI2 VccQ";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpios = <&gpio2 24 GPIO_ACTIVE_LOW>;
+               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;
        };
 };
 
+&cmt0 {
+       status = "okay";
+};
+
 &extal_clk {
        clock-frequency = <20000000>;
 };
 
 &pfc {
+       avb_pins: avb {
+               groups = "avb_mdio", "avb_gmii_tx_rx";
+               function = "avb";
+       };
+
+       mmc_pins_uhs: mmc_uhs {
+               groups = "mmc_data8", "mmc_ctrl";
+               function = "mmc";
+               power-source = <1800>;
+       };
+
+       qspi0_pins: qspi0 {
+               groups = "qspi0_ctrl", "qspi0_data2";
+               function = "qspi0";
+       };
+
        scif1_pins: scif1 {
                groups = "scif1_data_b";
                function = "scif1";
        };
+
+       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>;
+       };
+};
+
+&qspi0 {
+       pinctrl-0 = <&qspi0_pins>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       /* WARNING - This device contains the bootloader. Handle with care. */
+       flash: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "issi,is25lp016d", "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <133000000>;
+               spi-tx-bus-width = <1>;
+               spi-rx-bus-width = <1>;
+               m25p,fast-read;
+               spi-cpol;
+               spi-cpha;
+       };
+};
+
+&rwdt {
+       timeout-sec = <60>;
+       status = "okay";
 };
 
 &scif1 {
 
        status = "okay";
 };
+
+&sdhi1 {
+       pinctrl-0 = <&mmc_pins_uhs>;
+       pinctrl-names = "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";
+};
+
+&sdhi2 {
+       pinctrl-0 = <&sdhi2_pins>;
+       pinctrl-1 = <&sdhi2_pins_uhs>;
+       pinctrl-names = "default", "state_uhs";
+
+       vmmc-supply = <&reg_3p3v>;
+       vqmmc-supply = <&vccq_sdhi2>;
+       bus-width = <4>;
+       cd-gpios = <&gpio4 20 GPIO_ACTIVE_LOW>;
+       sd-uhs-sdr50;
+       status = "okay";
+};
index 9ec78d3..f4e232b 100644 (file)
        #address-cells = <2>;
        #size-cells = <2>;
 
+       aliases {
+               i2c0 = &i2c0;
+               i2c1 = &i2c1;
+               i2c2 = &i2c2;
+               i2c3 = &i2c3;
+               i2c4 = &i2c4;
+       };
+
        cpus {
                #address-cells = <1>;
                #size-cells = <0>;
                #size-cells = <2>;
                ranges;
 
+               rwdt: watchdog@e6020000 {
+                       compatible = "renesas,r8a77470-wdt",
+                                    "renesas,rcar-gen2-wdt";
+                       reg = <0 0xe6020000 0 0x0c>;
+                       clocks = <&cpg CPG_MOD 402>;
+                       power-domains = <&sysc R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 402>;
+                       status = "disabled";
+               };
+
                gpio0: gpio@e6050000 {
                        compatible = "renesas,gpio-r8a77470",
                                     "renesas,rcar-gen2-gpio";
                        reg = <0 0xe6300000 0 0x20000>;
                };
 
+               i2c0: i2c@e6508000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77470",
+                                    "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 R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 931>;
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
+               i2c1: i2c@e6518000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,i2c-r8a77470",
+                                    "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 R8A77470_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-r8a77470",
+                                    "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 R8A77470_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-r8a77470",
+                                    "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 R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 928>;
+                       i2c-scl-internal-delay-ns = <6>;
+                       status = "disabled";
+               };
+
                i2c4: i2c@e6520000 {
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };
 
+               usb_dmac00: dma-controller@e65a0000 {
+                       compatible = "renesas,r8a77470-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 R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 330>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac10: dma-controller@e65b0000 {
+                       compatible = "renesas,r8a77470-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 R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 331>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac01: dma-controller@e65a8000 {
+                       compatible = "renesas,r8a77470-usb-dmac",
+                                    "renesas,usb-dmac";
+                       reg = <0 0xe65a8000 0 0x100>;
+                       interrupts = <GIC_SPI 293 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 293 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1";
+                       clocks = <&cpg CPG_MOD 326>;
+                       power-domains = <&sysc R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 326>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac11: dma-controller@e65b8000 {
+                       compatible = "renesas,r8a77470-usb-dmac",
+                                    "renesas,usb-dmac";
+                       reg = <0 0xe65b8000 0 0x100>;
+                       interrupts = <GIC_SPI 292 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 292 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ch0", "ch1";
+                       clocks = <&cpg CPG_MOD 327>;
+                       power-domains = <&sysc R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 327>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
                dmac0: dma-controller@e6700000 {
                        compatible = "renesas,dmac-r8a77470",
                                     "renesas,rcar-dmac";
                        status = "disabled";
                };
 
+               qspi0: spi@e6b10000 {
+                       compatible = "renesas,qspi-r8a77470", "renesas,qspi";
+                       reg = <0 0xe6b10000 0 0x2c>;
+                       interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 918>;
+                       dmas = <&dmac0 0x17>, <&dmac0 0x18>,
+                              <&dmac1 0x17>, <&dmac1 0x18>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77470_PD_ALWAYS_ON>;
+                       num-cs = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&cpg 918>;
+                       status = "disabled";
+               };
+
+               qspi1: spi@ee200000 {
+                       compatible = "renesas,qspi-r8a77470", "renesas,qspi";
+                       reg = <0 0xee200000 0 0x2c>;
+                       interrupts = <GIC_SPI 239 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 917>;
+                       dmas = <&dmac0 0xd1>, <&dmac0 0xd2>,
+                              <&dmac1 0xd1>, <&dmac1 0xd2>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77470_PD_ALWAYS_ON>;
+                       num-cs = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       resets = <&cpg 917>;
+                       status = "disabled";
+               };
+
                scif0: serial@e6e60000 {
                        compatible = "renesas,scif-r8a77470",
                                     "renesas,rcar-gen2-scif", "renesas,scif";
                        status = "disabled";
                };
 
+               sdhi0: sd@ee100000 {
+                       compatible = "renesas,sdhi-r8a77470",
+                                    "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 = <156000000>;
+                       power-domains = <&sysc R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 314>;
+                       status = "disabled";
+               };
+
+               sdhi1: sd@ee300000 {
+                       compatible = "renesas,sdhi-mmc-r8a77470";
+                       reg = <0 0xee300000 0 0x2000>;
+                       interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 313>;
+                       max-frequency = <156000000>;
+                       power-domains = <&sysc R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 313>;
+                       status = "disabled";
+               };
+
                sdhi2: sd@ee160000 {
                        compatible = "renesas,sdhi-r8a77470",
                                     "renesas,rcar-gen2-sdhi";
                        dmas = <&dmac0 0xd3>, <&dmac0 0xd4>,
                               <&dmac1 0xd3>, <&dmac1 0xd4>;
                        dma-names = "tx", "rx", "tx", "rx";
-                       max-frequency = <97500000>;
+                       max-frequency = <78000000>;
                        power-domains = <&sysc R8A77470_PD_ALWAYS_ON>;
                        resets = <&cpg 312>;
                        status = "disabled";
                        compatible = "renesas,prr";
                        reg = <0 0xff000044 0 4>;
                };
+
+               cmt0: timer@ffca0000 {
+                       compatible = "renesas,r8a77470-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 R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 124>;
+                       status = "disabled";
+               };
+
+               cmt1: timer@e6130000 {
+                       compatible = "renesas,r8a77470-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 R8A77470_PD_ALWAYS_ON>;
+                       resets = <&cpg 329>;
+                       status = "disabled";
+               };
        };
 
        timer {
index 50312e7..7b9508e 100644 (file)
 };
 
 &lvds1 {
-       status = "okay";
-
        ports {
                port@1 {
                        lvds_connector: endpoint {
index ce22db0..e6580aa 100644 (file)
 };
 
 &lvds0 {
-       status = "okay";
-
        ports {
                port@1 {
                        lvds_connector: endpoint {
index f02036e..fefdf82 100644 (file)
 };
 
 &lvds0 {
-       status = "okay";
-
        ports {
                port@1 {
                        lvds_connector: endpoint {
index eaf9497..4c1ab49 100644 (file)
                        status = "disabled";
                };
 
-               gic: gic@44101000 {
+               pinctrl: pin-controller@40067000 {
+                       compatible = "renesas,r9a06g032-pinctrl", "renesas,rzn1-pinctrl";
+                       reg = <0x40067000 0x1000>, <0x51000000 0x480>;
+                       clocks = <&sysctrl R9A06G032_HCLK_PINCONFIG>;
+                       clock-names = "bus";
+                       status = "okay";
+               };
+
+               gic: interrupt-controller@44101000 {
                        compatible = "arm,cortex-a7-gic", "arm,gic-400";
                        interrupt-controller;
                        #interrupt-cells = <3>;
index 2ab3c4b..112d2bf 100644 (file)
@@ -7,6 +7,7 @@
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/pinctrl/rockchip.h>
 #include <dt-bindings/clock/rk3066a-cru.h>
+#include <dt-bindings/power/rk3066-power.h>
 #include "rk3xxx.dtsi"
 
 / {
                          "ppmmu2",
                          "pp3",
                          "ppmmu3";
+       power-domains = <&power RK3066_PD_GPU>;
 };
 
 &i2c0 {
        dma-names = "rx-tx";
 };
 
+&pmu {
+       power: power-controller {
+               compatible = "rockchip,rk3066-power-controller";
+               #power-domain-cells = <1>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pd_vio@RK3066_PD_VIO {
+                       reg = <RK3066_PD_VIO>;
+                       clocks = <&cru ACLK_LCDC0>,
+                                <&cru ACLK_LCDC1>,
+                                <&cru DCLK_LCDC0>,
+                                <&cru DCLK_LCDC1>,
+                                <&cru HCLK_LCDC0>,
+                                <&cru HCLK_LCDC1>,
+                                <&cru SCLK_CIF1>,
+                                <&cru ACLK_CIF1>,
+                                <&cru HCLK_CIF1>,
+                                <&cru SCLK_CIF0>,
+                                <&cru ACLK_CIF0>,
+                                <&cru HCLK_CIF0>,
+                                <&cru ACLK_IPP>,
+                                <&cru HCLK_IPP>,
+                                <&cru ACLK_RGA>,
+                                <&cru HCLK_RGA>;
+                       pm_qos = <&qos_lcdc0>,
+                                <&qos_lcdc1>,
+                                <&qos_cif0>,
+                                <&qos_cif1>,
+                                <&qos_ipp>,
+                                <&qos_rga>;
+               };
+
+               pd_video@RK3066_PD_VIDEO {
+                       reg = <RK3066_PD_VIDEO>;
+                       clocks = <&cru ACLK_VDPU>,
+                                <&cru ACLK_VEPU>,
+                                <&cru HCLK_VDPU>,
+                                <&cru HCLK_VEPU>;
+                       pm_qos = <&qos_vpu>;
+               };
+
+               pd_gpu@RK3066_PD_GPU {
+                       reg = <RK3066_PD_GPU>;
+                       clocks = <&cru ACLK_GPU>;
+                       pm_qos = <&qos_gpu>;
+               };
+       };
+};
+
 &pwm0 {
        pinctrl-names = "default";
        pinctrl-0 = <&pwm0_out>;
index b6f7909..7e0dc52 100644 (file)
@@ -7,6 +7,7 @@
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/pinctrl/rockchip.h>
 #include <dt-bindings/clock/rk3188-cru.h>
+#include <dt-bindings/power/rk3188-power.h>
 #include "rk3xxx.dtsi"
 
 / {
@@ -80,6 +81,7 @@
                interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&cru ACLK_LCDC0>, <&cru DCLK_LCDC0>, <&cru HCLK_LCDC0>;
                clock-names = "aclk_vop", "dclk_vop", "hclk_vop";
+               power-domains = <&power RK3188_PD_VIO>;
                resets = <&cru SRST_LCDC0_AXI>, <&cru SRST_LCDC0_AHB>, <&cru SRST_LCDC0_DCLK>;
                reset-names = "axi", "ahb", "dclk";
                status = "disabled";
@@ -96,6 +98,7 @@
                interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&cru ACLK_LCDC1>, <&cru DCLK_LCDC1>, <&cru HCLK_LCDC1>;
                clock-names = "aclk_vop", "dclk_vop", "hclk_vop";
+               power-domains = <&power RK3188_PD_VIO>;
                resets = <&cru SRST_LCDC1_AXI>, <&cru SRST_LCDC1_AHB>, <&cru SRST_LCDC1_DCLK>;
                reset-names = "axi", "ahb", "dclk";
                status = "disabled";
                          "ppmmu2",
                          "pp3",
                          "ppmmu3";
+       power-domains = <&power RK3188_PD_GPU>;
 };
 
 &i2c0 {
        pinctrl-0 = <&i2c4_xfer>;
 };
 
+&pmu {
+       power: power-controller {
+               compatible = "rockchip,rk3188-power-controller";
+               #power-domain-cells = <1>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pd_vio@RK3188_PD_VIO {
+                       reg = <RK3188_PD_VIO>;
+                       clocks = <&cru ACLK_LCDC0>,
+                                <&cru ACLK_LCDC1>,
+                                <&cru DCLK_LCDC0>,
+                                <&cru DCLK_LCDC1>,
+                                <&cru HCLK_LCDC0>,
+                                <&cru HCLK_LCDC1>,
+                                <&cru SCLK_CIF0>,
+                                <&cru ACLK_CIF0>,
+                                <&cru HCLK_CIF0>,
+                                <&cru ACLK_IPP>,
+                                <&cru HCLK_IPP>,
+                                <&cru ACLK_RGA>,
+                                <&cru HCLK_RGA>;
+                       pm_qos = <&qos_lcdc0>,
+                                <&qos_lcdc1>,
+                                <&qos_cif0>,
+                                <&qos_cif1>,
+                                <&qos_ipp>,
+                                <&qos_rga>;
+               };
+
+               pd_video@RK3188_PD_VIDEO {
+                       reg = <RK3188_PD_VIDEO>;
+                       clocks = <&cru ACLK_VDPU>,
+                                <&cru ACLK_VEPU>,
+                                <&cru HCLK_VDPU>,
+                                <&cru HCLK_VEPU>;
+                       pm_qos = <&qos_vpu>;
+               };
+
+               pd_gpu@RK3188_PD_GPU {
+                       reg = <RK3188_PD_GPU>;
+                       clocks = <&cru ACLK_GPU>;
+                       pm_qos = <&qos_gpu>;
+               };
+       };
+};
+
 &pwm0 {
        pinctrl-names = "default";
        pinctrl-0 = <&pwm0_out>;
index cd8f2a3..29f1907 100644 (file)
                                map0 {
                                        trip = <&cpu_alert0>;
                                        cooling-device =
-                                               <&cpu0 THERMAL_NO_LIMIT 6>;
+                                               <&cpu0 THERMAL_NO_LIMIT 6>,
+                                               <&cpu1 THERMAL_NO_LIMIT 6>,
+                                               <&cpu2 THERMAL_NO_LIMIT 6>,
+                                               <&cpu3 THERMAL_NO_LIMIT 6>;
                                };
                                map1 {
                                        trip = <&cpu_alert1>;
                                        cooling-device =
-                                               <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                               <&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>;
                                };
                        };
                };
index 5032548..32e1ab3 100644 (file)
@@ -25,7 +25,7 @@
 
        vcc_flash: flash-regulator {
                compatible = "regulator-fixed";
-               regulator-name = "vcc_sys";
+               regulator-name = "vcc_flash";
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <1800000>;
                startup-delay-us = <150>;
index 1e0158a..d889ab3 100644 (file)
                 */
                cpu_warm_limit_cpu {
                        trip = <&cpu_alert_warm>;
-                       cooling-device =
-                               <&cpu0 THERMAL_NO_LIMIT 4>;
+                       cooling-device = <&cpu0 THERMAL_NO_LIMIT 4>,
+                                        <&cpu1 THERMAL_NO_LIMIT 4>,
+                                        <&cpu2 THERMAL_NO_LIMIT 4>,
+                                        <&cpu3 THERMAL_NO_LIMIT 4>;
                };
 
                /*
                 */
                cpu_almost_hot_limit_cpu {
                        trip = <&cpu_alert_almost_hot>;
-                       cooling-device =
-                               <&cpu0 5 6>;
+                       cooling-device = <&cpu0 5 6>, <&cpu1 5 6>, <&cpu2 5 6>,
+                                        <&cpu3 5 6>;
                };
                cpu_hot_limit_cpu {
                        trip = <&cpu_alert_hot>;
-                       cooling-device =
-                               <&cpu0 7 7>;
+                       cooling-device = <&cpu0 7 7>, <&cpu1 7 7>, <&cpu2 7 7>,
+                                        <&cpu3 7 7>;
                };
                cpu_hotter_limit_cpu {
                        trip = <&cpu_alert_hotter>;
-                       cooling-device =
-                               <&cpu0 7 8>;
+                       cooling-device = <&cpu0 7 8>, <&cpu1 7 8>, <&cpu2 7 8>,
+                                        <&cpu3 7 8>;
                };
                cpu_very_hot_limit_cpu {
                        trip = <&cpu_alert_very_hot>;
-                       cooling-device =
-                               <&cpu0 8 THERMAL_NO_LIMIT>;
+                       cooling-device = <&cpu0 8 THERMAL_NO_LIMIT>,
+                                        <&cpu1 8 THERMAL_NO_LIMIT>,
+                                        <&cpu2 8 THERMAL_NO_LIMIT>,
+                                        <&cpu3 8 THERMAL_NO_LIMIT>;
                };
        };
 };
index 0840ffb..1da86e8 100644 (file)
                                map0 {
                                        trip = <&cpu_alert0>;
                                        cooling-device =
-                                               <&cpu0 THERMAL_NO_LIMIT 6>;
+                                               <&cpu0 THERMAL_NO_LIMIT 6>,
+                                               <&cpu1 THERMAL_NO_LIMIT 6>,
+                                               <&cpu2 THERMAL_NO_LIMIT 6>,
+                                               <&cpu3 THERMAL_NO_LIMIT 6>;
                                };
                                map1 {
                                        trip = <&cpu_alert1>;
                                        cooling-device =
-                                               <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                               <&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>;
                                };
                        };
                };
                                map0 {
                                        trip = <&gpu_alert0>;
                                        cooling-device =
-                                               <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                               <&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>;
                                };
                        };
                };
index d752dc6..97307a4 100644 (file)
                status = "disabled";
        };
 
+       qos_gpu: qos@1012d000 {
+               compatible = "syscon";
+               reg = <0x1012d000 0x20>;
+       };
+
+       qos_vpu: qos@1012e000 {
+               compatible = "syscon";
+               reg = <0x1012e000 0x20>;
+       };
+
+       qos_lcdc0: qos@1012f000 {
+               compatible = "syscon";
+               reg = <0x1012f000 0x20>;
+       };
+
+       qos_cif0: qos@1012f080 {
+               compatible = "syscon";
+               reg = <0x1012f080 0x20>;
+       };
+
+       qos_ipp: qos@1012f100 {
+               compatible = "syscon";
+               reg = <0x1012f100 0x20>;
+       };
+
+       qos_lcdc1: qos@1012f180 {
+               compatible = "syscon";
+               reg = <0x1012f180 0x20>;
+       };
+
+       qos_cif1: qos@1012f200 {
+               compatible = "syscon";
+               reg = <0x1012f200 0x20>;
+       };
+
+       qos_rga: qos@1012f280 {
+               compatible = "syscon";
+               reg = <0x1012f280 0x20>;
+       };
+
        usb_otg: usb@10180000 {
                compatible = "rockchip,rk3066-usb", "snps,dwc2";
                reg = <0x10180000 0x40000>;
index 75f454a..12eac89 100644 (file)
                                samsung,lcd-wb;
                        };
                };
+
+               jpeg_codec: jpeg-codec@fb600000 {
+                       compatible = "samsung,s5pv210-jpeg";
+                       reg = <0xfb600000 0x1000>;
+                       interrupt-parent = <&vic2>;
+                       interrupts = <8>;
+                       clocks = <&clocks CLK_JPEG>;
+                       clock-names = "jpeg";
+               };
        };
 };
 
index e8f0a07..3383699 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Device Tree Source for the SH73A0 SoC
+ * Device Tree Source for the SH-Mobile AG5 (R8A73A00/SH73A0) SoC
  *
  * Copyright (C) 2012 Renesas Solutions Corp.
  */
index 2d30039..dcb8fba 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- *  Copyright (C) 2012 Altera <www.altera.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * Copyright (C) 2012 Altera <www.altera.com>
  */
 
 #include <dt-bindings/reset/altr,rst-mgr.h>
                              <0xffb80000 0x10000>;
                        reg-names = "nand_data", "denali_reg";
                        interrupts = <0x0 0x90 0x4>;
-                       dma-mask = <0xffffffff>;
                        clocks = <&nand_clk>, <&nand_x_clk>, <&nand_ecc_clk>;
                        clock-names = "nand", "nand_x", "ecc";
                        status = "disabled";
 
                qspi: spi@ff705000 {
                        compatible = "cdns,qspi-nor";
-                        #address-cells = <1>;
+                       #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0xff705000 0x1000>,
                              <0xffa00000 0x1000>;
index 59ef13e..e41fa23 100644 (file)
@@ -1,17 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright Altera Corporation (C) 2014. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <dt-bindings/interrupt-controller/arm-gic.h>
                              <0xffb80000 0x10000>;
                        reg-names = "nand_data", "denali_reg";
                        interrupts = <0 99 4>;
-                       dma-mask = <0xffffffff>;
                        clocks = <&nand_clk>, <&nand_x_clk>, <&nand_ecc_clk>;
                        clock-names = "nand", "nand_x", "ecc";
                        status = "disabled";
index 64cc86a..360dae5 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2015 Altera Corporation <www.altera.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include "socfpga_arria10.dtsi"
 
index d14f9cc..e36e0a0 100644 (file)
@@ -1,17 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2015 Altera Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 /dts-v1/;
index beb2fc6..b4c0a76 100644 (file)
@@ -1,17 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright (C) 2016 Intel. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 /dts-v1/;
index 5822fd2..df2bab1 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2014-2015 Altera Corporation <www.altera.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 /dts-v1/;
index e59461f..22dbf07 100644 (file)
@@ -1,17 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
- *  Copyright (C) 2013 Altera Corporation <www.altera.com>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program.  If not, see <http://www.gnu.org/licenses/>.
+ * Copyright (C) 2013 Altera Corporation <www.altera.com>
  */
 
 /dts-v1/;
index aac4fee..90e676e 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- *  Copyright (C) 2013 Altera Corporation <www.altera.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * Copyright (C) 2013 Altera Corporation <www.altera.com>
  */
 
 #include "socfpga_arria5.dtsi"
index 68ced67..319a71e 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- *  Copyright (C) 2012 Altera Corporation <www.altera.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * Copyright (C) 2012 Altera Corporation <www.altera.com>
  */
 
 /dts-v1/;
index 31b01a9..67076e1 100644 (file)
@@ -1,17 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * Copyright Altera Corporation (C) 2015. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "socfpga_cyclone5.dtsi"
index 3c03da6..bd92806 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2015 Marek Vasut <marex@denx.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "socfpga_cyclone5.dtsi"
index c2eb88a..ceaec29 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2015 Marek Vasut <marex@denx.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "socfpga_cyclone5_mcv.dtsi"
index 155829f..6f138b2 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- *  Copyright (C) 2012 Altera Corporation <www.altera.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * Copyright (C) 2012 Altera Corporation <www.altera.com>
  */
 
 #include "socfpga_cyclone5.dtsi"
index a4a555c..c155ff0 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- *  Copyright (C) 2013 Steffen Trumtrar <s.trumtrar@pengutronix.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * Copyright (C) 2013 Steffen Trumtrar <s.trumtrar@pengutronix.de>
  */
 
 #include "socfpga_cyclone5.dtsi"
index 031c721..8d5d399 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- *  Copyright (C) 2014 Steffen Trumtrar <s.trumtrar@pengutronix.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * Copyright (C) 2014 Steffen Trumtrar <s.trumtrar@pengutronix.de>
  */
 
 #include "socfpga_cyclone5.dtsi"
index 8860dd2..99a7175 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- *  Copyright (C) 2016 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * Copyright (C) 2016 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
  */
 
 #include "socfpga_cyclone5.dtsi"
 };
 
 &qspi {
-        status = "okay";
+       status = "okay";
 
-        flash0: n25q512a@0 {
+       flash0: n25q512a@0 {
                #address-cells = <1>;
                #size-cells = <1>;
                compatible = "n25q512a";
index e61efe1..355b3db 100644 (file)
@@ -1,48 +1,6 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR X11)
 /*
- *  Copyright (C) 2015 Marek Vasut <marex@denx.de>
- *
- * This file is dual-licensed: you can use it either under the terms
- * of the GPL or the X11 license, at your option. Note that this dual
- * licensing only applies to this file, and not this project as a
- * whole.
- *
- *  a) This file is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of
- *     the License, or (at your option) any later version.
- *
- *     This file is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public
- *     License along with this file; if not, write to the Free
- *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- *     MA 02110-1301 USA
- *
- * Or, alternatively,
- *
- *  b) Permission is hereby granted, free of charge, to any person
- *     obtaining a copy of this software and associated documentation
- *     files (the "Software"), to deal in the Software without
- *     restriction, including without limitation the rights to use,
- *     copy, modify, merge, publish, distribute, sublicense, and/or
- *     sell copies of the Software, and to permit persons to whom the
- *     Software is furnished to do so, subject to the following
- *     conditions:
- *
- *     The above copyright notice and this permission notice shall be
- *     included in all copies or substantial portions of the Software.
- *
- *     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.
+ * Copyright (C) 2015 Marek Vasut <marex@denx.de>
  */
 
 #include "socfpga_cyclone5.dtsi"
index 547c386..a77846f 100644 (file)
@@ -1,18 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- *  Copyright (C) 2013 Altera Corporation <www.altera.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * Copyright (C) 2013 Altera Corporation <www.altera.com>
  */
 
 /dts-v1/;
index 221acd1..2f0d966 100644 (file)
@@ -63,8 +63,6 @@
                compatible = "gpio-keys-polled";
                pinctrl-names = "default";
                pinctrl-0 = <&key_pins_inet9f>;
-               #address-cells = <1>;
-               #size-cells = <0>;
                poll-interval = <20>;
 
                left-joystick-left {
index b97a0f2..d82a604 100644 (file)
@@ -76,8 +76,6 @@
 
        gpio-keys {
                compatible = "gpio-keys";
-               #address-cells = <1>;
-               #size-cells = <0>;
 
                back {
                        label = "Key Back";
index 3d62a89..5d46bb0 100644 (file)
                                };
 
                                hdmi_out: port@1 {
-                                       #address-cells = <1>;
-                                       #size-cells = <0>;
                                        reg = <1>;
                                };
                        };
index 39504d7..64d50fc 100644 (file)
@@ -75,8 +75,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp152: pmic@30 {
@@ -89,8 +87,6 @@
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_t003>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 1 GPIO_ACTIVE_LOW>; /* PG1 */
 };
 
 &pio {
-       mmc0_cd_pin_t003: mmc0_cd_pin@0 {
-               pins = "PG1";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       led_pins_t003: led_pins@0 {
+       led_pins_t003: led-pin {
                pins = "PB2";
                function = "gpio_out";
                drive-strength = <20>;
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 8d4fb93..c88f089 100644 (file)
@@ -71,8 +71,6 @@
 
        reg_vmmc1: vmmc1 {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&mmc1_vcc_en_pin_t004>;
                regulator-name = "vmmc1";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
@@ -86,8 +84,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp152: pmic@30 {
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_t004>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 1 GPIO_ACTIVE_LOW>; /* PG1 */
 };
 
 &mmc1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>;
        vmmc-supply = <&reg_vmmc1>;
        bus-width = <4>;
        non-removable;
 };
 
 &pio {
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PG12";
                function = "gpio_in";
                bias-pull-up;
        };
 
-       mmc0_cd_pin_t004: mmc0_cd_pin@0 {
-               pins = "PG1";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       mmc1_vcc_en_pin_t004: mmc1_vcc_en_pin@0 {
-               pins = "PB18";
-               function = "gpio_out";
-       };
-
-       led_pins_t004: led_pins@0 {
+       led_pins_t004: led-pin {
                pins = "PB2";
                function = "gpio_out";
                drive-strength = <20>;
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index dd7fd5c..6e90ccb 100644 (file)
@@ -59,8 +59,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_mk802>;
 
                red {
                        label = "mk802:red:usr";
@@ -74,8 +72,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp152: pmic@30 {
@@ -88,8 +84,6 @@
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_mk802>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 1 GPIO_ACTIVE_LOW>; /* PG1 */
@@ -97,8 +91,6 @@
 };
 
 &mmc1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        non-removable;
        status = "okay";
 };
 
-&pio {
-       led_pins_mk802: led_pins@0 {
-               pins = "PB2";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin_mk802: mmc0_cd_pin@0 {
-               pins = "PG1";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb1_vbus_pin_mk802: usb1_vbus_pin@0 {
-               pins = "PB10";
-               function = "gpio_out";
-       };
-};
-
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_mk802>;
        gpio = <&pio 1 10 GPIO_ACTIVE_HIGH>; /* PB10 */
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 2c902ed..262c2ff 100644 (file)
@@ -97,7 +97,7 @@
 
 &emac {
        pinctrl-names = "default";
-       pinctrl-0 = <&emac_pins_b>;
+       pinctrl-0 = <&emac_pa_pins>;
        phy = <&phy1>;
        status = "okay";
 };
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp152: pmic@30 {
 #include "axp152.dtsi"
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        at24@50 {
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
        vref-supply = <&reg_vcc3v0>;
        status = "okay";
 
-       button@191 {
+       button-191 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <191274>;
        };
 
-       button@392 {
+       button-392 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
                voltage = <392644>;
        };
 
-       button@601 {
+       button-601 {
                label = "Menu";
                linux,code = <KEY_MENU>;
                channel = <0>;
                voltage = <601151>;
        };
 
-       button@795 {
+       button-795 {
                label = "Enter";
                linux,code = <KEY_ENTER>;
                channel = <0>;
                voltage = <795090>;
        };
 
-       button@987 {
+       button-987 {
                label = "Home";
                linux,code = <KEY_HOMEPAGE>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_olinuxino_micro>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 1 GPIO_ACTIVE_LOW>; /* PG1 */
 };
 
 &mmc1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>, <&mmc1_cd_pin_olinuxino_micro>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 13 GPIO_ACTIVE_LOW>; /* PG13 */
 };
 
 &pio {
-       mmc0_cd_pin_olinuxino_micro: mmc0_cd_pin@0 {
-               pins = "PG1";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       mmc1_cd_pin_olinuxino_micro: mmc1_cd_pin@0 {
-               pins = "PG13";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       led_pins_olinuxino: led_pins@0 {
+       led_pins_olinuxino: led-pin {
                pins = "PE3";
                function = "gpio_out";
                drive-strength = <20>;
        };
 
-       usb1_vbus_pin_olinuxino_m: usb1_vbus_pin@0 {
-               pins = "PB10";
-               function = "gpio_out";
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PG12";
                function = "gpio_in";
                bias-pull-up;
 };
 
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_olinuxino_m>;
        gpio = <&pio 1 10 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &spi2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi2_pins_b>,
-                   <&spi2_cs0_pins_b>;
+       pinctrl-0 = <&spi2_pb_pins>,
+                   <&spi2_cs0_pb_pin>;
        status = "okay";
 };
 
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 &uart2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart2_pins_b>;
+       pinctrl-0 = <&uart2_pc_pins>;
        status = "okay";
 };
 
 &uart3 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart3_pins_a>;
+       pinctrl-0 = <&uart3_pg_pins>;
        status = "okay";
 };
 
index 034853d..b2a49a2 100644 (file)
@@ -76,8 +76,6 @@
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_r7>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 1 GPIO_ACTIVE_LOW>; /* PG1 */
@@ -85,8 +83,6 @@
 };
 
 &mmc1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        non-removable;
 };
 
 &pio {
-       mmc0_cd_pin_r7: mmc0_cd_pin@0 {
-               pins = "PG1";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       led_pins_r7: led_pins@0 {
+       led_pins_r7: led-pin {
                pins = "PB2";
                function = "gpio_out";
                drive-strength = <20>;
        };
-
-       usb1_vbus_pin_r7: usb1_vbus_pin@0 {
-               pins = "PG13";
-               function = "gpio_out";
-       };
 };
 
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_r7>;
        gpio = <&pio 6 13 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 3f68ef5..b5ee8fb 100644 (file)
@@ -61,8 +61,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_wobo_i5>;
 
                blue {
                        label = "a10s-wobo-i5:blue:usr";
@@ -73,8 +71,6 @@
 
        reg_emac_3v3: emac-3v3 {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&emac_power_pin_wobo>;
                regulator-name = "emac-3v3";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
@@ -94,7 +90,7 @@
 
 &emac {
        pinctrl-names = "default";
-       pinctrl-0 = <&emac_pins_a>;
+       pinctrl-0 = <&emac_pd_pins>;
        phy = <&phy1>;
        status = "okay";
 };
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_wobo_i5>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 1 3 GPIO_ACTIVE_LOW>; /* PB3 */
        status = "okay";
 };
 
-&pio {
-       led_pins_wobo_i5: led_pins@0 {
-               pins = "PB2";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin_wobo_i5: mmc0_cd_pin@0 {
-               pins = "PB3";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       emac_power_pin_wobo: emac_power_pin@0 {
-               pins = "PA02";
-               function = "gpio_out";
-       };
-};
-
 &reg_dcdc2 {
        regulator-always-on;
        regulator-min-microvolt = <1000000>;
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 316cb8b..09c486b 100644 (file)
  *     OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "skeleton.dtsi"
-
 #include "sun5i.dtsi"
 
 #include <dt-bindings/dma/sun4i-a10.h>
 
 / {
-       interrupt-parent = <&intc>;
-
        aliases {
                ethernet0 = &emac;
        };
@@ -60,7 +56,7 @@
                #size-cells = <1>;
                ranges;
 
-               framebuffer@2 {
+               framebuffer-lcd0-hdmi {
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0-hdmi";
@@ -76,7 +72,7 @@
                allwinner,pipelines = <&fe0>;
        };
 
-       soc@1c00000 {
+       soc {
                hdmi: hdmi@1c16000 {
                        compatible = "allwinner,sun5i-a10s-hdmi";
                        reg = <0x01c16000 0x1000>;
                                };
 
                                hdmi_out: port@1 {
-                                       #address-cells = <1>;
-                                       #size-cells = <0>;
                                        reg = <1>;
                                };
                        };
        compatible = "allwinner,sun5i-a10s-ccu";
 };
 
+&mmc1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc1_pins>;
+};
+
 &pio {
        compatible = "allwinner,sun5i-a10s-pinctrl";
 
-       uart0_pins_a: uart0@0 {
+       uart0_pb_pins: uart0-pb-pins {
                pins = "PB19", "PB20";
                function = "uart0";
        };
 
-       uart2_pins_b: uart2@1 {
+       uart2_pc_pins: uart2-pc-pins {
                pins = "PC18", "PC19";
                function = "uart2";
        };
 
-       emac_pins_b: emac0@1 {
+       emac_pa_pins: emac-pa-pins {
                pins = "PA0", "PA1", "PA2",
                                "PA3", "PA4", "PA5", "PA6",
                                "PA7", "PA8", "PA9", "PA10",
                function = "emac";
        };
 
-       mmc1_pins_a: mmc1@0 {
+       mmc1_pins: mmc1-pins {
                pins = "PG3", "PG4", "PG5",
                                 "PG6", "PG7", "PG8";
                function = "mmc1";
                drive-strength = <30>;
        };
 
-       spi2_pins_b: spi2@1 {
+       spi2_pb_pins: spi2-pb-pins {
                pins = "PB12", "PB13", "PB14";
                function = "spi2";
        };
 
-       spi2_cs0_pins_b: spi2_cs0@1 {
+       spi2_cs0_pb_pin: spi2-cs0-pb-pin {
                pins = "PB11";
                function = "spi2";
        };
 };
 
-&sram_a {
-};
-
 &tcon0_out {
        tcon0_out_hdmi: endpoint@2 {
                reg = <2>;
index 378214d..f3cede9 100644 (file)
@@ -78,8 +78,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
@@ -91,8 +89,6 @@
 #include "axp209.dtsi"
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        pcf8563: rtc@51 {
        vref-supply = <&reg_ldo2>;
        status = "okay";
 
-       button@200 {
+       button-200 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <200000>;
        };
 
-       button@400 {
+       button-400 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_d709>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 0 GPIO_ACTIVE_LOW>; /* PG0 */
 };
 
 &pio {
-       mmc0_cd_pin_d709: mmc0_cd_pin@0 {
-               pins = "PG0";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
+       usb0_vbus_detect_pin: usb0-vbus-detect-pin {
                pins = "PG1";
                function = "gpio_in";
                bias-pull-down;
        };
 
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PG2";
                function = "gpio_in";
                bias-pull-up;
 
 &pwm {
        pinctrl-names = "default";
-       pinctrl-0 = <&pwm0_pins>;
+       pinctrl-0 = <&pwm0_pin>;
        status = "okay";
 };
 
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_b>;
+       pinctrl-0 = <&uart1_pg_pins>;
        status = "okay";
 };
 
index 7ee0c3f..9369f74 100644 (file)
@@ -69,8 +69,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
@@ -80,8 +78,6 @@
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        pcf8563: rtc@51 {
@@ -91,8 +87,6 @@
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
        vref-supply = <&reg_ldo2>;
        status = "okay";
 
-       button@200 {
+       button-200 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <200000>;
        };
 
-       button@400 {
+       button-400 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_h702>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 0 GPIO_ACTIVE_LOW>; /* PG0 */
 };
 
 &pio {
-       mmc0_cd_pin_h702: mmc0_cd_pin@0 {
-               pins = "PG0";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PG2";
                function = "gpio_in";
                bias-pull-up;
        };
-
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               pins = "PG1";
-               function = "gpio_in";
-       };
 };
 
 #include "axp209.dtsi"
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_b>;
+       pinctrl-0 = <&uart1_pg_pins>;
        status = "okay";
 };
 
 
 &usbphy {
        pinctrl-names = "default";
-       pinctrl-0 = <&usb0_id_detect_pin>, <&usb0_vbus_detect_pin>;
+       pinctrl-0 = <&usb0_id_detect_pin>;
        usb0_id_det-gpios = <&pio 6 2 GPIO_ACTIVE_HIGH>; /* PG2 */
        usb0_vbus_det-gpios = <&pio 6 1 GPIO_ACTIVE_HIGH>; /* PG1 */
        usb0_vbus-supply = <&reg_usb0_vbus>;
index bc88389..ca8f3fd 100644 (file)
@@ -94,8 +94,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "disabled";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "disabled";
 };
 
        vref-supply = <&reg_ldo2>;
        status = "okay";
 
-       button@984 {
+       button-984 {
                label = "Home";
                linux,code = <KEY_HOMEPAGE>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        broken-cd;
 
 &mmc2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc2_4bit_pins_a>;
+       pinctrl-0 = <&mmc2_4bit_pc_pins>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        broken-cd;
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_b>;
+       pinctrl-0 = <&uart1_pg_pins>;
        status = "okay";
 };
 
index aa4b34f..943868e 100644 (file)
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_olinuxinom>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 0 GPIO_ACTIVE_LOW>; /* PG0 */
 };
 
 &pio {
-       mmc0_cd_pin_olinuxinom: mmc0_cd_pin@0 {
-               pins = "PG0";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       led_pins_olinuxinom: led_pins@0 {
+       led_pins_olinuxinom: led-pin {
                pins = "PG9";
                function = "gpio_out";
                drive-strength = <20>;
        };
 
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PG2";
                function = "gpio_in";
                bias-pull-up;
        };
 
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
+       usb0_vbus_detect_pin: usb0-vbus-detect-pin {
                pins = "PG1";
                function = "gpio_in";
                bias-pull-down;
        };
-
-       usb0_vbus_pin_olinuxinom: usb0_vbus_pin@0 {
-               pins = "PG12";
-               function = "gpio_out";
-       };
-
-       usb1_vbus_pin_olinuxinom: usb1_vbus_pin@0 {
-               pins = "PG11";
-               function = "gpio_out";
-       };
 };
 
 &reg_usb0_vbus {
-       pinctrl-0 = <&usb0_vbus_pin_olinuxinom>;
        gpio = <&pio 6 12 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_olinuxinom>;
        gpio = <&pio 6 11 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_b>;
+       pinctrl-0 = <&uart1_pg_pins>;
        status = "okay";
 };
 
index 437ad91..9409c23 100644 (file)
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
        vref-supply = <&reg_vcc3v0>;
        status = "okay";
 
-       button@191 {
+       button-191 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <191274>;
        };
 
-       button@392 {
+       button-392 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
                voltage = <392644>;
        };
 
-       button@601 {
+       button-601 {
                label = "Menu";
                linux,code = <KEY_MENU>;
                channel = <0>;
                voltage = <601151>;
        };
 
-       button@795 {
+       button-795 {
                label = "Enter";
                linux,code = <KEY_ENTER>;
                channel = <0>;
                voltage = <795090>;
        };
 
-       button@987 {
+       button-987 {
                label = "Home";
                linux,code = <KEY_HOMEPAGE>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_olinuxino>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 0 GPIO_ACTIVE_LOW>; /* PG0 */
 };
 
 &pio {
-       mmc0_cd_pin_olinuxino: mmc0_cd_pin@0 {
-               pins = "PG0";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       led_pins_olinuxino: led_pins@0 {
+       led_pins_olinuxino: led-pin {
                pins = "PG9";
                function = "gpio_out";
                drive-strength = <20>;
        };
 
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PG2";
                function = "gpio_in";
                bias-pull-up;
        };
 
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
+       usb0_vbus_detect_pin: usb0-vbus-detect-pin {
                pins = "PG1";
                function = "gpio_in";
                bias-pull-down;
        };
-
-       usb1_vbus_pin_olinuxino: usb1_vbus_pin@0 {
-               pins = "PG11";
-               function = "gpio_out";
-       };
 };
 
 &reg_usb0_vbus {
 };
 
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_olinuxino>;
        gpio = <&pio 6 11 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_b>;
+       pinctrl-0 = <&uart1_pg_pins>;
        status = "okay";
 };
 
index bfdd38d..732873c 100644 (file)
@@ -58,7 +58,7 @@
                /delete-property/stdout-path;
        };
 
-       i2c_lcd: i2c@0 {
+       i2c_lcd: i2c-gpio {
                /* The lcd panel i2c interface is hooked up via gpios */
                compatible = "i2c-gpio";
                pinctrl-names = "default";
        allwinner,pa-gpios = <&pio 6 3 GPIO_ACTIVE_HIGH>; /* PG3 */
 };
 
-&codec_pa_pin {
-       pins = "PG3";
-};
-
 &mmc2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc2_pins_a>;
+       pinctrl-0 = <&mmc2_8bit_pins>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <8>;
        non-removable;
@@ -99,7 +95,7 @@
 };
 
 &pio {
-       i2c_lcd_pins: i2c_lcd_pin@0 {
+       i2c_lcd_pins: i2c-lcd-pin {
                pins = "PG10", "PG12";
                function = "gpio_out";
                bias-pull-up;
        /* The P66 uses the uart pins as gpios */
        status = "disabled";
 };
-
-&usb0_vbus_pin_a {
-       pins = "PB4";
-};
index b1d8277..ae04955 100644 (file)
  *     OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "skeleton.dtsi"
-
 #include "sun5i.dtsi"
 
 #include <dt-bindings/thermal/thermal.h>
 
 / {
-       interrupt-parent = <&intc>;
-
        thermal-zones {
                cpu_thermal {
                        /* milliseconds */
@@ -88,7 +84,7 @@
                allwinner,pipelines = <&fe0>;
        };
 
-       soc@1c00000 {
+       soc {
                pwm: pwm@1c20e00 {
                        compatible = "allwinner,sun5i-a13-pwm";
                        reg = <0x01c20e00 0xc>;
index c55b11a..3f70b8c 100644 (file)
@@ -79,8 +79,6 @@
 
        mmc0_pwrseq: mmc0_pwrseq {
                compatible = "mmc-pwrseq-simple";
-               pinctrl-names = "default";
-               pinctrl-0 = <&wifi_reg_on_pin_chip_pro>;
                reset-gpios = <&pio 1 10 GPIO_ACTIVE_LOW>; /* PB10 */
        };
 };
@@ -94,8 +92,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 #include "axp209.dtsi"
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "disabled";
 };
 
 &i2s0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&i2s0_mclk_pins_a>, <&i2s0_data_pins_a>;
+       pinctrl-0 = <&i2s0_mclk_pin>, <&i2s0_data_pins>;
        status = "disabled";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        mmc-pwrseq = <&mmc0_pwrseq>;
        bus-width = <4>;
 
 &nfc {
        pinctrl-names = "default";
-       pinctrl-0 = <&nand_pins_a &nand_cs0_pins_a &nand_rb0_pins_a>;
+       pinctrl-0 = <&nand_pins &nand_cs0_pin &nand_rb0_pin>;
        status = "okay";
 
        nand@0 {
        status = "okay";
 };
 
-&pio {
-       usb0_id_pin_chip_pro: usb0-id-pin@0 {
-               pins = "PG2";
-               function = "gpio_in";
-       };
-
-       wifi_reg_on_pin_chip_pro: wifi-reg-on-pin@0 {
-               pins = "PB10";
-               function = "gpio_out";
-       };
-};
-
 &pwm {
        pinctrl-names = "default";
-       pinctrl-0 = <&pwm0_pins>, <&pwm1_pins>;
+       pinctrl-0 = <&pwm0_pin>, <&pwm1_pins>;
        status = "disabled";
 };
 
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_b>, <&uart1_cts_rts_pins_a>;
+       pinctrl-0 = <&uart1_pg_pins>, <&uart1_cts_rts_pins>;
        status = "okay";
 };
 
 &uart2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart2_pins_a>, <&uart2_cts_rts_pins_a>;
+       pinctrl-0 = <&uart2_pd_pins>, <&uart2_cts_rts_pd_pins>;
        status = "disabled";
 };
 
 &uart3 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart3_pins_a>, <&uart3_cts_rts_pins_a>;
+       pinctrl-0 = <&uart3_pg_pins>, <&uart3_cts_rts_pg_pins>;
        status = "okay";
 };
 
 };
 
 &usbphy {
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb0_id_pin_chip_pro>;
        usb0_id_det-gpio = <&pio 6 2 GPIO_ACTIVE_HIGH>; /* PG2 */
        usb0_vbus_power-supply = <&usb_power_supply>;
        usb1_vbus-supply = <&reg_vcc5v0>;
index 5f0adc0..86e46aa 100644 (file)
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 #include "axp209.dtsi"
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        wm8978: codec@1a {
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
 &i2s0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&i2s0_mclk_pins_a>, <&i2s0_data_pins_a>;
+       pinctrl-0 = <&i2s0_mclk_pin>, <&i2s0_data_pins>;
        status = "okay";
 };
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
        vref-supply = <&reg_ldo2>;
        status = "okay";
 
-       button@190 {
+       button-190 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <190000>;
        };
 
-       button@390 {
+       button-390 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
                voltage = <390000>;
        };
 
-       button@600 {
+       button-600 {
                label = "Menu";
                linux,code = <KEY_MENU>;
                channel = <0>;
                voltage = <600000>;
        };
 
-       button@800 {
+       button-800 {
                label = "Search";
                linux,code = <KEY_SEARCH>;
                channel = <0>;
                voltage = <800000>;
        };
 
-       button@980 {
+       button-980 {
                label = "Home";
                linux,code = <KEY_HOMEPAGE>;
                channel = <0>;
                voltage = <980000>;
        };
 
-       button@1180 {
+       button-1180 {
                label = "Esc";
                linux,code = <KEY_ESC>;
                channel = <0>;
                voltage = <1180000>;
        };
 
-       button@1400 {
+       button-1400 {
                label = "Enter";
                linux,code = <KEY_ENTER>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_gr8_evb>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 6 0 GPIO_ACTIVE_LOW>; /* PG0 */
 
 &nfc {
        pinctrl-names = "default";
-       pinctrl-0 = <&nand_pins_a &nand_cs0_pins_a &nand_rb0_pins_a>;
+       pinctrl-0 = <&nand_pins &nand_cs0_pin &nand_rb0_pin>;
 
        /* MLC Support sucks for now */
        status = "disabled";
        status = "okay";
 };
 
-&pio {
-       mmc0_cd_pin_gr8_evb: mmc0-cd-pin@0 {
-               pins = "PG0";
-               function = "gpio_in";
-       };
-
-       usb0_id_pin_gr8_evb: usb0-id-pin@0 {
-               pins = "PG2";
-               function = "gpio_in";
-       };
-
-       usb0_vbus_det_pin_gr8_evb: usb0-vbus-det-pin@0 {
-               pins = "PG1";
-               function = "gpio_in";
-       };
-
-       usb1_vbus_pin_gr8_evb: usb1-vbus-pin@0 {
-               pins = "PG13";
-               function = "gpio_out";
-       };
-};
-
 &pwm {
        pinctrl-names = "default";
-       pinctrl-0 = <&pwm0_pins>;
+       pinctrl-0 = <&pwm0_pin>;
        status = "okay";
 };
 
 };
 
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_gr8_evb>;
        gpio = <&pio 6 13 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &spdif {
        pinctrl-names = "default";
-       pinctrl-0 = <&spdif_tx_pins_a>;
+       pinctrl-0 = <&spdif_tx_pin>;
        status = "okay";
 };
 
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_b>, <&uart1_cts_rts_pins_a>;
+       pinctrl-0 = <&uart1_pg_pins>, <&uart1_cts_rts_pins>;
        status = "okay";
 };
 
 };
 
 &usbphy {
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb0_id_pin_gr8_evb>, <&usb0_vbus_det_pin_gr8_evb>;
        usb0_id_det-gpio = <&pio 6 2 GPIO_ACTIVE_HIGH>; /* PG2 */
        usb0_vbus_det-gpio = <&pio 6 1 GPIO_ACTIVE_HIGH>; /* PG1 */
        usb0_vbus_power-supply = <&usb_power_supply>;
index ef0b744..98a8fd5 100644 (file)
@@ -54,7 +54,7 @@
                allwinner,pipelines = <&fe0>;
        };
 
-       soc@1c00000 {
+       soc {
                pwm: pwm@1c20e00 {
                        compatible = "allwinner,sun5i-a10s-pwm";
                        reg = <0x01c20e00 0xc>;
 &pio {
        compatible = "nextthing,gr8-pinctrl";
 
-       i2s0_data_pins_a: i2s0-data@0 {
+       i2s0_data_pins: i2s0-data-pins {
                pins = "PB6", "PB7", "PB8", "PB9";
                function = "i2s0";
        };
 
-       i2s0_mclk_pins_a: i2s0-mclk@0 {
+       i2s0_mclk_pin: i2s0-mclk-pin {
                pins = "PB5";
                function = "i2s0";
        };
 
-       pwm1_pins: pwm1 {
+       pwm1_pins: pwm1-pin {
                pins = "PG13";
                function = "pwm1";
        };
 
-       spdif_tx_pins_a: spdif@0 {
+       spdif_tx_pin: spdif-tx-pin {
                pins = "PB10";
                function = "spdif";
                bias-pull-up;
        };
 
-       uart1_cts_rts_pins_a: uart1-cts-rts@0 {
+       uart1_cts_rts_pins: uart1-cts-rts-pins {
                pins = "PG5", "PG6";
                function = "uart1";
        };
index 879a4b0..f4298fa 100644 (file)
@@ -79,8 +79,6 @@
 
        mmc0_pwrseq: mmc0_pwrseq {
                compatible = "mmc-pwrseq-simple";
-               pinctrl-names = "default";
-               pinctrl-0 = <&chip_wifi_reg_on_pin>;
                reset-gpios = <&pio 2 19 GPIO_ACTIVE_LOW>; /* PC19 */
        };
 
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "disabled";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 
        xio: gpio@38 {
        };
 };
 
-&mmc0_pins_a {
+&mmc0_pins {
        bias-pull-up;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        mmc-pwrseq = <&mmc0_pwrseq>;
        bus-width = <4>;
 };
 
 &pio {
-       chip_vbus_pin: chip_vbus_pin@0 {
-               pins = "PB10";
-               function = "gpio_out";
-       };
-
-       chip_wifi_reg_on_pin: chip_wifi_reg_on_pin@0 {
-               pins = "PC19";
-               function = "gpio_out";
-       };
-
-       chip_id_det_pin: chip_id_det_pin@0 {
-               pins = "PG2";
-               function = "gpio_in";
-       };
-
-       chip_w1_pin: chip_w1_pin@0 {
+       chip_w1_pin: chip-w1-pin {
                pins = "PD2";
                function = "gpio_in";
                bias-pull-up;
 };
 
 &reg_usb0_vbus {
-       pinctrl-0 = <&chip_vbus_pin>;
        vin-supply = <&reg_vcc5v0>;
        gpio = <&pio 1 10 GPIO_ACTIVE_HIGH>; /* PB10 */
        status = "okay";
 
 &spi2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi2_pins_a>;
+       pinctrl-0 = <&spi2_pe_pins>;
        status = "disabled";
 };
 
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_b>;
+       pinctrl-0 = <&uart1_pg_pins>;
        status = "okay";
 };
 
 &uart3 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart3_pins_a>,
-                   <&uart3_cts_rts_pins_a>;
+       pinctrl-0 = <&uart3_pg_pins>,
+                   <&uart3_cts_rts_pg_pins>;
        status = "okay";
 };
 
 };
 
 &usbphy {
-       pinctrl-names = "default";
-       pinctrl-0 = <&chip_id_det_pin>;
        status = "okay";
 
        usb0_id_det-gpio = <&pio 6 2 GPIO_ACTIVE_HIGH>; /* PG2 */
index d2a2eb8..6202aab 100644 (file)
@@ -63,8 +63,6 @@
 };
 
 &codec {
-       pinctrl-names = "default";
-       pinctrl-0 = <&codec_pa_pin>;
        allwinner,pa-gpios = <&pio 6 10 GPIO_ACTIVE_HIGH>; /* PG10 */
        status = "okay";
 };
@@ -96,8 +94,6 @@
                reg = <0x40>;
                interrupt-parent = <&pio>;
                interrupts = <6 11 IRQ_TYPE_EDGE_FALLING>; /* EINT11 (PG11) */
-               pinctrl-names = "default";
-               pinctrl-0 = <&ts_power_pin>;
                power-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>; /* PB3 */
                /* Tablet dts must provide reg and compatible */
                status = "disabled";
 
 &mmc0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>;
+       pinctrl-0 = <&mmc0_pins>;
        vmmc-supply = <&reg_vcc3v0>;
        bus-width = <4>;
        cd-gpios = <&pio 6 0 GPIO_ACTIVE_LOW>; /* PG0 */
 };
 
 &pio {
-       codec_pa_pin: codec_pa_pin@0 {
-               pins = "PG10";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin: mmc0_cd_pin@0 {
-               pins = "PG0";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       ts_power_pin: ts_power_pin {
-               pins = "PB3";
-               function = "gpio_out";
-               drive-strength = <10>;
-               bias-disable;
-       };
-
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
+       usb0_vbus_detect_pin: usb0-vbus-detect-pin {
                pins = "PG1";
                function = "gpio_in";
                bias-pull-down;
        };
 
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PG2";
                function = "gpio_in";
                bias-pull-up;
        };
-
-       usb0_vbus_pin_a: usb0_vbus_pin@0 {
-               pins = "PG12";
-               function = "gpio_out";
-       };
 };
 
 &reg_dcdc2 {
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_b>;
+       pinctrl-0 = <&uart1_pg_pins>;
        status = "okay";
 };
 
index 9cd65c4..5497d98 100644 (file)
  *     OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "skeleton.dtsi"
-
 #include <dt-bindings/clock/sun5i-ccu.h>
 #include <dt-bindings/dma/sun4i-a10.h>
 #include <dt-bindings/reset/sun5i-ccu.h>
 
 / {
        interrupt-parent = <&intc>;
+       #address-cells = <1>;
+       #size-cells = <1>;
 
        cpus {
                #address-cells = <1>;
@@ -68,7 +68,7 @@
                #size-cells = <1>;
                ranges;
 
-               framebuffer@0 {
+               framebuffer-lcd0 {
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0";
@@ -77,7 +77,7 @@
                        status = "disabled";
                };
 
-               framebuffer@1 {
+               framebuffer-lcd0-tve0 {
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0-tve0";
                #size-cells = <1>;
                ranges;
 
-               osc24M: clk@1c20050 {
+               osc24M: clk-24M {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <24000000>;
                        clock-output-names = "osc24M";
                };
 
-               osc32k: clk@0 {
+               osc32k: clk-32k {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <32768>;
                ranges;
 
                /* Address must be kept in the lower 256 MiBs of DRAM for VE. */
-               cma_pool: cma@4a000000 {
+               default-pool {
                        compatible = "shared-dma-pool";
                        size = <0x6000000>;
                        alloc-ranges = <0x4a000000 0x6000000>;
                };
        };
 
-       soc@1c00000 {
+       soc {
                compatible = "simple-bus";
                #address-cells = <1>;
                #size-cells = <1>;
                        clocks = <&ccu CLK_AHB_MMC0>, <&ccu CLK_MMC0>;
                        clock-names = "ahb", "mmc";
                        interrupts = <32>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&mmc0_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #interrupt-cells = <3>;
                        #gpio-cells = <3>;
 
-                       emac_pins_a: emac0@0 {
+                       emac_pd_pins: emac-pd-pins {
                                pins = "PD6", "PD7", "PD10",
                                       "PD11", "PD12", "PD13", "PD14",
                                       "PD15", "PD18", "PD19", "PD20",
                                function = "emac";
                        };
 
-                       i2c0_pins_a: i2c0@0 {
+                       i2c0_pins: i2c0-pins {
                                pins = "PB0", "PB1";
                                function = "i2c0";
                        };
 
-                       i2c1_pins_a: i2c1@0 {
+                       i2c1_pins: i2c1-pins {
                                pins = "PB15", "PB16";
                                function = "i2c1";
                        };
 
-                       i2c2_pins_a: i2c2@0 {
+                       i2c2_pins: i2c2-pins {
                                pins = "PB17", "PB18";
                                function = "i2c2";
                        };
 
-                       ir0_rx_pins_a: ir0@0 {
+                       ir0_rx_pin: ir0-rx-pin {
                                pins = "PB4";
                                function = "ir0";
                        };
 
-                       lcd_rgb565_pins: lcd_rgb565@0 {
+                       lcd_rgb565_pins: lcd-rgb565-pins {
                                pins = "PD3", "PD4", "PD5", "PD6", "PD7",
                                                 "PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
                                                 "PD19", "PD20", "PD21", "PD22", "PD23",
                                function = "lcd0";
                        };
 
-                       lcd_rgb666_pins: lcd_rgb666@0 {
+                       lcd_rgb666_pins: lcd-rgb666-pins {
                                pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
                                       "PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
                                       "PD18", "PD19", "PD20", "PD21", "PD22", "PD23",
                                function = "lcd0";
                        };
 
-                       mmc0_pins_a: mmc0@0 {
+                       mmc0_pins: mmc0-pins {
                                pins = "PF0", "PF1", "PF2", "PF3",
                                       "PF4", "PF5";
                                function = "mmc0";
                                bias-pull-up;
                        };
 
-                       mmc2_pins_a: mmc2@0 {
+                       mmc2_8bit_pins: mmc2-8bit-pins {
                                pins = "PC6", "PC7", "PC8", "PC9",
                                       "PC10", "PC11", "PC12", "PC13",
                                       "PC14", "PC15";
                                bias-pull-up;
                        };
 
-                       mmc2_4bit_pins_a: mmc2-4bit@0 {
+                       mmc2_4bit_pc_pins: mmc2-4bit-pc-pins {
                                pins = "PC6", "PC7", "PC8", "PC9",
                                       "PC10", "PC11";
                                function = "mmc2";
                                bias-pull-up;
                        };
 
-                       nand_pins_a: nand-base0@0 {
+                       nand_pins: nand-pins {
                                pins = "PC0", "PC1", "PC2",
                                       "PC5", "PC8", "PC9", "PC10",
                                       "PC11", "PC12", "PC13", "PC14",
                                function = "nand0";
                        };
 
-                       nand_cs0_pins_a: nand-cs@0 {
+                       nand_cs0_pin: nand-cs0-pin {
                                pins = "PC4";
                                function = "nand0";
                        };
 
-                       nand_rb0_pins_a: nand-rb@0 {
+                       nand_rb0_pin: nand-rb0-pin {
                                pins = "PC6";
                                function = "nand0";
                        };
 
-                       spi2_pins_a: spi2@0 {
+                       spi2_pe_pins: spi2-pe-pins {
                                pins = "PE1", "PE2", "PE3";
                                function = "spi2";
                        };
 
-                       spi2_cs0_pins_a: spi2-cs0@0 {
+                       spi2_cs0_pe_pin: spi2-cs0-pe-pin {
                                pins = "PE0";
                                function = "spi2";
                        };
 
-                       uart1_pins_a: uart1@0 {
+                       uart1_pe_pins: uart1-pe-pins {
                                pins = "PE10", "PE11";
                                function = "uart1";
                        };
 
-                       uart1_pins_b: uart1@1 {
+                       uart1_pg_pins: uart1-pg-pins {
                                pins = "PG3", "PG4";
                                function = "uart1";
                        };
 
-                       uart2_pins_a: uart2@0 {
+                       uart2_pd_pins: uart2-pd-pins {
                                pins = "PD2", "PD3";
                                function = "uart2";
                        };
 
-                       uart2_cts_rts_pins_a: uart2-cts-rts@0 {
+                       uart2_cts_rts_pd_pins: uart2-cts-rts-pd-pins {
                                pins = "PD4", "PD5";
                                function = "uart2";
                        };
 
-                       uart3_pins_a: uart3@0 {
+                       uart3_pg_pins: uart3-pg-pins {
                                pins = "PG9", "PG10";
                                function = "uart3";
                        };
 
-                       uart3_cts_rts_pins_a: uart3-cts-rts@0 {
+                       uart3_cts_rts_pg_pins: uart3-cts-rts-pg-pins {
                                pins = "PG11", "PG12";
                                function = "uart3";
                        };
 
-                       pwm0_pins: pwm0 {
+                       pwm0_pin: pwm0-pin {
                                pins = "PB2";
                                function = "pwm";
                        };
                        reg = <0x01c2ac00 0x400>;
                        interrupts = <7>;
                        clocks = <&ccu CLK_APB1_I2C0>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c0_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2b000 0x400>;
                        interrupts = <8>;
                        clocks = <&ccu CLK_APB1_I2C1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c1_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2b400 0x400>;
                        interrupts = <9>;
                        clocks = <&ccu CLK_APB1_I2C2>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c2_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
index 7f34323..32d2202 100644 (file)
        status = "okay";
 };
 
-&pio {
-       usb1_vbus_pin_a: usb1_vbus_pin@0 {
-               pins = "PH27";
-               function = "gpio_out";
-       };
-};
-
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_a>;
        gpio = <&pio 7 27 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
 
index 939c497..0b7bedf 100644 (file)
@@ -60,7 +60,7 @@
                stdout-path = "serial0:115200n8";
        };
 
-       i2c_lcd: i2c@0 {
+       i2c_lcd: i2c {
                /* The lcd panel i2c interface is hooked up via gpios */
                compatible = "i2c-gpio";
                pinctrl-names = "default";
@@ -77,7 +77,7 @@
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        status = "okay";
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "fail";
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 
        mma8452: mma8452@1d {
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_colombus>;
        vmmc-supply = <&reg_vcc3v0>;
        bus-width = <4>;
        cd-gpios = <&pio 0 8 GPIO_ACTIVE_LOW>; /* PA8 */
        status = "okay";
 };
 
-&mmc0_pins_a {
-       bias-pull-up;
-};
-
 &pio {
-       mmc0_cd_pin_colombus: mmc0_cd_pin@0 {
-               pins = "PA8";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb2_vbus_pin_colombus: usb2_vbus_pin@0 {
-               pins = "PH24";
-               function = "gpio_out";
-       };
-
-       i2c_lcd_pins: i2c_lcd_pin@0 {
+       i2c_lcd_pins: i2c-lcd-pins {
                pins = "PA23", "PA24";
                function = "gpio_out";
                bias-pull-up;
 };
 
 &reg_usb2_vbus {
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb2_vbus_pin_colombus>;
        gpio = <&pio 7 24 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
 
index ce4f9e9..e17a65b 100644 (file)
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>, <&gmac_phy_reset_pin_hummingbird>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        snps,reset-gpio = <&pio 0 21 GPIO_ACTIVE_HIGH>;
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        /* pull-ups and devices require AXP221 DLDO3 */
        status = "failed";
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 
        pcf8563: rtc@51 {
 
 &ir {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir_pins_a>;
+       pinctrl-0 = <&s_ir_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_hummingbird>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 0 8 GPIO_ACTIVE_LOW>; /* PA8 */
        status = "okay";
 };
 
-&mmc0_pins_a {
-       /* external pull-ups missing for some pins */
-       bias-pull-up;
-};
-
 &mmc1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>, <&wifi_reset_pin_hummingbird>;
        vmmc-supply = <&reg_aldo1>;
        mmc-pwrseq = <&wifi_pwrseq>;
        bus-width = <4>;
        status = "okay";
 };
 
-&pio {
-       gmac_phy_reset_pin_hummingbird: gmac_phy_reset_pin@0 {
-               pins = "PA21";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin_hummingbird: mmc0_cd_pin@0 {
-               pins = "PA8";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       wifi_reset_pin_hummingbird: wifi_reset_pin@0 {
-               pins = "PG10";
-               function = "gpio_out";
-       };
-};
-
 &p2wi {
        status = "okay";
 
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
 
index d659be9..0832ac5 100644 (file)
@@ -71,8 +71,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_i7>;
 
                blue {
                        label = "i7:blue:usr";
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        status = "okay";
 
 &ir {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir_pins_a>;
+       pinctrl-0 = <&s_ir_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_i7>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 22 GPIO_ACTIVE_LOW>; /* PH22 */
        status = "okay";
 };
 
-&pio {
-       led_pins_i7: led_pins@0 {
-               pins = "PH13";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin_i7: mmc0_cd_pin@0 {
-               pins = "PH22";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb1_vbus_pin_i7: usb1_vbus_pin@0 {
-               pins = "PC27";
-               function = "gpio_out";
-       };
-};
-
 &reg_usb1_vbus {
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb1_vbus_pin_i7>;
        gpio = <&pio 2 27 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &spdif {
        pinctrl-names = "default";
-       pinctrl-0 = <&spdif_pins_a>;
+       pinctrl-0 = <&spdif_tx_pin>;
        spdif-out = "okay";
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
 
index 9698f6d..6eafb63 100644 (file)
@@ -60,8 +60,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_m9>;
 
                blue {
                        label = "m9:blue:pwr";
@@ -85,7 +83,7 @@
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        phy-supply = <&reg_dldo1>;
 
 &ir {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir_pins_a>;
+       pinctrl-0 = <&s_ir_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_m9>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 7 22 GPIO_ACTIVE_LOW>; /* PH22 */
 
 #include "axp22x.dtsi"
 
-&pio {
-       led_pins_m9: led_pins@0 {
-               pins = "PH13";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin_m9: mmc0_cd_pin@0 {
-               pins = "PH22";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb1_vbus_pin_m9: usb1_vbus_pin@0 {
-               pins = "PC27";
-               function = "gpio_out";
-       };
-};
-
 &reg_aldo1 {
        regulator-min-microvolt = <3300000>;
        regulator-max-microvolt = <3300000>;
 };
 
 &reg_usb1_vbus {
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb1_vbus_pin_m9>;
        gpio = <&pio 2 27 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
 
index bb14b17..ca036f9 100644 (file)
@@ -60,8 +60,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_m9>;
 
                blue {
                        label = "a1000g:blue:pwr";
@@ -85,7 +83,7 @@
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        phy-supply = <&reg_dldo1>;
 
 &ir {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir_pins_a>;
+       pinctrl-0 = <&s_ir_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_m9>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 7 22 GPIO_ACTIVE_LOW>; /* PH22 */
 
 #include "axp22x.dtsi"
 
-&pio {
-       led_pins_m9: led_pins@0 {
-               pins = "PH13";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin_m9: mmc0_cd_pin@0 {
-               pins = "PH22";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb1_vbus_pin_m9: usb1_vbus_pin@0 {
-               pins = "PC27";
-               function = "gpio_out";
-       };
-};
-
 &reg_aldo1 {
        regulator-min-microvolt = <3300000>;
        regulator-max-microvolt = <3300000>;
 };
 
 &reg_usb1_vbus {
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb1_vbus_pin_m9>;
        gpio = <&pio 2 27 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
 
index debc0bf..353d90f 100644 (file)
@@ -42,8 +42,6 @@
  *     OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "skeleton.dtsi"
-
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/thermal/thermal.h>
 
@@ -52,6 +50,8 @@
 
 / {
        interrupt-parent = <&gic>;
+       #address-cells = <1>;
+       #size-cells = <1>;
 
        aliases {
                ethernet0 = &gmac;
@@ -62,7 +62,7 @@
                #size-cells = <1>;
                ranges;
 
-               simplefb_hdmi: framebuffer@0 {
+               simplefb_hdmi: framebuffer-lcd0-hdmi {
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0-hdmi";
@@ -73,7 +73,7 @@
                        status = "disabled";
                };
 
-               simplefb_lcd: framebuffer@1 {
+               simplefb_lcd: framebuffer-lcd0 {
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0";
                        #cooling-cells = <2>;
                };
 
-               cpu@1 {
+               cpu1: cpu@1 {
                        compatible = "arm,cortex-a7";
                        device_type = "cpu";
                        reg = <1>;
                        #cooling-cells = <2>;
                };
 
-               cpu@2 {
+               cpu2: cpu@2 {
                        compatible = "arm,cortex-a7";
                        device_type = "cpu";
                        reg = <2>;
                        #cooling-cells = <2>;
                };
 
-               cpu@3 {
+               cpu3: cpu@3 {
                        compatible = "arm,cortex-a7";
                        device_type = "cpu";
                        reg = <3>;
                        cooling-maps {
                                map0 {
                                        trip = <&cpu_alert0>;
-                                       cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       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>;
                                };
                        };
 
                };
        };
 
-       memory {
-               reg = <0x40000000 0x80000000>;
-       };
-
        pmu {
-               compatible = "arm,cortex-a7-pmu", "arm,cortex-a15-pmu";
+               compatible = "arm,cortex-a7-pmu";
                interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
                #size-cells = <1>;
                ranges;
 
-               osc24M: osc24M {
+               osc24M: clk-24M {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <24000000>;
                };
 
-               osc32k: clk@0 {
+               osc32k: clk-32k {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <32768>;
                 * The actual TX clock rate is not controlled by the
                 * gmac_tx clock.
                 */
-               mii_phy_tx_clk: clk@1 {
+               mii_phy_tx_clk: clk-mii-phy-tx {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <25000000>;
                        clock-output-names = "mii_phy_tx";
                };
 
-               gmac_int_tx_clk: clk@2 {
+               gmac_int_tx_clk: clk-gmac-int-tx {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <125000000>;
                status = "disabled";
        };
 
-       soc@1c00000 {
+       soc {
                compatible = "simple-bus";
                #address-cells = <1>;
                #size-cells = <1>;
                        resets = <&ccu RST_AHB1_MMC0>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&mmc0_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        resets = <&ccu RST_AHB1_MMC1>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&mmc1_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #interrupt-cells = <3>;
                        #gpio-cells = <3>;
 
-                       gmac_pins_gmii_a: gmac_gmii@0 {
+                       gmac_gmii_pins: gmac-gmii-pins {
                                pins = "PA0", "PA1", "PA2", "PA3",
                                                "PA4", "PA5", "PA6", "PA7",
                                                "PA8", "PA9", "PA10", "PA11",
                                drive-strength = <30>;
                        };
 
-                       gmac_pins_mii_a: gmac_mii@0 {
+                       gmac_mii_pins: gmac-mii-pins {
                                pins = "PA0", "PA1", "PA2", "PA3",
                                                "PA8", "PA9", "PA11",
                                                "PA12", "PA13", "PA14", "PA19",
                                function = "gmac";
                        };
 
-                       gmac_pins_rgmii_a: gmac_rgmii@0 {
+                       gmac_rgmii_pins: gmac-rgmii-pins {
                                pins = "PA0", "PA1", "PA2", "PA3",
                                                "PA9", "PA10", "PA11",
                                                "PA12", "PA13", "PA14", "PA19",
                                drive-strength = <40>;
                        };
 
-                       i2c0_pins_a: i2c0@0 {
+                       i2c0_pins: i2c0-pins {
                                pins = "PH14", "PH15";
                                function = "i2c0";
                        };
 
-                       i2c1_pins_a: i2c1@0 {
+                       i2c1_pins: i2c1-pins {
                                pins = "PH16", "PH17";
                                function = "i2c1";
                        };
 
-                       i2c2_pins_a: i2c2@0 {
+                       i2c2_pins: i2c2-pins {
                                pins = "PH18", "PH19";
                                function = "i2c2";
                        };
 
-                       lcd0_rgb888_pins: lcd0_rgb888 {
+                       lcd0_rgb888_pins: lcd0-rgb888-pins {
                                pins = "PD0", "PD1", "PD2", "PD3",
                                                 "PD4", "PD5", "PD6", "PD7",
                                                 "PD8", "PD9", "PD10", "PD11",
                                function = "lcd0";
                        };
 
-                       mmc0_pins_a: mmc0@0 {
+                       mmc0_pins: mmc0-pins {
                                pins = "PF0", "PF1", "PF2",
                                                 "PF3", "PF4", "PF5";
                                function = "mmc0";
                                bias-pull-up;
                        };
 
-                       mmc1_pins_a: mmc1@0 {
+                       mmc1_pins: mmc1-pins {
                                pins = "PG0", "PG1", "PG2", "PG3",
                                                 "PG4", "PG5";
                                function = "mmc1";
                                bias-pull-up;
                        };
 
-                       mmc2_pins_a: mmc2@0 {
+                       mmc2_4bit_pins: mmc2-4bit-pins {
                                pins = "PC6", "PC7", "PC8", "PC9",
                                                 "PC10", "PC11";
                                function = "mmc2";
                                bias-pull-up;
                        };
 
-                       mmc2_8bit_emmc_pins: mmc2@1 {
+                       mmc2_8bit_emmc_pins: mmc2-8bit-emmc-pins {
                                pins = "PC6", "PC7", "PC8", "PC9",
                                                 "PC10", "PC11", "PC12",
                                                 "PC13", "PC14", "PC15",
                                bias-pull-up;
                        };
 
-                       mmc3_8bit_emmc_pins: mmc3@1 {
+                       mmc3_8bit_emmc_pins: mmc3-8bit-emmc-pins {
                                pins = "PC6", "PC7", "PC8", "PC9",
                                                 "PC10", "PC11", "PC12",
                                                 "PC13", "PC14", "PC15",
                                bias-pull-up;
                        };
 
-                       spdif_pins_a: spdif@0 {
+                       spdif_tx_pin: spdif-tx-pin {
                                pins = "PH28";
                                function = "spdif";
                        };
 
-                       uart0_pins_a: uart0@0 {
+                       uart0_ph_pins: uart0-ph-pins {
                                pins = "PH20", "PH21";
                                function = "uart0";
                        };
                        interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&ccu CLK_APB2_I2C0>;
                        resets = <&ccu RST_APB2_I2C0>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c0_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&ccu CLK_APB2_I2C1>;
                        resets = <&ccu RST_APB2_I2C1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c1_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&ccu CLK_APB2_I2C2>;
                        resets = <&ccu RST_APB2_I2C2>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c2_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #size-cells = <0>;
                        #gpio-cells = <3>;
 
-                       ir_pins_a: ir@0 {
+                       s_ir_rx_pin: s-ir-rx-pin {
                                pins = "PL4";
                                function = "s_ir";
                        };
 
-                       p2wi_pins: p2wi {
+                       s_p2wi_pins: s-p2wi-pins {
                                pins = "PL0", "PL1";
                                function = "s_p2wi";
                        };
                        clock-frequency = <100000>;
                        resets = <&apb0_rst 3>;
                        pinctrl-names = "default";
-                       pinctrl-0 = <&p2wi_pins>;
+                       pinctrl-0 = <&s_p2wi_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
index 882a4d8..a2ef784 100644 (file)
@@ -53,7 +53,7 @@
        vref-supply = <&reg_aldo3>;
        status = "okay";
 
-       button@1000 {
+       button-1000 {
                label = "Home";
                linux,code = <KEY_HOMEPAGE>;
                channel = <0>;
index 75e5781..72a02c0 100644 (file)
@@ -66,7 +66,7 @@
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        status = "okay";
@@ -77,7 +77,7 @@
 
 &ir {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir_pins_a>;
+       pinctrl-0 = <&s_ir_rx_pin>;
        status = "okay";
 };
 
@@ -87,7 +87,7 @@
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
 
index e584e6b..c5e2c55 100644 (file)
@@ -54,8 +54,6 @@
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        ft5406ee8: touchscreen@38 {
        vref-supply = <&reg_aldo3>;
        status = "okay";
 
-       button@200 {
+       button-200 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
                voltage = <200000>;
        };
 
-       button@900 {
+       button-900 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <900000>;
        };
 
-       button@1200 {
+       button-1200 {
                label = "Back";
                linux,code = <KEY_BACK>;
                channel = <0>;
index 4cb9664..60b355f 100644 (file)
 
 &i2c0 {
        /* pull-ups and device VDDIO use AXP221 DLDO3 */
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "failed";
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        ctp@5d {
-               pinctrl-names = "default";
-               pinctrl-0 = <&gt911_int_primo81>;
                compatible = "goodix,gt911";
                reg = <0x5d>;
                interrupt-parent = <&pio>;
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 
        accelerometer@1c {
        vref-supply = <&reg_aldo3>;
        status = "okay";
 
-       button@158 {
+       button-158 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <158730>;
        };
 
-       button@349 {
+       button-349 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_primo81>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 0 8 GPIO_ACTIVE_LOW>; /* PA8 */
 };
 
 &pio {
-       gt911_int_primo81: gt911_int_pin@0 {
-               pins = "PA3";
-               function = "gpio_in";
-       };
-
-       mma8452_int_primo81: mma8452_int_pin@0 {
+       mma8452_int_primo81: mma8452-int-pin {
                pins = "PA9";
                function = "gpio_in";
                bias-pull-up;
        };
-
-       mmc0_cd_pin_primo81: mmc0_cd_pin@0 {
-               pins = "PA8";
-               function = "gpio_in";
-               bias-pull-up;
-       };
 };
 
 &p2wi {
index d7325bc..3099491 100644 (file)
 /* UART0 pads available on core board */
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
 
index da0ccf5..4865c32 100644 (file)
@@ -66,8 +66,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pin_sina31s>;
 
                status {
                        label = "sina31s:status:usr";
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        phy-supply = <&reg_dldo1>;
 
 &ir {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir_pins_a>;
+       pinctrl-0 = <&s_ir_rx_pin>;
        status = "okay";
 };
 
        vref-supply = <&reg_aldo3>;
        status = "okay";
 
-       button@158 {
+       button-158 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <158730>;
        };
 
-       button@349 {
+       button-349 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_sina31s>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 0 4 GPIO_ACTIVE_LOW>; /* PA4 */
        status = "okay";
 };
 
-&pio {
-       led_pin_sina31s: led_pin@0 {
-               pins = "PH13";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin_sina31s: mmc0_cd_pin@0 {
-               pins = "PA4";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-};
-
 &reg_dldo1 {
        regulator-min-microvolt = <3300000>;
        regulator-max-microvolt = <3300000>;
 
 &spdif {
        pinctrl-names = "default";
-       pinctrl-0 = <&spdif_pins_a>;
+       pinctrl-0 = <&spdif_tx_pin>;
        status = "okay";
 };
 
index b8b79c0..8e724c5 100644 (file)
@@ -58,8 +58,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_bpi_m2>;
 
                blue {
                        label = "bpi-m2:blue:usr";
@@ -79,8 +77,6 @@
 
        mmc2_pwrseq: mmc2_pwrseq {
                compatible = "mmc-pwrseq-simple";
-               pinctrl-names = "default";
-               pinctrl-0 = <&mmc2_pwrseq_pin_bpi_m2>;
                reset-gpios = <&r_pio 0 8 GPIO_ACTIVE_LOW>; /* PL8 WIFI_EN */
        };
 };
@@ -95,7 +91,7 @@
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>, <&gmac_phy_reset_pin_bpi_m2>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        phy-supply = <&reg_dldo1>;
 
 &ir {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir_pins_a>;
+       pinctrl-0 = <&s_ir_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_bpi_m2>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 0 4 GPIO_ACTIVE_LOW>; /* PA4 */
        status = "okay";
 };
 
-&mmc0_pins_a {
-       bias-pull-up;
-};
-
 &mmc2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc2_pins_a>;
+       pinctrl-0 = <&mmc2_4bit_pins>;
        vmmc-supply = <&reg_aldo1>;
        mmc-pwrseq = <&mmc2_pwrseq>;
        bus-width = <4>;
        };
 };
 
-&mmc2_pins_a {
-       bias-pull-up;
-};
-
 &ohci0 {
        status = "okay";
 };
        };
 };
 
-&pio {
-       gmac_phy_reset_pin_bpi_m2: gmac_phy_reset_pin@0 {
-               pins = "PA21";
-               function = "gpio_out";
-       };
-
-       led_pins_bpi_m2: led_pins@0 {
-               pins = "PG5", "PG10", "PG11";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin_bpi_m2: mmc0_cd_pin@0 {
-               pins = "PA4";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-};
-
-&r_pio {
-       mmc2_pwrseq_pin_bpi_m2: mmc2_pwrseq_pin@0 {
-               pins = "PL8";
-               function = "gpio_out";
-       };
-};
-
 #include "axp22x.dtsi"
 
 &reg_aldo1 {
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
 
index aab6c17..2504e71 100644 (file)
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
        status = "okay";
 };
 
-&pio {
-       mmc0_cd_pin_bs1078v2: mmc0_cd_pin@0 {
-               pins = "PA8";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-};
-
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_bs1078v2>;
        vmmc-supply = <&reg_vcc3v0>;
        bus-width = <4>;
        cd-gpios = <&pio 0 8 GPIO_ACTIVE_LOW>; /* PA8 */
        status = "okay";
 };
 
-&mmc0_pins_a {
-       bias-pull-up;
-};
-
 &p2wi {
        status = "okay";
 
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
 
index 4e72e4f..86143de 100644 (file)
@@ -66,7 +66,7 @@
 
 &mmc0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_e708_q1>;
+       pinctrl-0 = <&mmc0_pins>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 0 8 GPIO_ACTIVE_LOW>; /* PA8 */
 };
 
 &pio {
-       mmc0_cd_pin_e708_q1: mmc0_cd_pin@0 {
-               pins = "PA8";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PA15";
                function = "gpio_in";
                bias-pull-up;
index 763cb03..e2bfe00 100644 (file)
@@ -73,8 +73,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_bpi_m1p>;
 
                green {
                        label = "bananapi-m1-plus:green:usr";
 
        mmc3_pwrseq: mmc3_pwrseq {
                compatible = "mmc-pwrseq-simple";
-               pinctrl-names = "default";
-               pinctrl-0 = <&mmc3_pwrseq_pin_bpi_m1p>;
                reset-gpios = <&pio 7 22 GPIO_ACTIVE_LOW>; /* PH22 WL-PMU-EN */
        };
 
        reg_gmac_3v3: gmac-3v3 {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&gmac_power_pin_bpi_m1p>;
                regulator-name = "gmac-3v3";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        phy-supply = <&reg_gmac_3v3>;
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_bpi_m1p>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 10 GPIO_ACTIVE_LOW>; /* PH10 */
 &mmc3 {
        #address-cells = <1>;
        #size-cells = <0>;
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc3_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        mmc-pwrseq = <&mmc3_pwrseq>;
        bus-width = <4>;
        };
 };
 
-&mmc3_pins_a {
-       /* AP6210 requires pull-up */
-       bias-pull-up;
-};
-
 &ohci0 {
        status = "okay";
 };
        status = "okay";
 };
 
-&pio {
-       gmac_power_pin_bpi_m1p: gmac_power_pin@0 {
-               pins = "PH23";
-               function = "gpio_out";
-       };
-
-       led_pins_bpi_m1p: led_pins@0 {
-               pins = "PH24", "PH25";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin_bpi_m1p: mmc0_cd_pin@0 {
-               pins = "PH10";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       mmc3_pwrseq_pin_bpi_m1p: mmc3_pwrseq_pin@0 {
-               pins = "PH22";
-               function = "gpio_out";
-       };
-};
-
 &reg_dcdc2 {
        regulator-always-on;
        regulator-min-microvolt = <1000000>;
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 70dfc4a..556b1b5 100644 (file)
@@ -76,8 +76,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_bananapi>;
 
                green {
                        label = "bananapi:green:usr";
@@ -87,8 +85,6 @@
 
        reg_gmac_3v3: gmac-3v3 {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&gmac_power_pin_bananapi>;
                regulator-name = "gmac-3v3";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        phy-supply = <&reg_gmac_3v3>;
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_bananapi>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 10 GPIO_ACTIVE_LOW>; /* PH10 */
                "IO-6", "IO-3", "IO-2", "IO-0", "", "", "", "",
                "", "", "", "", "", "", "", "";
 
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
        };
-
-       mmc0_cd_pin_bananapi: mmc0_cd_pin@0 {
-               pins = "PH10";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       gmac_power_pin_bananapi: gmac_power_pin@0 {
-               pins = "PH23";
-               function = "gpio_out";
-       };
-
-       led_pins_bananapi: led_pins@0 {
-               pins = "PH24";
-               function = "gpio_out";
-       };
 };
 
 #include "axp209.dtsi"
 
 &spi0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi0_pins_a>,
-                   <&spi0_cs0_pins_a>,
-                   <&spi0_cs1_pins_a>;
+       pinctrl-0 = <&spi0_pi_pins>,
+                   <&spi0_cs0_pi_pin>,
+                   <&spi0_cs1_pi_pin>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 &uart3 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart3_pins_b>;
+       pinctrl-0 = <&uart3_ph_pins>;
        status = "okay";
 };
 
 &uart7 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart7_pins_a>;
+       pinctrl-0 = <&uart7_pi_pins>;
        status = "okay";
 };
 
index 0898eb6..0176e9d 100644 (file)
@@ -62,8 +62,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_bananapro>;
 
                blue {
                        label = "bananapro:blue:usr";
 
        wifi_pwrseq: wifi-pwrseq {
                compatible = "mmc-pwrseq-simple";
-               pinctrl-names = "default";
-               pinctrl-0 = <&vmmc3_pin_bananapro>;
                reset-gpios = <&pio 7 22 GPIO_ACTIVE_LOW>;
        };
 
        reg_gmac_3v3: gmac-3v3 {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&gmac_power_pin_bananapro>;
                regulator-name = "gmac-3v3";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        phy-supply = <&reg_gmac_3v3>;
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_bananapro>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 10 GPIO_ACTIVE_LOW>; /* PH10 */
 };
 
 &mmc3 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc3_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        mmc-pwrseq = <&wifi_pwrseq>;
        bus-width = <4>;
        status = "okay";
 };
 
-&pio {
-       gmac_power_pin_bananapro: gmac_power_pin@0 {
-               pins = "PH23";
-               function = "gpio_out";
-       };
-
-       led_pins_bananapro: led_pins@0 {
-               pins = "PH24", "PG2";
-               function = "gpio_out";
-       };
-
-       mmc0_cd_pin_bananapro: mmc0_cd_pin@0 {
-               pins = "PH10";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb1_vbus_pin_bananapro: usb1_vbus_pin@0 {
-               pins = "PH0";
-               function = "gpio_out";
-       };
-
-       usb2_vbus_pin_bananapro: usb2_vbus_pin@0 {
-               pins = "PH1";
-               function = "gpio_out";
-       };
-
-       vmmc3_pin_bananapro: vmmc3_pin@0 {
-               pins = "PH22";
-               function = "gpio_out";
-       };
-};
-
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_bananapro>;
        gpio = <&pio 7 0 GPIO_ACTIVE_HIGH>; /* PH0 */
        status = "okay";
 };
 
 &reg_usb2_vbus {
-       pinctrl-0 = <&usb2_vbus_pin_bananapro>;
        gpio = <&pio 7 1 GPIO_ACTIVE_HIGH>; /* PH1 */
        status = "okay";
 };
 
 &spi0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi0_pins_a>,
-                   <&spi0_cs0_pins_a>,
-                   <&spi0_cs1_pins_a>;
+       pinctrl-0 = <&spi0_pi_pins>,
+                   <&spi0_cs0_pi_pin>,
+                   <&spi0_cs1_pi_pin>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 &uart4 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart4_pins_b>;
+       pinctrl-0 = <&uart4_ph_pins>;
        status = "okay";
 };
 
 &uart7 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart7_pins_a>;
+       pinctrl-0 = <&uart7_pi_pins>;
        status = "okay";
 };
 
index 942ac9d..200685b 100644 (file)
@@ -74,8 +74,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_cubieboard2>;
 
                blue {
                        label = "cubieboard2:blue:usr";
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        status = "okay";
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &pio {
-       led_pins_cubieboard2: led_pins@0 {
-               pins = "PH20", "PH21";
-               function = "gpio_out";
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 5649161..15c5eae 100644 (file)
@@ -74,8 +74,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_cubietruck>;
 
                blue {
                        label = "cubietruck:blue:usr";
 
        mmc3_pwrseq: mmc3_pwrseq {
                compatible = "mmc-pwrseq-simple";
-               pinctrl-names = "default";
-               pinctrl-0 = <&mmc3_pwrseq_pin_cubietruck>;
                reset-gpios = <&pio 7 9 GPIO_ACTIVE_LOW>; /* PH9 WIFI_EN */
        };
 
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        status = "okay";
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 
 &i2c1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &mmc3 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc3_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        mmc-pwrseq = <&mmc3_pwrseq>;
        bus-width = <4>;
        };
 };
 
-&mmc3_pins_a {
-       /* AP6210 requires pull-up */
-       bias-pull-up;
-};
-
 &ohci0 {
        status = "okay";
 };
        status = "okay";
 };
 
-&pio {
-       ahci_pwr_pin_cubietruck: ahci_pwr_pin@1 {
-               pins = "PH12";
-               function = "gpio_out";
-       };
-
-       led_pins_cubietruck: led_pins@0 {
-               pins = "PH7", "PH11", "PH20", "PH21";
-               function = "gpio_out";
-       };
-
-       mmc3_pwrseq_pin_cubietruck: mmc3_pwrseq_pin@0 {
-               pins = "PH9";
-               function = "gpio_out";
-       };
-
-       usb0_vbus_pin_a: usb0_vbus_pin@0 {
-               pins = "PH17";
-               function = "gpio_out";
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               pins = "PH19";
-               function = "gpio_in";
-       };
-
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               pins = "PH22";
-               function = "gpio_in";
-       };
-};
-
 &pwm {
        pinctrl-names = "default";
-       pinctrl-0 = <&pwm0_pins_a>, <&pwm1_pins_a>;
+       pinctrl-0 = <&pwm0_pin>, <&pwm1_pin>;
        status = "okay";
 };
 
 &reg_ahci_5v {
-       pinctrl-0 = <&ahci_pwr_pin_cubietruck>;
        gpio = <&pio 7 12 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 };
 
 &reg_usb0_vbus {
-       pinctrl-0 = <&usb0_vbus_pin_a>;
        gpio = <&pio 7 17 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &spdif {
        pinctrl-names = "default";
-       pinctrl-0 = <&spdif_tx_pins_a>;
+       pinctrl-0 = <&spdif_tx_pin>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 };
 
 &usbphy {
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb0_id_detect_pin>, <&usb0_vbus_detect_pin>;
        usb0_id_det-gpios = <&pio 7 19 GPIO_ACTIVE_HIGH>; /* PH19 */
        usb0_vbus_det-gpios = <&pio 7 22 GPIO_ACTIVE_HIGH>; /* PH22 */
        usb0_vbus_power-supply = <&usb_power_supply>;
index 1f0e5ec..fd0153f 100644 (file)
@@ -67,8 +67,6 @@
 
        reg_mmc3_vdd: mmc3_vdd {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&mmc3_vdd_pin_a20_hummingbird>;
                regulator-name = "mmc3_vdd";
                regulator-min-microvolt = <3000000>;
                regulator-max-microvolt = <3000000>;
@@ -78,8 +76,6 @@
 
        reg_gmac_vdd: gmac_vdd {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&gmac_vdd_pin_a20_hummingbird>;
                regulator-name = "gmac_vdd";
                regulator-min-microvolt = <3000000>;
                regulator-max-microvolt = <3000000>;
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        phy-supply = <&reg_gmac_vdd>;
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
 &i2c3 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c3_pins_a>;
        status = "okay";
 };
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v0>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &mmc3 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc3_pins_a>;
        vmmc-supply = <&reg_mmc3_vdd>;
        bus-width = <4>;
        non-removable;
        status = "okay";
 };
 
-&pio {
-       ahci_pwr_pin_a20_hummingbird: ahci_pwr_pin@0 {
-               pins = "PH15";
-               function = "gpio_out";
-       };
-
-       usb1_vbus_pin_a20_hummingbird: usb1_vbus_pin@0 {
-               pins = "PH2";
-               function = "gpio_out";
-       };
-
-       mmc3_vdd_pin_a20_hummingbird: mmc3_vdd_pin@0 {
-               pins = "PH9";
-               function = "gpio_out";
-       };
-
-       gmac_vdd_pin_a20_hummingbird: gmac_vdd_pin@0 {
-               pins = "PH16";
-               function = "gpio_out";
-       };
-};
-
 &pwm {
        pinctrl-names = "default";
-       pinctrl-0 = <&pwm0_pins_a>;
+       pinctrl-0 = <&pwm0_pin>;
        status = "okay";
 };
 
 &reg_ahci_5v {
-       pinctrl-0 = <&ahci_pwr_pin_a20_hummingbird>;
        gpio = <&pio 7 15 GPIO_ACTIVE_HIGH>; /* PH15 */
        status = "okay";
 };
 
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_a20_hummingbird>;
        gpio = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
        status = "okay";
 };
 
 &spi2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi2_pins_b>,
-                   <&spi2_cs0_pins_b>;
+       pinctrl-0 = <&spi2_pb_pins>,
+                   <&spi2_cs0_pb_pin>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 &uart2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart2_pins_a>;
+       pinctrl-0 = <&uart2_pi_pins>, <&uart2_cts_rts_pi_pins>;
        status = "okay";
 };
 
 &uart3 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart3_pins_a>;
+       pinctrl-0 = <&uart3_pg_pins>, <&uart3_cts_rts_pg_pins>;
        status = "okay";
 };
 
 &uart4 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart4_pins_a>;
+       pinctrl-0 = <&uart4_pg_pins>;
        status = "okay";
 };
 
 &uart5 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart5_pins_a>;
+       pinctrl-0 = <&uart5_pi_pins>;
        status = "okay";
 };
 
index 2e3f2f2..5f1c4f5 100644 (file)
@@ -61,8 +61,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_i12_tvbox>;
 
                red {
                        label = "i12_tvbox:red:usr";
@@ -77,8 +75,6 @@
 
        reg_vmmc3: vmmc3 {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&vmmc3_pin_i12_tvbox>;
                regulator-name = "vmmc3";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
@@ -88,8 +84,6 @@
 
        reg_vmmc3_io: vmmc3-io {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&vmmc3_io_pin_i12_tvbox>;
                regulator-name = "vmmc3-io";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
 
        reg_gmac_3v3: gmac-3v3 {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&gmac_power_pin_i12_tvbox>;
                regulator-name = "gmac-3v3";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        phy-supply = <&reg_gmac_3v3>;
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &mmc3 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc3_pins_a>;
        vmmc-supply = <&reg_vmmc3>;
        bus-width = <4>;
        non-removable;
        };
 };
 
-&mmc3_pins_a {
-       /* AP6210 / AP6330 requires pull-up */
-       bias-pull-up;
-};
-
 &ohci0 {
        status = "okay";
 };
        status = "okay";
 };
 
-&pio {
-       vmmc3_pin_i12_tvbox: vmmc3_pin@0 {
-               pins = "PH2";
-               function = "gpio_out";
-       };
-
-       vmmc3_io_pin_i12_tvbox: vmmc3_io_pin@0 {
-               pins = "PH12";
-               function = "gpio_out";
-       };
-
-       gmac_power_pin_i12_tvbox: gmac_power_pin@0 {
-               pins = "PH21";
-               function = "gpio_out";
-       };
-
-       led_pins_i12_tvbox: led_pins@0 {
-               pins = "PH9", "PH20";
-               function = "gpio_out";
-       };
-};
-
 &reg_usb1_vbus {
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 926fa19..9494947 100644 (file)
@@ -74,7 +74,7 @@
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        status = "okay";
@@ -85,8 +85,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 8 5 GPIO_ACTIVE_LOW>; /* PI5 */
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 1b05ba4..b90a760 100644 (file)
@@ -96,7 +96,7 @@
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        status = "okay";
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &pio {
-       led_pins_itead_core: led_pins@0 {
+       led_pins_itead_core: led-pins {
                pins = "PH20","PH21";
                function = "gpio_out";
                drive-strength = <20>;
 
 &spdif {
        pinctrl-names = "default";
-       pinctrl-0 = <&spdif_tx_pins_a>;
+       pinctrl-0 = <&spdif_tx_pin>;
        status = "okay";
 };
index b1ab7c1..f91e1be 100644 (file)
@@ -74,8 +74,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_lamobo_r1>;
 
                green {
                        label = "lamobo_r1:green:usr";
@@ -85,8 +83,6 @@
 
        reg_gmac_3v3: gmac-3v3 {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&gmac_power_pin_lamobo_r1>;
                regulator-name = "gmac-3v3";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy-mode = "rgmii";
        phy-supply = <&reg_gmac_3v3>;
        status = "okay";
+       /delete-property/#address-cells;
+       /delete-property/#size-cells;
 
        fixed-link {
                speed = <1000>;
                switch: ethernet-switch@1e {
                        compatible = "brcm,bcm53125";
                        reg = <30>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
 
                        ports {
                                #address-cells = <1>;
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_lamobo_r1>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 10 GPIO_ACTIVE_LOW>; /* PH10 */
 };
 
 &pio {
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
        };
-
-       mmc0_cd_pin_lamobo_r1: mmc0_cd_pin@0 {
-               pins = "PH10";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       gmac_power_pin_lamobo_r1: gmac_power_pin@0 {
-               pins = "PH23";
-               function = "gpio_out";
-       };
-
-       led_pins_lamobo_r1: led_pins@0 {
-               pins = "PH24";
-               function = "gpio_out";
-       };
 };
 
 #include "axp209.dtsi"
 
 &spi0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi0_pins_a>,
-                   <&spi0_cs0_pins_a>,
-                   <&spi0_cs1_pins_a>;
+       pinctrl-0 = <&spi0_pi_pins>,
+                   <&spi0_cs0_pi_pin>,
+                   <&spi0_cs1_pi_pin>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 &uart3 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart3_pins_b>;
+       pinctrl-0 = <&uart3_ph_pins>;
        status = "okay";
 };
 
 &uart7 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart7_pins_a>;
+       pinctrl-0 = <&uart7_pi_pins>;
        status = "okay";
 };
 
index e91a209..b8a1aaa 100644 (file)
@@ -63,8 +63,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_m3>;
 
                blue {
                        label = "m3:blue:usr";
@@ -83,7 +81,7 @@
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        status = "okay";
@@ -94,8 +92,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &mmc2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc2_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        non-removable;
        status = "okay";
 };
 
-&pio {
-       led_pins_m3: led_pins@0 {
-               pins = "PH20";
-               function = "gpio_out";
-       };
-};
-
 &reg_usb1_vbus {
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 6109f79..1491c60 100644 (file)
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v0>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
        status = "okay";
 };
 
-&pio {
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               pins = "PH4";
-               function = "gpio_in";
-       };
-
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               pins = "PH5";
-               function = "gpio_in";
-       };
-};
-
 &reg_usb0_vbus {
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 &uart2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart2_pins_a>;
+       pinctrl-0 = <&uart2_pi_pins>, <&uart2_cts_rts_pi_pins>;
        status = "okay";
 };
 
 };
 
 &usbphy {
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb0_id_detect_pin>, <&usb0_vbus_detect_pin>;
        usb0_id_det-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */
        usb0_vbus_det-gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */
        usb0_vbus-supply = <&reg_usb0_vbus>;
index 81ebc97..20bf09b 100644 (file)
@@ -21,8 +21,6 @@
 };
 
 &mmc2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc2_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        mmc-pwrseq = <&mmc2_pwrseq>;
        bus-width = <4>;
index f080f82..f0e6a96 100644 (file)
@@ -74,8 +74,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_olimex_som_evb>;
 
                green {
                        label = "a20-olimex-som-evb:green:usr";
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        status = "okay";
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
        vref-supply = <&reg_vcc3v0>;
        status = "okay";
 
-       button@190 {
+       button-190 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <190000>;
        };
 
-       button@390 {
+       button-390 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
                voltage = <390000>;
        };
 
-       button@600 {
+       button-600 {
                label = "Menu";
                linux,code = <KEY_MENU>;
                channel = <0>;
                voltage = <600000>;
        };
 
-       button@800 {
+       button-800 {
                label = "Search";
                linux,code = <KEY_SEARCH>;
                channel = <0>;
                voltage = <800000>;
        };
 
-       button@980 {
+       button-980 {
                label = "Home";
                linux,code = <KEY_HOMEPAGE>;
                channel = <0>;
                voltage = <980000>;
        };
 
-       button@1180 {
+       button-1180 {
                label = "Esc";
                linux,code = <KEY_ESC>;
                channel = <0>;
                voltage = <1180000>;
        };
 
-       button@1400 {
+       button-1400 {
                label = "Enter";
                linux,code = <KEY_ENTER>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &mmc3 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc3_pins_a>, <&mmc3_cd_pin_olimex_som_evb>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 0 GPIO_ACTIVE_LOW>; /* PH0 */
 };
 
 &pio {
-       ahci_pwr_pin_olimex_som_evb: ahci_pwr_pin@1 {
-               pins = "PC3";
-               function = "gpio_out";
-       };
-
-       led_pins_olimex_som_evb: led_pins@0 {
+       led_pins_olimex_som_evb: led-pins {
                pins = "PH2";
                function = "gpio_out";
                drive-strength = <20>;
        };
-
-       mmc3_cd_pin_olimex_som_evb: mmc3_cd_pin@0 {
-               pins = "PH0";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               pins = "PH4";
-               function = "gpio_in";
-       };
-
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               pins = "PH5";
-               function = "gpio_in";
-       };
 };
 
 &reg_ahci_5v {
-       pinctrl-0 = <&ahci_pwr_pin_olimex_som_evb>;
        gpio = <&pio 2 3 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &spi1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi1_pins_a>,
-                   <&spi1_cs0_pins_a>;
+       pinctrl-0 = <&spi1_pi_pins>,
+                   <&spi1_cs0_pi_pin>;
        status = "okay";
 };
 
 &spi2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi2_pins_a>,
-                   <&spi2_cs0_pins_a>;
+       pinctrl-0 = <&spi2_pc_pins>,
+                   <&spi2_cs0_pc_pin>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 &uart6 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart6_pins_a>;
+       pinctrl-0 = <&uart6_pi_pins>;
        status = "okay";
 };
 
 &uart7 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart7_pins_a>;
+       pinctrl-0 = <&uart7_pi_pins>;
        status = "okay";
 };
 
 };
 
 &usbphy {
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb0_id_detect_pin>, <&usb0_vbus_detect_pin>;
        usb0_id_det-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH04 */
        usb0_vbus_det-gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH05 */
        usb0_vbus-supply = <&reg_usb0_vbus>;
index c56620a..a59755a 100644 (file)
@@ -20,8 +20,6 @@
 };
 
 &mmc2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc2_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        mmc-pwrseq = <&mmc2_pwrseq>;
        bus-width = <4>;
index 3d7b5c8..823aabc 100644 (file)
@@ -78,7 +78,7 @@
 
 &can0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&can0_pins_a>;
+       pinctrl-0 = <&can_ph_pins>;
        status = "okay";
 };
 
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy3>;
        phy-mode = "rgmii";
        phy-supply = <&reg_vcc3v3>;
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 
 /* Exposed to UEXT1 */
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        eeprom: eeprom@50 {
 
 /* Exposed to UEXT2 */
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>;
 };
 
 &mmc3 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc3_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        mmc-pwrseq = <&rtl_pwrseq>;
        bus-width = <4>;
 };
 
 &pio {
-       bt_uart_pins: bt_uart_pins@0 {
-               pins = "PG6", "PG7", "PG8";
+       uart3_rts_pin: uart3-rts-pin {
+               pins = "PG8";
                function = "uart3";
        };
 };
 /* Exposed to UEXT1 */
 &spi1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi1_pins_a>,
-                   <&spi1_cs0_pins_a>;
+       pinctrl-0 = <&spi1_pi_pins>,
+                   <&spi1_cs0_pi_pin>;
        status = "okay";
 };
 
 /* Exposed to UEXT2 */
 &spi2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi2_pins_a>,
-                   <&spi2_cs0_pins_a>;
+       pinctrl-0 = <&spi2_pc_pins>,
+                   <&spi2_cs0_pc_pin>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 /* Used for RTL8723BS bluetooth */
 &uart3 {
        pinctrl-names = "default";
-       pinctrl-0 = <&bt_uart_pins>;
+       pinctrl-0 = <&uart3_pg_pins>, <&uart3_rts_pin>;
        status = "okay";
 };
 
 /* Exposed to UEXT1 */
 &uart4 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart4_pins_a>;
+       pinctrl-0 = <&uart4_pg_pins>;
        status = "okay";
 };
 
 /* Exposed to UEXT2 */
 &uart7 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart7_pins_a>;
+       pinctrl-0 = <&uart7_pi_pins>;
        status = "okay";
 };
 
index d20fd03..5e41119 100644 (file)
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        status = "okay";
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        eeprom: eeprom@50 {
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &pio {
-       ahci_pwr_pin_olinuxinolime: ahci_pwr_pin@1 {
-               pins = "PC3";
-               function = "gpio_out";
-       };
-
-       led_pins_olinuxinolime: led_pins@0 {
+       led_pins_olinuxinolime: led-pins {
                pins = "PH2";
                function = "gpio_out";
                drive-strength = <20>;
        };
 
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
        };
 
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
+       usb0_vbus_detect_pin: usb0-vbus-detect-pin {
                pins = "PH5";
                function = "gpio_in";
                bias-pull-down;
 };
 
 &reg_ahci_5v {
-       pinctrl-0 = <&ahci_pwr_pin_olinuxinolime>;
        gpio = <&pio 2 3 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 81f376f..decb014 100644 (file)
        compatible = "olimex,a20-olinuxino-lime2-emmc", "allwinner,sun7i-a20";
 
        mmc2_pwrseq: pwrseq {
-               pinctrl-0 = <&mmc2_pins_nrst>;
-               pinctrl-names = "default";
                compatible = "mmc-pwrseq-emmc";
                reset-gpios = <&pio 2 16 GPIO_ACTIVE_LOW>;
        };
 };
 
-&pio {
-       mmc2_pins_nrst: mmc2-rst-pin {
-               pins = "PC16";
-               function = "gpio_out";
-       };
-};
-
 &mmc2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc2_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        vqmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
index b828677..55c9086 100644 (file)
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        status = "okay";
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        eeprom: eeprom@50 {
        };
 };
 
+&lradc {
+       vref-supply = <&reg_vcc3v0>;
+};
+
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &pio {
-       ahci_pwr_pin_olinuxinolime: ahci_pwr_pin@1 {
-               pins = "PC3";
-               function = "gpio_out";
-       };
-
-       led_pins_olinuxinolime: led_pins@0 {
+       led_pins_olinuxinolime: led-pins {
                pins = "PH2";
                function = "gpio_out";
                drive-strength = <20>;
        };
 
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
        };
 
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
+       usb0_vbus_detect_pin: usb0-vbus-detect-pin {
                pins = "PH5";
                function = "gpio_in";
                bias-pull-down;
        };
-
-       usb0_vbus_pin_lime2: usb0_vbus_pin@0 {
-               pins = "PC17";
-               function = "gpio_out";
-       };
 };
 
 &reg_ahci_5v {
-       pinctrl-0 = <&ahci_pwr_pin_olinuxinolime>;
        gpio = <&pio 2 3 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 };
 
 &reg_usb0_vbus {
-       pinctrl-0 = <&usb0_vbus_pin_lime2>;
        gpio = <&pio 2 17 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index d99e7b1..2337b44 100644 (file)
@@ -54,8 +54,6 @@
 };
 
 &mmc2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc2_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        non-removable;
index 866d230..840ae11 100644 (file)
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>, <&gmac_txerr>;
+       pinctrl-0 = <&gmac_mii_pins>, <&gmac_txerr>;
        phy = <&phy1>;
        phy-mode = "mii";
        status = "okay";
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        eeprom: eeprom@50 {
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
        vref-supply = <&reg_vcc3v0>;
        status = "okay";
 
-       button@191 {
+       button-191 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <191274>;
        };
 
-       button@392 {
+       button-392 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
                voltage = <392644>;
        };
 
-       button@601 {
+       button-601 {
                label = "Menu";
                linux,code = <KEY_MENU>;
                channel = <0>;
                voltage = <601151>;
        };
 
-       button@795 {
+       button-795 {
                label = "Search";
                linux,code = <KEY_SEARCH>;
                channel = <0>;
                voltage = <795090>;
        };
 
-       button@987 {
+       button-987 {
                label = "Home";
                linux,code = <KEY_HOMEPAGE>;
                channel = <0>;
                voltage = <987387>;
        };
 
-       button@1184 {
+       button-1184 {
                label = "Esc";
                linux,code = <KEY_ESC>;
                channel = <0>;
                voltage = <1184678>;
        };
 
-       button@1398 {
+       button-1398 {
                label = "Enter";
                linux,code = <KEY_ENTER>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &mmc3 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc3_pins_a>, <&mmc3_cd_pin_olinuxinom>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 11 GPIO_ACTIVE_LOW>; /* PH11 */
 };
 
 &pio {
-       gmac_txerr: gmac_txerr@0 {
+       gmac_txerr: gmac-txerr-pin {
                pins = "PA17";
                function = "gmac";
        };
 
-       mmc3_cd_pin_olinuxinom: mmc3_cd_pin@0 {
-               pins = "PH11";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       led_pins_olinuxino: led_pins@0 {
+       led_pins_olinuxino: led-pins {
                pins = "PH2";
                function = "gpio_out";
                drive-strength = <20>;
        };
 
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
        };
 
-       usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
+       usb0_vbus_detect_pin: usb0-vbus-detect-pin {
                pins = "PH5";
                function = "gpio_in";
                bias-pull-down;
 
 &spi1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi1_pins_a>,
-                   <&spi1_cs0_pins_a>;
+       pinctrl-0 = <&spi1_pi_pins>,
+                   <&spi1_cs0_pi_pin>;
        status = "okay";
 };
 
 &spi2 {
        pinctrl-names = "default";
-       pinctrl-0 = <&spi2_pins_a>,
-                   <&spi2_cs0_pins_a>;
+       pinctrl-0 = <&spi2_pc_pins>,
+                   <&spi2_cs0_pc_pin>;
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 &uart6 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart6_pins_a>;
+       pinctrl-0 = <&uart6_pi_pins>;
        status = "okay";
 };
 
 &uart7 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart7_pins_a>;
+       pinctrl-0 = <&uart7_pi_pins>;
        status = "okay";
 };
 
index f5c7178..1588108 100644 (file)
@@ -74,8 +74,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_orangepi>;
 
                green {
                        label = "orangepi:green:usr";
@@ -90,8 +88,6 @@
 
        reg_gmac_3v3: gmac-3v3 {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&gmac_power_pin_orangepi>;
                regulator-name = "gmac-3v3";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        phy-supply = <&reg_gmac_3v3>;
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_orangepi>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 10 GPIO_ACTIVE_LOW>; /* PH10 */
 };
 
 &mmc3 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc3_pins_a>, <&mmc3_cd_pin_orangepi>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 11 GPIO_ACTIVE_LOW>; /* PH11 */
 };
 
 &pio {
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
        };
-
-       mmc0_cd_pin_orangepi: mmc0_cd_pin@0 {
-               pins = "PH10";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       mmc3_cd_pin_orangepi: mmc3_cd_pin@0 {
-               pins = "PH11";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb2_vbus_pin_bananapro: usb2_vbus_pin@0 {
-               pins = "PH22";
-               function = "gpio_out";
-       };
-
-       gmac_power_pin_orangepi: gmac_power_pin@0 {
-               pins = "PH23";
-               function = "gpio_out";
-       };
-
-       led_pins_orangepi: led_pins@0 {
-               pins = "PH24", "PH25";
-               function = "gpio_out";
-       };
-
-       usb1_vbus_pin_bananapro: usb1_vbus_pin@0 {
-               pins = "PH26";
-               function = "gpio_out";
-       };
 };
 
 &reg_dcdc2 {
 };
 
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_bananapro>;
        gpio = <&pio 7 26 GPIO_ACTIVE_HIGH>; /* PH26 */
        status = "okay";
 };
 
 &reg_usb2_vbus {
-       pinctrl-0 = <&usb2_vbus_pin_bananapro>;
        gpio = <&pio 7 22 GPIO_ACTIVE_HIGH>; /* PH22 */
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 7a4244e..d64de2e 100644 (file)
@@ -63,8 +63,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_orangepi>;
 
                green {
                        label = "orangepi:green:usr";
@@ -74,8 +72,6 @@
 
        reg_gmac_3v3: gmac-3v3 {
                compatible = "regulator-fixed";
-               pinctrl-names = "default";
-               pinctrl-0 = <&gmac_power_pin_orangepi>;
                regulator-name = "gmac-3v3";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
@@ -99,7 +95,7 @@
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        phy-supply = <&reg_gmac_3v3>;
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_orangepi>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 10 GPIO_ACTIVE_LOW>; /* PH10 */
 };
 
 &pio {
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
        };
-
-       mmc0_cd_pin_orangepi: mmc0_cd_pin@0 {
-               pins = "PH10";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       usb2_vbus_pin_bananapro: usb2_vbus_pin@0 {
-               pins = "PH22";
-               function = "gpio_out";
-       };
-
-       gmac_power_pin_orangepi: gmac_power_pin@0 {
-               pins = "PH23";
-               function = "gpio_out";
-       };
-
-       led_pins_orangepi: led_pins@0 {
-               pins = "PH24";
-               function = "gpio_out";
-       };
-
-       usb1_vbus_pin_bananapro: usb1_vbus_pin@0 {
-               pins = "PH26";
-               function = "gpio_out";
-       };
 };
 
 &reg_dcdc2 {
 };
 
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_bananapro>;
        gpio = <&pio 7 26 GPIO_ACTIVE_HIGH>; /* PH26 */
        status = "okay";
 };
 
 &reg_usb2_vbus {
-       pinctrl-0 = <&usb2_vbus_pin_bananapro>;
        gpio = <&pio 7 22 GPIO_ACTIVE_HIGH>; /* PH22 */
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index bfca960..538ea15 100644 (file)
@@ -71,8 +71,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_pcduino3_nano>;
 
                /* Marked "LED3" on the PCB. */
                usr1 {
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        status = "okay";
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &pio {
-       ahci_pwr_pin_pcduino3_nano: ahci_pwr_pin@0 {
-               pins = "PH2";
-               function = "gpio_out";
-       };
-
-       led_pins_pcduino3_nano: led_pins@0 {
-               pins = "PH16", "PH15";
-               function = "gpio_out";
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
        };
-
-       usb1_vbus_pin_pcduino3_nano: usb1_vbus_pin@0 {
-               pins = "PD2";
-               function = "gpio_out";
-       };
 };
 
 &reg_ahci_5v {
-       pinctrl-0 = <&ahci_pwr_pin_pcduino3_nano>;
        gpio = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
        status = "okay";
 };
 
 /* A single regulator (U24) powers both USB host ports. */
 &reg_usb1_vbus {
-       pinctrl-0 = <&usb1_vbus_pin_pcduino3_nano>;
        gpio = <&pio 3 2 GPIO_ACTIVE_HIGH>; /* PD2 */
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index c576f10..a72ed43 100644 (file)
@@ -63,8 +63,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_pcduino3>;
 
                tx {
                        label = "pcduino3:green:tx";
                };
        };
 
-       gpio_keys {
+       gpio-keys {
                compatible = "gpio-keys";
-               pinctrl-names = "default";
-               pinctrl-0 = <&key_pins_pcduino3>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               button@0 {
+
+               back {
                        label = "Key Back";
                        linux,code = <KEY_BACK>;
                        gpios = <&pio 7 17 GPIO_ACTIVE_LOW>;
                };
-               button@1 {
+
+               home {
                        label = "Key Home";
                        linux,code = <KEY_HOME>;
                        gpios = <&pio 7 18 GPIO_ACTIVE_LOW>;
                };
-               button@2 {
+
+               menu {
                        label = "Key Menu";
                        linux,code = <KEY_MENU>;
                        gpios = <&pio 7 19 GPIO_ACTIVE_LOW>;
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_mii_a>;
+       pinctrl-0 = <&gmac_mii_pins>;
        phy = <&phy1>;
        phy-mode = "mii";
        status = "okay";
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 
 &ir0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&ir0_rx_pins_a>;
+       pinctrl-0 = <&ir0_rx_pin>;
        status = "okay";
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &pio {
-       led_pins_pcduino3: led_pins@0 {
-               pins = "PH15", "PH16";
-               function = "gpio_out";
-       };
-
-       key_pins_pcduino3: key_pins@0 {
-               pins = "PH17", "PH18", "PH19";
-               function = "gpio_in";
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 8202c87..ffade25 100644 (file)
@@ -63,8 +63,6 @@
                pwms = <&pwm 0 50000 PWM_POLARITY_INVERTED>;
                brightness-levels = <0 10 20 30 40 50 60 70 80 90 100>;
                default-brightness-level = <8>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&bl_enable_pin>;
                enable-gpios = <&pio 7 7 GPIO_ACTIVE_HIGH>; /* PH7 */
        };
 
@@ -74,8 +72,6 @@
 };
 
 &codec {
-       pinctrl-names = "default";
-       pinctrl-0 = <&codec_pa_pin>;
        allwinner,pa-gpios = <&pio 7 15 GPIO_ACTIVE_HIGH>; /* PH15 */
        status = "okay";
 };
@@ -93,8 +89,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 #include "axp209.dtsi"
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 
        gt911: touchscreen@5d {
                reg = <0x5d>;
                interrupt-parent = <&pio>;
                interrupts = <7 21 IRQ_TYPE_EDGE_FALLING>; /* EINT21 (PH21) */
-               pinctrl-names = "default";
-               pinctrl-0 = <&ts_reset_pin>;
                irq-gpios = <&pio 7 21 GPIO_ACTIVE_HIGH>; /* INT (PH21) */
                reset-gpios = <&pio 1 13 GPIO_ACTIVE_HIGH>; /* RST (PB13) */
                touchscreen-swapped-x-y;
        vref-supply = <&reg_vcc3v0>;
        status = "okay";
 
-       button@571 {
+       button-571 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <571428>;
        };
 
-       button@761 {
+       button-761 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &pio {
-       bl_enable_pin: bl_enable_pin@0 {
-               pins = "PH7";
-               function = "gpio_out";
-       };
-
-       codec_pa_pin: codec_pa_pin@0 {
-               pins = "PH15";
-               function = "gpio_out";
-       };
-
-       ts_reset_pin: ts_reset_pin@0 {
-               pins = "PB13";
-               function = "gpio_out";
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
 
 &pwm {
        pinctrl-names = "default";
-       pinctrl-0 = <&pwm0_pins_a>;
+       pinctrl-0 = <&pwm0_pin>;
        status = "okay";
 };
 
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index ff5c108..c27e560 100644 (file)
@@ -62,8 +62,6 @@
 
        mmc3_pwrseq: mmc3_pwrseq {
                compatible = "mmc-pwrseq-simple";
-               pinctrl-names = "default";
-               pinctrl-0 = <&vmmc3_pin_ap6xxx_wl_regon>;
                reset-gpios = <&pio 7 9 GPIO_ACTIVE_LOW>; /* PH9 WIFI_EN */
        };
 };
@@ -82,7 +80,7 @@
 
 &gmac {
        pinctrl-names = "default";
-       pinctrl-0 = <&gmac_pins_rgmii_a>;
+       pinctrl-0 = <&gmac_rgmii_pins>;
        phy = <&phy1>;
        phy-mode = "rgmii";
        status = "okay";
@@ -93,8 +91,6 @@
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 
        axp209: pmic@34 {
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
 &i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
        status = "okay";
 };
 
 #include "axp209.dtsi"
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        bus-width = <4>;
        cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
 };
 
 &mmc3 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc3_pins_a>;
        vmmc-supply = <&reg_vcc3v3>;
        mmc-pwrseq = <&mmc3_pwrseq>;
        bus-width = <4>;
 };
 
 &pio {
-       vmmc3_pin_ap6xxx_wl_regon: vmmc3_pin@0 {
-               pins = "PH9";
-               function = "gpio_out";
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH4";
                function = "gpio_in";
                bias-pull-up;
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 02e40da..641a8fa 100644 (file)
@@ -42,8 +42,6 @@
  *     OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "skeleton.dtsi"
-
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/thermal/thermal.h>
 #include <dt-bindings/dma/sun4i-a10.h>
@@ -52,6 +50,8 @@
 
 / {
        interrupt-parent = <&gic>;
+       #address-cells = <1>;
+       #size-cells = <1>;
 
        aliases {
                ethernet0 = &gmac;
@@ -62,7 +62,7 @@
                #size-cells = <1>;
                ranges;
 
-               framebuffer@0 {
+               framebuffer-lcd0-hdmi {
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0-hdmi";
@@ -73,7 +73,7 @@
                        status = "disabled";
                };
 
-               framebuffer@1 {
+               framebuffer-lcd0 {
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0";
@@ -83,7 +83,7 @@
                        status = "disabled";
                };
 
-               framebuffer@2 {
+               framebuffer-lcd0-tve0 {
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0-tve0";
                        #cooling-cells = <2>;
                };
 
-               cpu@1 {
+               cpu1: cpu@1 {
                        compatible = "arm,cortex-a7";
                        device_type = "cpu";
                        reg = <1>;
                        cooling-maps {
                                map0 {
                                        trip = <&cpu_alert0>;
-                                       cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                                        <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
                                };
                        };
 
                };
        };
 
-       memory {
-               reg = <0x40000000 0x80000000>;
-       };
-
        reserved-memory {
                #address-cells = <1>;
                #size-cells = <1>;
                ranges;
 
                /* Address must be kept in the lower 256 MiBs of DRAM for VE. */
-               cma_pool: cma@4a000000 {
+               default-pool {
                        compatible = "shared-dma-pool";
                        size = <0x6000000>;
                        alloc-ranges = <0x4a000000 0x6000000>;
        };
 
        pmu {
-               compatible = "arm,cortex-a7-pmu", "arm,cortex-a15-pmu";
+               compatible = "arm,cortex-a7-pmu";
                interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
                             <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
        };
                #size-cells = <1>;
                ranges;
 
-               osc24M: clk@1c20050 {
+               osc24M: clk-24M {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <24000000>;
                        clock-output-names = "osc24M";
                };
 
-               osc32k: clk@0 {
+               osc32k: clk-32k {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <32768>;
                 * The actual TX clock rate is not controlled by the
                 * gmac_tx clock.
                 */
-               mii_phy_tx_clk: clk@1 {
+               mii_phy_tx_clk: clk-mii-phy-tx {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <25000000>;
                        clock-output-names = "mii_phy_tx";
                };
 
-               gmac_int_tx_clk: clk@2 {
+               gmac_int_tx_clk: clk-gmac-int-tx {
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <125000000>;
                status = "disabled";
        };
 
-       soc@1c00000 {
+       soc {
                compatible = "simple-bus";
                #address-cells = <1>;
                #size-cells = <1>;
                                      "output",
                                      "sample";
                        interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&mmc0_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                                      "output",
                                      "sample";
                        interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&mmc2_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                                      "output",
                                      "sample";
                        interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&mmc3_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                                };
 
                                hdmi_out: port@1 {
-                                       #address-cells = <1>;
-                                       #size-cells = <0>;
                                        reg = <1>;
                                };
                        };
                        #interrupt-cells = <3>;
                        #gpio-cells = <3>;
 
-                       can0_pins_a: can0@0 {
+                       can_ph_pins: can-ph-pins {
                                pins = "PH20", "PH21";
                                function = "can";
                        };
 
-                       clk_out_a_pins_a: clk_out_a@0 {
+                       clk_out_a_pin: clk-out-a-pin {
                                pins = "PI12";
                                function = "clk_out_a";
                        };
 
-                       clk_out_b_pins_a: clk_out_b@0 {
+                       clk_out_b_pin: clk-out-b-pin {
                                pins = "PI13";
                                function = "clk_out_b";
                        };
 
-                       emac_pins_a: emac0@0 {
+                       emac_pa_pins: emac-pa-pins {
                                pins = "PA0", "PA1", "PA2",
                                       "PA3", "PA4", "PA5", "PA6",
                                       "PA7", "PA8", "PA9", "PA10",
                                function = "emac";
                        };
 
-                       gmac_pins_mii_a: gmac_mii@0 {
+                       gmac_mii_pins: gmac-mii-pins {
                                pins = "PA0", "PA1", "PA2",
                                       "PA3", "PA4", "PA5", "PA6",
                                       "PA7", "PA8", "PA9", "PA10",
                                function = "gmac";
                        };
 
-                       gmac_pins_rgmii_a: gmac_rgmii@0 {
+                       gmac_rgmii_pins: gmac-rgmii-pins {
                                pins = "PA0", "PA1", "PA2",
                                       "PA3", "PA4", "PA5", "PA6",
                                        "PA7", "PA8", "PA10",
                                drive-strength = <40>;
                        };
 
-                       i2c0_pins_a: i2c0@0 {
+                       i2c0_pins: i2c0-pins {
                                pins = "PB0", "PB1";
                                function = "i2c0";
                        };
 
-                       i2c1_pins_a: i2c1@0 {
+                       i2c1_pins: i2c1-pins {
                                pins = "PB18", "PB19";
                                function = "i2c1";
                        };
 
-                       i2c2_pins_a: i2c2@0 {
+                       i2c2_pins: i2c2-pins {
                                pins = "PB20", "PB21";
                                function = "i2c2";
                        };
 
-                       i2c3_pins_a: i2c3@0 {
+                       i2c3_pins: i2c3-pins {
                                pins = "PI0", "PI1";
                                function = "i2c3";
                        };
 
-                       ir0_rx_pins_a: ir0@0 {
+                       ir0_rx_pin: ir0-rx-pin {
                                pins = "PB4";
                                function = "ir0";
                        };
 
-                       ir0_tx_pins_a: ir0@1 {
+                       ir0_tx_pin: ir0-tx-pin {
                                pins = "PB3";
                                function = "ir0";
                        };
 
-                       ir1_rx_pins_a: ir1@0 {
+                       ir1_rx_pin: ir1-rx-pin {
                                pins = "PB23";
                                function = "ir1";
                        };
 
-                       ir1_tx_pins_a: ir1@1 {
+                       ir1_tx_pin: ir1-tx-pin {
                                pins = "PB22";
                                function = "ir1";
                        };
 
-                       mmc0_pins_a: mmc0@0 {
+                       mmc0_pins: mmc0-pins {
                                pins = "PF0", "PF1", "PF2",
                                       "PF3", "PF4", "PF5";
                                function = "mmc0";
                                bias-pull-up;
                        };
 
-                       mmc2_pins_a: mmc2@0 {
+                       mmc2_pins: mmc2-pins {
                                pins = "PC6", "PC7", "PC8",
                                       "PC9", "PC10", "PC11";
                                function = "mmc2";
                                bias-pull-up;
                        };
 
-                       mmc3_pins_a: mmc3@0 {
+                       mmc3_pins: mmc3-pins {
                                pins = "PI4", "PI5", "PI6",
                                       "PI7", "PI8", "PI9";
                                function = "mmc3";
                                bias-pull-up;
                        };
 
-                       ps20_pins_a: ps20@0 {
+                       ps2_0_pins: ps2-0-pins {
                                pins = "PI20", "PI21";
                                function = "ps2";
                        };
 
-                       ps21_pins_a: ps21@0 {
+                       ps2_1_ph_pins: ps2-1-ph-pins {
                                pins = "PH12", "PH13";
                                function = "ps2";
                        };
 
-                       pwm0_pins_a: pwm0@0 {
+                       pwm0_pin: pwm0-pin {
                                pins = "PB2";
                                function = "pwm";
                        };
 
-                       pwm1_pins_a: pwm1@0 {
+                       pwm1_pin: pwm1-pin {
                                pins = "PI3";
                                function = "pwm";
                        };
 
-                       spdif_tx_pins_a: spdif@0 {
+                       spdif_tx_pin: spdif-tx-pin {
                                pins = "PB13";
                                function = "spdif";
                                bias-pull-up;
                        };
 
-                       spi0_pins_a: spi0@0 {
+                       spi0_pi_pins: spi0-pi-pins {
                                pins = "PI11", "PI12", "PI13";
                                function = "spi0";
                        };
 
-                       spi0_cs0_pins_a: spi0_cs0@0 {
+                       spi0_cs0_pi_pin: spi0-cs0-pi-pin {
                                pins = "PI10";
                                function = "spi0";
                        };
 
-                       spi0_cs1_pins_a: spi0_cs1@0 {
+                       spi0_cs1_pi_pin: spi0-cs1-pi-pin {
                                pins = "PI14";
                                function = "spi0";
                        };
 
-                       spi1_pins_a: spi1@0 {
+                       spi1_pi_pins: spi1-pi-pins {
                                pins = "PI17", "PI18", "PI19";
                                function = "spi1";
                        };
 
-                       spi1_cs0_pins_a: spi1_cs0@0 {
+                       spi1_cs0_pi_pin: spi1-cs0-pi-pin {
                                pins = "PI16";
                                function = "spi1";
                        };
 
-                       spi2_pins_a: spi2@0 {
-                               pins = "PC20", "PC21", "PC22";
+                       spi2_pb_pins: spi2-pb-pins {
+                               pins = "PB15", "PB16", "PB17";
                                function = "spi2";
                        };
 
-                       spi2_pins_b: spi2@1 {
-                               pins = "PB15", "PB16", "PB17";
+                       spi2_cs0_pb_pin: spi2-cs0-pb-pin {
+                               pins = "PB14";
                                function = "spi2";
                        };
 
-                       spi2_cs0_pins_a: spi2_cs0@0 {
-                               pins = "PC19";
+                       spi2_pc_pins: spi2-pc-pins {
+                               pins = "PC20", "PC21", "PC22";
                                function = "spi2";
                        };
 
-                       spi2_cs0_pins_b: spi2_cs0@1 {
-                               pins = "PB14";
+                       spi2_cs0_pc_pin: spi2-cs0-pc-pin {
+                               pins = "PC19";
                                function = "spi2";
                        };
 
-                       uart0_pins_a: uart0@0 {
+                       uart0_pb_pins: uart0-pb-pins {
                                pins = "PB22", "PB23";
                                function = "uart0";
                        };
 
-                       uart2_pins_a: uart2@0 {
-                               pins = "PI16", "PI17", "PI18", "PI19";
+                       uart2_pi_pins: uart2-pi-pins {
+                               pins = "PI18", "PI19";
                                function = "uart2";
                        };
 
-                       uart3_pins_a: uart3@0 {
-                               pins = "PG6", "PG7", "PG8", "PG9";
+                       uart2_cts_rts_pi_pins: uart2-cts-rts-pi-pins {
+                               pins = "PI16", "PI17";
+                               function = "uart2";
+                       };
+
+                       uart3_pg_pins: uart3-pg-pins {
+                               pins = "PG6", "PG7";
+                               function = "uart3";
+                       };
+
+                       uart3_cts_rts_pg_pins: uart3-cts-rts-pg-pins {
+                               pins = "PG8", "PG9";
                                function = "uart3";
                        };
 
-                       uart3_pins_b: uart3@1 {
+                       uart3_ph_pins: uart3-ph-pins {
                                pins = "PH0", "PH1";
                                function = "uart3";
                        };
 
-                       uart4_pins_a: uart4@0 {
+                       uart4_pg_pins: uart4-pg-pins {
                                pins = "PG10", "PG11";
                                function = "uart4";
                        };
 
-                       uart4_pins_b: uart4@1 {
+                       uart4_ph_pins: uart4-ph-pins {
                                pins = "PH4", "PH5";
                                function = "uart4";
                        };
 
-                       uart5_pins_a: uart5@0 {
+                       uart5_pi_pins: uart5-pi-pins {
                                pins = "PI10", "PI11";
                                function = "uart5";
                        };
 
-                       uart6_pins_a: uart6@0 {
+                       uart6_pi_pins: uart6-pi-pins {
                                pins = "PI12", "PI13";
                                function = "uart6";
                        };
 
-                       uart7_pins_a: uart7@0 {
+                       uart7_pi_pins: uart7-pi-pins {
                                pins = "PI20", "PI21";
                                function = "uart7";
                        };
                        reg = <0x01c2ac00 0x400>;
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&ccu CLK_APB1_I2C0>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c0_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2b000 0x400>;
                        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&ccu CLK_APB1_I2C1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c1_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2b400 0x400>;
                        interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&ccu CLK_APB1_I2C2>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c2_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x01c2b800 0x400>;
                        interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&ccu CLK_APB1_I2C3>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c3_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
index c16ffcc..a9c123d 100644 (file)
@@ -42,8 +42,6 @@
  *     OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "skeleton.dtsi"
-
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 
 #include <dt-bindings/clock/sun8i-a23-a33-ccu.h>
 
 / {
        interrupt-parent = <&gic>;
+       #address-cells = <1>;
+       #size-cells = <1>;
 
        chosen {
                #address-cells = <1>;
                #size-cells = <1>;
                ranges;
 
-               simplefb_lcd: framebuffer@0 {
+               simplefb_lcd: framebuffer-lcd0 {
                        compatible = "allwinner,simple-framebuffer",
                                     "simple-framebuffer";
                        allwinner,pipeline = "de_be0-lcd0";
                };
        };
 
-       soc@1c00000 {
+       soc {
                compatible = "simple-bus";
                #address-cells = <1>;
                #size-cells = <1>;
                        resets = <&ccu RST_BUS_MMC0>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&mmc0_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #interrupt-cells = <3>;
                        #gpio-cells = <3>;
 
-                       uart0_pins_a: uart0@0 {
-                               pins = "PF2", "PF4";
-                               function = "uart0";
+                       i2c0_pins: i2c0-pins {
+                               pins = "PH2", "PH3";
+                               function = "i2c0";
                        };
 
-                       uart1_pins_a: uart1@0 {
-                               pins = "PG6", "PG7";
-                               function = "uart1";
+                       i2c1_pins: i2c1-pins {
+                               pins = "PH4", "PH5";
+                               function = "i2c1";
                        };
 
-                       uart1_pins_cts_rts_a: uart1-cts-rts@0 {
-                               pins = "PG8", "PG9";
-                               function = "uart1";
+                       i2c2_pins: i2c2-pins {
+                               pins = "PE12", "PE13";
+                               function = "i2c2";
                        };
 
-                       mmc0_pins_a: mmc0@0 {
+                       lcd_rgb666_pins: lcd-rgb666-pins {
+                               pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
+                                      "PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
+                                      "PD18", "PD19", "PD20", "PD21", "PD22", "PD23",
+                                      "PD24", "PD25", "PD26", "PD27";
+                               function = "lcd0";
+                       };
+
+                       mmc0_pins: mmc0-pins {
                                pins = "PF0", "PF1", "PF2",
                                       "PF3", "PF4", "PF5";
                                function = "mmc0";
                                bias-pull-up;
                        };
 
-                       mmc1_pins_a: mmc1@0 {
+                       mmc1_pg_pins: mmc1-pg-pins {
                                pins = "PG0", "PG1", "PG2",
                                       "PG3", "PG4", "PG5";
                                function = "mmc1";
                                bias-pull-up;
                        };
 
-                       mmc2_8bit_pins: mmc2_8bit {
+                       mmc2_8bit_pins: mmc2-8bit-pins {
                                pins = "PC5", "PC6", "PC8",
                                       "PC9", "PC10", "PC11",
                                       "PC12", "PC13", "PC14",
                                bias-pull-up;
                        };
 
-                       pwm0_pins: pwm0 {
+                       pwm0_pin: pwm0-pin {
                                pins = "PH0";
                                function = "pwm0";
                        };
 
-                       i2c0_pins_a: i2c0@0 {
-                               pins = "PH2", "PH3";
-                               function = "i2c0";
-                       };
-
-                       i2c1_pins_a: i2c1@0 {
-                               pins = "PH4", "PH5";
-                               function = "i2c1";
+                       uart0_pf_pins: uart0-pf-pins {
+                               pins = "PF2", "PF4";
+                               function = "uart0";
                        };
 
-                       i2c2_pins_a: i2c2@0 {
-                               pins = "PE12", "PE13";
-                               function = "i2c2";
+                       uart1_pg_pins: uart1-pg-pins {
+                               pins = "PG6", "PG7";
+                               function = "uart1";
                        };
 
-                       lcd_rgb666_pins: lcd-rgb666@0 {
-                               pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
-                                      "PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
-                                      "PD18", "PD19", "PD20", "PD21", "PD22", "PD23",
-                                      "PD24", "PD25", "PD26", "PD27";
-                               function = "lcd0";
+                       uart1_cts_rts_pg_pins: uart1-cts-rts-pg-pins {
+                               pins = "PG8", "PG9";
+                               function = "uart1";
                        };
                };
 
                        interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&ccu CLK_BUS_I2C0>;
                        resets = <&ccu RST_BUS_I2C0>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c0_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&ccu CLK_BUS_I2C1>;
                        resets = <&ccu RST_BUS_I2C1>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c1_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&ccu CLK_BUS_I2C2>;
                        resets = <&ccu RST_BUS_I2C2>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c2_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                };
 
                rtc: rtc@1f00000 {
-                       compatible = "allwinner,sun6i-a31-rtc";
-                       reg = <0x01f00000 0x54>;
+                       compatible = "allwinner,sun8i-a23-rtc";
+                       reg = <0x01f00000 0x400>;
                        interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
-                       clock-output-names = "osc32k";
+                       clock-output-names = "osc32k", "osc32k-out";
                        clocks = <&ext_osc32k>;
                        #clock-cells = <1>;
                };
                        gpio-controller;
                        interrupt-controller;
                        #interrupt-cells = <3>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
                        #gpio-cells = <3>;
 
-                       r_rsb_pins: r_rsb {
+                       r_rsb_pins: r-rsb-pins {
                                pins = "PL0", "PL1";
                                function = "s_rsb";
                                drive-strength = <20>;
                                bias-pull-up;
                        };
 
-                       r_uart_pins_a: r_uart@0 {
+                       r_uart_pins_a: r-uart-pins {
                                pins = "PL2", "PL3";
                                function = "s_uart";
                        };
index 8a93697..53fb1be 100644 (file)
 };
 
 &i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
        status = "okay";
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 };
 
        vref-supply = <&reg_vcc3v0>;
        status = "okay";
 
-       button@190 {
+       button-190 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <190000>;
        };
 
-       button@390 {
+       button-390 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
                voltage = <390000>;
        };
 
-       button@600 {
+       button-600 {
                label = "Home";
                linux,code = <KEY_HOME>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_evb>;
        vmmc-supply = <&reg_vcc3v0>;
        bus-width = <4>;
        cd-gpios = <&pio 1 4 GPIO_ACTIVE_LOW>; /* PB4 */
        status = "okay";
 };
 
-&pio {
-       mmc0_cd_pin_evb: mmc0_cd_pin@0 {
-               pins = "PB4";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-};
-
 /*
  * The RX line has a non-populated resistance. In order to use it, you
  * need to solder R207 on the back of the board in order to close the
index e3c7a25..bcbc9b0 100644 (file)
@@ -63,7 +63,7 @@
 };
 
 &lradc {
-       button@600 {
+       button-600 {
                label = "Back";
                linux,code = <KEY_BACK>;
                channel = <0>;
index 649e313..d5f6aeb 100644 (file)
@@ -54,8 +54,6 @@
 
        wifi_pwrseq: wifi_pwrseq {
                compatible = "mmc-pwrseq-simple";
-               pinctrl-names = "default";
-               pinctrl-0 = <&wifi_pwrseq_pin_mid2407>;
                reset-gpios = <&r_pio 0 6 GPIO_ACTIVE_LOW>; /* PL6 */
                /* The esp8089 needs 200 ms after driving wifi-en high */
                post-power-on-delay-ms = <200>;
@@ -71,7 +69,7 @@
 
 &mmc1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>;
+       pinctrl-0 = <&mmc1_pg_pins>;
        vmmc-supply = <&reg_dldo1>;
        mmc-pwrseq = <&wifi_pwrseq>;
        bus-width = <4>;
        };
 };
 
-&mmc1_pins_a {
-       bias-pull-up;
-};
-
-&r_pio {
-       wifi_pwrseq_pin_mid2407: wifi_pwrseq_pin@0 {
-               pins = "PL6";
-               function = "gpio_out";
-       };
-};
-
 &touchscreen {
        reg = <0x40>;
        compatible = "silead,gsl1680";
index 6b3bcae..9f9232a 100644 (file)
@@ -54,8 +54,6 @@
 
        wifi_pwrseq: wifi_pwrseq {
                compatible = "mmc-pwrseq-simple";
-               pinctrl-names = "default";
-               pinctrl-0 = <&wifi_pwrseq_pin_mid2809>;
                reset-gpios = <&r_pio 0 6 GPIO_ACTIVE_LOW>; /* PL6 */
                /* The esp8089 needs 200 ms after driving wifi-en high */
                post-power-on-delay-ms = <200>;
@@ -64,7 +62,7 @@
 
 &mmc1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>;
+       pinctrl-0 = <&mmc1_pg_pins>;
        vmmc-supply = <&reg_dldo1>;
        mmc-pwrseq = <&wifi_pwrseq>;
        bus-width = <4>;
        };
 };
 
-&mmc1_pins_a {
-       bias-pull-up;
-};
-
-&r_pio {
-       wifi_pwrseq_pin_mid2809: wifi_pwrseq_pin@0 {
-               pins = "PL6";
-               function = "gpio_out";
-       };
-};
-
 &touchscreen {
        reg = <0x40>;
        compatible = "silead,gsl3670";
index 58e6585..d00055e 100644 (file)
 #include "sun8i-a23-a33.dtsi"
 
 / {
-       memory {
-               reg = <0x40000000 0x40000000>;
-       };
-
-       soc@1c00000 {
+       soc {
                codec: codec@1c22c00 {
                        #sound-dai-cells = <0>;
                        compatible = "allwinner,sun8i-a23-codec";
index f711599..2dfdd0a 100644 (file)
@@ -69,7 +69,7 @@
 };
 
 &lradc {
-       button@600 {
+       button-600 {
                label = "Back";
                linux,code = <KEY_BACK>;
                channel = <0>;
@@ -79,7 +79,7 @@
 
 &mmc1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>;
+       pinctrl-0 = <&mmc1_pg_pins>;
        vmmc-supply = <&reg_dldo1>;
        bus-width = <4>;
        non-removable;
index 3e05959..3177630 100644 (file)
        };
 };
 
-&mmc1_pins_a {
-       bias-pull-up;
-};
-
 &mmc1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>;
+       pinctrl-0 = <&mmc1_pg_pins>;
        vmmc-supply = <&reg_dldo1>;
        bus-width = <4>;
        non-removable;
@@ -88,7 +84,7 @@
 };
 
 &r_pio {
-       led_pin_d978: led_pin_d978@0 {
+       led_pin_d978: led-pin {
                pins = "PL5";
                function = "gpio_out";
                drive-strength = <20>;
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_a>,
-                   <&uart1_pins_cts_rts_a>;
+       pinctrl-0 = <&uart1_pg_pins>,
+                   <&uart1_cts_rts_pg_pins>;
        status = "okay";
 };
index a1a1eb6..3d78169 100644 (file)
@@ -82,8 +82,6 @@
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 1 4 GPIO_ACTIVE_LOW>; /* PB4 */
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_b>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 541acb4..f366726 100644 (file)
        vref-supply = <&reg_dcdc1>;
        status = "okay";
 
-       button@200 {
+       button-200 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <191011>;
        };
 
-       button@400 {
+       button-400 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
                voltage = <391304>;
        };
 
-       button@600 {
+       button-600 {
                label = "Home";
                linux,code = <KEY_HOME>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_sina33>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 1 4 GPIO_ACTIVE_LOW>; /* PB4 */
 &mmc2_8bit_pins {
        /* Increase drive strength for DDR modes */
        drive-strength = <40>;
-       /* eMMC is missing pull-ups */
-       bias-pull-up;
 };
 
 &ohci0 {
        status = "okay";
 };
 
-&pio {
-       mmc0_cd_pin_sina33: mmc0_cd_pin@0 {
-               pins = "PB4";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-};
-
 &r_rsb {
        status = "okay";
 
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_b>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index c1cc8f0..626152c 100644 (file)
                        #cooling-cells = <2>;
                };
 
-               cpu@1 {
+               cpu1: cpu@1 {
                        clocks = <&ccu CLK_CPUX>;
                        clock-names = "cpu";
                        operating-points-v2 = <&cpu0_opp_table>;
                        #cooling-cells = <2>;
                };
 
-               cpu@2 {
+               cpu2: cpu@2 {
                        compatible = "arm,cortex-a7";
                        device_type = "cpu";
                        reg = <2>;
                        #cooling-cells = <2>;
                };
 
-               cpu@3 {
+               cpu3: cpu@3 {
                        compatible = "arm,cortex-a7";
                        device_type = "cpu";
                        reg = <3>;
                };
        };
 
-       memory {
-               reg = <0x40000000 0x80000000>;
-       };
-
-       reserved-memory {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               ranges;
-
-               /* Address must be kept in the lower 256 MiBs of DRAM for VE. */
-               cma_pool: cma@4a000000 {
-                       compatible = "shared-dma-pool";
-                       size = <0x6000000>;
-                       alloc-ranges = <0x4a000000 0x6000000>;
-                       reusable;
-                       linux,cma-default;
-               };
-       };
-
        sound: sound {
                compatible = "simple-audio-card";
                simple-audio-card,name = "sun8i-a33-audio";
                simple-audio-card,format = "i2s";
                simple-audio-card,frame-master = <&link_codec>;
                simple-audio-card,bitclock-master = <&link_codec>;
-               simple-audio-card,mclk-fs = <512>;
+               simple-audio-card,mclk-fs = <128>;
                simple-audio-card,aux-devs = <&codec_analog>;
                simple-audio-card,routing =
                        "Left DAC", "AIF1 Slot 0 Left",
                };
        };
 
-       soc@1c00000 {
+       soc {
                tcon0: lcd-controller@1c0c000 {
                        compatible = "allwinner,sun8i-a33-tcon";
                        reg = <0x01c0c000 0x1000>;
                        };
                };
 
-               video-codec@01c0e000 {
+               video-codec@1c0e000 {
                        compatible = "allwinner,sun8i-a33-video-engine";
                        reg = <0x01c0e000 0x1000>;
                        clocks = <&ccu CLK_BUS_VE>, <&ccu CLK_VE>,
                        cooling-maps {
                                map0 {
                                        trip = <&cpu_alert0>;
-                                       cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       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 = <&cpu_alert1>;
-                                       cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       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>;
                                };
 
                                map2 {
        interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
 
-       uart0_pins_b: uart0@1 {
+       uart0_pb_pins: uart0-pb-pins {
                pins = "PB0", "PB1";
                function = "uart0";
        };
index 1537ce1..98e8cea 100644 (file)
        vmmc-supply = <&reg_dcdc1>;
        pinctrl-names = "default";
        pinctrl-0 = <&mmc0_pins>;
+       bus-width = <4>;
        cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
        status = "okay";
 };
index 5617dd3..b099d2f 100644 (file)
                status = "disabled";
        };
 
-       memory {
-               reg = <0x40000000 0x80000000>;
-               device_type = "memory";
-       };
-
        cpu0_opp_table: opp_table0 {
                compatible = "operating-points-v2";
                opp-shared;
index 3ecfabb..d50dbd5 100644 (file)
                compatible = "operating-points-v2";
                opp-shared;
 
-               opp@648000000 {
+               opp-648000000 {
                        opp-hz = /bits/ 64 <648000000>;
                        opp-microvolt = <1040000 1040000 1300000>;
                        clock-latency-ns = <244144>; /* 8 32k periods */
                };
 
-               opp@816000000 {
+               opp-816000000 {
                        opp-hz = /bits/ 64 <816000000>;
                        opp-microvolt = <1100000 1100000 1300000>;
                        clock-latency-ns = <244144>; /* 8 32k periods */
                };
 
-               opp@1008000000 {
+               opp-1008000000 {
                        opp-hz = /bits/ 64 <1008000000>;
                        opp-microvolt = <1200000 1200000 1300000>;
                        clock-latency-ns = <244144>; /* 8 32k periods */
                             <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
        };
 
-       reserved-memory {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               ranges;
-
-               cma_pool: cma@4a000000 {
-                       compatible = "shared-dma-pool";
-                       size = <0x6000000>;
-                       alloc-ranges = <0x4a000000 0x6000000>;
-                       reusable;
-                       linux,cma-default;
-               };
-       };
-
        soc {
                system-control@1c00000 {
                        compatible = "allwinner,sun8i-h3-system-control";
                        };
                };
 
-               video-codec@01c0e000 {
+               video-codec@1c0e000 {
                        compatible = "allwinner,sun8i-h3-video-engine";
                        reg = <0x01c0e000 0x1000>;
                        clocks = <&ccu CLK_BUS_VE>, <&ccu CLK_VE>,
 &pio {
        compatible = "allwinner,sun8i-h3-pinctrl";
 };
+
+&rtc {
+       compatible = "allwinner,sun8i-h3-rtc";
+};
index c676940..719ad76 100644 (file)
@@ -70,7 +70,7 @@
 
 &mmc1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>;
+       pinctrl-0 = <&mmc1_pg_pins>;
        vmmc-supply = <&reg_dldo1>;
        mmc-pwrseq = <&wifi_pwrseq>;
        bus-width = <4>;
        };
 };
 
-&mmc1_pins_a {
-       bias-pull-up;
-};
-
 &r_pio {
-       wifi_pwrseq_pin_q8: wifi_pwrseq_pin@0 {
+       wifi_pwrseq_pin_q8: wifi-pwrseq-pins {
                pins = "PL6", "PL7", "PL11";
                function = "gpio_in";
                bias-pull-up;
index 0dbdb29..83d32a1 100644 (file)
 };
 
 &cpu0_opp_table {
-       opp@1104000000 {
+       opp-1104000000 {
                opp-hz = /bits/ 64 <1104000000>;
                opp-microvolt = <1320000>;
                clock-latency-ns = <244144>; /* 8 32k periods */
        };
 
-       opp@1200000000 {
+       opp-1200000000 {
                opp-hz = /bits/ 64 <1200000000>;
                opp-microvolt = <1320000>;
                clock-latency-ns = <244144>; /* 8 32k periods */
        status = "okay";
 };
 
-/* This is the i2c bus exposed on the DSI connector for the touch panel */
-&i2c0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
-       status = "disabled";
-};
-
-/* This is the i2c bus exposed on the GPIO header */
-&i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
-       status = "disabled";
-};
-
-/* This is the i2c bus exposed on the CSI connector to control the sensor */
-&i2c2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins_a>;
-       status = "disabled";
-};
-
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 1 4 GPIO_ACTIVE_LOW>; /* PB4 */
 
 &mmc1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>;
+       pinctrl-0 = <&mmc1_pg_pins>;
        vmmc-supply = <&reg_aldo1>;
        mmc-pwrseq = <&wifi_pwrseq>;
        bus-width = <4>;
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_b>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
 &uart1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins_a>, <&uart1_pins_cts_rts_a>;
+       pinctrl-0 = <&uart1_pg_pins>, <&uart1_cts_rts_pg_pins>;
        status = "okay";
 };
 
index fc0658c..32cf1ab 100644 (file)
@@ -25,7 +25,7 @@
         * PF can also be used for the SD card so PB is preferred.
         */
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pf_pins>;
        status = "okay";
 };
 
index 472c03b..316998e 100644 (file)
@@ -63,8 +63,6 @@
 
        leds {
                compatible = "gpio-leds";
-               pinctrl-names = "default";
-               pinctrl-0 = <&led_pins_parrot>;
 
                led1 {
                        label = "parrot:led1:usr";
@@ -97,8 +95,6 @@
 };
 
 &i2c1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
        status = "okay";
 
        /*
        vref-supply = <&reg_aldo3>;
        status = "okay";
 
-       button@0 {
+       button-190 {
                label = "V+";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <190000>;
        };
 
-       button@1 {
+       button-390 {
                label = "V-";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_parrot>;
        vmmc-supply = <&reg_dcdc1>;
        cd-gpios = <&pio 3 14 GPIO_ACTIVE_LOW>; /* PD14 */
        bus-width = <4>;
 
 &mmc1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&mmc1_pins_a>, <&wifi_reset_pin_parrot>;
+       pinctrl-0 = <&mmc1_pg_pins>;
        vmmc-supply = <&reg_aldo1>;
        mmc-pwrseq = <&wifi_pwrseq>;
        bus-width = <4>;
 
 &mmc2_8bit_pins {
        drive-strength = <40>;
-       bias-pull-up;
 };
 
 &ohci0 {
 };
 
 &pio {
-       mmc0_cd_pin_parrot: mmc0_cd_pin@0 {
-               pins = "PD14";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       led_pins_parrot: led_pins@0 {
-               pins = "PE16", "PE17";
-               function = "gpio_out";
-       };
-
-       usb0_id_det: usb0_id_detect_pin@0 {
+       usb0_id_det: usb0-id-detect-pin {
                pins = "PD10";
                function = "gpio_in";
                bias-pull-up;
        };
-
-       usb1_vbus_pin_parrot: usb1_vbus_pin@0 {
-               pins = "PD12";
-               function = "gpio_out";
-       };
-};
-
-&r_pio {
-       wifi_reset_pin_parrot: wifi_reset_pin@0 {
-               pins = "PL6";
-               function = "gpio_out";
-       };
 };
 
 &r_rsb {
 };
 
 &reg_usb1_vbus {
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb1_vbus_pin_parrot>;
        gpio = <&pio 3 12 GPIO_ACTIVE_HIGH>; /* PD12 */
        status = "okay";
 };
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_b>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 6f4c9ca..89762db 100644 (file)
@@ -61,6 +61,7 @@
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <24000000>;
+                       clock-accuracy = <50000>;
                        clock-output-names = "osc24M";
                };
 
@@ -68,7 +69,8 @@
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <32768>;
-                       clock-output-names = "osc32k";
+                       clock-accuracy = <20000>;
+                       clock-output-names = "ext-osc32k";
                };
        };
 
                ccu: clock@1c20000 {
                        compatible = "allwinner,sun8i-r40-ccu";
                        reg = <0x01c20000 0x400>;
-                       clocks = <&osc24M>, <&osc32k>;
+                       clocks = <&osc24M>, <&rtc 0>;
                        clock-names = "hosc", "losc";
                        #clock-cells = <1>;
                        #reset-cells = <1>;
                };
 
+               rtc: rtc@1c20400 {
+                       compatible = "allwinner,sun8i-r40-rtc",
+                                    "allwinner,sun8i-h3-rtc";
+                       reg = <0x01c20400 0x400>;
+                       interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
+                       clock-output-names = "osc32k", "osc32k-out";
+                       clocks = <&osc32k>;
+                       #clock-cells = <1>;
+               };
+
                pio: pinctrl@1c20800 {
                        compatible = "allwinner,sun8i-r40-pinctrl";
                        reg = <0x01c20800 0x400>;
                        interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
+                       clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&rtc 0>;
                        clock-names = "apb", "hosc", "losc";
                        gpio-controller;
                        interrupt-controller;
index 5e8a95a..189e479 100644 (file)
@@ -73,8 +73,6 @@
                reg = <0x40>;
                interrupt-parent = <&pio>;
                interrupts = <1 5 IRQ_TYPE_EDGE_FALLING>; /* PB5 */
-               pinctrl-names = "default";
-               pinctrl-0 = <&ts_power_pin>;
                power-gpios = <&pio 7 1 GPIO_ACTIVE_HIGH>; /* PH1 */
                /* Tablet dts must provide reg and compatible */
                status = "disabled";
@@ -82,8 +80,6 @@
 };
 
 &mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>;
        vmmc-supply = <&reg_dcdc1>;
        bus-width = <4>;
        cd-gpios = <&pio 1 4 GPIO_ACTIVE_LOW>; /* PB4 */
 };
 
 &pio {
-       mmc0_cd_pin: mmc0_cd_pin@0 {
-               pins = "PB4";
-               function = "gpio_in";
-               bias-pull-up;
-       };
-
-       ts_power_pin: ts_power_pin@0 {
-               pins = "PH1";
-               function = "gpio_out";
-       };
-
-       usb0_id_detect_pin: usb0_id_detect_pin@0 {
+       usb0_id_detect_pin: usb0-id-detect-pin {
                pins = "PH8";
                function = "gpio_in";
                bias-pull-up;
diff --git a/arch/arm/boot/dts/sun8i-t3-cqa3t-bv3.dts b/arch/arm/boot/dts/sun8i-t3-cqa3t-bv3.dts
new file mode 100644 (file)
index 0000000..6931aaa
--- /dev/null
@@ -0,0 +1,226 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2017 Chen-Yu Tsai <wens@csie.org>
+ * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io>
+ * Copyright (C) 2018 Hao Zhang <hao5781286@gmail.com>
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This file is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     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 "sun8i-r40.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       model = "t3-cqa3t-bv3";
+       compatible = "qihua,t3-cqa3t-bv3", "allwinner,sun8i-t3",
+                    "allwinner,sun8i-r40";
+
+       aliases {
+               serial0 = &uart0;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       connector {
+               compatible = "hdmi-connector";
+               type = "a";
+
+               port {
+                       hdmi_con_in: endpoint {
+                               remote-endpoint = <&hdmi_out_con>;
+                       };
+               };
+       };
+
+       reg_vcc5v0: vcc5v0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc5v0";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&pio 7 23 GPIO_ACTIVE_HIGH>; /* PH23 */
+               enable-active-high;
+       };
+};
+
+&ahci {
+       ahci-supply = <&reg_dldo4>;
+       phy-supply = <&reg_eldo3>;
+       status = "okay";
+};
+
+&de {
+       status = "okay";
+};
+
+&ehci1 {
+       status = "okay";
+};
+
+&ehci2 {
+       status = "okay";
+};
+
+&hdmi {
+       status = "okay";
+};
+
+&hdmi_out {
+       hdmi_out_con: endpoint {
+               remote-endpoint = <&hdmi_con_in>;
+       };
+};
+
+&i2c0 {
+       status = "okay";
+
+       axp22x: pmic@34 {
+               compatible = "x-powers,axp221";
+               reg = <0x34>;
+               interrupt-parent = <&nmi_intc>;
+               interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+       };
+};
+
+#include "axp22x.dtsi"
+
+&mmc0 {
+       vmmc-supply = <&reg_dcdc1>;
+       bus-width = <4>;
+       cd-gpios = <&pio 7 15 GPIO_ACTIVE_LOW>; /* PH15 */
+       status = "okay";
+};
+
+&mmc2 {
+       vmmc-supply = <&reg_dcdc1>;
+       vqmmc-supply = <&reg_dcdc1>;
+       bus-width = <8>;
+       non-removable;
+       status = "okay";
+};
+
+&ohci1 {
+       status = "okay";
+};
+
+&ohci2 {
+       status = "okay";
+};
+
+&reg_aldo2 {
+       regulator-always-on;
+       regulator-min-microvolt = <2500000>;
+       regulator-max-microvolt = <2500000>;
+       regulator-name = "vcc-pa";
+};
+
+&reg_aldo3 {
+       regulator-always-on;
+       regulator-min-microvolt = <2700000>;
+       regulator-max-microvolt = <3300000>;
+       regulator-name = "avcc";
+};
+
+&reg_dcdc1 {
+       regulator-always-on;
+       regulator-min-microvolt = <3000000>;
+       regulator-max-microvolt = <3000000>;
+       regulator-name = "vcc-3v0";
+};
+
+&reg_dcdc2 {
+       regulator-always-on;
+       regulator-min-microvolt = <1000000>;
+       regulator-max-microvolt = <1300000>;
+       regulator-name = "vdd-cpu";
+};
+
+&reg_dcdc3 {
+       regulator-always-on;
+       regulator-min-microvolt = <1000000>;
+       regulator-max-microvolt = <1300000>;
+       regulator-name = "vdd-sys";
+};
+
+&reg_dcdc5 {
+       regulator-always-on;
+       regulator-min-microvolt = <1500000>;
+       regulator-max-microvolt = <1500000>;
+       regulator-name = "vcc-dram";
+};
+
+&reg_dldo1 {
+       regulator-always-on;
+       regulator-min-microvolt = <3300000>;
+       regulator-max-microvolt = <3300000>;
+       regulator-name = "vcc-pg";
+};
+
+&reg_dldo3 {
+       regulator-always-on;
+       regulator-min-microvolt = <3300000>;
+       regulator-max-microvolt = <3300000>;
+       regulator-name = "vcc-dldo3";
+};
+
+&reg_eldo3 {
+       regulator-always-on;
+       regulator-min-microvolt = <2800000>;
+       regulator-max-microvolt = <2800000>;
+       regulator-name = "vcc-pe";
+};
+
+&tcon_tv0 {
+       status = "okay";
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart0_pb_pins>;
+       status = "okay";
+};
+
+&usbphy {
+       usb1_vbus-supply = <&reg_vcc5v0>;
+       usb2_vbus-supply = <&reg_vcc5v0>;
+       status = "okay";
+};
index ad17360..db5cd0b 100644 (file)
        vref-supply = <&reg_vcc3v0>;
        status = "okay";
 
-       button@200 {
+       button-200 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <200000>;
        };
 
-       button@400 {
+       button-400 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
                voltage = <400000>;
        };
 
-       button@600 {
+       button-600 {
                label = "Select";
                linux,code = <KEY_SELECT>;
                channel = <0>;
                voltage = <600000>;
        };
 
-       button@800 {
+       button-800 {
                label = "Start";
                linux,code = <KEY_OK>;
                channel = <0>;
index 387fc2a..99c8cf7 100644 (file)
@@ -78,8 +78,6 @@
 };
 
 &mmc0 {
-       pinctrl-0 = <&mmc0_pins_a>;
-       pinctrl-names = "default";
        broken-cd;
        bus-width = <4>;
        vmmc-supply = <&reg_vcc3v3>;
@@ -87,7 +85,7 @@
 };
 
 &uart0 {
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        pinctrl-names = "default";
        status = "okay";
 };
index 443b083..21e1806 100644 (file)
                        resets = <&ccu RST_BUS_MMC0>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&mmc0_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        interrupt-controller;
                        #interrupt-cells = <3>;
 
-                       i2c0_pins: i2c0 {
+                       i2c0_pins: i2c0-pins {
                                pins = "PB6", "PB7";
                                function = "i2c0";
                        };
 
-                       uart0_pins_a: uart0@0 {
+                       uart0_pb_pins: uart0-pb-pins {
                                pins = "PB8", "PB9";
                                function = "uart0";
                        };
 
-                       mmc0_pins_a: mmc0@0 {
+                       mmc0_pins: mmc0-pins {
                                pins = "PF0", "PF1", "PF2", "PF3",
                                       "PF4", "PF5";
                                function = "mmc0";
                                bias-pull-up;
                        };
 
-                       mmc1_pins: mmc1 {
+                       mmc1_pins: mmc1-pins {
                                pins = "PG0", "PG1", "PG2", "PG3",
                                       "PG4", "PG5";
                                function = "mmc1";
                                bias-pull-up;
                        };
 
-                       spi0_pins: spi0 {
+                       spi0_pins: spi0-pins {
                                pins = "PC0", "PC1", "PC2", "PC3";
                                function = "spi0";
                        };
diff --git a/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts b/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts
new file mode 100644 (file)
index 0000000..a1154e6
--- /dev/null
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR X11)
+/*
+ * Copyright 2018 Icenowy Zheng <icenowy@aosc.io>
+ */
+
+/dts-v1/;
+#include "suniv-f1c100s.dtsi"
+
+/ {
+       model = "Lichee Pi Nano";
+       compatible = "licheepi,licheepi-nano", "allwinner,suniv-f1c100s";
+
+       aliases {
+               serial0 = &uart0;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart0_pe_pins>;
+       status = "okay";
+};
diff --git a/arch/arm/boot/dts/suniv-f1c100s.dtsi b/arch/arm/boot/dts/suniv-f1c100s.dtsi
new file mode 100644 (file)
index 0000000..aff5f90
--- /dev/null
@@ -0,0 +1,147 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR X11)
+/*
+ * Copyright 2018 Icenowy Zheng <icenowy@aosc.io>
+ * Copyright 2018 Mesih Kilinc <mesihkilinc@gmail.com>
+ */
+
+#include <dt-bindings/clock/suniv-ccu-f1c100s.h>
+#include <dt-bindings/reset/suniv-ccu-f1c100s.h>
+
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       interrupt-parent = <&intc>;
+
+       clocks {
+               osc24M: clk-24M {
+                       #clock-cells = <0>;
+                       compatible = "fixed-clock";
+                       clock-frequency = <24000000>;
+                       clock-output-names = "osc24M";
+               };
+
+               osc32k: clk-32k {
+                       #clock-cells = <0>;
+                       compatible = "fixed-clock";
+                       clock-frequency = <32768>;
+                       clock-output-names = "osc32k";
+               };
+       };
+
+       cpus {
+               cpu {
+                       compatible = "arm,arm926ej-s";
+                       device_type = "cpu";
+               };
+       };
+
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               sram-controller@1c00000 {
+                       compatible = "allwinner,suniv-f1c100s-system-control",
+                                    "allwinner,sun4i-a10-system-control";
+                       reg = <0x01c00000 0x30>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+
+                       sram_d: sram@10000 {
+                               compatible = "mmio-sram";
+                               reg = <0x00010000 0x1000>;
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               ranges = <0 0x00010000 0x1000>;
+
+                               otg_sram: sram-section@0 {
+                                       compatible = "allwinner,suniv-f1c100s-sram-d",
+                                                    "allwinner,sun4i-a10-sram-d";
+                                       reg = <0x0000 0x1000>;
+                                       status = "disabled";
+                               };
+                       };
+               };
+
+               ccu: clock@1c20000 {
+                       compatible = "allwinner,suniv-f1c100s-ccu";
+                       reg = <0x01c20000 0x400>;
+                       clocks = <&osc24M>, <&osc32k>;
+                       clock-names = "hosc", "losc";
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+               };
+
+               intc: interrupt-controller@1c20400 {
+                       compatible = "allwinner,suniv-f1c100s-ic";
+                       reg = <0x01c20400 0x400>;
+                       interrupt-controller;
+                       #interrupt-cells = <1>;
+               };
+
+               pio: pinctrl@1c20800 {
+                       compatible = "allwinner,suniv-f1c100s-pinctrl";
+                       reg = <0x01c20800 0x400>;
+                       interrupts = <38>, <39>, <40>;
+                       clocks = <&ccu 37>, <&osc24M>, <&osc32k>;
+                       clock-names = "apb", "hosc", "losc";
+                       gpio-controller;
+                       interrupt-controller;
+                       #interrupt-cells = <3>;
+                       #gpio-cells = <3>;
+
+                       uart0_pe_pins: uart0-pe-pins {
+                               pins = "PE0", "PE1";
+                               function = "uart0";
+                       };
+               };
+
+               timer@1c20c00 {
+                       compatible = "allwinner,suniv-f1c100s-timer";
+                       reg = <0x01c20c00 0x90>;
+                       interrupts = <13>;
+                       clocks = <&osc24M>;
+               };
+
+               wdt: watchdog@1c20ca0 {
+                       compatible = "allwinner,suniv-f1c100s-wdt",
+                                    "allwinner,sun4i-a10-wdt";
+                       reg = <0x01c20ca0 0x20>;
+               };
+
+               uart0: serial@1c25000 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x01c25000 0x400>;
+                       interrupts = <1>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&ccu 38>;
+                       resets = <&ccu 24>;
+                       status = "disabled";
+               };
+
+               uart1: serial@1c25400 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x01c25400 0x400>;
+                       interrupts = <2>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&ccu 39>;
+                       resets = <&ccu 25>;
+                       status = "disabled";
+               };
+
+               uart2: serial@1c25800 {
+                       compatible = "snps,dw-apb-uart";
+                       reg = <0x01c25800 0x400>;
+                       interrupts = <3>;
+                       reg-shift = <2>;
+                       reg-io-width = <4>;
+                       clocks = <&ccu 40>;
+                       resets = <&ccu 26>;
+                       status = "disabled";
+               };
+       };
+};
index 4b1530e..464fe36 100644 (file)
@@ -86,6 +86,7 @@
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <24000000>;
+                       clock-accuracy = <50000>;
                        clock-output-names = "osc24M";
                };
 
                        #clock-cells = <0>;
                        compatible = "fixed-clock";
                        clock-frequency = <32768>;
-                       clock-output-names = "osc32k";
-               };
-
-               iosc: internal-osc-clk {
-                       #clock-cells = <0>;
-                       compatible = "fixed-clock";
-                       clock-frequency = <16000000>;
-                       clock-accuracy = <300000000>;
-                       clock-output-names = "iosc";
+                       clock-accuracy = <50000>;
+                       clock-output-names = "ext_osc32k";
                };
        };
 
                ccu: clock@1c20000 {
                        /* compatible is in per SoC .dtsi file */
                        reg = <0x01c20000 0x400>;
-                       clocks = <&osc24M>, <&osc32k>;
+                       clocks = <&osc24M>, <&rtc 0>;
                        clock-names = "hosc", "losc";
                        #clock-cells = <1>;
                        #reset-cells = <1>;
                        reg = <0x01c20800 0x400>;
                        interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
+                       clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&rtc 0>;
                        clock-names = "apb", "hosc", "losc";
                        gpio-controller;
                        #gpio-cells = <3>;
                };
 
                rtc: rtc@1f00000 {
-                       compatible = "allwinner,sun6i-a31-rtc";
-                       reg = <0x01f00000 0x54>;
+                       /* compatible is in per SoC .dtsi file */
+                       reg = <0x01f00000 0x400>;
                        interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
+                       clock-output-names = "osc32k", "osc32k-out", "iosc";
+                       clocks = <&osc32k>;
+                       #clock-cells = <1>;
                };
 
                r_ccu: clock@1f01400 {
                        compatible = "allwinner,sun8i-h3-r-ccu";
                        reg = <0x01f01400 0x100>;
-                       clocks = <&osc24M>, <&osc32k>, <&iosc>,
-                                <&ccu 9>;
+                       clocks = <&osc24M>, <&rtc 0>, <&rtc 2>, <&ccu 9>;
                        clock-names = "hosc", "losc", "iosc", "pll-periph";
                        #clock-cells = <1>;
                        #reset-cells = <1>;
                        compatible = "allwinner,sun8i-h3-r-pinctrl";
                        reg = <0x01f02c00 0x400>;
                        interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&r_ccu CLK_APB0_PIO>, <&osc24M>, <&osc32k>;
+                       clocks = <&r_ccu CLK_APB0_PIO>, <&osc24M>, <&rtc 0>;
                        clock-names = "apb", "hosc", "losc";
                        gpio-controller;
                        #gpio-cells = <3>;
index ddf4e72..0d002f8 100644 (file)
 
 &uart0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&uart0_pins_a>;
+       pinctrl-0 = <&uart0_pb_pins>;
        status = "okay";
 };
 
index 245d0bc..117198c 100644 (file)
 
 &i2c0 {
        pinctrl-names = "default";
-       pinctrl-0 = <&i2c0_pins_a>;
+       pinctrl-0 = <&i2c0_pins>;
        status = "okay";
 };
 
 &i2c1 {
        pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins_a>;
+       pinctrl-0 = <&i2c1_pins>;
        status = "okay";
 };
 
        vref-supply = <&reg_vcc3v0>;
        status = "okay";
 
-       button@200 {
+       button-200 {
                label = "Volume Up";
                linux,code = <KEY_VOLUMEUP>;
                channel = <0>;
                voltage = <200000>;
        };
 
-       button@400 {
+       button-400 {
                label = "Volume Down";
                linux,code = <KEY_VOLUMEDOWN>;
                channel = <0>;
@@ -77,6 +77,6 @@
 
 &pwm {
        pinctrl-names = "default";
-       pinctrl-0 = <&pwm0_pins>;
+       pinctrl-0 = <&pwm0_pin>;
        status = "okay";
 };
index 183c5ac..b113e47 100644 (file)
                        status = "disabled";
                };
 
+               vic@54340000 {
+                       compatible = "nvidia,tegra124-vic";
+                       reg = <0x0 0x54340000 0x0 0x00040000>;
+                       interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&tegra_car TEGRA124_CLK_VIC03>;
+                       clock-names = "vic";
+                       resets = <&tegra_car 178>;
+                       reset-names = "vic";
+
+                       iommus = <&mc TEGRA_SWGROUP_VIC>;
+               };
+
                sor@54540000 {
                        compatible = "nvidia,tegra124-sor";
                        reg = <0x0 0x54540000 0x0 0x00040000>;
index 2086975..dcad6d6 100644 (file)
        memory-controller@7000f400 {
                compatible = "nvidia,tegra20-emc";
                reg = <0x7000f400 0x200>;
+               interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&tegra_car TEGRA20_CLK_EMC>;
                #address-cells = <1>;
                #size-cells = <0>;
        };
index 4488c8f..a9569d1 100644 (file)
                                bank-width = <4>;
                        };
 
-                       v2m_video_ram: vram@2,00000000 {
-                               compatible = "arm,vexpress-vram";
-                               reg = <2 0x00000000 0x00800000>;
-                       };
-
                        ethernet@2,02000000 {
                                compatible = "smsc,lan9118", "smsc,lan9115";
                                reg = <2 0x02000000 0x10000>;
                                v2m_i2c_dvi: i2c@160000 {
                                        compatible = "arm,versatile-i2c";
                                        reg = <0x160000 0x1000>;
-
                                        #address-cells = <1>;
                                        #size-cells = <0>;
 
                                        dvi-transmitter@39 {
                                                compatible = "sil,sii9022-tpi", "sil,sii9022";
                                                reg = <0x39>;
+
+                                               ports {
+                                                       #address-cells = <1>;
+                                                       #size-cells = <0>;
+
+                                                       port@0 {
+                                                               reg = <0>;
+                                                               dvi_bridge_in: endpoint {
+                                                                       remote-endpoint = <&clcd_pads>;
+                                                               };
+                                                       };
+                                               };
                                        };
 
                                        dvi-transmitter@60 {
                                        interrupts = <14>;
                                        clocks = <&v2m_oscclk1>, <&smbclk>;
                                        clock-names = "clcdclk", "apb_pclk";
-                                       memory-region = <&v2m_video_ram>;
-                                       max-memory-bandwidth = <50350000>; /* 16bpp @ 25.175MHz */
+                                       /* 800x600 16bpp @36MHz works fine */
+                                       max-memory-bandwidth = <54000000>;
+                                       memory-region = <&vram>;
 
                                        port {
-                                               v2m_clcd_pads: endpoint {
-                                                       remote-endpoint = <&v2m_clcd_panel>;
+                                               clcd_pads: endpoint {
+                                                       remote-endpoint = <&dvi_bridge_in>;
                                                        arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
                                                };
                                        };
-
-                                       panel {
-                                               compatible = "panel-dpi";
-
-                                               port {
-                                                       v2m_clcd_panel: endpoint {
-                                                               remote-endpoint = <&v2m_clcd_pads>;
-                                                       };
-                                               };
-
-                                               panel-timing {
-                                                       clock-frequency = <25175000>;
-                                                       hactive = <640>;
-                                                       hback-porch = <40>;
-                                                       hfront-porch = <24>;
-                                                       hsync-len = <96>;
-                                                       vactive = <480>;
-                                                       vback-porch = <32>;
-                                                       vfront-porch = <11>;
-                                                       vsync-len = <2>;
-                                               };
-                                       };
                                };
                        };
 
index 4db42f6..fd42e11 100644 (file)
                                bank-width = <4>;
                        };
 
-                       v2m_video_ram: vram@3,00000000 {
-                               compatible = "arm,vexpress-vram";
-                               reg = <3 0x00000000 0x00800000>;
-                       };
-
                        ethernet@3,02000000 {
                                compatible = "smsc,lan9118", "smsc,lan9115";
                                reg = <3 0x02000000 0x10000>;
                                v2m_i2c_dvi: i2c@16000 {
                                        compatible = "arm,versatile-i2c";
                                        reg = <0x16000 0x1000>;
-
                                        #address-cells = <1>;
                                        #size-cells = <0>;
 
                                        dvi-transmitter@39 {
                                                compatible = "sil,sii9022-tpi", "sil,sii9022";
                                                reg = <0x39>;
+
+                                               ports {
+                                                       #address-cells = <1>;
+                                                       #size-cells = <0>;
+
+                                                       /*
+                                                        * Both the core tile and the motherboard routes their output
+                                                        * pads to this transmitter. The motherboard system controller
+                                                        * can select one of them as input using a mux register in
+                                                        * "arm,vexpress-muxfpga". The Vexpress with the CA9 core tile is
+                                                        * the only platform with this specific set-up.
+                                                        */
+                                                       port@0 {
+                                                               reg = <0>;
+                                                               dvi_bridge_in_ct: endpoint {
+                                                                       remote-endpoint = <&clcd_pads_ct>;
+                                                               };
+                                                       };
+                                                       port@1 {
+                                                               reg = <1>;
+                                                               dvi_bridge_in_mb: endpoint {
+                                                                       remote-endpoint = <&clcd_pads_mb>;
+                                                               };
+                                                       };
+                                               };
                                        };
 
                                        dvi-transmitter@60 {
                                        reg-shift = <2>;
                                };
 
+
                                clcd@1f000 {
                                        compatible = "arm,pl111", "arm,primecell";
                                        reg = <0x1f000 0x1000>;
                                        interrupts = <14>;
                                        clocks = <&v2m_oscclk1>, <&smbclk>;
                                        clock-names = "clcdclk", "apb_pclk";
-                                       memory-region = <&v2m_video_ram>;
-                                       max-memory-bandwidth = <50350000>; /* 16bpp @ 25.175MHz */
+                                       /* 800x600 16bpp @36MHz works fine */
+                                       max-memory-bandwidth = <54000000>;
+                                       memory-region = <&vram>;
 
                                        port {
-                                               v2m_clcd_pads: endpoint {
-                                                       remote-endpoint = <&v2m_clcd_panel>;
+                                               clcd_pads_mb: endpoint {
+                                                       remote-endpoint = <&dvi_bridge_in_mb>;
                                                        arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
                                                };
                                        };
-
-                                       panel {
-                                               compatible = "panel-dpi";
-
-                                               port {
-                                                       v2m_clcd_panel: endpoint {
-                                                               remote-endpoint = <&v2m_clcd_pads>;
-                                                       };
-                                               };
-
-                                               panel-timing {
-                                                       clock-frequency = <25175000>;
-                                                       hactive = <640>;
-                                                       hback-porch = <40>;
-                                                       hfront-porch = <24>;
-                                                       hsync-len = <96>;
-                                                       vactive = <480>;
-                                                       vback-porch = <32>;
-                                                       vfront-porch = <11>;
-                                                       vsync-len = <2>;
-                                               };
-                                       };
                                };
                        };
 
index 3971427..0dc4277 100644 (file)
                reg = <0 0x80000000 0 0x40000000>;
        };
 
+       reserved-memory {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               /* Chipselect 2 is physically at 0x18000000 */
+               vram: vram@18000000 {
+                       /* 8 MB of designated video RAM */
+                       compatible = "shared-dma-pool";
+                       reg = <0 0x18000000 0 0x00800000>;
+                       no-map;
+               };
+       };
+
        hdlcd@2b000000 {
                compatible = "arm,hdlcd";
                reg = <0 0x2b000000 0 0x1000>;
index ac6b90e..a2ccacd 100644 (file)
                reg = <0 0x80000000 0 0x40000000>;
        };
 
+       reserved-memory {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               /* Chipselect 2 is physically at 0x18000000 */
+               vram: vram@18000000 {
+                       /* 8 MB of designated video RAM */
+                       compatible = "shared-dma-pool";
+                       reg = <0 0x18000000 0 0x00800000>;
+                       no-map;
+               };
+       };
+
        wdt@2a490000 {
                compatible = "arm,sp805", "arm,primecell";
                reg = <0 0x2a490000 0 0x1000>;
 
                clocks = <&oscclk6a>;
                clock-names = "apb_pclk";
-               port {
-                       etb_in_port: endpoint {
-                               slave-mode;
-                               remote-endpoint = <&replicator_out_port0>;
+               in-ports {
+                       port {
+                               etb_in_port: endpoint {
+                                       remote-endpoint = <&replicator_out_port0>;
+                               };
                        };
                };
        };
 
                clocks = <&oscclk6a>;
                clock-names = "apb_pclk";
-               port {
-                       tpiu_in_port: endpoint {
-                               slave-mode;
-                               remote-endpoint = <&replicator_out_port1>;
+               in-ports {
+                       port {
+                               tpiu_in_port: endpoint {
+                                       remote-endpoint = <&replicator_out_port1>;
+                               };
                        };
                };
        };
                 */
                compatible = "arm,coresight-replicator";
 
-               ports {
+               out-ports {
                        #address-cells = <1>;
                        #size-cells = <0>;
 
-                       /* replicator output ports */
                        port@0 {
                                reg = <0>;
                                replicator_out_port0: endpoint {
                                        remote-endpoint = <&tpiu_in_port>;
                                };
                        };
+               };
 
-                       /* replicator input port */
-                       port@2 {
-                               reg = <0>;
+               in-ports {
+                       port {
                                replicator_in_port0: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&funnel_out_port0>;
                                };
                        };
 
                clocks = <&oscclk6a>;
                clock-names = "apb_pclk";
-               ports {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-
-                       /* funnel output port */
-                       port@0 {
-                               reg = <0>;
+               out-ports {
+                       port {
                                funnel_out_port0: endpoint {
                                        remote-endpoint =
                                                <&replicator_in_port0>;
                                };
                        };
+               };
 
-                       /* funnel input ports */
-                       port@1 {
+               in-ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
                                reg = <0>;
                                funnel_in_port0: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&ptm0_out_port>;
                                };
                        };
 
-                       port@2 {
+                       port@1 {
                                reg = <1>;
                                funnel_in_port1: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&ptm1_out_port>;
                                };
                        };
 
-                       port@3 {
+                       port@2 {
                                reg = <2>;
                                funnel_in_port2: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&etm0_out_port>;
                                };
                        };
                        port@4 {
                                reg = <4>;
                                funnel_in_port4: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&etm1_out_port>;
                                };
                        };
                        port@5 {
                                reg = <5>;
                                funnel_in_port5: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&etm2_out_port>;
                                };
                        };
                cpu = <&cpu0>;
                clocks = <&oscclk6a>;
                clock-names = "apb_pclk";
-               port {
-                       ptm0_out_port: endpoint {
-                               remote-endpoint = <&funnel_in_port0>;
+               out-ports {
+                       port {
+                               ptm0_out_port: endpoint {
+                                       remote-endpoint = <&funnel_in_port0>;
+                               };
                        };
                };
        };
                cpu = <&cpu1>;
                clocks = <&oscclk6a>;
                clock-names = "apb_pclk";
-               port {
-                       ptm1_out_port: endpoint {
-                               remote-endpoint = <&funnel_in_port1>;
+               out-ports {
+                       port {
+                               ptm1_out_port: endpoint {
+                                       remote-endpoint = <&funnel_in_port1>;
+                               };
                        };
                };
        };
                cpu = <&cpu2>;
                clocks = <&oscclk6a>;
                clock-names = "apb_pclk";
-               port {
-                       etm0_out_port: endpoint {
-                               remote-endpoint = <&funnel_in_port2>;
+               out-ports {
+                       port {
+                               etm0_out_port: endpoint {
+                                       remote-endpoint = <&funnel_in_port2>;
+                               };
                        };
                };
        };
                cpu = <&cpu3>;
                clocks = <&oscclk6a>;
                clock-names = "apb_pclk";
-               port {
-                       etm1_out_port: endpoint {
-                               remote-endpoint = <&funnel_in_port4>;
+               out-ports {
+                       port {
+                               etm1_out_port: endpoint {
+                                       remote-endpoint = <&funnel_in_port4>;
+                               };
                        };
                };
        };
                cpu = <&cpu4>;
                clocks = <&oscclk6a>;
                clock-names = "apb_pclk";
-               port {
-                       etm2_out_port: endpoint {
-                               remote-endpoint = <&funnel_in_port5>;
+               out-ports {
+                       port {
+                               etm2_out_port: endpoint {
+                                       remote-endpoint = <&funnel_in_port5>;
+                               };
                        };
                };
        };
index e5b4a75..d5b47d5 100644 (file)
                reg = <0x80000000 0x40000000>;
        };
 
+       reserved-memory {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               /* Chipselect 2 is physically at 0x18000000 */
+               vram: vram@18000000 {
+                       /* 8 MB of designated video RAM */
+                       compatible = "shared-dma-pool";
+                       reg = <0x18000000 0x00800000>;
+                       no-map;
+               };
+       };
+
        hdlcd@2a110000 {
                compatible = "arm,hdlcd";
                reg = <0x2a110000 0x1000>;
index fc43873..d796efa 100644 (file)
                reg = <0x60000000 0x40000000>;
        };
 
+       reserved-memory {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               /* Chipselect 3 is physically at 0x4c000000 */
+               vram: vram@4c000000 {
+                       /* 8 MB of designated video RAM */
+                       compatible = "shared-dma-pool";
+                       reg = <0x4c000000 0x00800000>;
+                       no-map;
+               };
+       };
+
        clcd@10020000 {
                compatible = "arm,pl111", "arm,primecell";
                reg = <0x10020000 0x1000>;
                interrupts = <0 44 4>;
                clocks = <&oscclk1>, <&oscclk2>;
                clock-names = "clcdclk", "apb_pclk";
-               max-memory-bandwidth = <130000000>; /* 16bpp @ 63.5MHz */
+               /* 1024x768 16bpp @65MHz */
+               max-memory-bandwidth = <95000000>;
 
                port {
-                       clcd_pads: endpoint {
-                               remote-endpoint = <&clcd_panel>;
+                       clcd_pads_ct: endpoint {
+                               remote-endpoint = <&dvi_bridge_in_ct>;
                                arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
                        };
                };
-
-               panel {
-                       compatible = "panel-dpi";
-
-                       port {
-                               clcd_panel: endpoint {
-                                       remote-endpoint = <&clcd_pads>;
-                               };
-                       };
-
-                       panel-timing {
-                               clock-frequency = <63500127>;
-                               hactive = <1024>;
-                               hback-porch = <152>;
-                               hfront-porch = <48>;
-                               hsync-len = <104>;
-                               vactive = <768>;
-                               vback-porch = <23>;
-                               vfront-porch = <3>;
-                               vsync-len = <4>;
-                       };
-               };
        };
 
        memory-controller@100e0000 {
index 607c602..d4bc0e3 100644 (file)
@@ -50,8 +50,8 @@
        compatible = "fsl,vf610m4";
 
        chosen {
-               bootargs = "console=ttyLP2,115200 clk_ignore_unused init=/linuxrc rw";
-               stdout-path = "&uart2";
+               bootargs = "clk_ignore_unused init=/linuxrc rw";
+               stdout-path = "serial2:115200";
        };
 
        memory@8c000000 {
index 1c76168..63af623 100644 (file)
@@ -1,7 +1,6 @@
 CONFIG_SYSVIPC=y
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
-CONFIG_PREEMPT=y
 CONFIG_CGROUPS=y
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_EMBEDDED=y
index 92fd2c8..12659ce 100644 (file)
@@ -10,7 +10,7 @@
 #ifndef _ASM_PGTABLE_2LEVEL_H
 #define _ASM_PGTABLE_2LEVEL_H
 
-#define __PAGETABLE_PMD_FOLDED
+#define __PAGETABLE_PMD_FOLDED 1
 
 /*
  * Hardware-wise, we have a two level page table structure, where the first
index 0341359..81232ec 100644 (file)
@@ -31,7 +31,7 @@ static void __init mmp_init_time(void)
 }
 
 static const char *const mmp2_dt_board_compat[] __initconst = {
-       "mrvl,mmp2-brownstone",
+       "mrvl,mmp2",
        NULL,
 };
 
index 6fe5281..339eb17 100644 (file)
@@ -112,7 +112,7 @@ ENTRY(cpu_v7_hvc_switch_mm)
        hvc     #0
        ldmfd   sp!, {r0 - r3}
        b       cpu_v7_switch_mm
-ENDPROC(cpu_v7_smc_switch_mm)
+ENDPROC(cpu_v7_hvc_switch_mm)
 #endif
 ENTRY(cpu_v7_iciallu_switch_mm)
        mov     r3, #0
index 8d4f97f..38f4a01 100644 (file)
@@ -18,5 +18,6 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h5-orangepi-pc2.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h5-orangepi-prime.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h5-orangepi-zero-plus.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h5-orangepi-zero-plus2.dtb
+dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-orangepi-lite2.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-orangepi-one-plus.dtb
 dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h6-pine-h64.dtb
index e5eae8b..c3a618e 100644 (file)
        interrupt-controller;
        #interrupt-cells = <1>;
 
+       ac_power_supply: ac-power-supply {
+               compatible = "x-powers,axp803-ac-power-supply",
+                            "x-powers,axp813-ac-power-supply";
+               status = "disabled";
+       };
+
+       axp_adc: adc {
+               compatible = "x-powers,axp803-adc", "x-powers,axp813-adc";
+               #io-channel-cells = <1>;
+       };
+
+       axp_gpio: gpio {
+               compatible = "x-powers,axp803-gpio", "x-powers,axp813-gpio";
+               gpio-controller;
+               #gpio-cells = <2>;
+
+               gpio0_ldo: gpio0-ldo {
+                       pins = "GPIO0";
+                       function = "ldo";
+               };
+
+               gpio1_ldo: gpio1-ldo {
+                       pins = "GPIO1";
+                       function = "ldo";
+               };
+       };
+
+       battery_power_supply: battery-power-supply {
+               compatible = "x-powers,axp803-battery-power-supply",
+                            "x-powers,axp813-battery-power-supply";
+               status = "disabled";
+       };
+
        regulators {
                /* Default work frequency for buck regulators */
                x-powers,dcdc-freq = <3000>;
index ef1c904..83e30e0 100644 (file)
        };
 };
 
+&codec {
+       status = "okay";
+};
+
+&codec_analog {
+       hpvcc-supply = <&reg_eldo1>;
+       status = "okay";
+};
+
+&dai {
+       status = "okay";
+};
+
 &de {
        status = "okay";
 };
        vcc-hdmi-supply = <&reg_dldo1>;
 };
 
+&sound {
+       status = "okay";
+       simple-audio-card,widgets = "Headphone", "Headphone Jack",
+                                   "Microphone", "Microphone Jack",
+                                   "Microphone", "Onboard Microphone";
+       simple-audio-card,routing =
+                       "Left DAC", "AIF1 Slot 0 Left",
+                       "Right DAC", "AIF1 Slot 0 Right",
+                       "AIF1 Slot 0 Left ADC", "Left ADC",
+                       "AIF1 Slot 0 Right ADC", "Right ADC",
+                       "Headphone Jack", "HP",
+                       "MIC2", "Microphone Jack",
+                       "Onboard Microphone", "MBIAS",
+                       "MIC1", "Onboard Microphone";
+};
+
 &uart0 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_pb_pins>;
index c077b6c..216f2f5 100644 (file)
        };
 };
 
+&codec {
+       status = "okay";
+};
+
+&codec_analog {
+       hpvcc-supply = <&reg_eldo1>;
+       status = "okay";
+};
+
+&dai {
+       status = "okay";
+};
+
 &de {
        status = "okay";
 };
        vcc-hdmi-supply = <&reg_dldo1>;
 };
 
+&sound {
+       simple-audio-card,aux-devs = <&codec_analog>;
+       simple-audio-card,widgets = "Microphone", "Microphone Jack",
+                                   "Headphone", "Headphone Jack";
+       simple-audio-card,routing =
+                       "Left DAC", "AIF1 Slot 0 Left",
+                       "Right DAC", "AIF1 Slot 0 Right",
+                       "Headphone Jack", "HP",
+                       "AIF1 Slot 0 Left ADC", "Left ADC",
+                       "AIF1 Slot 0 Right ADC", "Right ADC",
+                       "MIC2", "Microphone Jack";
+       status = "okay";
+};
+
 /* On Euler connector */
 &spdif {
        status = "disabled";
index 77fac84..d22736a 100644 (file)
                ethernet0 = &rtl8723cs;
        };
 
+       vdd_bl: regulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "bl-3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&pio 7 6 GPIO_ACTIVE_HIGH>; /* PH6 */
+               enable-active-high;
+       };
+
        backlight: backlight {
                compatible = "pwm-backlight";
                pwms = <&pwm 0 50000 0>;
                brightness-levels = <0 5 10 15 20 30 40 55 70 85 100>;
                default-brightness-level = <2>;
                enable-gpios = <&pio 3 23 GPIO_ACTIVE_HIGH>; /* PD23 */
+               power-supply = <&vdd_bl>;
        };
 
        chosen {
                compatible = "mmc-pwrseq-simple";
                reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
        };
+
+       speaker_amp: audio-amplifier {
+               compatible = "simple-audio-amplifier";
+               /*
+                * TODO This is actually a fixed regulator controlled by
+                * the GPIO line on the PMIC. This should be corrected
+                * once GPIO support is added for this PMIC.
+                */
+               VCC-supply = <&reg_ldo_io0>;
+               enable-gpios = <&pio 7 7 GPIO_ACTIVE_HIGH>; /* PH7 */
+               sound-name-prefix = "Speaker Amp";
+       };
+
+};
+
+&codec {
+       status = "okay";
+};
+
+&codec_analog {
+       hpvcc-supply = <&reg_eldo1>;
+       status = "okay";
+};
+
+&dai {
+       status = "okay";
 };
 
 &ehci0 {
 
 #include "axp803.dtsi"
 
+&ac_power_supply {
+       status = "okay";
+};
+
+&battery_power_supply {
+       status = "okay";
+};
+
 &reg_aldo1 {
        regulator-min-microvolt = <2800000>;
        regulator-max-microvolt = <2800000>;
        vcc-hdmi-supply = <&reg_dldo1>;
 };
 
+&sound {
+       status = "okay";
+       simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>;
+       simple-audio-card,widgets = "Microphone", "Internal Microphone Left",
+                                   "Microphone", "Internal Microphone Right",
+                                   "Headphone", "Headphone Jack",
+                                   "Speaker", "Internal Speaker";
+       simple-audio-card,routing =
+                       "Left DAC", "AIF1 Slot 0 Left",
+                       "Right DAC", "AIF1 Slot 0 Right",
+                       "Speaker Amp INL", "LINEOUT",
+                       "Speaker Amp INR", "LINEOUT",
+                       "Internal Speaker", "Speaker Amp OUTL",
+                       "Internal Speaker", "Speaker Amp OUTR",
+                       "Headphone Jack", "HP",
+                       "AIF1 Slot 0 Left ADC", "Left ADC",
+                       "AIF1 Slot 0 Right ADC", "Right ADC",
+                       "Internal Microphone Left", "MBIAS",
+                       "MIC1", "Internal Microphone Left",
+                       "Internal Microphone Right", "HBIAS",
+                       "MIC2", "Internal Microphone Right";
+};
+
 &uart0 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_pb_pins>;
index 53fcc90..e6fb968 100644 (file)
        };
 };
 
+&ac_power_supply {
+       status = "okay";
+};
+
+&battery_power_supply {
+       status = "okay";
+};
+
+&codec {
+       status = "okay";
+};
+
+&codec_analog {
+       status = "okay";
+};
+
+&dai {
+       status = "okay";
+};
+
 &de {
        status = "okay";
 };
        vcc-hdmi-supply = <&reg_dldo1>;
 };
 
+&sound {
+       simple-audio-card,aux-devs = <&codec_analog>;
+       simple-audio-card,widgets = "Microphone", "Microphone Jack",
+                                   "Headphone", "Headphone Jack";
+       simple-audio-card,routing =
+                       "Left DAC", "AIF1 Slot 0 Left",
+                       "Right DAC", "AIF1 Slot 0 Right",
+                       "Headphone Jack", "HP",
+                       "AIF1 Slot 0 Left ADC", "Left ADC",
+                       "AIF1 Slot 0 Right ADC", "Right ADC",
+                       "MIC2", "Microphone Jack";
+       status = "okay";
+};
+
 &uart0 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_pb_pins>;
index 6723b86..d2651f2 100644 (file)
 
 #include <dt-bindings/gpio/gpio.h>
 
+&codec_analog {
+       hpvcc-supply = <&reg_eldo1>;
+};
+
 &mmc0 {
        pinctrl-names = "default";
        pinctrl-0 = <&mmc0_pins>;
index f3a66f8..837a03d 100644 (file)
                #clock-cells = <0>;
                compatible = "fixed-clock";
                clock-frequency = <32768>;
-               clock-output-names = "osc32k";
-       };
-
-       iosc: internal-osc-clk {
-               #clock-cells = <0>;
-               compatible = "fixed-clock";
-               clock-frequency = <16000000>;
-               clock-accuracy = <300000000>;
-               clock-output-names = "iosc";
+               clock-output-names = "ext-osc32k";
        };
 
        psci {
                method = "smc";
        };
 
+       sound: sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "sun50i-a64-audio";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,frame-master = <&cpudai>;
+               simple-audio-card,bitclock-master = <&cpudai>;
+               simple-audio-card,mclk-fs = <128>;
+               simple-audio-card,aux-devs = <&codec_analog>;
+               simple-audio-card,routing =
+                               "Left DAC", "AIF1 Slot 0 Left",
+                               "Right DAC", "AIF1 Slot 0 Right",
+                               "AIF1 Slot 0 Left ADC", "Left ADC",
+                               "AIF1 Slot 0 Right ADC", "Right ADC";
+               status = "disabled";
+
+               cpudai: simple-audio-card,cpu {
+                       sound-dai = <&dai>;
+               };
+
+               link_codec: simple-audio-card,codec {
+                       sound-dai = <&codec>;
+               };
+       };
+
        sound_spdif {
                compatible = "simple-audio-card";
                simple-audio-card,name = "On-board SPDIF";
                                        reg = <0x0000 0x28000>;
                                };
                        };
+
+                       sram_c1: sram@1d00000 {
+                               compatible = "mmio-sram";
+                               reg = <0x01d00000 0x40000>;
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               ranges = <0 0x01d00000 0x40000>;
+
+                               ve_sram: sram-section@0 {
+                                       compatible = "allwinner,sun50i-a64-sram-c1",
+                                                    "allwinner,sun4i-a10-sram-c1";
+                                       reg = <0x000000 0x40000>;
+                               };
+                       };
                };
 
                dma: dma-controller@1c02000 {
                        };
                };
 
+               video-codec@1c0e000 {
+                       compatible = "allwinner,sun50i-h5-video-engine";
+                       reg = <0x01c0e000 0x1000>;
+                       clocks = <&ccu CLK_BUS_VE>, <&ccu CLK_VE>,
+                                <&ccu CLK_DRAM_VE>;
+                       clock-names = "ahb", "mod", "ram";
+                       resets = <&ccu RST_BUS_VE>;
+                       interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
+                       allwinner,sram = <&ve_sram 1>;
+               };
+
                mmc0: mmc@1c0f000 {
                        compatible = "allwinner,sun50i-a64-mmc";
                        reg = <0x01c0f000 0x1000>;
                ccu: clock@1c20000 {
                        compatible = "allwinner,sun50i-a64-ccu";
                        reg = <0x01c20000 0x400>;
-                       clocks = <&osc24M>, <&osc32k>;
+                       clocks = <&osc24M>, <&rtc 0>;
                        clock-names = "hosc", "losc";
                        #clock-cells = <1>;
                        #reset-cells = <1>;
                        status = "disabled";
                };
 
+               dai: dai@1c22c00 {
+                       #sound-dai-cells = <0>;
+                       compatible = "allwinner,sun50i-a64-codec-i2s";
+                       reg = <0x01c22c00 0x200>;
+                       interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_AC_DIG>;
+                       clock-names = "apb", "mod";
+                       resets = <&ccu RST_BUS_CODEC>;
+                       reset-names = "rst";
+                       dmas = <&dma 15>, <&dma 15>;
+                       dma-names = "rx", "tx";
+                       status = "disabled";
+               };
+
+               codec: codec@1c22e00 {
+                       #sound-dai-cells = <0>;
+                       compatible = "allwinner,sun8i-a33-codec";
+                       reg = <0x01c22e00 0x600>;
+                       interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_AC_DIG>;
+                       clock-names = "bus", "mod";
+                       status = "disabled";
+               };
+
                uart0: serial@1c28000 {
                        compatible = "snps,dw-apb-uart";
                        reg = <0x01c28000 0x400>;
                        };
                };
 
+               mali: gpu@1c40000 {
+                       compatible = "allwinner,sun50i-a64-mali", "arm,mali-400";
+                       reg = <0x01c40000 0x10000>;
+                       interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "gp",
+                                         "gpmmu",
+                                         "pp0",
+                                         "ppmmu0",
+                                         "pp1",
+                                         "ppmmu1",
+                                         "pmu";
+                       clocks = <&ccu CLK_BUS_GPU>, <&ccu CLK_GPU>;
+                       clock-names = "bus", "core";
+                       resets = <&ccu RST_BUS_GPU>;
+               };
+
                gic: interrupt-controller@1c81000 {
                        compatible = "arm,gic-400";
                        reg = <0x01c81000 0x1000>,
                };
 
                rtc: rtc@1f00000 {
-                       compatible = "allwinner,sun6i-a31-rtc";
-                       reg = <0x01f00000 0x54>;
+                       compatible = "allwinner,sun50i-a64-rtc",
+                                    "allwinner,sun8i-h3-rtc";
+                       reg = <0x01f00000 0x400>;
                        interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
-                       clock-output-names = "rtc-osc32k", "rtc-osc32k-out";
+                       clock-output-names = "osc32k", "osc32k-out", "iosc";
                        clocks = <&osc32k>;
                        #clock-cells = <1>;
                };
                r_ccu: clock@1f01400 {
                        compatible = "allwinner,sun50i-a64-r-ccu";
                        reg = <0x01f01400 0x100>;
-                       clocks = <&osc24M>, <&osc32k>, <&iosc>,
-                                <&ccu 11>;
+                       clocks = <&osc24M>, <&rtc 0>, <&rtc 2>, <&ccu 11>;
                        clock-names = "hosc", "losc", "iosc", "pll-periph";
                        #clock-cells = <1>;
                        #reset-cells = <1>;
                };
 
+               codec_analog: codec-analog@1f015c0 {
+                       compatible = "allwinner,sun50i-a64-codec-analog";
+                       reg = <0x01f015c0 0x4>;
+                       status = "disabled";
+               };
+
                r_i2c: i2c@1f02400 {
                        compatible = "allwinner,sun50i-a64-i2c",
                                     "allwinner,sun6i-a31-i2c";
index b41dc1a..fe731b3 100644 (file)
                     <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
        compatible = "allwinner,sun50i-h5-pinctrl";
 };
+
+&rtc {
+       compatible = "allwinner,sun50i-h5-rtc";
+};
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-lite2.dts b/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi-lite2.dts
new file mode 100644 (file)
index 0000000..e098a24
--- /dev/null
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: (GPL-2.0+ or MIT)
+/*
+ * Copyright (C) 2018 Jagan Teki <jagan@openedev.com>
+ */
+
+#include "sun50i-h6-orangepi.dtsi"
+
+/ {
+       model = "OrangePi Lite2";
+       compatible = "xunlong,orangepi-lite2", "allwinner,sun50i-h6";
+};
index 0612c19..12e1756 100644 (file)
@@ -4,147 +4,9 @@
  * Author: Jagan Teki <jagan@amarulasolutions.com>
  */
 
-/dts-v1/;
-
-#include "sun50i-h6.dtsi"
-
-#include <dt-bindings/gpio/gpio.h>
+#include "sun50i-h6-orangepi.dtsi"
 
 / {
        model = "OrangePi One Plus";
        compatible = "xunlong,orangepi-one-plus", "allwinner,sun50i-h6";
-
-       aliases {
-               serial0 = &uart0;
-       };
-
-       chosen {
-               stdout-path = "serial0:115200n8";
-       };
-};
-
-&mmc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&mmc0_pins>;
-       vmmc-supply = <&reg_cldo1>;
-       cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
-       bus-width = <4>;
-       status = "okay";
-};
-
-&r_i2c {
-       status = "okay";
-
-       axp805: pmic@36 {
-               compatible = "x-powers,axp805", "x-powers,axp806";
-               reg = <0x36>;
-               interrupt-parent = <&r_intc>;
-               interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
-               interrupt-controller;
-               #interrupt-cells = <1>;
-               x-powers,self-working-mode;
-
-               regulators {
-                       reg_aldo1: aldo1 {
-                               regulator-always-on;
-                               regulator-min-microvolt = <3300000>;
-                               regulator-max-microvolt = <3300000>;
-                               regulator-name = "vcc-pl";
-                       };
-
-                       reg_aldo2: aldo2 {
-                               regulator-min-microvolt = <3300000>;
-                               regulator-max-microvolt = <3300000>;
-                               regulator-name = "vcc-ac200";
-                       };
-
-                       reg_aldo3: aldo3 {
-                               regulator-always-on;
-                               regulator-min-microvolt = <3300000>;
-                               regulator-max-microvolt = <3300000>;
-                               regulator-name = "vcc25-dram";
-                       };
-
-                       reg_bldo1: bldo1 {
-                               regulator-always-on;
-                               regulator-min-microvolt = <1800000>;
-                               regulator-max-microvolt = <1800000>;
-                               regulator-name = "vcc-bias-pll";
-                       };
-
-                       reg_bldo2: bldo2 {
-                               regulator-always-on;
-                               regulator-min-microvolt = <1800000>;
-                               regulator-max-microvolt = <1800000>;
-                               regulator-name = "vcc-efuse-pcie-hdmi-io";
-                       };
-
-                       reg_bldo3: bldo3 {
-                               regulator-always-on;
-                               regulator-min-microvolt = <1800000>;
-                               regulator-max-microvolt = <1800000>;
-                               regulator-name = "vcc-dcxoio";
-                       };
-
-                       bldo4 {
-                               /* unused */
-                       };
-
-                       reg_cldo1: cldo1 {
-                               regulator-always-on;
-                               regulator-min-microvolt = <3300000>;
-                               regulator-max-microvolt = <3300000>;
-                               regulator-name = "vcc-3v3";
-                       };
-
-                       reg_cldo2: cldo2 {
-                               regulator-min-microvolt = <3300000>;
-                               regulator-max-microvolt = <3300000>;
-                               regulator-name = "vcc-wifi-1";
-                       };
-
-                       reg_cldo3: cldo3 {
-                               regulator-min-microvolt = <3300000>;
-                               regulator-max-microvolt = <3300000>;
-                               regulator-name = "vcc-wifi-2";
-                       };
-
-                       reg_dcdca: dcdca {
-                               regulator-always-on;
-                               regulator-min-microvolt = <810000>;
-                               regulator-max-microvolt = <1080000>;
-                               regulator-name = "vdd-cpu";
-                       };
-
-                       reg_dcdcc: dcdcc {
-                               regulator-min-microvolt = <810000>;
-                               regulator-max-microvolt = <1080000>;
-                               regulator-name = "vdd-gpu";
-                       };
-
-                       reg_dcdcd: dcdcd {
-                               regulator-always-on;
-                               regulator-min-microvolt = <960000>;
-                               regulator-max-microvolt = <960000>;
-                               regulator-name = "vdd-sys";
-                       };
-
-                       reg_dcdce: dcdce {
-                               regulator-always-on;
-                               regulator-min-microvolt = <1200000>;
-                               regulator-max-microvolt = <1200000>;
-                               regulator-name = "vcc-dram";
-                       };
-
-                       sw {
-                               /* unused */
-                       };
-               };
-       };
-};
-
-&uart0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&uart0_ph_pins>;
-       status = "okay";
 };
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h6-orangepi.dtsi
new file mode 100644 (file)
index 0000000..b2526da
--- /dev/null
@@ -0,0 +1,210 @@
+// SPDX-License-Identifier: (GPL-2.0+ or MIT)
+/*
+ * Copyright (C) 2018 Amarula Solutions
+ * Author: Jagan Teki <jagan@amarulasolutions.com>
+ */
+
+/dts-v1/;
+
+#include "sun50i-h6.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       model = "OrangePi One Plus";
+       compatible = "xunlong,orangepi-one-plus", "allwinner,sun50i-h6";
+
+       aliases {
+               serial0 = &uart0;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               power {
+                       label = "orangepi:red:power";
+                       gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
+                       default-state = "on";
+               };
+
+               status {
+                       label = "orangepi:green:status";
+                       gpios = <&r_pio 0 7 GPIO_ACTIVE_HIGH>; /* PL7 */
+               };
+       };
+
+       reg_vcc5v: vcc5v {
+               /* board wide 5V supply directly from the DC jack */
+               compatible = "regulator-fixed";
+               regulator-name = "vcc-5v";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
+};
+
+&ehci0 {
+       status = "okay";
+};
+
+&ehci3 {
+       status = "okay";
+};
+
+&mmc0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc0_pins>;
+       vmmc-supply = <&reg_cldo1>;
+       cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
+       bus-width = <4>;
+       status = "okay";
+};
+
+&ohci0 {
+       status = "okay";
+};
+
+&ohci3 {
+       status = "okay";
+};
+
+&r_i2c {
+       status = "okay";
+
+       axp805: pmic@36 {
+               compatible = "x-powers,axp805", "x-powers,axp806";
+               reg = <0x36>;
+               interrupt-parent = <&r_intc>;
+               interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               x-powers,self-working-mode;
+               vina-supply = <&reg_vcc5v>;
+               vinb-supply = <&reg_vcc5v>;
+               vinc-supply = <&reg_vcc5v>;
+               vind-supply = <&reg_vcc5v>;
+               vine-supply = <&reg_vcc5v>;
+               aldoin-supply = <&reg_vcc5v>;
+               bldoin-supply = <&reg_vcc5v>;
+               cldoin-supply = <&reg_vcc5v>;
+
+               regulators {
+                       reg_aldo1: aldo1 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc-pl";
+                       };
+
+                       reg_aldo2: aldo2 {
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc-ac200";
+                       };
+
+                       reg_aldo3: aldo3 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc25-dram";
+                       };
+
+                       reg_bldo1: bldo1 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc-bias-pll";
+                       };
+
+                       reg_bldo2: bldo2 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc-efuse-pcie-hdmi-io";
+                       };
+
+                       reg_bldo3: bldo3 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-name = "vcc-dcxoio";
+                       };
+
+                       bldo4 {
+                               /* unused */
+                       };
+
+                       reg_cldo1: cldo1 {
+                               regulator-always-on;
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc-3v3";
+                       };
+
+                       reg_cldo2: cldo2 {
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc-wifi-1";
+                       };
+
+                       reg_cldo3: cldo3 {
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-name = "vcc-wifi-2";
+                       };
+
+                       reg_dcdca: dcdca {
+                               regulator-always-on;
+                               regulator-min-microvolt = <810000>;
+                               regulator-max-microvolt = <1080000>;
+                               regulator-name = "vdd-cpu";
+                       };
+
+                       reg_dcdcc: dcdcc {
+                               regulator-min-microvolt = <810000>;
+                               regulator-max-microvolt = <1080000>;
+                               regulator-name = "vdd-gpu";
+                       };
+
+                       reg_dcdcd: dcdcd {
+                               regulator-always-on;
+                               regulator-min-microvolt = <960000>;
+                               regulator-max-microvolt = <960000>;
+                               regulator-name = "vdd-sys";
+                       };
+
+                       reg_dcdce: dcdce {
+                               regulator-always-on;
+                               regulator-min-microvolt = <1200000>;
+                               regulator-max-microvolt = <1200000>;
+                               regulator-name = "vcc-dram";
+                       };
+
+                       sw {
+                               /* unused */
+                       };
+               };
+       };
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart0_ph_pins>;
+       status = "okay";
+};
+
+&usb2otg {
+       dr_mode = "otg";
+       status = "okay";
+};
+
+&usb2phy {
+       usb0_id_det-gpios = <&pio 2 6 GPIO_ACTIVE_HIGH>; /* PC6 */
+       usb0_vbus-supply = <&reg_vcc5v>;
+       usb3_vbus-supply = <&reg_vcc5v>;
+       status = "okay";
+};
index 48daec7..bdb8470 100644 (file)
@@ -14,6 +14,7 @@
        compatible = "pine64,pine-h64", "allwinner,sun50i-h6";
 
        aliases {
+               ethernet0 = &emac;
                serial0 = &uart0;
        };
 
                stdout-path = "serial0:115200n8";
        };
 
+       connector {
+               compatible = "hdmi-connector";
+               type = "a";
+
+               port {
+                       hdmi_con_in: endpoint {
+                               remote-endpoint = <&hdmi_out_con>;
+                       };
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
 
                        gpios = <&r_pio 0 7 GPIO_ACTIVE_HIGH>; /* PL7 */
                };
        };
+
+       reg_usb_vbus: vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb-vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               startup-delay-us = <100000>;
+               gpio = <&r_pio 0 5 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+};
+
+&emac {
+       pinctrl-names = "default";
+       pinctrl-0 = <&ext_rgmii_pins>;
+       phy-mode = "rgmii";
+       phy-handle = <&ext_rgmii_phy>;
+       phy-supply = <&reg_aldo2>;
+       allwinner,rx-delay-ps = <200>;
+       allwinner,tx-delay-ps = <200>;
+       status = "okay";
+};
+
+&mdio {
+       ext_rgmii_phy: ethernet-phy@1 {
+               compatible = "ethernet-phy-ieee802.3-c22";
+               reg = <1>;
+       };
+};
+
+&de {
+       status = "okay";
+};
+
+&hdmi {
+       status = "okay";
+};
+
+&hdmi_out {
+       hdmi_out_con: endpoint {
+               remote-endpoint = <&hdmi_con_in>;
+       };
+};
+
+&ehci0 {
+       status = "okay";
+};
+
+&ehci3 {
+       status = "okay";
 };
 
 &mmc0 {
        status = "okay";
 };
 
+&ohci0 {
+       status = "okay";
+};
+
+&ohci3 {
+       status = "okay";
+};
+
 &r_i2c {
        status = "okay";
 
                                regulator-min-microvolt = <3300000>;
                                regulator-max-microvolt = <3300000>;
                                regulator-name = "vcc-ac200";
+                               regulator-enable-ramp-delay = <100000>;
                        };
 
                        reg_aldo3: aldo3 {
        pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
+
+&usb2otg {
+       dr_mode = "host";
+       status = "okay";
+};
+
+&usb2phy {
+       usb0_vbus-supply = <&reg_usb_vbus>;
+       usb3_vbus-supply = <&reg_usb_vbus>;
+       status = "okay";
+};
index 040828d..d93a7ad 100644 (file)
@@ -6,8 +6,11 @@
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/clock/sun50i-h6-ccu.h>
 #include <dt-bindings/clock/sun50i-h6-r-ccu.h>
+#include <dt-bindings/clock/sun8i-de2.h>
+#include <dt-bindings/clock/sun8i-tcon-top.h>
 #include <dt-bindings/reset/sun50i-h6-ccu.h>
 #include <dt-bindings/reset/sun50i-h6-r-ccu.h>
+#include <dt-bindings/reset/sun8i-de2.h>
 
 / {
        interrupt-parent = <&gic>;
                };
        };
 
+       de: display-engine {
+               compatible = "allwinner,sun50i-h6-display-engine";
+               allwinner,pipelines = <&mixer0>;
+               status = "disabled";
+       };
+
        iosc: internal-osc-clk {
                #clock-cells = <0>;
                compatible = "fixed-clock";
                #size-cells = <1>;
                ranges;
 
+               display-engine@1000000 {
+                       compatible = "allwinner,sun50i-h6-de3",
+                                    "allwinner,sun50i-a64-de2";
+                       reg = <0x1000000 0x400000>;
+                       allwinner,sram = <&de2_sram 1>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0 0x1000000 0x400000>;
+
+                       display_clocks: clock@0 {
+                               compatible = "allwinner,sun50i-h6-de3-clk";
+                               reg = <0x0 0x10000>;
+                               clocks = <&ccu CLK_DE>,
+                                        <&ccu CLK_BUS_DE>;
+                               clock-names = "mod",
+                                             "bus";
+                               resets = <&ccu RST_BUS_DE>;
+                               #clock-cells = <1>;
+                               #reset-cells = <1>;
+                       };
+
+                       mixer0: mixer@100000 {
+                               compatible = "allwinner,sun50i-h6-de3-mixer-0";
+                               reg = <0x100000 0x100000>;
+                               clocks = <&display_clocks CLK_BUS_MIXER0>,
+                                        <&display_clocks CLK_MIXER0>;
+                               clock-names = "bus",
+                                             "mod";
+                               resets = <&display_clocks RST_MIXER0>;
+
+                               ports {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       mixer0_out: port@1 {
+                                               reg = <1>;
+
+                                               mixer0_out_tcon_top_mixer0: endpoint {
+                                                       remote-endpoint = <&tcon_top_mixer0_in_mixer0>;
+                                               };
+                                       };
+                               };
+                       };
+               };
+
                syscon: syscon@3000000 {
                        compatible = "allwinner,sun50i-h6-system-control",
                                     "allwinner,sun50i-a64-system-control";
                        interrupt-controller;
                        #interrupt-cells = <3>;
 
+                       ext_rgmii_pins: rgmii_pins {
+                               pins = "PD0", "PD1", "PD2", "PD3", "PD4",
+                                      "PD5", "PD7", "PD8", "PD9", "PD10",
+                                      "PD11", "PD12", "PD13", "PD19", "PD20";
+                               function = "emac";
+                               drive-strength = <40>;
+                       };
+
+                       hdmi_pins: hdmi-pins {
+                               pins = "PH8", "PH9", "PH10";
+                               function = "hdmi";
+                       };
+
                        mmc0_pins: mmc0-pins {
                                pins = "PF0", "PF1", "PF2", "PF3",
                                       "PF4", "PF5";
                        status = "disabled";
                };
 
+               emac: ethernet@5020000 {
+                       compatible = "allwinner,sun50i-h6-emac",
+                                    "allwinner,sun50i-a64-emac";
+                       syscon = <&syscon>;
+                       reg = <0x05020000 0x10000>;
+                       interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "macirq";
+                       resets = <&ccu RST_BUS_EMAC>;
+                       reset-names = "stmmaceth";
+                       clocks = <&ccu CLK_BUS_EMAC>;
+                       clock-names = "stmmaceth";
+                       status = "disabled";
+
+                       mdio: mdio {
+                               compatible = "snps,dwmac-mdio";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                       };
+               };
+
+               usb2otg: usb@5100000 {
+                       compatible = "allwinner,sun50i-h6-musb",
+                                    "allwinner,sun8i-a33-musb";
+                       reg = <0x05100000 0x0400>;
+                       clocks = <&ccu CLK_BUS_OTG>;
+                       resets = <&ccu RST_BUS_OTG>;
+                       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "mc";
+                       phys = <&usb2phy 0>;
+                       phy-names = "usb";
+                       extcon = <&usb2phy 0>;
+                       status = "disabled";
+               };
+
+               usb2phy: phy@5100400 {
+                       compatible = "allwinner,sun50i-h6-usb-phy";
+                       reg = <0x05100400 0x24>,
+                             <0x05101800 0x4>,
+                             <0x05311800 0x4>;
+                       reg-names = "phy_ctrl",
+                                   "pmu0",
+                                   "pmu3";
+                       clocks = <&ccu CLK_USB_PHY0>,
+                                <&ccu CLK_USB_PHY3>;
+                       clock-names = "usb0_phy",
+                                     "usb3_phy";
+                       resets = <&ccu RST_USB_PHY0>,
+                                <&ccu RST_USB_PHY3>;
+                       reset-names = "usb0_reset",
+                                     "usb3_reset";
+                       status = "disabled";
+                       #phy-cells = <1>;
+               };
+
+               ehci0: usb@5101000 {
+                       compatible = "allwinner,sun50i-h6-ehci", "generic-ehci";
+                       reg = <0x05101000 0x100>;
+                       interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_OHCI0>,
+                                <&ccu CLK_BUS_EHCI0>,
+                                <&ccu CLK_USB_OHCI0>;
+                       resets = <&ccu RST_BUS_OHCI0>,
+                                <&ccu RST_BUS_EHCI0>;
+                       status = "disabled";
+               };
+
+               ohci0: usb@5101400 {
+                       compatible = "allwinner,sun50i-h6-ohci", "generic-ohci";
+                       reg = <0x05101400 0x100>;
+                       interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_OHCI0>,
+                                <&ccu CLK_USB_OHCI0>;
+                       resets = <&ccu RST_BUS_OHCI0>;
+                       status = "disabled";
+               };
+
+               ehci3: usb@5311000 {
+                       compatible = "allwinner,sun50i-h6-ehci", "generic-ehci";
+                       reg = <0x05311000 0x100>;
+                       interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_OHCI3>,
+                                <&ccu CLK_BUS_EHCI3>,
+                                <&ccu CLK_USB_OHCI3>;
+                       resets = <&ccu RST_BUS_OHCI3>,
+                                <&ccu RST_BUS_EHCI3>;
+                       phys = <&usb2phy 3>;
+                       phy-names = "usb";
+                       status = "disabled";
+               };
+
+               ohci3: usb@5311400 {
+                       compatible = "allwinner,sun50i-h6-ohci", "generic-ohci";
+                       reg = <0x05311400 0x100>;
+                       interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_OHCI3>,
+                                <&ccu CLK_USB_OHCI3>;
+                       resets = <&ccu RST_BUS_OHCI3>;
+                       phys = <&usb2phy 3>;
+                       phy-names = "usb";
+                       status = "disabled";
+               };
+
+               hdmi: hdmi@6000000 {
+                       compatible = "allwinner,sun50i-h6-dw-hdmi";
+                       reg = <0x06000000 0x10000>;
+                       reg-io-width = <1>;
+                       interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>,
+                                <&ccu CLK_HDMI>, <&ccu CLK_HDMI_CEC>,
+                                <&ccu CLK_HDCP>, <&ccu CLK_BUS_HDCP>;
+                       clock-names = "iahb", "isfr", "tmds", "cec", "hdcp",
+                                     "hdcp-bus";
+                       resets = <&ccu RST_BUS_HDMI_SUB>, <&ccu RST_BUS_HDCP>;
+                       reset-names = "ctrl", "hdcp";
+                       phys = <&hdmi_phy>;
+                       phy-names = "hdmi-phy";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&hdmi_pins>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               hdmi_in: port@0 {
+                                       reg = <0>;
+
+                                       hdmi_in_tcon_top: endpoint {
+                                               remote-endpoint = <&tcon_top_hdmi_out_hdmi>;
+                                       };
+                               };
+
+                               hdmi_out: port@1 {
+                                       reg = <1>;
+                               };
+                       };
+               };
+
+               hdmi_phy: hdmi-phy@6010000 {
+                       compatible = "allwinner,sun50i-h6-hdmi-phy";
+                       reg = <0x06010000 0x10000>;
+                       clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>;
+                       clock-names = "bus", "mod";
+                       resets = <&ccu RST_BUS_HDMI>;
+                       reset-names = "phy";
+                       #phy-cells = <0>;
+               };
+
+               tcon_top: tcon-top@6510000 {
+                       compatible = "allwinner,sun50i-h6-tcon-top";
+                       reg = <0x06510000 0x1000>;
+                       clocks = <&ccu CLK_BUS_TCON_TOP>,
+                                <&ccu CLK_TCON_TV0>;
+                       clock-names = "bus",
+                                     "tcon-tv0";
+                       clock-output-names = "tcon-top-tv0";
+                       resets = <&ccu RST_BUS_TCON_TOP>;
+                       reset-names = "rst";
+                       #clock-cells = <1>;
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               tcon_top_mixer0_in: port@0 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <0>;
+
+                                       tcon_top_mixer0_in_mixer0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&mixer0_out_tcon_top_mixer0>;
+                                       };
+                               };
+
+                               tcon_top_mixer0_out: port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <1>;
+
+                                       tcon_top_mixer0_out_tcon_tv: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&tcon_tv_in_tcon_top_mixer0>;
+                                       };
+                               };
+
+                               tcon_top_hdmi_in: port@4 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <4>;
+
+                                       tcon_top_hdmi_in_tcon_tv: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&tcon_tv_out_tcon_top>;
+                                       };
+                               };
+
+                               tcon_top_hdmi_out: port@5 {
+                                       reg = <5>;
+
+                                       tcon_top_hdmi_out_hdmi: endpoint {
+                                               remote-endpoint = <&hdmi_in_tcon_top>;
+                                       };
+                               };
+                       };
+               };
+
+               tcon_tv: lcd-controller@6515000 {
+                       compatible = "allwinner,sun50i-h6-tcon-tv",
+                                    "allwinner,sun8i-r40-tcon-tv";
+                       reg = <0x06515000 0x1000>;
+                       interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_TCON_TV0>,
+                                <&tcon_top CLK_TCON_TOP_TV0>;
+                       clock-names = "ahb",
+                                     "tcon-ch1";
+                       resets = <&ccu RST_BUS_TCON_TV0>;
+                       reset-names = "lcd";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               tcon_tv_in: port@0 {
+                                       reg = <0>;
+
+                                       tcon_tv_in_tcon_top_mixer0: endpoint {
+                                               remote-endpoint = <&tcon_top_mixer0_out_tcon_tv>;
+                                       };
+                               };
+
+                               tcon_tv_out: port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <1>;
+
+                                       tcon_tv_out_tcon_top: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&tcon_top_hdmi_in_tcon_tv>;
+                                       };
+                               };
+                       };
+               };
+
                r_ccu: clock@7010000 {
                        compatible = "allwinner,sun50i-h6-r-ccu";
                        reg = <0x07010000 0x400>;
index 8253a1a..09b5f61 100644 (file)
                        clock-names = "stmmaceth";
                        tx-fifo-depth = <16384>;
                        rx-fifo-depth = <16384>;
+                       snps,multicast-filter-bins = <256>;
                        status = "disabled";
                };
 
                        clock-names = "stmmaceth";
                        tx-fifo-depth = <16384>;
                        rx-fifo-depth = <16384>;
+                       snps,multicast-filter-bins = <256>;
                        status = "disabled";
                };
 
                        clock-names = "stmmaceth";
                        tx-fifo-depth = <16384>;
                        rx-fifo-depth = <16384>;
+                       snps,multicast-filter-bins = <256>;
                        status = "disabled";
                };
 
 
                rst: rstmgr@ffd11000 {
                        #reset-cells = <1>;
-                       compatible = "altr,rst-mgr";
+                       compatible = "altr,stratix10-rst-mgr";
                        reg = <0xffd11000 0x1000>;
-                       altr,modrst-offset = <0x20>;
                };
 
                spi0: spi@ffda4000 {
index c31f29d..f12efa2 100644 (file)
@@ -11,6 +11,7 @@ dtb-$(CONFIG_ARCH_MESON) += meson-gxbb-vega-s95-meta.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxbb-vega-s95-telos.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxbb-wetek-hub.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxbb-wetek-play2.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s805x-libretech-ac.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s905x-hwacom-amazetv.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s905x-khadas-vim.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s905x-libretech-cc.dtb
@@ -18,6 +19,7 @@ dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s905x-nexbox-a95x.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s905x-p212.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s905d-p230.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s905d-p231.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s905d-phicomm-n1.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s805x-p241.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s905w-p281.dtb
 dtb-$(CONFIG_ARCH_MESON) += meson-gxl-s905w-tx3-mini.dtb
index 18778ad..7759fda 100644 (file)
@@ -60,7 +60,7 @@
                serial1 = &uart_A;
        };
 
-       linein: audio-codec@0 {
+       linein: audio-codec-0 {
                #sound-dai-cells = <0>;
                compatible = "everest,es7241";
                VDDA-supply = <&vcc_3v3>;
@@ -70,7 +70,7 @@
                sound-name-prefix = "Linein";
        };
 
-       lineout: audio-codec@1 {
+       lineout: audio-codec-1 {
                #sound-dai-cells = <0>;
                compatible = "everest,es7154";
                VDD-supply = <&vcc_3v3>;
                sound-name-prefix = "Lineout";
        };
 
-       spdif_dit: audio-codec@2 {
+       spdif_dit: audio-codec-2 {
                #sound-dai-cells = <0>;
                compatible = "linux,spdif-dit";
                status = "okay";
                sound-name-prefix = "DIT";
        };
 
-       dmics: audio-codec@3 {
+       dmics: audio-codec-3 {
                #sound-dai-cells = <0>;
                compatible = "dmic-codec";
                num-channels = <7>;
                                       <393216000>;
                status = "okay";
 
-               dai-link@0 {
+               dai-link-0 {
                        sound-dai = <&frddr_a>;
                };
 
-               dai-link@1 {
+               dai-link-1 {
                        sound-dai = <&frddr_b>;
                };
 
-               dai-link@2 {
+               dai-link-2 {
                        sound-dai = <&frddr_c>;
                };
 
-               dai-link@3 {
+               dai-link-3 {
                        sound-dai = <&toddr_a>;
                };
 
-               dai-link@4 {
+               dai-link-4 {
                        sound-dai = <&toddr_b>;
                };
 
-               dai-link@5 {
+               dai-link-5 {
                        sound-dai = <&toddr_c>;
                };
 
-               dai-link@6 {
+               dai-link-6 {
                        sound-dai = <&tdmif_c>;
                        dai-format = "i2s";
                        dai-tdm-slot-tx-mask-2 = <1 1>;
 
                };
 
-               dai-link@7 {
+               dai-link-7 {
                        sound-dai = <&spdifout>;
 
                        codec {
                        };
                };
 
-               dai-link@8 {
+               dai-link-8 {
                        sound-dai = <&pdm>;
 
                        codec {
 
 &uart_A {
        status = "okay";
-       pinctrl-0 = <&uart_a_pins>;
+       pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
        pinctrl-names = "default";
+       uart-has-rtscts;
+
+       bluetooth {
+               compatible = "brcm,bcm43438-bt";
+               shutdown-gpios = <&gpio GPIOX_21 GPIO_ACTIVE_HIGH>;
+       };
 };
 
 &uart_AO {
index df017db..5f512c9 100644 (file)
@@ -20,7 +20,7 @@
        #address-cells = <2>;
        #size-cells = <2>;
 
-       tdmif_a: audio-controller@0 {
+       tdmif_a: audio-controller-0 {
                compatible = "amlogic,axg-tdm-iface";
                #sound-dai-cells = <0>;
                sound-name-prefix = "TDM_A";
@@ -31,7 +31,7 @@
                status = "disabled";
        };
 
-       tdmif_b: audio-controller@1 {
+       tdmif_b: audio-controller-1 {
                compatible = "amlogic,axg-tdm-iface";
                #sound-dai-cells = <0>;
                sound-name-prefix = "TDM_B";
@@ -42,7 +42,7 @@
                status = "disabled";
        };
 
-       tdmif_c: audio-controller@2 {
+       tdmif_c: audio-controller-2 {
                compatible = "amlogic,axg-tdm-iface";
                #sound-dai-cells = <0>;
                sound-name-prefix = "TDM_C";
@@ -79,6 +79,7 @@
                        reg = <0x0 0x0>;
                        enable-method = "psci";
                        next-level-cache = <&l2>;
+                       clocks = <&scpi_dvfs 0>;
                };
 
                cpu1: cpu@1 {
@@ -87,6 +88,7 @@
                        reg = <0x0 0x1>;
                        enable-method = "psci";
                        next-level-cache = <&l2>;
+                       clocks = <&scpi_dvfs 0>;
                };
 
                cpu2: cpu@2 {
@@ -95,6 +97,7 @@
                        reg = <0x0 0x2>;
                        enable-method = "psci";
                        next-level-cache = <&l2>;
+                       clocks = <&scpi_dvfs 0>;
                };
 
                cpu3: cpu@3 {
                        reg = <0x0 0x3>;
                        enable-method = "psci";
                        next-level-cache = <&l2>;
+                       clocks = <&scpi_dvfs 0>;
                };
 
                l2: l2-cache0 {
                };
        };
 
+       sm: secure-monitor {
+               compatible = "amlogic,meson-gxbb-sm";
+       };
+
        psci {
                compatible = "arm,psci-1.0";
                method = "smc";
                };
        };
 
+       scpi {
+               compatible = "arm,scpi-pre-1.0";
+               mboxes = <&mailbox 1 &mailbox 2>;
+               shmem = <&cpu_scp_lpri &cpu_scp_hpri>;
+
+               scpi_clocks: clocks {
+                       compatible = "arm,scpi-clocks";
+
+                       scpi_dvfs: clock-controller {
+                               compatible = "arm,scpi-dvfs-clocks";
+                               #clock-cells = <1>;
+                               clock-indices = <0>;
+                               clock-output-names = "vcpu";
+                       };
+               };
+
+               scpi_sensors: sensors {
+                       compatible = "amlogic,meson-gxbb-scpi-sensors";
+                       #thermal-sensor-cells = <1>;
+               };
+       };
+
        soc {
                compatible = "simple-bus";
                #address-cells = <2>;
                                                groups = "i2c0_sck",
                                                         "i2c0_sda";
                                                function = "i2c0";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "i2c1_sck_x",
                                                         "i2c1_sda_x";
                                                function = "i2c1";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "i2c1_sck_z",
                                                         "i2c1_sda_z";
                                                function = "i2c1";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "i2c2_sck_a",
                                                         "i2c2_sda_a";
                                                function = "i2c2";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "i2c2_sck_x",
                                                         "i2c2_sda_x";
                                                function = "i2c2";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "i2c3_sda_a6",
                                                         "i2c3_sck_a7";
                                                function = "i2c3";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "i2c3_sda_a12",
                                                         "i2c3_sck_a13";
                                                function = "i2c3";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "i2c3_sda_a19",
                                                         "i2c3_sck_a20";
                                                function = "i2c3";
+                                               bias-disable;
                                        };
                                };
 
                                                         "emmc_cmd",
                                                         "emmc_ds";
                                                function = "emmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "BOOT_8";
                                                function = "gpio_periphs";
-                                       };
-                                       cfg-pull-down {
-                                               pins = "BOOT_8";
                                                bias-pull-down;
                                        };
                                };
                                                         "eth_txd2_rgmii",
                                                         "eth_txd3_rgmii";
                                                function = "eth";
+                                               bias-disable;
                                        };
                                };
 
                                                         "eth_txd2_rgmii",
                                                         "eth_txd3_rgmii";
                                                function = "eth";
+                                               bias-disable;
                                        };
                                };
 
                                                         "eth_txd0_x",
                                                         "eth_txd1_x";
                                                function = "eth";
+                                               bias-disable;
                                        };
                                };
 
                                                         "eth_txd0_y",
                                                         "eth_txd1_y";
                                                function = "eth";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "mclk_b";
                                                function = "mclk_b";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "mclk_c";
                                                function = "mclk_c";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pdm_dclk_a14";
                                                function = "pdm";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pdm_dclk_a19";
                                                function = "pdm";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pdm_din0";
                                                function = "pdm";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pdm_din1";
                                                function = "pdm";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pdm_din2";
                                                function = "pdm";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pdm_din3";
                                                function = "pdm";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_a_a";
                                                function = "pwm_a";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_a_x18";
                                                function = "pwm_a";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_a_x20";
                                                function = "pwm_a";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_a_z";
                                                function = "pwm_a";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_b_a";
                                                function = "pwm_b";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_b_x";
                                                function = "pwm_b";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_b_z";
                                                function = "pwm_b";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_c_a";
                                                function = "pwm_c";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_c_x10";
                                                function = "pwm_c";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_c_x17";
                                                function = "pwm_c";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_d_x11";
                                                function = "pwm_d";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "pwm_d_x16";
                                                function = "pwm_d";
+                                               bias-disable;
                                        };
                                };
 
                                                         "sdio_cmd",
                                                         "sdio_clk";
                                                function = "sdio";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "GPIOX_4";
                                                function = "gpio_periphs";
-                                       };
-                                       cfg-pull-down {
-                                               pins = "GPIOX_4";
                                                bias-pull-down;
                                        };
                                };
                                        mux {
                                                groups = "spdif_in_z";
                                                function = "spdif_in";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spdif_in_a1";
                                                function = "spdif_in";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spdif_in_a7";
                                                function = "spdif_in";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spdif_in_a19";
                                                function = "spdif_in";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spdif_in_a20";
                                                function = "spdif_in";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spdif_out_a1";
                                                function = "spdif_out";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spdif_out_a11";
                                                function = "spdif_out";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spdif_out_a19";
                                                function = "spdif_out";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spdif_out_a20";
                                                function = "spdif_out";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spdif_out_z";
                                                function = "spdif_out";
+                                               bias-disable;
                                        };
                                };
 
                                                         "spi0_mosi",
                                                         "spi0_clk";
                                                function = "spi0";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spi0_ss0";
                                                function = "spi0";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spi0_ss1";
                                                function = "spi0";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spi0_ss2";
                                                function = "spi0";
+                                               bias-disable;
                                        };
                                };
 
                                                         "spi1_mosi_a",
                                                         "spi1_clk_a";
                                                function = "spi1";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spi1_ss0_a";
                                                function = "spi1";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spi1_ss1";
                                                function = "spi1";
+                                               bias-disable;
                                        };
                                };
 
                                                         "spi1_mosi_x",
                                                         "spi1_clk_x";
                                                function = "spi1";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "spi1_ss0_x";
                                                function = "spi1";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdma_din0";
                                                function = "tdma";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdma_dout0_x14";
                                                function = "tdma";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdma_dout0_x15";
                                                function = "tdma";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdma_dout1";
                                                function = "tdma";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdma_din1";
                                                function = "tdma";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdma_fs";
                                                function = "tdma";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdma_fs_slv";
                                                function = "tdma";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdma_sclk";
                                                function = "tdma";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdma_sclk_slv";
                                                function = "tdma";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_din0";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_din1";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_din2";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_din3";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_dout0";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_dout1";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_dout2";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_dout3";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_fs";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_fs_slv";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_sclk";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmb_sclk_slv";
                                                function = "tdmb";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_fs";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_fs_slv";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_sclk";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_sclk_slv";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_din0";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_din1";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_din2";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_din3";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_dout0";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_dout1";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_dout2";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "tdmc_dout3";
                                                function = "tdmc";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_tx_a",
                                                         "uart_rx_a";
                                                function = "uart_a";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_cts_a",
                                                         "uart_rts_a";
                                                function = "uart_a";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_tx_b_x",
                                                         "uart_rx_b_x";
                                                function = "uart_b";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_cts_b_x",
                                                         "uart_rts_b_x";
                                                function = "uart_b";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_tx_b_z",
                                                         "uart_rx_b_z";
                                                function = "uart_b";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_cts_b_z",
                                                         "uart_rts_b_z";
                                                function = "uart_b";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_ao_tx_b_z",
                                                         "uart_ao_rx_b_z";
                                                function = "uart_ao_b_z";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_ao_cts_b_z",
                                                         "uart_ao_rts_b_z";
                                                function = "uart_ao_b_z";
+                                               bias-disable;
                                        };
                                };
                        };
                        };
                };
 
-               mailbox: mailbox@ff63dc00 {
+               mailbox: mailbox@ff63c404 {
                        compatible = "amlogic,meson-gx-mhu", "amlogic,meson-gxbb-mhu";
-                       reg = <0 0xff63dc00 0 0x400>;
+                       reg = <0 0xff63c404 0 0x4c>;
                        interrupts = <GIC_SPI 208 IRQ_TYPE_EDGE_RISING>,
                                     <GIC_SPI 209 IRQ_TYPE_EDGE_RISING>,
                                     <GIC_SPI 210 IRQ_TYPE_EDGE_RISING>;
                                        mux {
                                                groups = "i2c_ao_sck_4";
                                                function = "i2c_ao";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "i2c_ao_sck_8";
                                                function = "i2c_ao";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "i2c_ao_sck_10";
                                                function = "i2c_ao";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "i2c_ao_sda_5";
                                                function = "i2c_ao";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "i2c_ao_sda_9";
                                                function = "i2c_ao";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "i2c_ao_sda_11";
                                                function = "i2c_ao";
+                                               bias-disable;
                                        };
                                };
 
                                        mux {
                                                groups = "remote_input_ao";
                                                function = "remote_input_ao";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_ao_tx_a",
                                                         "uart_ao_rx_a";
                                                function = "uart_ao_a";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_ao_cts_a",
                                                         "uart_ao_rts_a";
                                                function = "uart_ao_a";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_ao_tx_b",
                                                         "uart_ao_rx_b";
                                                function = "uart_ao_b";
+                                               bias-disable;
                                        };
                                };
 
                                                groups = "uart_ao_cts_b",
                                                         "uart_ao_rts_b";
                                                function = "uart_ao_b";
+                                               bias-disable;
                                        };
                                };
                        };
                        #size-cells = <1>;
                        ranges = <0 0x0 0xfffc0000 0x20000>;
 
-                       cpu_scp_lpri: scp-shmem@0 {
+                       cpu_scp_lpri: scp-shmem@13000 {
                                compatible = "amlogic,meson-axg-scp-shmem";
                                reg = <0x13000 0x400>;
                        };
 
-                       cpu_scp_hpri: scp-shmem@200 {
+                       cpu_scp_hpri: scp-shmem@13400 {
                                compatible = "amlogic,meson-axg-scp-shmem";
                                reg = <0x13400 0x400>;
                        };
index 765247b..e14e0ce 100644 (file)
        status = "okay";
        pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
        pinctrl-names = "default";
+       hdmi-supply = <&hdmi_5v>;
 };
 
 &hdmi_tx_tmds_port {
index f1e5cdb..ed336c7 100644 (file)
                                status = "disabled";
                        };
 
+                       clock-measure@8758 {
+                               compatible = "amlogic,meson-gx-clk-measure";
+                               reg = <0x0 0x8758 0x0 0x10>;
+                       };
+
                        i2c_B: i2c@87c0 {
                                compatible = "amlogic,meson-gx-i2c", "amlogic,meson-gxbb-i2c";
                                reg = <0x0 0x087c0 0x0 0x20>;
index cbe99bd..8cd50b7 100644 (file)
        pinctrl-names = "default";
 };
 
-&pinctrl_aobus {
+&gpio_ao {
        gpio-line-names = "UART TX", "UART RX", "Power Control", "Power Key In",
                          "VCCK En", "CON1 Header Pin31",
                          "I2S Header Pin6", "IR In", "I2S Header Pin7",
                          "";
 };
 
-&pinctrl_periphs {
+&gpio {
        gpio-line-names = /* Bank GPIOZ */
                          "Eth MDIO", "Eth MDC", "Eth RGMII RX Clk",
                          "Eth RX DV", "Eth RX D0", "Eth RX D1", "Eth RX D2",
index 54954b3..00f7be6 100644 (file)
        pinctrl-names = "default";
 };
 
-&pinctrl_aobus {
+&gpio_ao {
        gpio-line-names = "UART TX", "UART RX", "VCCK En", "TF 3V3/1V8 En",
                          "USB HUB nRESET", "USB OTG Power En",
                          "J7 Header Pin2", "IR In", "J7 Header Pin4",
                          "";
 };
 
-&pinctrl_periphs {
+&gpio {
        gpio-line-names = /* Bank GPIOZ */
                          "Eth MDIO", "Eth MDC", "Eth RGMII RX Clk",
                          "Eth RX DV", "Eth RX D0", "Eth RX D1", "Eth RX D2",
index 1ade7e4..6796d25 100644 (file)
@@ -81,6 +81,7 @@
                        mux {
                                groups = "uart_tx_ao_a", "uart_rx_ao_a";
                                function = "uart_ao";
+                               bias-disable;
                        };
                };
 
@@ -89,6 +90,7 @@
                                groups = "uart_cts_ao_a",
                                       "uart_rts_ao_a";
                                function = "uart_ao";
+                               bias-disable;
                        };
                };
 
@@ -96,6 +98,7 @@
                        mux {
                                groups = "uart_tx_ao_b", "uart_rx_ao_b";
                                function = "uart_ao_b";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_ao_b",
                                       "uart_rts_ao_b";
                                function = "uart_ao_b";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "remote_input_ao";
                                function = "remote_input_ao";
+                               bias-disable;
                        };
                };
 
                                groups = "i2c_sck_ao",
                                       "i2c_sda_ao";
                                function = "i2c_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_ao_a_3";
                                function = "pwm_ao_a_3";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_ao_a_6";
                                function = "pwm_ao_a_6";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_ao_a_12";
                                function = "pwm_ao_a_12";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_ao_b";
                                function = "pwm_ao_b";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_am_clk";
                                function = "i2s_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_out_ao_clk";
                                function = "i2s_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_out_lr_clk";
                                function = "i2s_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_out_ch01_ao";
                                function = "i2s_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_out_ch23_ao";
                                function = "i2s_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_out_ch45_ao";
                                function = "i2s_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "spdif_out_ao_13";
                                function = "spdif_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "ao_cec";
                                function = "cec_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "ee_cec";
                                function = "cec_ao";
+                               bias-disable;
                        };
                };
        };
        compatible = "amlogic,meson-gxbb-aoclkc", "amlogic,meson-gx-aoclkc";
 };
 
+&efuse {
+       clocks = <&clkc CLKID_EFUSE>;
+};
+
 &ethmac {
        clocks = <&clkc CLKID_ETH>,
                 <&clkc CLKID_FCLK_DIV2>,
                                       "emmc_cmd",
                                       "emmc_clk";
                                function = "emmc";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "emmc_ds";
                                function = "emmc";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "BOOT_8";
                                function = "gpio_periphs";
-                       };
-                       cfg-pull-down {
-                               pins = "BOOT_8";
                                bias-pull-down;
                        };
                };
                                       "nor_c",
                                       "nor_cs";
                                function = "nor";
+                               bias-disable;
                        };
                };
 
                                        "spi_mosi",
                                        "spi_sclk";
                                function = "spi";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "spi_ss0";
                                function = "spi";
+                               bias-disable;
                        };
                };
 
                                       "sdcard_cmd",
                                       "sdcard_clk";
                                function = "sdcard";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "CARD_2";
                                function = "gpio_periphs";
-                       };
-                       cfg-pull-down {
-                               pins = "CARD_2";
                                bias-pull-down;
                        };
                };
                                       "sdio_cmd",
                                       "sdio_clk";
                                function = "sdio";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "GPIOX_4";
                                function = "gpio_periphs";
-                       };
-                       cfg-pull-down {
-                               pins = "GPIOX_4";
                                bias-pull-down;
                        };
                };
                        mux {
                                groups = "sdio_irq";
                                function = "sdio";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_tx_a",
                                       "uart_rx_a";
                                function = "uart_a";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_a",
                                       "uart_rts_a";
                                function = "uart_a";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_tx_b",
                                       "uart_rx_b";
                                function = "uart_b";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_b",
                                       "uart_rts_b";
                                function = "uart_b";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_tx_c",
                                       "uart_rx_c";
                                function = "uart_c";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_c",
                                       "uart_rts_c";
                                function = "uart_c";
+                               bias-disable;
                        };
                };
 
                                groups = "i2c_sck_a",
                                       "i2c_sda_a";
                                function = "i2c_a";
+                               bias-disable;
                        };
                };
 
                                groups = "i2c_sck_b",
                                       "i2c_sda_b";
                                function = "i2c_b";
+                               bias-disable;
                        };
                };
 
                                groups = "i2c_sck_c",
                                       "i2c_sda_c";
                                function = "i2c_c";
+                               bias-disable;
                        };
                };
 
                                       "eth_txd2",
                                       "eth_txd3";
                                function = "eth";
+                               bias-disable;
                        };
                };
 
                                       "eth_txd0",
                                       "eth_txd1";
                                function = "eth";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_a_x";
                                function = "pwm_a_x";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_a_y";
                                function = "pwm_a_y";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_b";
                                function = "pwm_b";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_d";
                                function = "pwm_d";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_e";
                                function = "pwm_e";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_f_x";
                                function = "pwm_f_x";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_f_y";
                                function = "pwm_f_y";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "hdmi_hpd";
                                function = "hdmi_hpd";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "hdmi_sda", "hdmi_scl";
                                function = "hdmi_i2c";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2sout_ch23_y";
                                function = "i2s_out";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2sout_ch45_y";
                                function = "i2s_out";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2sout_ch67_y";
                                function = "i2s_out";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "spdif_out_y";
                                function = "spdif_out";
+                               bias-disable;
                        };
                };
        };
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dts b/arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dts
new file mode 100644 (file)
index 0000000..82b1c48
--- /dev/null
@@ -0,0 +1,248 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2018 BayLibre, SAS.
+ * Author: Neil Armstrong <narmstrong@baylibre.com>
+ * Author: Jerome Brunet <jbrunet@baylibre.com>
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/input/input.h>
+
+#include "meson-gxl-s905x.dtsi"
+
+/ {
+       compatible = "libretech,aml-s805x-ac", "amlogic,s805x",
+                    "amlogic,meson-gxl";
+       model = "Libre Computer Board AML-S805X-AC";
+
+       aliases {
+               serial0 = &uart_AO;
+               ethernet0 = &ethmac;
+               spi0 = &spifc;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       cvbs-connector {
+               /*
+                * The pads are present but no connector is soldered on
+                * 2J2, so keep this off by default.
+                */
+               status = "disabled";
+               compatible = "composite-video-connector";
+
+               port {
+                       cvbs_connector_in: endpoint {
+                               remote-endpoint = <&cvbs_vdac_out>;
+                       };
+               };
+       };
+
+       dc_5v: regulator-dc_5v {
+               compatible = "regulator-fixed";
+               regulator-name = "DC_5V";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
+
+       emmc_pwrseq: emmc-pwrseq {
+               compatible = "mmc-pwrseq-emmc";
+               reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
+       };
+
+       hdmi-connector {
+               compatible = "hdmi-connector";
+               type = "a";
+
+               port {
+                       hdmi_connector_in: endpoint {
+                               remote-endpoint = <&hdmi_tx_tmds_out>;
+                       };
+               };
+       };
+
+       memory@0 {
+               device_type = "memory";
+               reg = <0x0 0x0 0x0 0x20000000>;
+       };
+
+       vcck: regulator-vcck {
+               compatible = "regulator-fixed";
+               regulator-name = "VCCK";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&dc_5v>;
+
+               /*
+                * This is controlled by GPIOAO_9 we reserve this but
+                * claiming it as done below reset the board anyway
+                * Need to investigate this
+                *
+                * gpio = <&gpio_ao GPIOAO_9 GPIO_ACTIVE_HIGH>;
+                * enable-active-high;
+                */
+               regulator-always-on;
+       };
+
+       vcc_3v3: regulator-vcc_3v3 {
+               compatible = "regulator-fixed";
+               regulator-name = "VCC_3V3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&dc_5v>;
+               regulator-always-on;
+       };
+
+       vddio_boot: regulator-vddio_boot {
+               compatible = "regulator-fixed";
+               regulator-name = "VDDIO_BOOT";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               vin-supply = <&vcc_3v3>;
+               regulator-always-on;
+       };
+};
+
+&cec_AO {
+       status = "okay";
+       pinctrl-0 = <&ao_cec_pins>;
+       pinctrl-names = "default";
+       hdmi-phandle = <&hdmi_tx>;
+};
+
+&cvbs_vdac_port {
+       cvbs_vdac_out: endpoint {
+               remote-endpoint = <&cvbs_connector_in>;
+       };
+};
+
+&ethmac {
+       status = "okay";
+};
+
+&internal_phy {
+       pinctrl-0 = <&eth_link_led_pins>, <&eth_act_led_pins>;
+       pinctrl-names = "default";
+};
+
+&ir {
+       status = "okay";
+       pinctrl-0 = <&remote_input_ao_pins>;
+       pinctrl-names = "default";
+};
+
+&hdmi_tx {
+       status = "okay";
+       pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
+       pinctrl-names = "default";
+};
+
+&hdmi_tx_tmds_port {
+       hdmi_tx_tmds_out: endpoint {
+               remote-endpoint = <&hdmi_connector_in>;
+       };
+};
+
+&gpio_ao {
+       gpio-line-names = "UART TX",
+                         "UART RX",
+                         "7J1 Header Pin31",
+                         "", "", "", "",
+                         "IR In",
+                         "HDMI CEC",
+                         "5V VCCK Regulator",
+                         /* GPIO_TEST_N */
+                         "";
+};
+
+&gpio {
+       gpio-line-names = /* Bank GPIOZ */
+                         "", "", "", "", "", "", "",
+                         "", "", "", "", "", "", "",
+                         "Eth Link LED", "Eth Activity LED",
+                         /* Bank GPIOH */
+                         "HDMI HPD", "HDMI SDA", "HDMI SCL",
+                         "", "7J1 Header Pin13",
+                         "7J1 Header Pin15",
+                         "7J1 Header Pin7",
+                         "7J1 Header Pin12",
+                         "7J1 Header Pin16",
+                         "7J1 Header Pin18",
+                         /* Bank BOOT */
+                         "eMMC D0", "eMMC D1", "eMMC D2", "eMMC D3",
+                         "eMMC D4", "eMMC D5", "eMMC D6", "eMMC D7",
+                         "eMMC Clk", "eMMC Reset", "eMMC CMD",
+                         "SPI NOR MOSI", "SPI NOR MISO", "SPI NOR Clk",
+                         "", "SPI NOR Chip Select",
+                         /* Bank CARD */
+                         "", "", "", "", "", "", "",
+                         /* Bank GPIODV */
+                         "", "", "", "", "", "", "", "", "", "", "", "",
+                         "", "", "", "", "", "", "", "", "", "", "", "",
+                         "7J1 Header Pin27", "7J1 Header Pin28", "",
+                         "7J1 Header Pin29",
+                         "VCCK Regulator", "VDDEE Regulator",
+                         /* Bank GPIOX */
+                         "7J1 Header Pin22", "7J1 Header Pin26",
+                         "7J1 Header Pin36", "7J1 Header Pin38",
+                         "7J1 Header Pin40", "7J1 Header Pin37",
+                         "7J1 Header Pin33", "7J1 Header Pin35",
+                         "7J1 Header Pin19", "7J1 Header Pin21",
+                         "7J1 Header Pin24", "7J1 Header Pin23",
+                         "7J1 Header Pin8", "7J1 Header Pin10",
+                         "", "", "7J1 Header Pin32", "", "",
+                         /* Bank GPIOCLK */
+                         "", "";
+};
+
+&saradc {
+       status = "okay";
+       vref-supply = <&vddio_boot>;
+};
+
+/* eMMC */
+&sd_emmc_c {
+       status = "okay";
+       pinctrl-0 = <&emmc_pins>;
+       pinctrl-1 = <&emmc_clk_gate_pins>;
+       pinctrl-names = "default", "clk-gate";
+
+       bus-width = <8>;
+       cap-mmc-highspeed;
+       mmc-ddr-1_8v;
+       mmc-hs200-1_8v;
+       max-frequency = <200000000>;
+       disable-wp;
+
+       mmc-pwrseq = <&emmc_pwrseq>;
+       vmmc-supply = <&vcc_3v3>;
+       vqmmc-supply = <&vddio_boot>;
+};
+
+&spifc {
+       status = "okay";
+       pinctrl-0 = <&nor_pins>;
+       pinctrl-names = "default";
+
+       w25q32: spi-flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <3000000>;
+       };
+};
+
+&uart_AO {
+       status = "okay";
+       pinctrl-0 = <&uart_ao_a_pins>;
+       pinctrl-names = "default";
+};
+
+&usb0 {
+       status = "okay";
+};
index 15014fa..0c8e830 100644 (file)
@@ -86,6 +86,7 @@
                max-speed = <1000>;
                interrupt-parent = <&gpio_intc>;
                interrupts = <29 IRQ_TYPE_LEVEL_LOW>;
+               eee-broken-1000t;
        };
 };
 
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s905d-phicomm-n1.dts b/arch/arm64/boot/dts/amlogic/meson-gxl-s905d-phicomm-n1.dts
new file mode 100644 (file)
index 0000000..9a8a8a7
--- /dev/null
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2018 He Yangxuan
+ */
+
+/dts-v1/;
+
+#include "meson-gxl-s905d-p230.dts"
+
+/ {
+       compatible = "phicomm,n1", "amlogic,s905d", "amlogic,meson-gxl";
+       model = "Phicomm N1";
+
+       cvbs-connector {
+               status = "disabled";
+       };
+};
+
+&cvbs_vdac_port {
+       status = "disabled";
+};
index d32cf38..5499e8d 100644 (file)
@@ -78,6 +78,7 @@
        status = "okay";
        pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
        pinctrl-names = "default";
+       hdmi-supply = <&hdmi_5v>;
 };
 
 &hdmi_tx_tmds_port {
        linux,rc-map-name = "rc-geekbox";
 };
 
-&pinctrl_aobus {
+&gpio_ao {
        gpio-line-names = "UART TX",
                          "UART RX",
                          "Power Key In",
                          "";
 };
 
-&pinctrl_periphs {
+&gpio {
        gpio-line-names = /* Bank GPIOZ */
                          "", "", "", "", "", "", "",
                          "", "", "", "", "", "", "",
        };
 };
 
+&uart_A {
+       bluetooth {
+               compatible = "brcm,bcm43438-bt";
+               shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
+       };
+};
+
 /* This is brought out on the Linux_RX (18) and Linux_TX (19) pins: */
 &uart_AO {
        status = "okay";
index 90a56af..db29344 100644 (file)
        status = "okay";
        pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
        pinctrl-names = "default";
+       hdmi-supply = <&hdmi_5v>;
 };
 
 &hdmi_tx_tmds_port {
        };
 };
 
-&pinctrl_aobus {
+&gpio_ao {
        gpio-line-names = "UART TX",
                          "UART RX",
                          "Blue LED",
                          "7J1 Header Pin15";
 };
 
-&pinctrl_periphs {
+&gpio {
        gpio-line-names = /* Bank GPIOZ */
                          "", "", "", "", "", "", "",
                          "", "", "", "", "", "", "",
index 5896e8a..2602940 100644 (file)
@@ -51,6 +51,7 @@
        status = "okay";
        pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
        pinctrl-names = "default";
+       hdmi-supply = <&hdmi_5v>;
 };
 
 &hdmi_tx_tmds_port {
index 8f0bb3c..ed27809 100644 (file)
        };
 };
 
+&efuse {
+       clocks = <&clkc CLKID_EFUSE>;
+};
+
 &ethmac {
        reg = <0x0 0xc9410000 0x0 0x10000
               0x0 0xc8834540 0x0 0x4>;
                        mux {
                                groups = "uart_tx_ao_a", "uart_rx_ao_a";
                                function = "uart_ao";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_ao_a",
                                       "uart_rts_ao_a";
                                function = "uart_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "uart_tx_ao_b", "uart_rx_ao_b";
                                function = "uart_ao_b";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "uart_tx_ao_b_0", "uart_rx_ao_b_1";
                                function = "uart_ao_b";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_ao_b",
                                       "uart_rts_ao_b";
                                function = "uart_ao_b";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "remote_input_ao";
                                function = "remote_input_ao";
+                               bias-disable;
                        };
                };
 
                                groups = "i2c_sck_ao",
                                       "i2c_sda_ao";
                                function = "i2c_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_ao_a_3";
                                function = "pwm_ao_a";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_ao_a_8";
                                function = "pwm_ao_a";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_ao_b";
                                function = "pwm_ao_b";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_ao_b_6";
                                function = "pwm_ao_b";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_out_ch23_ao";
                                function = "i2s_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_out_ch45_ao";
                                function = "i2s_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "spdif_out_ao_6";
                                function = "spdif_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "spdif_out_ao_9";
                                function = "spdif_out_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "ao_cec";
                                function = "cec_ao";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "ee_cec";
                                function = "cec_ao";
+                               bias-disable;
                        };
                };
        };
                                       "emmc_cmd",
                                       "emmc_clk";
                                function = "emmc";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "emmc_ds";
                                function = "emmc";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "BOOT_8";
                                function = "gpio_periphs";
-                       };
-                       cfg-pull-down {
-                               pins = "BOOT_8";
                                bias-pull-down;
                        };
                };
                                       "nor_c",
                                       "nor_cs";
                                function = "nor";
+                               bias-disable;
                        };
                };
 
                                        "spi_mosi",
                                        "spi_sclk";
                                function = "spi";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "spi_ss0";
                                function = "spi";
+                               bias-disable;
                        };
                };
 
                                       "sdcard_cmd",
                                       "sdcard_clk";
                                function = "sdcard";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "CARD_2";
                                function = "gpio_periphs";
-                       };
-                       cfg-pull-down {
-                               pins = "CARD_2";
                                bias-pull-down;
                        };
                };
                                       "sdio_cmd",
                                       "sdio_clk";
                                function = "sdio";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "GPIOX_4";
                                function = "gpio_periphs";
-                       };
-                       cfg-pull-down {
-                               pins = "GPIOX_4";
                                bias-pull-down;
                        };
                };
                        mux {
                                groups = "sdio_irq";
                                function = "sdio";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_tx_a",
                                       "uart_rx_a";
                                function = "uart_a";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_a",
                                       "uart_rts_a";
                                function = "uart_a";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_tx_b",
                                       "uart_rx_b";
                                function = "uart_b";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_b",
                                       "uart_rts_b";
                                function = "uart_b";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_tx_c",
                                       "uart_rx_c";
                                function = "uart_c";
+                               bias-disable;
                        };
                };
 
                                groups = "uart_cts_c",
                                       "uart_rts_c";
                                function = "uart_c";
+                               bias-disable;
                        };
                };
 
                                groups = "i2c_sck_a",
                                     "i2c_sda_a";
                                function = "i2c_a";
+                               bias-disable;
                        };
                };
 
                                groups = "i2c_sck_b",
                                      "i2c_sda_b";
                                function = "i2c_b";
+                               bias-disable;
                        };
                };
 
                                groups = "i2c_sck_c",
                                      "i2c_sda_c";
                                function = "i2c_c";
+                               bias-disable;
                        };
                };
 
                                       "eth_txd2",
                                       "eth_txd3";
                                function = "eth";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "eth_link_led";
                                function = "eth_led";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_a";
                                function = "pwm_a";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_b";
                                function = "pwm_b";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_c";
                                function = "pwm_c";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_d";
                                function = "pwm_d";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_e";
                                function = "pwm_e";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_f_clk";
                                function = "pwm_f";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "pwm_f_x";
                                function = "pwm_f";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "hdmi_hpd";
                                function = "hdmi_hpd";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "hdmi_sda", "hdmi_scl";
                                function = "hdmi_i2c";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_am_clk";
                                function = "i2s_out";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_out_ao_clk";
                                function = "i2s_out";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_out_lr_clk";
                                function = "i2s_out";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2s_out_ch01";
                                function = "i2s_out";
+                               bias-disable;
                        };
                };
                i2sout_ch23_z_pins: i2sout_ch23_z {
                        mux {
                                groups = "i2sout_ch23_z";
                                function = "i2s_out";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2sout_ch45_z";
                                function = "i2s_out";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "i2sout_ch67_z";
                                function = "i2s_out";
+                               bias-disable;
                        };
                };
 
                        mux {
                                groups = "spdif_out_h";
                                function = "spdif_out";
+                               bias-disable;
                        };
                };
        };
index 313f88f..3c3a667 100644 (file)
 
                                map1 {
                                        trip = <&cpu_alert1>;
-                                       cooling-device = <&gpio_fan 2 THERMAL_NO_LIMIT>;
-                               };
-
-                               map2 {
-                                       trip = <&cpu_alert1>;
-                                       cooling-device =
-                                               <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
-                               };
-
-                               map3 {
-                                       trip = <&cpu_alert1>;
-                                       cooling-device =
-                                               <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       cooling-device = <&gpio_fan 2 THERMAL_NO_LIMIT>,
+                                                        <&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 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>;
                                };
                        };
                };
        status = "okay";
        pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
        pinctrl-names = "default";
+       hdmi-supply = <&hdmi_5v>;
 };
 
 &hdmi_tx_tmds_port {
index 602f63f..fe4fda4 100644 (file)
                      <0x00000008 0x80000000 0 0x80000000>;
        };
 
+       reserved-memory {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               /* Chipselect 2,00000000 is physically at 0x18000000 */
+               vram: vram@18000000 {
+                       /* 8 MB of designated video RAM */
+                       compatible = "shared-dma-pool";
+                       reg = <0x00000000 0x18000000 0 0x00800000>;
+                       no-map;
+               };
+       };
+
        gic: interrupt-controller@2c001000 {
                compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic";
                #interrupt-cells = <3>;
                             <0 63 4>;
        };
 
+       panel {
+               compatible = "arm,rtsm-display";
+               port {
+                       panel_in: endpoint {
+                               remote-endpoint = <&clcd_pads>;
+                       };
+               };
+       };
+
        smb@8000000 {
                compatible = "simple-bus";
 
index d2dbc3f..b25f3cb 100644 (file)
                                bank-width = <4>;
                        };
 
-                       v2m_video_ram: vram@2,00000000 {
-                               compatible = "arm,vexpress-vram";
-                               reg = <2 0x00000000 0x00800000>;
-                       };
-
                        ethernet@2,02000000 {
                                compatible = "smsc,lan91c111";
                                reg = <2 0x02000000 0x10000>;
                                        interrupts = <14>;
                                        clocks = <&v2m_oscclk1>, <&v2m_clk24mhz>;
                                        clock-names = "clcdclk", "apb_pclk";
-                                       arm,pl11x,framebuffer = <0x18000000 0x00180000>;
-                                       memory-region = <&v2m_video_ram>;
-                                       max-memory-bandwidth = <130000000>; /* 16bpp @ 63.5MHz */
+                                       /* 800x600 16bpp @36MHz works fine */
+                                       max-memory-bandwidth = <54000000>;
+                                       memory-region = <&vram>;
 
                                        port {
-                                               v2m_clcd_pads: endpoint {
-                                                       remote-endpoint = <&v2m_clcd_panel>;
+                                               clcd_pads: endpoint {
+                                                       remote-endpoint = <&panel_in>;
                                                        arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
                                                };
                                        };
-
-                                       panel {
-                                               compatible = "panel-dpi";
-
-                                               port {
-                                                       v2m_clcd_panel: endpoint {
-                                                               remote-endpoint = <&v2m_clcd_pads>;
-                                                       };
-                                               };
-
-                                               panel-timing {
-                                                       clock-frequency = <63500127>;
-                                                       hactive = <1024>;
-                                                       hback-porch = <152>;
-                                                       hfront-porch = <48>;
-                                                       hsync-len = <104>;
-                                                       vactive = <768>;
-                                                       vback-porch = <23>;
-                                                       vfront-porch = <3>;
-                                                       vsync-len = <4>;
-                                               };
-                                       };
                                };
 
                                virtio-block@130000 {
index 3888038..8981c3d 100644 (file)
                reg = <0 0x80000000 0 0x80000000>; /* 2GB @ 2GB */
        };
 
+       reserved-memory {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               /* Chipselect 2 is physically at 0x18000000 */
+               vram: vram@18000000 {
+                       /* 8 MB of designated video RAM */
+                       compatible = "shared-dma-pool";
+                       reg = <0 0x18000000 0 0x00800000>;
+                       no-map;
+               };
+       };
+
        gic: interrupt-controller@2c001000 {
                compatible = "arm,gic-400";
                #interrupt-cells = <3>;
index fe3a0b1..81b7239 100644 (file)
@@ -55,37 +55,44 @@ thermal-zones {
                        map0 {
                                /* Set maximum frequency as 1800MHz  */
                                trip = <&atlas0_alert_0>;
-                               cooling-device = <&cpu4 1 2>;
+                               cooling-device = <&cpu4 1 2>, <&cpu5 1 2>,
+                                                <&cpu6 1 2>, <&cpu7 1 2>;
                        };
                        map1 {
                                /* Set maximum frequency as 1700MHz  */
                                trip = <&atlas0_alert_1>;
-                               cooling-device = <&cpu4 2 3>;
+                               cooling-device = <&cpu4 2 3>, <&cpu5 2 3>,
+                                                <&cpu6 2 3>, <&cpu7 2 3>;
                        };
                        map2 {
                                /* Set maximum frequency as 1600MHz  */
                                trip = <&atlas0_alert_2>;
-                               cooling-device = <&cpu4 3 4>;
+                               cooling-device = <&cpu4 3 4>, <&cpu5 3 4>,
+                                                <&cpu6 3 4>, <&cpu7 3 4>;
                        };
                        map3 {
                                /* Set maximum frequency as 1500MHz  */
                                trip = <&atlas0_alert_3>;
-                               cooling-device = <&cpu4 4 5>;
+                               cooling-device = <&cpu4 4 5>, <&cpu5 4 5>,
+                                                <&cpu6 4 5>, <&cpu7 4 5>;
                        };
                        map4 {
                                /* Set maximum frequency as 1400MHz  */
                                trip = <&atlas0_alert_4>;
-                               cooling-device = <&cpu4 5 7>;
+                               cooling-device = <&cpu4 5 7>, <&cpu5 5 7>,
+                                                <&cpu6 5 7>, <&cpu7 5 7>;
                        };
                        map5 {
                                /* Set maximum frequencyas 1200MHz  */
                                trip = <&atlas0_alert_5>;
-                               cooling-device = <&cpu4 7 9>;
+                               cooling-device = <&cpu4 7 9>, <&cpu5 7 9>,
+                                                <&cpu6 7 9>, <&cpu7 7 9>;
                        };
                        map6 {
                                /* Set maximum frequency as 1000MHz  */
                                trip = <&atlas0_alert_6>;
-                               cooling-device = <&cpu4 9 14>;
+                               cooling-device = <&cpu4 9 14>, <&cpu5 9 14>,
+                                                <&cpu6 9 14>, <&cpu7 9 14>;
                        };
                };
        };
@@ -222,27 +229,32 @@ thermal-zones {
                        map0 {
                                /* Set maximum frequency as 1200MHz  */
                                trip = <&apollo_alert_2>;
-                               cooling-device = <&cpu0 1 2>;
+                               cooling-device = <&cpu0 1 2>, <&cpu1 1 2>,
+                                                <&cpu2 1 2>, <&cpu3 1 2>;
                        };
                        map1 {
                                /* Set maximum frequency as 1100MHz  */
                                trip = <&apollo_alert_3>;
-                               cooling-device = <&cpu0 2 3>;
+                               cooling-device = <&cpu0 2 3>, <&cpu1 2 3>,
+                                                <&cpu2 2 3>, <&cpu3 2 3>;
                        };
                        map2 {
                                /* Set maximum frequency as 1000MHz  */
                                trip = <&apollo_alert_4>;
-                               cooling-device = <&cpu0 3 4>;
+                               cooling-device = <&cpu0 3 4>, <&cpu1 3 4>,
+                                                <&cpu2 3 4>, <&cpu3 3 4>;
                        };
                        map3 {
                                /* Set maximum frequency as 900MHz  */
                                trip = <&apollo_alert_5>;
-                               cooling-device = <&cpu0 4 5>;
+                               cooling-device = <&cpu0 4 5>, <&cpu1 4 5>,
+                                                <&cpu2 4 5>, <&cpu3 4 5>;
                        };
                        map4 {
                                /* Set maximum frequency as 800MHz  */
                                trip = <&apollo_alert_6>;
-                               cooling-device = <&cpu0 5 9>;
+                               cooling-device = <&cpu0 5 9>, <&cpu1 5 9>,
+                                                <&cpu2 5 9>, <&cpu3 5 9>;
                        };
                };
        };
index 2131f12..84446f9 100644 (file)
                };
 
                usbdrd30: usbdrd {
-                       compatible = "samsung,exynos5250-dwusb3";
+                       compatible = "samsung,exynos5433-dwusb3";
                        clocks = <&cmu_fsys CLK_ACLK_USBDRD30>,
-                               <&cmu_fsys CLK_SCLK_USBDRD30>;
-                       clock-names = "usbdrd30", "usbdrd30_susp_clk";
+                               <&cmu_fsys CLK_SCLK_USBDRD30>,
+                               <&cmu_fsys CLK_PHYCLK_USBDRD30_UDRD30_PHYCLOCK>,
+                               <&cmu_fsys CLK_PHYCLK_USBDRD30_UDRD30_PIPE_PCLK>;
+                       clock-names = "aclk", "susp_clk", "phyclk", "pipe_pclk";
                        #address-cells = <1>;
                        #size-cells = <1>;
                        ranges;
 
                        usbdrd_dwc3: dwc3@15400000 {
                                compatible = "snps,dwc3";
+                               clocks = <&cmu_fsys CLK_SCLK_USBDRD30>,
+                                       <&cmu_fsys CLK_ACLK_USBDRD30>,
+                                       <&cmu_fsys CLK_SCLK_USBDRD30>;
+                               clock-names = "ref", "bus_early", "suspend";
                                reg = <0x15400000 0x10000>;
                                interrupts = <GIC_SPI 231 IRQ_TYPE_LEVEL_HIGH>;
                                phys = <&usbdrd30_phy 0>, <&usbdrd30_phy 1>;
                };
 
                usbhost30: usbhost {
-                       compatible = "samsung,exynos5250-dwusb3";
+                       compatible = "samsung,exynos5433-dwusb3";
                        clocks = <&cmu_fsys CLK_ACLK_USBHOST30>,
-                               <&cmu_fsys CLK_SCLK_USBHOST30>;
-                       clock-names = "usbdrd30", "usbdrd30_susp_clk";
+                               <&cmu_fsys CLK_SCLK_USBHOST30>,
+                               <&cmu_fsys CLK_PHYCLK_USBHOST30_UHOST30_PHYCLOCK>,
+                               <&cmu_fsys CLK_PHYCLK_USBHOST30_UHOST30_PIPE_PCLK>;
+                       clock-names = "aclk", "susp_clk", "phyclk", "pipe_pclk";
                        #address-cells = <1>;
                        #size-cells = <1>;
                        ranges;
 
                        usbhost_dwc3: dwc3@15a00000 {
                                compatible = "snps,dwc3";
+                               clocks = <&cmu_fsys CLK_SCLK_USBHOST30>,
+                                       <&cmu_fsys CLK_ACLK_USBHOST30>,
+                                       <&cmu_fsys CLK_SCLK_USBHOST30>;
+                               clock-names = "ref", "bus_early", "suspend";
                                reg = <0x15a00000 0x10000>;
                                interrupts = <GIC_SPI 244 IRQ_TYPE_LEVEL_HIGH>;
                                phys = <&usbhost30_phy 0>, <&usbhost30_phy 1>;
index c98bcbc..4643546 100644 (file)
                compatible = "gpio-leds";
 
                user_led1 {
-                       label = "user_led1";
+                       label = "green:user1";
                        /* gpio_150_user_led1 */
                        gpios = <&gpio18 6 0>;
                        linux,default-trigger = "heartbeat";
                };
 
                user_led2 {
-                       label = "user_led2";
+                       label = "green:user2";
                        /* gpio_151_user_led2 */
                        gpios = <&gpio18 7 0>;
-                       linux,default-trigger = "mmc0";
+                       linux,default-trigger = "none";
                };
 
                user_led3 {
-                       label = "user_led3";
+                       label = "green:user3";
                        /* gpio_189_user_led3 */
                        gpios = <&gpio23 5 0>;
-                       default-state = "off";
+                       linux,default-trigger = "mmc0";
                };
 
                user_led4 {
-                       label = "user_led4";
+                       label = "green:user4";
                        /* gpio_190_user_led4 */
                        gpios = <&gpio23 6 0>;
                        panic-indicator;
-                       linux,default-trigger = "cpu0";
+                       linux,default-trigger = "none";
                };
 
                wlan_active_led {
-                       label = "wifi_active";
+                       label = "yellow:wlan";
                        /* gpio_205_wifi_active */
                        gpios = <&gpio25 5 0>;
                        linux,default-trigger = "phy0tx";
                };
 
                bt_active_led {
-                       label = "bt_active";
+                       label = "blue:bt";
                        gpios = <&gpio25 7 0>;
                        /* gpio_207_user_led1 */
                        linux,default-trigger = "hci0-power";
index f432b0a..20ae40d 100644 (file)
@@ -79,6 +79,7 @@
                        capacity-dmips-mhz = <592>;
                        clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER0>;
                        operating-points-v2 = <&cluster0_opp>;
+                       #cooling-cells = <2>;
                };
 
                cpu2: cpu@2 {
@@ -91,6 +92,7 @@
                        capacity-dmips-mhz = <592>;
                        clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER0>;
                        operating-points-v2 = <&cluster0_opp>;
+                       #cooling-cells = <2>;
                };
 
                cpu3: cpu@3 {
                        capacity-dmips-mhz = <592>;
                        clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER0>;
                        operating-points-v2 = <&cluster0_opp>;
+                       #cooling-cells = <2>;
                };
 
                cpu4: cpu@100 {
                        capacity-dmips-mhz = <1024>;
                        clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER1>;
                        operating-points-v2 = <&cluster1_opp>;
+                       #cooling-cells = <2>;
                };
 
                cpu6: cpu@102 {
                        capacity-dmips-mhz = <1024>;
                        clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER1>;
                        operating-points-v2 = <&cluster1_opp>;
+                       #cooling-cells = <2>;
                };
 
                cpu7: cpu@103 {
                        capacity-dmips-mhz = <1024>;
                        clocks = <&stub_clock HI3660_CLK_STUB_CLUSTER1>;
                        operating-points-v2 = <&cluster1_opp>;
+                       #cooling-cells = <2>;
                };
 
                idle-states {
                                        map0 {
                                                trip = <&target>;
                                                contribution = <1024>;
-                                               cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                               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 = <&target>;
                                                contribution = <512>;
-                                               cooling-device = <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                               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>;
                                        };
                                };
                        };
index 4f51186..c9775b6 100644 (file)
 /dts-v1/;
 
 #include "hi3670.dtsi"
+#include "hikey970-pinctrl.dtsi"
 
 / {
        model = "HiKey970";
        compatible = "hisilicon,hi3670-hikey970", "hisilicon,hi3670";
 
        aliases {
+               serial0 = &uart0;
+               serial1 = &uart1;
+               serial2 = &uart2;
+               serial3 = &uart3;
+               serial4 = &uart4;
+               serial5 = &uart5;
                serial6 = &uart6;       /* console UART */
        };
 
        };
 };
 
+/*
+ * Legend: proper name = the GPIO line is used as GPIO
+ *         NC = not connected (pin out but not routed from the chip to
+ *              anything the board)
+ *         "[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
+ *
+ * Line names are taken from "hikey970-schematics.pdf" from HiSilicon.
+ *
+ * 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_000-GPIO_007 */
+       gpio-line-names =
+               "",
+               "TP901", /* TEST_MODE connected to TP901 */
+               "",
+               "GPIO_003_USB_HUB_RESET_N",
+               "NC",
+               "[AP_GPS_REF_CLK]",
+               "[I2C3_SCL]",
+               "[I2C3_SDA]";
+};
+
+&gpio1 {
+       /* GPIO_008-GPIO_015 */
+       gpio-line-names =
+               "[UART0_CTS]", /* LSEC pin 3: GPIO_008_UART2_CTS_N */
+               "[UART0_RTS]", /* LSEC pin 9: GPIO_009_UART2_RTS_N */
+               "[UART0_TXD]", /* LSEC pin 5: GPIO_010_UART2_TXD */
+               "[UART0_RXD]", /* LSEC pin 7: GPIO_011_UART2_RXD */
+               "[USER_LED5]",
+               "GPIO-I", /* LSEC pin 31: GPIO_013_CAM0_RST_N */
+               "[USER_LED3]",
+               "[USER_LED4]";
+};
+
+&gpio2 {
+       /* GPIO_016-GPIO_023 */
+       gpio-line-names =
+               "GPIO-G", /* LSEC pin 29: GPIO_016_LCD_TE0 */
+               "[CSI0_MCLK]", /* HSEC pin 15: ISP_CCLK0_MCAM */
+               "[CSI1_MCLK]", /* HSEC pin 17: ISP_CCLK1_SCAM */
+               "GPIO_019_BT_ACTIVE",
+               "[I2C2_SCL]", /* HSEC pin 32: ISP_SCL0 */
+               "[I2C2_SDA]", /* HSEC pin 34: ISP_SDA0 */
+               "[I2C3_SCL]", /* HSEC pin 36: ISP_SCL1 */
+               "[I2C3_SDA]"; /* HSEC pin 38: ISP_SDA1 */
+};
+
+&gpio3 {
+       /* GPIO_024-GPIO_031 */
+       gpio-line-names =
+               "GPIO_024_WIFI_ACTIVE",
+               "GPIO_025_PERST_M.2",
+               "[I2C4_SCL]",
+               "[I2C4_SDA]",
+               "NC",
+               "GPIO-H", /* LSEC pin 30: GPIO_029_LCD_RST_N */
+               "[USER_LED1]",
+               "GPIO-L"; /* LSEC pin 34: GPIO_031 */
+};
+
+&gpio4 {
+       /* GPIO_032-GPIO_039 */
+       gpio-line-names =
+               "GPIO-K", /* LSEC pin 33: GPIO_032_CAM1_RST_N */
+               "GPIO_033_PMU1_EN",
+               "GPIO_034_USBSW_SEL",
+               /*
+                * These two pins should be used for SD(IO) data according
+                * to the 96boards specification but seems to be repurposed
+                * for UART 0. They are however named according to the spec.
+                */
+               "[SD_DAT1]", /* HSEC pin 3: GPIO_035_UART0_RXD */
+               "[SD_DAT2]", /* HSEC pin 5: GPIO_036_UART0_TXD */
+               "[UART1_RXD]", /* LSEC pin 13: DEBUG_UART6_RXD */
+               "[UART1_TXD]", /* LSEC pin 11: DEBUG_UART6_TXD */
+               "[SOC_GPS_UART3_CTS_N]"; /* TP2304 */
+};
+
+&gpio5 {
+       /* GPIO_040-GPIO_047 */
+       gpio-line-names =
+               "[SOC_GPS_UART3_RTS_N]", /* TP2302 */
+               "[SOC_GPS_UART3_RXD]", /* TP2303 */
+               "[SOC_GPS_UART3_TXD]", /* TP2305 */
+               "[SOC_BT_UART4_CTS_N]",
+               "[SOC_BT_UART4_RTS_N]",
+               "[SOC_BT_UART4_RXD]",
+               "[SOC_BT_UART4_TXD]",
+               "NC";
+};
+
+&gpio6 {
+       /* GPIO_048-GPIO_055 */
+       gpio-line-names =
+               "NC",
+               "GPIO_049_USER_LED6",
+               "GPIO_050_CAN_RST",
+               "GPIO_051_WIFI_EN",
+               "GPIO-D", /* LSEC pin 26 */
+               "GPIO-J", /* LSEC pin 32 */
+               "GPIO_054_BT_EN",
+               "[GPIO_055_SEL]";
+};
+
+&gpio7 {
+       /* GPIO_056-GPIO_063 */
+       gpio-line-names =
+               "[PCIE_PERST_L]", "NC", "NC", "NC", "NC", "NC", "NC", "NC";
+};
+
+&gpio8 {
+       /* GPIO_064-GPIO_071 */
+       gpio-line-names = "NC", "NC", "NC", "NC", "NC", "NC", "NC", "NC";
+};
+
+&gpio9 {
+       /* GPIO_072-GPIO_079 */
+       gpio-line-names = "NC", "NC", "NC", "NC", "NC", "NC", "NC", "NC";
+};
+
+&gpio10 {
+       /* GPIO_080-GPIO_087 */
+       gpio-line-names = "NC", "NC", "NC", "NC", "NC", "NC", "NC", "NC";
+};
+
+&gpio11 {
+       /* GPIO_088-GPIO_095 */
+       gpio-line-names = "NC", "NC", "NC", "NC", "NC", "NC", "NC", "NC";
+};
+
+&gpio12 {
+       /* GPIO_096-GPIO_103 */
+       gpio-line-names = "NC", "", "", "", "", "", "", "";
+};
+
+&gpio13 {
+       /* GPIO_104-GPIO_111 */
+       gpio-line-names = "", "", "", "", "", "", "", "";
+};
+
+&gpio14 {
+       /* GPIO_112-GPIO_119 */
+       gpio-line-names = "", "", "", "", "", "", "", "";
+};
+
+&gpio15 {
+       /* GPIO_120-GPIO_127 */
+       gpio-line-names = "", "", "", "", "", "", "", "";
+};
+
+&gpio16 {
+       /* GPIO_128-GPIO_135 */
+       gpio-line-names =
+               "[WL_SDIO_CLK]",
+               "[WL_SDIO_CMD]",
+               "[WL_SDIO_DATA0]",
+               "[WL_SDIO_DATA1]",
+               "[WL_SDIO_DATA2]",
+               "[WL_SDIO_DATA3]",
+               "[ETH_ISOLATE]",
+               "NC";
+};
+
+&gpio17 {
+       /* GPIO_136-GPIO_143 */
+       gpio-line-names =
+               "[MINI1CLK_EN]", "NC", "", "", "", "", "", "";
+};
+
+&gpio18 {
+       /* GPIO_144-GPIO_151 */
+       gpio-line-names =
+               "[SPI1_SCLK]", /* HSEC pin 9: GPIO_144_SPI3_CLK */
+               "[SPI1_DIN]", /* HSEC pin 11: GPIO_145_SPI3_DI */
+               "[SPI1_DOUT]", /* HSEC pin 1: GPIO_146_SPI3_DO */
+               "[SPI1_CS]", /* HSEC pin 7: GPIO_147_SPI3_CS0_N */
+               "[POWER_INT_N]",
+               "[CDMA_GPS_SYNC]",
+               "GPIO_150_PEX_INTA",
+               "GPIO_151_CAN_INT";
+};
+
+&gpio19 {
+       /* GPIO_152-GPIO_159 */
+       gpio-line-names = "", "", "", "", "", "", "", "";
+};
+
+&gpio20 {
+       /* GPIO_160-GPIO_167 */
+       gpio-line-names =
+               "[SD_CLK]",
+               "[SD_CMD]",
+               "[SD_DATA0]",
+               "[SD_DATA1]",
+               "[SD_DATA2]",
+               "[SD_DATA3]",
+               "GPIO_166_ETHCLK_EN",
+               "GPIO_167_USER_LED2";
+};
+
+&gpio21 {
+       /* GPIO_168-GPIO_175 */
+       gpio-line-names =
+               "GPIO_168_GPS_EN",
+               "GPIO-C", /* LSEC pin 25: GPIO_169_USIM1_CLK */
+               "GPIO-E", /* LSEC pin 27: GPIO_170_USIM1_RST */
+               "GPIO-B", /* LSEC pin 24: GPIO_171_USIM1_DATA */
+               "", "", "", "", "";
+};
+
+&gpio22 {
+       /* GPIO_176-GPIO_183 */
+       gpio-line-names =
+               "[PMU_PWR_HOLD]",
+               "GPIO_177_WL_WAKEUP_AP",
+               "[JTAG_TCK]",
+               "[JTAG_TMS]",
+               "[JTAG_TDI]",
+               "[JTAG_TMS]",
+               "GPIO_182_FATAL_ERR",
+               "NC";
+};
+
+&gpio23 {
+       /* GPIO_184-GPIO_191 */
+       gpio-line-names =
+               "GPIO_184_JTAG_SEL",
+               "GPIO-F", /* LSEC pin 28: GPIO_185_LCD_BL_PWM */
+               "[I2C0_SCL]", /* LSEC pin 15: GPIO_186_I2C0_SCL */
+               "[I2C0_SDA]", /* LSEC pin 17: GPIO_187_I2C0_SDA */
+               "[GPIO_188_I2C1_SCL]", /* Actual SoC I2C1_SCL */
+               "[GPIO_189_I2C1_SDA]", /* Actual SoC I2C1_SDA */
+               "[I2C1_SCL]", /* LSEC pin 19: GPIO_190_I2C2_SCL */
+               "[I2C2_SDA]"; /* LSEC pin 21: GPIO_191_I2C2_SDA */
+};
+
+&gpio24 {
+       /* GPIO_192-GPIO_199 */
+       gpio-line-names =
+               "[SD_LED]",
+               "NC",
+               "[PCM_DI]", /* LSEC pin 22: GPIO_194_I2S0_DI */
+               "[PCM_DO]", /* LSEC pin 20: GPIO_195_I2S0_DO */
+               "[PCM_CLK]", /* LSEC pin 18: GPIO_196_I2S0_XCLK */
+               "[PCM_FS]", /* LSEC pin 16: GPIO_197_I2S0_XFS */
+               "",
+               "[I2S2_DO]";
+};
+
+&gpio25 {
+       /* GPIO_200-GPIO_207 */
+       gpio-line-names =
+               "[I2S2_XCLK]",
+               "[I2S2_XFS]",
+               "GPIO_202_PERST_ETH",
+               "GPIO_203_PWRON_DET",
+               "GPIO_204_PMU1_IRQ_N",
+               "GPIO_205_SD_DET",
+               "GPIO_206_GPS_MOTION_INT",
+               "GPIO_207_HDMI_SEL";
+};
+
+&gpio26 {
+       /* GPIO_208-GPIO_215 */
+       gpio-line-names =
+               "GPIO-A", /* LSEC pin 23: GPIO_208_WAKEUP_SOC */
+               "GPIO_209_VBUS_TYPEC",
+               "NC",
+               "NC",
+               "NC",
+               "[SPI0_SCLK]", /* LSEC pin 8: GPIO_213_SPI2_CLK */
+               "[SPI0_DIN]", /* LSEC pin 10: GPIO_214_SPI2_DI */
+               "[SPI0_DOUT]"; /* LSEC pin 14: GPIO_215_SPI2_DO */
+};
+
+&gpio27 {
+       /* GPIO_216-GPIO_223 */
+       gpio-line-names =
+               "[SPI0_CS]", /* LSEC pin 12: GPIO_216_SPI2_CS0_N */
+               "GPIO_217_HDMI_PD",
+               "GPIO_218_GPS_WAKEUP_AP",
+               "GPIO_219_M.2CLK_EN",
+               "GPIO_220_PERST_MINI",
+               "GPIO_221_CC_INT",
+               "[PCIE_CLKREQ_L]",
+               "NC";
+};
+
+&gpio28 {
+       /* GPIO_224-GPIO_231 */
+       gpio-line-names =
+               "[PMU0_INT]",
+               "[SPMI_DATA]",
+               "[SPMI_CLK]",
+               "[CAN_SPI_CLK]",
+               "[CAN_SPI_DI]",
+               "[CAN_SPI_DO]",
+               "[CAN_SPI_CS]",
+               "GPIO_231_HDMI_INT";
+};
+
+&uart0 {
+       /* On High speed expansion header */
+       label = "HS-UART0";
+       status = "okay";
+};
+
+&uart2 {
+       /* On Low speed expansion header */
+       label = "LS-UART0";
+       status = "okay";
+};
+
 &uart6 {
+       /* On Low speed expansion header */
+       label = "LS-UART1";
        status = "okay";
 };
index c90e6f6..a5bd6d8 100644 (file)
@@ -7,6 +7,7 @@
  */
 
 #include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/hi3670-clock.h>
 
 / {
        compatible = "hisilicon,hi3670";
                #size-cells = <2>;
                ranges;
 
-               uart6_clk: clk_19_2M {
-                       compatible = "fixed-clock";
-                       #clock-cells = <0>;
-                       clock-frequency = <19200000>;
+               crg_ctrl: crg_ctrl@fff35000 {
+                       compatible = "hisilicon,hi3670-crgctrl", "syscon";
+                       reg = <0x0 0xfff35000 0x0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               pctrl: pctrl@e8a09000 {
+                       compatible = "hisilicon,hi3670-pctrl", "syscon";
+                       reg = <0x0 0xe8a09000 0x0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               pmuctrl: crg_ctrl@fff34000 {
+                       compatible = "hisilicon,hi3670-pmuctrl", "syscon";
+                       reg = <0x0 0xfff34000 0x0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               sctrl: sctrl@fff0a000 {
+                       compatible = "hisilicon,hi3670-sctrl", "syscon";
+                       reg = <0x0 0xfff0a000 0x0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               iomcu: iomcu@ffd7e000 {
+                       compatible = "hisilicon,hi3670-iomcu", "syscon";
+                       reg = <0x0 0xffd7e000 0x0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               media1_crg: media1_crgctrl@e87ff000 {
+                       compatible = "hisilicon,hi3670-media1-crg", "syscon";
+                       reg = <0x0 0xe87ff000 0x0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               media2_crg: media2_crgctrl@e8900000 {
+                       compatible = "hisilicon,hi3670-media2-crg","syscon";
+                       reg = <0x0 0xe8900000 0x0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               uart0: serial@fdf02000 {
+                       compatible = "arm,pl011", "arm,primecell";
+                       reg = <0x0 0xfdf02000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&crg_ctrl HI3670_CLK_GATE_UART0>,
+                                <&crg_ctrl HI3670_PCLK>;
+                       clock-names = "uartclk", "apb_pclk";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&uart0_pmx_func &uart0_cfg_func>;
+                       status = "disabled";
+               };
+
+               uart1: serial@fdf00000 {
+                       compatible = "arm,pl011", "arm,primecell";
+                       reg = <0x0 0xfdf00000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&crg_ctrl HI3670_CLK_GATE_UART1>,
+                                <&crg_ctrl HI3670_PCLK>;
+                       clock-names = "uartclk", "apb_pclk";
+                       pinctrl-names = "default";
+                       status = "disabled";
+               };
+
+               uart2: serial@fdf03000 {
+                       compatible = "arm,pl011", "arm,primecell";
+                       reg = <0x0 0xfdf03000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&crg_ctrl HI3670_CLK_GATE_UART2>,
+                                <&crg_ctrl HI3670_PCLK>;
+                       clock-names = "uartclk", "apb_pclk";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&uart2_pmx_func &uart2_cfg_func>;
+                       status = "disabled";
+               };
+
+               uart3: serial@ffd74000 {
+                       compatible = "arm,pl011", "arm,primecell";
+                       reg = <0x0 0xffd74000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&crg_ctrl HI3670_CLK_GATE_UART3>,
+                                <&crg_ctrl HI3670_PCLK>;
+                       clock-names = "uartclk", "apb_pclk";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&uart3_pmx_func &uart3_cfg_func>;
+                       status = "disabled";
+               };
+
+               uart4: serial@fdf01000 {
+                       compatible = "arm,pl011", "arm,primecell";
+                       reg = <0x0 0xfdf01000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&crg_ctrl HI3670_CLK_GATE_UART4>,
+                                <&crg_ctrl HI3670_PCLK>;
+                       clock-names = "uartclk", "apb_pclk";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&uart4_pmx_func &uart4_cfg_func>;
+                       status = "disabled";
+               };
+
+               uart5: serial@fdf05000 {
+                       compatible = "arm,pl011", "arm,primecell";
+                       reg = <0x0 0xfdf05000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&crg_ctrl HI3670_CLK_GATE_UART5>,
+                                <&crg_ctrl HI3670_PCLK>;
+                       clock-names = "uartclk", "apb_pclk";
+                       pinctrl-names = "default";
+                       status = "disabled";
                };
 
                uart6: serial@fff32000 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x0 0xfff32000 0x0 0x1000>;
                        interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&uart6_clk &uart6_clk>;
+                       clocks = <&crg_ctrl HI3670_CLK_UART6>,
+                                <&crg_ctrl HI3670_PCLK>;
                        clock-names = "uartclk", "apb_pclk";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&uart6_pmx_func &uart6_cfg_func>;
                        status = "disabled";
                };
+
+               gpio0: gpio@e8a0b000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a0b000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 1 0 1 &pmx0 3 1 5>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO0>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio1: gpio@e8a0c000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a0c000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO1>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio2: gpio@e8a0d000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a0d000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 1 6 7>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO2>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio3: gpio@e8a0e000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a0e000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges =  <&pmx0 0 13 4 &pmx0 7 17 1>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO3>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio4: gpio@e8a0f000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a0f000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 0 18 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO4>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio5: gpio@e8a10000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a10000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 0 26 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO5>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio6: gpio@e8a11000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a11000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 1 34 7>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO6>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio7: gpio@e8a12000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a12000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 0 41 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO7>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio8: gpio@e8a13000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a13000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 0 49 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO8>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio9: gpio@e8a14000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a14000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 0 57 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO9>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio10: gpio@e8a15000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a15000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 0 65 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO10>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio11: gpio@e8a16000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a16000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 0 73 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO11>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio12: gpio@e8a17000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a17000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx0 0 81 1>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO12>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio13: gpio@e8a18000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a18000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO13>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio14: gpio@e8a19000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a19000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO14>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio15: gpio@e8a1a000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a1a000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO15>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio16: gpio@e8a1b000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a1b000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx5 0 0 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO16>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio17: gpio@e8a1c000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a1c000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx5 0 8 2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO17>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio18: gpio@fff28000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xfff28000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx1 4 42 4>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&sctrl HI3670_PCLK_GPIO18>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio19: gpio@fff29000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xfff29000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx1 0 61 2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&sctrl HI3670_PCLK_GPIO19>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio20: gpio@e8a1f000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a1f000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx7 0 0 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO20>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio21: gpio@e8a20000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xe8a20000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx7 0 8 4>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&crg_ctrl HI3670_PCLK_GPIO21>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio22: gpio@fff0b000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xfff0b000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       /* GPIO176 */
+                       gpio-ranges = <&pmx1 2 0 6>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&sctrl HI3670_PCLK_AO_GPIO0>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio23: gpio@fff0c000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xfff0c000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       /* GPIO184 */
+                       gpio-ranges = <&pmx1 0 6 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&sctrl HI3670_PCLK_AO_GPIO1>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio24: gpio@fff0d000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xfff0d000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       /* GPIO192 */
+                       gpio-ranges = <&pmx1 0 14 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&sctrl HI3670_PCLK_AO_GPIO2>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio25: gpio@fff0e000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xfff0e000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       /* GPIO200 */
+                       gpio-ranges = <&pmx1 0 22 8>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&sctrl HI3670_PCLK_AO_GPIO3>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio26: gpio@fff0f000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xfff0f000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       /* GPIO208 */
+                       gpio-ranges = <&pmx1 0 30 1>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&sctrl HI3670_PCLK_AO_GPIO4>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio27: gpio@fff10000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xfff10000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       /* GPIO216 */
+                       gpio-ranges = <&pmx1 4 31 4>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&sctrl HI3670_PCLK_AO_GPIO5>;
+                       clock-names = "apb_pclk";
+               };
+
+               gpio28: gpio@fff1d000 {
+                       compatible = "arm,pl061", "arm,primecell";
+                       reg = <0x0 0xfff1d000 0x0 0x1000>;
+                       interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pmx1 1 35 7>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+                       clocks = <&sctrl HI3670_PCLK_AO_GPIO6>;
+                       clock-names = "apb_pclk";
+               };
        };
 };
index d30f6eb..32716c9 100644 (file)
                compatible = "gpio-leds";
 
                user-led0 {
-                       label = "USER-LED0";
+                       label = "green:user1";
                        gpios = <&gpio6 3 GPIO_ACTIVE_LOW>;
                        linux,default-trigger = "heartbeat";
                        default-state = "off";
                };
 
                user-led1 {
-                       label = "USER-LED1";
+                       label = "green:user2";
                        gpios = <&gpio5 1 GPIO_ACTIVE_LOW>;
                        linux,default-trigger = "mmc0";
                        default-state = "off";
                };
 
                user-led2 {
-                       label = "USER-LED2";
+                       label = "green:user3";
                        gpios = <&gpio5 2 GPIO_ACTIVE_LOW>;
-                       linux,default-trigger = "none";
+                       linux,default-trigger = "mmc1";
                        default-state = "off";
                };
 
                user-led3 {
-                       label = "USER-LED3";
+                       label = "green:user4";
                        gpios = <&gpio10 6 GPIO_ACTIVE_LOW>;
-                       linux,default-trigger = "cpu0";
+                       linux,default-trigger = "none";
+                       panic-indicator;
                        default-state = "off";
                };
        };
index f4964be..6102350 100644 (file)
 
        leds {
                compatible = "gpio-leds";
-               user_led4 {
-                       label = "user_led4";
+
+               user_led1 {
+                       label = "green:user1";
                        gpios = <&gpio4 0 0>; /* <&gpio_user_led_1>; */
                        linux,default-trigger = "heartbeat";
                };
 
-               user_led3 {
-                       label = "user_led3";
+               user_led2 {
+                       label = "green:user2";
                        gpios = <&gpio4 1 0>; /* <&gpio_user_led_2>; */
                        linux,default-trigger = "mmc0";
                };
 
-               user_led2 {
-                       label = "user_led2";
+               user_led3 {
+                       label = "green:user3";
                        gpios = <&gpio4 2 0>; /* <&gpio_user_led_3>; */
                        linux,default-trigger = "mmc1";
                };
 
-               user_led1 {
-                       label = "user_led1";
+               user_led4 {
+                       label = "green:user4";
                        gpios = <&gpio4 3 0>; /* <&gpio_user_led_4>; */
                        panic-indicator;
-                       linux,default-trigger = "cpu0";
+                       linux,default-trigger = "none";
                };
 
                wlan_active_led {
-                       label = "wifi_active";
+                       label = "yellow:wlan";
                        gpios = <&gpio3 5 0>; /* <&gpio_wlan_active_led>; */
                        linux,default-trigger = "phy0tx";
                        default-state = "off";
                };
 
                bt_active_led {
-                       label = "bt_active";
+                       label = "blue:bt";
                        gpios = <&gpio4 7 0>; /* <&gpio_bt_active_led>; */
-                       linux,default-trigger = "hci0rx";
+                       linux,default-trigger = "hci0-power";
                        default-state = "off";
                };
        };
index 97d5bf2..aec9e37 100644 (file)
                                cooling-maps {
                                        map0 {
                                                trip = <&target>;
-                                               cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                               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 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>;
                                        };
                                };
                        };
diff --git a/arch/arm64/boot/dts/hisilicon/hikey970-pinctrl.dtsi b/arch/arm64/boot/dts/hisilicon/hikey970-pinctrl.dtsi
new file mode 100644 (file)
index 0000000..67bb52d
--- /dev/null
@@ -0,0 +1,244 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Pinctrl dts file for HiSilicon HiKey970 development board
+ */
+
+#include <dt-bindings/pinctrl/hisi.h>
+
+/ {
+       soc {
+               range: gpio-range {
+                       #pinctrl-single,gpio-range-cells = <3>;
+               };
+
+               pmx0: pinmux@e896c000 {
+                       compatible = "pinctrl-single";
+                       reg = <0x0 0xe896c000 0x0 0x72c>;
+                       #pinctrl-cells = <1>;
+                       #gpio-range-cells = <0x3>;
+                       pinctrl-single,register-width = <0x20>;
+                       pinctrl-single,function-mask = <0x7>;
+                       /* pin base, nr pins & gpio function */
+                       pinctrl-single,gpio-range = <&range 0 82 0>;
+
+                       uart0_pmx_func: uart0_pmx_func {
+                               pinctrl-single,pins = <
+                                       0x054 MUX_M2 /* UART0_RXD */
+                                       0x058 MUX_M2 /* UART0_TXD */
+                               >;
+                       };
+
+                       uart2_pmx_func: uart2_pmx_func {
+                               pinctrl-single,pins = <
+                                       0x700 MUX_M2 /* UART2_CTS_N */
+                                       0x704 MUX_M2 /* UART2_RTS_N */
+                                       0x708 MUX_M2 /* UART2_RXD */
+                                       0x70c MUX_M2 /* UART2_TXD */
+                               >;
+                       };
+
+                       uart3_pmx_func: uart3_pmx_func {
+                               pinctrl-single,pins = <
+                                       0x064 MUX_M1 /* UART3_CTS_N */
+                                       0x068 MUX_M1 /* UART3_RTS_N */
+                                       0x06c MUX_M1 /* UART3_RXD */
+                                       0x070 MUX_M1 /* UART3_TXD */
+                               >;
+                       };
+
+                       uart4_pmx_func: uart4_pmx_func {
+                               pinctrl-single,pins = <
+                                       0x074 MUX_M1 /* UART4_CTS_N */
+                                       0x078 MUX_M1 /* UART4_RTS_N */
+                                       0x07c MUX_M1 /* UART4_RXD */
+                                       0x080 MUX_M1 /* UART4_TXD */
+                               >;
+                       };
+
+                       uart6_pmx_func: uart6_pmx_func {
+                               pinctrl-single,pins = <
+                                       0x05c MUX_M1 /* UART6_RXD */
+                                       0x060 MUX_M1 /* UART6_TXD */
+                               >;
+                       };
+               };
+
+               pmx2: pinmux@e896c800 {
+                       compatible = "pinconf-single";
+                       reg = <0x0 0xe896c800 0x0 0x72c>;
+                       #pinctrl-cells = <1>;
+                       pinctrl-single,register-width = <0x20>;
+
+                       uart0_cfg_func: uart0_cfg_func {
+                               pinctrl-single,pins = <
+                                       0x058 0x0 /* UART0_RXD */
+                                       0x05c 0x0 /* UART0_TXD */
+                               >;
+                               pinctrl-single,bias-pulldown = <
+                                       PULL_DIS
+                                       PULL_DOWN
+                                       PULL_DIS
+                                       PULL_DOWN
+                               >;
+                               pinctrl-single,bias-pullup = <
+                                       PULL_DIS
+                                       PULL_UP
+                                       PULL_DIS
+                                       PULL_UP
+                               >;
+                               pinctrl-single,drive-strength = <
+                                       DRIVE7_04MA DRIVE6_MASK
+                               >;
+                       };
+
+                       uart2_cfg_func: uart2_cfg_func {
+                               pinctrl-single,pins = <
+                                       0x700 0x0 /* UART2_CTS_N */
+                                       0x704 0x0 /* UART2_RTS_N */
+                                       0x708 0x0 /* UART2_RXD */
+                                       0x70c 0x0 /* UART2_TXD */
+                               >;
+                               pinctrl-single,bias-pulldown = <
+                                       PULL_DIS
+                                       PULL_DOWN
+                                       PULL_DIS
+                                       PULL_DOWN
+                               >;
+                               pinctrl-single,bias-pullup = <
+                                       PULL_DIS
+                                       PULL_UP
+                                       PULL_DIS
+                                       PULL_UP
+                               >;
+                               pinctrl-single,drive-strength = <
+                                       DRIVE7_04MA DRIVE6_MASK
+                               >;
+                       };
+
+                       uart3_cfg_func: uart3_cfg_func {
+                               pinctrl-single,pins = <
+                                       0x068 0x0 /* UART3_CTS_N */
+                                       0x06c 0x0 /* UART3_RTS_N */
+                                       0x070 0x0 /* UART3_RXD */
+                                       0x074 0x0 /* UART3_TXD */
+                               >;
+                               pinctrl-single,bias-pulldown = <
+                                       PULL_DIS
+                                       PULL_DOWN
+                                       PULL_DIS
+                                       PULL_DOWN
+                               >;
+                               pinctrl-single,bias-pullup = <
+                                       PULL_DIS
+                                       PULL_UP
+                                       PULL_DIS
+                                       PULL_UP
+                               >;
+                               pinctrl-single,drive-strength = <
+                                       DRIVE7_04MA DRIVE6_MASK
+                               >;
+                       };
+
+                       uart4_cfg_func: uart4_cfg_func {
+                               pinctrl-single,pins = <
+                                       0x078 0x0 /* UART4_CTS_N */
+                                       0x07c 0x0 /* UART4_RTS_N */
+                                       0x080 0x0 /* UART4_RXD */
+                                       0x084 0x0 /* UART4_TXD */
+                               >;
+                               pinctrl-single,bias-pulldown = <
+                                       PULL_DIS
+                                       PULL_DOWN
+                                       PULL_DIS
+                                       PULL_DOWN
+                               >;
+                               pinctrl-single,bias-pullup = <
+                                       PULL_DIS
+                                       PULL_UP
+                                       PULL_DIS
+                                       PULL_UP
+                               >;
+                               pinctrl-single,drive-strength = <
+                                       DRIVE7_04MA DRIVE6_MASK
+                               >;
+                       };
+
+                       uart6_cfg_func: uart6_cfg_func {
+                               pinctrl-single,pins = <
+                                       0x060 0x0 /* UART6_RXD */
+                                       0x064 0x0 /* UART6_TXD */
+                               >;
+                               pinctrl-single,bias-pulldown = <
+                                       PULL_DIS
+                                       PULL_DOWN
+                                       PULL_DIS
+                                       PULL_DOWN
+                               >;
+                               pinctrl-single,bias-pullup = <
+                                       PULL_DIS
+                                       PULL_UP
+                                       PULL_DIS
+                                       PULL_UP
+                               >;
+                               pinctrl-single,drive-strength = <
+                                       DRIVE7_02MA DRIVE6_MASK
+                               >;
+                       };
+               };
+
+               pmx5: pinmux@fc182000 {
+                       compatible = "pinctrl-single";
+                       reg = <0x0 0xfc182000 0x0 0x028>;
+                       #gpio-range-cells = <3>;
+                       #pinctrl-cells = <1>;
+                       pinctrl-single,register-width = <0x20>;
+                       pinctrl-single,function-mask = <0x7>;
+                       /* pin base, nr pins & gpio function */
+                       pinctrl-single,gpio-range = <&range 0 10 0>;
+
+               };
+
+               pmx6: pinmux@fc182800 {
+                       compatible = "pinconf-single";
+                       reg = <0x0 0xfc182800 0x0 0x028>;
+                       #pinctrl-cells = <1>;
+                       pinctrl-single,register-width = <0x20>;
+               };
+
+               pmx7: pinmux@ff37e000 {
+                       compatible = "pinctrl-single";
+                       reg = <0x0 0xff37e000 0x0 0x030>;
+                       #gpio-range-cells = <3>;
+                       #pinctrl-cells = <1>;
+                       pinctrl-single,register-width = <0x20>;
+                       pinctrl-single,function-mask = <7>;
+                       /* pin base, nr pins & gpio function */
+                       pinctrl-single,gpio-range = <&range 0 12 0>;
+               };
+
+               pmx8: pinmux@ff37e800 {
+                       compatible = "pinconf-single";
+                       reg = <0x0 0xff37e800 0x0 0x030>;
+                       #pinctrl-cells = <1>;
+                       pinctrl-single,register-width = <0x20>;
+               };
+
+               pmx1: pinmux@fff11000 {
+                       compatible = "pinctrl-single";
+                       reg = <0x0 0xfff11000 0x0 0x73c>;
+                       #gpio-range-cells = <0x3>;
+                       #pinctrl-cells = <1>;
+                       pinctrl-single,register-width = <0x20>;
+                       pinctrl-single,function-mask = <0x7>;
+                       /* pin base, nr pins & gpio function */
+                       pinctrl-single,gpio-range = <&range 0 46 0>;
+               };
+
+               pmx16: pinmux@fff11800 {
+                       compatible = "pinconf-single";
+                       reg = <0x0 0xfff11800 0x0 0x73c>;
+                       #pinctrl-cells = <1>;
+                       pinctrl-single,register-width = <0x20>;
+               };
+       };
+};
index eca8bac..2eff1f9 100644 (file)
@@ -6,4 +6,5 @@ dtb-$(CONFIG_ARCH_MVEBU) += armada-7040-db.dtb
 dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-clearfog-gt-8k.dtb
 dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-db.dtb
 dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-mcbin.dtb
+dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-mcbin-singleshot.dtb
 dtb-$(CONFIG_ARCH_MVEBU) += armada-8080-db.dtb
index 3ab25ad..846003b 100644 (file)
        cd-gpios = <&gpionb 3 GPIO_ACTIVE_LOW>;
        marvell,pad-type = "sd";
        vqmmc-supply = <&vcc_sd_reg1>;
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&sdio_pins>;
        status = "okay";
 };
 
+/* U11 */
+&sdhci0 {
+       non-removable;
+       bus-width = <8>;
+       mmc-ddr-1_8v;
+       mmc-hs400-1_8v;
+       marvell,xenon-emmc;
+       marvell,xenon-tun-count = <9>;
+       marvell,pad-type = "fixed-1-8v";
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc_pins>;
+/*
+ * This eMMC is not populated on all boards, so disable it by
+ * default and let the bootloader enable it, if it is present
+ */
+       status = "disabled";
+};
+
 &spi0 {
        status = "okay";
 
index 4472bcd..e05594e 100644 (file)
                                        groups = "uart2";
                                        function = "uart";
                                };
+
+                               mmc_pins: mmc-pins {
+                                       groups = "emmc_nb";
+                                       function = "emmc";
+                               };
                        };
 
                        nb_pm: syscon@14000 {
                                        function = "mii";
                                };
 
+                               sdio_pins: sdio-pins {
+                                       groups = "sdio_sb";
+                                       function = "sdio";
+                               };
+
                        };
 
                        eth0: ethernet@30000 {
index 9473d40..5b4a960 100644 (file)
@@ -42,7 +42,7 @@
 
        v_5v0_usb3_hst_vbus: regulator-usb3-vbus0 {
                compatible = "regulator-fixed";
-               gpio = <&cp0_gpio2 15 GPIO_ACTIVE_HIGH>;
+               gpio = <&cp0_gpio2 15 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&cp0_xhci_vbus_pins>;
                regulator-name = "v_5v0_usb3_hst_vbus";
                gpios = <1 GPIO_ACTIVE_HIGH>;
                output-high;
        };
+
+       lte_reset {
+               gpio-hog;
+               gpios = <2 GPIO_ACTIVE_LOW>;
+               output-low;
+       };
+
+       lte_disable {
+               gpio-hog;
+               gpios = <21 GPIO_ACTIVE_LOW>;
+               output-low;
+       };
 };
 
 &cp0_ethernet {
        vqmmc-supply = <&v_3_3>;
 };
 
+&cp0_usb3_1 {
+       status = "okay";
+};
+
 &cp1_pinctrl {
        /*
         * MPP Bus:
                 */
                marvell,reg-init = <3 16 0 0x1017>;
                reg = <0>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&cp0_copper_eth_phy_reset>;
+               reset-gpios = <&cp1_gpio1 11 GPIO_ACTIVE_LOW>;
+               reset-assert-us = <10000>;
        };
 
        switch0: switch0@4 {
diff --git a/arch/arm64/boot/dts/marvell/armada-8040-mcbin-singleshot.dts b/arch/arm64/boot/dts/marvell/armada-8040-mcbin-singleshot.dts
new file mode 100644 (file)
index 0000000..c3e18fd
--- /dev/null
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2016 Marvell Technology Group Ltd.
+ *
+ * Device Tree file for MACCHIATOBin Armada 8040 community board platform
+ */
+
+#include "armada-8040-mcbin.dtsi"
+
+/ {
+       model = "Marvell 8040 MACCHIATOBin Single-shot";
+       compatible = "marvell,armada8040-mcbin-singleshot",
+                       "marvell,armada8040-mcbin", "marvell,armada8040",
+                       "marvell,armada-ap806-quad", "marvell,armada-ap806";
+};
+
+&cp0_eth0 {
+       status = "okay";
+       phy-mode = "10gbase-kr";
+       managed = "in-band-status";
+       sfp = <&sfp_eth0>;
+};
+
+&cp1_eth0 {
+       status = "okay";
+       phy-mode = "10gbase-kr";
+       managed = "in-band-status";
+       sfp = <&sfp_eth1>;
+};
index 56fa448..d06f5ab 100644 (file)
  * Device Tree file for MACCHIATOBin Armada 8040 community board platform
  */
 
-#include "armada-8040.dtsi"
-
-#include <dt-bindings/gpio/gpio.h>
+#include "armada-8040-mcbin.dtsi"
 
 / {
-       model = "Marvell 8040 MACCHIATOBin";
-       compatible = "marvell,armada8040-mcbin", "marvell,armada8040",
+       model = "Marvell 8040 MACCHIATOBin Double-shot";
+       compatible = "marvell,armada8040-mcbin-doubleshot",
+                       "marvell,armada8040-mcbin", "marvell,armada8040",
                        "marvell,armada-ap806-quad", "marvell,armada-ap806";
-
-       chosen {
-               stdout-path = "serial0:115200n8";
-       };
-
-       memory@0 {
-               device_type = "memory";
-               reg = <0x0 0x0 0x0 0x80000000>;
-       };
-
-       aliases {
-               ethernet0 = &cp0_eth0;
-               ethernet1 = &cp1_eth0;
-               ethernet2 = &cp1_eth1;
-               ethernet3 = &cp1_eth2;
-       };
-
-       /* Regulator labels correspond with schematics */
-       v_3_3: regulator-3-3v {
-               compatible = "regulator-fixed";
-               regulator-name = "v_3_3";
-               regulator-min-microvolt = <3300000>;
-               regulator-max-microvolt = <3300000>;
-               regulator-always-on;
-               status = "okay";
-       };
-
-       v_vddo_h: regulator-1-8v {
-               compatible = "regulator-fixed";
-               regulator-name = "v_vddo_h";
-               regulator-min-microvolt = <1800000>;
-               regulator-max-microvolt = <1800000>;
-               regulator-always-on;
-               status = "okay";
-       };
-
-       v_5v0_usb3_hst_vbus: regulator-usb3-vbus0 {
-               compatible = "regulator-fixed";
-               enable-active-high;
-               gpio = <&cp0_gpio2 15 GPIO_ACTIVE_HIGH>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&cp0_xhci_vbus_pins>;
-               regulator-name = "v_5v0_usb3_hst_vbus";
-               regulator-min-microvolt = <5000000>;
-               regulator-max-microvolt = <5000000>;
-               status = "okay";
-       };
-
-       usb3h0_phy: usb3_phy0 {
-               compatible = "usb-nop-xceiv";
-               vcc-supply = <&v_5v0_usb3_hst_vbus>;
-       };
-
-       sfp_eth0: sfp-eth0 {
-               /* CON15,16 - CPM lane 4 */
-               compatible = "sff,sfp";
-               i2c-bus = <&sfpp0_i2c>;
-               los-gpio = <&cp1_gpio1 28 GPIO_ACTIVE_HIGH>;
-               mod-def0-gpio = <&cp1_gpio1 27 GPIO_ACTIVE_LOW>;
-               tx-disable-gpio = <&cp1_gpio1 29 GPIO_ACTIVE_HIGH>;
-               tx-fault-gpio  = <&cp1_gpio1 26 GPIO_ACTIVE_HIGH>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&cp1_sfpp0_pins>;
-       };
-
-       sfp_eth1: sfp-eth1 {
-               /* CON17,18 - CPS lane 4 */
-               compatible = "sff,sfp";
-               i2c-bus = <&sfpp1_i2c>;
-               los-gpio = <&cp1_gpio1 8 GPIO_ACTIVE_HIGH>;
-               mod-def0-gpio = <&cp1_gpio1 11 GPIO_ACTIVE_LOW>;
-               tx-disable-gpio = <&cp1_gpio1 10 GPIO_ACTIVE_HIGH>;
-               tx-fault-gpio = <&cp0_gpio2 30 GPIO_ACTIVE_HIGH>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&cp1_sfpp1_pins &cp0_sfpp1_pins>;
-       };
-
-       sfp_eth3: sfp-eth3 {
-               /* CON13,14 - CPS lane 5 */
-               compatible = "sff,sfp";
-               i2c-bus = <&sfp_1g_i2c>;
-               los-gpio = <&cp0_gpio2 22 GPIO_ACTIVE_HIGH>;
-               mod-def0-gpio = <&cp0_gpio2 21 GPIO_ACTIVE_LOW>;
-               tx-disable-gpio = <&cp1_gpio1 24 GPIO_ACTIVE_HIGH>;
-               tx-fault-gpio = <&cp0_gpio2 19 GPIO_ACTIVE_HIGH>;
-               pinctrl-names = "default";
-               pinctrl-0 = <&cp0_sfp_1g_pins &cp1_sfp_1g_pins>;
-       };
-};
-
-&uart0 {
-       status = "okay";
-       pinctrl-0 = <&uart0_pins>;
-       pinctrl-names = "default";
-};
-
-&ap_sdhci0 {
-       bus-width = <8>;
-       /*
-        * Not stable in HS modes - phy needs "more calibration", so add
-        * the "slow-mode" and disable SDR104, SDR50 and DDR50 modes.
-        */
-       marvell,xenon-phy-slow-mode;
-       no-1-8-v;
-       no-sd;
-       no-sdio;
-       non-removable;
-       status = "okay";
-       vqmmc-supply = <&v_vddo_h>;
-};
-
-&cp0_i2c0 {
-       clock-frequency = <100000>;
-       pinctrl-names = "default";
-       pinctrl-0 = <&cp0_i2c0_pins>;
-       status = "okay";
-};
-
-&cp0_i2c1 {
-       clock-frequency = <100000>;
-       pinctrl-names = "default";
-       pinctrl-0 = <&cp0_i2c1_pins>;
-       status = "okay";
-
-       i2c-switch@70 {
-               compatible = "nxp,pca9548";
-               #address-cells = <1>;
-               #size-cells = <0>;
-               reg = <0x70>;
-
-               sfpp0_i2c: i2c@0 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       reg = <0>;
-               };
-               sfpp1_i2c: i2c@1 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       reg = <1>;
-               };
-               sfp_1g_i2c: i2c@2 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       reg = <2>;
-               };
-       };
-};
-
-/* J25 UART header */
-&cp0_uart1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&cp0_uart1_pins>;
-       status = "okay";
-};
-
-&cp0_mdio {
-       pinctrl-names = "default";
-       pinctrl-0 = <&cp0_ge_mdio_pins>;
-       status = "okay";
-
-       ge_phy: ethernet-phy@0 {
-               reg = <0>;
-       };
-};
-
-&cp0_pcie0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&cp0_pcie_pins>;
-       num-lanes = <4>;
-       num-viewport = <8>;
-       reset-gpio = <&cp0_gpio1 20 GPIO_ACTIVE_LOW>;
-       status = "okay";
-};
-
-&cp0_pinctrl {
-       cp0_ge_mdio_pins: ge-mdio-pins {
-               marvell,pins = "mpp32", "mpp34";
-               marvell,function = "ge";
-       };
-       cp0_i2c1_pins: i2c1-pins {
-               marvell,pins = "mpp35", "mpp36";
-               marvell,function = "i2c1";
-       };
-       cp0_i2c0_pins: i2c0-pins {
-               marvell,pins = "mpp37", "mpp38";
-               marvell,function = "i2c0";
-       };
-       cp0_uart1_pins: uart1-pins {
-               marvell,pins = "mpp40", "mpp41";
-               marvell,function = "uart1";
-       };
-       cp0_xhci_vbus_pins: xhci0-vbus-pins {
-               marvell,pins = "mpp47";
-               marvell,function = "gpio";
-       };
-       cp0_sfp_1g_pins: sfp-1g-pins {
-               marvell,pins = "mpp51", "mpp53", "mpp54";
-               marvell,function = "gpio";
-       };
-       cp0_pcie_pins: pcie-pins {
-               marvell,pins = "mpp52";
-               marvell,function = "gpio";
-       };
-       cp0_sdhci_pins: sdhci-pins {
-               marvell,pins = "mpp55", "mpp56", "mpp57", "mpp58", "mpp59",
-                              "mpp60", "mpp61";
-               marvell,function = "sdio";
-       };
-       cp0_sfpp1_pins: sfpp1-pins {
-               marvell,pins = "mpp62";
-               marvell,function = "gpio";
-       };
 };
 
 &cp0_xmdio {
        };
 };
 
-&cp0_ethernet {
-       status = "okay";
-};
-
 &cp0_eth0 {
        status = "okay";
        /* Network PHY */
        phy = <&phy0>;
        phy-mode = "10gbase-kr";
-       /* Generic PHY, providing serdes lanes */
-       phys = <&cp0_comphy4 0>;
-};
-
-&cp0_sata0 {
-       /* CPM Lane 0 - U29 */
-       status = "okay";
-};
-
-&cp0_sdhci0 {
-       /* U6 */
-       broken-cd;
-       bus-width = <4>;
-       pinctrl-names = "default";
-       pinctrl-0 = <&cp0_sdhci_pins>;
-       status = "okay";
-       vqmmc-supply = <&v_3_3>;
-};
-
-&cp0_usb3_0 {
-       /* J38? - USB2.0 only */
-       status = "okay";
-};
-
-&cp0_usb3_1 {
-       /* J38? - USB2.0 only */
-       status = "okay";
-};
-
-&cp1_ethernet {
-       status = "okay";
 };
 
 &cp1_eth0 {
        /* Network PHY */
        phy = <&phy8>;
        phy-mode = "10gbase-kr";
-       /* Generic PHY, providing serdes lanes */
-       phys = <&cp1_comphy4 0>;
-};
-
-&cp1_eth1 {
-       /* CPS Lane 0 - J5 (Gigabit RJ45) */
-       status = "okay";
-       /* Network PHY */
-       phy = <&ge_phy>;
-       phy-mode = "sgmii";
-       /* Generic PHY, providing serdes lanes */
-       phys = <&cp1_comphy0 1>;
-};
-
-&cp1_eth2 {
-       /* CPS Lane 5 */
-       status = "okay";
-       /* Network PHY */
-       phy-mode = "2500base-x";
-       managed = "in-band-status";
-       /* Generic PHY, providing serdes lanes */
-       phys = <&cp1_comphy5 2>;
-       sfp = <&sfp_eth3>;
-};
-
-&cp1_pinctrl {
-       cp1_sfpp1_pins: sfpp1-pins {
-               marvell,pins = "mpp8", "mpp10", "mpp11";
-               marvell,function = "gpio";
-       };
-       cp1_spi1_pins: spi1-pins {
-               marvell,pins = "mpp12", "mpp13", "mpp14", "mpp15", "mpp16";
-               marvell,function = "spi1";
-       };
-       cp1_uart0_pins: uart0-pins {
-               marvell,pins = "mpp6", "mpp7";
-               marvell,function = "uart0";
-       };
-       cp1_sfp_1g_pins: sfp-1g-pins {
-               marvell,pins = "mpp24";
-               marvell,function = "gpio";
-       };
-       cp1_sfpp0_pins: sfpp0-pins {
-               marvell,pins = "mpp26", "mpp27", "mpp28", "mpp29";
-               marvell,function = "gpio";
-       };
-};
-
-/* J27 UART header */
-&cp1_uart0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&cp1_uart0_pins>;
-       status = "okay";
-};
-
-&cp1_sata0 {
-       /* CPS Lane 1 - U32 */
-       /* CPS Lane 3 - U31 */
-       status = "okay";
-};
-
-&cp1_spi1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&cp1_spi1_pins>;
-       status = "okay";
-
-       spi-flash@0 {
-               compatible = "st,w25q32";
-               spi-max-frequency = <50000000>;
-               reg = <0>;
-       };
-};
-
-&cp1_usb3_0 {
-       /* CPS Lane 2 - CON7 */
-       usb-phy = <&usb3h0_phy>;
-       status = "okay";
 };
diff --git a/arch/arm64/boot/dts/marvell/armada-8040-mcbin.dtsi b/arch/arm64/boot/dts/marvell/armada-8040-mcbin.dtsi
new file mode 100644 (file)
index 0000000..29ea7e8
--- /dev/null
@@ -0,0 +1,346 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2016 Marvell Technology Group Ltd.
+ *
+ * Device Tree file for MACCHIATOBin Armada 8040 community board platform
+ */
+
+#include "armada-8040.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       model = "Marvell 8040 MACCHIATOBin";
+       compatible = "marvell,armada8040-mcbin", "marvell,armada8040",
+                       "marvell,armada-ap806-quad", "marvell,armada-ap806";
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory@0 {
+               device_type = "memory";
+               reg = <0x0 0x0 0x0 0x80000000>;
+       };
+
+       aliases {
+               ethernet0 = &cp0_eth0;
+               ethernet1 = &cp1_eth0;
+               ethernet2 = &cp1_eth1;
+               ethernet3 = &cp1_eth2;
+       };
+
+       /* Regulator labels correspond with schematics */
+       v_3_3: regulator-3-3v {
+               compatible = "regulator-fixed";
+               regulator-name = "v_3_3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+               status = "okay";
+       };
+
+       v_vddo_h: regulator-1-8v {
+               compatible = "regulator-fixed";
+               regulator-name = "v_vddo_h";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
+               status = "okay";
+       };
+
+       v_5v0_usb3_hst_vbus: regulator-usb3-vbus0 {
+               compatible = "regulator-fixed";
+               enable-active-high;
+               gpio = <&cp0_gpio2 15 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&cp0_xhci_vbus_pins>;
+               regulator-name = "v_5v0_usb3_hst_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               status = "okay";
+       };
+
+       usb3h0_phy: usb3_phy0 {
+               compatible = "usb-nop-xceiv";
+               vcc-supply = <&v_5v0_usb3_hst_vbus>;
+       };
+
+       sfp_eth0: sfp-eth0 {
+               /* CON15,16 - CPM lane 4 */
+               compatible = "sff,sfp";
+               i2c-bus = <&sfpp0_i2c>;
+               los-gpio = <&cp1_gpio1 28 GPIO_ACTIVE_HIGH>;
+               mod-def0-gpio = <&cp1_gpio1 27 GPIO_ACTIVE_LOW>;
+               tx-disable-gpio = <&cp1_gpio1 29 GPIO_ACTIVE_HIGH>;
+               tx-fault-gpio  = <&cp1_gpio1 26 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&cp1_sfpp0_pins>;
+       };
+
+       sfp_eth1: sfp-eth1 {
+               /* CON17,18 - CPS lane 4 */
+               compatible = "sff,sfp";
+               i2c-bus = <&sfpp1_i2c>;
+               los-gpio = <&cp1_gpio1 8 GPIO_ACTIVE_HIGH>;
+               mod-def0-gpio = <&cp1_gpio1 11 GPIO_ACTIVE_LOW>;
+               tx-disable-gpio = <&cp1_gpio1 10 GPIO_ACTIVE_HIGH>;
+               tx-fault-gpio = <&cp0_gpio2 30 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&cp1_sfpp1_pins &cp0_sfpp1_pins>;
+       };
+
+       sfp_eth3: sfp-eth3 {
+               /* CON13,14 - CPS lane 5 */
+               compatible = "sff,sfp";
+               i2c-bus = <&sfp_1g_i2c>;
+               los-gpio = <&cp0_gpio2 22 GPIO_ACTIVE_HIGH>;
+               mod-def0-gpio = <&cp0_gpio2 21 GPIO_ACTIVE_LOW>;
+               tx-disable-gpio = <&cp1_gpio1 24 GPIO_ACTIVE_HIGH>;
+               tx-fault-gpio = <&cp0_gpio2 19 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&cp0_sfp_1g_pins &cp1_sfp_1g_pins>;
+       };
+};
+
+&uart0 {
+       status = "okay";
+       pinctrl-0 = <&uart0_pins>;
+       pinctrl-names = "default";
+};
+
+&ap_sdhci0 {
+       bus-width = <8>;
+       /*
+        * Not stable in HS modes - phy needs "more calibration", so add
+        * the "slow-mode" and disable SDR104, SDR50 and DDR50 modes.
+        */
+       marvell,xenon-phy-slow-mode;
+       no-1-8-v;
+       no-sd;
+       no-sdio;
+       non-removable;
+       status = "okay";
+       vqmmc-supply = <&v_vddo_h>;
+};
+
+&cp0_i2c0 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&cp0_i2c0_pins>;
+       status = "okay";
+};
+
+&cp0_i2c1 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&cp0_i2c1_pins>;
+       status = "okay";
+
+       i2c-switch@70 {
+               compatible = "nxp,pca9548";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0x70>;
+
+               sfpp0_i2c: i2c@0 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0>;
+               };
+               sfpp1_i2c: i2c@1 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <1>;
+               };
+               sfp_1g_i2c: i2c@2 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <2>;
+               };
+       };
+};
+
+/* J25 UART header */
+&cp0_uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&cp0_uart1_pins>;
+       status = "okay";
+};
+
+&cp0_mdio {
+       pinctrl-names = "default";
+       pinctrl-0 = <&cp0_ge_mdio_pins>;
+       status = "okay";
+
+       ge_phy: ethernet-phy@0 {
+               reg = <0>;
+       };
+};
+
+&cp0_pcie0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&cp0_pcie_pins>;
+       num-lanes = <4>;
+       num-viewport = <8>;
+       reset-gpio = <&cp0_gpio1 20 GPIO_ACTIVE_LOW>;
+       status = "okay";
+};
+
+&cp0_pinctrl {
+       cp0_ge_mdio_pins: ge-mdio-pins {
+               marvell,pins = "mpp32", "mpp34";
+               marvell,function = "ge";
+       };
+       cp0_i2c1_pins: i2c1-pins {
+               marvell,pins = "mpp35", "mpp36";
+               marvell,function = "i2c1";
+       };
+       cp0_i2c0_pins: i2c0-pins {
+               marvell,pins = "mpp37", "mpp38";
+               marvell,function = "i2c0";
+       };
+       cp0_uart1_pins: uart1-pins {
+               marvell,pins = "mpp40", "mpp41";
+               marvell,function = "uart1";
+       };
+       cp0_xhci_vbus_pins: xhci0-vbus-pins {
+               marvell,pins = "mpp47";
+               marvell,function = "gpio";
+       };
+       cp0_sfp_1g_pins: sfp-1g-pins {
+               marvell,pins = "mpp51", "mpp53", "mpp54";
+               marvell,function = "gpio";
+       };
+       cp0_pcie_pins: pcie-pins {
+               marvell,pins = "mpp52";
+               marvell,function = "gpio";
+       };
+       cp0_sdhci_pins: sdhci-pins {
+               marvell,pins = "mpp55", "mpp56", "mpp57", "mpp58", "mpp59",
+                              "mpp60", "mpp61";
+               marvell,function = "sdio";
+       };
+       cp0_sfpp1_pins: sfpp1-pins {
+               marvell,pins = "mpp62";
+               marvell,function = "gpio";
+       };
+};
+
+&cp0_ethernet {
+       status = "okay";
+};
+
+&cp0_eth0 {
+       /* Generic PHY, providing serdes lanes */
+       phys = <&cp0_comphy4 0>;
+};
+
+&cp0_sata0 {
+       /* CPM Lane 0 - U29 */
+       status = "okay";
+};
+
+&cp0_sdhci0 {
+       /* U6 */
+       broken-cd;
+       bus-width = <4>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&cp0_sdhci_pins>;
+       status = "okay";
+       vqmmc-supply = <&v_3_3>;
+};
+
+&cp0_usb3_0 {
+       /* J38? - USB2.0 only */
+       status = "okay";
+};
+
+&cp0_usb3_1 {
+       /* J38? - USB2.0 only */
+       status = "okay";
+};
+
+&cp1_ethernet {
+       status = "okay";
+};
+
+&cp1_eth0 {
+       /* Generic PHY, providing serdes lanes */
+       phys = <&cp1_comphy4 0>;
+};
+
+&cp1_eth1 {
+       /* CPS Lane 0 - J5 (Gigabit RJ45) */
+       status = "okay";
+       /* Network PHY */
+       phy = <&ge_phy>;
+       phy-mode = "sgmii";
+       /* Generic PHY, providing serdes lanes */
+       phys = <&cp1_comphy0 1>;
+};
+
+&cp1_eth2 {
+       /* CPS Lane 5 */
+       status = "okay";
+       /* Network PHY */
+       phy-mode = "2500base-x";
+       managed = "in-band-status";
+       /* Generic PHY, providing serdes lanes */
+       phys = <&cp1_comphy5 2>;
+       sfp = <&sfp_eth3>;
+};
+
+&cp1_pinctrl {
+       cp1_sfpp1_pins: sfpp1-pins {
+               marvell,pins = "mpp8", "mpp10", "mpp11";
+               marvell,function = "gpio";
+       };
+       cp1_spi1_pins: spi1-pins {
+               marvell,pins = "mpp12", "mpp13", "mpp14", "mpp15", "mpp16";
+               marvell,function = "spi1";
+       };
+       cp1_uart0_pins: uart0-pins {
+               marvell,pins = "mpp6", "mpp7";
+               marvell,function = "uart0";
+       };
+       cp1_sfp_1g_pins: sfp-1g-pins {
+               marvell,pins = "mpp24";
+               marvell,function = "gpio";
+       };
+       cp1_sfpp0_pins: sfpp0-pins {
+               marvell,pins = "mpp26", "mpp27", "mpp28", "mpp29";
+               marvell,function = "gpio";
+       };
+};
+
+/* J27 UART header */
+&cp1_uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&cp1_uart0_pins>;
+       status = "okay";
+};
+
+&cp1_sata0 {
+       /* CPS Lane 1 - U32 */
+       /* CPS Lane 3 - U31 */
+       status = "okay";
+};
+
+&cp1_spi1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&cp1_spi1_pins>;
+       status = "okay";
+
+       spi-flash@0 {
+               compatible = "st,w25q32";
+               spi-max-frequency = <50000000>;
+               reg = <0>;
+       };
+};
+
+&cp1_usb3_0 {
+       /* CPS Lane 2 - CON7 */
+       usb-phy = <&usb3h0_phy>;
+       status = "okay";
+};
index abd2f15..412ffd4 100644 (file)
@@ -18,6 +18,7 @@
 #include <dt-bindings/phy/phy.h>
 #include <dt-bindings/power/mt8173-power.h>
 #include <dt-bindings/reset/mt8173-resets.h>
+#include <dt-bindings/gce/mt8173-gce.h>
 #include "mt8173-pinfunc.h"
 
 / {
                        status = "disabled";
                };
 
+               gce: mailbox@10212000 {
+                       compatible = "mediatek,mt8173-gce";
+                       reg = <0 0x10212000 0 0x1000>;
+                       interrupts = <GIC_SPI 135 IRQ_TYPE_LEVEL_LOW>;
+                       clocks = <&infracfg CLK_INFRA_GCE>;
+                       clock-names = "gce";
+                       #mbox-cells = <3>;
+               };
+
                mipi_tx0: mipi-dphy@10215000 {
                        compatible = "mediatek,mt8173-mipi-tx";
                        reg = <0 0x10215000 0 0x1000>;
index bd5305a..65487ee 100644 (file)
@@ -2,6 +2,7 @@
 /dts-v1/;
 
 #include <dt-bindings/input/linux-event-codes.h>
+#include <dt-bindings/input/gpio-keys.h>
 
 #include "tegra186-p3310.dtsi"
 
                vmmc-supply = <&vdd_sd>;
        };
 
+       hda@3510000 {
+               status = "okay";
+       };
+
        pcie@10003000 {
                status = "okay";
 
                        linux,input-type = <EV_KEY>;
                        linux,code = <KEY_POWER>;
                        debounce-interval = <10>;
+                       wakeup-event-action = <EV_ACT_ASSERTED>;
                        wakeup-source;
                };
 
index 13f57ff..b539561 100644 (file)
                status = "okay";
        };
 
+       rtc@c2a0000 {
+               status = "okay";
+       };
+
        pmc@c360000 {
                nvidia,invert-interrupt;
        };
index 2f3c8e2..22815db 100644 (file)
                clock-names = "sdhci";
                resets = <&bpmp TEGRA186_RESET_SDMMC1>;
                reset-names = "sdhci";
+               iommus = <&smmu TEGRA186_SID_SDMMC1>;
                pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
                pinctrl-0 = <&sdmmc1_3v3>;
                pinctrl-1 = <&sdmmc1_1v8>;
                clock-names = "sdhci";
                resets = <&bpmp TEGRA186_RESET_SDMMC2>;
                reset-names = "sdhci";
+               iommus = <&smmu TEGRA186_SID_SDMMC2>;
                pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
                pinctrl-0 = <&sdmmc2_3v3>;
                pinctrl-1 = <&sdmmc2_1v8>;
                clock-names = "sdhci";
                resets = <&bpmp TEGRA186_RESET_SDMMC3>;
                reset-names = "sdhci";
+               iommus = <&smmu TEGRA186_SID_SDMMC3>;
                pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
                pinctrl-0 = <&sdmmc3_3v3>;
                pinctrl-1 = <&sdmmc3_1v8>;
                assigned-clock-parents = <&bpmp TEGRA186_CLK_PLLC4_VCO>;
                resets = <&bpmp TEGRA186_RESET_SDMMC4>;
                reset-names = "sdhci";
+               iommus = <&smmu TEGRA186_SID_SDMMC4>;
                nvidia,pad-autocal-pull-up-offset-hs400 = <0x05>;
                nvidia,pad-autocal-pull-down-offset-hs400 = <0x05>;
                nvidia,pad-autocal-pull-up-offset-1v8-timeout = <0x0a>;
                status = "disabled";
        };
 
+       hda@3510000 {
+               compatible = "nvidia,tegra186-hda", "nvidia,tegra30-hda";
+               reg = <0x0 0x03510000 0x0 0x10000>;
+               interrupts = <GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&bpmp TEGRA186_CLK_HDA>,
+                        <&bpmp TEGRA186_CLK_HDA2HDMICODEC>,
+                        <&bpmp TEGRA186_CLK_HDA2CODEC_2X>;
+               clock-names = "hda", "hda2hdmi", "hda2codec_2x";
+               resets = <&bpmp TEGRA186_RESET_HDA>,
+                        <&bpmp TEGRA186_RESET_HDA2HDMICODEC>,
+                        <&bpmp TEGRA186_RESET_HDA2CODEC_2X>;
+               reset-names = "hda", "hda2hdmi", "hda2codec_2x";
+               power-domains = <&bpmp TEGRA186_POWER_DOMAIN_DISP>;
+               status = "disabled";
+       };
+
        fuse@3820000 {
                compatible = "nvidia,tegra186-efuse";
                reg = <0x0 0x03820000 0x0 0x10000>;
                interrupt-parent = <&gic>;
        };
 
+       cec@3960000 {
+               compatible = "nvidia,tegra186-cec";
+               reg = <0x0 0x03960000 0x0 0x10000>;
+               interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&bpmp TEGRA186_CLK_CEC>;
+               clock-names = "cec";
+               status = "disabled";
+       };
+
        hsp_top0: hsp@3c00000 {
                compatible = "nvidia,tegra186-hsp";
                reg = <0x0 0x03c00000 0x0 0xa0000>;
                status = "disabled";
        };
 
+       rtc: rtc@c2a0000 {
+               compatible = "nvidia,tegra186-rtc", "nvidia,tegra20-rtc";
+               reg = <0 0x0c2a0000 0 0x10000>;
+               interrupt-parent = <&pmc>;
+               interrupts = <73 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&bpmp TEGRA186_CLK_CLK_32K>;
+               clock-names = "rtc";
+               status = "disabled";
+       };
+
        gpio_aon: gpio@c2f0000 {
                compatible = "nvidia,tegra186-gpio-aon";
                reg-names = "security", "gpio";
                #interrupt-cells = <2>;
        };
 
-       pmc@c360000 {
+       pmc: pmc@c360000 {
                compatible = "nvidia,tegra186-pmc";
                reg = <0 0x0c360000 0 0x10000>,
                      <0 0x0c370000 0 0x10000>,
                      <0 0x0c390000 0 0x10000>;
                reg-names = "pmc", "wake", "aotag", "scratch";
 
+               #interrupt-cells = <2>;
+               interrupt-controller;
+
                sdmmc1_3v3: sdmmc1-3v3 {
                        pins = "sdmmc1-hv";
                        power-source = <TEGRA_IO_PAD_VOLTAGE_3V3>;
 
                display-hub@15200000 {
                        compatible = "nvidia,tegra186-display", "simple-bus";
+                       reg = <0x15200000 0x00040000>;
                        resets = <&bpmp TEGRA186_RESET_NVDISPLAY0_MISC>,
                                 <&bpmp TEGRA186_RESET_NVDISPLAY0_WGRP0>,
                                 <&bpmp TEGRA186_RESET_NVDISPLAY0_WGRP1>,
index 57d3f00..22a1c26 100644 (file)
                        vmmc-supply = <&vdd_emmc_3v3>;
                };
 
+               rtc@c2a0000 {
+                       status = "okay";
+               };
+
                pmc@c360000 {
                        nvidia,invert-interrupt;
                };
                                        in-ldo4-6-supply = <&vdd_5v0_sys>;
                                        in-ldo7-8-supply = <&vdd_1v8ls>;
 
-                                       sd0 {
+                                       vdd_1v0: sd0 {
                                                regulator-name = "VDD_1V0";
                                                regulator-min-microvolt = <1000000>;
                                                regulator-max-microvolt = <1000000>;
                                                regulator-boot-on;
                                        };
 
-                                       sd1 {
+                                       vdd_1v8hs: sd1 {
                                                regulator-name = "VDD_1V8HS";
                                                regulator-min-microvolt = <1800000>;
                                                regulator-max-microvolt = <1800000>;
                                        };
                                };
                        };
+
+                       temperature-sensor@4c {
+                               compatible = "ti,tmp451";
+                               reg = <0x4c>;
+
+                               interrupt-parent = <&gpio>;
+                               interrupts = <TEGRA194_MAIN_GPIO(H, 2)
+                                             IRQ_TYPE_LEVEL_LOW>;
+
+                               #thermal-sensor-cells = <1>;
+                       };
                };
        };
 
                        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;
+               };
        };
 };
index 9ff3c18..adf3510 100644 (file)
@@ -1,10 +1,13 @@
 // 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-p2888.dtsi"
 
 / {
-       model = "NVIDIA Tegra194 P2972-0000 Development Board";
+       model = "NVIDIA Jetson AGX Xavier Development Kit";
        compatible = "nvidia,p2972-0000", "nvidia,tegra194";
 
        cbb {
                sdhci@3400000 {
                        status = "okay";
                };
+
+               ddc: i2c@31c0000 {
+                       status = "okay";
+               };
+
+               pwm@c340000 {
+                       status = "okay";
+               };
+
+               hda@3510000 {
+                       status = "okay";
+               };
+
+               host1x@13e00000 {
+                       display-hub@15200000 {
+                               status = "okay";
+                       };
+
+                       dpaux@155e0000 {
+                               status = "okay";
+                       };
+
+                       sor@15b80000 {
+                               status = "okay";
+
+                               avdd-io-supply = <&vdd_1v0>;
+                               vdd-pll-supply = <&vdd_1v8hs>;
+                               hdmi-supply = <&vdd_hdmi>;
+
+                               nvidia,ddc-i2c-bus = <&ddc>;
+                               nvidia,hpd-gpio = <&gpio TEGRA194_MAIN_GPIO(M, 2)
+                                                        GPIO_ACTIVE_LOW>;
+                       };
+               };
+       };
+
+       fan: fan {
+               compatible = "pwm-fan";
+               pwms = <&pwm4 0 45334>;
+
+               cooling-levels = <0 64 128 255>;
+               cooling-min-state = <0>;
+               cooling-max-state = <3>;
+               #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 = <BTN_1>;
+                       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;
+               };
+       };
+
+       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";
+                               };
+                       };
+               };
        };
 };
index 9fc14bb..6dfa1ca 100644 (file)
@@ -4,6 +4,8 @@
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/mailbox/tegra186-hsp.h>
 #include <dt-bindings/reset/tegra194-reset.h>
+#include <dt-bindings/power/tegra194-powergate.h>
+#include <dt-bindings/thermal/tegra194-bpmp-thermal.h>
 
 / {
        compatible = "nvidia,tegra194";
                        status = "disabled";
                };
 
+               pwm1: pwm@3280000 {
+                       compatible = "nvidia,tegra194-pwm",
+                                    "nvidia,tegra186-pwm";
+                       reg = <0x3280000 0x10000>;
+                       clocks = <&bpmp TEGRA194_CLK_PWM1>;
+                       clock-names = "pwm";
+                       resets = <&bpmp TEGRA194_RESET_PWM1>;
+                       reset-names = "pwm";
+                       status = "disabled";
+                       #pwm-cells = <2>;
+               };
+
+               pwm2: pwm@3290000 {
+                       compatible = "nvidia,tegra194-pwm",
+                                    "nvidia,tegra186-pwm";
+                       reg = <0x3290000 0x10000>;
+                       clocks = <&bpmp TEGRA194_CLK_PWM2>;
+                       clock-names = "pwm";
+                       resets = <&bpmp TEGRA194_RESET_PWM2>;
+                       reset-names = "pwm";
+                       status = "disabled";
+                       #pwm-cells = <2>;
+               };
+
+               pwm3: pwm@32a0000 {
+                       compatible = "nvidia,tegra194-pwm",
+                                    "nvidia,tegra186-pwm";
+                       reg = <0x32a0000 0x10000>;
+                       clocks = <&bpmp TEGRA194_CLK_PWM3>;
+                       clock-names = "pwm";
+                       resets = <&bpmp TEGRA194_RESET_PWM3>;
+                       reset-names = "pwm";
+                       status = "disabled";
+                       #pwm-cells = <2>;
+               };
+
+               pwm5: pwm@32c0000 {
+                       compatible = "nvidia,tegra194-pwm",
+                                    "nvidia,tegra186-pwm";
+                       reg = <0x32c0000 0x10000>;
+                       clocks = <&bpmp TEGRA194_CLK_PWM5>;
+                       clock-names = "pwm";
+                       resets = <&bpmp TEGRA194_RESET_PWM5>;
+                       reset-names = "pwm";
+                       status = "disabled";
+                       #pwm-cells = <2>;
+               };
+
+               pwm6: pwm@32d0000 {
+                       compatible = "nvidia,tegra194-pwm",
+                                    "nvidia,tegra186-pwm";
+                       reg = <0x32d0000 0x10000>;
+                       clocks = <&bpmp TEGRA194_CLK_PWM6>;
+                       clock-names = "pwm";
+                       resets = <&bpmp TEGRA194_RESET_PWM6>;
+                       reset-names = "pwm";
+                       status = "disabled";
+                       #pwm-cells = <2>;
+               };
+
+               pwm7: pwm@32e0000 {
+                       compatible = "nvidia,tegra194-pwm",
+                                    "nvidia,tegra186-pwm";
+                       reg = <0x32e0000 0x10000>;
+                       clocks = <&bpmp TEGRA194_CLK_PWM7>;
+                       clock-names = "pwm";
+                       resets = <&bpmp TEGRA194_RESET_PWM7>;
+                       reset-names = "pwm";
+                       status = "disabled";
+                       #pwm-cells = <2>;
+               };
+
+               pwm8: pwm@32f0000 {
+                       compatible = "nvidia,tegra194-pwm",
+                                    "nvidia,tegra186-pwm";
+                       reg = <0x32f0000 0x10000>;
+                       clocks = <&bpmp TEGRA194_CLK_PWM8>;
+                       clock-names = "pwm";
+                       resets = <&bpmp TEGRA194_RESET_PWM8>;
+                       reset-names = "pwm";
+                       status = "disabled";
+                       #pwm-cells = <2>;
+               };
+
                sdmmc1: sdhci@3400000 {
                        compatible = "nvidia,tegra194-sdhci", "nvidia,tegra186-sdhci";
                        reg = <0x03400000 0x10000>;
                        status = "disabled";
                };
 
+               hda@3510000 {
+                       compatible = "nvidia,tegra194-hda", "nvidia,tegra30-hda";
+                       reg = <0x3510000 0x10000>;
+                       interrupts = <GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&bpmp TEGRA194_CLK_HDA>,
+                                <&bpmp TEGRA194_CLK_HDA2CODEC_2X>,
+                                <&bpmp TEGRA194_CLK_HDA2HDMICODEC>;
+                       clock-names = "hda", "hda2codec_2x", "hda2hdmi";
+                       resets = <&bpmp TEGRA194_RESET_HDA>,
+                                <&bpmp TEGRA194_RESET_HDA2CODEC_2X>,
+                                <&bpmp TEGRA194_RESET_HDA2HDMICODEC>;
+                       reset-names = "hda", "hda2codec_2x", "hda2hdmi";
+                       power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+                       status = "disabled";
+               };
+
                gic: interrupt-controller@3881000 {
                        compatible = "arm,gic-400";
                        #interrupt-cells = <3>;
                        interrupt-parent = <&gic>;
                };
 
+               cec@3960000 {
+                       compatible = "nvidia,tegra194-cec";
+                       reg = <0x03960000 0x10000>;
+                       interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&bpmp TEGRA194_CLK_CEC>;
+                       clock-names = "cec";
+                       status = "disabled";
+               };
+
                hsp_top0: hsp@3c00000 {
                        compatible = "nvidia,tegra186-hsp";
                        reg = <0x03c00000 0xa0000>;
                        status = "disabled";
                };
 
-               pmc@c360000 {
+               rtc: rtc@c2a0000 {
+                       compatible = "nvidia,tegra194-rtc", "nvidia,tegra20-rtc";
+                       reg = <0x0c2a0000 0x10000>;
+                       interrupt-parent = <&pmc>;
+                       interrupts = <73 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&bpmp TEGRA194_CLK_CLK_32K>;
+                       clock-names = "rtc";
+                       status = "disabled";
+               };
+
+               gpio_aon: gpio@c2f0000 {
+                       compatible = "nvidia,tegra194-gpio-aon";
+                       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>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+
+               pwm4: pwm@c340000 {
+                       compatible = "nvidia,tegra194-pwm",
+                                    "nvidia,tegra186-pwm";
+                       reg = <0xc340000 0x10000>;
+                       clocks = <&bpmp TEGRA194_CLK_PWM4>;
+                       clock-names = "pwm";
+                       resets = <&bpmp TEGRA194_RESET_PWM4>;
+                       reset-names = "pwm";
+                       status = "disabled";
+                       #pwm-cells = <2>;
+               };
+
+               pmc: pmc@c360000 {
                        compatible = "nvidia,tegra194-pmc";
                        reg = <0x0c360000 0x10000>,
                              <0x0c370000 0x10000>,
                              <0x0c390000 0x10000>,
                              <0x0c3a0000 0x10000>;
                        reg-names = "pmc", "wake", "aotag", "scratch", "misc";
+
+                       #interrupt-cells = <2>;
+                       interrupt-controller;
+               };
+
+               host1x@13e00000 {
+                       compatible = "nvidia,tegra194-host1x", "simple-bus";
+                       reg = <0x13e00000 0x10000>,
+                             <0x13e10000 0x10000>;
+                       reg-names = "hypervisor", "vm";
+                       interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&bpmp TEGRA194_CLK_HOST1X>;
+                       clock-names = "host1x";
+                       resets = <&bpmp TEGRA194_RESET_HOST1X>;
+                       reset-names = "host1x";
+
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       ranges = <0x15000000 0x15000000 0x01000000>;
+
+                       display-hub@15200000 {
+                               compatible = "nvidia,tegra194-display", "simple-bus";
+                               reg = <0x15200000 0x00040000>;
+                               resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_MISC>,
+                                        <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP0>,
+                                        <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP1>,
+                                        <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP2>,
+                                        <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP3>,
+                                        <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP4>,
+                                        <&bpmp TEGRA194_RESET_NVDISPLAY0_WGRP5>;
+                               reset-names = "misc", "wgrp0", "wgrp1", "wgrp2",
+                                             "wgrp3", "wgrp4", "wgrp5";
+                               clocks = <&bpmp TEGRA194_CLK_NVDISPLAY_DISP>,
+                                        <&bpmp TEGRA194_CLK_NVDISPLAYHUB>;
+                               clock-names = "disp", "hub";
+                               status = "disabled";
+
+                               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+
+                               ranges = <0x15200000 0x15200000 0x40000>;
+
+                               display@15200000 {
+                                       compatible = "nvidia,tegra194-dc";
+                                       reg = <0x15200000 0x10000>;
+                                       interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
+                                       clocks = <&bpmp TEGRA194_CLK_NVDISPLAY_P0>;
+                                       clock-names = "dc";
+                                       resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_HEAD0>;
+                                       reset-names = "dc";
+
+                                       power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+
+                                       nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
+                                       nvidia,head = <0>;
+                               };
+
+                               display@15210000 {
+                                       compatible = "nvidia,tegra194-dc";
+                                       reg = <0x15210000 0x10000>;
+                                       interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
+                                       clocks = <&bpmp TEGRA194_CLK_NVDISPLAY_P1>;
+                                       clock-names = "dc";
+                                       resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_HEAD1>;
+                                       reset-names = "dc";
+
+                                       power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISPB>;
+
+                                       nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
+                                       nvidia,head = <1>;
+                               };
+
+                               display@15220000 {
+                                       compatible = "nvidia,tegra194-dc";
+                                       reg = <0x15220000 0x10000>;
+                                       interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
+                                       clocks = <&bpmp TEGRA194_CLK_NVDISPLAY_P2>;
+                                       clock-names = "dc";
+                                       resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_HEAD2>;
+                                       reset-names = "dc";
+
+                                       power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISPC>;
+
+                                       nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
+                                       nvidia,head = <2>;
+                               };
+
+                               display@15230000 {
+                                       compatible = "nvidia,tegra194-dc";
+                                       reg = <0x15230000 0x10000>;
+                                       interrupts = <GIC_SPI 242 IRQ_TYPE_LEVEL_HIGH>;
+                                       clocks = <&bpmp TEGRA194_CLK_NVDISPLAY_P3>;
+                                       clock-names = "dc";
+                                       resets = <&bpmp TEGRA194_RESET_NVDISPLAY0_HEAD3>;
+                                       reset-names = "dc";
+
+                                       power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISPC>;
+
+                                       nvidia,outputs = <&sor0 &sor1 &sor2 &sor3>;
+                                       nvidia,head = <3>;
+                               };
+                       };
+
+                       vic@15340000 {
+                               compatible = "nvidia,tegra194-vic";
+                               reg = <0x15340000 0x00040000>;
+                               interrupts = <GIC_SPI 206 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&bpmp TEGRA194_CLK_VIC>;
+                               clock-names = "vic";
+                               resets = <&bpmp TEGRA194_RESET_VIC>;
+                               reset-names = "vic";
+
+                               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_VIC>;
+                       };
+
+                       dpaux0: dpaux@155c0000 {
+                               compatible = "nvidia,tegra194-dpaux";
+                               reg = <0x155c0000 0x10000>;
+                               interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&bpmp TEGRA194_CLK_DPAUX>,
+                                        <&bpmp TEGRA194_CLK_PLLDP>;
+                               clock-names = "dpaux", "parent";
+                               resets = <&bpmp TEGRA194_RESET_DPAUX>;
+                               reset-names = "dpaux";
+                               status = "disabled";
+
+                               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+
+                               state_dpaux0_aux: pinmux-aux {
+                                       groups = "dpaux-io";
+                                       function = "aux";
+                               };
+
+                               state_dpaux0_i2c: pinmux-i2c {
+                                       groups = "dpaux-io";
+                                       function = "i2c";
+                               };
+
+                               state_dpaux0_off: pinmux-off {
+                                       groups = "dpaux-io";
+                                       function = "off";
+                               };
+
+                               i2c-bus {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                               };
+                       };
+
+                       dpaux1: dpaux@155d0000 {
+                               compatible = "nvidia,tegra194-dpaux";
+                               reg = <0x155d0000 0x10000>;
+                               interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&bpmp TEGRA194_CLK_DPAUX1>,
+                                        <&bpmp TEGRA194_CLK_PLLDP>;
+                               clock-names = "dpaux", "parent";
+                               resets = <&bpmp TEGRA194_RESET_DPAUX1>;
+                               reset-names = "dpaux";
+                               status = "disabled";
+
+                               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+
+                               state_dpaux1_aux: pinmux-aux {
+                                       groups = "dpaux-io";
+                                       function = "aux";
+                               };
+
+                               state_dpaux1_i2c: pinmux-i2c {
+                                       groups = "dpaux-io";
+                                       function = "i2c";
+                               };
+
+                               state_dpaux1_off: pinmux-off {
+                                       groups = "dpaux-io";
+                                       function = "off";
+                               };
+
+                               i2c-bus {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                               };
+                       };
+
+                       dpaux2: dpaux@155e0000 {
+                               compatible = "nvidia,tegra194-dpaux";
+                               reg = <0x155e0000 0x10000>;
+                               interrupts = <GIC_SPI 245 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&bpmp TEGRA194_CLK_DPAUX2>,
+                                        <&bpmp TEGRA194_CLK_PLLDP>;
+                               clock-names = "dpaux", "parent";
+                               resets = <&bpmp TEGRA194_RESET_DPAUX2>;
+                               reset-names = "dpaux";
+                               status = "disabled";
+
+                               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+
+                               state_dpaux2_aux: pinmux-aux {
+                                       groups = "dpaux-io";
+                                       function = "aux";
+                               };
+
+                               state_dpaux2_i2c: pinmux-i2c {
+                                       groups = "dpaux-io";
+                                       function = "i2c";
+                               };
+
+                               state_dpaux2_off: pinmux-off {
+                                       groups = "dpaux-io";
+                                       function = "off";
+                               };
+
+                               i2c-bus {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                               };
+                       };
+
+                       dpaux3: dpaux@155f0000 {
+                               compatible = "nvidia,tegra194-dpaux";
+                               reg = <0x155f0000 0x10000>;
+                               interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&bpmp TEGRA194_CLK_DPAUX3>,
+                                        <&bpmp TEGRA194_CLK_PLLDP>;
+                               clock-names = "dpaux", "parent";
+                               resets = <&bpmp TEGRA194_RESET_DPAUX3>;
+                               reset-names = "dpaux";
+                               status = "disabled";
+
+                               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+
+                               state_dpaux3_aux: pinmux-aux {
+                                       groups = "dpaux-io";
+                                       function = "aux";
+                               };
+
+                               state_dpaux3_i2c: pinmux-i2c {
+                                       groups = "dpaux-io";
+                                       function = "i2c";
+                               };
+
+                               state_dpaux3_off: pinmux-off {
+                                       groups = "dpaux-io";
+                                       function = "off";
+                               };
+
+                               i2c-bus {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                               };
+                       };
+
+                       sor0: sor@15b00000 {
+                               compatible = "nvidia,tegra194-sor";
+                               reg = <0x15b00000 0x40000>;
+                               interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&bpmp TEGRA194_CLK_SOR0_REF>,
+                                        <&bpmp TEGRA194_CLK_SOR0_OUT>,
+                                        <&bpmp TEGRA194_CLK_PLLD>,
+                                        <&bpmp TEGRA194_CLK_PLLDP>,
+                                        <&bpmp TEGRA194_CLK_SOR_SAFE>,
+                                        <&bpmp TEGRA194_CLK_SOR0_PAD_CLKOUT>;
+                               clock-names = "sor", "out", "parent", "dp", "safe",
+                                             "pad";
+                               resets = <&bpmp TEGRA194_RESET_SOR0>;
+                               reset-names = "sor";
+                               pinctrl-0 = <&state_dpaux0_aux>;
+                               pinctrl-1 = <&state_dpaux0_i2c>;
+                               pinctrl-2 = <&state_dpaux0_off>;
+                               pinctrl-names = "aux", "i2c", "off";
+                               status = "disabled";
+
+                               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+                               nvidia,interface = <0>;
+                       };
+
+                       sor1: sor@15b40000 {
+                               compatible = "nvidia,tegra194-sor";
+                               reg = <0x155c0000 0x40000>;
+                               interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&bpmp TEGRA194_CLK_SOR1_REF>,
+                                        <&bpmp TEGRA194_CLK_SOR1_OUT>,
+                                        <&bpmp TEGRA194_CLK_PLLD2>,
+                                        <&bpmp TEGRA194_CLK_PLLDP>,
+                                        <&bpmp TEGRA194_CLK_SOR_SAFE>,
+                                        <&bpmp TEGRA194_CLK_SOR1_PAD_CLKOUT>;
+                               clock-names = "sor", "out", "parent", "dp", "safe",
+                                             "pad";
+                               resets = <&bpmp TEGRA194_RESET_SOR1>;
+                               reset-names = "sor";
+                               pinctrl-0 = <&state_dpaux1_aux>;
+                               pinctrl-1 = <&state_dpaux1_i2c>;
+                               pinctrl-2 = <&state_dpaux1_off>;
+                               pinctrl-names = "aux", "i2c", "off";
+                               status = "disabled";
+
+                               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+                               nvidia,interface = <1>;
+                       };
+
+                       sor2: sor@15b80000 {
+                               compatible = "nvidia,tegra194-sor";
+                               reg = <0x15b80000 0x40000>;
+                               interrupts = <GIC_SPI 243 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&bpmp TEGRA194_CLK_SOR2_REF>,
+                                        <&bpmp TEGRA194_CLK_SOR2_OUT>,
+                                        <&bpmp TEGRA194_CLK_PLLD3>,
+                                        <&bpmp TEGRA194_CLK_PLLDP>,
+                                        <&bpmp TEGRA194_CLK_SOR_SAFE>,
+                                        <&bpmp TEGRA194_CLK_SOR2_PAD_CLKOUT>;
+                               clock-names = "sor", "out", "parent", "dp", "safe",
+                                             "pad";
+                               resets = <&bpmp TEGRA194_RESET_SOR2>;
+                               reset-names = "sor";
+                               pinctrl-0 = <&state_dpaux2_aux>;
+                               pinctrl-1 = <&state_dpaux2_i2c>;
+                               pinctrl-2 = <&state_dpaux2_off>;
+                               pinctrl-names = "aux", "i2c", "off";
+                               status = "disabled";
+
+                               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+                               nvidia,interface = <2>;
+                       };
+
+                       sor3: sor@15bc0000 {
+                               compatible = "nvidia,tegra194-sor";
+                               reg = <0x15bc0000 0x40000>;
+                               interrupts = <GIC_SPI 244 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&bpmp TEGRA194_CLK_SOR3_REF>,
+                                        <&bpmp TEGRA194_CLK_SOR3_OUT>,
+                                        <&bpmp TEGRA194_CLK_PLLD4>,
+                                        <&bpmp TEGRA194_CLK_PLLDP>,
+                                        <&bpmp TEGRA194_CLK_SOR_SAFE>,
+                                        <&bpmp TEGRA194_CLK_SOR3_PAD_CLKOUT>;
+                               clock-names = "sor", "out", "parent", "dp", "safe",
+                                             "pad";
+                               resets = <&bpmp TEGRA194_RESET_SOR3>;
+                               reset-names = "sor";
+                               pinctrl-0 = <&state_dpaux3_aux>;
+                               pinctrl-1 = <&state_dpaux3_i2c>;
+                               pinctrl-2 = <&state_dpaux3_off>;
+                               pinctrl-names = "aux", "i2c", "off";
+                               status = "disabled";
+
+                               power-domains = <&bpmp TEGRA194_POWER_DOMAIN_DISP>;
+                               nvidia,interface = <3>;
+                       };
                };
        };
 
                method = "smc";
        };
 
+       thermal-zones {
+               cpu {
+                       thermal-sensors = <&{/bpmp/thermal}
+                                          TEGRA194_BPMP_THERMAL_ZONE_CPU>;
+                       status = "disabled";
+               };
+
+               gpu {
+                       thermal-sensors = <&{/bpmp/thermal}
+                                          TEGRA194_BPMP_THERMAL_ZONE_GPU>;
+                       status = "disabled";
+               };
+
+               aux {
+                       thermal-sensors = <&{/bpmp/thermal}
+                                          TEGRA194_BPMP_THERMAL_ZONE_AUX>;
+                       status = "disabled";
+               };
+
+               pllx {
+                       thermal-sensors = <&{/bpmp/thermal}
+                                          TEGRA194_BPMP_THERMAL_ZONE_PLLX>;
+                       status = "disabled";
+               };
+
+               ao {
+                       thermal-sensors = <&{/bpmp/thermal}
+                                          TEGRA194_BPMP_THERMAL_ZONE_AO>;
+                       status = "disabled";
+               };
+
+               tj {
+                       thermal-sensors = <&{/bpmp/thermal}
+                                          TEGRA194_BPMP_THERMAL_ZONE_TJ_MAX>;
+                       status = "disabled";
+               };
+       };
+
        timer {
                compatible = "arm,armv8-timer";
                interrupts = <GIC_PPI 13
index 365726d..a96e6ee 100644 (file)
                phys = <&{/padctl@7009f000/pads/sata/lanes/sata-0}>;
        };
 
+       hda@70030000 {
+               status = "okay";
+       };
+
        padctl@7009f000 {
                status = "okay";
 
index 8fe47d6..2205d66 100644 (file)
                resets = <&tegra_car 89>, <&tegra_car 156>,
                         <&tegra_car 143>;
                reset-names = "xusb_host", "xusb_ss", "xusb_src";
+               power-domains = <&pd_xusbhost>, <&pd_xusbss>;
+               power-domain-names = "xusb_host", "xusb_ss";
 
                nvidia,xusb-padctl = <&padctl>;
 
index a658c07..21d548f 100644 (file)
@@ -8,3 +8,5 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8994-angler-rev-101.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += msm8996-mtp.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += msm8998-mtp.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += sdm845-mtp.dtb
+dtb-$(CONFIG_ARCH_QCOM)        += qcs404-evb-1000.dtb
+dtb-$(CONFIG_ARCH_QCOM)        += qcs404-evb-4000.dtb
index bf20c55..6d50449 100644 (file)
                        status = "okay";
                };
 
-               usb@6a00000 {
+               usb@6af8800 {
                        status = "okay";
+                       extcon = <&usb3_id>;
 
                        dwc3@6a00000 {
                                extcon = <&usb3_id>;
                        pinctrl-0 = <&usb3_vbus_det_gpio>;
                };
 
-               usb@7600000 {
+               usb@76f8800 {
                        status = "okay";
+                       extcon = <&usb2_id>;
 
                        dwc3@7600000 {
                                extcon = <&usb2_id>;
index 390a2fa..aa9a0ff 100644 (file)
                        bias-pull-up;
                };
        };
+
+       cci0_default: cci0_default {
+               pinmux {
+                       function = "cci_i2c";
+                       pins = "gpio29", "gpio30";
+               };
+               pinconf {
+                       pins = "gpio29", "gpio30";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+       };
+
+       camera_front_default: camera_front_default {
+               pinmux_pwdn {
+                       function = "gpio";
+                       pins = "gpio33";
+               };
+               pinconf_pwdn {
+                       pins = "gpio33";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+
+               pinmux_rst {
+                       function = "gpio";
+                       pins = "gpio28";
+               };
+               pinconf_rst {
+                       pins = "gpio28";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+
+               pinmux_mclk1 {
+                       function = "cam_mclk1";
+                       pins = "gpio27";
+               };
+               pinconf_mclk1 {
+                       pins = "gpio27";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+       };
+
+       camera_rear_default: camera_rear_default {
+               pinmux_pwdn {
+                       function = "gpio";
+                       pins = "gpio34";
+               };
+               pinconf_pwdn {
+                       pins = "gpio34";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+
+                pinmux_rst {
+                       function = "gpio";
+                       pins = "gpio35";
+               };
+               pinconf_rst {
+                       pins = "gpio35";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+
+               pinmux_mclk0 {
+                       function = "cam_mclk0";
+                       pins = "gpio26";
+               };
+               pinconf_mclk0 {
+                       pins = "gpio26";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+       };
 };
index d302d8d..c5348c3 100644 (file)
                        cooling-maps {
                                map0 {
                                        trip = <&cpu_alert0>;
-                                       cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       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>;
                                };
                        };
                };
                        cooling-maps {
                                map0 {
                                        trip = <&cpu_alert1>;
-                                       cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       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 {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens 2>;
+
+                       trips {
+                               gpu_alert: trip0 {
+                                       temperature = <75000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+                               gpu_crit: trip1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               camera-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens 1>;
+
+                       trips {
+                               cam_alert: trip0 {
+                                       temperature = <75000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+                               cam_crit: trip1 {
+                                       temperature = <95000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+
+               };
+
        };
 
        cpu_opp_table: cpu_opp_table {
                        };
                };
 
-               tsens: thermal-sensor@4a8000 {
+               tsens: thermal-sensor@4a9000 {
                        compatible = "qcom,msm8916-tsens";
-                       reg = <0x4a8000 0x2000>;
+                       reg = <0x4a9000 0x1000>, /* TM */
+                             <0x4a8000 0x1000>; /* SROT */
                        nvmem-cells = <&tsens_caldata>, <&tsens_calsel>;
                        nvmem-cell-names = "calib", "calib_sel";
+                       #qcom,sensors = <5>;
                        #thermal-sensor-cells = <1>;
                };
 
                        clock-names = "iface", "bus";
                        qcom,iommu-secure-id = <17>;
 
+                       // vfe:
+                       iommu-ctx@3000 {
+                               compatible = "qcom,msm-iommu-v1-sec";
+                               reg = <0x3000 0x1000>;
+                               interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
+                       };
+
                        // mdp_0:
                        iommu-ctx@4000 {
                                compatible = "qcom,msm-iommu-v1-ns";
                                compatible = "venus-encoder";
                        };
                };
+
+               camss: camss@1b00000 {
+                       compatible = "qcom,msm8916-camss";
+                       reg = <0x1b0ac00 0x200>,
+                               <0x1b00030 0x4>,
+                               <0x1b0b000 0x200>,
+                               <0x1b00038 0x4>,
+                               <0x1b08000 0x100>,
+                               <0x1b08400 0x100>,
+                               <0x1b0a000 0x500>,
+                               <0x1b00020 0x10>,
+                               <0x1b10000 0x1000>;
+                       reg-names = "csiphy0",
+                               "csiphy0_clk_mux",
+                               "csiphy1",
+                               "csiphy1_clk_mux",
+                               "csid0",
+                               "csid1",
+                               "ispif",
+                               "csi_clk_mux",
+                               "vfe0";
+                       interrupts = <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>,
+                               <GIC_SPI 79 IRQ_TYPE_EDGE_RISING>,
+                               <GIC_SPI 51 IRQ_TYPE_EDGE_RISING>,
+                               <GIC_SPI 52 IRQ_TYPE_EDGE_RISING>,
+                               <GIC_SPI 55 IRQ_TYPE_EDGE_RISING>,
+                               <GIC_SPI 57 IRQ_TYPE_EDGE_RISING>;
+                       interrupt-names = "csiphy0",
+                               "csiphy1",
+                               "csid0",
+                               "csid1",
+                               "ispif",
+                               "vfe0";
+                       power-domains = <&gcc VFE_GDSC>;
+                       clocks = <&gcc GCC_CAMSS_TOP_AHB_CLK>,
+                               <&gcc GCC_CAMSS_ISPIF_AHB_CLK>,
+                               <&gcc GCC_CAMSS_CSI0PHYTIMER_CLK>,
+                               <&gcc GCC_CAMSS_CSI1PHYTIMER_CLK>,
+                               <&gcc GCC_CAMSS_CSI0_AHB_CLK>,
+                               <&gcc GCC_CAMSS_CSI0_CLK>,
+                               <&gcc GCC_CAMSS_CSI0PHY_CLK>,
+                               <&gcc GCC_CAMSS_CSI0PIX_CLK>,
+                               <&gcc GCC_CAMSS_CSI0RDI_CLK>,
+                               <&gcc GCC_CAMSS_CSI1_AHB_CLK>,
+                               <&gcc GCC_CAMSS_CSI1_CLK>,
+                               <&gcc GCC_CAMSS_CSI1PHY_CLK>,
+                               <&gcc GCC_CAMSS_CSI1PIX_CLK>,
+                               <&gcc GCC_CAMSS_CSI1RDI_CLK>,
+                               <&gcc GCC_CAMSS_AHB_CLK>,
+                               <&gcc GCC_CAMSS_VFE0_CLK>,
+                               <&gcc GCC_CAMSS_CSI_VFE0_CLK>,
+                               <&gcc GCC_CAMSS_VFE_AHB_CLK>,
+                               <&gcc GCC_CAMSS_VFE_AXI_CLK>;
+                       clock-names = "top_ahb",
+                               "ispif_ahb",
+                               "csiphy0_timer",
+                               "csiphy1_timer",
+                               "csi0_ahb",
+                               "csi0",
+                               "csi0_phy",
+                               "csi0_pix",
+                               "csi0_rdi",
+                               "csi1_ahb",
+                               "csi1",
+                               "csi1_phy",
+                               "csi1_pix",
+                               "csi1_rdi",
+                               "ahb",
+                               "vfe0",
+                               "csi_vfe0",
+                               "vfe_ahb",
+                               "vfe_axi";
+                       vdda-supply = <&pm8916_l2>;
+                       iommus = <&apps_iommu 3>;
+                       status = "disabled";
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                       };
+               };
        };
 
        smd {
index c5c42e9..8d5114d 100644 (file)
                        bias-disable;
                };
        };
+
+       cci0_default: cci0_default {
+               pinmux {
+                       function = "cci_i2c";
+                       pins = "gpio17", "gpio18";
+               };
+               pinconf {
+                       pins = "gpio17", "gpio18";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+       };
+
+       cci1_default: cci1_default {
+               pinmux {
+                       function = "cci_i2c";
+                       pins = "gpio19", "gpio20";
+               };
+               pinconf {
+                       pins = "gpio19", "gpio20";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+       };
+
+       camera_board_default: camera_board_default {
+               mux_pwdn {
+                       function = "gpio";
+                       pins = "gpio98";
+               };
+               config_pwdn {
+                       pins = "gpio98";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+
+               mux_rst {
+                       function = "gpio";
+                       pins = "gpio104";
+               };
+               config_rst {
+                       pins = "gpio104";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+
+               mux_mclk1 {
+                       function = "cam_mclk";
+                       pins = "gpio14";
+               };
+               config_mclk1 {
+                       pins = "gpio14";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+       };
+
+       camera_front_default: camera_front_default {
+               mux_pwdn {
+                       function = "gpio";
+                       pins = "gpio133";
+               };
+               config_pwdn {
+                       pins = "gpio133";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+
+               mux_rst {
+                       function = "gpio";
+                       pins = "gpio23";
+               };
+               config_rst {
+                       pins = "gpio23";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+
+               mux_mclk2 {
+                       function = "cam_mclk";
+                       pins = "gpio15";
+               };
+               config_mclk2 {
+                       pins = "gpio15";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+       };
+
+       camera_rear_default: camera_rear_default {
+               mux_pwdn {
+                       function = "gpio";
+                       pins = "gpio26";
+               };
+               config_pwdn {
+                       pins = "gpio26";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+
+               mux_rst {
+                       function = "gpio";
+                       pins = "gpio25";
+               };
+               config_rst {
+                       pins = "gpio25";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+
+               mux_mclk0 {
+                       function = "cam_mclk";
+                       pins = "gpio13";
+               };
+               config_mclk0 {
+                       pins = "gpio13";
+                       drive-strength = <16>;
+                       bias-disable;
+               };
+       };
 };
index b29fe80..99b7495 100644 (file)
                        reg = <0x68000 0x6000>;
                };
 
+               rng: rng@83000 {
+                       compatible = "qcom,prng-ee";
+                       reg = <0x00083000 0x1000>;
+                       clocks = <&gcc GCC_PRNG_AHB_CLK>;
+                       clock-names = "core";
+               };
+
                tcsr_mutex_regs: syscon@740000 {
                        compatible = "syscon";
                        reg = <0x740000 0x20000>;
                        status = "disabled";
                };
 
-               usb2: usb@7600000 {
-                       compatible = "qcom,dwc3";
+               usb2: usb@76f8800 {
+                       compatible = "qcom,msm8996-dwc3", "qcom,dwc3";
+                       reg = <0x76f8800 0x400>;
                        #address-cells = <1>;
                        #size-cells = <1>;
                        ranges;
                        };
                };
 
-               usb3: usb@6a00000 {
-                       compatible = "qcom,dwc3";
+               usb3: usb@6af8800 {
+                       compatible = "qcom,msm8996-dwc3", "qcom,dwc3";
+                       reg = <0x6af8800 0x400>;
                        #address-cells = <1>;
                        #size-cells = <1>;
                        ranges;
                        };
                };
 
+               vfe_smmu: arm,smmu@da0000 {
+                       compatible = "qcom,msm8996-smmu-v2", "qcom,smmu-v2";
+                       reg = <0xda0000 0x10000>;
+
+                       #global-interrupts = <1>;
+                       interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 343 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 344 IRQ_TYPE_LEVEL_HIGH>;
+                       power-domains = <&mmcc MMAGIC_CAMSS_GDSC>;
+                       clocks = <&mmcc SMMU_VFE_AHB_CLK>,
+                                <&mmcc SMMU_VFE_AXI_CLK>;
+                       clock-names = "iface",
+                                     "bus";
+                       #iommu-cells = <1>;
+                       status = "ok";
+               };
+
+               camss: camss@a00000 {
+                       compatible = "qcom,msm8996-camss";
+                       reg = <0xa34000 0x1000>,
+                               <0xa00030 0x4>,
+                               <0xa35000 0x1000>,
+                               <0xa00038 0x4>,
+                               <0xa36000 0x1000>,
+                               <0xa00040 0x4>,
+                               <0xa30000 0x100>,
+                               <0xa30400 0x100>,
+                               <0xa30800 0x100>,
+                               <0xa30c00 0x100>,
+                               <0xa31000 0x500>,
+                               <0xa00020 0x10>,
+                               <0xa10000 0x1000>,
+                               <0xa14000 0x1000>;
+                       reg-names = "csiphy0",
+                               "csiphy0_clk_mux",
+                               "csiphy1",
+                               "csiphy1_clk_mux",
+                               "csiphy2",
+                               "csiphy2_clk_mux",
+                               "csid0",
+                               "csid1",
+                               "csid2",
+                               "csid3",
+                               "ispif",
+                               "csi_clk_mux",
+                               "vfe0",
+                               "vfe1";
+                       interrupts = <GIC_SPI 78 0>,
+                               <GIC_SPI 79 0>,
+                               <GIC_SPI 80 0>,
+                               <GIC_SPI 296 0>,
+                               <GIC_SPI 297 0>,
+                               <GIC_SPI 298 0>,
+                               <GIC_SPI 299 0>,
+                               <GIC_SPI 309 0>,
+                               <GIC_SPI 314 0>,
+                               <GIC_SPI 315 0>;
+                       interrupt-names = "csiphy0",
+                               "csiphy1",
+                               "csiphy2",
+                               "csid0",
+                               "csid1",
+                               "csid2",
+                               "csid3",
+                               "ispif",
+                               "vfe0",
+                               "vfe1";
+                       power-domains = <&mmcc VFE0_GDSC>;
+                       clocks = <&mmcc CAMSS_TOP_AHB_CLK>,
+                               <&mmcc CAMSS_ISPIF_AHB_CLK>,
+                               <&mmcc CAMSS_CSI0PHYTIMER_CLK>,
+                               <&mmcc CAMSS_CSI1PHYTIMER_CLK>,
+                               <&mmcc CAMSS_CSI2PHYTIMER_CLK>,
+                               <&mmcc CAMSS_CSI0_AHB_CLK>,
+                               <&mmcc CAMSS_CSI0_CLK>,
+                               <&mmcc CAMSS_CSI0PHY_CLK>,
+                               <&mmcc CAMSS_CSI0PIX_CLK>,
+                               <&mmcc CAMSS_CSI0RDI_CLK>,
+                               <&mmcc CAMSS_CSI1_AHB_CLK>,
+                               <&mmcc CAMSS_CSI1_CLK>,
+                               <&mmcc CAMSS_CSI1PHY_CLK>,
+                               <&mmcc CAMSS_CSI1PIX_CLK>,
+                               <&mmcc CAMSS_CSI1RDI_CLK>,
+                               <&mmcc CAMSS_CSI2_AHB_CLK>,
+                               <&mmcc CAMSS_CSI2_CLK>,
+                               <&mmcc CAMSS_CSI2PHY_CLK>,
+                               <&mmcc CAMSS_CSI2PIX_CLK>,
+                               <&mmcc CAMSS_CSI2RDI_CLK>,
+                               <&mmcc CAMSS_CSI3_AHB_CLK>,
+                               <&mmcc CAMSS_CSI3_CLK>,
+                               <&mmcc CAMSS_CSI3PHY_CLK>,
+                               <&mmcc CAMSS_CSI3PIX_CLK>,
+                               <&mmcc CAMSS_CSI3RDI_CLK>,
+                               <&mmcc CAMSS_AHB_CLK>,
+                               <&mmcc CAMSS_VFE0_CLK>,
+                               <&mmcc CAMSS_CSI_VFE0_CLK>,
+                               <&mmcc CAMSS_VFE0_AHB_CLK>,
+                               <&mmcc CAMSS_VFE0_STREAM_CLK>,
+                               <&mmcc CAMSS_VFE1_CLK>,
+                               <&mmcc CAMSS_CSI_VFE1_CLK>,
+                               <&mmcc CAMSS_VFE1_AHB_CLK>,
+                               <&mmcc CAMSS_VFE1_STREAM_CLK>,
+                               <&mmcc CAMSS_VFE_AHB_CLK>,
+                               <&mmcc CAMSS_VFE_AXI_CLK>;
+                       clock-names = "top_ahb",
+                               "ispif_ahb",
+                               "csiphy0_timer",
+                               "csiphy1_timer",
+                               "csiphy2_timer",
+                               "csi0_ahb",
+                               "csi0",
+                               "csi0_phy",
+                               "csi0_pix",
+                               "csi0_rdi",
+                               "csi1_ahb",
+                               "csi1",
+                               "csi1_phy",
+                               "csi1_pix",
+                               "csi1_rdi",
+                               "csi2_ahb",
+                               "csi2",
+                               "csi2_phy",
+                               "csi2_pix",
+                               "csi2_rdi",
+                               "csi3_ahb",
+                               "csi3",
+                               "csi3_phy",
+                               "csi3_pix",
+                               "csi3_rdi",
+                               "ahb",
+                               "vfe0",
+                               "csi_vfe0",
+                               "vfe0_ahb",
+                               "vfe0_stream",
+                               "vfe1",
+                               "csi_vfe1",
+                               "vfe1_ahb",
+                               "vfe1_stream",
+                               "vfe_ahb",
+                               "vfe_axi";
+                       vdda-supply = <&pm8994_l2>;
+                       iommus = <&vfe_smmu 0>,
+                                <&vfe_smmu 1>,
+                                <&vfe_smmu 2>,
+                                <&vfe_smmu 3>;
+                       status = "disabled";
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                       };
+               };
+
                agnoc@0 {
                        power-domains = <&gcc AGGRE0_NOC_GDSC>;
                        compatible = "simple-pm-bus";
index b4276da..50e9033 100644 (file)
                };
        };
 };
+
+&tlmm {
+       gpio-reserved-ranges = <0 4>, <81 4>;
+};
+
+&sdhc2 {
+       status = "okay";
+       cd-gpios = <&tlmm 95 GPIO_ACTIVE_LOW>;
+
+       vmmc-supply = <&vreg_l21a_2p95>;
+       vqmmc-supply = <&vreg_l13a_2p95>;
+
+       pinctrl-names = "default", "sleep";
+       pinctrl-0 = <&sdc2_clk_on  &sdc2_cmd_on  &sdc2_data_on  &sdc2_cd_on>;
+       pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
+};
diff --git a/arch/arm64/boot/dts/qcom/msm8998-pins.dtsi b/arch/arm64/boot/dts/qcom/msm8998-pins.dtsi
new file mode 100644 (file)
index 0000000..6db70ac
--- /dev/null
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2018, The Linux Foundation. All rights reserved. */
+
+&tlmm {
+       sdc2_clk_on: sdc2_clk_on {
+               config {
+                       pins = "sdc2_clk";
+                       bias-disable;           /* NO pull */
+                       drive-strength = <16>;  /* 16 mA */
+               };
+       };
+
+       sdc2_clk_off: sdc2_clk_off {
+               config {
+                       pins = "sdc2_clk";
+                       bias-disable;           /* NO pull */
+                       drive-strength = <2>;   /* 2 mA */
+               };
+       };
+
+       sdc2_cmd_on: sdc2_cmd_on {
+               config {
+                       pins = "sdc2_cmd";
+                       bias-pull-up;           /* pull up */
+                       drive-strength = <10>;  /* 10 mA */
+               };
+       };
+
+       sdc2_cmd_off: sdc2_cmd_off {
+               config {
+                       pins = "sdc2_cmd";
+                       bias-pull-up;           /* pull up */
+                       drive-strength = <2>;   /* 2 mA */
+               };
+       };
+
+       sdc2_data_on: sdc2_data_on {
+               config {
+                       pins = "sdc2_data";
+                       bias-pull-up;           /* pull up */
+                       drive-strength = <10>;  /* 10 mA */
+               };
+       };
+
+       sdc2_data_off: sdc2_data_off {
+               config {
+                       pins = "sdc2_data";
+                       bias-pull-up;           /* pull up */
+                       drive-strength = <2>;   /* 2 mA */
+               };
+       };
+
+       sdc2_cd_on: sdc2_cd_on {
+               mux {
+                       pins = "gpio95";
+                       function = "gpio";
+               };
+
+               config {
+                       pins = "gpio95";
+                       bias-pull-up;           /* pull up */
+                       drive-strength = <2>;   /* 2 mA */
+               };
+       };
+
+       sdc2_cd_off: sdc2_cd_off {
+               mux {
+                       pins = "gpio95";
+                       function = "gpio";
+               };
+
+               config {
+                       pins = "gpio95";
+                       bias-pull-up;           /* pull up */
+                       drive-strength = <2>;   /* 2 mA */
+               };
+       };
+};
index 78227cc..8d41b69 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/clock/qcom,gcc-msm8998.h>
+#include <dt-bindings/gpio/gpio.h>
 
 / {
        interrupt-parent = <&intc>;
        };
 
        clocks {
-               xo_board {
+               xo: xo-board {
                        compatible = "fixed-clock";
                        #clock-cells = <0>;
                        clock-frequency = <19200000>;
+                       clock-output-names = "xo_board";
                };
 
                sleep_clk {
 
        firmware {
                scm {
-                       compatible = "qcom,scm-msm8998";
+                       compatible = "qcom,scm-msm8998", "qcom,scm";
                };
        };
 
                        #mbox-cells = <1>;
                };
 
+               sdhc2: sdhci@c0a4900 {
+                       compatible = "qcom,sdhci-msm-v4";
+                       reg = <0xc0a4900 0x314>, <0xc0a4000 0x800>;
+                       reg-names = "hc_mem", "core_mem";
+
+                       interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 221 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "hc_irq", "pwr_irq";
+
+                       clock-names = "iface", "core", "xo";
+                       clocks = <&gcc GCC_SDCC2_AHB_CLK>,
+                                <&gcc GCC_SDCC2_APPS_CLK>,
+                                <&xo>;
+                       bus-width = <4>;
+                       status = "disabled";
+               };
+
                blsp2_uart1: serial@c1b0000 {
                        compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
                        reg = <0xc1b0000 0x1000>;
                };
        };
 };
+
+#include "msm8998-pins.dtsi"
index 048f19f..f1025a5 100644 (file)
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #io-channel-cells = <1>;
+
+                       adc-chan@ADC5_DIE_TEMP {
+                               reg = <ADC5_DIE_TEMP>;
+                               label = "die_temp";
+                       };
                };
 
                rtc@6000 {
diff --git a/arch/arm64/boot/dts/qcom/pms405.dtsi b/arch/arm64/boot/dts/qcom/pms405.dtsi
new file mode 100644 (file)
index 0000000..ad2b62d
--- /dev/null
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2018, Linaro Limited
+
+#include <dt-bindings/spmi/spmi.h>
+#include <dt-bindings/input/linux-event-codes.h>
+
+&spmi_bus {
+       pms405_0: pms405@0 {
+               compatible = "qcom,spmi-pmic";
+               reg = <0x0 SPMI_USID>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pms405_gpios: gpio@c000 {
+                       compatible = "qcom,pms405-gpio";
+                       reg = <0xc000>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupts = <0 0xc0 0 IRQ_TYPE_NONE>,
+                               <0 0xc1 0 IRQ_TYPE_NONE>,
+                               <0 0xc2 0 IRQ_TYPE_NONE>,
+                               <0 0xc3 0 IRQ_TYPE_NONE>,
+                               <0 0xc4 0 IRQ_TYPE_NONE>,
+                               <0 0xc5 0 IRQ_TYPE_NONE>,
+                               <0 0xc6 0 IRQ_TYPE_NONE>,
+                               <0 0xc7 0 IRQ_TYPE_NONE>,
+                               <0 0xc8 0 IRQ_TYPE_NONE>,
+                               <0 0xc9 0 IRQ_TYPE_NONE>,
+                               <0 0xca 0 IRQ_TYPE_NONE>,
+                               <0 0xcb 0 IRQ_TYPE_NONE>;
+               };
+
+               pon@800 {
+                       compatible = "qcom,pms405-pon";
+                       reg = <0x0800>;
+                       mode-bootloader = <0x2>;
+                       mode-recovery = <0x1>;
+
+                       pwrkey {
+                               compatible = "qcom,pm8941-pwrkey";
+                               interrupts = <0x0 0x8 0 IRQ_TYPE_EDGE_BOTH>;
+                               debounce = <15625>;
+                               bias-pull-up;
+                               linux,code = <KEY_POWER>;
+                       };
+               };
+
+               rtc@6000 {
+                       compatible = "qcom,pm8941-rtc";
+                       reg = <0x6000>;
+                       reg-names = "rtc", "alarm";
+                       interrupts = <0x0 0x61 0x1 IRQ_TYPE_NONE>;
+               };
+       };
+};
diff --git a/arch/arm64/boot/dts/qcom/qcs404-evb-1000.dts b/arch/arm64/boot/dts/qcom/qcs404-evb-1000.dts
new file mode 100644 (file)
index 0000000..2c14903
--- /dev/null
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2018, Linaro Limited
+
+/dts-v1/;
+
+#include "qcs404-evb.dtsi"
+
+/ {
+       model = "Qualcomm Technologies, Inc. QCS404 EVB 1000";
+       compatible = "qcom,qcs404-evb";
+};
diff --git a/arch/arm64/boot/dts/qcom/qcs404-evb-4000.dts b/arch/arm64/boot/dts/qcom/qcs404-evb-4000.dts
new file mode 100644 (file)
index 0000000..11269ad
--- /dev/null
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2018, Linaro Limited
+
+/dts-v1/;
+
+#include "qcs404-evb.dtsi"
+
+/ {
+       model = "Qualcomm Technologies, Inc. QCS404 EVB 4000";
+       compatible = "qcom,qcs404-evb";
+};
diff --git a/arch/arm64/boot/dts/qcom/qcs404-evb.dtsi b/arch/arm64/boot/dts/qcom/qcs404-evb.dtsi
new file mode 100644 (file)
index 0000000..a39924e
--- /dev/null
@@ -0,0 +1,188 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2018, Linaro Limited
+
+#include "qcs404.dtsi"
+#include "pms405.dtsi"
+
+/ {
+       aliases {
+               serial0 = &blsp1_uart2;
+       };
+
+       chosen {
+               stdout-path = "serial0";
+       };
+
+       vph_pwr: vph-pwr-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vph_pwr";
+               regulator-always-on;
+               regulator-boot-on;
+       };
+};
+
+&remoteproc_adsp {
+       status = "ok";
+};
+
+&remoteproc_cdsp {
+       status = "ok";
+};
+
+&remoteproc_wcss {
+       status = "ok";
+};
+
+&rpm_requests {
+       pms405-regulators {
+               compatible = "qcom,rpm-pms405-regulators";
+
+               vdd-s1-supply = <&vph_pwr>;
+               vdd-s2-supply = <&vph_pwr>;
+               vdd-s3-supply = <&vph_pwr>;
+               vdd-s4-supply = <&vph_pwr>;
+               vdd-s5-supply = <&vph_pwr>;
+               vdd-l1-l2-supply = <&vreg_s5_1p35>;
+               vdd-l3-l8-supply = <&vreg_s5_1p35>;
+               vdd-l4-supply = <&vreg_s5_1p35>;
+               vdd-l5-l6-supply = <&vreg_s4_1p8>;
+               vdd-l7-supply = <&vph_pwr>;
+               vdd-l9-supply = <&vreg_s5_1p35>;
+               vdd-l10-l11-l12-l13-supply = <&vph_pwr>;
+
+               vreg_s4_1p8: s4 {
+                       regulator-min-microvolt = <1728000>;
+                       regulator-max-microvolt = <1920000>;
+               };
+
+               vreg_s5_1p35: s5 {
+                       regulator-min-microvolt = <>;
+                       regulator-max-microvolt = <>;
+               };
+
+               vreg_l1_1p3: l1 {
+                       regulator-min-microvolt = <1240000>;
+                       regulator-max-microvolt = <1352000>;
+               };
+
+               vreg_l2_1p275: l2 {
+                       regulator-min-microvolt = <1048000>;
+                       regulator-max-microvolt = <1280000>;
+               };
+
+               vreg_l3_1p05: l3 {
+                       regulator-min-microvolt = <976000>;
+                       regulator-max-microvolt = <1160000>;
+               };
+
+               vreg_l4_1p2: l4 {
+                       regulator-min-microvolt = <1144000>;
+                       regulator-max-microvolt = <1256000>;
+               };
+
+               vreg_l5_1p8: l5 {
+                       regulator-min-microvolt = <1800000>;
+                       regulator-max-microvolt = <1800000>;
+               };
+
+               vreg_l6_1p8: l6 {
+                       regulator-min-microvolt = <1800000>;
+                       regulator-max-microvolt = <1800000>;
+                       regulator-always-on;
+               };
+
+               vreg_l7_1p8: l7 {
+                       regulator-min-microvolt = <1616000>;
+                       regulator-max-microvolt = <3000000>;
+               };
+
+               vreg_l8_1p2: l8 {
+                       regulator-min-microvolt = <1136000>;
+                       regulator-max-microvolt = <1352000>;
+               };
+
+               vreg_l10_3p3: l10 {
+                       regulator-min-microvolt = <2936000>;
+                       regulator-max-microvolt = <3088000>;
+               };
+
+               vreg_l11_sdc2: l11 {
+                       regulator-min-microvolt = <2696000>;
+                       regulator-max-microvolt = <3304000>;
+               };
+
+               vreg_l12_3p3: l12 {
+                       regulator-min-microvolt = <2968000>;
+                       regulator-max-microvolt = <3300000>;
+               };
+
+               vreg_l13_3p3: l13 {
+                       regulator-min-microvolt = <3000000>;
+                       regulator-max-microvolt = <3300000>;
+               };
+       };
+};
+
+&sdcc1 {
+       status = "ok";
+
+       mmc-ddr-1_8v;
+       bus-width = <8>;
+       non-removable;
+
+       pinctrl-names = "default", "sleep";
+       pinctrl-0 = <&sdc1_on>;
+       pinctrl-1 = <&sdc1_off>;
+};
+
+&tlmm {
+       sdc1_on: sdc1-on {
+               clk {
+                       pins = "sdc1_clk";
+                       bias-disable;
+                       drive-strength = <16>;
+               };
+
+               cmd {
+                       pins = "sdc1_cmd";
+                       bias-pull-up;
+                       drive-strength = <10>;
+               };
+
+               data {
+                       pins = "sdc1_data";
+                       bias-pull-up;
+                       dreive-strength = <10>;
+               };
+
+               rclk {
+                       pins = "sdc1_rclk";
+                       bias-pull-down;
+               };
+       };
+
+       sdc1_off: sdc1-off {
+               clk {
+                       pins = "sdc1_clk";
+                       bias-disable;
+                       drive-strength = <2>;
+               };
+
+               cmd {
+                       pins = "sdc1_cmd";
+                       bias-pull-up;
+                       drive-strength = <2>;
+               };
+
+               data {
+                       pins = "sdc1_data";
+                       bias-pull-up;
+                       dreive-strength = <2>;
+               };
+
+               rclk {
+                       pins = "sdc1_rclk";
+                       bias-pull-down;
+               };
+       };
+};
diff --git a/arch/arm64/boot/dts/qcom/qcs404.dtsi b/arch/arm64/boot/dts/qcom/qcs404.dtsi
new file mode 100644 (file)
index 0000000..9b5c165
--- /dev/null
@@ -0,0 +1,490 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (c) 2018, Linaro Limited
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/qcom,gcc-qcs404.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>;
+               };
+       };
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               CPU0: cpu@100 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x100>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_0>;
+               };
+
+               CPU1: cpu@101 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x101>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_0>;
+               };
+
+               CPU2: cpu@102 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x102>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_0>;
+               };
+
+               CPU3: cpu@103 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a53";
+                       reg = <0x103>;
+                       enable-method = "psci";
+                       next-level-cache = <&L2_0>;
+               };
+
+               L2_0: l2-cache {
+                       compatible = "cache";
+                       cache-level = <2>;
+               };
+       };
+
+       firmware {
+               scm: scm {
+                       compatible = "qcom,scm-qcs404", "qcom,scm";
+                       #reset-cells = <1>;
+               };
+       };
+
+       memory@80000000 {
+               device_type = "memory";
+               /* We expect the bootloader to fill in the size */
+               reg = <0 0x80000000 0 0>;
+       };
+
+       psci {
+               compatible = "arm,psci-1.0";
+               method = "smc";
+       };
+
+       remoteproc_adsp: remoteproc-adsp {
+               compatible = "qcom,qcs404-adsp-pas";
+
+               interrupts-extended = <&intc GIC_SPI 293 IRQ_TYPE_EDGE_RISING>,
+                                     <&adsp_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
+                                     <&adsp_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
+                                     <&adsp_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
+                                     <&adsp_smp2p_in 3 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "wdog", "fatal", "ready",
+                                 "handover", "stop-ack";
+
+               clocks = <&xo_board>;
+               clock-names = "xo";
+
+               memory-region = <&adsp_fw_mem>;
+
+               qcom,smem-states = <&adsp_smp2p_out 0>;
+               qcom,smem-state-names = "stop";
+
+               status = "disabled";
+
+               glink-edge {
+                       interrupts = <GIC_SPI 289 IRQ_TYPE_EDGE_RISING>;
+
+                       qcom,remote-pid = <2>;
+                       mboxes = <&apcs_glb 8>;
+
+                       label = "adsp";
+               };
+       };
+
+       remoteproc_cdsp: remoteproc-cdsp {
+               compatible = "qcom,qcs404-cdsp-pas";
+
+               interrupts-extended = <&intc GIC_SPI 229 IRQ_TYPE_EDGE_RISING>,
+                                     <&cdsp_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
+                                     <&cdsp_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
+                                     <&cdsp_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
+                                     <&cdsp_smp2p_in 3 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "wdog", "fatal", "ready",
+                                 "handover", "stop-ack";
+
+               clocks = <&xo_board>;
+               clock-names = "xo";
+
+               memory-region = <&cdsp_fw_mem>;
+
+               qcom,smem-states = <&cdsp_smp2p_out 0>;
+               qcom,smem-state-names = "stop";
+
+               status = "disabled";
+
+               glink-edge {
+                       interrupts = <GIC_SPI 141 IRQ_TYPE_EDGE_RISING>;
+
+                       qcom,remote-pid = <5>;
+                       mboxes = <&apcs_glb 12>;
+
+                       label = "cdsp";
+               };
+       };
+
+       remoteproc_wcss: remoteproc-wcss {
+               compatible = "qcom,qcs404-wcss-pas";
+
+               interrupts-extended = <&intc GIC_SPI 153 IRQ_TYPE_EDGE_RISING>,
+                                     <&wcss_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
+                                     <&wcss_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
+                                     <&wcss_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
+                                     <&wcss_smp2p_in 3 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "wdog", "fatal", "ready",
+                                 "handover", "stop-ack";
+
+               clocks = <&xo_board>;
+               clock-names = "xo";
+
+               memory-region = <&wlan_fw_mem>;
+
+               qcom,smem-states = <&wcss_smp2p_out 0>;
+               qcom,smem-state-names = "stop";
+
+               status = "disabled";
+
+               glink-edge {
+                       interrupts = <GIC_SPI 156 IRQ_TYPE_EDGE_RISING>;
+
+                       qcom,remote-pid = <1>;
+                       mboxes = <&apcs_glb 16>;
+
+                       label = "wcss";
+               };
+       };
+
+       reserved-memory {
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               memory@85600000 {
+                       reg = <0 0x85600000 0 0x90000>;
+                       no-map;
+               };
+
+               smem_region: memory@85f00000 {
+                       reg = <0 0x85f00000 0 0x200000>;
+                       no-map;
+               };
+
+               memory@86100000 {
+                       reg = <0 0x86100000 0 0x300000>;
+                       no-map;
+               };
+
+               wlan_fw_mem: memory@86400000 {
+                       reg = <0 0x86400000 0 0x1c00000>;
+                       no-map;
+               };
+
+               adsp_fw_mem: memory@88000000 {
+                       reg = <0 0x88000000 0 0x1a00000>;
+                       no-map;
+               };
+
+               cdsp_fw_mem: memory@89a00000 {
+                       reg = <0 0x89a00000 0 0x600000>;
+                       no-map;
+               };
+
+               wlan_msa_mem: memory@8a000000 {
+                       reg = <0 0x8a000000 0 0x100000>;
+                       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: glink-channel {
+                       compatible = "qcom,rpm-qcs404";
+                       qcom,glink-channels = "rpm_requests";
+               };
+       };
+
+       smem {
+               compatible = "qcom,smem";
+
+               memory-region = <&smem_region>;
+               qcom,rpm-msg-ram = <&rpm_msg_ram>;
+
+               hwlocks = <&tcsr_mutex 3>;
+       };
+
+       tcsr_mutex: hwlock {
+               compatible = "qcom,tcsr-mutex";
+               syscon = <&tcsr_mutex_regs 0 0x1000>;
+               #hwlock-cells = <1>;
+       };
+
+       soc: soc@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0 0 0 0xffffffff>;
+               compatible = "simple-bus";
+
+               rpm_msg_ram: memory@60000 {
+                       compatible = "qcom,rpm-msg-ram";
+                       reg = <0x00060000 0x6000>;
+               };
+
+               rng: rng@e3000 {
+                       compatible = "qcom,prng-ee";
+                       reg = <0x000e3000 0x1000>;
+                       clocks = <&gcc GCC_PRNG_AHB_CLK>;
+                       clock-names = "core";
+               };
+
+               tlmm: pinctrl@1000000 {
+                       compatible = "qcom,qcs404-pinctrl";
+                       reg = <0x01000000 0x200000>,
+                             <0x01300000 0x200000>,
+                             <0x07b00000 0x200000>;
+                       reg-names = "south", "north", "east";
+                       interrupts = <GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>;
+                       gpio-ranges = <&tlmm 0 0 120>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+
+               gcc: clock-controller@1800000 {
+                       compatible = "qcom,gcc-qcs404";
+                       reg = <0x01800000 0x80000>;
+                       #clock-cells = <1>;
+
+                       assigned-clocks = <&gcc GCC_APSS_AHB_CLK_SRC>;
+                       assigned-clock-rates = <19200000>;
+               };
+
+               tcsr_mutex_regs: syscon@1905000 {
+                       compatible = "syscon";
+                       reg = <0x01905000 0x20000>;
+               };
+
+               spmi_bus: spmi@200f000 {
+                       compatible = "qcom,spmi-pmic-arb";
+                       reg = <0x0200f000 0x001000>,
+                             <0x02400000 0x800000>,
+                             <0x02c00000 0x800000>,
+                             <0x03800000 0x200000>,
+                             <0x0200a000 0x002100>;
+                       reg-names = "core", "chnls", "obsrvr", "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>;
+               };
+
+               sdcc1: sdcc@7804000 {
+                       compatible = "qcom,sdhci-msm-v5";
+                       reg = <0x07804000 0x1000>, <0x7805000 0x1000>;
+                       reg-names = "hc_mem", "cmdq_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";
+
+                       status = "disabled";
+               };
+
+               blsp1_dma: dma@7884000 {
+                       compatible = "qcom,bam-v1.7.0";
+                       reg = <0x07884000 0x25000>;
+                       interrupts = <GIC_SPI 238 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_AHB_CLK>;
+                       clock-names = "bam_clk";
+                       #dma-cells = <1>;
+                       qcom,controlled-remotely = <1>;
+                       qcom,ee = <0>;
+                       status = "okay";
+               };
+
+               blsp1_uart2: serial@78b1000 {
+                       compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
+                       reg = <0x078b1000 0x200>;
+                       interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>, <&gcc GCC_BLSP1_AHB_CLK>;
+                       clock-names = "core", "iface";
+                       dmas = <&blsp1_dma 5>, <&blsp1_dma 4>;
+                       dma-names = "rx", "tx";
+                       status = "okay";
+               };
+
+               intc: interrupt-controller@b000000 {
+                       compatible = "qcom,msm-qgic2";
+                       interrupt-controller;
+                       #interrupt-cells = <3>;
+                       reg = <0x0b000000 0x1000>,
+                             <0x0b002000 0x1000>;
+               };
+
+               apcs_glb: mailbox@b011000 {
+                       compatible = "qcom,qcs404-apcs-apps-global", "syscon";
+                       reg = <0x0b011000 0x1000>;
+                       #mbox-cells = <1>;
+               };
+
+               timer@b120000 {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+                       compatible = "arm,armv7-timer-mem";
+                       reg = <0x0b120000 0x1000>;
+                       clock-frequency = <19200000>;
+
+                       frame@b121000 {
+                               frame-number = <0>;
+                               interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
+                                            <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0x0b121000 0x1000>,
+                                     <0x0b122000 0x1000>;
+                       };
+
+                       frame@b123000 {
+                               frame-number = <1>;
+                               interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0x0b123000 0x1000>;
+                               status = "disabled";
+                       };
+
+                       frame@b124000 {
+                               frame-number = <2>;
+                               interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0x0b124000 0x1000>;
+                               status = "disabled";
+                       };
+
+                       frame@b125000 {
+                               frame-number = <3>;
+                               interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0x0b125000 0x1000>;
+                               status = "disabled";
+                       };
+
+                       frame@b126000 {
+                               frame-number = <4>;
+                               interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0x0b126000 0x1000>;
+                               status = "disabled";
+                       };
+
+                       frame@b127000 {
+                               frame-number = <5>;
+                               interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0xb127000 0x1000>;
+                               status = "disabled";
+                       };
+
+                       frame@b128000 {
+                               frame-number = <6>;
+                               interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
+                               reg = <0x0b128000 0x1000>;
+                               status = "disabled";
+                       };
+               };
+       };
+
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupts = <GIC_PPI 2 0xff08>,
+                            <GIC_PPI 3 0xff08>,
+                            <GIC_PPI 4 0xff08>,
+                            <GIC_PPI 1 0xff08>;
+       };
+
+       smp2p-adsp {
+               compatible = "qcom,smp2p";
+               qcom,smem = <443>, <429>;
+               interrupts = <GIC_SPI 291 IRQ_TYPE_EDGE_RISING>;
+               mboxes = <&apcs_glb 10>;
+               qcom,local-pid = <0>;
+               qcom,remote-pid = <2>;
+
+               adsp_smp2p_out: master-kernel {
+                       qcom,entry-name = "master-kernel";
+                       #qcom,smem-state-cells = <1>;
+               };
+
+               adsp_smp2p_in: slave-kernel {
+                       qcom,entry-name = "slave-kernel";
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+
+       smp2p-cdsp {
+               compatible = "qcom,smp2p";
+               qcom,smem = <94>, <432>;
+               interrupts = <GIC_SPI 143 IRQ_TYPE_EDGE_RISING>;
+               mboxes = <&apcs_glb 14>;
+               qcom,local-pid = <0>;
+               qcom,remote-pid = <5>;
+
+               cdsp_smp2p_out: master-kernel {
+                       qcom,entry-name = "master-kernel";
+                       #qcom,smem-state-cells = <1>;
+               };
+
+               cdsp_smp2p_in: slave-kernel {
+                       qcom,entry-name = "slave-kernel";
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+
+       smp2p-wcss {
+               compatible = "qcom,smp2p";
+               qcom,smem = <435>, <428>;
+               interrupts = <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
+               mboxes = <&apcs_glb 18>;
+               qcom,local-pid = <0>;
+               qcom,remote-pid = <1>;
+
+               wcss_smp2p_out: master-kernel {
+                       qcom,entry-name = "master-kernel";
+                       #qcom,smem-state-cells = <1>;
+               };
+
+               wcss_smp2p_in: slave-kernel {
+                       qcom,entry-name = "slave-kernel";
+                       interrupt-controller;
+                       #interrupt-cells = <2>;
+               };
+       };
+};
index eedfaf8..d667eee 100644 (file)
        status = "okay";
 };
 
+&tlmm {
+       gpio-reserved-ranges = <0 4>, <81 4>;
+};
+
 &uart9 {
        status = "okay";
 };
index b72bdb0..c27cbd3 100644 (file)
@@ -12,6 +12,7 @@
 #include <dt-bindings/phy/phy-qcom-qusb2.h>
 #include <dt-bindings/reset/qcom,sdm845-aoss.h>
 #include <dt-bindings/soc/qcom,rpmh-rsc.h>
+#include <dt-bindings/clock/qcom,gcc-sdm845.h>
 
 / {
        interrupt-parent = <&intc>;
                        };
                };
 
+               rng: rng@793000 {
+                       compatible = "qcom,prng-ee";
+                       reg = <0x00793000 0x1000>;
+                       clocks = <&gcc GCC_PRNG_AHB_CLK>;
+                       clock-names = "core";
+               };
+
                qupv3_id_0: geniqup@8c0000 {
                        compatible = "qcom,geni-se-qup";
                        reg = <0x8c0000 0x6000>;
                                status = "disabled";
                        };
 
+                       uart0: serial@880000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0x880000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S0_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart0_default>;
+                               interrupts = <GIC_SPI 601 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c1: i2c@884000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0x884000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart1: serial@884000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0x884000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S1_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart1_default>;
+                               interrupts = <GIC_SPI 602 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c2: i2c@888000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0x888000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart2: serial@888000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0x888000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S2_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart2_default>;
+                               interrupts = <GIC_SPI 603 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c3: i2c@88c000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0x88c000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart3: serial@88c000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0x88c000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S3_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart3_default>;
+                               interrupts = <GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c4: i2c@890000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0x890000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart4: serial@890000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0x890000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S4_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart4_default>;
+                               interrupts = <GIC_SPI 605 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c5: i2c@894000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0x894000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart5: serial@894000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0x894000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S5_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart5_default>;
+                               interrupts = <GIC_SPI 606 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c6: i2c@898000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0x898000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart6: serial@898000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0x898000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S6_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart6_default>;
+                               interrupts = <GIC_SPI 607 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c7: i2c@89c000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0x89c000 0x4000>;
                                #size-cells = <0>;
                                status = "disabled";
                        };
+
+                       uart7: serial@89c000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0x89c000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP0_S7_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart7_default>;
+                               interrupts = <GIC_SPI 608 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
                };
 
                qupv3_id_1: geniqup@ac0000 {
                                status = "disabled";
                        };
 
+                       uart8: serial@a80000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0xa80000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S0_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart8_default>;
+                               interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c9: i2c@a84000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0xa84000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart10: serial@a88000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0xa88000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S2_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart10_default>;
+                               interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c11: i2c@a8c000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0xa8c000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart11: serial@a8c000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0xa8c000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S3_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart11_default>;
+                               interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c12: i2c@a90000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0xa90000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart12: serial@a90000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0xa90000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S4_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart12_default>;
+                               interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c13: i2c@a94000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0xa94000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart13: serial@a94000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0xa94000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S5_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart13_default>;
+                               interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c14: i2c@a98000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0xa98000 0x4000>;
                                status = "disabled";
                        };
 
+                       uart14: serial@a98000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0xa98000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S6_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart14_default>;
+                               interrupts = <GIC_SPI 359 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
+
                        i2c15: i2c@a9c000 {
                                compatible = "qcom,geni-i2c";
                                reg = <0xa9c000 0x4000>;
                                #size-cells = <0>;
                                status = "disabled";
                        };
+
+                       uart15: serial@a9c000 {
+                               compatible = "qcom,geni-uart";
+                               reg = <0xa9c000 0x4000>;
+                               clock-names = "se";
+                               clocks = <&gcc GCC_QUPV3_WRAP1_S7_CLK>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&qup_uart15_default>;
+                               interrupts = <GIC_SPI 360 IRQ_TYPE_LEVEL_HIGH>;
+                               status = "disabled";
+                       };
                };
 
                tcsr_mutex_regs: syscon@1f40000 {
                                };
                        };
 
+                       qup_uart0_default: qup-uart0-default {
+                               pinmux {
+                                       pins = "gpio2", "gpio3";
+                                       function = "qup0";
+                               };
+                       };
+
+                       qup_uart1_default: qup-uart1-default {
+                               pinmux {
+                                       pins = "gpio19", "gpio20";
+                                       function = "qup1";
+                               };
+                       };
+
+                       qup_uart2_default: qup-uart2-default {
+                               pinmux {
+                                       pins = "gpio29", "gpio30";
+                                       function = "qup2";
+                               };
+                       };
+
+                       qup_uart3_default: qup-uart3-default {
+                               pinmux {
+                                       pins = "gpio43", "gpio44";
+                                       function = "qup3";
+                               };
+                       };
+
+                       qup_uart4_default: qup-uart4-default {
+                               pinmux {
+                                       pins = "gpio91", "gpio92";
+                                       function = "qup4";
+                               };
+                       };
+
+                       qup_uart5_default: qup-uart5-default {
+                               pinmux {
+                                       pins = "gpio87", "gpio88";
+                                       function = "qup5";
+                               };
+                       };
+
+                       qup_uart6_default: qup-uart6-default {
+                               pinmux {
+                                       pins = "gpio47", "gpio48";
+                                       function = "qup6";
+                               };
+                       };
+
+                       qup_uart7_default: qup-uart7-default {
+                               pinmux {
+                                       pins = "gpio95", "gpio96";
+                                       function = "qup7";
+                               };
+                       };
+
+                       qup_uart8_default: qup-uart8-default {
+                               pinmux {
+                                       pins = "gpio67", "gpio68";
+                                       function = "qup8";
+                               };
+                       };
+
                        qup_uart9_default: qup-uart9-default {
                                pinmux {
                                        pins = "gpio4", "gpio5";
                                        function = "qup9";
                                };
                        };
+
+                       qup_uart10_default: qup-uart10-default {
+                               pinmux {
+                                       pins = "gpio53", "gpio54";
+                                       function = "qup10";
+                               };
+                       };
+
+                       qup_uart11_default: qup-uart11-default {
+                               pinmux {
+                                       pins = "gpio33", "gpio34";
+                                       function = "qup11";
+                               };
+                       };
+
+                       qup_uart12_default: qup-uart12-default {
+                               pinmux {
+                                       pins = "gpio51", "gpio52";
+                                       function = "qup12";
+                               };
+                       };
+
+                       qup_uart13_default: qup-uart13-default {
+                               pinmux {
+                                       pins = "gpio107", "gpio108";
+                                       function = "qup13";
+                               };
+                       };
+
+                       qup_uart14_default: qup-uart14-default {
+                               pinmux {
+                                       pins = "gpio31", "gpio32";
+                                       function = "qup14";
+                               };
+                       };
+
+                       qup_uart15_default: qup-uart15-default {
+                               pinmux {
+                                       pins = "gpio83", "gpio84";
+                                       function = "qup15";
+                               };
+                       };
                };
 
                usb_1_hsphy: phy@88e2000 {
                        };
                };
        };
+
+       thermal-zones {
+               cpu0-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 1>;
+
+                       trips {
+                               cpu_alert0: trip0 {
+                                       temperature = <75000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu_crit0: trip1 {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               cpu1-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 2>;
+
+                       trips {
+                               cpu_alert1: trip0 {
+                                       temperature = <75000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu_crit1: trip1 {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               cpu2-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 3>;
+
+                       trips {
+                               cpu_alert2: trip0 {
+                                       temperature = <75000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu_crit2: trip1 {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               cpu3-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 4>;
+
+                       trips {
+                               cpu_alert3: trip0 {
+                                       temperature = <75000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu_crit3: trip1 {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               cpu4-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 7>;
+
+                       trips {
+                               cpu_alert4: trip0 {
+                                       temperature = <75000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu_crit4: trip1 {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               cpu5-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 8>;
+
+                       trips {
+                               cpu_alert5: trip0 {
+                                       temperature = <75000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu_crit5: trip1 {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               cpu6-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 9>;
+
+                       trips {
+                               cpu_alert6: trip0 {
+                                       temperature = <75000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu_crit6: trip1 {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               cpu7-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+
+                       thermal-sensors = <&tsens0 10>;
+
+                       trips {
+                               cpu_alert7: trip0 {
+                                       temperature = <75000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu_crit7: trip1 {
+                                       temperature = <110000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+       };
 };
index 012cbb6..20745a8 100644 (file)
@@ -7,7 +7,8 @@
 
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
-#include <dt-bindings/clock/renesas-cpg-mssr.h>
+#include <dt-bindings/clock/r8a774a1-cpg-mssr.h>
+#include <dt-bindings/power/r8a774a1-sysc.h>
 
 / {
        compatible = "renesas,r8a774a1";
                        compatible = "arm,cortex-a57", "arm,armv8";
                        reg = <0x0>;
                        device_type = "cpu";
-                       power-domains = <&sysc 0>;
+                       power-domains = <&sysc R8A774A1_PD_CA57_CPU0>;
                        next-level-cache = <&L2_CA57>;
                        enable-method = "psci";
-                       clocks = <&cpg CPG_CORE 0>;
+                       clocks = <&cpg CPG_CORE R8A774A1_CLK_Z>;
                };
 
                a57_1: cpu@1 {
                        compatible = "arm,cortex-a57", "arm,armv8";
                        reg = <0x1>;
                        device_type = "cpu";
-                       power-domains = <&sysc 1>;
+                       power-domains = <&sysc R8A774A1_PD_CA57_CPU1>;
                        next-level-cache = <&L2_CA57>;
                        enable-method = "psci";
-                       clocks = <&cpg CPG_CORE 0>;
+                       clocks = <&cpg CPG_CORE R8A774A1_CLK_Z>;
                };
 
                a53_0: cpu@100 {
                        compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0x100>;
                        device_type = "cpu";
-                       power-domains = <&sysc 5>;
+                       power-domains = <&sysc R8A774A1_PD_CA53_CPU0>;
                        next-level-cache = <&L2_CA53>;
                        enable-method = "psci";
-                       clocks =<&cpg CPG_CORE 1>;
+                       clocks = <&cpg CPG_CORE R8A774A1_CLK_Z2>;
                };
 
                a53_1: cpu@101 {
                        compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0x101>;
                        device_type = "cpu";
-                       power-domains = <&sysc 6>;
+                       power-domains = <&sysc R8A774A1_PD_CA53_CPU1>;
                        next-level-cache = <&L2_CA53>;
                        enable-method = "psci";
-                       clocks =<&cpg CPG_CORE 1>;
+                       clocks = <&cpg CPG_CORE R8A774A1_CLK_Z2>;
                };
 
                a53_2: cpu@102 {
                        compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0x102>;
                        device_type = "cpu";
-                       power-domains = <&sysc 7>;
+                       power-domains = <&sysc R8A774A1_PD_CA53_CPU2>;
                        next-level-cache = <&L2_CA53>;
                        enable-method = "psci";
-                       clocks =<&cpg CPG_CORE 1>;
+                       clocks = <&cpg CPG_CORE R8A774A1_CLK_Z2>;
                };
 
                a53_3: cpu@103 {
                        compatible = "arm,cortex-a53", "arm,armv8";
                        reg = <0x103>;
                        device_type = "cpu";
-                       power-domains = <&sysc 8>;
+                       power-domains = <&sysc R8A774A1_PD_CA53_CPU3>;
                        next-level-cache = <&L2_CA53>;
                        enable-method = "psci";
-                       clocks =<&cpg CPG_CORE 1>;
+                       clocks = <&cpg CPG_CORE R8A774A1_CLK_Z2>;
                };
 
                L2_CA57: cache-controller-0 {
                        compatible = "cache";
-                       power-domains = <&sysc 12>;
+                       power-domains = <&sysc R8A774A1_PD_CA57_SCU>;
                        cache-unified;
                        cache-level = <2>;
                };
 
                L2_CA53: cache-controller-1 {
                        compatible = "cache";
-                       power-domains = <&sysc 21>;
+                       power-domains = <&sysc R8A774A1_PD_CA53_SCU>;
                        cache-unified;
                        cache-level = <2>;
                };
                                     "renesas,rcar-gen3-wdt";
                        reg = <0 0xe6020000 0 0x0c>;
                        clocks = <&cpg CPG_MOD 402>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 402>;
                        status = "disabled";
                };
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 912>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 912>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 911>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 911>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 910>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 910>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 909>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 909>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 908>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 908>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 907>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 907>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 906>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 906>;
                };
 
                        #interrupt-cells = <2>;
                        interrupt-controller;
                        clocks = <&cpg CPG_MOD 905>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 905>;
                };
 
                                     <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 522>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 522>;
                        #thermal-sensor-cells = <1>;
                };
                                      GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH
                                      GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 407>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 407>;
                };
 
                        reg = <0 0xe6500000 0 0x40>;
                        interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 931>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 931>;
                        dmas = <&dmac1 0x91>, <&dmac1 0x90>,
                               <&dmac2 0x91>, <&dmac2 0x90>;
                        reg = <0 0xe6508000 0 0x40>;
                        interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 930>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 930>;
                        dmas = <&dmac1 0x93>, <&dmac1 0x92>,
                               <&dmac2 0x93>, <&dmac2 0x92>;
                        reg = <0 0xe6510000 0 0x40>;
                        interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 929>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 929>;
                        dmas = <&dmac1 0x95>, <&dmac1 0x94>,
                               <&dmac2 0x95>, <&dmac2 0x94>;
                        reg = <0 0xe66d0000 0 0x40>;
                        interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 928>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 928>;
                        dmas = <&dmac0 0x97>, <&dmac0 0x96>;
                        dma-names = "tx", "rx";
                        reg = <0 0xe66d8000 0 0x40>;
                        interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 927>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 927>;
                        dmas = <&dmac0 0x99>, <&dmac0 0x98>;
                        dma-names = "tx", "rx";
                        reg = <0 0xe66e0000 0 0x40>;
                        interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 919>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 919>;
                        dmas = <&dmac0 0x9b>, <&dmac0 0x9a>;
                        dma-names = "tx", "rx";
                        reg = <0 0xe66e8000 0 0x40>;
                        interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 918>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 918>;
                        dmas = <&dmac0 0x9d>, <&dmac0 0x9c>;
                        dma-names = "tx", "rx";
                        reg = <0 0xe60b0000 0 0x425>;
                        interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 926>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 926>;
                        dmas = <&dmac0 0x11>, <&dmac0 0x10>;
                        dma-names = "tx", "rx";
                        reg = <0 0xe6540000 0 0x60>;
                        interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 520>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_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 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 520>;
                        status = "disabled";
                };
                        reg = <0 0xe6550000 0 0x60>;
                        interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 519>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_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 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 519>;
                        status = "disabled";
                };
                        reg = <0 0xe6560000 0 0x60>;
                        interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 518>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_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 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 518>;
                        status = "disabled";
                };
                        reg = <0 0xe66a0000 0 0x60>;
                        interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 517>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac0 0x37>, <&dmac0 0x36>;
                        dma-names = "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 517>;
                        status = "disabled";
                };
                        reg = <0 0xe66b0000 0 0x60>;
                        interrupts = <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 516>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac0 0x39>, <&dmac0 0x38>;
                        dma-names = "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 516>;
                        status = "disabled";
                };
                        renesas,buswait = <11>;
                        phys = <&usb2_phy0>;
                        phy-names = "usb";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 704>;
                        status = "disabled";
                };
                                      GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "ch0", "ch1";
                        clocks = <&cpg CPG_MOD 330>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 330>;
                        #dma-cells = <1>;
                        dma-channels = <2>;
                                      GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "ch0", "ch1";
                        clocks = <&cpg CPG_MOD 331>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 331>;
                        #dma-cells = <1>;
                        dma-channels = <2>;
                        clocks = <&cpg CPG_MOD 328>, <&usb3s0_clk>,
                                 <&usb_extal_clk>;
                        clock-names = "usb3-if", "usb3s_clk", "usb_extal";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 328>;
                        #phy-cells = <0>;
                        status = "disabled";
                                        "ch12", "ch13", "ch14", "ch15";
                        clocks = <&cpg CPG_MOD 219>;
                        clock-names = "fck";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 219>;
                        #dma-cells = <1>;
                        dma-channels = <16>;
                                        "ch12", "ch13", "ch14", "ch15";
                        clocks = <&cpg CPG_MOD 218>;
                        clock-names = "fck";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 218>;
                        #dma-cells = <1>;
                        dma-channels = <16>;
                                        "ch12", "ch13", "ch14", "ch15";
                        clocks = <&cpg CPG_MOD 217>;
                        clock-names = "fck";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 217>;
                        #dma-cells = <1>;
                        dma-channels = <16>;
                        compatible = "renesas,ipmmu-r8a774a1";
                        reg = <0 0xe6740000 0 0x1000>;
                        renesas,ipmmu-main = <&ipmmu_mm 0>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        #iommu-cells = <1>;
                };
 
                        compatible = "renesas,ipmmu-r8a774a1";
                        reg = <0 0xe7740000 0 0x1000>;
                        renesas,ipmmu-main = <&ipmmu_mm 1>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        #iommu-cells = <1>;
                };
 
                        compatible = "renesas,ipmmu-r8a774a1";
                        reg = <0 0xe6570000 0 0x1000>;
                        renesas,ipmmu-main = <&ipmmu_mm 2>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        #iommu-cells = <1>;
                };
 
                        reg = <0 0xe67b0000 0 0x1000>;
                        interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        #iommu-cells = <1>;
                };
 
                        compatible = "renesas,ipmmu-r8a774a1";
                        reg = <0 0xec670000 0 0x1000>;
                        renesas,ipmmu-main = <&ipmmu_mm 4>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        #iommu-cells = <1>;
                };
 
                        compatible = "renesas,ipmmu-r8a774a1";
                        reg = <0 0xfd800000 0 0x1000>;
                        renesas,ipmmu-main = <&ipmmu_mm 5>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        #iommu-cells = <1>;
                };
 
                        compatible = "renesas,ipmmu-r8a774a1";
                        reg = <0 0xfd950000 0 0x1000>;
                        renesas,ipmmu-main = <&ipmmu_mm 6>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        #iommu-cells = <1>;
                };
 
                        compatible = "renesas,ipmmu-r8a774a1";
                        reg = <0 0xfe6b0000 0 0x1000>;
                        renesas,ipmmu-main = <&ipmmu_mm 8>;
-                       power-domains = <&sysc 14>;
+                       power-domains = <&sysc R8A774A1_PD_A3VC>;
                        #iommu-cells = <1>;
                };
 
                        compatible = "renesas,ipmmu-r8a774a1";
                        reg = <0 0xfebd0000 0 0x1000>;
                        renesas,ipmmu-main = <&ipmmu_mm 9>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        #iommu-cells = <1>;
                };
 
                                          "ch20", "ch21", "ch22", "ch23",
                                          "ch24";
                        clocks = <&cpg CPG_MOD 812>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 812>;
                        phy-mode = "rgmii";
                        #address-cells = <1>;
                        status = "disabled";
                };
 
+               can0: can@e6c30000 {
+                       compatible = "renesas,can-r8a774a1",
+                                    "renesas,rcar-gen3-can";
+                       reg = <0 0xe6c30000 0 0x1000>;
+                       interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 916>, <&can_clk>;
+                       clock-names = "clkp1", "can_clk";
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 916>;
+                       status = "disabled";
+               };
+
+               can1: can@e6c38000 {
+                       compatible = "renesas,can-r8a774a1",
+                                    "renesas,rcar-gen3-can";
+                       reg = <0 0xe6c38000 0 0x1000>;
+                       interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 915>, <&can_clk>;
+                       clock-names = "clkp1", "can_clk";
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 915>;
+                       status = "disabled";
+               };
+
                pwm0: pwm@e6e30000 {
                        compatible = "renesas,pwm-r8a774a1", "renesas,pwm-rcar";
                        reg = <0 0xe6e30000 0 0x8>;
                        #pwm-cells = <2>;
                        clocks = <&cpg CPG_MOD 523>;
                        resets = <&cpg 523>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        status = "disabled";
                };
 
                        #pwm-cells = <2>;
                        clocks = <&cpg CPG_MOD 523>;
                        resets = <&cpg 523>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        status = "disabled";
                };
 
                        #pwm-cells = <2>;
                        clocks = <&cpg CPG_MOD 523>;
                        resets = <&cpg 523>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        status = "disabled";
                };
 
                        #pwm-cells = <2>;
                        clocks = <&cpg CPG_MOD 523>;
                        resets = <&cpg 523>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        status = "disabled";
                };
 
                        #pwm-cells = <2>;
                        clocks = <&cpg CPG_MOD 523>;
                        resets = <&cpg 523>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        status = "disabled";
                };
 
                        #pwm-cells = <2>;
                        clocks = <&cpg CPG_MOD 523>;
                        resets = <&cpg 523>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        status = "disabled";
                };
 
                        #pwm-cells = <2>;
                        clocks = <&cpg CPG_MOD 523>;
                        resets = <&cpg 523>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        status = "disabled";
                };
 
                        reg = <0 0xe6e60000 0 0x40>;
                        interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 207>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac1 0x51>, <&dmac1 0x50>,
                               <&dmac2 0x51>, <&dmac2 0x50>;
                        dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 207>;
                        status = "disabled";
                };
                        reg = <0 0xe6e68000 0 0x40>;
                        interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 206>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac1 0x53>, <&dmac1 0x52>,
                               <&dmac2 0x53>, <&dmac2 0x52>;
                        dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 206>;
                        status = "disabled";
                };
                        reg = <0 0xe6e88000 0 0x40>;
                        interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 310>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 310>;
                        status = "disabled";
                };
                        reg = <0 0xe6c50000 0 0x40>;
                        interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 204>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac0 0x57>, <&dmac0 0x56>;
                        dma-names = "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 204>;
                        status = "disabled";
                };
                        reg = <0 0xe6c40000 0 0x40>;
                        interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 203>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac0 0x59>, <&dmac0 0x58>;
                        dma-names = "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 203>;
                        status = "disabled";
                };
                        reg = <0 0xe6f30000 0 0x40>;
                        interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 202>,
-                                <&cpg CPG_CORE 19>,
+                                <&cpg CPG_CORE R8A774A1_CLK_S3D1>,
                                 <&scif_clk>;
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac1 0x5b>, <&dmac1 0x5a>,
                               <&dmac2 0x5b>, <&dmac2 0x5a>;
                        dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 202>;
                        status = "disabled";
                };
                        dmas = <&dmac1 0x41>, <&dmac1 0x40>,
                               <&dmac2 0x41>, <&dmac2 0x40>;
                        dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 211>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        dmas = <&dmac1 0x43>, <&dmac1 0x42>,
                               <&dmac2 0x43>, <&dmac2 0x42>;
                        dma-names = "tx", "rx", "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 210>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        clocks = <&cpg CPG_MOD 209>;
                        dmas = <&dmac0 0x45>, <&dmac0 0x44>;
                        dma-names = "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 209>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        clocks = <&cpg CPG_MOD 208>;
                        dmas = <&dmac0 0x47>, <&dmac0 0x46>;
                        dma-names = "tx", "rx";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 208>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };
 
+               vin0: video@e6ef0000 {
+                       compatible = "renesas,vin-r8a774a1";
+                       reg = <0 0xe6ef0000 0 0x1000>;
+                       interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 811>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 811>;
+                       renesas,id = <0>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin0csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&csi20vin0>;
+                                       };
+                                       vin0csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&csi40vin0>;
+                                       };
+                               };
+                       };
+               };
+
+               vin1: video@e6ef1000 {
+                       compatible = "renesas,vin-r8a774a1";
+                       reg = <0 0xe6ef1000 0 0x1000>;
+                       interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 810>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 810>;
+                       renesas,id = <1>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin1csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&csi20vin1>;
+                                       };
+                                       vin1csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&csi40vin1>;
+                                       };
+                               };
+                       };
+               };
+
+               vin2: video@e6ef2000 {
+                       compatible = "renesas,vin-r8a774a1";
+                       reg = <0 0xe6ef2000 0 0x1000>;
+                       interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 809>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 809>;
+                       renesas,id = <2>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin2csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&csi20vin2>;
+                                       };
+                                       vin2csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&csi40vin2>;
+                                       };
+                               };
+                       };
+               };
+
+               vin3: video@e6ef3000 {
+                       compatible = "renesas,vin-r8a774a1";
+                       reg = <0 0xe6ef3000 0 0x1000>;
+                       interrupts = <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 808>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 808>;
+                       renesas,id = <3>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin3csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&csi20vin3>;
+                                       };
+                                       vin3csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&csi40vin3>;
+                                       };
+                               };
+                       };
+               };
+
+               vin4: video@e6ef4000 {
+                       compatible = "renesas,vin-r8a774a1";
+                       reg = <0 0xe6ef4000 0 0x1000>;
+                       interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 807>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 807>;
+                       renesas,id = <4>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin4csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&csi20vin4>;
+                                       };
+                                       vin4csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&csi40vin4>;
+                                       };
+                               };
+                       };
+               };
+
+               vin5: video@e6ef5000 {
+                       compatible = "renesas,vin-r8a774a1";
+                       reg = <0 0xe6ef5000 0 0x1000>;
+                       interrupts = <GIC_SPI 175 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 806>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 806>;
+                       renesas,id = <5>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin5csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&csi20vin5>;
+                                       };
+                                       vin5csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&csi40vin5>;
+                                       };
+                               };
+                       };
+               };
+
+               vin6: video@e6ef6000 {
+                       compatible = "renesas,vin-r8a774a1";
+                       reg = <0 0xe6ef6000 0 0x1000>;
+                       interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 805>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 805>;
+                       renesas,id = <6>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin6csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&csi20vin6>;
+                                       };
+                                       vin6csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&csi40vin6>;
+                                       };
+                               };
+                       };
+               };
+
+               vin7: video@e6ef7000 {
+                       compatible = "renesas,vin-r8a774a1";
+                       reg = <0 0xe6ef7000 0 0x1000>;
+                       interrupts = <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 804>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 804>;
+                       renesas,id = <7>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       vin7csi20: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&csi20vin7>;
+                                       };
+                                       vin7csi40: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&csi40vin7>;
+                                       };
+                               };
+                       };
+               };
+
                rcar_sound: sound@ec500000 {
                        /*
                         * #sound-dai-cells is required
                                 <&cpg CPG_MOD 1019>, <&cpg CPG_MOD 1018>,
                                 <&audio_clk_a>, <&audio_clk_b>,
                                 <&audio_clk_c>,
-                                <&cpg CPG_CORE 10>;
+                                <&cpg CPG_CORE R8A774A1_CLK_S0D4>;
                        clock-names = "ssi-all",
                                      "ssi.9", "ssi.8", "ssi.7", "ssi.6",
                                      "ssi.5", "ssi.4", "ssi.3", "ssi.2",
                                      "ctu.1", "ctu.0",
                                      "dvc.0", "dvc.1",
                                      "clk_a", "clk_b", "clk_c", "clk_i";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 1005>,
                                 <&cpg 1006>, <&cpg 1007>,
                                 <&cpg 1008>, <&cpg 1009>,
                                        "ch12", "ch13", "ch14", "ch15";
                        clocks = <&cpg CPG_MOD 502>;
                        clock-names = "fck";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 502>;
                        #dma-cells = <1>;
                        dma-channels = <16>;
                                        "ch12", "ch13", "ch14", "ch15";
                        clocks = <&cpg CPG_MOD 501>;
                        clock-names = "fck";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 501>;
                        #dma-cells = <1>;
                        dma-channels = <16>;
                        reg = <0 0xee000000 0 0xc00>;
                        interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 328>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 328>;
                        status = "disabled";
                };
                        reg = <0 0xee020000 0 0x400>;
                        interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 328>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 328>;
                        status = "disabled";
                };
                        clocks = <&cpg CPG_MOD 703>;
                        phys = <&usb2_phy0>;
                        phy-names = "usb";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 703>;
                        status = "disabled";
                };
                        clocks = <&cpg CPG_MOD 702>;
                        phys = <&usb2_phy1>;
                        phy-names = "usb";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 702>;
                        status = "disabled";
                };
                        phys = <&usb2_phy0>;
                        phy-names = "usb";
                        companion = <&ohci0>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 703>;
                        status = "disabled";
                };
                        phys = <&usb2_phy1>;
                        phy-names = "usb";
                        companion = <&ohci1>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 702>;
                        status = "disabled";
                };
                        reg = <0 0xee080200 0 0x700>;
                        interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 703>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 703>;
                        #phy-cells = <0>;
                        status = "disabled";
                                     "renesas,rcar-gen3-usb2-phy";
                        reg = <0 0xee0a0200 0 0x700>;
                        clocks = <&cpg CPG_MOD 702>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 702>;
                        #phy-cells = <0>;
                        status = "disabled";
                        interrupts = <GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 314>;
                        max-frequency = <200000000>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 314>;
                        status = "disabled";
                };
                        interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 313>;
                        max-frequency = <200000000>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 313>;
                        status = "disabled";
                };
                        interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 312>;
                        max-frequency = <200000000>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 312>;
                        status = "disabled";
                };
                        interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 311>;
                        max-frequency = <200000000>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 311>;
                        status = "disabled";
                };
                                        (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_HIGH)>;
                        clocks = <&cpg CPG_MOD 408>;
                        clock-names = "clk";
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 408>;
                };
 
                        compatible = "renesas,fcpf";
                        reg = <0 0xfe950000 0 0x200>;
                        clocks = <&cpg CPG_MOD 615>;
-                       power-domains = <&sysc 14>;
+                       power-domains = <&sysc R8A774A1_PD_A3VC>;
                        resets = <&cpg 615>;
                };
 
                        compatible = "renesas,fcpv";
                        reg = <0 0xfe96f000 0 0x200>;
                        clocks = <&cpg CPG_MOD 607>;
-                       power-domains = <&sysc 14>;
+                       power-domains = <&sysc R8A774A1_PD_A3VC>;
                        resets = <&cpg 607>;
                };
 
                        compatible = "renesas,fcpv";
                        reg = <0 0xfea27000 0 0x200>;
                        clocks = <&cpg CPG_MOD 603>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 603>;
                        iommus = <&ipmmu_vi0 8>;
                };
                        compatible = "renesas,fcpv";
                        reg = <0 0xfea2f000 0 0x200>;
                        clocks = <&cpg CPG_MOD 602>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 602>;
                        iommus = <&ipmmu_vi0 9>;
                };
                        compatible = "renesas,fcpv";
                        reg = <0 0xfea37000 0 0x200>;
                        clocks = <&cpg CPG_MOD 601>;
-                       power-domains = <&sysc 32>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
                        resets = <&cpg 601>;
                        iommus = <&ipmmu_vi0 10>;
                };
                        compatible = "renesas,fcpv";
                        reg = <0 0xfe9af000 0 0x200>;
                        clocks = <&cpg CPG_MOD 611>;
-                       power-domains = <&sysc 14>;
+                       power-domains = <&sysc R8A774A1_PD_A3VC>;
                        resets = <&cpg 611>;
                        iommus = <&ipmmu_vc0 19>;
                };
 
+               csi20: csi2@fea80000 {
+                       compatible = "renesas,r8a774a1-csi2";
+                       reg = <0 0xfea80000 0 0x10000>;
+                       interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 714>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 714>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       csi20vin0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&vin0csi20>;
+                                       };
+                                       csi20vin1: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&vin1csi20>;
+                                       };
+                                       csi20vin2: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&vin2csi20>;
+                                       };
+                                       csi20vin3: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint = <&vin3csi20>;
+                                       };
+                                       csi20vin4: endpoint@4 {
+                                               reg = <4>;
+                                               remote-endpoint = <&vin4csi20>;
+                                       };
+                                       csi20vin5: endpoint@5 {
+                                               reg = <5>;
+                                               remote-endpoint = <&vin5csi20>;
+                                       };
+                                       csi20vin6: endpoint@6 {
+                                               reg = <6>;
+                                               remote-endpoint = <&vin6csi20>;
+                                       };
+                                       csi20vin7: endpoint@7 {
+                                               reg = <7>;
+                                               remote-endpoint = <&vin7csi20>;
+                                       };
+                               };
+                       };
+               };
+
+               csi40: csi2@feaa0000 {
+                       compatible = "renesas,r8a774a1-csi2";
+                       reg = <0 0xfeaa0000 0 0x10000>;
+                       interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 716>;
+                       power-domains = <&sysc R8A774A1_PD_ALWAYS_ON>;
+                       resets = <&cpg 716>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       reg = <1>;
+
+                                       csi40vin0: endpoint@0 {
+                                               reg = <0>;
+                                               remote-endpoint = <&vin0csi40>;
+                                       };
+                                       csi40vin1: endpoint@1 {
+                                               reg = <1>;
+                                               remote-endpoint = <&vin1csi40>;
+                                       };
+                                       csi40vin2: endpoint@2 {
+                                               reg = <2>;
+                                               remote-endpoint = <&vin2csi40>;
+                                       };
+                                       csi40vin3: endpoint@3 {
+                                               reg = <3>;
+                                               remote-endpoint = <&vin3csi40>;
+                                       };
+                                       csi40vin4: endpoint@4 {
+                                               reg = <4>;
+                                               remote-endpoint = <&vin4csi40>;
+                                       };
+                                       csi40vin5: endpoint@5 {
+                                               reg = <5>;
+                                               remote-endpoint = <&vin5csi40>;
+                                       };
+                                       csi40vin6: endpoint@6 {
+                                               reg = <6>;
+                                               remote-endpoint = <&vin6csi40>;
+                                       };
+                                       csi40vin7: endpoint@7 {
+                                               reg = <7>;
+                                               remote-endpoint = <&vin7csi40>;
+                                       };
+                               };
+
+                       };
+               };
+
                prr: chipid@fff00044 {
                        compatible = "renesas,prr";
                        reg = <0 0xfff00044 0 4>;
index 0895503..c1a56ea 100644 (file)
        ports {
                /* rsnd_port0 is on salvator-common */
                rsnd_port1: port@1 {
+                       reg = <1>;
                        rsnd_endpoint1: endpoint {
                                remote-endpoint = <&dw_hdmi0_snd_in>;
 
                        };
                };
                rsnd_port2: port@2 {
+                       reg = <2>;
                        rsnd_endpoint2: endpoint {
                                remote-endpoint = <&dw_hdmi1_snd_in>;
 
index 0fb84c2..40d10da 100644 (file)
@@ -28,6 +28,7 @@
                compatible = "renesas,ipmmu-r8a7795";
                reg = <0 0xec680000 0 0x1000>;
                renesas,ipmmu-main = <&ipmmu_mm 5>;
+               power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                #iommu-cells = <1>;
        };
 
@@ -35,6 +36,7 @@
                compatible = "renesas,ipmmu-r8a7795";
                reg = <0 0xe7730000 0 0x1000>;
                renesas,ipmmu-main = <&ipmmu_mm 8>;
+               power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                #iommu-cells = <1>;
        };
 
index 1620e8d..d2d48b3 100644 (file)
        ports {
                /* rsnd_port0 is on salvator-common */
                rsnd_port1: port@1 {
+                       reg = <1>;
                        rsnd_endpoint1: endpoint {
                                remote-endpoint = <&dw_hdmi0_snd_in>;
 
                        };
                };
                rsnd_port2: port@2 {
+                       reg = <2>;
                        rsnd_endpoint2: endpoint {
                                remote-endpoint = <&dw_hdmi1_snd_in>;
 
index cf08a11..42101fc 100644 (file)
        ports {
                /* rsnd_port0 is on salvator-common */
                rsnd_port1: port@1 {
+                       reg = <1>;
                        rsnd_endpoint1: endpoint {
                                remote-endpoint = <&dw_hdmi0_snd_in>;
 
                        };
                };
                rsnd_port2: port@2 {
+                       reg = <2>;
                        rsnd_endpoint2: endpoint {
                                remote-endpoint = <&dw_hdmi1_snd_in>;
 
index b5f2273..af9605d 100644 (file)
                #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", "arm,armv8";
                        reg = <0x0>;
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7795_CLK_Z>;
                        operating-points-v2 = <&cluster0_opp>;
+                       capacity-dmips-mhz = <1024>;
                        #cooling-cells = <2>;
                };
 
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7795_CLK_Z>;
                        operating-points-v2 = <&cluster0_opp>;
+                       capacity-dmips-mhz = <1024>;
                        #cooling-cells = <2>;
                };
 
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7795_CLK_Z>;
                        operating-points-v2 = <&cluster0_opp>;
+                       capacity-dmips-mhz = <1024>;
                        #cooling-cells = <2>;
                };
 
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7795_CLK_Z>;
                        operating-points-v2 = <&cluster0_opp>;
+                       capacity-dmips-mhz = <1024>;
                        #cooling-cells = <2>;
                };
 
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7795_CLK_Z2>;
                        operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
                };
 
                a53_1: cpu@101 {
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7795_CLK_Z2>;
                        operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
                };
 
                a53_2: cpu@102 {
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7795_CLK_Z2>;
                        operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
                };
 
                a53_3: cpu@103 {
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7795_CLK_Z2>;
                        operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
                };
 
                L2_CA57: cache-controller-0 {
                        clock-names = "fck", "brg_int", "scif_clk";
                        dmas = <&dmac1 0x35>, <&dmac1 0x34>,
                               <&dmac2 0x35>, <&dmac2 0x34>;
-                       dma-names = "tx", "rx";
+                       dma-names = "tx", "rx", "tx", "rx";
                        power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
                        resets = <&cpg 518>;
                        status = "disabled";
                hsusb: usb@e6590000 {
                        compatible = "renesas,usbhs-r8a7795",
                                     "renesas,rcar-gen3-usbhs";
-                       reg = <0 0xe6590000 0 0x100>;
+                       reg = <0 0xe6590000 0 0x200>;
                        interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 704>, <&cpg CPG_MOD 703>;
                        dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
                hsusb3: usb@e659c000 {
                        compatible = "renesas,usbhs-r8a7795",
                                     "renesas,rcar-gen3-usbhs";
-                       reg = <0 0xe659c000 0 0x100>;
+                       reg = <0 0xe659c000 0 0x200>;
                        interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 705>, <&cpg CPG_MOD 700>;
                        dmas = <&usb_dmac2 0>, <&usb_dmac2 1>,
                                };
                        };
 
+                       rcar_sound,ssiu {
+                               ssiu00: ssiu-0 {
+                                       dmas = <&audma0 0x15>, <&audma1 0x16>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu01: ssiu-1 {
+                                       dmas = <&audma0 0x35>, <&audma1 0x36>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu02: ssiu-2 {
+                                       dmas = <&audma0 0x37>, <&audma1 0x38>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu03: ssiu-3 {
+                                       dmas = <&audma0 0x47>, <&audma1 0x48>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu04: ssiu-4 {
+                                       dmas = <&audma0 0x3F>, <&audma1 0x40>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu05: ssiu-5 {
+                                       dmas = <&audma0 0x43>, <&audma1 0x44>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu06: ssiu-6 {
+                                       dmas = <&audma0 0x4F>, <&audma1 0x50>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu07: ssiu-7 {
+                                       dmas = <&audma0 0x53>, <&audma1 0x54>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu10: ssiu-8 {
+                                       dmas = <&audma0 0x49>, <&audma1 0x4a>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu11: ssiu-9 {
+                                       dmas = <&audma0 0x4B>, <&audma1 0x4C>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu12: ssiu-10 {
+                                       dmas = <&audma0 0x57>, <&audma1 0x58>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu13: ssiu-11 {
+                                       dmas = <&audma0 0x59>, <&audma1 0x5A>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu14: ssiu-12 {
+                                       dmas = <&audma0 0x5F>, <&audma1 0x60>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu15: ssiu-13 {
+                                       dmas = <&audma0 0xC3>, <&audma1 0xC4>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu16: ssiu-14 {
+                                       dmas = <&audma0 0xC7>, <&audma1 0xC8>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu17: ssiu-15 {
+                                       dmas = <&audma0 0xCB>, <&audma1 0xCC>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu20: ssiu-16 {
+                                       dmas = <&audma0 0x63>, <&audma1 0x64>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu21: ssiu-17 {
+                                       dmas = <&audma0 0x67>, <&audma1 0x68>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu22: ssiu-18 {
+                                       dmas = <&audma0 0x6B>, <&audma1 0x6C>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu23: ssiu-19 {
+                                       dmas = <&audma0 0x6D>, <&audma1 0x6E>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu24: ssiu-20 {
+                                       dmas = <&audma0 0xCF>, <&audma1 0xCE>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu25: ssiu-21 {
+                                       dmas = <&audma0 0xEB>, <&audma1 0xEC>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu26: ssiu-22 {
+                                       dmas = <&audma0 0xED>, <&audma1 0xEE>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu27: ssiu-23 {
+                                       dmas = <&audma0 0xEF>, <&audma1 0xF0>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu30: ssiu-24 {
+                                       dmas = <&audma0 0x6f>, <&audma1 0x70>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu31: ssiu-25 {
+                                       dmas = <&audma0 0x21>, <&audma1 0x22>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu32: ssiu-26 {
+                                       dmas = <&audma0 0x23>, <&audma1 0x24>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu33: ssiu-27 {
+                                       dmas = <&audma0 0x25>, <&audma1 0x26>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu34: ssiu-28 {
+                                       dmas = <&audma0 0x27>, <&audma1 0x28>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu35: ssiu-29 {
+                                       dmas = <&audma0 0x29>, <&audma1 0x2A>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu36: ssiu-30 {
+                                       dmas = <&audma0 0x2B>, <&audma1 0x2C>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu37: ssiu-31 {
+                                       dmas = <&audma0 0x2D>, <&audma1 0x2E>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu40: ssiu-32 {
+                                       dmas =  <&audma0 0x71>, <&audma1 0x72>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu41: ssiu-33 {
+                                       dmas = <&audma0 0x17>, <&audma1 0x18>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu42: ssiu-34 {
+                                       dmas = <&audma0 0x19>, <&audma1 0x1A>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu43: ssiu-35 {
+                                       dmas = <&audma0 0x1B>, <&audma1 0x1C>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu44: ssiu-36 {
+                                       dmas = <&audma0 0x1D>, <&audma1 0x1E>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu45: ssiu-37 {
+                                       dmas = <&audma0 0x1F>, <&audma1 0x20>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu46: ssiu-38 {
+                                       dmas = <&audma0 0x31>, <&audma1 0x32>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu47: ssiu-39 {
+                                       dmas = <&audma0 0x33>, <&audma1 0x34>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu50: ssiu-40 {
+                                       dmas = <&audma0 0x73>, <&audma1 0x74>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu60: ssiu-41 {
+                                       dmas = <&audma0 0x75>, <&audma1 0x76>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu70: ssiu-42 {
+                                       dmas = <&audma0 0x79>, <&audma1 0x7a>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu80: ssiu-43 {
+                                       dmas = <&audma0 0x7b>, <&audma1 0x7c>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu90: ssiu-44 {
+                                       dmas = <&audma0 0x7d>, <&audma1 0x7e>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu91: ssiu-45 {
+                                       dmas = <&audma0 0x7F>, <&audma1 0x80>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu92: ssiu-46 {
+                                       dmas = <&audma0 0x81>, <&audma1 0x82>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu93: ssiu-47 {
+                                       dmas = <&audma0 0x83>, <&audma1 0x84>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu94: ssiu-48 {
+                                       dmas = <&audma0 0xA3>, <&audma1 0xA4>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu95: ssiu-49 {
+                                       dmas = <&audma0 0xA5>, <&audma1 0xA6>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu96: ssiu-50 {
+                                       dmas = <&audma0 0xA7>, <&audma1 0xA8>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu97: ssiu-51 {
+                                       dmas = <&audma0 0xA9>, <&audma1 0xAA>;
+                                       dma-names = "rx", "tx";
+                               };
+                       };
+
                        rcar_sound,ssi {
                                ssi0: ssi-0 {
                                        interrupts = <GIC_SPI 370 IRQ_TYPE_LEVEL_HIGH>;
                                        dma-names = "rx", "tx", "rxu", "txu";
                                };
                        };
-
-                       ports {
-                               #address-cells = <1>;
-                               #size-cells = <0>;
-                               port@0 {
-                                       reg = <0>;
-                               };
-                               port@1 {
-                                       reg = <1>;
-                               };
-                               port@2 {
-                                       reg = <2>;
-                               };
-                       };
                };
 
                audma0: dma-controller@ec700000 {
                        cooling-maps {
                                map0 {
                                        trip = <&sensor1_passive>;
-                                       cooling-device = <&a57_0 4 4>;
+                                       cooling-device = <&a57_0 4 4>,
+                                                        <&a57_1 4 4>,
+                                                        <&a57_2 4 4>,
+                                                        <&a57_3 4 4>;
                                };
                        };
                };
                        cooling-maps {
                                map0 {
                                        trip = <&sensor2_passive>;
-                                       cooling-device = <&a57_0 4 4>;
+                                       cooling-device = <&a57_0 4 4>,
+                                                        <&a57_1 4 4>,
+                                                        <&a57_2 4 4>,
+                                                        <&a57_3 4 4>;
                                };
                        };
                };
                        cooling-maps {
                                map0 {
                                        trip = <&sensor3_passive>;
-                                       cooling-device = <&a57_0 4 4>;
+                                       cooling-device = <&a57_0 4 4>,
+                                                        <&a57_1 4 4>,
+                                                        <&a57_2 4 4>,
+                                                        <&a57_3 4 4>;
                                };
                        };
                };
index 1ec6aaa..afedbf5 100644 (file)
                #address-cells = <1>;
                #size-cells = <0>;
 
+               cpu-map {
+                       cluster0 {
+                               core0 {
+                                       cpu = <&a57_0>;
+                               };
+                               core1 {
+                                       cpu = <&a57_1>;
+                               };
+                       };
+
+                       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", "arm,armv8";
                        reg = <0x0>;
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7796_CLK_Z>;
                        operating-points-v2 = <&cluster0_opp>;
+                       capacity-dmips-mhz = <1024>;
                        #cooling-cells = <2>;
                };
 
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7796_CLK_Z>;
                        operating-points-v2 = <&cluster0_opp>;
+                       capacity-dmips-mhz = <1024>;
                        #cooling-cells = <2>;
                };
 
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7796_CLK_Z2>;
                        operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
                };
 
                a53_1: cpu@101 {
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7796_CLK_Z2>;
                        operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
                };
 
                a53_2: cpu@102 {
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7796_CLK_Z2>;
                        operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
                };
 
                a53_3: cpu@103 {
                        enable-method = "psci";
                        clocks = <&cpg CPG_CORE R8A7796_CLK_Z2>;
                        operating-points-v2 = <&cluster1_opp>;
+                       capacity-dmips-mhz = <535>;
                };
 
                L2_CA57: cache-controller-0 {
                        reg = <0 0xe6060000 0 0x50c>;
                };
 
+               cmt0: timer@e60f0000 {
+                       compatible = "renesas,r8a7796-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 R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 303>;
+                       status = "disabled";
+               };
+
+               cmt1: timer@e6130000 {
+                       compatible = "renesas,r8a7796-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 R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 302>;
+                       status = "disabled";
+               };
+
+               cmt2: timer@e6140000 {
+                       compatible = "renesas,r8a7796-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 R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 301>;
+                       status = "disabled";
+               };
+
+               cmt3: timer@e6148000 {
+                       compatible = "renesas,r8a7796-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 R8A7796_PD_ALWAYS_ON>;
+                       resets = <&cpg 300>;
+                       status = "disabled";
+               };
+
                cpg: clock-controller@e6150000 {
                        compatible = "renesas,r8a7796-cpg-mssr";
                        reg = <0 0xe6150000 0 0x1000>;
                hsusb: usb@e6590000 {
                        compatible = "renesas,usbhs-r8a7796",
                                     "renesas,rcar-gen3-usbhs";
-                       reg = <0 0xe6590000 0 0x100>;
+                       reg = <0 0xe6590000 0 0x200>;
                        interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 704>, <&cpg CPG_MOD 703>;
                        dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
                                };
                        };
 
+                       rcar_sound,ssiu {
+                               ssiu00: ssiu-0 {
+                                       dmas = <&audma0 0x15>, <&audma1 0x16>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu01: ssiu-1 {
+                                       dmas = <&audma0 0x35>, <&audma1 0x36>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu02: ssiu-2 {
+                                       dmas = <&audma0 0x37>, <&audma1 0x38>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu03: ssiu-3 {
+                                       dmas = <&audma0 0x47>, <&audma1 0x48>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu04: ssiu-4 {
+                                       dmas = <&audma0 0x3F>, <&audma1 0x40>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu05: ssiu-5 {
+                                       dmas = <&audma0 0x43>, <&audma1 0x44>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu06: ssiu-6 {
+                                       dmas = <&audma0 0x4F>, <&audma1 0x50>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu07: ssiu-7 {
+                                       dmas = <&audma0 0x53>, <&audma1 0x54>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu10: ssiu-8 {
+                                       dmas = <&audma0 0x49>, <&audma1 0x4a>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu11: ssiu-9 {
+                                       dmas = <&audma0 0x4B>, <&audma1 0x4C>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu12: ssiu-10 {
+                                       dmas = <&audma0 0x57>, <&audma1 0x58>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu13: ssiu-11 {
+                                       dmas = <&audma0 0x59>, <&audma1 0x5A>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu14: ssiu-12 {
+                                       dmas = <&audma0 0x5F>, <&audma1 0x60>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu15: ssiu-13 {
+                                       dmas = <&audma0 0xC3>, <&audma1 0xC4>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu16: ssiu-14 {
+                                       dmas = <&audma0 0xC7>, <&audma1 0xC8>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu17: ssiu-15 {
+                                       dmas = <&audma0 0xCB>, <&audma1 0xCC>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu20: ssiu-16 {
+                                       dmas = <&audma0 0x63>, <&audma1 0x64>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu21: ssiu-17 {
+                                       dmas = <&audma0 0x67>, <&audma1 0x68>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu22: ssiu-18 {
+                                       dmas = <&audma0 0x6B>, <&audma1 0x6C>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu23: ssiu-19 {
+                                       dmas = <&audma0 0x6D>, <&audma1 0x6E>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu24: ssiu-20 {
+                                       dmas = <&audma0 0xCF>, <&audma1 0xCE>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu25: ssiu-21 {
+                                       dmas = <&audma0 0xEB>, <&audma1 0xEC>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu26: ssiu-22 {
+                                       dmas = <&audma0 0xED>, <&audma1 0xEE>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu27: ssiu-23 {
+                                       dmas = <&audma0 0xEF>, <&audma1 0xF0>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu30: ssiu-24 {
+                                       dmas = <&audma0 0x6f>, <&audma1 0x70>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu31: ssiu-25 {
+                                       dmas = <&audma0 0x21>, <&audma1 0x22>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu32: ssiu-26 {
+                                       dmas = <&audma0 0x23>, <&audma1 0x24>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu33: ssiu-27 {
+                                       dmas = <&audma0 0x25>, <&audma1 0x26>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu34: ssiu-28 {
+                                       dmas = <&audma0 0x27>, <&audma1 0x28>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu35: ssiu-29 {
+                                       dmas = <&audma0 0x29>, <&audma1 0x2A>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu36: ssiu-30 {
+                                       dmas = <&audma0 0x2B>, <&audma1 0x2C>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu37: ssiu-31 {
+                                       dmas = <&audma0 0x2D>, <&audma1 0x2E>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu40: ssiu-32 {
+                                       dmas =  <&audma0 0x71>, <&audma1 0x72>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu41: ssiu-33 {
+                                       dmas = <&audma0 0x17>, <&audma1 0x18>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu42: ssiu-34 {
+                                       dmas = <&audma0 0x19>, <&audma1 0x1A>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu43: ssiu-35 {
+                                       dmas = <&audma0 0x1B>, <&audma1 0x1C>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu44: ssiu-36 {
+                                       dmas = <&audma0 0x1D>, <&audma1 0x1E>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu45: ssiu-37 {
+                                       dmas = <&audma0 0x1F>, <&audma1 0x20>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu46: ssiu-38 {
+                                       dmas = <&audma0 0x31>, <&audma1 0x32>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu47: ssiu-39 {
+                                       dmas = <&audma0 0x33>, <&audma1 0x34>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu50: ssiu-40 {
+                                       dmas = <&audma0 0x73>, <&audma1 0x74>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu60: ssiu-41 {
+                                       dmas = <&audma0 0x75>, <&audma1 0x76>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu70: ssiu-42 {
+                                       dmas = <&audma0 0x79>, <&audma1 0x7a>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu80: ssiu-43 {
+                                       dmas = <&audma0 0x7b>, <&audma1 0x7c>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu90: ssiu-44 {
+                                       dmas = <&audma0 0x7d>, <&audma1 0x7e>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu91: ssiu-45 {
+                                       dmas = <&audma0 0x7F>, <&audma1 0x80>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu92: ssiu-46 {
+                                       dmas = <&audma0 0x81>, <&audma1 0x82>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu93: ssiu-47 {
+                                       dmas = <&audma0 0x83>, <&audma1 0x84>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu94: ssiu-48 {
+                                       dmas = <&audma0 0xA3>, <&audma1 0xA4>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu95: ssiu-49 {
+                                       dmas = <&audma0 0xA5>, <&audma1 0xA6>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu96: ssiu-50 {
+                                       dmas = <&audma0 0xA7>, <&audma1 0xA8>;
+                                       dma-names = "rx", "tx";
+                               };
+                               ssiu97: ssiu-51 {
+                                       dmas = <&audma0 0xA9>, <&audma1 0xAA>;
+                                       dma-names = "rx", "tx";
+                               };
+                       };
+
                        rcar_sound,ssi {
                                ssi0: ssi-0 {
                                        interrupts = <GIC_SPI 370 IRQ_TYPE_LEVEL_HIGH>;
                        cooling-maps {
                                map0 {
                                        trip = <&sensor1_passive>;
-                                       cooling-device = <&a57_0 5 5>;
+                                       cooling-device = <&a57_0 5 5>, <&a57_1 5 5>;
                                };
                        };
                };
                        cooling-maps {
                                map0 {
                                        trip = <&sensor2_passive>;
-                                       cooling-device = <&a57_0 5 5>;
+                                       cooling-device = <&a57_0 5 5>, <&a57_1 5 5>;
                                };
                        };
                };
                        cooling-maps {
                                map0 {
                                        trip = <&sensor3_passive>;
-                                       cooling-device = <&a57_0 5 5>;
+                                       cooling-device = <&a57_0 5 5>, <&a57_1 5 5>;
                                };
                        };
                };
index 83946ca..6dc9b1f 100644 (file)
                hsusb: usb@e6590000 {
                        compatible = "renesas,usbhs-r8a77965",
                                     "renesas,rcar-gen3-usbhs";
-                       reg = <0 0xe6590000 0 0x100>;
+                       reg = <0 0xe6590000 0 0x200>;
                        interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&cpg CPG_MOD 704>, <&cpg CPG_MOD 703>;
                        dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
                        #iommu-cells = <1>;
                };
 
-               ipmmu_ir: mmu@ff8b0000 {
-                       compatible = "renesas,ipmmu-r8a77965";
-                       reg = <0 0xff8b0000 0 0x1000>;
-                       renesas,ipmmu-main = <&ipmmu_mm 3>;
-                       power-domains = <&sysc R8A77965_PD_A3IR>;
-                       #iommu-cells = <1>;
-               };
-
                ipmmu_mm: mmu@e67b0000 {
                        compatible = "renesas,ipmmu-r8a77965";
                        reg = <0 0xe67b0000 0 0x1000>;
                        power-domains = <&sysc R8A77965_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-r8a77965",
+                                    "renesas,rcar-gen3-can";
                        reg = <0 0xe6c30000 0 0x1000>;
-                       /* placeholder */
+                       interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 916>,
+                              <&cpg CPG_CORE R8A77965_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A77965_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 916>;
+                       status = "disabled";
                };
 
                can1: can@e6c38000 {
+                       compatible = "renesas,can-r8a77965",
+                                    "renesas,rcar-gen3-can";
                        reg = <0 0xe6c38000 0 0x1000>;
-                       /* placeholder */
+                       interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 915>,
+                              <&cpg CPG_CORE R8A77965_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A77965_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 915>;
+                       status = "disabled";
+               };
+
+               canfd: can@e66c0000 {
+                       compatible = "renesas,r8a77965-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 R8A77965_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "fck", "canfd", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A77965_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 914>;
+                       status = "disabled";
+
+                       channel0 {
+                               status = "disabled";
+                       };
+
+                       channel1 {
+                               status = "disabled";
+                       };
                };
 
                pwm0: pwm@e6e30000 {
                                port@2 {
                                        reg = <2>;
                                        du_out_lvds0: endpoint {
+                                               remote-endpoint = <&lvds0_in>;
+                                       };
+                               };
+                       };
+               };
+
+               lvds0: lvds@feb90000 {
+                       compatible = "renesas,r8a77965-lvds";
+                       reg = <0 0xfeb90000 0 0x14>;
+                       clocks = <&cpg CPG_MOD 727>;
+                       power-domains = <&sysc R8A77965_PD_ALWAYS_ON>;
+                       resets = <&cpg 727>;
+                       status = "disabled";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
+                                       reg = <0>;
+                                       lvds0_in: endpoint {
+                                               remote-endpoint = <&du_out_lvds0>;
+                                       };
+                               };
+                               port@1 {
+                                       reg = <1>;
+                                       lvds0_out: endpoint {
                                        };
                                };
                        };
index cba7885..563428d 100644 (file)
                        #power-domain-cells = <1>;
                };
 
+               thermal: thermal@e6190000 {
+                       compatible = "renesas,thermal-r8a77970";
+                       reg =  <0 0xe6190000 0 0x10
+                               0 0xe6190100 0 0x120>;
+                       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 R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 522>;
+                       #thermal-sensor-cells = <0>;
+               };
+
                intc_ex: interrupt-controller@e61c0000 {
                        compatible = "renesas,intc-ex-r8a77970", "renesas,irqc";
                        #interrupt-cells = <2>;
                        resets = <&cpg 407>;
                };
 
+               tmu0: timer@e61e0000 {
+                       compatible = "renesas,tmu-r8a77970", "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 R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 125>;
+                       status = "disabled";
+               };
+
+               tmu1: timer@e6fc0000 {
+                       compatible = "renesas,tmu-r8a77970", "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 R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 124>;
+                       status = "disabled";
+               };
+
+               tmu2: timer@e6fd0000 {
+                       compatible = "renesas,tmu-r8a77970", "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 R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 123>;
+                       status = "disabled";
+               };
+
+               tmu3: timer@e6fe0000 {
+                       compatible = "renesas,tmu-r8a77970", "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 R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 122>;
+                       status = "disabled";
+               };
+
+               tmu4: timer@ffc00000 {
+                       compatible = "renesas,tmu-r8a77970", "renesas,tmu";
+                       reg = <0 0xffc00000 0 0x30>;
+                       interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 121>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 121>;
+                       status = "disabled";
+               };
+
                i2c0: i2c@e6500000 {
                        compatible = "renesas,i2c-r8a77970",
                                     "renesas,rcar-gen3-i2c";
                        status = "disabled";
                };
 
+               pwm0: pwm@e6e30000 {
+                       compatible = "renesas,pwm-r8a77970", "renesas,pwm-rcar";
+                       reg = <0 0xe6e30000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       status = "disabled";
+               };
+
+               pwm1: pwm@e6e31000 {
+                       compatible = "renesas,pwm-r8a77970", "renesas,pwm-rcar";
+                       reg = <0 0xe6e31000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       status = "disabled";
+               };
+
+               pwm2: pwm@e6e32000 {
+                       compatible = "renesas,pwm-r8a77970", "renesas,pwm-rcar";
+                       reg = <0 0xe6e32000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       status = "disabled";
+               };
+
+               pwm3: pwm@e6e33000 {
+                       compatible = "renesas,pwm-r8a7790", "renesas,pwm-rcar";
+                       reg = <0 0xe6e33000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       status = "disabled";
+               };
+
+               pwm4: pwm@e6e34000 {
+                       compatible = "renesas,pwm-r8a77970", "renesas,pwm-rcar";
+                       reg = <0 0xe6e34000 0 8>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       status = "disabled";
+               };
+
                scif0: serial@e6e60000 {
                        compatible = "renesas,scif-r8a77970",
                                     "renesas,rcar-gen3-scif",
                        status = "disabled";
                };
 
+               msiof0: spi@e6e90000 {
+                       compatible = "renesas,msiof-r8a77970",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6e90000 0 0x64>;
+                       interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 211>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 211>;
+                       dmas = <&dmac1 0x41>, <&dmac1 0x40>,
+                              <&dmac2 0x41>, <&dmac2 0x40>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof1: spi@e6ea0000 {
+                       compatible = "renesas,msiof-r8a77970",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6ea0000 0 0x0064>;
+                       interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 210>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 210>;
+                       dmas = <&dmac1 0x43>, <&dmac1 0x42>,
+                              <&dmac2 0x43>, <&dmac2 0x42>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof2: spi@e6c00000 {
+                       compatible = "renesas,msiof-r8a77970",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6c00000 0 0x0064>;
+                       interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 209>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 209>;
+                       dmas = <&dmac1 0x45>, <&dmac1 0x44>,
+                              <&dmac2 0x45>, <&dmac2 0x44>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof3: spi@e6c10000 {
+                       compatible = "renesas,msiof-r8a77970",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6c10000 0 0x0064>;
+                       interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 208>;
+                       power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
+                       resets = <&cpg 208>;
+                       dmas = <&dmac1 0x47>, <&dmac1 0x46>,
+                              <&dmac2 0x47>, <&dmac2 0x46>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
                vin0: video@e6ef0000 {
                        compatible = "renesas,vin-r8a77970";
                        reg = <0 0xe6ef0000 0 0x1000>;
                };
        };
 
+       thermal-zones {
+               cpu-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&thermal>;
+
+                       trips {
+                               cpu-crit {
+                                       temperature = <120000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                       };
+               };
+       };
+
        timer {
                compatible = "arm,armv8-timer";
                interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
index fe2e2c0..5a7012b 100644 (file)
@@ -15,7 +15,7 @@
 
        aliases {
                serial0 = &scif0;
-               ethernet0 = &avb;
+               ethernet0 = &gether;
        };
 
        chosen {
        };
 };
 
-&avb {
-       pinctrl-0 = <&avb_pins>;
-       pinctrl-names = "default";
-
-       phy-mode = "rgmii-id";
-       phy-handle = <&phy0>;
-       renesas,no-ether-link;
-       status = "okay";
-
-       phy0: ethernet-phy@0 {
-               rxc-skew-ps = <1500>;
-               reg = <0>;
-               interrupt-parent = <&gpio1>;
-               interrupts = <17 IRQ_TYPE_LEVEL_LOW>;
-       };
-};
-
 &canfd {
        pinctrl-0 = <&canfd0_pins>;
        pinctrl-names = "default";
        clock-frequency = <32768>;
 };
 
+&gether {
+       pinctrl-0 = <&gether_pins>;
+       pinctrl-names = "default";
+
+       phy-mode = "rgmii-id";
+       phy-handle = <&phy0>;
+       renesas,no-ether-link;
+       status = "okay";
+
+       phy0: ethernet-phy@0 {
+               rxc-skew-ps = <1500>;
+               reg = <0>;
+               interrupt-parent = <&gpio4>;
+               interrupts = <23 IRQ_TYPE_LEVEL_LOW>;
+       };
+};
+
 &i2c0 {
        pinctrl-0 = <&i2c0_pins>;
        pinctrl-names = "default";
 };
 
 &pfc {
-       avb_pins: avb {
-               groups = "avb_mdio", "avb_rgmii";
-               function = "avb";
-       };
-
        canfd0_pins: canfd0 {
                groups = "canfd0_data_a";
                function = "canfd0";
        };
 
+       gether_pins: gether {
+               groups = "gether_mdio_a", "gether_rgmii",
+                        "gether_txcrefclk", "gether_txcrefclk_mega";
+               function = "gether";
+       };
+
        i2c0_pins: i2c0 {
                groups = "i2c0";
                function = "i2c0";
index d4952b5..5bd9b25 100644 (file)
                        #power-domain-cells = <1>;
                };
 
+               tsc: thermal@e6198000 {
+                       compatible = "renesas,r8a77980-thermal";
+                       reg = <0 0xe6198000 0 0x100>,
+                             <0 0xe61a0000 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 R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 522>;
+                       #thermal-sensor-cells = <1>;
+               };
+
                intc_ex: interrupt-controller@e61c0000 {
                        compatible = "renesas,intc-ex-r8a77980", "renesas,irqc";
                        #interrupt-cells = <2>;
                        resets = <&cpg 407>;
                };
 
+               tmu0: timer@e61e0000 {
+                       compatible = "renesas,tmu-r8a77980", "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 R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 125>;
+                       status = "disabled";
+               };
+
+               tmu1: timer@e6fc0000 {
+                       compatible = "renesas,tmu-r8a77980", "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 R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 124>;
+                       status = "disabled";
+               };
+
+               tmu2: timer@e6fd0000 {
+                       compatible = "renesas,tmu-r8a77980", "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 R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 123>;
+                       status = "disabled";
+               };
+
+               tmu3: timer@e6fe0000 {
+                       compatible = "renesas,tmu-r8a77980", "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 R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 122>;
+                       status = "disabled";
+               };
+
+               tmu4: timer@ffc00000 {
+                       compatible = "renesas,tmu-r8a77980", "renesas,tmu";
+                       reg = <0 0xffc00000 0 0x30>;
+                       interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 121>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 121>;
+                       status = "disabled";
+               };
+
                i2c0: i2c@e6500000 {
                        compatible = "renesas,i2c-r8a77980",
                                     "renesas,rcar-gen3-i2c";
                        power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
                        resets = <&cpg 812>;
                        phy-mode = "rgmii";
+                       iommus = <&ipmmu_ds1 33>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };
 
+               pwm0: pwm@e6e30000 {
+                       compatible = "renesas,pwm-r8a77980", "renesas,pwm-rcar";
+                       reg = <0 0xe6e30000 0 0x10>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       status = "disabled";
+               };
+
+               pwm1: pwm@e6e31000 {
+                       compatible = "renesas,pwm-r8a77980", "renesas,pwm-rcar";
+                       reg = <0 0xe6e31000 0 0x10>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       status = "disabled";
+               };
+
+               pwm2: pwm@e6e32000 {
+                       compatible = "renesas,pwm-r8a77980", "renesas,pwm-rcar";
+                       reg = <0 0xe6e32000 0 0x10>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       status = "disabled";
+               };
+
+               pwm3: pwm@e6e33000 {
+                       compatible = "renesas,pwm-r8a77980", "renesas,pwm-rcar";
+                       reg = <0 0xe6e33000 0 0x10>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       status = "disabled";
+               };
+
+               pwm4: pwm@e6e34000 {
+                       compatible = "renesas,pwm-r8a77980", "renesas,pwm-rcar";
+                       reg = <0 0xe6e34000 0 0x10>;
+                       #pwm-cells = <2>;
+                       clocks = <&cpg CPG_MOD 523>;
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 523>;
+                       status = "disabled";
+               };
+
                scif0: serial@e6e60000 {
                        compatible = "renesas,scif-r8a77980",
                                     "renesas,rcar-gen3-scif",
                        status = "disabled";
                };
 
+               msiof0: spi@e6e90000 {
+                       compatible = "renesas,msiof-r8a77980",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6e90000 0 0x64>;
+                       interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 211>;
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 211>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof1: spi@e6ea0000 {
+                       compatible = "renesas,msiof-r8a77980",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6ea0000 0 0x0064>;
+                       interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 210>;
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 210>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof2: spi@e6c00000 {
+                       compatible = "renesas,msiof-r8a77980",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6c00000 0 0x0064>;
+                       interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 209>;
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 209>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               msiof3: spi@e6c10000 {
+                       compatible = "renesas,msiof-r8a77980",
+                                    "renesas,rcar-gen3-msiof";
+                       reg = <0 0xe6c10000 0 0x0064>;
+                       interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 208>;
+                       power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
+                       resets = <&cpg 208>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
                vin0: video@e6ef0000 {
                        compatible = "renesas,vin-r8a77980";
                        reg = <0 0xe6ef0000 0 0x1000>;
                };
        };
 
+       thermal-zones {
+               thermal-sensor-1 {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&tsc 0>;
+
+                       trips {
+                               sensor1-passive {
+                                       temperature = <95000>;
+                                       hysteresis = <1000>;
+                                       type = "passive";
+                               };
+                               sensor1-critical {
+                                       temperature = <120000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+
+               thermal-sensor-2 {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&tsc 1>;
+
+                       trips {
+                               sensor2-passive {
+                                       temperature = <95000>;
+                                       hysteresis = <1000>;
+                                       type = "passive";
+                               };
+                               sensor2-critical {
+                                       temperature = <120000>;
+                                       hysteresis = <1000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+       };
+
        timer {
                compatible = "arm,armv8-timer";
                interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) |
index f342dd8..62bdddc 100644 (file)
                reg = <0x0 0x48000000 0x0 0x38000000>;
        };
 
+       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 = <11289600>;
+       };
+
        cvbs-in {
                compatible = "composite-video-connector";
                label = "CVBS IN";
                };
        };
 
+       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-always-on;
        };
 
+       vbus0_usb2: regulator-vbus0-usb2 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "USB20_VBUS_CN";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+
+               gpio = <&gpio6 4 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       rsnd_ak4613: sound {
+               compatible = "simple-scu-audio-card";
+
+               simple-audio-card,name = "rsnd-ak4613";
+               simple-audio-card,format = "left_j";
+               simple-audio-card,bitclock-master = <&sndcpu>;
+               simple-audio-card,frame-master = <&sndcpu>;
+
+               simple-audio-card,prefix = "ak4613";
+               simple-audio-card,routing = "ak4613 Playback", "DAI0 Playback",
+               "DAI0 Capture", "ak4613 Capture";
+               sndcpu: simple-audio-card,cpu {
+                       sound-dai = <&rcar_sound>;
+               };
+
+               sndcodec: simple-audio-card,codec {
+                       sound-dai = <&ak4613>;
+               };
+       };
+
+       x12_clk: x12 {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <24576000>;
+       };
+
        x13_clk: x13 {
                compatible = "fixed-clock";
                #clock-cells = <0>;
                clock-frequency = <74250000>;
        };
+
+       vcc_sdhi0: regulator-vcc-sdhi0 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "SDHI0 Vcc";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpio = <&gpio5 17 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       vccq_sdhi0: regulator-vccq-sdhi0 {
+               compatible = "regulator-gpio";
+
+               regulator-name = "SDHI0 VccQ";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpios = <&gpio5 18 GPIO_ACTIVE_HIGH>;
+               gpios-states = <1>;
+               states = <3300000 1
+                         1800000 0>;
+       };
+
+       vcc_sdhi1: regulator-vcc-sdhi1 {
+               compatible = "regulator-fixed";
+
+               regulator-name = "SDHI1 Vcc";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpio = <&gpio0 4 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       vccq_sdhi1: regulator-vccq-sdhi1 {
+               compatible = "regulator-gpio";
+
+               regulator-name = "SDHI1 VccQ";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
+               gpios-states = <1>;
+               states = <3300000 1
+                         1800000 0>;
+       };
+};
+
+&audio_clk_a {
+       clock-frequency = <22579200>;
 };
 
 &avb {
        };
 };
 
+&canfd {
+       pinctrl-0 = <&canfd0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       channel0 {
+               status = "okay";
+       };
+};
+
 &csi40 {
        status = "okay";
 
 };
 
 &ehci0 {
+       dr_mode = "otg";
        status = "okay";
 };
 
        clock-frequency = <48000000>;
 };
 
+&hsusb {
+       dr_mode = "otg";
+       status = "okay";
+};
+
 &i2c0 {
        status = "okay";
 
        };
 };
 
+&i2c3 {
+       status = "okay";
+
+       ak4613: codec@10 {
+               compatible = "asahi-kasei,ak4613";
+               #sound-dai-cells = <0>;
+               reg = <0x10>;
+               clocks = <&rcar_sound 3>;
+
+               asahi-kasei,in1-single-end;
+               asahi-kasei,in2-single-end;
+               asahi-kasei,out1-single-end;
+               asahi-kasei,out2-single-end;
+               asahi-kasei,out3-single-end;
+               asahi-kasei,out4-single-end;
+               asahi-kasei,out5-single-end;
+               asahi-kasei,out6-single-end;
+       };
+
+       cs2000: clk-multiplier@4f {
+               #clock-cells = <0>;
+               compatible = "cirrus,cs2000-cp";
+               reg = <0x4f>;
+               clocks = <&audio_clkout>, <&x12_clk>;
+               clock-names = "clk_in", "ref_clk";
+
+               assigned-clocks = <&cs2000>;
+               assigned-clock-rates = <24576000>; /* 1/1 divide */
+       };
+};
+
 &lvds0 {
        status = "okay";
 
 };
 
 &ohci0 {
+       dr_mode = "otg";
+       status = "okay";
+};
+
+&pcie_bus_clk {
+       clock-frequency = <100000000>;
+};
+
+&pciec0 {
        status = "okay";
 };
 
                };
        };
 
+       canfd0_pins: canfd0 {
+               groups = "canfd0_data";
+               function = "canfd0";
+       };
+
        du_pins: du {
                groups = "du_rgb888", "du_sync", "du_disp", "du_clk_out_0";
                function = "du";
                function = "pwm5";
        };
 
+       sdhi0_pins: sd0 {
+               groups = "sdhi0_data4", "sdhi0_ctrl";
+               function = "sdhi0";
+               power-source = <3300>;
+       };
+
+       sdhi0_pins_uhs: sd0_uhs {
+               groups = "sdhi0_data4", "sdhi0_ctrl";
+               function = "sdhi0";
+               power-source = <1800>;
+       };
+
+       sdhi1_pins: sd1 {
+               groups = "sdhi1_data4", "sdhi1_ctrl";
+               function = "sdhi1";
+               power-source = <3300>;
+       };
+
+       sdhi1_pins_uhs: sd1_uhs {
+               groups = "sdhi1_data4", "sdhi1_ctrl";
+               function = "sdhi1";
+               power-source = <1800>;
+       };
+
+       sdhi3_pins: sd3 {
+               groups = "sdhi3_data8", "sdhi3_ctrl", "sdhi3_ds";
+               function = "sdhi3";
+               power-source = <1800>;
+       };
+
+       sound_pins: sound {
+               groups = "ssi01239_ctrl", "ssi0_data", "ssi1_data";
+               function = "ssi";
+       };
+
+       sound_clk_pins: sound_clk {
+               groups = "audio_clk_a", "audio_clk_b_a", "audio_clk_c_a",
+                        "audio_clkout_a", "audio_clkout1_a";
+               function = "audio_clk";
+       };
+
+       scif2_pins: scif2 {
+               groups = "scif2_data_a";
+               function = "scif2";
+       };
+
        usb0_pins: usb {
-               groups = "usb0_b";
+               groups = "usb0_b", "usb0_id";
                function = "usb0";
        };
 
        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 = <12288000 11289600>;
+       clkout-lr-synchronous;
+
+       status = "okay";
+
+       /* 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 R8A77990_CLK_ZA2>;
+
+       rcar_sound,dai {
+               dai0 {
+                       playback = <&ssi0 &src0 &dvc0>;
+                       capture  = <&ssi1 &src1 &dvc1>;
+               };
+       };
+
+};
+
 &rwdt {
        timeout-sec = <60>;
        status = "okay";
 };
 
 &scif2 {
+       pinctrl-0 = <&scif2_pins>;
+       pinctrl-names = "default";
+
        status = "okay";
 };
 
+&ssi1 {
+       shared-pin;
+};
+
 &usb2_phy0 {
        pinctrl-0 = <&usb0_pins>;
        pinctrl-names = "default";
 
+       vbus-supply = <&vbus0_usb2>;
+       status = "okay";
+};
+
+&usb3_peri0 {
+       companion = <&xhci0>;
        status = "okay";
 };
 
 
        status = "okay";
 };
+
+&sdhi0 {
+       pinctrl-0 = <&sdhi0_pins>;
+       pinctrl-1 = <&sdhi0_pins_uhs>;
+       pinctrl-names = "default", "state_uhs";
+
+       vmmc-supply = <&vcc_sdhi0>;
+       vqmmc-supply = <&vccq_sdhi0>;
+       cd-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>;
+       wp-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>;
+       bus-width = <4>;
+       sd-uhs-sdr50;
+       sd-uhs-sdr104;
+       status = "okay";
+};
+
+&sdhi1 {
+       pinctrl-0 = <&sdhi1_pins>;
+       pinctrl-1 = <&sdhi1_pins_uhs>;
+       pinctrl-names = "default", "state_uhs";
+
+       vmmc-supply = <&vcc_sdhi1>;
+       vqmmc-supply = <&vccq_sdhi1>;
+       cd-gpios = <&gpio3 14 GPIO_ACTIVE_LOW>;
+       bus-width = <4>;
+       sd-uhs-sdr50;
+       sd-uhs-sdr104;
+       status = "okay";
+};
+
+&sdhi3 {
+       /* used for on-board 8bit eMMC */
+       pinctrl-0 = <&sdhi3_pins>;
+       pinctrl-1 = <&sdhi3_pins>;
+       pinctrl-names = "default", "state_uhs";
+
+       vmmc-supply = <&reg_3p3v>;
+       vqmmc-supply = <&reg_1p8v>;
+       mmc-hs200-1_8v;
+       bus-width = <8>;
+       non-removable;
+       status = "okay";
+};
index 9509dc0..b2f606e 100644 (file)
                i2c7 = &i2c7;
        };
 
+       /*
+        * The external audio clocks are configured as 0 Hz fixed frequency
+        * clocks by default.
+        * Boards that provide audio clocks should override them.
+        */
+       audio_clk_a: audio_clk_a {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       audio_clk_b: audio_clk_b {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       audio_clk_c: audio_clk_c {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
+       /* External CAN clock - to be overridden by boards that provide it */
+       can_clk: can {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <0>;
+       };
+
        cpus {
                #address-cells = <1>;
                #size-cells = <0>;
                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>,
                        clocks = <&cpg CPG_MOD 931>;
                        power-domains = <&sysc R8A77990_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";
                };
                        clocks = <&cpg CPG_MOD 930>;
                        power-domains = <&sysc R8A77990_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";
                };
                        clocks = <&cpg CPG_MOD 929>;
                        power-domains = <&sysc R8A77990_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";
                };
                        clocks = <&cpg CPG_MOD 928>;
                        power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
                        resets = <&cpg 928>;
+                       dmas = <&dmac0 0x97>, <&dmac0 0x96>;
+                       dma-names = "tx", "rx";
                        i2c-scl-internal-delay-ns = <110>;
                        status = "disabled";
                };
                        clocks = <&cpg CPG_MOD 927>;
                        power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
                        resets = <&cpg 927>;
+                       dmas = <&dmac0 0x99>, <&dmac0 0x98>;
+                       dma-names = "tx", "rx";
                        i2c-scl-internal-delay-ns = <6>;
                        status = "disabled";
                };
                        clocks = <&cpg CPG_MOD 919>;
                        power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
                        resets = <&cpg 919>;
+                       dmas = <&dmac0 0x9b>, <&dmac0 0x9a>;
+                       dma-names = "tx", "rx";
                        i2c-scl-internal-delay-ns = <6>;
                        status = "disabled";
                };
                        clocks = <&cpg CPG_MOD 918>;
                        power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
                        resets = <&cpg 918>;
+                       dmas = <&dmac0 0x9d>, <&dmac0 0x9c>;
+                       dma-names = "tx", "rx";
                        i2c-scl-internal-delay-ns = <6>;
                        status = "disabled";
                };
                        reg = <0 0xe6060000 0 0x508>;
                };
 
+               i2c_dvfs: i2c@e60b0000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "renesas,iic-r8a77990";
+                       reg = <0 0xe60b0000 0 0x15>;
+                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 926>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 926>;
+                       dmas = <&dmac0 0x11>, <&dmac0 0x10>;
+                       dma-names = "tx", "rx";
+                       status = "disabled";
+               };
+
                cpg: clock-controller@e6150000 {
                        compatible = "renesas,r8a77990-cpg-mssr";
                        reg = <0 0xe6150000 0 0x1000>;
                        #power-domain-cells = <1>;
                };
 
+               thermal: thermal@e6190000 {
+                       compatible = "renesas,thermal-r8a77990";
+                       reg = <0 0xe6190000 0 0x10>, <0 0xe6190100 0 0x38>;
+                       interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 522>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 522>;
+                       #thermal-sensor-cells = <0>;
+               };
+
+               intc_ex: interrupt-controller@e61c0000 {
+                       compatible = "renesas,intc-ex-r8a77990", "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 R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 407>;
+               };
+
+               hscif0: serial@e6540000 {
+                       compatible = "renesas,hscif-r8a77990",
+                                    "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 R8A77990_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x31>, <&dmac1 0x30>,
+                              <&dmac2 0x31>, <&dmac2 0x30>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 520>;
+                       status = "disabled";
+               };
+
+               hscif1: serial@e6550000 {
+                       compatible = "renesas,hscif-r8a77990",
+                                    "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 R8A77990_CLK_S3D1C>,
+                                <&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 R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 519>;
+                       status = "disabled";
+               };
+
+               hscif2: serial@e6560000 {
+                       compatible = "renesas,hscif-r8a77990",
+                                    "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 R8A77990_CLK_S3D1C>,
+                                <&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 R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 518>;
+                       status = "disabled";
+               };
+
+               hscif3: serial@e66a0000 {
+                       compatible = "renesas,hscif-r8a77990",
+                                    "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 R8A77990_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x37>, <&dmac0 0x36>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 517>;
+                       status = "disabled";
+               };
+
+               hscif4: serial@e66b0000 {
+                       compatible = "renesas,hscif-r8a77990",
+                                    "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 R8A77990_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x39>, <&dmac0 0x38>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 516>;
+                       status = "disabled";
+               };
+
+               hsusb: usb@e6590000 {
+                       compatible = "renesas,usbhs-r8a77990",
+                                    "renesas,rcar-gen3-usbhs";
+                       reg = <0 0xe6590000 0 0x200>;
+                       interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 704>, <&cpg CPG_MOD 703>;
+                       dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
+                              <&usb_dmac1 0>, <&usb_dmac1 1>;
+                       dma-names = "ch0", "ch1", "ch2", "ch3";
+                       renesas,buswait = <11>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 704>, <&cpg 703>;
+                       status = "disabled";
+               };
+
+               usb_dmac0: dma-controller@e65a0000 {
+                       compatible = "renesas,r8a77990-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 R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 330>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac1: dma-controller@e65b0000 {
+                       compatible = "renesas,r8a77990-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 R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 331>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
                dmac0: dma-controller@e6700000 {
                        compatible = "renesas,dmac-r8a77990",
                                     "renesas,rcar-dmac";
                        power-domains = <&sysc R8A77990_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-r8a77990",
+                                    "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 R8A77990_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A77990_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 916>;
+                       status = "disabled";
+               };
+
+               can1: can@e6c38000 {
+                       compatible = "renesas,can-r8a77990",
+                                    "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 R8A77990_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "clkp1", "clkp2", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A77990_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 915>;
+                       status = "disabled";
+               };
+
+               canfd: can@e66c0000 {
+                       compatible = "renesas,r8a77990-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 R8A77990_CLK_CANFD>,
+                              <&can_clk>;
+                       clock-names = "fck", "canfd", "can_clk";
+                       assigned-clocks = <&cpg CPG_CORE R8A77990_CLK_CANFD>;
+                       assigned-clock-rates = <40000000>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 914>;
+                       status = "disabled";
+
+                       channel0 {
+                               status = "disabled";
+                       };
+
+                       channel1 {
+                               status = "disabled";
+                       };
+               };
+
                pwm0: pwm@e6e30000 {
                        compatible = "renesas,pwm-r8a77990", "renesas,pwm-rcar";
                        reg = <0 0xe6e30000 0 0x8>;
                        status = "disabled";
                };
 
+               scif0: serial@e6e60000 {
+                       compatible = "renesas,scif-r8a77990",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e60000 0 64>;
+                       interrupts = <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 207>,
+                                <&cpg CPG_CORE R8A77990_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x51>, <&dmac1 0x50>,
+                              <&dmac2 0x51>, <&dmac2 0x50>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 207>;
+                       status = "disabled";
+               };
+
+               scif1: serial@e6e68000 {
+                       compatible = "renesas,scif-r8a77990",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6e68000 0 64>;
+                       interrupts = <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 206>,
+                                <&cpg CPG_CORE R8A77990_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x53>, <&dmac1 0x52>,
+                              <&dmac2 0x53>, <&dmac2 0x52>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 206>;
+                       status = "disabled";
+               };
+
                scif2: serial@e6e88000 {
                        compatible = "renesas,scif-r8a77990",
                                     "renesas,rcar-gen3-scif", "renesas,scif";
                        status = "disabled";
                };
 
+               scif3: serial@e6c50000 {
+                       compatible = "renesas,scif-r8a77990",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6c50000 0 64>;
+                       interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 204>,
+                                <&cpg CPG_CORE R8A77990_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x57>, <&dmac0 0x56>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 204>;
+                       status = "disabled";
+               };
+
+               scif4: serial@e6c40000 {
+                       compatible = "renesas,scif-r8a77990",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6c40000 0 64>;
+                       interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 203>,
+                                <&cpg CPG_CORE R8A77990_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac0 0x59>, <&dmac0 0x58>;
+                       dma-names = "tx", "rx";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 203>;
+                       status = "disabled";
+               };
+
+               scif5: serial@e6f30000 {
+                       compatible = "renesas,scif-r8a77990",
+                                    "renesas,rcar-gen3-scif", "renesas,scif";
+                       reg = <0 0xe6f30000 0 64>;
+                       interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 202>,
+                                <&cpg CPG_CORE R8A77990_CLK_S3D1C>,
+                                <&scif_clk>;
+                       clock-names = "fck", "brg_int", "scif_clk";
+                       dmas = <&dmac1 0x5b>, <&dmac1 0x5a>,
+                              <&dmac2 0x5b>, <&dmac2 0x5a>;
+                       dma-names = "tx", "rx", "tx", "rx";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 202>;
+                       status = "disabled";
+               };
+
                msiof0: spi@e6e90000 {
                        compatible = "renesas,msiof-r8a77990",
                                     "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 R8A77990_PD_ALWAYS_ON>;
                        resets = <&cpg 211>;
                        #address-cells = <1>;
                        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 R8A77990_PD_ALWAYS_ON>;
                        resets = <&cpg 210>;
                        #address-cells = <1>;
                        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 R8A77990_PD_ALWAYS_ON>;
                        resets = <&cpg 209>;
                        #address-cells = <1>;
                        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 R8A77990_PD_ALWAYS_ON>;
                        resets = <&cpg 208>;
                        #address-cells = <1>;
                                #size-cells = <0>;
 
                                port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
                                        reg = <1>;
 
-                                       vin4csi40: endpoint {
+                                       vin4csi40: endpoint@2 {
+                                               reg = <2>;
                                                remote-endpoint= <&csi40vin4>;
                                        };
                                };
                                #size-cells = <0>;
 
                                port@1 {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
                                        reg = <1>;
 
-                                       vin5csi40: endpoint {
+                                       vin5csi40: endpoint@2 {
+                                               reg = <2>;
                                                remote-endpoint= <&csi40vin5>;
                                        };
                                };
                        };
                };
 
+               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>;
+                        */
+                       /*
+                        * #clock-cells is required for audio_clkout0/1/2/3
+                        *
+                        * clkout       : #clock-cells = <0>;   <&rcar_sound>;
+                        * clkout0/1/2/3: #clock-cells = <1>;   <&rcar_sound N>;
+                        */
+                       compatible =  "renesas,rcar_sound-r8a77990", "renesas,rcar_sound-gen3";
+                       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";
+
+                       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 R8A77990_CLK_ZA2>;
+                       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",
+                                     "mix.1", "mix.0",
+                                     "ctu.1", "ctu.0",
+                                     "dvc.0", "dvc.1",
+                                     "clk_a", "clk_b", "clk_c", "clk_i";
+                       power-domains = <&sysc R8A77990_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 = <&audma0 0xbc>;
+                                       dma-names = "tx";
+                               };
+                               dvc1: dvc-1 {
+                                       dmas = <&audma0 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>, <&audma0 0x9a>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src1: src-1 {
+                                       interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x87>, <&audma0 0x9c>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src2: src-2 {
+                                       interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x89>, <&audma0 0x9e>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src3: src-3 {
+                                       interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x8b>, <&audma0 0xa0>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src4: src-4 {
+                                       interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x8d>, <&audma0 0xb0>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src5: src-5 {
+                                       interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x8f>, <&audma0 0xb2>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src6: src-6 {
+                                       interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x91>, <&audma0 0xb4>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src7: src-7 {
+                                       interrupts = <GIC_SPI 359 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x93>, <&audma0 0xb6>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src8: src-8 {
+                                       interrupts = <GIC_SPI 360 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x95>, <&audma0 0xb8>;
+                                       dma-names = "rx", "tx";
+                               };
+                               src9: src-9 {
+                                       interrupts = <GIC_SPI 361 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x97>, <&audma0 0xba>;
+                                       dma-names = "rx", "tx";
+                               };
+                       };
+
+                       rcar_sound,ssi {
+                               ssi0: ssi-0 {
+                                       interrupts = <GIC_SPI 370 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x01>, <&audma0 0x02>,
+                                              <&audma0 0x15>, <&audma0 0x16>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi1: ssi-1 {
+                                       interrupts = <GIC_SPI 371 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x03>, <&audma0 0x04>,
+                                              <&audma0 0x49>, <&audma0 0x4a>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi2: ssi-2 {
+                                       interrupts = <GIC_SPI 372 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x05>, <&audma0 0x06>,
+                                              <&audma0 0x63>, <&audma0 0x64>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi3: ssi-3 {
+                                       interrupts = <GIC_SPI 373 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x07>, <&audma0 0x08>,
+                                              <&audma0 0x6f>, <&audma0 0x70>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi4: ssi-4 {
+                                       interrupts = <GIC_SPI 374 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x09>, <&audma0 0x0a>,
+                                              <&audma0 0x71>, <&audma0 0x72>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi5: ssi-5 {
+                                       interrupts = <GIC_SPI 375 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x0b>, <&audma0 0x0c>,
+                                              <&audma0 0x73>, <&audma0 0x74>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi6: ssi-6 {
+                                       interrupts = <GIC_SPI 376 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x0d>, <&audma0 0x0e>,
+                                              <&audma0 0x75>, <&audma0 0x76>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi7: ssi-7 {
+                                       interrupts = <GIC_SPI 377 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x0f>, <&audma0 0x10>,
+                                              <&audma0 0x79>, <&audma0 0x7a>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi8: ssi-8 {
+                                       interrupts = <GIC_SPI 378 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x11>, <&audma0 0x12>,
+                                              <&audma0 0x7b>, <&audma0 0x7c>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                               ssi9: ssi-9 {
+                                       interrupts = <GIC_SPI 379 IRQ_TYPE_LEVEL_HIGH>;
+                                       dmas = <&audma0 0x13>, <&audma0 0x14>,
+                                              <&audma0 0x7d>, <&audma0 0x7e>;
+                                       dma-names = "rx", "tx", "rxu", "txu";
+                               };
+                       };
+               };
+
+               audma0: dma-controller@ec700000 {
+                       compatible = "renesas,dmac-r8a77990",
+                                    "renesas,rcar-dmac";
+                       reg = <0 0xec700000 0 0x10000>;
+                       interrupts = <GIC_SPI 350 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 320 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 321 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 322 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 323 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 324 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 325 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 327 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 328 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 329 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 330 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 331 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 332 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 333 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 334 IRQ_TYPE_LEVEL_HIGH
+                                     GIC_SPI 335 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "error",
+                                       "ch0", "ch1", "ch2", "ch3",
+                                       "ch4", "ch5", "ch6", "ch7",
+                                       "ch8", "ch9", "ch10", "ch11",
+                                       "ch12", "ch13", "ch14", "ch15";
+                       clocks = <&cpg CPG_MOD 502>;
+                       clock-names = "fck";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 502>;
+                       #dma-cells = <1>;
+                       dma-channels = <16>;
+                       iommus = <&ipmmu_mp 0>, <&ipmmu_mp 1>,
+                                <&ipmmu_mp 2>, <&ipmmu_mp 3>,
+                                <&ipmmu_mp 4>, <&ipmmu_mp 5>,
+                                <&ipmmu_mp 6>, <&ipmmu_mp 7>,
+                                <&ipmmu_mp 8>, <&ipmmu_mp 9>,
+                                <&ipmmu_mp 10>, <&ipmmu_mp 11>,
+                                <&ipmmu_mp 12>, <&ipmmu_mp 13>,
+                                <&ipmmu_mp 14>, <&ipmmu_mp 15>;
+               };
+
                xhci0: usb@ee000000 {
                        compatible = "renesas,xhci-r8a77990",
                                     "renesas,rcar-gen3-xhci";
                        status = "disabled";
                };
 
+               usb3_peri0: usb@ee020000 {
+                       compatible = "renesas,r8a77990-usb3-peri",
+                                    "renesas,rcar-gen3-usb3-peri";
+                       reg = <0 0xee020000 0 0x400>;
+                       interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 328>;
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 328>;
+                       status = "disabled";
+               };
+
                ohci0: usb@ee080000 {
                        compatible = "generic-ohci";
                        reg = <0 0xee080000 0 0x100>;
                        status = "disabled";
                };
 
+               sdhi0: sd@ee100000 {
+                       compatible = "renesas,sdhi-r8a77990",
+                                    "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 R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 314>;
+                       status = "disabled";
+               };
+
+               sdhi1: sd@ee120000 {
+                       compatible = "renesas,sdhi-r8a77990",
+                                    "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 R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 313>;
+                       status = "disabled";
+               };
+
+               sdhi3: sd@ee160000 {
+                       compatible = "renesas,sdhi-r8a77990",
+                                    "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 R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 311>;
+                       status = "disabled";
+               };
+
                gic: interrupt-controller@f1010000 {
                        compatible = "arm,gic-400";
                        #interrupt-cells = <3>;
                        };
                };
 
+               pciec0: pcie@fe000000 {
+                       compatible = "renesas,pcie-r8a77990",
+                                    "renesas,pcie-rcar-gen3";
+                       reg = <0 0xfe000000 0 0x80000>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       bus-range = <0x00 0xff>;
+                       device_type = "pci";
+                       ranges = <0x01000000 0 0x00000000 0 0xfe100000 0 0x00100000
+                               0x02000000 0 0xfe200000 0 0xfe200000 0 0x00200000
+                               0x02000000 0 0x30000000 0 0x30000000 0 0x08000000
+                               0x42000000 0 0x38000000 0 0x38000000 0 0x08000000>;
+                       /* Map all possible DDR as inbound ranges */
+                       dma-ranges = <0x42000000 0 0x40000000 0 0x40000000 0 0x40000000>;
+                       interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
+                               <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0>;
+                       interrupt-map = <0 0 0 0 &gic GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 319>, <&pcie_bus_clk>;
+                       clock-names = "pcie", "pcie_bus";
+                       power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
+                       resets = <&cpg 319>;
+                       status = "disabled";
+               };
+
                prr: chipid@fff00044 {
                        compatible = "renesas,prr";
                        reg = <0 0xfff00044 0 4>;
                };
        };
 
+       thermal-zones {
+               cpu-thermal {
+                       polling-delay-passive = <250>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&thermal>;
+
+                       trips {
+                               cpu-crit {
+                                       temperature = <120000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+
+                       cooling-maps {
+                       };
+               };
+       };
+
        timer {
                compatible = "arm,armv8-timer";
                interrupts-extended = <&gic GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
index 2405eaa..52d044b 100644 (file)
                stdout-path = "serial0:115200n8";
        };
 
+       backlight: backlight {
+               compatible = "pwm-backlight";
+               pwms = <&pwm1 0 50000>;
+
+               brightness-levels = <256 128 64 16 8 4 0>;
+               default-brightness-level = <6>;
+
+               power-supply = <&reg_12p0v>;
+               enable-gpios = <&gpio4 0 GPIO_ACTIVE_HIGH>;
+       };
+
        composite-in {
                compatible = "composite-video-connector";
 
                regulator-always-on;
        };
 
+       reg_12p0v: regulator1 {
+               compatible = "regulator-fixed";
+               regulator-name = "D12.0V";
+               regulator-min-microvolt = <12000000>;
+               regulator-max-microvolt = <12000000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
        vga {
                compatible = "vga-connector";
 
 };
 
 &ehci0 {
+       dr_mode = "host";
        status = "okay";
 };
 
        clock-frequency = <48000000>;
 };
 
+&hsusb {
+       dr_mode = "host";
+       status = "okay";
+};
+
 &i2c0 {
        pinctrl-0 = <&i2c0_pins>;
        pinctrl-names = "default";
 };
 
 &ohci0 {
+       dr_mode = "host";
        status = "okay";
 };
 
        pinctrl-0 = <&usb0_pins>;
        pinctrl-names = "default";
 
+       renesas,no-otg-pins;
        status = "okay";
 };
 
index 214f495..8530d9f 100644 (file)
                        status = "disabled";
                };
 
+               hsusb: usb@e6590000 {
+                       compatible = "renesas,usbhs-r8a77995",
+                                    "renesas,rcar-gen3-usbhs";
+                       reg = <0 0xe6590000 0 0x200>;
+                       interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&cpg CPG_MOD 704>, <&cpg CPG_MOD 703>;
+                       dmas = <&usb_dmac0 0>, <&usb_dmac0 1>,
+                              <&usb_dmac1 0>, <&usb_dmac1 1>;
+                       dma-names = "ch0", "ch1", "ch2", "ch3";
+                       renesas,buswait = <11>;
+                       phys = <&usb2_phy0>;
+                       phy-names = "usb";
+                       power-domains = <&sysc R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 704>, <&cpg 703>;
+                       status = "disabled";
+               };
+
+               usb_dmac0: dma-controller@e65a0000 {
+                       compatible = "renesas,r8a77995-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 R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 330>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
+               usb_dmac1: dma-controller@e65b0000 {
+                       compatible = "renesas,r8a77995-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 R8A77995_PD_ALWAYS_ON>;
+                       resets = <&cpg 331>;
+                       #dma-cells = <1>;
+                       dma-channels = <2>;
+               };
+
                canfd: can@e66c0000 {
                        compatible = "renesas,r8a77995-canfd",
                                     "renesas,rcar-gen3-canfd";
index 7f91ff5..f66d990 100644 (file)
        sdhi2_pins: sd2 {
                groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
                function = "sdhi2";
-               power-source = <3300>;
-       };
-
-       sdhi2_pins_uhs: sd2_uhs {
-               groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
-               function = "sdhi2";
                power-source = <1800>;
        };
 
                 <&cpg CPG_CORE CPG_AUDIO_CLK_I>;
 
        ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
                rsnd_port0: port@0 {
+                       reg = <0>;
                        rsnd_endpoint0: endpoint {
                                remote-endpoint = <&ak4613_endpoint>;
 
 &sdhi2 {
        /* used for on-board 8bit eMMC */
        pinctrl-0 = <&sdhi2_pins>;
-       pinctrl-1 = <&sdhi2_pins_uhs>;
+       pinctrl-1 = <&sdhi2_pins>;
        pinctrl-names = "default", "state_uhs";
 
        vmmc-supply = <&reg_3p3v>;
        phys = <&usb3_phy0>;
        phy-names = "usb";
 
+       companion = <&xhci0>;
+
        status = "okay";
 };
 
index 89daca7..de694fd 100644 (file)
        sdhi2_pins: sd2 {
                groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
                function = "sdhi2";
-               power-source = <3300>;
-       };
-
-       sdhi2_pins_uhs: sd2_uhs {
-               groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds";
-               function = "sdhi2";
                power-source = <1800>;
        };
 
 &sdhi2 {
        /* used for on-board 8bit eMMC */
        pinctrl-0 = <&sdhi2_pins>;
-       pinctrl-1 = <&sdhi2_pins_uhs>;
+       pinctrl-1 = <&sdhi2_pins>;
        pinctrl-names = "default", "state_uhs";
 
        vmmc-supply = <&reg_3p3v>;
index 49042c4..de0c406 100644 (file)
@@ -14,6 +14,8 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-ficus.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-firefly.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-bob.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-kevin.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-scarlet-inx.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-gru-scarlet-kd.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-puma-haikou.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-roc-pc.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3399-rock960.dtb
index dc20145..bd937d6 100644 (file)
 &emmc {
        bus-width = <8>;
        cap-mmc-highspeed;
+       mmc-hs200-1_8v;
        non-removable;
        pinctrl-names = "default";
        pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>;
index e1a33dd..ecd7f19 100644 (file)
                        cooling-maps {
                                map0 {
                                        trip = <&target>;
-                                       cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       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>;
                                        contribution = <4096>;
                                };
                        };
index 9c24de1..7014d10 100644 (file)
                                map0 {
                                        trip = <&cpu_alert0>;
                                        cooling-device =
-                                       <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_b2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_b3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
                                };
                                map1 {
                                        trip = <&cpu_alert1>;
                                        cooling-device =
-                                       <&cpu_l0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       <&cpu_l0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_l1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_l2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_l3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
                                };
                        };
                };
                                map0 {
                                        trip = <&gpu_alert0>;
                                        cooling-device =
-                                       <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_b2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_b3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
                                };
                        };
                };
index ff81dfd..c400be6 100644 (file)
 
        backlight: backlight {
                compatible = "pwm-backlight";
-               brightness-levels = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-                                    17 18 19 20 21 22 23 24 25 26 27 28 29 30
-                                    31 32 33 34 35 36 37 38 39 40 41 42 43 44
-                                    45 46 47 48 49 50 51 52 53 54 55 56 57 58
-                                    59 60 61 62 63 64 65 66 67 68 69 70 71 72
-                                    73 74 75 76 77 78 79 80 81 82 83 84 85 86
-                                    87 88 89 90 91 92 93 94 95 96 97 98 99 100>;
-               default-brightness-level = <51>;
                enable-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
                power-supply = <&pp3300_disp>;
                pinctrl-names = "default";
index 2cc7c47..81e7310 100644 (file)
                        map0 {
                                trip = <&ppvar_bigcpu_alert>;
                                cooling-device =
-                                       <&cpu_l0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       <&cpu_l0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_l1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_l2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_l3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
                                contribution = <4096>;
                        };
                        map1 {
                                trip = <&ppvar_bigcpu_alert>;
                                cooling-device =
-                                       <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                       <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                       <&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
                                contribution = <1024>;
                        };
                };
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet-inx.dts b/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet-inx.dts
new file mode 100644 (file)
index 0000000..2d721a9
--- /dev/null
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Google Gru-Scarlet Rev4+ (SKU-6/Innolux) board device tree source
+ *
+ * Copyright 2018 Google, Inc
+ */
+
+/dts-v1/;
+
+#include "rk3399-gru-scarlet.dtsi"
+
+/ {
+       model = "Google Scarlet";
+       compatible = "google,scarlet-rev15-sku6", "google,scarlet-rev15",
+                    "google,scarlet-rev14-sku6", "google,scarlet-rev14",
+                    "google,scarlet-rev13-sku6", "google,scarlet-rev13",
+                    "google,scarlet-rev12-sku6", "google,scarlet-rev12",
+                    "google,scarlet-rev11-sku6", "google,scarlet-rev11",
+                    "google,scarlet-rev10-sku6", "google,scarlet-rev10",
+                    "google,scarlet-rev9-sku6",  "google,scarlet-rev9",
+                    "google,scarlet-rev8-sku6",  "google,scarlet-rev8",
+                    "google,scarlet-rev7-sku6",  "google,scarlet-rev7",
+                    "google,scarlet-rev6-sku6",  "google,scarlet-rev6",
+                    "google,scarlet-rev5-sku6",  "google,scarlet-rev5",
+                    "google,scarlet-rev4-sku6",  "google,scarlet-rev4",
+                    "google,scarlet", "google,gru", "rockchip,rk3399";
+};
+
+&mipi_panel {
+       compatible = "innolux,p097pfg";
+       avdd-supply = <&ppvarp_lcd>;
+       avee-supply = <&ppvarn_lcd>;
+};
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet-kd.dts b/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet-kd.dts
new file mode 100644 (file)
index 0000000..bd75922
--- /dev/null
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Google Gru-Scarlet Rev3+ (SKU-7/Kingdisplay) board device tree source
+ *
+ * Copyright 2018 Google, Inc
+ */
+
+/dts-v1/;
+
+#include "rk3399-gru-scarlet.dtsi"
+
+/ {
+       model = "Google Scarlet";
+       compatible = "google,scarlet-rev15-sku7", "google,scarlet-rev15",
+                    "google,scarlet-rev14-sku7", "google,scarlet-rev14",
+                    "google,scarlet-rev13-sku7", "google,scarlet-rev13",
+                    "google,scarlet-rev12-sku7", "google,scarlet-rev12",
+                    "google,scarlet-rev11-sku7", "google,scarlet-rev11",
+                    "google,scarlet-rev10-sku7", "google,scarlet-rev10",
+                    "google,scarlet-rev9-sku7",  "google,scarlet-rev9",
+                    "google,scarlet-rev8-sku7",  "google,scarlet-rev8",
+                    "google,scarlet-rev7-sku7",  "google,scarlet-rev7",
+                    "google,scarlet-rev6-sku7",  "google,scarlet-rev6",
+                    "google,scarlet-rev5-sku7",  "google,scarlet-rev5",
+                    "google,scarlet-rev4-sku7",  "google,scarlet-rev4",
+                    "google,scarlet-rev3-sku7",  "google,scarlet-rev3",
+                    "google,scarlet", "google,gru", "rockchip,rk3399";
+};
+
+&mipi_panel {
+       compatible = "kingdisplay,kd097d04";
+       power-supply = <&pp3300_s0>;
+};
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi
new file mode 100644 (file)
index 0000000..fc50b3e
--- /dev/null
@@ -0,0 +1,594 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Google Gru-scarlet board device tree source
+ *
+ * Copyright 2018 Google, Inc
+ */
+
+#include "rk3399-gru.dtsi"
+
+/{
+       /* Power tree */
+
+       /* ppvar_sys children, sorted by name */
+       pp1250_s3: pp1250-s3 {
+               compatible = "regulator-fixed";
+               regulator-name = "pp1250_s3";
+
+               /* EC turns on w/ pp1250_s3_en; always on for AP */
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <1250000>;
+               regulator-max-microvolt = <1250000>;
+
+               vin-supply = <&ppvar_sys>;
+       };
+
+       pp1250_cam: pp1250-dvdd {
+               compatible = "regulator-fixed";
+               regulator-name = "pp1250_dvdd";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pp1250_cam_en>;
+
+               enable-active-high;
+               gpio = <&gpio2 4 GPIO_ACTIVE_HIGH>;
+
+               /* 740us delay from gpio output high to pp1250 stable,
+                * rounding up to 1ms for safety.
+                */
+               startup-delay-us = <1000>;
+               vin-supply = <&pp1250_s3>;
+       };
+
+       pp900_s0: pp900-s0 {
+               compatible = "regulator-fixed";
+               regulator-name = "pp900_s0";
+
+               /* EC turns on w/ pp900_s0_en; always on for AP */
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <900000>;
+               regulator-max-microvolt = <900000>;
+
+               vin-supply = <&ppvar_sys>;
+       };
+
+       ppvarn_lcd: ppvarn-lcd {
+               compatible = "regulator-fixed";
+               regulator-name = "ppvarn_lcd";
+               pinctrl-names = "default";
+               pinctrl-0 = <&ppvarn_lcd_en>;
+
+               enable-active-high;
+               gpio = <&gpio4 28 GPIO_ACTIVE_HIGH>;
+               vin-supply = <&ppvar_sys>;
+       };
+
+       ppvarp_lcd: ppvarp-lcd {
+               compatible = "regulator-fixed";
+               regulator-name = "ppvarp_lcd";
+               pinctrl-names = "default";
+               pinctrl-0 = <&ppvarp_lcd_en>;
+
+               enable-active-high;
+               gpio = <&gpio4 27 GPIO_ACTIVE_HIGH>;
+               vin-supply = <&ppvar_sys>;
+       };
+
+       /* pp1800 children, sorted by name */
+       pp900_s3: pp900-s3 {
+               compatible = "regulator-fixed";
+               regulator-name = "pp900_s3";
+
+               /* EC turns on w/ pp900_s3_en; always on for AP */
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <900000>;
+               regulator-max-microvolt = <900000>;
+
+               vin-supply = <&pp1800>;
+       };
+
+       /* EC turns on pp1800_s3_en */
+       pp1800_s3: pp1800 {
+       };
+
+       /* pp3300 children, sorted by name */
+       pp2800_cam: pp2800-avdd {
+               compatible = "regulator-fixed";
+               regulator-name = "pp2800_avdd";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pp2800_cam_en>;
+
+               enable-active-high;
+               gpio = <&gpio2 24 GPIO_ACTIVE_HIGH>;
+               startup-delay-us = <100>;
+               vin-supply = <&pp3300>;
+       };
+
+       /* EC turns on pp3300_s0_en */
+       pp3300_s0: pp3300 {
+       };
+
+       /* EC turns on pp3300_s3_en */
+       pp3300_s3: pp3300 {
+       };
+
+       /*
+        * See b/66922012
+        *
+        * This is a hack to make sure the Bluetooth part of the QCA6174A
+        * is reset at boot by toggling BT_EN. At boot BT_EN is first set
+        * to low when the bt_3v3 regulator is registered (in disabled
+        * state). The fake regulator is configured as a supply of the
+        * wlan_3v3 regulator below. When wlan_3v3 is enabled early in
+        * the boot process it also enables its supply regulator bt_3v3,
+        * which changes BT_EN to high.
+        */
+       bt_3v3: bt-3v3 {
+               compatible = "regulator-fixed";
+               regulator-name = "bt_3v3";
+               pinctrl-names = "default";
+               pinctrl-0 = <&bt_en_1v8_l>;
+
+               enable-active-high;
+               gpio = <&gpio0 8 GPIO_ACTIVE_HIGH>;
+               vin-supply = <&pp3300_s3>;
+       };
+
+       wlan_3v3: wlan-3v3 {
+               compatible = "regulator-fixed";
+               regulator-name = "wlan_3v3";
+               pinctrl-names = "default";
+               pinctrl-0 = <&wlan_pd_1v8_l>;
+
+               /*
+                * The WL_EN pin is driven low when the regulator is
+                * registered, and transitions to high when the PCIe bus
+                * is powered up.
+                */
+               enable-active-high;
+               gpio = <&gpio0 4 GPIO_ACTIVE_HIGH>;
+
+               /*
+                * Require minimum 10ms from power-on (e.g., PD#) to init PCIe.
+                * TODO (b/64444991): how long to assert PD#?
+                */
+               regulator-enable-ramp-delay = <10000>;
+               /* See bt_3v3 hack above */
+               vin-supply = <&bt_3v3>;
+       };
+
+       backlight: backlight {
+               compatible = "pwm-backlight";
+               enable-gpios = <&gpio4 21 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&bl_en>;
+               pwms = <&pwm1 0 1000000 0>;
+               pwm-delay-us = <10000>;
+       };
+
+       dmic: dmic {
+               compatible = "dmic-codec";
+               dmicen-gpios = <&gpio4 3 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&dmic_en>;
+               wakeup-delay-ms = <250>;
+       };
+};
+
+/* pp900_s0 aliases */
+pp900_ddrpll_ap: &pp900_s0 {
+};
+pp900_pcie: &pp900_s0 {
+};
+pp900_usb: &pp900_s0 {
+};
+
+/* pp900_s3 aliases */
+pp900_emmcpll: &pp900_s3 {
+};
+
+/* EC turns on; alias for pp1800_s0 */
+pp1800_pcie: &pp1800_s0 {
+};
+
+/* On scarlet PPVAR(big_cpu, lit_cpu, gpu) need to adjust voltage ranges */
+&ppvar_bigcpu {
+       ctrl-voltage-range = <800074 1299226>;
+       regulator-min-microvolt = <800074>;
+       regulator-max-microvolt = <1299226>;
+};
+
+&ppvar_bigcpu_pwm {
+       /* On scarlet ppvar big cpu use pwm3 */
+       pwms = <&pwm3 0 3337 0>;
+       regulator-min-microvolt = <800074>;
+       regulator-max-microvolt = <1299226>;
+};
+
+&ppvar_litcpu {
+       ctrl-voltage-range = <802122 1199620>;
+       regulator-min-microvolt = <802122>;
+       regulator-max-microvolt = <1199620>;
+};
+
+&ppvar_litcpu_pwm {
+       regulator-min-microvolt = <802122>;
+       regulator-max-microvolt = <1199620>;
+};
+
+&ppvar_gpu {
+       ctrl-voltage-range = <799600 1099600>;
+       regulator-min-microvolt = <799600>;
+       regulator-max-microvolt = <1099600>;
+};
+
+&ppvar_gpu_pwm {
+       regulator-min-microvolt = <799600>;
+       regulator-max-microvolt = <1099600>;
+};
+
+&ppvar_sd_card_io {
+       states = <1800000 0x0 3300000 0x1>;
+       regulator-max-microvolt = <3300000>;
+};
+
+&pp3000_sd_slot {
+       vin-supply = <&pp3300>;
+};
+
+ap_i2c_dig: &i2c2 {
+       status = "okay";
+
+       clock-frequency = <400000>;
+
+       /* These are relatively safe rise/fall times. */
+       i2c-scl-falling-time-ns = <50>;
+       i2c-scl-rising-time-ns = <300>;
+
+       digitizer: digitizer@9 {
+               compatible = "hid-over-i2c";
+               reg = <0x9>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+               hid-descr-addr = <0x1>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pen_int_odl &pen_reset_l>;
+       };
+};
+
+&ap_i2c_ts {
+       touchscreen: touchscreen@10 {
+               compatible = "elan,ekth3500";
+               reg = <0x10>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&touch_int_l &touch_reset_l>;
+               reset-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
+       };
+};
+
+camera: &i2c7 {
+       status = "okay";
+
+       clock-frequency = <400000>;
+
+       /* These are relatively safe rise/fall times; TODO: measure */
+       i2c-scl-falling-time-ns = <50>;
+       i2c-scl-rising-time-ns = <300>;
+
+       /* 24M mclk is shared between world and user cameras */
+       pinctrl-0 = <&i2c7_xfer &test_clkout1>;
+};
+
+&cdn_dp {
+       extcon = <&usbc_extcon0>;
+       phys = <&tcphy0_dp>;
+};
+
+&cpu_alert0 {
+       temperature = <66000>;
+};
+
+&cpu_alert1 {
+       temperature = <71000>;
+};
+
+&cros_ec {
+       interrupt-parent = <&gpio1>;
+       interrupts = <18 IRQ_TYPE_LEVEL_LOW>;
+};
+
+&cru {
+       assigned-clocks =
+               <&cru PLL_GPLL>, <&cru PLL_CPLL>,
+               <&cru PLL_NPLL>,
+               <&cru ACLK_PERIHP>, <&cru HCLK_PERIHP>,
+               <&cru PCLK_PERIHP>,
+               <&cru ACLK_PERILP0>, <&cru HCLK_PERILP0>,
+               <&cru PCLK_PERILP0>, <&cru ACLK_CCI>,
+               <&cru HCLK_PERILP1>, <&cru PCLK_PERILP1>,
+               <&cru ACLK_VIO>,
+               <&cru ACLK_GIC_PRE>,
+               <&cru PCLK_DDR>,
+               <&cru ACLK_HDCP>;
+       assigned-clock-rates =
+               <600000000>, <1600000000>,
+               <1000000000>,
+               <150000000>, <75000000>,
+               <37500000>,
+               <100000000>, <100000000>,
+               <50000000>, <800000000>,
+               <100000000>, <50000000>,
+               <400000000>,
+               <200000000>,
+               <200000000>,
+               <400000000>;
+};
+
+&gpio_keys {
+       pinctrl-names = "default";
+       pinctrl-0 = <&bt_host_wake_l>, <&pen_eject_odl>;
+
+       pen-insert {
+               label = "Pen Insert";
+               /* Insert = low, eject = high */
+               gpios = <&gpio1 1 GPIO_ACTIVE_LOW>;
+               linux,code = <SW_PEN_INSERTED>;
+               linux,input-type = <EV_SW>;
+               wakeup-source;
+       };
+};
+
+&i2c_tunnel {
+       google,remote-bus = <0>;
+};
+
+&io_domains {
+       bt656-supply = <&pp1800_s0>;            /* APIO2_VDD;  2a 2b */
+       audio-supply = <&pp1800_s0>;            /* APIO5_VDD;  3d 4a */
+       gpio1830-supply = <&pp1800_s0>;         /* APIO4_VDD;  4c 4d */
+};
+
+&max98357a {
+       sdmode-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
+};
+
+&mipi_dsi {
+       status = "okay";
+       clock-master;
+
+       ports {
+               mipi_out: port@1 {
+                       reg = <1>;
+
+                       mipi_out_panel: endpoint {
+                               remote-endpoint = <&mipi_in_panel>;
+                       };
+               };
+       };
+
+       mipi_panel: panel@0 {
+               /* 2 different panels are used, compatibles are in dts files */
+               reg = <0>;
+               backlight = <&backlight>;
+               enable-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&display_rst_l>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+
+                               mipi_in_panel: endpoint {
+                                       remote-endpoint = <&mipi_out_panel>;
+                               };
+                       };
+
+                       port@1 {
+                               reg = <1>;
+
+                               mipi1_in_panel: endpoint@1 {
+                                       remote-endpoint = <&mipi1_out_panel>;
+                               };
+                       };
+               };
+       };
+};
+
+&mipi_dsi1 {
+       status = "okay";
+
+       ports {
+               mipi1_out: port@1 {
+                       reg = <1>;
+
+                       mipi1_out_panel: endpoint {
+                               remote-endpoint = <&mipi1_in_panel>;
+                       };
+               };
+       };
+};
+
+&pcie0 {
+       ep-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>;
+
+       /* PERST# asserted in S3 */
+       pcie-reset-suspend = <1>;
+
+       vpcie3v3-supply = <&wlan_3v3>;
+       vpcie1v8-supply = <&pp1800_pcie>;
+};
+
+&sdmmc {
+       cd-gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
+};
+
+&sound {
+       rockchip,codec = <&max98357a &dmic &codec &cdn_dp>;
+};
+
+&spi2 {
+       status = "okay";
+};
+
+&wake_on_bt {
+       gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
+};
+
+/* PINCTRL OVERRIDES */
+&ec_ap_int_l {
+       rockchip,pins = <1 18 RK_FUNC_GPIO &pcfg_pull_up>;
+};
+
+&ap_fw_wp {
+       rockchip,pins = <0 13 RK_FUNC_GPIO &pcfg_pull_none>;
+};
+
+&bl_en {
+       rockchip,pins = <4 21 RK_FUNC_GPIO &pcfg_pull_none>;
+};
+
+&bt_host_wake_l {
+       rockchip,pins = <1 2 RK_FUNC_GPIO &pcfg_pull_up>;
+};
+
+&ec_ap_int_l {
+       rockchip,pins = <1 18 RK_FUNC_GPIO &pcfg_pull_up>;
+};
+
+&headset_int_l {
+       rockchip,pins = <1 23 RK_FUNC_GPIO &pcfg_pull_up>;
+};
+
+&i2s0_8ch_bus {
+       rockchip,pins =
+               <3 24 RK_FUNC_1 &pcfg_pull_none_6ma>,
+               <3 25 RK_FUNC_1 &pcfg_pull_none_6ma>,
+               <3 26 RK_FUNC_1 &pcfg_pull_none_6ma>,
+               <3 27 RK_FUNC_1 &pcfg_pull_none_6ma>,
+               <3 31 RK_FUNC_1 &pcfg_pull_none_6ma>,
+               <4 0 RK_FUNC_1 &pcfg_pull_none_6ma>;
+};
+
+/* there is no external pull up, so need to set this pin pull up */
+&sdmmc_cd_gpio {
+       rockchip,pins = <1 11 RK_FUNC_GPIO &pcfg_pull_up>;
+};
+
+&sd_pwr_1800_sel {
+       rockchip,pins = <2 28 RK_FUNC_GPIO &pcfg_pull_up>;
+};
+
+&sdmode_en {
+       rockchip,pins = <0 2 RK_FUNC_GPIO &pcfg_pull_down>;
+};
+
+&touch_reset_l {
+       rockchip,pins = <0 10 RK_FUNC_GPIO &pcfg_pull_down>;
+};
+
+&touch_int_l {
+       rockchip,pins = <1 4 RK_FUNC_GPIO &pcfg_pull_down>;
+};
+
+&pinctrl {
+       pinctrl-0 = <
+               &ap_pwroff      /* AP will auto-assert this when in S3 */
+               &clk_32k        /* This pin is always 32k on gru boards */
+               &wlan_rf_kill_1v8_l
+       >;
+
+       pcfg_pull_none_6ma: pcfg-pull-none-6ma {
+               bias-disable;
+               drive-strength = <6>;
+       };
+
+       camera {
+               pp1250_cam_en: pp1250-dvdd {
+                       rockchip,pins = <2 4 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+
+               pp2800_cam_en: pp2800-avdd {
+                       rockchip,pins = <2 24 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+
+               ucam_rst: ucam_rst {
+                       rockchip,pins = <2 3 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+
+               wcam_rst: wcam_rst {
+                       rockchip,pins = <2 5 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       digitizer {
+               pen_int_odl: pen-int-odl {
+                       rockchip,pins = <1 0 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+
+               pen_reset_l: pen-reset-l {
+                       rockchip,pins = <0 12 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       discrete-regulators {
+               display_rst_l: display-rst-l {
+                       rockchip,pins = <4 25 RK_FUNC_GPIO &pcfg_pull_down>;
+               };
+
+               ppvarp_lcd_en: ppvarp-lcd-en {
+                       rockchip,pins = <4 27 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+
+               ppvarn_lcd_en: ppvarn-lcd-en {
+                       rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       dmic {
+               dmic_en: dmic-en {
+                       rockchip,pins = <4 3 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       pen {
+               pen_eject_odl: pen-eject-odl {
+                       rockchip,pins = <1 1 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       tpm {
+               h1_int_od_l: h1-int-od-l {
+                       rockchip,pins = <1 17 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+};
+
+&wifi {
+       bt_en_1v8_l: bt-en-1v8-l {
+               rockchip,pins = <0 8 RK_FUNC_GPIO &pcfg_pull_none>;
+       };
+
+       wlan_pd_1v8_l: wlan-pd-1v8-l {
+               rockchip,pins = <0 4 RK_FUNC_GPIO &pcfg_pull_none>;
+       };
+
+       /* Default pull-up, but just to be clear */
+       wlan_rf_kill_1v8_l: wlan-rf-kill-1v8-l {
+               rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
+       };
+
+       wifi_perst_l: wifi-perst-l {
+               rockchip,pins = <0 3 RK_FUNC_GPIO &pcfg_pull_none>;
+       };
+
+       wlan_host_wake_l: wlan-host-wake-l {
+               rockchip,pins = <1 3 RK_FUNC_GPIO &pcfg_pull_up>;
+       };
+};
index fef2c06..0b8f1ed 100644 (file)
                };
        };
 
+       backlight: backlight {
+               compatible = "pwm-backlight";
+               brightness-levels = <
+                         0   1   2   3   4   5   6   7
+                         8   9  10  11  12  13  14  15
+                        16  17  18  19  20  21  22  23
+                        24  25  26  27  28  29  30  31
+                        32  33  34  35  36  37  38  39
+                        40  41  42  43  44  45  46  47
+                        48  49  50  51  52  53  54  55
+                        56  57  58  59  60  61  62  63
+                        64  65  66  67  68  69  70  71
+                        72  73  74  75  76  77  78  79
+                        80  81  82  83  84  85  86  87
+                        88  89  90  91  92  93  94  95
+                        96  97  98  99 100 101 102 103
+                       104 105 106 107 108 109 110 111
+                       112 113 114 115 116 117 118 119
+                       120 121 122 123 124 125 126 127
+                       128 129 130 131 132 133 134 135
+                       136 137 138 139 140 141 142 143
+                       144 145 146 147 148 149 150 151
+                       152 153 154 155 156 157 158 159
+                       160 161 162 163 164 165 166 167
+                       168 169 170 171 172 173 174 175
+                       176 177 178 179 180 181 182 183
+                       184 185 186 187 188 189 190 191
+                       192 193 194 195 196 197 198 199
+                       200 201 202 203 204 205 206 207
+                       208 209 210 211 212 213 214 215
+                       216 217 218 219 220 221 222 223
+                       224 225 226 227 228 229 230 231
+                       232 233 234 235 236 237 238 239
+                       240 241 242 243 244 245 246 247
+                       248 249 250 251 252 253 254 255>;
+               default-brightness-level = <200>;
+               enable-gpios = <&gpio1 RK_PB5 GPIO_ACTIVE_HIGH>;
+               pwms = <&pwm0 0 25000 0>;
+               status = "okay";
+       };
+
        edp_panel: edp-panel {
                compatible ="lg,lp079qx1-sp0v", "simple-panel";
                backlight = <&backlight>;
        };
 };
 
-&backlight {
-       enable-gpios = <&gpio1 RK_PB5 GPIO_ACTIVE_HIGH>;
-       status = "okay";
-};
-
 &edp {
        status = "okay";
 
index 5421e23..946d358 100644 (file)
 / {
        compatible = "rockchip,rk3399-sapphire", "rockchip,rk3399";
 
-       backlight: backlight {
-               compatible = "pwm-backlight";
-               brightness-levels = <
-                         0   1   2   3   4   5   6   7
-                         8   9  10  11  12  13  14  15
-                        16  17  18  19  20  21  22  23
-                        24  25  26  27  28  29  30  31
-                        32  33  34  35  36  37  38  39
-                        40  41  42  43  44  45  46  47
-                        48  49  50  51  52  53  54  55
-                        56  57  58  59  60  61  62  63
-                        64  65  66  67  68  69  70  71
-                        72  73  74  75  76  77  78  79
-                        80  81  82  83  84  85  86  87
-                        88  89  90  91  92  93  94  95
-                        96  97  98  99 100 101 102 103
-                       104 105 106 107 108 109 110 111
-                       112 113 114 115 116 117 118 119
-                       120 121 122 123 124 125 126 127
-                       128 129 130 131 132 133 134 135
-                       136 137 138 139 140 141 142 143
-                       144 145 146 147 148 149 150 151
-                       152 153 154 155 156 157 158 159
-                       160 161 162 163 164 165 166 167
-                       168 169 170 171 172 173 174 175
-                       176 177 178 179 180 181 182 183
-                       184 185 186 187 188 189 190 191
-                       192 193 194 195 196 197 198 199
-                       200 201 202 203 204 205 206 207
-                       208 209 210 211 212 213 214 215
-                       216 217 218 219 220 221 222 223
-                       224 225 226 227 228 229 230 231
-                       232 233 234 235 236 237 238 239
-                       240 241 242 243 244 245 246 247
-                       248 249 250 251 252 253 254 255>;
-               default-brightness-level = <200>;
-               pwms = <&pwm0 0 25000 0>;
+       chosen {
+               stdout-path = "serial2:1500000n8";
        };
 
        clkin_gmac: external-gmac-clock {
                regulator-max-microvolt = <12000000>;
        };
 
+       /*
+        * The fan power supply comes from the baseboard.
+        * For the standalone Sapphire one option is to connect a wire
+        * from  R90030 DNP R0805 pin2  to  C90002 10uF C0805 pin1 (vcc_sys).
+        */
+       fan0: gpio-fan {
+               #cooling-cells = <2>;
+               compatible = "gpio-fan";
+               gpio-fan,speed-map = <0 0 3000 1>;
+               gpios = <&gpio1 RK_PC2 GPIO_ACTIVE_HIGH>;
+               status = "okay";
+       };
+
        keys: gpio-keys {
                compatible = "gpio-keys";
                autorepeat;
        cpu-supply = <&vdd_cpu_b>;
 };
 
+&cpu_thermal {
+       trips {
+               cpu_hot: cpu_hot {
+                       hysteresis = <10000>;
+                       temperature = <55000>;
+                       type = "active";
+               };
+       };
+
+       cooling-maps {
+               map2 {
+                       cooling-device =
+                               <&fan0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                       trip = <&cpu_hot>;
+               };
+       };
+};
+
 &emmc_phy {
        status = "okay";
 };
                };
        };
 
+       fan {
+               motor_pwr: motor-pwr {
+                       rockchip,pins =
+                               <RK_GPIO1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
        pmic {
                pmic_int_l: pmic-int-l {
                        rockchip,pins =
index 99e7f65..5bd7356 100644 (file)
                clocks = <&cru SCLK_SPI0>, <&cru PCLK_SPI0>;
                clock-names = "spiclk", "apb_pclk";
                interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH 0>;
+               dmas = <&dmac_peri 10>, <&dmac_peri 11>;
+               dma-names = "tx", "rx";
                pinctrl-names = "default";
                pinctrl-0 = <&spi0_clk &spi0_tx &spi0_rx &spi0_cs0>;
                #address-cells = <1>;
                clocks = <&cru SCLK_SPI1>, <&cru PCLK_SPI1>;
                clock-names = "spiclk", "apb_pclk";
                interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH 0>;
+               dmas = <&dmac_peri 12>, <&dmac_peri 13>;
+               dma-names = "tx", "rx";
                pinctrl-names = "default";
                pinctrl-0 = <&spi1_clk &spi1_tx &spi1_rx &spi1_cs0>;
                #address-cells = <1>;
                clocks = <&cru SCLK_SPI2>, <&cru PCLK_SPI2>;
                clock-names = "spiclk", "apb_pclk";
                interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH 0>;
+               dmas = <&dmac_peri 14>, <&dmac_peri 15>;
+               dma-names = "tx", "rx";
                pinctrl-names = "default";
                pinctrl-0 = <&spi2_clk &spi2_tx &spi2_rx &spi2_cs0>;
                #address-cells = <1>;
                clocks = <&cru SCLK_SPI4>, <&cru PCLK_SPI4>;
                clock-names = "spiclk", "apb_pclk";
                interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH 0>;
+               dmas = <&dmac_peri 18>, <&dmac_peri 19>;
+               dma-names = "tx", "rx";
                pinctrl-names = "default";
                pinctrl-0 = <&spi4_clk &spi4_tx &spi4_rx &spi4_cs0>;
                #address-cells = <1>;
                clocks = <&cru SCLK_SPI5>, <&cru PCLK_SPI5>;
                clock-names = "spiclk", "apb_pclk";
                interrupts = <GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH 0>;
+               dmas = <&dmac_bus 8>, <&dmac_bus 9>;
+               dma-names = "tx", "rx";
                pinctrl-names = "default";
                pinctrl-0 = <&spi5_clk &spi5_tx &spi5_rx &spi5_cs0>;
                power-domains = <&power RK3399_PD_SDIOAUDIO>;
                                map0 {
                                        trip = <&cpu_alert0>;
                                        cooling-device =
-                                               <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                               <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                               <&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
                                };
                                map1 {
                                        trip = <&cpu_alert1>;
                                        cooling-device =
                                                <&cpu_l0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
-                                               <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                               <&cpu_l1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                               <&cpu_l2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                               <&cpu_l3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                               <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                               <&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
                                };
                        };
                };
                                map0 {
                                        trip = <&gpu_alert0>;
                                        cooling-device =
-                                               <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+                                               <&cpu_b0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+                                               <&cpu_b1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
                                };
                        };
                };
index 63894c4..4bcdbb7 100644 (file)
                reg = <0 0x10003000 0 0x1000>;
                clocks = <&clk26mhz>;
                clock-names = "apb_pclk";
-               port {
-                       etf_in: endpoint {
-                               slave-mode;
-                               remote-endpoint = <&funnel_out_port0>;
+               in-ports {
+                       port {
+                               etf_in: endpoint {
+                                       remote-endpoint = <&funnel_out_port0>;
+                               };
                        };
                };
        };
                reg = <0 0x10001000 0 0x1000>;
                clocks = <&clk26mhz>;
                clock-names = "apb_pclk";
-               ports {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
 
-                       /* funnel output port */
-                       port@0 {
-                               reg = <0>;
+               out-ports {
+                       port {
                                funnel_out_port0: endpoint {
                                        remote-endpoint = <&etf_in>;
                                };
                        };
+               };
 
-                       /* funnel input port 0-4 */
-                       port@1 {
+               in-ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
                                reg = <0>;
                                funnel_in_port0: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&etm0_out>;
                                };
                        };
 
-                       port@2 {
+                       port@1 {
                                reg = <1>;
                                funnel_in_port1: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&etm1_out>;
                                };
                        };
 
-                       port@3 {
+                       port@2 {
                                reg = <2>;
                                funnel_in_port2: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&etm2_out>;
                                };
                        };
 
-                       port@4 {
+                       port@3 {
                                reg = <3>;
                                funnel_in_port3: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&etm3_out>;
                                };
                        };
 
-                       port@5 {
+                       port@4 {
                                reg = <4>;
                                funnel_in_port4: endpoint {
-                                       slave-mode;
                                        remote-endpoint = <&stm_out>;
                                };
                        };
                cpu = <&cpu0>;
                clocks = <&clk26mhz>;
                clock-names = "apb_pclk";
-               port {
-                       etm0_out: endpoint {
-                               remote-endpoint = <&funnel_in_port0>;
+               out-ports {
+                       port {
+                               etm0_out: endpoint {
+                                       remote-endpoint = <&funnel_in_port0>;
+                               };
                        };
                };
        };
                cpu = <&cpu1>;
                clocks = <&clk26mhz>;
                clock-names = "apb_pclk";
-               port {
-                       etm1_out: endpoint {
-                               remote-endpoint = <&funnel_in_port1>;
+               out-ports {
+                       port {
+                               etm1_out: endpoint {
+                                       remote-endpoint = <&funnel_in_port1>;
+                               };
                        };
                };
        };
                cpu = <&cpu2>;
                clocks = <&clk26mhz>;
                clock-names = "apb_pclk";
-               port {
-                       etm2_out: endpoint {
-                               remote-endpoint = <&funnel_in_port2>;
+               out-ports {
+                       port {
+                               etm2_out: endpoint {
+                                       remote-endpoint = <&funnel_in_port2>;
+                               };
                        };
                };
        };
                cpu = <&cpu3>;
                clocks = <&clk26mhz>;
                clock-names = "apb_pclk";
-               port {
-                       etm3_out: endpoint {
-                               remote-endpoint = <&funnel_in_port3>;
+               out-ports {
+                       port {
+                               etm3_out: endpoint {
+                                       remote-endpoint = <&funnel_in_port3>;
+                               };
                        };
                };
        };
                reg-names = "stm-base", "stm-stimulus-base";
                clocks = <&clk26mhz>;
                clock-names = "apb_pclk";
-               port {
-                       stm_out: endpoint {
-                               remote-endpoint = <&funnel_in_port4>;
+               out-ports {
+                       port {
+                               stm_out: endpoint {
+                                       remote-endpoint = <&funnel_in_port4>;
+                               };
                        };
                };
        };
index 48f5928..5f57bf0 100644 (file)
                        reg = <0 0x10001000 0 0x1000>;
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
-                       ports {
-                               #address-cells = <1>;
-                               #size-cells = <0>;
-
-                               port@0 {
-                                       reg = <0>;
+                       out-ports {
+                               port {
                                        soc_funnel_out_port: endpoint {
                                                remote-endpoint = <&etb_in>;
                                        };
                                };
+                       };
 
-                               port@1 {
+                       in-ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
                                        reg = <0>;
                                        soc_funnel_in_port0: endpoint {
-                                               slave-mode;
                                                remote-endpoint =
                                                <&main_funnel_out_port>;
                                        };
                                };
 
-                               port@2 {
+                               port@4 {
                                        reg = <4>;
                                        soc_funnel_in_port1: endpoint {
-                                               slave-mode;
                                                remote-endpoint =
                                                        <&stm_out_port>;
                                        };
                        reg = <0 0x10003000 0 0x1000>;
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
-                       port {
-                               etb_in: endpoint {
-                                       slave-mode;
-                                       remote-endpoint =
-                                               <&soc_funnel_out_port>;
+                       out-ports {
+                               port {
+                                       etb_in: endpoint {
+                                               remote-endpoint =
+                                                       <&soc_funnel_out_port>;
+                                       };
                                };
                        };
                };
                        reg-names = "stm-base", "stm-stimulus-base";
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
-                       port {
-                               stm_out_port: endpoint {
-                                       remote-endpoint =
-                                               <&soc_funnel_in_port1>;
+                       out-ports {
+                               port {
+                                       stm_out_port: endpoint {
+                                               remote-endpoint =
+                                                       <&soc_funnel_in_port1>;
+                                       };
                                };
                        };
                };
                        reg = <0 0x11001000 0 0x1000>;
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
-                       ports {
-                               #address-cells = <1>;
-                               #size-cells = <0>;
-
-                               port@0 {
-                                       reg = <0>;
+                       out-ports {
+                               port {
                                        cluster0_funnel_out_port: endpoint {
                                                remote-endpoint =
                                                        <&cluster0_etf_in>;
                                        };
                                };
+                       };
 
-                               port@1 {
+                       in-ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
                                        reg = <0>;
                                        cluster0_funnel_in_port0: endpoint {
-                                               slave-mode;
                                                remote-endpoint = <&etm0_out>;
                                        };
                                };
 
-                               port@2 {
+                               port@1 {
                                        reg = <1>;
                                        cluster0_funnel_in_port1: endpoint {
-                                               slave-mode;
                                                remote-endpoint = <&etm1_out>;
                                        };
                                };
 
-                               port@3 {
+                               port@2 {
                                        reg = <2>;
                                        cluster0_funnel_in_port2: endpoint {
-                                               slave-mode;
                                                remote-endpoint = <&etm2_out>;
                                        };
                                };
                                port@4 {
                                        reg = <4>;
                                        cluster0_funnel_in_port3: endpoint {
-                                               slave-mode;
                                                remote-endpoint = <&etm3_out>;
                                        };
                                };
                        reg = <0 0x11002000 0 0x1000>;
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
-                       ports {
-                               #address-cells = <1>;
-                               #size-cells = <0>;
-
-                               port@0 {
-                                       reg = <0>;
+                       out-ports {
+                               port {
                                        cluster1_funnel_out_port: endpoint {
                                                remote-endpoint =
                                                        <&cluster1_etf_in>;
                                        };
                                };
+                       };
 
-                               port@1 {
+                       in-ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
                                        reg = <0>;
                                        cluster1_funnel_in_port0: endpoint {
-                                               slave-mode;
                                                remote-endpoint = <&etm4_out>;
                                        };
                                };
 
-                               port@2 {
+                               port@1 {
                                        reg = <1>;
                                        cluster1_funnel_in_port1: endpoint {
-                                               slave-mode;
                                                remote-endpoint = <&etm5_out>;
                                        };
                                };
 
-                               port@3 {
+                               port@2 {
                                        reg = <2>;
                                        cluster1_funnel_in_port2: endpoint {
-                                               slave-mode;
                                                remote-endpoint = <&etm6_out>;
                                        };
                                };
 
-                               port@4 {
+                               port@3 {
                                        reg = <3>;
                                        cluster1_funnel_in_port3: endpoint {
-                                               slave-mode;
                                                remote-endpoint = <&etm7_out>;
                                        };
                                };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       ports {
-                               #address-cells = <1>;
-                               #size-cells = <0>;
-
-                               port@0 {
-                                       reg = <0>;
+                       out-ports {
+                               port {
                                        cluster0_etf_out: endpoint {
                                                remote-endpoint =
                                                <&main_funnel_in_port0>;
                                        };
                                };
+                       };
 
-                               port@1 {
-                                       reg = <0>;
+                       in-ports {
+                               port {
                                        cluster0_etf_in: endpoint {
-                                               slave-mode;
                                                remote-endpoint =
                                                <&cluster0_funnel_out_port>;
                                        };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       ports {
-                               #address-cells = <1>;
-                               #size-cells = <0>;
-
-                               port@0 {
-                                       reg = <0>;
+                       out-ports {
+                               port {
                                        cluster1_etf_out: endpoint {
                                                remote-endpoint =
                                                <&main_funnel_in_port1>;
                                        };
                                };
+                       };
 
-                               port@1 {
-                                       reg = <0>;
+                       in-ports {
+                               port {
                                        cluster1_etf_in: endpoint {
-                                               slave-mode;
                                                remote-endpoint =
                                                <&cluster1_funnel_out_port>;
                                        };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       ports {
-                               #address-cells = <1>;
-                               #size-cells = <0>;
-
-                               port@0 {
-                                       reg = <0>;
+                       out-ports {
+                               port {
                                        main_funnel_out_port: endpoint {
                                                remote-endpoint =
                                                        <&soc_funnel_in_port0>;
                                        };
                                };
+                       };
 
-                               port@1 {
+                       in-ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
                                        reg = <0>;
                                        main_funnel_in_port0: endpoint {
-                                               slave-mode;
                                                remote-endpoint =
                                                        <&cluster0_etf_out>;
                                        };
                                };
 
-                               port@2 {
+                               port@1 {
                                        reg = <1>;
                                        main_funnel_in_port1: endpoint {
-                                               slave-mode;
                                                remote-endpoint =
                                                        <&cluster1_etf_out>;
                                        };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       port {
-                               etm0_out: endpoint {
-                                       remote-endpoint =
-                                               <&cluster0_funnel_in_port0>;
+                       out-ports {
+                               port {
+                                       etm0_out: endpoint {
+                                               remote-endpoint =
+                                                       <&cluster0_funnel_in_port0>;
+                                       };
                                };
                        };
                };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       port {
-                               etm1_out: endpoint {
-                                       remote-endpoint =
-                                               <&cluster0_funnel_in_port1>;
+                       out-ports {
+                               port {
+                                       etm1_out: endpoint {
+                                               remote-endpoint =
+                                                       <&cluster0_funnel_in_port1>;
+                                       };
                                };
                        };
                };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       port {
-                               etm2_out: endpoint {
-                                       remote-endpoint =
-                                               <&cluster0_funnel_in_port2>;
+                       out-ports {
+                               port {
+                                       etm2_out: endpoint {
+                                               remote-endpoint =
+                                                       <&cluster0_funnel_in_port2>;
+                                       };
                                };
                        };
                };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       port {
-                               etm3_out: endpoint {
-                                       remote-endpoint =
-                                               <&cluster0_funnel_in_port3>;
+                       out-ports {
+                               port {
+                                       etm3_out: endpoint {
+                                               remote-endpoint =
+                                                       <&cluster0_funnel_in_port3>;
+                                       };
                                };
                        };
                };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       port {
-                               etm4_out: endpoint {
-                                       remote-endpoint =
-                                               <&cluster1_funnel_in_port0>;
+                       out-ports {
+                               port {
+                                       etm4_out: endpoint {
+                                               remote-endpoint =
+                                                       <&cluster1_funnel_in_port0>;
+                                       };
                                };
                        };
                };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       port {
-                               etm5_out: endpoint {
-                                       remote-endpoint =
-                                               <&cluster1_funnel_in_port1>;
+                       out-ports {
+                               port {
+                                       etm5_out: endpoint {
+                                               remote-endpoint =
+                                                       <&cluster1_funnel_in_port1>;
+                                       };
                                };
                        };
                };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       port {
-                               etm6_out: endpoint {
-                                       remote-endpoint =
-                                               <&cluster1_funnel_in_port2>;
+                       out-ports {
+                               port {
+                                       etm6_out: endpoint {
+                                               remote-endpoint =
+                                                       <&cluster1_funnel_in_port2>;
+                                       };
                                };
                        };
                };
                        clocks = <&ext_26m>;
                        clock-names = "apb_pclk";
 
-                       port {
-                               etm7_out: endpoint {
-                                       remote-endpoint =
-                                               <&cluster1_funnel_in_port3>;
+                       out-ports {
+                               port {
+                                       etm7_out: endpoint {
+                                               remote-endpoint =
+                                                       <&cluster1_funnel_in_port3>;
+                                       };
                                };
                        };
                };
index 3e20917..6b0d4df 100644 (file)
 #define KERNEL_DS      UL(-1)
 #define USER_DS                (TASK_SIZE_64 - 1)
 
+/*
+ * On arm64 systems, unaligned accesses by the CPU are cheap, and so there is
+ * no point in shifting all network buffers by 2 bytes just to make some IP
+ * header fields appear aligned in memory, potentially sacrificing some DMA
+ * performance on some platforms.
+ */
+#define NET_IP_ALIGN   0
+
 #ifndef __ASSEMBLY__
 #ifdef __KERNEL__
 
index 9d9582c..9b432d9 100644 (file)
@@ -483,8 +483,6 @@ void __init arm64_memblock_init(void)
        high_memory = __va(memblock_end_of_DRAM() - 1) + 1;
 
        dma_contiguous_reserve(arm64_dma_phys_limit);
-
-       memblock_allow_resize();
 }
 
 void __init bootmem_init(void)
index 394b8d5..d1d6601 100644 (file)
@@ -659,6 +659,8 @@ void __init paging_init(void)
 
        memblock_free(__pa_symbol(init_pg_dir),
                      __pa_symbol(init_pg_end) - __pa_symbol(init_pg_dir));
+
+       memblock_allow_resize();
 }
 
 /*
index 6181e41..fe3ddd7 100644 (file)
  */
 #ifdef CONFIG_SUN3
 #define PTRS_PER_PTE   16
-#define __PAGETABLE_PMD_FOLDED
+#define __PAGETABLE_PMD_FOLDED 1
 #define PTRS_PER_PMD   1
 #define PTRS_PER_PGD   2048
 #elif defined(CONFIG_COLDFIRE)
 #define PTRS_PER_PTE   512
-#define __PAGETABLE_PMD_FOLDED
+#define __PAGETABLE_PMD_FOLDED 1
 #define PTRS_PER_PMD   1
 #define PTRS_PER_PGD   1024
 #else
index f64ebb9..e14b662 100644 (file)
@@ -63,7 +63,7 @@ extern int mem_init_done;
 
 #include <asm-generic/4level-fixup.h>
 
-#define __PAGETABLE_PMD_FOLDED
+#define __PAGETABLE_PMD_FOLDED 1
 
 #ifdef __KERNEL__
 #ifndef __ASSEMBLY__
index 75108ec..6c79e8a 100644 (file)
@@ -67,7 +67,7 @@ void (*cvmx_override_pko_queue_priority) (int pko_port,
 void (*cvmx_override_ipd_port_setup) (int ipd_port);
 
 /* Port count per interface */
-static int interface_port_count[5];
+static int interface_port_count[9];
 
 /**
  * Return the number of interfaces the chip has. Each interface
index e6c9485..cb38461 100644 (file)
@@ -50,7 +50,7 @@ void *arch_dma_alloc(struct device *dev, size_t size,
        void *ret;
 
        ret = dma_direct_alloc_pages(dev, size, dma_handle, gfp, attrs);
-       if (!ret && !(attrs & DMA_ATTR_NON_CONSISTENT)) {
+       if (ret && !(attrs & DMA_ATTR_NON_CONSISTENT)) {
                dma_cache_wback_inv((unsigned long) ret, size);
                ret = (void *)UNCAC_ADDR(ret);
        }
index d3e19a5..9f52db9 100644 (file)
@@ -4,7 +4,7 @@
 #ifndef _ASMNDS32_PGTABLE_H
 #define _ASMNDS32_PGTABLE_H
 
-#define __PAGETABLE_PMD_FOLDED
+#define __PAGETABLE_PMD_FOLDED 1
 #include <asm-generic/4level-fixup.h>
 #include <asm-generic/sizes.h>
 
index b941ac7..c7bb74e 100644 (file)
@@ -111,7 +111,7 @@ static inline void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
 #if CONFIG_PGTABLE_LEVELS == 3
 #define BITS_PER_PMD   (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY)
 #else
-#define __PAGETABLE_PMD_FOLDED
+#define __PAGETABLE_PMD_FOLDED 1
 #define BITS_PER_PMD   0
 #endif
 #define PTRS_PER_PMD    (1UL << BITS_PER_PMD)
index 0b33577..e21053e 100644 (file)
@@ -27,7 +27,7 @@ KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-option,-ffreestanding)
 KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
 KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
 UTS_MACHINE    := s390x
-STACK_SIZE     := $(if $(CONFIG_KASAN),32768,16384)
+STACK_SIZE     := $(if $(CONFIG_KASAN),65536,16384)
 CHECKFLAGS     += -D__s390__ -D__s390x__
 
 export LD_BFD
index 5930396..b1bdd15 100644 (file)
@@ -22,10 +22,10 @@ OBJCOPYFLAGS :=
 OBJECTS := $(addprefix $(obj)/,$(obj-y))
 
 LDFLAGS_vmlinux := --oformat $(LD_BFD) -e startup -T
-$(obj)/vmlinux: $(obj)/vmlinux.lds $(objtree)/arch/s390/boot/startup.a $(OBJECTS)
+$(obj)/vmlinux: $(obj)/vmlinux.lds $(objtree)/arch/s390/boot/startup.a $(OBJECTS) FORCE
        $(call if_changed,ld)
 
-OBJCOPYFLAGS_info.bin := -O binary --only-section=.vmlinux.info
+OBJCOPYFLAGS_info.bin := -O binary --only-section=.vmlinux.info --set-section-flags .vmlinux.info=load
 $(obj)/info.bin: vmlinux FORCE
        $(call if_changed,objcopy)
 
@@ -46,17 +46,17 @@ suffix-$(CONFIG_KERNEL_LZMA)  := .lzma
 suffix-$(CONFIG_KERNEL_LZO)  := .lzo
 suffix-$(CONFIG_KERNEL_XZ)  := .xz
 
-$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y)
+$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
        $(call if_changed,gzip)
-$(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y)
+$(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
        $(call if_changed,bzip2)
-$(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y)
+$(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y) FORCE
        $(call if_changed,lz4)
-$(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y)
+$(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
        $(call if_changed,lzma)
-$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y)
+$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
        $(call if_changed,lzo)
-$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y)
+$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE
        $(call if_changed,xzkern)
 
 OBJCOPYFLAGS_piggy.o := -I binary -O elf64-s390 -B s390:64-bit --rename-section .data=.vmlinux.bin.compressed
index 259d169..c69cb04 100644 (file)
@@ -64,6 +64,8 @@ CONFIG_NUMA=y
 CONFIG_PREEMPT=y
 CONFIG_HZ_100=y
 CONFIG_KEXEC_FILE=y
+CONFIG_EXPOLINE=y
+CONFIG_EXPOLINE_AUTO=y
 CONFIG_MEMORY_HOTPLUG=y
 CONFIG_MEMORY_HOTREMOVE=y
 CONFIG_KSM=y
@@ -84,9 +86,11 @@ CONFIG_PCI_DEBUG=y
 CONFIG_HOTPLUG_PCI=y
 CONFIG_HOTPLUG_PCI_S390=y
 CONFIG_CHSC_SCH=y
+CONFIG_VFIO_AP=m
 CONFIG_CRASH_DUMP=y
 CONFIG_BINFMT_MISC=m
 CONFIG_HIBERNATION=y
+CONFIG_PM_DEBUG=y
 CONFIG_NET=y
 CONFIG_PACKET=y
 CONFIG_PACKET_DIAG=m
@@ -161,8 +165,6 @@ CONFIG_NF_CONNTRACK_TFTP=m
 CONFIG_NF_CT_NETLINK=m
 CONFIG_NF_CT_NETLINK_TIMEOUT=m
 CONFIG_NF_TABLES=m
-CONFIG_NFT_EXTHDR=m
-CONFIG_NFT_META=m
 CONFIG_NFT_CT=m
 CONFIG_NFT_COUNTER=m
 CONFIG_NFT_LOG=m
@@ -365,6 +367,8 @@ CONFIG_NET_ACT_SKBEDIT=m
 CONFIG_NET_ACT_CSUM=m
 CONFIG_DNS_RESOLVER=y
 CONFIG_OPENVSWITCH=m
+CONFIG_VSOCKETS=m
+CONFIG_VIRTIO_VSOCKETS=m
 CONFIG_NETLINK_DIAG=m
 CONFIG_CGROUP_NET_PRIO=y
 CONFIG_BPF_JIT=y
@@ -461,6 +465,7 @@ CONFIG_PPTP=m
 CONFIG_PPPOL2TP=m
 CONFIG_PPP_ASYNC=m
 CONFIG_PPP_SYNC_TTY=m
+CONFIG_ISM=m
 CONFIG_INPUT_EVDEV=y
 # CONFIG_INPUT_KEYBOARD is not set
 # CONFIG_INPUT_MOUSE is not set
@@ -486,9 +491,12 @@ CONFIG_MLX4_INFINIBAND=m
 CONFIG_MLX5_INFINIBAND=m
 CONFIG_VFIO=m
 CONFIG_VFIO_PCI=m
+CONFIG_VFIO_MDEV=m
+CONFIG_VFIO_MDEV_DEVICE=m
 CONFIG_VIRTIO_PCI=m
 CONFIG_VIRTIO_BALLOON=m
 CONFIG_VIRTIO_INPUT=y
+CONFIG_S390_AP_IOMMU=y
 CONFIG_EXT4_FS=y
 CONFIG_EXT4_FS_POSIX_ACL=y
 CONFIG_EXT4_FS_SECURITY=y
@@ -615,7 +623,6 @@ CONFIG_DEBUG_CREDENTIALS=y
 CONFIG_RCU_TORTURE_TEST=m
 CONFIG_RCU_CPU_STALL_TIMEOUT=300
 CONFIG_NOTIFIER_ERROR_INJECTION=m
-CONFIG_PM_NOTIFIER_ERROR_INJECT=m
 CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=m
 CONFIG_FAULT_INJECTION=y
 CONFIG_FAILSLAB=y
@@ -727,3 +734,4 @@ CONFIG_APPLDATA_BASE=y
 CONFIG_KVM=m
 CONFIG_KVM_S390_UCONTROL=y
 CONFIG_VHOST_NET=m
+CONFIG_VHOST_VSOCK=m
index 37fd60c..32f539d 100644 (file)
@@ -65,6 +65,8 @@ CONFIG_NR_CPUS=512
 CONFIG_NUMA=y
 CONFIG_HZ_100=y
 CONFIG_KEXEC_FILE=y
+CONFIG_EXPOLINE=y
+CONFIG_EXPOLINE_AUTO=y
 CONFIG_MEMORY_HOTPLUG=y
 CONFIG_MEMORY_HOTREMOVE=y
 CONFIG_KSM=y
@@ -82,9 +84,11 @@ CONFIG_PCI=y
 CONFIG_HOTPLUG_PCI=y
 CONFIG_HOTPLUG_PCI_S390=y
 CONFIG_CHSC_SCH=y
+CONFIG_VFIO_AP=m
 CONFIG_CRASH_DUMP=y
 CONFIG_BINFMT_MISC=m
 CONFIG_HIBERNATION=y
+CONFIG_PM_DEBUG=y
 CONFIG_NET=y
 CONFIG_PACKET=y
 CONFIG_PACKET_DIAG=m
@@ -159,8 +163,6 @@ CONFIG_NF_CONNTRACK_TFTP=m
 CONFIG_NF_CT_NETLINK=m
 CONFIG_NF_CT_NETLINK_TIMEOUT=m
 CONFIG_NF_TABLES=m
-CONFIG_NFT_EXTHDR=m
-CONFIG_NFT_META=m
 CONFIG_NFT_CT=m
 CONFIG_NFT_COUNTER=m
 CONFIG_NFT_LOG=m
@@ -362,6 +364,8 @@ CONFIG_NET_ACT_SKBEDIT=m
 CONFIG_NET_ACT_CSUM=m
 CONFIG_DNS_RESOLVER=y
 CONFIG_OPENVSWITCH=m
+CONFIG_VSOCKETS=m
+CONFIG_VIRTIO_VSOCKETS=m
 CONFIG_NETLINK_DIAG=m
 CONFIG_CGROUP_NET_PRIO=y
 CONFIG_BPF_JIT=y
@@ -458,6 +462,7 @@ CONFIG_PPTP=m
 CONFIG_PPPOL2TP=m
 CONFIG_PPP_ASYNC=m
 CONFIG_PPP_SYNC_TTY=m
+CONFIG_ISM=m
 CONFIG_INPUT_EVDEV=y
 # CONFIG_INPUT_KEYBOARD is not set
 # CONFIG_INPUT_MOUSE is not set
@@ -483,9 +488,12 @@ CONFIG_MLX4_INFINIBAND=m
 CONFIG_MLX5_INFINIBAND=m
 CONFIG_VFIO=m
 CONFIG_VFIO_PCI=m
+CONFIG_VFIO_MDEV=m
+CONFIG_VFIO_MDEV_DEVICE=m
 CONFIG_VIRTIO_PCI=m
 CONFIG_VIRTIO_BALLOON=m
 CONFIG_VIRTIO_INPUT=y
+CONFIG_S390_AP_IOMMU=y
 CONFIG_EXT4_FS=y
 CONFIG_EXT4_FS_POSIX_ACL=y
 CONFIG_EXT4_FS_SECURITY=y
@@ -666,3 +674,4 @@ CONFIG_APPLDATA_BASE=y
 CONFIG_KVM=m
 CONFIG_KVM_S390_UCONTROL=y
 CONFIG_VHOST_NET=m
+CONFIG_VHOST_VSOCK=m
index 7cb6a52..4d58a92 100644 (file)
@@ -26,14 +26,23 @@ CONFIG_CGROUP_CPUACCT=y
 CONFIG_CGROUP_PERF=y
 CONFIG_NAMESPACES=y
 CONFIG_USER_NS=y
+CONFIG_CHECKPOINT_RESTORE=y
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_EXPERT=y
 # CONFIG_SYSFS_SYSCALL is not set
-CONFIG_CHECKPOINT_RESTORE=y
 CONFIG_BPF_SYSCALL=y
 CONFIG_USERFAULTFD=y
 # CONFIG_COMPAT_BRK is not set
 CONFIG_PROFILING=y
+CONFIG_LIVEPATCH=y
+CONFIG_NR_CPUS=256
+CONFIG_NUMA=y
+CONFIG_HZ_100=y
+CONFIG_KEXEC_FILE=y
+CONFIG_CRASH_DUMP=y
+CONFIG_HIBERNATION=y
+CONFIG_PM_DEBUG=y
+CONFIG_CMM=m
 CONFIG_OPROFILE=y
 CONFIG_KPROBES=y
 CONFIG_JUMP_LABEL=y
@@ -44,11 +53,7 @@ CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_PARTITION_ADVANCED=y
 CONFIG_IBM_PARTITION=y
 CONFIG_DEFAULT_DEADLINE=y
-CONFIG_LIVEPATCH=y
-CONFIG_NR_CPUS=256
-CONFIG_NUMA=y
-CONFIG_HZ_100=y
-CONFIG_KEXEC_FILE=y
+CONFIG_BINFMT_MISC=m
 CONFIG_MEMORY_HOTPLUG=y
 CONFIG_MEMORY_HOTREMOVE=y
 CONFIG_KSM=y
@@ -60,9 +65,6 @@ CONFIG_ZBUD=m
 CONFIG_ZSMALLOC=m
 CONFIG_ZSMALLOC_STAT=y
 CONFIG_IDLE_PAGE_TRACKING=y
-CONFIG_CRASH_DUMP=y
-CONFIG_BINFMT_MISC=m
-CONFIG_HIBERNATION=y
 CONFIG_NET=y
 CONFIG_PACKET=y
 CONFIG_UNIX=y
@@ -98,6 +100,7 @@ CONFIG_BLK_DEV_NBD=m
 CONFIG_BLK_DEV_RAM=y
 CONFIG_VIRTIO_BLK=y
 CONFIG_SCSI=y
+# CONFIG_SCSI_MQ_DEFAULT is not set
 CONFIG_BLK_DEV_SD=y
 CONFIG_CHR_DEV_ST=y
 CONFIG_BLK_DEV_SR=y
@@ -131,6 +134,7 @@ CONFIG_EQUALIZER=m
 CONFIG_TUN=m
 CONFIG_VIRTIO_NET=y
 # CONFIG_NET_VENDOR_ALACRITECH is not set
+# CONFIG_NET_VENDOR_AURORA is not set
 # CONFIG_NET_VENDOR_CORTINA is not set
 # CONFIG_NET_VENDOR_SOLARFLARE is not set
 # CONFIG_NET_VENDOR_SOCIONEXT is not set
@@ -157,33 +161,6 @@ CONFIG_TMPFS=y
 CONFIG_TMPFS_POSIX_ACL=y
 CONFIG_HUGETLBFS=y
 # CONFIG_NETWORK_FILESYSTEMS is not set
-CONFIG_DEBUG_INFO=y
-CONFIG_DEBUG_INFO_DWARF4=y
-CONFIG_GDB_SCRIPTS=y
-CONFIG_UNUSED_SYMBOLS=y
-CONFIG_DEBUG_SECTION_MISMATCH=y
-CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_PAGEALLOC=y
-CONFIG_DETECT_HUNG_TASK=y
-CONFIG_PANIC_ON_OOPS=y
-CONFIG_PROVE_LOCKING=y
-CONFIG_LOCK_STAT=y
-CONFIG_DEBUG_LOCKDEP=y
-CONFIG_DEBUG_ATOMIC_SLEEP=y
-CONFIG_DEBUG_LIST=y
-CONFIG_DEBUG_SG=y
-CONFIG_DEBUG_NOTIFIERS=y
-CONFIG_RCU_CPU_STALL_TIMEOUT=60
-CONFIG_LATENCYTOP=y
-CONFIG_SCHED_TRACER=y
-CONFIG_FTRACE_SYSCALLS=y
-CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
-CONFIG_STACK_TRACER=y
-CONFIG_BLK_DEV_IO_TRACE=y
-CONFIG_FUNCTION_PROFILER=y
-# CONFIG_RUNTIME_TESTING_MENU is not set
-CONFIG_S390_PTDUMP=y
 CONFIG_CRYPTO_CRYPTD=m
 CONFIG_CRYPTO_AUTHENC=m
 CONFIG_CRYPTO_TEST=m
@@ -193,6 +170,7 @@ CONFIG_CRYPTO_CBC=y
 CONFIG_CRYPTO_CFB=m
 CONFIG_CRYPTO_CTS=m
 CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_OFB=m
 CONFIG_CRYPTO_PCBC=m
 CONFIG_CRYPTO_XTS=m
 CONFIG_CRYPTO_CMAC=m
@@ -231,7 +209,6 @@ CONFIG_CRYPTO_USER_API_HASH=m
 CONFIG_CRYPTO_USER_API_SKCIPHER=m
 CONFIG_CRYPTO_USER_API_RNG=m
 CONFIG_ZCRYPT=m
-CONFIG_ZCRYPT_MULTIDEVNODES=y
 CONFIG_PKEY=m
 CONFIG_CRYPTO_PAES_S390=m
 CONFIG_CRYPTO_SHA1_S390=m
@@ -247,4 +224,30 @@ CONFIG_CRC7=m
 # CONFIG_XZ_DEC_ARM is not set
 # CONFIG_XZ_DEC_ARMTHUMB is not set
 # CONFIG_XZ_DEC_SPARC is not set
-CONFIG_CMM=m
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_INFO_DWARF4=y
+CONFIG_GDB_SCRIPTS=y
+CONFIG_UNUSED_SYMBOLS=y
+CONFIG_DEBUG_SECTION_MISMATCH=y
+CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_PAGEALLOC=y
+CONFIG_DETECT_HUNG_TASK=y
+CONFIG_PANIC_ON_OOPS=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_LOCK_STAT=y
+CONFIG_DEBUG_LOCKDEP=y
+CONFIG_DEBUG_ATOMIC_SLEEP=y
+CONFIG_DEBUG_LIST=y
+CONFIG_DEBUG_SG=y
+CONFIG_DEBUG_NOTIFIERS=y
+CONFIG_RCU_CPU_STALL_TIMEOUT=60
+CONFIG_LATENCYTOP=y
+CONFIG_SCHED_TRACER=y
+CONFIG_FTRACE_SYSCALLS=y
+CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
+CONFIG_STACK_TRACER=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_FUNCTION_PROFILER=y
+# CONFIG_RUNTIME_TESTING_MENU is not set
+CONFIG_S390_PTDUMP=y
index dbd689d..ccbb53e 100644 (file)
@@ -46,8 +46,6 @@ static inline int init_new_context(struct task_struct *tsk,
                mm->context.asce_limit = STACK_TOP_MAX;
                mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
                                   _ASCE_USER_BITS | _ASCE_TYPE_REGION3;
-               /* pgd_alloc() did not account this pud */
-               mm_inc_nr_puds(mm);
                break;
        case -PAGE_SIZE:
                /* forked 5-level task, set new asce with new_mm->pgd */
@@ -63,9 +61,6 @@ static inline int init_new_context(struct task_struct *tsk,
                /* forked 2-level compat task, set new asce with new mm->pgd */
                mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
                                   _ASCE_USER_BITS | _ASCE_TYPE_SEGMENT;
-               /* pgd_alloc() did not account this pmd */
-               mm_inc_nr_pmds(mm);
-               mm_inc_nr_puds(mm);
        }
        crst_table_init((unsigned long *) mm->pgd, pgd_entry_type(mm));
        return 0;
index f0f9bcf..5ee7337 100644 (file)
@@ -36,11 +36,11 @@ static inline void crst_table_init(unsigned long *crst, unsigned long entry)
 
 static inline unsigned long pgd_entry_type(struct mm_struct *mm)
 {
-       if (mm->context.asce_limit <= _REGION3_SIZE)
+       if (mm_pmd_folded(mm))
                return _SEGMENT_ENTRY_EMPTY;
-       if (mm->context.asce_limit <= _REGION2_SIZE)
+       if (mm_pud_folded(mm))
                return _REGION3_ENTRY_EMPTY;
-       if (mm->context.asce_limit <= _REGION1_SIZE)
+       if (mm_p4d_folded(mm))
                return _REGION2_ENTRY_EMPTY;
        return _REGION1_ENTRY_EMPTY;
 }
index 411d435..0637324 100644 (file)
@@ -493,6 +493,24 @@ static inline int is_module_addr(void *addr)
                                   _REGION_ENTRY_PROTECT | \
                                   _REGION_ENTRY_NOEXEC)
 
+static inline bool mm_p4d_folded(struct mm_struct *mm)
+{
+       return mm->context.asce_limit <= _REGION1_SIZE;
+}
+#define mm_p4d_folded(mm) mm_p4d_folded(mm)
+
+static inline bool mm_pud_folded(struct mm_struct *mm)
+{
+       return mm->context.asce_limit <= _REGION2_SIZE;
+}
+#define mm_pud_folded(mm) mm_pud_folded(mm)
+
+static inline bool mm_pmd_folded(struct mm_struct *mm)
+{
+       return mm->context.asce_limit <= _REGION3_SIZE;
+}
+#define mm_pmd_folded(mm) mm_pmd_folded(mm)
+
 static inline int mm_has_pgste(struct mm_struct *mm)
 {
 #ifdef CONFIG_PGSTE
index 302795c..81038ab 100644 (file)
@@ -236,7 +236,7 @@ static inline unsigned long current_stack_pointer(void)
        return sp;
 }
 
-static __no_sanitize_address_or_inline unsigned short stap(void)
+static __no_kasan_or_inline unsigned short stap(void)
 {
        unsigned short cpu_address;
 
@@ -330,7 +330,7 @@ static inline void __load_psw(psw_t psw)
  * Set PSW mask to specified value, while leaving the
  * PSW addr pointing to the next instruction.
  */
-static __no_sanitize_address_or_inline void __load_psw_mask(unsigned long mask)
+static __no_kasan_or_inline void __load_psw_mask(unsigned long mask)
 {
        unsigned long addr;
        psw_t psw;
index 27248f4..ce4e17c 100644 (file)
@@ -14,7 +14,7 @@
  * General size of kernel stacks
  */
 #ifdef CONFIG_KASAN
-#define THREAD_SIZE_ORDER 3
+#define THREAD_SIZE_ORDER 4
 #else
 #define THREAD_SIZE_ORDER 2
 #endif
index 457b7ba..b31c779 100644 (file)
@@ -136,7 +136,7 @@ static inline void pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
 static inline void pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd,
                                unsigned long address)
 {
-       if (tlb->mm->context.asce_limit <= _REGION3_SIZE)
+       if (mm_pmd_folded(tlb->mm))
                return;
        pgtable_pmd_page_dtor(virt_to_page(pmd));
        tlb_remove_table(tlb, pmd);
@@ -152,7 +152,7 @@ static inline void pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd,
 static inline void p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d,
                                unsigned long address)
 {
-       if (tlb->mm->context.asce_limit <= _REGION1_SIZE)
+       if (mm_p4d_folded(tlb->mm))
                return;
        tlb_remove_table(tlb, p4d);
 }
@@ -167,7 +167,7 @@ static inline void p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d,
 static inline void pud_free_tlb(struct mmu_gather *tlb, pud_t *pud,
                                unsigned long address)
 {
-       if (tlb->mm->context.asce_limit <= _REGION2_SIZE)
+       if (mm_pud_folded(tlb->mm))
                return;
        tlb_remove_table(tlb, pud);
 }
index 724fba4..39191a0 100644 (file)
@@ -236,10 +236,10 @@ ENTRY(__switch_to)
        stmg    %r6,%r15,__SF_GPRS(%r15)        # store gprs of prev task
        lghi    %r4,__TASK_stack
        lghi    %r1,__TASK_thread
-       lg      %r5,0(%r4,%r3)                  # start of kernel stack of next
+       llill   %r5,STACK_INIT
        stg     %r15,__THREAD_ksp(%r1,%r2)      # store kernel stack of prev
-       lgr     %r15,%r5
-       aghi    %r15,STACK_INIT                 # end of kernel stack of next
+       lg      %r15,0(%r4,%r3)                 # start of kernel stack of next
+       agr     %r15,%r5                        # end of kernel stack of next
        stg     %r3,__LC_CURRENT                # store task struct of next
        stg     %r15,__LC_KERNEL_STACK          # store end of kernel stack
        lg      %r15,__THREAD_ksp(%r1,%r3)      # load kernel stack of next
index cc085e2..74091fd 100644 (file)
@@ -373,7 +373,7 @@ static int __hw_perf_event_init(struct perf_event *event)
                return -ENOENT;
 
        if (ev > PERF_CPUM_CF_MAX_CTR)
-               return -EINVAL;
+               return -ENOENT;
 
        /* Obtain the counter set to which the specified counter belongs */
        set = get_counter_set(ev);
index 7bf604f..bfabeb1 100644 (file)
@@ -1842,10 +1842,30 @@ static void cpumsf_pmu_del(struct perf_event *event, int flags)
 CPUMF_EVENT_ATTR(SF, SF_CYCLES_BASIC, PERF_EVENT_CPUM_SF);
 CPUMF_EVENT_ATTR(SF, SF_CYCLES_BASIC_DIAG, PERF_EVENT_CPUM_SF_DIAG);
 
-static struct attribute *cpumsf_pmu_events_attr[] = {
-       CPUMF_EVENT_PTR(SF, SF_CYCLES_BASIC),
-       NULL,
-       NULL,
+/* Attribute list for CPU_SF.
+ *
+ * The availablitiy depends on the CPU_MF sampling facility authorization
+ * for basic + diagnositic samples. This is determined at initialization
+ * time by the sampling facility device driver.
+ * If the authorization for basic samples is turned off, it should be
+ * also turned off for diagnostic sampling.
+ *
+ * During initialization of the device driver, check the authorization
+ * level for diagnostic sampling and installs the attribute
+ * file for diagnostic sampling if necessary.
+ *
+ * For now install a placeholder to reference all possible attributes:
+ * SF_CYCLES_BASIC and SF_CYCLES_BASIC_DIAG.
+ * Add another entry for the final NULL pointer.
+ */
+enum {
+       SF_CYCLES_BASIC_ATTR_IDX = 0,
+       SF_CYCLES_BASIC_DIAG_ATTR_IDX,
+       SF_CYCLES_ATTR_MAX
+};
+
+static struct attribute *cpumsf_pmu_events_attr[SF_CYCLES_ATTR_MAX + 1] = {
+       [SF_CYCLES_BASIC_ATTR_IDX] = CPUMF_EVENT_PTR(SF, SF_CYCLES_BASIC)
 };
 
 PMU_FORMAT_ATTR(event, "config:0-63");
@@ -2040,7 +2060,10 @@ static int __init init_cpum_sampling_pmu(void)
 
        if (si.ad) {
                sfb_set_limits(CPUM_SF_MIN_SDB, CPUM_SF_MAX_SDB);
-               cpumsf_pmu_events_attr[1] =
+               /* Sampling of diagnostic data authorized,
+                * install event into attribute list of PMU device.
+                */
+               cpumsf_pmu_events_attr[SF_CYCLES_BASIC_DIAG_ATTR_IDX] =
                        CPUMF_EVENT_PTR(SF, SF_CYCLES_BASIC_DIAG);
        }
 
index eb8aebe..e76309f 100644 (file)
@@ -37,7 +37,7 @@ KASAN_SANITIZE := n
 $(obj)/vdso32_wrapper.o : $(obj)/vdso32.so
 
 # link rule for the .so file, .lds has to be first
-$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32)
+$(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) FORCE
        $(call if_changed,vdso32ld)
 
 # strip rule for the .so file
@@ -46,12 +46,12 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE
        $(call if_changed,objcopy)
 
 # assembly rules for the .S files
-$(obj-vdso32): %.o: %.S
+$(obj-vdso32): %.o: %.S FORCE
        $(call if_changed_dep,vdso32as)
 
 # actual build commands
 quiet_cmd_vdso32ld = VDSO32L $@
-      cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $^ -o $@
+      cmd_vdso32ld = $(CC) $(c_flags) -Wl,-T $(filter %.lds %.o,$^) -o $@
 quiet_cmd_vdso32as = VDSO32A $@
       cmd_vdso32as = $(CC) $(a_flags) -c -o $@ $<
 
index a22b2cf..f849ac6 100644 (file)
@@ -37,7 +37,7 @@ 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)
+$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) FORCE
        $(call if_changed,vdso64ld)
 
 # strip rule for the .so file
@@ -46,12 +46,12 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE
        $(call if_changed,objcopy)
 
 # assembly rules for the .S files
-$(obj-vdso64): %.o: %.S
+$(obj-vdso64): %.o: %.S FORCE
        $(call if_changed_dep,vdso64as)
 
 # actual build commands
 quiet_cmd_vdso64ld = VDSO64L $@
-      cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@
+      cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $(filter %.lds %.o,$^) -o $@
 quiet_cmd_vdso64as = VDSO64A $@
       cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
 
index 21eb740..8429ab0 100644 (file)
@@ -154,14 +154,14 @@ SECTIONS
         * uncompressed image info used by the decompressor
         * it should match struct vmlinux_info
         */
-       .vmlinux.info 0 : {
+       .vmlinux.info 0 (INFO) : {
                QUAD(_stext)                                    /* default_lma */
                QUAD(startup_continue)                          /* entry */
                QUAD(__bss_start - _stext)                      /* image_size */
                QUAD(__bss_stop - __bss_start)                  /* bss_size */
                QUAD(__boot_data_start)                         /* bootdata_off */
                QUAD(__boot_data_end - __boot_data_start)       /* bootdata_size */
-       }
+       } :NONE
 
        /* Debugging sections.  */
        STABS_DEBUG
index 76d89ee..814f265 100644 (file)
@@ -101,6 +101,7 @@ int crst_table_upgrade(struct mm_struct *mm, unsigned long end)
                        mm->context.asce_limit = _REGION1_SIZE;
                        mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
                                _ASCE_USER_BITS | _ASCE_TYPE_REGION2;
+                       mm_inc_nr_puds(mm);
                } else {
                        crst_table_init(table, _REGION1_ENTRY_EMPTY);
                        pgd_populate(mm, (pgd_t *) table, (p4d_t *) pgd);
index ae0d9e8..d31bde0 100644 (file)
@@ -53,6 +53,7 @@ int __node_distance(int a, int b)
 {
        return mode->distance ? mode->distance(a, b) : 0;
 }
+EXPORT_SYMBOL(__node_distance);
 
 int numa_debug_enabled;
 
index 74c002d..28c4062 100644 (file)
@@ -1305,6 +1305,7 @@ static int ubd_queue_one_vec(struct blk_mq_hw_ctx *hctx, struct request *req,
                io_req->fds[0] = dev->cow.fd;
        else
                io_req->fds[0] = dev->fd;
+       io_req->error = 0;
 
        if (req_op(req) == REQ_OP_FLUSH) {
                io_req->op = UBD_FLUSH;
@@ -1313,9 +1314,7 @@ static int ubd_queue_one_vec(struct blk_mq_hw_ctx *hctx, struct request *req,
                io_req->cow_offset = -1;
                io_req->offset = off;
                io_req->length = bvec->bv_len;
-               io_req->error = 0;
                io_req->sector_mask = 0;
-
                io_req->op = rq_data_dir(req) == READ ? UBD_READ : UBD_WRITE;
                io_req->offsets[0] = 0;
                io_req->offsets[1] = dev->cow.data_offset;
@@ -1341,11 +1340,14 @@ static int ubd_queue_one_vec(struct blk_mq_hw_ctx *hctx, struct request *req,
 static blk_status_t ubd_queue_rq(struct blk_mq_hw_ctx *hctx,
                                 const struct blk_mq_queue_data *bd)
 {
+       struct ubd *ubd_dev = hctx->queue->queuedata;
        struct request *req = bd->rq;
        int ret = 0;
 
        blk_mq_start_request(req);
 
+       spin_lock_irq(&ubd_dev->lock);
+
        if (req_op(req) == REQ_OP_FLUSH) {
                ret = ubd_queue_one_vec(hctx, req, 0, NULL);
        } else {
@@ -1361,9 +1363,11 @@ static blk_status_t ubd_queue_rq(struct blk_mq_hw_ctx *hctx,
                }
        }
 out:
-       if (ret < 0) {
+       spin_unlock_irq(&ubd_dev->lock);
+
+       if (ret < 0)
                blk_mq_requeue_request(req, true);
-       }
+
        return BLK_STS_OK;
 }
 
index ba7e346..9d734f3 100644 (file)
@@ -525,7 +525,6 @@ config X86_VSMP
        bool "ScaleMP vSMP"
        select HYPERVISOR_GUEST
        select PARAVIRT
-       select PARAVIRT_XXL
        depends on X86_64 && PCI
        depends on X86_EXTENDED_PLATFORM
        depends on SMP
index 5b562e4..88398fd 100644 (file)
@@ -213,8 +213,6 @@ ifdef CONFIG_X86_64
 KBUILD_LDFLAGS += $(call ld-option, -z max-page-size=0x200000)
 endif
 
-# Speed up the build
-KBUILD_CFLAGS += -pipe
 # Workaround for a gcc prelease that unfortunately was shipped in a suse release
 KBUILD_CFLAGS += -Wno-sign-compare
 #
@@ -239,7 +237,7 @@ archheaders:
 archmacros:
        $(Q)$(MAKE) $(build)=arch/x86/kernel arch/x86/kernel/macros.s
 
-ASM_MACRO_FLAGS = -Wa,arch/x86/kernel/macros.s -Wa,-
+ASM_MACRO_FLAGS = -Wa,arch/x86/kernel/macros.s
 export ASM_MACRO_FLAGS
 KBUILD_CFLAGS += $(ASM_MACRO_FLAGS)
 
index 4da9b1c..c1a812b 100644 (file)
@@ -221,6 +221,8 @@ static inline void mce_hygon_feature_init(struct cpuinfo_x86 *c) { return mce_am
 
 int mce_available(struct cpuinfo_x86 *c);
 bool mce_is_memory_error(struct mce *m);
+bool mce_is_correctable(struct mce *m);
+int mce_usable_address(struct mce *m);
 
 DECLARE_PER_CPU(unsigned, mce_exception_count);
 DECLARE_PER_CPU(unsigned, mce_poll_count);
index 0d6271c..1d0a777 100644 (file)
@@ -232,7 +232,7 @@ static inline u64 hv_do_fast_hypercall16(u16 code, u64 input1, u64 input2)
                                      : "cc");
        }
 #endif
-               return hv_status;
+       return hv_status;
 }
 
 /*
index cd0cf1c..8f65728 100644 (file)
 
 /*
  * Set __PAGE_OFFSET to the most negative possible address +
- * PGDIR_SIZE*16 (pgd slot 272).  The gap is to allow a space for a
- * hypervisor to fit.  Choosing 16 slots here is arbitrary, but it's
- * what Xen requires.
+ * PGDIR_SIZE*17 (pgd slot 273).
+ *
+ * The gap is to allow a space for LDT remap for PTI (1 pgd slot) and space for
+ * a hypervisor (16 slots). Choosing 16 slots for a hypervisor is arbitrary,
+ * but it's what Xen requires.
  */
-#define __PAGE_OFFSET_BASE_L5  _AC(0xff10000000000000, UL)
-#define __PAGE_OFFSET_BASE_L4  _AC(0xffff880000000000, UL)
+#define __PAGE_OFFSET_BASE_L5  _AC(0xff11000000000000, UL)
+#define __PAGE_OFFSET_BASE_L4  _AC(0xffff888000000000, UL)
 
 #ifdef CONFIG_DYNAMIC_MEMORY_LAYOUT
 #define __PAGE_OFFSET           page_offset_base
index 04edd2d..84bd9bd 100644 (file)
@@ -111,9 +111,7 @@ extern unsigned int ptrs_per_p4d;
  */
 #define MAXMEM                 (1UL << MAX_PHYSMEM_BITS)
 
-#define LDT_PGD_ENTRY_L4       -3UL
-#define LDT_PGD_ENTRY_L5       -112UL
-#define LDT_PGD_ENTRY          (pgtable_l5_enabled() ? LDT_PGD_ENTRY_L5 : LDT_PGD_ENTRY_L4)
+#define LDT_PGD_ENTRY          -240UL
 #define LDT_BASE_ADDR          (LDT_PGD_ENTRY << PGDIR_SHIFT)
 #define LDT_END_ADDR           (LDT_BASE_ADDR + PGDIR_SIZE)
 
index 87623c6..bd5ac6c 100644 (file)
 #define queued_fetch_set_pending_acquire queued_fetch_set_pending_acquire
 static __always_inline u32 queued_fetch_set_pending_acquire(struct qspinlock *lock)
 {
-       u32 val = 0;
-
-       if (GEN_BINARY_RMWcc(LOCK_PREFIX "btsl", lock->val.counter, c,
-                            "I", _Q_PENDING_OFFSET))
-               val |= _Q_PENDING_VAL;
+       u32 val;
 
+       /*
+        * We can't use GEN_BINARY_RMWcc() inside an if() stmt because asm goto
+        * and CONFIG_PROFILE_ALL_BRANCHES=y results in a label inside a
+        * statement expression, which GCC doesn't like.
+        */
+       val = GEN_BINARY_RMWcc(LOCK_PREFIX "btsl", lock->val.counter, c,
+                              "I", _Q_PENDING_OFFSET) * _Q_PENDING_VAL;
        val |= atomic_read(&lock->val) & ~_Q_PENDING_MASK;
 
        return val;
index 123e669..790ce08 100644 (file)
@@ -9,7 +9,7 @@
 #include <linux/mm.h>
 #include <linux/device.h>
 
-#include <linux/uaccess.h>
+#include <asm/extable.h>
 #include <asm/page.h>
 #include <asm/pgtable.h>
 
@@ -93,12 +93,39 @@ clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops,
  */
 static inline int xen_safe_write_ulong(unsigned long *addr, unsigned long val)
 {
-       return __put_user(val, (unsigned long __user *)addr);
+       int ret = 0;
+
+       asm volatile("1: mov %[val], %[ptr]\n"
+                    "2:\n"
+                    ".section .fixup, \"ax\"\n"
+                    "3: sub $1, %[ret]\n"
+                    "   jmp 2b\n"
+                    ".previous\n"
+                    _ASM_EXTABLE(1b, 3b)
+                    : [ret] "+r" (ret), [ptr] "=m" (*addr)
+                    : [val] "r" (val));
+
+       return ret;
 }
 
-static inline int xen_safe_read_ulong(unsigned long *addr, unsigned long *val)
+static inline int xen_safe_read_ulong(const unsigned long *addr,
+                                     unsigned long *val)
 {
-       return __get_user(*val, (unsigned long __user *)addr);
+       int ret = 0;
+       unsigned long rval = ~0ul;
+
+       asm volatile("1: mov %[ptr], %[rval]\n"
+                    "2:\n"
+                    ".section .fixup, \"ax\"\n"
+                    "3: sub $1, %[ret]\n"
+                    "   jmp 2b\n"
+                    ".previous\n"
+                    _ASM_EXTABLE(1b, 3b)
+                    : [ret] "+r" (ret), [rval] "+r" (rval)
+                    : [ptr] "m" (*addr));
+       *val = rval;
+
+       return ret;
 }
 
 #ifdef CONFIG_XEN_PV
index 8c66d2f..36d2696 100644 (file)
@@ -485,7 +485,7 @@ static void mce_report_event(struct pt_regs *regs)
  * be somewhat complicated (e.g. segment offset would require an instruction
  * parser). So only support physical addresses up to page granuality for now.
  */
-static int mce_usable_address(struct mce *m)
+int mce_usable_address(struct mce *m)
 {
        if (!(m->status & MCI_STATUS_ADDRV))
                return 0;
@@ -505,6 +505,7 @@ static int mce_usable_address(struct mce *m)
 
        return 1;
 }
+EXPORT_SYMBOL_GPL(mce_usable_address);
 
 bool mce_is_memory_error(struct mce *m)
 {
@@ -534,7 +535,7 @@ bool mce_is_memory_error(struct mce *m)
 }
 EXPORT_SYMBOL_GPL(mce_is_memory_error);
 
-static bool mce_is_correctable(struct mce *m)
+bool mce_is_correctable(struct mce *m)
 {
        if (m->cpuvendor == X86_VENDOR_AMD && m->status & MCI_STATUS_DEFERRED)
                return false;
@@ -547,6 +548,7 @@ static bool mce_is_correctable(struct mce *m)
 
        return true;
 }
+EXPORT_SYMBOL_GPL(mce_is_correctable);
 
 static bool cec_add_mce(struct mce *m)
 {
index 1c72f38..e81a2db 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/kexec.h>
+#include <linux/i8253.h>
 #include <asm/processor.h>
 #include <asm/hypervisor.h>
 #include <asm/hyperv-tlfs.h>
@@ -295,6 +296,16 @@ static void __init ms_hyperv_init_platform(void)
        if (efi_enabled(EFI_BOOT))
                x86_platform.get_nmi_reason = hv_get_nmi_reason;
 
+       /*
+        * Hyper-V VMs have a PIT emulation quirk such that zeroing the
+        * counter register during PIT shutdown restarts the PIT. So it
+        * continues to interrupt @18.2 HZ. Setting i8253_clear_counter
+        * to false tells pit_shutdown() not to zero the counter so that
+        * the PIT really is shutdown. Generation 2 VMs don't have a PIT,
+        * and setting this value has no effect.
+        */
+       i8253_clear_counter_on_shutdown = false;
+
 #if IS_ENABLED(CONFIG_HYPERV)
        /*
         * Setup the hook to get control post apic initialization.
index d9ab49b..0eda91f 100644 (file)
@@ -77,7 +77,7 @@ static __init int setup_vmw_sched_clock(char *s)
 }
 early_param("no-vmw-sched-clock", setup_vmw_sched_clock);
 
-static unsigned long long vmware_sched_clock(void)
+static unsigned long long notrace vmware_sched_clock(void)
 {
        unsigned long long ns;
 
index ab18e08..6135ae8 100644 (file)
@@ -199,14 +199,6 @@ static void sanity_check_ldt_mapping(struct mm_struct *mm)
 /*
  * If PTI is enabled, this maps the LDT into the kernelmode and
  * usermode tables for the given mm.
- *
- * There is no corresponding unmap function.  Even if the LDT is freed, we
- * leave the PTEs around until the slot is reused or the mm is destroyed.
- * This is harmless: the LDT is always in ordinary memory, and no one will
- * access the freed slot.
- *
- * If we wanted to unmap freed LDTs, we'd also need to do a flush to make
- * it useful, and the flush would slow down modify_ldt().
  */
 static int
 map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot)
@@ -214,8 +206,7 @@ map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot)
        unsigned long va;
        bool is_vmalloc;
        spinlock_t *ptl;
-       pgd_t *pgd;
-       int i;
+       int i, nr_pages;
 
        if (!static_cpu_has(X86_FEATURE_PTI))
                return 0;
@@ -229,16 +220,11 @@ map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot)
        /* Check if the current mappings are sane */
        sanity_check_ldt_mapping(mm);
 
-       /*
-        * Did we already have the top level entry allocated?  We can't
-        * use pgd_none() for this because it doens't do anything on
-        * 4-level page table kernels.
-        */
-       pgd = pgd_offset(mm, LDT_BASE_ADDR);
-
        is_vmalloc = is_vmalloc_addr(ldt->entries);
 
-       for (i = 0; i * PAGE_SIZE < ldt->nr_entries * LDT_ENTRY_SIZE; i++) {
+       nr_pages = DIV_ROUND_UP(ldt->nr_entries * LDT_ENTRY_SIZE, PAGE_SIZE);
+
+       for (i = 0; i < nr_pages; i++) {
                unsigned long offset = i << PAGE_SHIFT;
                const void *src = (char *)ldt->entries + offset;
                unsigned long pfn;
@@ -272,13 +258,39 @@ map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot)
        /* Propagate LDT mapping to the user page-table */
        map_ldt_struct_to_user(mm);
 
-       va = (unsigned long)ldt_slot_va(slot);
-       flush_tlb_mm_range(mm, va, va + LDT_SLOT_STRIDE, PAGE_SHIFT, false);
-
        ldt->slot = slot;
        return 0;
 }
 
+static void unmap_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt)
+{
+       unsigned long va;
+       int i, nr_pages;
+
+       if (!ldt)
+               return;
+
+       /* LDT map/unmap is only required for PTI */
+       if (!static_cpu_has(X86_FEATURE_PTI))
+               return;
+
+       nr_pages = DIV_ROUND_UP(ldt->nr_entries * LDT_ENTRY_SIZE, PAGE_SIZE);
+
+       for (i = 0; i < nr_pages; i++) {
+               unsigned long offset = i << PAGE_SHIFT;
+               spinlock_t *ptl;
+               pte_t *ptep;
+
+               va = (unsigned long)ldt_slot_va(ldt->slot) + offset;
+               ptep = get_locked_pte(mm, va, &ptl);
+               pte_clear(mm, va, ptep);
+               pte_unmap_unlock(ptep, ptl);
+       }
+
+       va = (unsigned long)ldt_slot_va(ldt->slot);
+       flush_tlb_mm_range(mm, va, va + nr_pages * PAGE_SIZE, PAGE_SHIFT, false);
+}
+
 #else /* !CONFIG_PAGE_TABLE_ISOLATION */
 
 static int
@@ -286,6 +298,10 @@ map_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt, int slot)
 {
        return 0;
 }
+
+static void unmap_ldt_struct(struct mm_struct *mm, struct ldt_struct *ldt)
+{
+}
 #endif /* CONFIG_PAGE_TABLE_ISOLATION */
 
 static void free_ldt_pgtables(struct mm_struct *mm)
@@ -524,6 +540,7 @@ static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode)
        }
 
        install_ldt(mm, new_ldt);
+       unmap_ldt_struct(mm, old_ldt);
        free_ldt_struct(old_ldt);
        error = 0;
 
index 1eae5af..891a75d 100644 (file)
 
 #define TOPOLOGY_REGISTER_OFFSET 0x10
 
-#if defined CONFIG_PCI && defined CONFIG_PARAVIRT_XXL
-/*
- * Interrupt control on vSMPowered systems:
- * ~AC is a shadow of IF.  If IF is 'on' AC should be 'off'
- * and vice versa.
- */
-
-asmlinkage __visible unsigned long vsmp_save_fl(void)
-{
-       unsigned long flags = native_save_fl();
-
-       if (!(flags & X86_EFLAGS_IF) || (flags & X86_EFLAGS_AC))
-               flags &= ~X86_EFLAGS_IF;
-       return flags;
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_save_fl);
-
-__visible void vsmp_restore_fl(unsigned long flags)
-{
-       if (flags & X86_EFLAGS_IF)
-               flags &= ~X86_EFLAGS_AC;
-       else
-               flags |= X86_EFLAGS_AC;
-       native_restore_fl(flags);
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_restore_fl);
-
-asmlinkage __visible void vsmp_irq_disable(void)
-{
-       unsigned long flags = native_save_fl();
-
-       native_restore_fl((flags & ~X86_EFLAGS_IF) | X86_EFLAGS_AC);
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_irq_disable);
-
-asmlinkage __visible void vsmp_irq_enable(void)
-{
-       unsigned long flags = native_save_fl();
-
-       native_restore_fl((flags | X86_EFLAGS_IF) & (~X86_EFLAGS_AC));
-}
-PV_CALLEE_SAVE_REGS_THUNK(vsmp_irq_enable);
-
-static unsigned __init vsmp_patch(u8 type, void *ibuf,
-                                 unsigned long addr, unsigned len)
-{
-       switch (type) {
-       case PARAVIRT_PATCH(irq.irq_enable):
-       case PARAVIRT_PATCH(irq.irq_disable):
-       case PARAVIRT_PATCH(irq.save_fl):
-       case PARAVIRT_PATCH(irq.restore_fl):
-               return paravirt_patch_default(type, ibuf, addr, len);
-       default:
-               return native_patch(type, ibuf, addr, len);
-       }
-
-}
-
-static void __init set_vsmp_pv_ops(void)
+#ifdef CONFIG_PCI
+static void __init set_vsmp_ctl(void)
 {
        void __iomem *address;
        unsigned int cap, ctl, cfg;
@@ -109,28 +52,12 @@ static void __init set_vsmp_pv_ops(void)
        }
 #endif
 
-       if (cap & ctl & (1 << 4)) {
-               /* Setup irq ops and turn on vSMP  IRQ fastpath handling */
-               pv_ops.irq.irq_disable = PV_CALLEE_SAVE(vsmp_irq_disable);
-               pv_ops.irq.irq_enable = PV_CALLEE_SAVE(vsmp_irq_enable);
-               pv_ops.irq.save_fl = PV_CALLEE_SAVE(vsmp_save_fl);
-               pv_ops.irq.restore_fl = PV_CALLEE_SAVE(vsmp_restore_fl);
-               pv_ops.init.patch = vsmp_patch;
-               ctl &= ~(1 << 4);
-       }
        writel(ctl, address + 4);
        ctl = readl(address + 4);
        pr_info("vSMP CTL: control set to:0x%08x\n", ctl);
 
        early_iounmap(address, 8);
 }
-#else
-static void __init set_vsmp_pv_ops(void)
-{
-}
-#endif
-
-#ifdef CONFIG_PCI
 static int is_vsmp = -1;
 
 static void __init detect_vsmp_box(void)
@@ -164,11 +91,14 @@ static int is_vsmp_box(void)
 {
        return 0;
 }
+static void __init set_vsmp_ctl(void)
+{
+}
 #endif
 
 static void __init vsmp_cap_cpus(void)
 {
-#if !defined(CONFIG_X86_VSMP) && defined(CONFIG_SMP)
+#if !defined(CONFIG_X86_VSMP) && defined(CONFIG_SMP) && defined(CONFIG_PCI)
        void __iomem *address;
        unsigned int cfg, topology, node_shift, maxcpus;
 
@@ -221,6 +151,6 @@ void __init vsmp_init(void)
 
        vsmp_cap_cpus();
 
-       set_vsmp_pv_ops();
+       set_vsmp_ctl();
        return;
 }
index 0d7b3ae..a5d7ed1 100644 (file)
@@ -1905,7 +1905,7 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
        init_top_pgt[0] = __pgd(0);
 
        /* Pre-constructed entries are in pfn, so convert to mfn */
-       /* L4[272] -> level3_ident_pgt  */
+       /* L4[273] -> level3_ident_pgt  */
        /* L4[511] -> level3_kernel_pgt */
        convert_pfn_mfn(init_top_pgt);
 
@@ -1925,8 +1925,8 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
        addr[0] = (unsigned long)pgd;
        addr[1] = (unsigned long)l3;
        addr[2] = (unsigned long)l2;
-       /* Graft it onto L4[272][0]. Note that we creating an aliasing problem:
-        * Both L4[272][0] and L4[511][510] have entries that point to the same
+       /* Graft it onto L4[273][0]. Note that we creating an aliasing problem:
+        * Both L4[273][0] and L4[511][510] have entries that point to the same
         * L2 (PMD) tables. Meaning that if you modify it in __va space
         * it will be also modified in the __ka space! (But if you just
         * modify the PMD table to point to other PTE's or none, then you
index b067317..055e37e 100644 (file)
@@ -656,8 +656,7 @@ bool __set_phys_to_machine(unsigned long pfn, unsigned long mfn)
 
        /*
         * The interface requires atomic updates on p2m elements.
-        * xen_safe_write_ulong() is using __put_user which does an atomic
-        * store via asm().
+        * xen_safe_write_ulong() is using an atomic store via asm().
         */
        if (likely(!xen_safe_write_ulong(xen_p2m_addr + pfn, mfn)))
                return true;
index 441c882..1c8a881 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/log2.h>
 #include <linux/gfp.h>
 #include <linux/slab.h>
+#include <linux/atomic.h>
 
 #include <asm/paravirt.h>
 #include <asm/qspinlock.h>
@@ -21,6 +22,7 @@
 
 static DEFINE_PER_CPU(int, lock_kicker_irq) = -1;
 static DEFINE_PER_CPU(char *, irq_name);
+static DEFINE_PER_CPU(atomic_t, xen_qlock_wait_nest);
 static bool xen_pvspin = true;
 
 static void xen_qlock_kick(int cpu)
@@ -39,25 +41,25 @@ static void xen_qlock_kick(int cpu)
  */
 static void xen_qlock_wait(u8 *byte, u8 val)
 {
-       unsigned long flags;
        int irq = __this_cpu_read(lock_kicker_irq);
+       atomic_t *nest_cnt = this_cpu_ptr(&xen_qlock_wait_nest);
 
        /* If kicker interrupts not initialized yet, just spin */
        if (irq == -1 || in_nmi())
                return;
 
-       /* Guard against reentry. */
-       local_irq_save(flags);
+       /* Detect reentry. */
+       atomic_inc(nest_cnt);
 
-       /* If irq pending already clear it. */
-       if (xen_test_irq_pending(irq)) {
+       /* If irq pending already and no nested call clear it. */
+       if (atomic_read(nest_cnt) == 1 && xen_test_irq_pending(irq)) {
                xen_clear_irq_pending(irq);
        } else if (READ_ONCE(*byte) == val) {
                /* Block until irq becomes pending (or a spurious wakeup) */
                xen_poll_irq(irq);
        }
 
-       local_irq_restore(flags);
+       atomic_dec(nest_cnt);
 }
 
 static irqreturn_t dummy_handler(int irq, void *dev_id)
index d5368a4..a50d592 100644 (file)
@@ -1260,6 +1260,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q,
                if (ret)
                        goto cleanup;
        } else {
+               zero_fill_bio(bio);
                iov_iter_advance(iter, bio->bi_iter.bi_size);
        }
 
index 76f867e..e8b3bb9 100644 (file)
@@ -51,16 +51,12 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
        if ((sector | nr_sects) & bs_mask)
                return -EINVAL;
 
-       while (nr_sects) {
-               unsigned int req_sects = nr_sects;
-               sector_t end_sect;
-
-               if (!req_sects)
-                       goto fail;
-               if (req_sects > UINT_MAX >> 9)
-                       req_sects = UINT_MAX >> 9;
+       if (!nr_sects)
+               return -EINVAL;
 
-               end_sect = sector + req_sects;
+       while (nr_sects) {
+               unsigned int req_sects = min_t(unsigned int, nr_sects,
+                               bio_allowed_max_sectors(q));
 
                bio = blk_next_bio(bio, 0, gfp_mask);
                bio->bi_iter.bi_sector = sector;
@@ -68,8 +64,8 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
                bio_set_op_attrs(bio, op, 0);
 
                bio->bi_iter.bi_size = req_sects << 9;
+               sector += req_sects;
                nr_sects -= req_sects;
-               sector = end_sect;
 
                /*
                 * We can loop for a long time in here, if someone does
@@ -82,14 +78,6 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
 
        *biop = bio;
        return 0;
-
-fail:
-       if (bio) {
-               submit_bio_wait(bio);
-               bio_put(bio);
-       }
-       *biop = NULL;
-       return -EOPNOTSUPP;
 }
 EXPORT_SYMBOL(__blkdev_issue_discard);
 
@@ -161,7 +149,7 @@ static int __blkdev_issue_write_same(struct block_device *bdev, sector_t sector,
                return -EOPNOTSUPP;
 
        /* Ensure that max_write_same_sectors doesn't overflow bi_size */
-       max_write_same_sectors = UINT_MAX >> 9;
+       max_write_same_sectors = bio_allowed_max_sectors(q);
 
        while (nr_sects) {
                bio = blk_next_bio(bio, 1, gfp_mask);
index 6b5ad27..e7696c4 100644 (file)
@@ -46,7 +46,7 @@ static inline bool bio_will_gap(struct request_queue *q,
                bio_get_first_bvec(prev_rq->bio, &pb);
        else
                bio_get_first_bvec(prev, &pb);
-       if (pb.bv_offset)
+       if (pb.bv_offset & queue_virt_boundary(q))
                return true;
 
        /*
@@ -90,7 +90,8 @@ static struct bio *blk_bio_discard_split(struct request_queue *q,
        /* Zero-sector (unknown) and one-sector granularities are the same.  */
        granularity = max(q->limits.discard_granularity >> 9, 1U);
 
-       max_discard_sectors = min(q->limits.max_discard_sectors, UINT_MAX >> 9);
+       max_discard_sectors = min(q->limits.max_discard_sectors,
+                       bio_allowed_max_sectors(q));
        max_discard_sectors -= max_discard_sectors % granularity;
 
        if (unlikely(!max_discard_sectors)) {
index a1841b8..0089fef 100644 (file)
@@ -169,7 +169,7 @@ static inline bool biovec_phys_mergeable(struct request_queue *q,
 static inline bool __bvec_gap_to_prev(struct request_queue *q,
                struct bio_vec *bprv, unsigned int offset)
 {
-       return offset ||
+       return (offset & queue_virt_boundary(q)) ||
                ((bprv->bv_offset + bprv->bv_len) & queue_virt_boundary(q));
 }
 
@@ -396,6 +396,16 @@ static inline unsigned long blk_rq_deadline(struct request *rq)
 }
 
 /*
+ * The max size one bio can handle is UINT_MAX becasue bvec_iter.bi_size
+ * is defined as 'unsigned int', meantime it has to aligned to with logical
+ * block size which is the minimum accepted unit by hardware.
+ */
+static inline unsigned int bio_allowed_max_sectors(struct request_queue *q)
+{
+       return round_down(UINT_MAX, queue_logical_block_size(q)) >> 9;
+}
+
+/*
  * Internal io_context interface
  */
 void get_io_context(struct io_context *ioc);
index e9626bf..d6c1b10 100644 (file)
@@ -25,8 +25,12 @@ static int nfit_handle_mce(struct notifier_block *nb, unsigned long val,
        struct acpi_nfit_desc *acpi_desc;
        struct nfit_spa *nfit_spa;
 
-       /* We only care about memory errors */
-       if (!mce_is_memory_error(mce))
+       /* We only care about uncorrectable memory errors */
+       if (!mce_is_memory_error(mce) || mce_is_correctable(mce))
+               return NOTIFY_DONE;
+
+       /* Verify the address reported in the MCE is valid. */
+       if (!mce_usable_address(mce))
                return NOTIFY_DONE;
 
        /*
index 10ecb23..4b1ff5b 100644 (file)
@@ -1,14 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Renesas R-Car SATA driver
  *
  * Author: Vladimir Barinov <source@cogentembedded.com>
  * Copyright (C) 2013-2015 Cogent Embedded, Inc.
  * Copyright (C) 2013-2015 Renesas Solutions Corp.
- *
- * This program is free software; you can redistribute  it and/or modify it
- * under  the terms of  the GNU General  Public License as published by the
- * Free Software Foundation;  either version 2 of the  License, or (at your
- * option) any later version.
  */
 
 #include <linux/kernel.h>
index 56452ca..0ed4b20 100644 (file)
@@ -1919,6 +1919,7 @@ static int negotiate_mq(struct blkfront_info *info)
                              GFP_KERNEL);
        if (!info->rinfo) {
                xenbus_dev_fatal(info->xbdev, -ENOMEM, "allocating ring_info structure");
+               info->nr_rings = 0;
                return -ENOMEM;
        }
 
index ef0ca94..ff83e89 100644 (file)
@@ -210,6 +210,7 @@ static int of_fixed_factor_clk_remove(struct platform_device *pdev)
 {
        struct clk *clk = platform_get_drvdata(pdev);
 
+       of_clk_del_provider(pdev->dev.of_node);
        clk_unregister_fixed_factor(clk);
 
        return 0;
index c981159..792735d 100644 (file)
@@ -325,6 +325,7 @@ static struct clk_regmap axg_fclk_div2 = {
                .ops = &clk_regmap_gate_ops,
                .parent_names = (const char *[]){ "fclk_div2_div" },
                .num_parents = 1,
+               .flags = CLK_IS_CRITICAL,
        },
 };
 
@@ -349,6 +350,18 @@ static struct clk_regmap axg_fclk_div3 = {
                .ops = &clk_regmap_gate_ops,
                .parent_names = (const char *[]){ "fclk_div3_div" },
                .num_parents = 1,
+               /*
+                * FIXME:
+                * This clock, as fdiv2, is used by the SCPI FW and is required
+                * by the platform to operate correctly.
+                * Until the following condition are met, we need this clock to
+                * be marked as critical:
+                * a) The SCPI generic driver claims and enable all the clocks
+                *    it needs
+                * b) CCF has a clock hand-off mechanism to make the sure the
+                *    clock stays on until the proper driver comes along
+                */
+               .flags = CLK_IS_CRITICAL,
        },
 };
 
index 9309cfa..4ada966 100644 (file)
@@ -506,6 +506,18 @@ static struct clk_regmap gxbb_fclk_div3 = {
                .ops = &clk_regmap_gate_ops,
                .parent_names = (const char *[]){ "fclk_div3_div" },
                .num_parents = 1,
+               /*
+                * FIXME:
+                * This clock, as fdiv2, is used by the SCPI FW and is required
+                * by the platform to operate correctly.
+                * Until the following condition are met, we need this clock to
+                * be marked as critical:
+                * a) The SCPI generic driver claims and enable all the clocks
+                *    it needs
+                * b) CCF has a clock hand-off mechanism to make the sure the
+                *    clock stays on until the proper driver comes along
+                */
+               .flags = CLK_IS_CRITICAL,
        },
 };
 
index e4ca6a4..ef1b267 100644 (file)
@@ -265,7 +265,7 @@ static struct clk_fixed_factor cxo = {
        .div = 1,
        .hw.init = &(struct clk_init_data){
                .name = "cxo",
-               .parent_names = (const char *[]){ "xo_board" },
+               .parent_names = (const char *[]){ "xo-board" },
                .num_parents = 1,
                .ops = &clk_fixed_factor_ops,
        },
index 9c38895..d4350bb 100644 (file)
 DEFINE_RAW_SPINLOCK(i8253_lock);
 EXPORT_SYMBOL(i8253_lock);
 
+/*
+ * Handle PIT quirk in pit_shutdown() where zeroing the counter register
+ * restarts the PIT, negating the shutdown. On platforms with the quirk,
+ * platform specific code can set this to false.
+ */
+bool i8253_clear_counter_on_shutdown __ro_after_init = true;
+
 #ifdef CONFIG_CLKSRC_I8253
 /*
  * Since the PIT overflows every tick, its not very useful
@@ -109,8 +116,11 @@ static int pit_shutdown(struct clock_event_device *evt)
        raw_spin_lock(&i8253_lock);
 
        outb_p(0x30, PIT_MODE);
-       outb_p(0, PIT_CH0);
-       outb_p(0, PIT_CH0);
+
+       if (i8253_clear_counter_on_shutdown) {
+               outb_p(0, PIT_CH0);
+               outb_p(0, PIT_CH0);
+       }
 
        raw_spin_unlock(&i8253_lock);
        return 0;
index d0102cf..104b2e0 100644 (file)
@@ -151,6 +151,7 @@ extern int amdgpu_compute_multipipe;
 extern int amdgpu_gpu_recovery;
 extern int amdgpu_emu_mode;
 extern uint amdgpu_smu_memory_pool_size;
+extern uint amdgpu_dc_feature_mask;
 extern struct amdgpu_mgpu_info mgpu_info;
 
 #ifdef CONFIG_DRM_AMDGPU_SI
index 943dbf3..8de55f7 100644 (file)
@@ -127,6 +127,9 @@ int amdgpu_compute_multipipe = -1;
 int amdgpu_gpu_recovery = -1; /* auto */
 int amdgpu_emu_mode = 0;
 uint amdgpu_smu_memory_pool_size = 0;
+/* FBC (bit 0) disabled by default*/
+uint amdgpu_dc_feature_mask = 0;
+
 struct amdgpu_mgpu_info mgpu_info = {
        .mutex = __MUTEX_INITIALIZER(mgpu_info.mutex),
 };
@@ -631,6 +634,14 @@ module_param(halt_if_hws_hang, int, 0644);
 MODULE_PARM_DESC(halt_if_hws_hang, "Halt if HWS hang is detected (0 = off (default), 1 = on)");
 #endif
 
+/**
+ * DOC: dcfeaturemask (uint)
+ * Override display features enabled. See enum DC_FEATURE_MASK in drivers/gpu/drm/amd/include/amd_shared.h.
+ * The default is the current set of stable display features.
+ */
+MODULE_PARM_DESC(dcfeaturemask, "all stable DC features enabled (default))");
+module_param_named(dcfeaturemask, amdgpu_dc_feature_mask, uint, 0444);
+
 static const struct pci_device_id pciidlist[] = {
 #ifdef  CONFIG_DRM_AMDGPU_SI
        {0x1002, 0x6780, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI},
index 2d44735..d13fc4f 100644 (file)
@@ -49,6 +49,7 @@ int vega20_reg_base_init(struct amdgpu_device *adev)
                adev->reg_offset[SMUIO_HWIP][i] = (uint32_t *)(&(SMUIO_BASE.instance[i]));
                adev->reg_offset[NBIF_HWIP][i] = (uint32_t *)(&(NBIO_BASE.instance[i]));
                adev->reg_offset[THM_HWIP][i] = (uint32_t *)(&(THM_BASE.instance[i]));
+               adev->reg_offset[CLK_HWIP][i] = (uint32_t *)(&(CLK_BASE.instance[i]));
        }
        return 0;
 }
index b0df6dc..c1262f6 100644 (file)
@@ -429,6 +429,9 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
            adev->asic_type < CHIP_RAVEN)
                init_data.flags.gpu_vm_support = true;
 
+       if (amdgpu_dc_feature_mask & DC_FBC_MASK)
+               init_data.flags.fbc_support = true;
+
        /* Display Core create. */
        adev->dm.dc = dc_create(&init_data);
 
@@ -1524,13 +1527,6 @@ static int amdgpu_dm_backlight_update_status(struct backlight_device *bd)
 {
        struct amdgpu_display_manager *dm = bl_get_data(bd);
 
-       /*
-        * PWM interperts 0 as 100% rather than 0% because of HW
-        * limitation for level 0.So limiting minimum brightness level
-        * to 1.
-        */
-       if (bd->props.brightness < 1)
-               return 1;
        if (dc_link_set_backlight_level(dm->backlight_link,
                        bd->props.brightness, 0, 0))
                return 0;
@@ -2707,18 +2703,11 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
        drm_connector = &aconnector->base;
 
        if (!aconnector->dc_sink) {
-               /*
-                * Create dc_sink when necessary to MST
-                * Don't apply fake_sink to MST
-                */
-               if (aconnector->mst_port) {
-                       dm_dp_mst_dc_sink_create(drm_connector);
-                       return stream;
+               if (!aconnector->mst_port) {
+                       sink = create_fake_sink(aconnector);
+                       if (!sink)
+                               return stream;
                }
-
-               sink = create_fake_sink(aconnector);
-               if (!sink)
-                       return stream;
        } else {
                sink = aconnector->dc_sink;
        }
@@ -3308,7 +3297,7 @@ void dm_drm_plane_destroy_state(struct drm_plane *plane,
 static const struct drm_plane_funcs dm_plane_funcs = {
        .update_plane   = drm_atomic_helper_update_plane,
        .disable_plane  = drm_atomic_helper_disable_plane,
-       .destroy        = drm_plane_cleanup,
+       .destroy        = drm_primary_helper_destroy,
        .reset = dm_drm_plane_reset,
        .atomic_duplicate_state = dm_drm_plane_duplicate_state,
        .atomic_destroy_state = dm_drm_plane_destroy_state,
index 978b34a..924a38a 100644 (file)
@@ -160,8 +160,6 @@ struct amdgpu_dm_connector {
        struct mutex hpd_lock;
 
        bool fake_enable;
-
-       bool mst_connected;
 };
 
 #define to_amdgpu_dm_connector(x) container_of(x, struct amdgpu_dm_connector, base)
index 03601d7..d02c32a 100644 (file)
@@ -205,40 +205,6 @@ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
        .atomic_get_property = amdgpu_dm_connector_atomic_get_property
 };
 
-void dm_dp_mst_dc_sink_create(struct drm_connector *connector)
-{
-       struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
-       struct dc_sink *dc_sink;
-       struct dc_sink_init_data init_params = {
-                       .link = aconnector->dc_link,
-                       .sink_signal = SIGNAL_TYPE_DISPLAY_PORT_MST };
-
-       /* FIXME none of this is safe. we shouldn't touch aconnector here in
-        * atomic_check
-        */
-
-       /*
-        * TODO: Need to further figure out why ddc.algo is NULL while MST port exists
-        */
-       if (!aconnector->port || !aconnector->port->aux.ddc.algo)
-               return;
-
-       ASSERT(aconnector->edid);
-
-       dc_sink = dc_link_add_remote_sink(
-               aconnector->dc_link,
-               (uint8_t *)aconnector->edid,
-               (aconnector->edid->extensions + 1) * EDID_LENGTH,
-               &init_params);
-
-       dc_sink->priv = aconnector;
-       aconnector->dc_sink = dc_sink;
-
-       if (aconnector->dc_sink)
-               amdgpu_dm_update_freesync_caps(
-                               connector, aconnector->edid);
-}
-
 static int dm_dp_mst_get_modes(struct drm_connector *connector)
 {
        struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
@@ -319,12 +285,7 @@ dm_dp_create_fake_mst_encoder(struct amdgpu_dm_connector *connector)
        struct amdgpu_device *adev = dev->dev_private;
        struct amdgpu_encoder *amdgpu_encoder;
        struct drm_encoder *encoder;
-       const struct drm_connector_helper_funcs *connector_funcs =
-               connector->base.helper_private;
-       struct drm_encoder *enc_master =
-               connector_funcs->best_encoder(&connector->base);
 
-       DRM_DEBUG_KMS("enc master is %p\n", enc_master);
        amdgpu_encoder = kzalloc(sizeof(*amdgpu_encoder), GFP_KERNEL);
        if (!amdgpu_encoder)
                return NULL;
@@ -354,25 +315,6 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
        struct amdgpu_device *adev = dev->dev_private;
        struct amdgpu_dm_connector *aconnector;
        struct drm_connector *connector;
-       struct drm_connector_list_iter conn_iter;
-
-       drm_connector_list_iter_begin(dev, &conn_iter);
-       drm_for_each_connector_iter(connector, &conn_iter) {
-               aconnector = to_amdgpu_dm_connector(connector);
-               if (aconnector->mst_port == master
-                               && !aconnector->port) {
-                       DRM_INFO("DM_MST: reusing connector: %p [id: %d] [master: %p]\n",
-                                               aconnector, connector->base.id, aconnector->mst_port);
-
-                       aconnector->port = port;
-                       drm_connector_set_path_property(connector, pathprop);
-
-                       drm_connector_list_iter_end(&conn_iter);
-                       aconnector->mst_connected = true;
-                       return &aconnector->base;
-               }
-       }
-       drm_connector_list_iter_end(&conn_iter);
 
        aconnector = kzalloc(sizeof(*aconnector), GFP_KERNEL);
        if (!aconnector)
@@ -421,8 +363,6 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
         */
        amdgpu_dm_connector_funcs_reset(connector);
 
-       aconnector->mst_connected = true;
-
        DRM_INFO("DM_MST: added connector: %p [id: %d] [master: %p]\n",
                        aconnector, connector->base.id, aconnector->mst_port);
 
@@ -434,6 +374,9 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
 static void dm_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
                                        struct drm_connector *connector)
 {
+       struct amdgpu_dm_connector *master = container_of(mgr, struct amdgpu_dm_connector, mst_mgr);
+       struct drm_device *dev = master->base.dev;
+       struct amdgpu_device *adev = dev->dev_private;
        struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
 
        DRM_INFO("DM_MST: Disabling connector: %p [id: %d] [master: %p]\n",
@@ -447,7 +390,10 @@ static void dm_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
                aconnector->dc_sink = NULL;
        }
 
-       aconnector->mst_connected = false;
+       drm_connector_unregister(connector);
+       if (adev->mode_info.rfbdev)
+               drm_fb_helper_remove_one_connector(&adev->mode_info.rfbdev->helper, connector);
+       drm_connector_put(connector);
 }
 
 static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr)
@@ -458,18 +404,10 @@ static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr)
        drm_kms_helper_hotplug_event(dev);
 }
 
-static void dm_dp_mst_link_status_reset(struct drm_connector *connector)
-{
-       mutex_lock(&connector->dev->mode_config.mutex);
-       drm_connector_set_link_status_property(connector, DRM_MODE_LINK_STATUS_BAD);
-       mutex_unlock(&connector->dev->mode_config.mutex);
-}
-
 static void dm_dp_mst_register_connector(struct drm_connector *connector)
 {
        struct drm_device *dev = connector->dev;
        struct amdgpu_device *adev = dev->dev_private;
-       struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
 
        if (adev->mode_info.rfbdev)
                drm_fb_helper_add_one_connector(&adev->mode_info.rfbdev->helper, connector);
@@ -477,9 +415,6 @@ static void dm_dp_mst_register_connector(struct drm_connector *connector)
                DRM_ERROR("adev->mode_info.rfbdev is NULL\n");
 
        drm_connector_register(connector);
-
-       if (aconnector->mst_connected)
-               dm_dp_mst_link_status_reset(connector);
 }
 
 static const struct drm_dp_mst_topology_cbs dm_mst_cbs = {
index 8cf51da..2da851b 100644 (file)
@@ -31,6 +31,5 @@ struct amdgpu_dm_connector;
 
 void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
                                       struct amdgpu_dm_connector *aconnector);
-void dm_dp_mst_dc_sink_create(struct drm_connector *connector);
 
 #endif
index fb04a4a..5da2186 100644 (file)
@@ -1722,7 +1722,7 @@ static void write_i2c_retimer_setting(
                i2c_success = i2c_write(pipe_ctx, slave_address,
                                buffer, sizeof(buffer));
                RETIMER_REDRIVER_INFO("retimer write to slave_address = 0x%x,\
-                       offset = 0x%d, reg_val = 0x%d, i2c_success = %d\n",
+                       offset = 0x%x, reg_val = 0x%x, i2c_success = %d\n",
                        slave_address, buffer[0], buffer[1], i2c_success?1:0);
                if (!i2c_success)
                        /* Write failure */
@@ -1734,7 +1734,7 @@ static void write_i2c_retimer_setting(
                i2c_success = i2c_write(pipe_ctx, slave_address,
                                buffer, sizeof(buffer));
                RETIMER_REDRIVER_INFO("retimer write to slave_address = 0x%x,\
-                       offset = 0x%d, reg_val = 0x%d, i2c_success = %d\n",
+                       offset = 0x%x, reg_val = 0x%x, i2c_success = %d\n",
                        slave_address, buffer[0], buffer[1], i2c_success?1:0);
                if (!i2c_success)
                        /* Write failure */
index 1995271..b57fa61 100644 (file)
@@ -169,6 +169,7 @@ struct link_training_settings;
 struct dc_config {
        bool gpu_vm_support;
        bool disable_disp_pll_sharing;
+       bool fbc_support;
 };
 
 enum visual_confirm {
index b75ede5..b459867 100644 (file)
@@ -1736,7 +1736,12 @@ static void set_static_screen_control(struct pipe_ctx **pipe_ctx,
        if (events->force_trigger)
                value |= 0x1;
 
-       value |= 0x84;
+       if (num_pipes) {
+               struct dc *dc = pipe_ctx[0]->stream->ctx->dc;
+
+               if (dc->fbc_compressor)
+                       value |= 0x84;
+       }
 
        for (i = 0; i < num_pipes; i++)
                pipe_ctx[i]->stream_res.tg->funcs->
index e3624ca..7c9fd90 100644 (file)
@@ -1362,7 +1362,8 @@ static bool construct(
                pool->base.sw_i2cs[i] = NULL;
        }
 
-       dc->fbc_compressor = dce110_compressor_create(ctx);
+       if (dc->config.fbc_support)
+               dc->fbc_compressor = dce110_compressor_create(ctx);
 
        if (!underlay_create(ctx, &pool->base))
                goto res_create_fail;
index 2083c30..470d7b8 100644 (file)
@@ -133,6 +133,10 @@ enum PP_FEATURE_MASK {
        PP_AVFS_MASK = 0x40000,
 };
 
+enum DC_FEATURE_MASK {
+       DC_FBC_MASK = 0x1,
+};
+
 /**
  * struct amd_ip_funcs - general hooks for managing amdgpu IP Blocks
  */
index d2e7c0f..8eb0bb2 100644 (file)
@@ -1325,7 +1325,7 @@ struct atom_smu_info_v3_3 {
   struct   atom_common_table_header  table_header;
   uint8_t  smuip_min_ver;
   uint8_t  smuip_max_ver;
-  uint8_t  smu_rsd1;
+  uint8_t  waflclk_ss_mode;
   uint8_t  gpuclk_ss_mode;
   uint16_t sclk_ss_percentage;
   uint16_t sclk_ss_rate_10hz;
@@ -1355,7 +1355,10 @@ struct atom_smu_info_v3_3 {
   uint32_t syspll3_1_vco_freq_10khz;
   uint32_t bootup_fclk_10khz;
   uint32_t bootup_waflclk_10khz;
-  uint32_t reserved[3];
+  uint32_t smu_info_caps;
+  uint16_t waflclk_ss_percentage;    // in unit of 0.001%
+  uint16_t smuinitoffset;
+  uint32_t reserved;
 };
 
 /*
index 57143d5..99861f3 100644 (file)
@@ -120,6 +120,7 @@ static void vega20_set_default_registry_data(struct pp_hwmgr *hwmgr)
        data->registry_data.disable_auto_wattman = 1;
        data->registry_data.auto_wattman_debug = 0;
        data->registry_data.auto_wattman_sample_period = 100;
+       data->registry_data.fclk_gfxclk_ratio = 0x3F6CCCCD;
        data->registry_data.auto_wattman_threshold = 50;
        data->registry_data.gfxoff_controlled_by_driver = 1;
        data->gfxoff_allowed = false;
@@ -829,6 +830,28 @@ static int vega20_enable_all_smu_features(struct pp_hwmgr *hwmgr)
        return 0;
 }
 
+static int vega20_notify_smc_display_change(struct pp_hwmgr *hwmgr)
+{
+       struct vega20_hwmgr *data = (struct vega20_hwmgr *)(hwmgr->backend);
+
+       if (data->smu_features[GNLD_DPM_UCLK].enabled)
+               return smum_send_msg_to_smc_with_parameter(hwmgr,
+                       PPSMC_MSG_SetUclkFastSwitch,
+                       1);
+
+       return 0;
+}
+
+static int vega20_send_clock_ratio(struct pp_hwmgr *hwmgr)
+{
+       struct vega20_hwmgr *data =
+                       (struct vega20_hwmgr *)(hwmgr->backend);
+
+       return smum_send_msg_to_smc_with_parameter(hwmgr,
+                       PPSMC_MSG_SetFclkGfxClkRatio,
+                       data->registry_data.fclk_gfxclk_ratio);
+}
+
 static int vega20_disable_all_smu_features(struct pp_hwmgr *hwmgr)
 {
        struct vega20_hwmgr *data =
@@ -1532,6 +1555,16 @@ static int vega20_enable_dpm_tasks(struct pp_hwmgr *hwmgr)
                        "[EnableDPMTasks] Failed to enable all smu features!",
                        return result);
 
+       result = vega20_notify_smc_display_change(hwmgr);
+       PP_ASSERT_WITH_CODE(!result,
+                       "[EnableDPMTasks] Failed to notify smc display change!",
+                       return result);
+
+       result = vega20_send_clock_ratio(hwmgr);
+       PP_ASSERT_WITH_CODE(!result,
+                       "[EnableDPMTasks] Failed to send clock ratio!",
+                       return result);
+
        /* Initialize UVD/VCE powergating state */
        vega20_init_powergate_state(hwmgr);
 
@@ -1972,19 +2005,6 @@ static int vega20_read_sensor(struct pp_hwmgr *hwmgr, int idx,
        return ret;
 }
 
-static int vega20_notify_smc_display_change(struct pp_hwmgr *hwmgr,
-               bool has_disp)
-{
-       struct vega20_hwmgr *data = (struct vega20_hwmgr *)(hwmgr->backend);
-
-       if (data->smu_features[GNLD_DPM_UCLK].enabled)
-               return smum_send_msg_to_smc_with_parameter(hwmgr,
-                       PPSMC_MSG_SetUclkFastSwitch,
-                       has_disp ? 1 : 0);
-
-       return 0;
-}
-
 int vega20_display_clock_voltage_request(struct pp_hwmgr *hwmgr,
                struct pp_display_clock_request *clock_req)
 {
@@ -2044,13 +2064,6 @@ static int vega20_notify_smc_display_config_after_ps_adjustment(
        struct pp_display_clock_request clock_req;
        int ret = 0;
 
-       if ((hwmgr->display_config->num_display > 1) &&
-            !hwmgr->display_config->multi_monitor_in_sync &&
-            !hwmgr->display_config->nb_pstate_switch_disable)
-               vega20_notify_smc_display_change(hwmgr, false);
-       else
-               vega20_notify_smc_display_change(hwmgr, true);
-
        min_clocks.dcefClock = hwmgr->display_config->min_dcef_set_clk;
        min_clocks.dcefClockInSR = hwmgr->display_config->min_dcef_deep_sleep_set_clk;
        min_clocks.memoryClock = hwmgr->display_config->min_mem_set_clock;
index 56fe6a0..25faaa5 100644 (file)
@@ -328,6 +328,7 @@ struct vega20_registry_data {
        uint8_t   disable_auto_wattman;
        uint32_t  auto_wattman_debug;
        uint32_t  auto_wattman_sample_period;
+       uint32_t  fclk_gfxclk_ratio;
        uint8_t   auto_wattman_threshold;
        uint8_t   log_avfs_param;
        uint8_t   enable_enginess;
index 45d64a8..4f63a73 100644 (file)
 #define PPSMC_MSG_SetSystemVirtualDramAddrHigh   0x4B
 #define PPSMC_MSG_SetSystemVirtualDramAddrLow    0x4C
 #define PPSMC_MSG_WaflTest                       0x4D
-// Unused ID 0x4E to 0x50
+#define PPSMC_MSG_SetFclkGfxClkRatio             0x4E
+// Unused ID 0x4F to 0x50
 #define PPSMC_MSG_AllowGfxOff                    0x51
 #define PPSMC_MSG_DisallowGfxOff                 0x52
 #define PPSMC_MSG_GetPptLimit                    0x53
index e7c3ed6..9b47636 100644 (file)
@@ -93,7 +93,7 @@ static void etnaviv_sched_timedout_job(struct drm_sched_job *sched_job)
         * If the GPU managed to complete this jobs fence, the timout is
         * spurious. Bail out.
         */
-       if (fence_completed(gpu, submit->out_fence->seqno))
+       if (dma_fence_is_signaled(submit->out_fence))
                return;
 
        /*
index 94529aa..aef487d 100644 (file)
@@ -164,13 +164,6 @@ static u32 decon_get_frame_count(struct decon_context *ctx, bool end)
        return frm;
 }
 
-static u32 decon_get_vblank_counter(struct exynos_drm_crtc *crtc)
-{
-       struct decon_context *ctx = crtc->ctx;
-
-       return decon_get_frame_count(ctx, false);
-}
-
 static void decon_setup_trigger(struct decon_context *ctx)
 {
        if (!ctx->crtc->i80_mode && !(ctx->out_type & I80_HW_TRG))
@@ -536,7 +529,6 @@ static const struct exynos_drm_crtc_ops decon_crtc_ops = {
        .disable                = decon_disable,
        .enable_vblank          = decon_enable_vblank,
        .disable_vblank         = decon_disable_vblank,
-       .get_vblank_counter     = decon_get_vblank_counter,
        .atomic_begin           = decon_atomic_begin,
        .update_plane           = decon_update_plane,
        .disable_plane          = decon_disable_plane,
@@ -554,7 +546,6 @@ static int decon_bind(struct device *dev, struct device *master, void *data)
        int ret;
 
        ctx->drm_dev = drm_dev;
-       drm_dev->max_vblank_count = 0xffffffff;
 
        for (win = ctx->first_win; win < WINDOWS_NR; win++) {
                ctx->configs[win].pixel_formats = decon_formats;
index eea9025..2696289 100644 (file)
@@ -162,16 +162,6 @@ static void exynos_drm_crtc_disable_vblank(struct drm_crtc *crtc)
                exynos_crtc->ops->disable_vblank(exynos_crtc);
 }
 
-static u32 exynos_drm_crtc_get_vblank_counter(struct drm_crtc *crtc)
-{
-       struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
-
-       if (exynos_crtc->ops->get_vblank_counter)
-               return exynos_crtc->ops->get_vblank_counter(exynos_crtc);
-
-       return 0;
-}
-
 static const struct drm_crtc_funcs exynos_crtc_funcs = {
        .set_config     = drm_atomic_helper_set_config,
        .page_flip      = drm_atomic_helper_page_flip,
@@ -181,7 +171,6 @@ static const struct drm_crtc_funcs exynos_crtc_funcs = {
        .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
        .enable_vblank = exynos_drm_crtc_enable_vblank,
        .disable_vblank = exynos_drm_crtc_disable_vblank,
-       .get_vblank_counter = exynos_drm_crtc_get_vblank_counter,
 };
 
 struct exynos_drm_crtc *exynos_drm_crtc_create(struct drm_device *drm_dev,
index ec9604f..5e61e70 100644 (file)
@@ -135,7 +135,6 @@ struct exynos_drm_crtc_ops {
        void (*disable)(struct exynos_drm_crtc *crtc);
        int (*enable_vblank)(struct exynos_drm_crtc *crtc);
        void (*disable_vblank)(struct exynos_drm_crtc *crtc);
-       u32 (*get_vblank_counter)(struct exynos_drm_crtc *crtc);
        enum drm_mode_status (*mode_valid)(struct exynos_drm_crtc *crtc,
                const struct drm_display_mode *mode);
        bool (*mode_fixup)(struct exynos_drm_crtc *crtc,
index 07af775..d81e62a 100644 (file)
@@ -14,6 +14,7 @@
 
 #include <drm/drmP.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_mipi_dsi.h>
 #include <drm/drm_panel.h>
 #include <drm/drm_atomic_helper.h>
@@ -1474,12 +1475,12 @@ static int exynos_dsi_create_connector(struct drm_encoder *encoder)
 {
        struct exynos_dsi *dsi = encoder_to_dsi(encoder);
        struct drm_connector *connector = &dsi->connector;
+       struct drm_device *drm = encoder->dev;
        int ret;
 
        connector->polled = DRM_CONNECTOR_POLL_HPD;
 
-       ret = drm_connector_init(encoder->dev, connector,
-                                &exynos_dsi_connector_funcs,
+       ret = drm_connector_init(drm, connector, &exynos_dsi_connector_funcs,
                                 DRM_MODE_CONNECTOR_DSI);
        if (ret) {
                DRM_ERROR("Failed to initialize connector with drm\n");
@@ -1489,7 +1490,12 @@ static int exynos_dsi_create_connector(struct drm_encoder *encoder)
        connector->status = connector_status_disconnected;
        drm_connector_helper_add(connector, &exynos_dsi_connector_helper_funcs);
        drm_connector_attach_encoder(connector, encoder);
+       if (!drm->registered)
+               return 0;
 
+       connector->funcs->reset(connector);
+       drm_fb_helper_add_one_connector(drm->fb_helper, connector);
+       drm_connector_register(connector);
        return 0;
 }
 
@@ -1527,7 +1533,9 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
                }
 
                dsi->panel = of_drm_find_panel(device->dev.of_node);
-               if (dsi->panel) {
+               if (IS_ERR(dsi->panel)) {
+                       dsi->panel = NULL;
+               } else {
                        drm_panel_attach(dsi->panel, &dsi->connector);
                        dsi->connector.status = connector_status_connected;
                }
index 918dd2c..01d1822 100644 (file)
@@ -192,7 +192,7 @@ int exynos_drm_fbdev_init(struct drm_device *dev)
        struct drm_fb_helper *helper;
        int ret;
 
-       if (!dev->mode_config.num_crtc || !dev->mode_config.num_connector)
+       if (!dev->mode_config.num_crtc)
                return 0;
 
        fbdev = kzalloc(sizeof(*fbdev), GFP_KERNEL);
index 2402395..58e166e 100644 (file)
@@ -1905,7 +1905,6 @@ static struct intel_vgpu_mm *intel_vgpu_create_ggtt_mm(struct intel_vgpu *vgpu)
                vgpu_free_mm(mm);
                return ERR_PTR(-ENOMEM);
        }
-       mm->ggtt_mm.last_partial_off = -1UL;
 
        return mm;
 }
@@ -1930,7 +1929,6 @@ void _intel_vgpu_mm_release(struct kref *mm_ref)
                invalidate_ppgtt_mm(mm);
        } else {
                vfree(mm->ggtt_mm.virtual_ggtt);
-               mm->ggtt_mm.last_partial_off = -1UL;
        }
 
        vgpu_free_mm(mm);
@@ -2168,6 +2166,8 @@ static int emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off,
        struct intel_gvt_gtt_entry e, m;
        dma_addr_t dma_addr;
        int ret;
+       struct intel_gvt_partial_pte *partial_pte, *pos, *n;
+       bool partial_update = false;
 
        if (bytes != 4 && bytes != 8)
                return -EINVAL;
@@ -2178,68 +2178,57 @@ static int emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off,
        if (!vgpu_gmadr_is_valid(vgpu, gma))
                return 0;
 
-       ggtt_get_guest_entry(ggtt_mm, &e, g_gtt_index);
-
+       e.type = GTT_TYPE_GGTT_PTE;
        memcpy((void *)&e.val64 + (off & (info->gtt_entry_size - 1)), p_data,
                        bytes);
 
        /* If ggtt entry size is 8 bytes, and it's split into two 4 bytes
-        * write, we assume the two 4 bytes writes are consecutive.
-        * Otherwise, we abort and report error
+        * write, save the first 4 bytes in a list and update virtual
+        * PTE. Only update shadow PTE when the second 4 bytes comes.
         */
        if (bytes < info->gtt_entry_size) {
-               if (ggtt_mm->ggtt_mm.last_partial_off == -1UL) {
-                       /* the first partial part*/
-                       ggtt_mm->ggtt_mm.last_partial_off = off;
-                       ggtt_mm->ggtt_mm.last_partial_data = e.val64;
-                       return 0;
-               } else if ((g_gtt_index ==
-                               (ggtt_mm->ggtt_mm.last_partial_off >>
-                               info->gtt_entry_size_shift)) &&
-                       (off != ggtt_mm->ggtt_mm.last_partial_off)) {
-                       /* the second partial part */
-
-                       int last_off = ggtt_mm->ggtt_mm.last_partial_off &
-                               (info->gtt_entry_size - 1);
-
-                       memcpy((void *)&e.val64 + last_off,
-                               (void *)&ggtt_mm->ggtt_mm.last_partial_data +
-                               last_off, bytes);
-
-                       ggtt_mm->ggtt_mm.last_partial_off = -1UL;
-               } else {
-                       int last_offset;
-
-                       gvt_vgpu_err("failed to populate guest ggtt entry: abnormal ggtt entry write sequence, last_partial_off=%lx, offset=%x, bytes=%d, ggtt entry size=%d\n",
-                                       ggtt_mm->ggtt_mm.last_partial_off, off,
-                                       bytes, info->gtt_entry_size);
-
-                       /* set host ggtt entry to scratch page and clear
-                        * virtual ggtt entry as not present for last
-                        * partially write offset
-                        */
-                       last_offset = ggtt_mm->ggtt_mm.last_partial_off &
-                                       (~(info->gtt_entry_size - 1));
-
-                       ggtt_get_host_entry(ggtt_mm, &m, last_offset);
-                       ggtt_invalidate_pte(vgpu, &m);
-                       ops->set_pfn(&m, gvt->gtt.scratch_mfn);
-                       ops->clear_present(&m);
-                       ggtt_set_host_entry(ggtt_mm, &m, last_offset);
-                       ggtt_invalidate(gvt->dev_priv);
-
-                       ggtt_get_guest_entry(ggtt_mm, &e, last_offset);
-                       ops->clear_present(&e);
-                       ggtt_set_guest_entry(ggtt_mm, &e, last_offset);
-
-                       ggtt_mm->ggtt_mm.last_partial_off = off;
-                       ggtt_mm->ggtt_mm.last_partial_data = e.val64;
+               bool found = false;
+
+               list_for_each_entry_safe(pos, n,
+                               &ggtt_mm->ggtt_mm.partial_pte_list, list) {
+                       if (g_gtt_index == pos->offset >>
+                                       info->gtt_entry_size_shift) {
+                               if (off != pos->offset) {
+                                       /* the second partial part*/
+                                       int last_off = pos->offset &
+                                               (info->gtt_entry_size - 1);
+
+                                       memcpy((void *)&e.val64 + last_off,
+                                               (void *)&pos->data + last_off,
+                                               bytes);
+
+                                       list_del(&pos->list);
+                                       kfree(pos);
+                                       found = true;
+                                       break;
+                               }
+
+                               /* update of the first partial part */
+                               pos->data = e.val64;
+                               ggtt_set_guest_entry(ggtt_mm, &e, g_gtt_index);
+                               return 0;
+                       }
+               }
 
-                       return 0;
+               if (!found) {
+                       /* the first partial part */
+                       partial_pte = kzalloc(sizeof(*partial_pte), GFP_KERNEL);
+                       if (!partial_pte)
+                               return -ENOMEM;
+                       partial_pte->offset = off;
+                       partial_pte->data = e.val64;
+                       list_add_tail(&partial_pte->list,
+                               &ggtt_mm->ggtt_mm.partial_pte_list);
+                       partial_update = true;
                }
        }
 
-       if (ops->test_present(&e)) {
+       if (!partial_update && (ops->test_present(&e))) {
                gfn = ops->get_pfn(&e);
                m = e;
 
@@ -2263,16 +2252,18 @@ static int emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off,
                } else
                        ops->set_pfn(&m, dma_addr >> PAGE_SHIFT);
        } else {
-               ggtt_get_host_entry(ggtt_mm, &m, g_gtt_index);
-               ggtt_invalidate_pte(vgpu, &m);
                ops->set_pfn(&m, gvt->gtt.scratch_mfn);
                ops->clear_present(&m);
        }
 
 out:
+       ggtt_set_guest_entry(ggtt_mm, &e, g_gtt_index);
+
+       ggtt_get_host_entry(ggtt_mm, &e, g_gtt_index);
+       ggtt_invalidate_pte(vgpu, &e);
+
        ggtt_set_host_entry(ggtt_mm, &m, g_gtt_index);
        ggtt_invalidate(gvt->dev_priv);
-       ggtt_set_guest_entry(ggtt_mm, &e, g_gtt_index);
        return 0;
 }
 
@@ -2430,6 +2421,8 @@ int intel_vgpu_init_gtt(struct intel_vgpu *vgpu)
 
        intel_vgpu_reset_ggtt(vgpu, false);
 
+       INIT_LIST_HEAD(&gtt->ggtt_mm->ggtt_mm.partial_pte_list);
+
        return create_scratch_page_tree(vgpu);
 }
 
@@ -2454,6 +2447,14 @@ static void intel_vgpu_destroy_all_ppgtt_mm(struct intel_vgpu *vgpu)
 
 static void intel_vgpu_destroy_ggtt_mm(struct intel_vgpu *vgpu)
 {
+       struct intel_gvt_partial_pte *pos;
+
+       list_for_each_entry(pos,
+                       &vgpu->gtt.ggtt_mm->ggtt_mm.partial_pte_list, list) {
+               gvt_dbg_mm("partial PTE update on hold 0x%lx : 0x%llx\n",
+                       pos->offset, pos->data);
+               kfree(pos);
+       }
        intel_vgpu_destroy_mm(vgpu->gtt.ggtt_mm);
        vgpu->gtt.ggtt_mm = NULL;
 }
index 7a9b361..d8cb04c 100644 (file)
@@ -35,7 +35,6 @@
 #define _GVT_GTT_H_
 
 #define I915_GTT_PAGE_SHIFT         12
-#define I915_GTT_PAGE_MASK             (~(I915_GTT_PAGE_SIZE - 1))
 
 struct intel_vgpu_mm;
 
@@ -133,6 +132,12 @@ enum intel_gvt_mm_type {
 
 #define GVT_RING_CTX_NR_PDPS   GEN8_3LVL_PDPES
 
+struct intel_gvt_partial_pte {
+       unsigned long offset;
+       u64 data;
+       struct list_head list;
+};
+
 struct intel_vgpu_mm {
        enum intel_gvt_mm_type type;
        struct intel_vgpu *vgpu;
@@ -157,8 +162,7 @@ struct intel_vgpu_mm {
                } ppgtt_mm;
                struct {
                        void *virtual_ggtt;
-                       unsigned long last_partial_off;
-                       u64 last_partial_data;
+                       struct list_head partial_pte_list;
                } ggtt_mm;
        };
 };
index 90f50f6..aa280bb 100644 (file)
@@ -1609,7 +1609,7 @@ static int bxt_gt_disp_pwron_write(struct intel_vgpu *vgpu,
        return 0;
 }
 
-static int bxt_edp_psr_imr_iir_write(struct intel_vgpu *vgpu,
+static int edp_psr_imr_iir_write(struct intel_vgpu *vgpu,
                unsigned int offset, void *p_data, unsigned int bytes)
 {
        vgpu_vreg(vgpu, offset) = 0;
@@ -2607,6 +2607,9 @@ static int init_generic_mmio_info(struct intel_gvt *gvt)
        MMIO_DFH(_MMIO(0x1a178), D_BDW_PLUS, F_CMD_ACCESS, NULL, NULL);
        MMIO_DFH(_MMIO(0x1a17c), D_BDW_PLUS, F_CMD_ACCESS, NULL, NULL);
        MMIO_DFH(_MMIO(0x2217c), D_BDW_PLUS, F_CMD_ACCESS, NULL, NULL);
+
+       MMIO_DH(EDP_PSR_IMR, D_BDW_PLUS, NULL, edp_psr_imr_iir_write);
+       MMIO_DH(EDP_PSR_IIR, D_BDW_PLUS, NULL, edp_psr_imr_iir_write);
        return 0;
 }
 
@@ -3205,9 +3208,6 @@ static int init_bxt_mmio_info(struct intel_gvt *gvt)
        MMIO_D(HSW_TVIDEO_DIP_GCP(TRANSCODER_B), D_BXT);
        MMIO_D(HSW_TVIDEO_DIP_GCP(TRANSCODER_C), D_BXT);
 
-       MMIO_DH(EDP_PSR_IMR, D_BXT, NULL, bxt_edp_psr_imr_iir_write);
-       MMIO_DH(EDP_PSR_IIR, D_BXT, NULL, bxt_edp_psr_imr_iir_write);
-
        MMIO_D(RC6_CTX_BASE, D_BXT);
 
        MMIO_D(GEN8_PUSHBUS_CONTROL, D_BXT);
index 10e63ee..36a5147 100644 (file)
@@ -131,7 +131,7 @@ static struct engine_mmio gen9_engine_mmio_list[] __cacheline_aligned = {
        {RCS, GAMT_CHKN_BIT_REG, 0x0, false}, /* 0x4ab8 */
 
        {RCS, GEN9_GAMT_ECO_REG_RW_IA, 0x0, false}, /* 0x4ab0 */
-       {RCS, GEN9_CSFE_CHICKEN1_RCS, 0x0, false}, /* 0x20d4 */
+       {RCS, GEN9_CSFE_CHICKEN1_RCS, 0xffff, false}, /* 0x20d4 */
 
        {RCS, GEN8_GARBCNTL, 0x0, false}, /* 0xb004 */
        {RCS, GEN7_FF_THREAD_MODE, 0x0, false}, /* 0x20a0 */
index 44e2c0f..ffdbbac 100644 (file)
@@ -1175,8 +1175,6 @@ skl_dram_get_channels_info(struct drm_i915_private *dev_priv)
                return -EINVAL;
        }
 
-       dram_info->valid_dimm = true;
-
        /*
         * If any of the channel is single rank channel, worst case output
         * will be same as if single rank memory, so consider single rank
@@ -1193,8 +1191,7 @@ skl_dram_get_channels_info(struct drm_i915_private *dev_priv)
                return -EINVAL;
        }
 
-       if (ch0.is_16gb_dimm || ch1.is_16gb_dimm)
-               dram_info->is_16gb_dimm = true;
+       dram_info->is_16gb_dimm = ch0.is_16gb_dimm || ch1.is_16gb_dimm;
 
        dev_priv->dram_info.symmetric_memory = intel_is_dram_symmetric(val_ch0,
                                                                       val_ch1,
@@ -1314,7 +1311,6 @@ bxt_get_dram_info(struct drm_i915_private *dev_priv)
                return -EINVAL;
        }
 
-       dram_info->valid_dimm = true;
        dram_info->valid = true;
        return 0;
 }
@@ -1327,12 +1323,17 @@ intel_get_dram_info(struct drm_i915_private *dev_priv)
        int ret;
 
        dram_info->valid = false;
-       dram_info->valid_dimm = false;
-       dram_info->is_16gb_dimm = false;
        dram_info->rank = I915_DRAM_RANK_INVALID;
        dram_info->bandwidth_kbps = 0;
        dram_info->num_channels = 0;
 
+       /*
+        * Assume 16Gb DIMMs are present until proven otherwise.
+        * This is only used for the level 0 watermark latency
+        * w/a which does not apply to bxt/glk.
+        */
+       dram_info->is_16gb_dimm = !IS_GEN9_LP(dev_priv);
+
        if (INTEL_GEN(dev_priv) < 9 || IS_GEMINILAKE(dev_priv))
                return;
 
index 8624b4b..9102571 100644 (file)
@@ -1948,7 +1948,6 @@ struct drm_i915_private {
 
        struct dram_info {
                bool valid;
-               bool valid_dimm;
                bool is_16gb_dimm;
                u8 num_channels;
                enum dram_rank {
index 0918728..1aaccbe 100644 (file)
@@ -460,7 +460,7 @@ eb_validate_vma(struct i915_execbuffer *eb,
         * any non-page-aligned or non-canonical addresses.
         */
        if (unlikely(entry->flags & EXEC_OBJECT_PINNED &&
-                    entry->offset != gen8_canonical_addr(entry->offset & PAGE_MASK)))
+                    entry->offset != gen8_canonical_addr(entry->offset & I915_GTT_PAGE_MASK)))
                return -EINVAL;
 
        /* pad_to_size was once a reserved field, so sanitize it */
index 56c7f86..47c3025 100644 (file)
@@ -1757,7 +1757,7 @@ static void gen6_dump_ppgtt(struct i915_hw_ppgtt *base, struct seq_file *m)
                        if (i == 4)
                                continue;
 
-                       seq_printf(m, "\t\t(%03d, %04d) %08lx: ",
+                       seq_printf(m, "\t\t(%03d, %04d) %08llx: ",
                                   pde, pte,
                                   (pde * GEN6_PTES + pte) * I915_GTT_PAGE_SIZE);
                        for (i = 0; i < 4; i++) {
index 7e2af5f..2803929 100644 (file)
 #include "i915_selftest.h"
 #include "i915_timeline.h"
 
-#define I915_GTT_PAGE_SIZE_4K BIT(12)
-#define I915_GTT_PAGE_SIZE_64K BIT(16)
-#define I915_GTT_PAGE_SIZE_2M BIT(21)
+#define I915_GTT_PAGE_SIZE_4K  BIT_ULL(12)
+#define I915_GTT_PAGE_SIZE_64K BIT_ULL(16)
+#define I915_GTT_PAGE_SIZE_2M  BIT_ULL(21)
 
 #define I915_GTT_PAGE_SIZE I915_GTT_PAGE_SIZE_4K
 #define I915_GTT_MAX_PAGE_SIZE I915_GTT_PAGE_SIZE_2M
 
+#define I915_GTT_PAGE_MASK -I915_GTT_PAGE_SIZE
+
 #define I915_GTT_MIN_ALIGNMENT I915_GTT_PAGE_SIZE
 
 #define I915_FENCE_REG_NONE -1
@@ -659,20 +661,20 @@ int i915_gem_gtt_insert(struct i915_address_space *vm,
                        u64 start, u64 end, unsigned int flags);
 
 /* Flags used by pin/bind&friends. */
-#define PIN_NONBLOCK           BIT(0)
-#define PIN_MAPPABLE           BIT(1)
-#define PIN_ZONE_4G            BIT(2)
-#define PIN_NONFAULT           BIT(3)
-#define PIN_NOEVICT            BIT(4)
-
-#define PIN_MBZ                        BIT(5) /* I915_VMA_PIN_OVERFLOW */
-#define PIN_GLOBAL             BIT(6) /* I915_VMA_GLOBAL_BIND */
-#define PIN_USER               BIT(7) /* I915_VMA_LOCAL_BIND */
-#define PIN_UPDATE             BIT(8)
-
-#define PIN_HIGH               BIT(9)
-#define PIN_OFFSET_BIAS                BIT(10)
-#define PIN_OFFSET_FIXED       BIT(11)
+#define PIN_NONBLOCK           BIT_ULL(0)
+#define PIN_MAPPABLE           BIT_ULL(1)
+#define PIN_ZONE_4G            BIT_ULL(2)
+#define PIN_NONFAULT           BIT_ULL(3)
+#define PIN_NOEVICT            BIT_ULL(4)
+
+#define PIN_MBZ                        BIT_ULL(5) /* I915_VMA_PIN_OVERFLOW */
+#define PIN_GLOBAL             BIT_ULL(6) /* I915_VMA_GLOBAL_BIND */
+#define PIN_USER               BIT_ULL(7) /* I915_VMA_LOCAL_BIND */
+#define PIN_UPDATE             BIT_ULL(8)
+
+#define PIN_HIGH               BIT_ULL(9)
+#define PIN_OFFSET_BIAS                BIT_ULL(10)
+#define PIN_OFFSET_FIXED       BIT_ULL(11)
 #define PIN_OFFSET_MASK                (-I915_GTT_PAGE_SIZE)
 
 #endif
index 7c491ea..e31c27e 100644 (file)
@@ -2095,8 +2095,12 @@ enum i915_power_well_id {
 
 /* ICL PHY DFLEX registers */
 #define PORT_TX_DFLEXDPMLE1            _MMIO(0x1638C0)
-#define   DFLEXDPMLE1_DPMLETC_MASK(n)  (0xf << (4 * (n)))
-#define   DFLEXDPMLE1_DPMLETC(n, x)    ((x) << (4 * (n)))
+#define   DFLEXDPMLE1_DPMLETC_MASK(tc_port)    (0xf << (4 * (tc_port)))
+#define   DFLEXDPMLE1_DPMLETC_ML0(tc_port)     (1 << (4 * (tc_port)))
+#define   DFLEXDPMLE1_DPMLETC_ML1_0(tc_port)   (3 << (4 * (tc_port)))
+#define   DFLEXDPMLE1_DPMLETC_ML3(tc_port)     (8 << (4 * (tc_port)))
+#define   DFLEXDPMLE1_DPMLETC_ML3_2(tc_port)   (12 << (4 * (tc_port)))
+#define   DFLEXDPMLE1_DPMLETC_ML3_0(tc_port)   (15 << (4 * (tc_port)))
 
 /* BXT PHY Ref registers */
 #define _PORT_REF_DW3_A                        0x16218C
@@ -4593,12 +4597,12 @@ enum {
 
 #define  DRM_DIP_ENABLE                        (1 << 28)
 #define  PSR_VSC_BIT_7_SET             (1 << 27)
-#define  VSC_SELECT_MASK               (0x3 << 26)
-#define  VSC_SELECT_SHIFT              26
-#define  VSC_DIP_HW_HEA_DATA           (0 << 26)
-#define  VSC_DIP_HW_HEA_SW_DATA                (1 << 26)
-#define  VSC_DIP_HW_DATA_SW_HEA                (2 << 26)
-#define  VSC_DIP_SW_HEA_DATA           (3 << 26)
+#define  VSC_SELECT_MASK               (0x3 << 25)
+#define  VSC_SELECT_SHIFT              25
+#define  VSC_DIP_HW_HEA_DATA           (0 << 25)
+#define  VSC_DIP_HW_HEA_SW_DATA                (1 << 25)
+#define  VSC_DIP_HW_DATA_SW_HEA                (2 << 25)
+#define  VSC_DIP_SW_HEA_DATA           (3 << 25)
 #define  VDIP_ENABLE_PPS               (1 << 24)
 
 /* Panel power sequencing */
index 769f3f5..ee3ca2d 100644 (file)
@@ -144,6 +144,9 @@ static const struct {
 /* HDMI N/CTS table */
 #define TMDS_297M 297000
 #define TMDS_296M 296703
+#define TMDS_594M 594000
+#define TMDS_593M 593407
+
 static const struct {
        int sample_rate;
        int clock;
@@ -164,6 +167,20 @@ static const struct {
        { 176400, TMDS_297M, 18816, 247500 },
        { 192000, TMDS_296M, 23296, 281250 },
        { 192000, TMDS_297M, 20480, 247500 },
+       { 44100, TMDS_593M, 8918, 937500 },
+       { 44100, TMDS_594M, 9408, 990000 },
+       { 48000, TMDS_593M, 5824, 562500 },
+       { 48000, TMDS_594M, 6144, 594000 },
+       { 32000, TMDS_593M, 5824, 843750 },
+       { 32000, TMDS_594M, 3072, 445500 },
+       { 88200, TMDS_593M, 17836, 937500 },
+       { 88200, TMDS_594M, 18816, 990000 },
+       { 96000, TMDS_593M, 11648, 562500 },
+       { 96000, TMDS_594M, 12288, 594000 },
+       { 176400, TMDS_593M, 35672, 937500 },
+       { 176400, TMDS_594M, 37632, 990000 },
+       { 192000, TMDS_593M, 23296, 562500 },
+       { 192000, TMDS_594M, 24576, 594000 },
 };
 
 /* get AUD_CONFIG_PIXEL_CLOCK_HDMI_* value for mode */
index 29075c7..8d74276 100644 (file)
@@ -2138,16 +2138,8 @@ void intel_set_cdclk(struct drm_i915_private *dev_priv,
 static int intel_pixel_rate_to_cdclk(struct drm_i915_private *dev_priv,
                                     int pixel_rate)
 {
-       if (INTEL_GEN(dev_priv) >= 10)
+       if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))
                return DIV_ROUND_UP(pixel_rate, 2);
-       else if (IS_GEMINILAKE(dev_priv))
-               /*
-                * FIXME: Avoid using a pixel clock that is more than 99% of the cdclk
-                * as a temporary workaround. Use a higher cdclk instead. (Note that
-                * intel_compute_max_dotclk() limits the max pixel clock to 99% of max
-                * cdclk.)
-                */
-               return DIV_ROUND_UP(pixel_rate * 100, 2 * 99);
        else if (IS_GEN9(dev_priv) ||
                 IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
                return pixel_rate;
@@ -2543,14 +2535,8 @@ static int intel_compute_max_dotclk(struct drm_i915_private *dev_priv)
 {
        int max_cdclk_freq = dev_priv->max_cdclk_freq;
 
-       if (INTEL_GEN(dev_priv) >= 10)
+       if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))
                return 2 * max_cdclk_freq;
-       else if (IS_GEMINILAKE(dev_priv))
-               /*
-                * FIXME: Limiting to 99% as a temporary workaround. See
-                * intel_min_cdclk() for details.
-                */
-               return 2 * max_cdclk_freq * 99 / 100;
        else if (IS_GEN9(dev_priv) ||
                 IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
                return max_cdclk_freq;
index 9741cc4..23d8008 100644 (file)
@@ -12768,17 +12768,12 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state)
                        intel_check_cpu_fifo_underruns(dev_priv);
                        intel_check_pch_fifo_underruns(dev_priv);
 
-                       if (!new_crtc_state->active) {
-                               /*
-                                * Make sure we don't call initial_watermarks
-                                * for ILK-style watermark updates.
-                                *
-                                * No clue what this is supposed to achieve.
-                                */
-                               if (INTEL_GEN(dev_priv) >= 9)
-                                       dev_priv->display.initial_watermarks(intel_state,
-                                                                            to_intel_crtc_state(new_crtc_state));
-                       }
+                       /* FIXME unify this for all platforms */
+                       if (!new_crtc_state->active &&
+                           !HAS_GMCH_DISPLAY(dev_priv) &&
+                           dev_priv->display.initial_watermarks)
+                               dev_priv->display.initial_watermarks(intel_state,
+                                                                    to_intel_crtc_state(new_crtc_state));
                }
        }
 
@@ -14646,7 +14641,7 @@ static int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
             fb->height < SKL_MIN_YUV_420_SRC_H ||
             (fb->width % 4) != 0 || (fb->height % 4) != 0)) {
                DRM_DEBUG_KMS("src dimensions not correct for NV12\n");
-               return -EINVAL;
+               goto err;
        }
 
        for (i = 0; i < fb->format->num_planes; i++) {
index cdf1955..5d5336f 100644 (file)
@@ -297,8 +297,10 @@ void intel_lpe_audio_teardown(struct drm_i915_private *dev_priv)
        lpe_audio_platdev_destroy(dev_priv);
 
        irq_free_desc(dev_priv->lpe_audio.irq);
-}
 
+       dev_priv->lpe_audio.irq = -1;
+       dev_priv->lpe_audio.platdev = NULL;
+}
 
 /**
  * intel_lpe_audio_notify() - notify lpe audio event
index 1db9b83..245f002 100644 (file)
@@ -2881,8 +2881,7 @@ static void intel_read_wm_latency(struct drm_i915_private *dev_priv,
                 * any underrun. If not able to get Dimm info assume 16GB dimm
                 * to avoid any underrun.
                 */
-               if (!dev_priv->dram_info.valid_dimm ||
-                   dev_priv->dram_info.is_16gb_dimm)
+               if (dev_priv->dram_info.is_16gb_dimm)
                        wm[0] += 1;
 
        } else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
index 8d03f64..5c22f2c 100644 (file)
@@ -551,7 +551,7 @@ static int igt_mock_ppgtt_misaligned_dma(void *arg)
                        err = igt_check_page_sizes(vma);
 
                        if (vma->page_sizes.gtt != I915_GTT_PAGE_SIZE_4K) {
-                               pr_err("page_sizes.gtt=%u, expected %lu\n",
+                               pr_err("page_sizes.gtt=%u, expected %llu\n",
                                       vma->page_sizes.gtt, I915_GTT_PAGE_SIZE_4K);
                                err = -EINVAL;
                        }
index 8e2e269..127d815 100644 (file)
@@ -1337,7 +1337,7 @@ static int igt_gtt_reserve(void *arg)
                GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
                if (vma->node.start != total ||
                    vma->node.size != 2*I915_GTT_PAGE_SIZE) {
-                       pr_err("i915_gem_gtt_reserve (pass 1) placement failed, found (%llx + %llx), expected (%llx + %lx)\n",
+                       pr_err("i915_gem_gtt_reserve (pass 1) placement failed, found (%llx + %llx), expected (%llx + %llx)\n",
                               vma->node.start, vma->node.size,
                               total, 2*I915_GTT_PAGE_SIZE);
                        err = -EINVAL;
@@ -1386,7 +1386,7 @@ static int igt_gtt_reserve(void *arg)
                GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
                if (vma->node.start != total ||
                    vma->node.size != 2*I915_GTT_PAGE_SIZE) {
-                       pr_err("i915_gem_gtt_reserve (pass 2) placement failed, found (%llx + %llx), expected (%llx + %lx)\n",
+                       pr_err("i915_gem_gtt_reserve (pass 2) placement failed, found (%llx + %llx), expected (%llx + %llx)\n",
                               vma->node.start, vma->node.size,
                               total, 2*I915_GTT_PAGE_SIZE);
                        err = -EINVAL;
@@ -1430,7 +1430,7 @@ static int igt_gtt_reserve(void *arg)
                GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
                if (vma->node.start != offset ||
                    vma->node.size != 2*I915_GTT_PAGE_SIZE) {
-                       pr_err("i915_gem_gtt_reserve (pass 3) placement failed, found (%llx + %llx), expected (%llx + %lx)\n",
+                       pr_err("i915_gem_gtt_reserve (pass 3) placement failed, found (%llx + %llx), expected (%llx + %llx)\n",
                               vma->node.start, vma->node.size,
                               offset, 2*I915_GTT_PAGE_SIZE);
                        err = -EINVAL;
index af7dcb6..e7eb0d1 100644 (file)
@@ -75,7 +75,7 @@ static void sun4i_lvds_encoder_enable(struct drm_encoder *encoder)
 
        DRM_DEBUG_DRIVER("Enabling LVDS output\n");
 
-       if (!IS_ERR(tcon->panel)) {
+       if (tcon->panel) {
                drm_panel_prepare(tcon->panel);
                drm_panel_enable(tcon->panel);
        }
@@ -88,7 +88,7 @@ static void sun4i_lvds_encoder_disable(struct drm_encoder *encoder)
 
        DRM_DEBUG_DRIVER("Disabling LVDS output\n");
 
-       if (!IS_ERR(tcon->panel)) {
+       if (tcon->panel) {
                drm_panel_disable(tcon->panel);
                drm_panel_unprepare(tcon->panel);
        }
index bf068da..f4a2268 100644 (file)
@@ -135,7 +135,7 @@ static void sun4i_rgb_encoder_enable(struct drm_encoder *encoder)
 
        DRM_DEBUG_DRIVER("Enabling RGB output\n");
 
-       if (!IS_ERR(tcon->panel)) {
+       if (tcon->panel) {
                drm_panel_prepare(tcon->panel);
                drm_panel_enable(tcon->panel);
        }
@@ -148,7 +148,7 @@ static void sun4i_rgb_encoder_disable(struct drm_encoder *encoder)
 
        DRM_DEBUG_DRIVER("Disabling RGB output\n");
 
-       if (!IS_ERR(tcon->panel)) {
+       if (tcon->panel) {
                drm_panel_disable(tcon->panel);
                drm_panel_unprepare(tcon->panel);
        }
index c78cd35..f949287 100644 (file)
@@ -491,7 +491,8 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
        sun4i_tcon0_mode_set_common(tcon, mode);
 
        /* Set dithering if needed */
-       sun4i_tcon0_mode_set_dithering(tcon, tcon->panel->connector);
+       if (tcon->panel)
+               sun4i_tcon0_mode_set_dithering(tcon, tcon->panel->connector);
 
        /* Adjust clock delay */
        clk_delay = sun4i_tcon_get_clk_delay(mode, 0);
@@ -555,7 +556,7 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
         * Following code is a way to avoid quirks all around TCON
         * and DOTCLOCK drivers.
         */
-       if (!IS_ERR(tcon->panel)) {
+       if (tcon->panel) {
                struct drm_panel *panel = tcon->panel;
                struct drm_connector *connector = panel->connector;
                struct drm_display_info display_info = connector->display_info;
index cf2a185..a132c37 100644 (file)
@@ -380,6 +380,9 @@ int vga_switcheroo_register_audio_client(struct pci_dev *pdev,
                        mutex_unlock(&vgasr_mutex);
                        return -EINVAL;
                }
+               /* notify if GPU has been already bound */
+               if (ops->gpu_bound)
+                       ops->gpu_bound(pdev, id);
        }
        mutex_unlock(&vgasr_mutex);
 
index aec253b..3cd7229 100644 (file)
@@ -660,6 +660,20 @@ exit:
        return ret;
 }
 
+static int alps_sp_open(struct input_dev *dev)
+{
+       struct hid_device *hid = input_get_drvdata(dev);
+
+       return hid_hw_open(hid);
+}
+
+static void alps_sp_close(struct input_dev *dev)
+{
+       struct hid_device *hid = input_get_drvdata(dev);
+
+       hid_hw_close(hid);
+}
+
 static int alps_input_configured(struct hid_device *hdev, struct hid_input *hi)
 {
        struct alps_dev *data = hid_get_drvdata(hdev);
@@ -733,6 +747,10 @@ static int alps_input_configured(struct hid_device *hdev, struct hid_input *hi)
                input2->id.version = input->id.version;
                input2->dev.parent = input->dev.parent;
 
+               input_set_drvdata(input2, hdev);
+               input2->open = alps_sp_open;
+               input2->close = alps_sp_close;
+
                __set_bit(EV_KEY, input2->evbit);
                data->sp_btn_cnt = (data->sp_btn_info & 0x0F);
                for (i = 0; i < data->sp_btn_cnt; i++)
index dc6d647..a1fa2fc 100644 (file)
@@ -359,6 +359,9 @@ static bool asus_kbd_wmi_led_control_present(struct hid_device *hdev)
        u32 value;
        int ret;
 
+       if (!IS_ENABLED(CONFIG_ASUS_WMI))
+               return false;
+
        ret = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS2,
                                       ASUS_WMI_DEVID_KBD_BACKLIGHT, 0, &value);
        hid_dbg(hdev, "WMI backlight check: rc %d value %x", ret, value);
index f63489c..c0d6689 100644 (file)
 #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3003                0x3003
 #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008                0x3008
 
+#define I2C_VENDOR_ID_RAYDIUM          0x2386
+#define I2C_PRODUCT_ID_RAYDIUM_4B33    0x4b33
+
 #define USB_VENDOR_ID_RAZER            0x1532
 #define USB_DEVICE_ID_RAZER_BLADE_14   0x011D
 
index 52c3b01..8237dd8 100644 (file)
@@ -107,7 +107,6 @@ static const struct hid_device_id hid_quirks[] = {
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C05A), HID_QUIRK_ALWAYS_POLL },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C06A), HID_QUIRK_ALWAYS_POLL },
        { HID_USB_DEVICE(USB_VENDOR_ID_MCS, USB_DEVICE_ID_MCS_GAMEPADBLOCK), HID_QUIRK_MULTI_INPUT },
-       { HID_USB_DEVICE(USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS), HID_QUIRK_NOGET },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER), HID_QUIRK_NO_INIT_REPORTS },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE_PRO_2), HID_QUIRK_NO_INIT_REPORTS },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2), HID_QUIRK_NO_INIT_REPORTS },
index 4aab96c..3cde7c1 100644 (file)
@@ -49,6 +49,7 @@
 #define I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV       BIT(0)
 #define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET       BIT(1)
 #define I2C_HID_QUIRK_NO_RUNTIME_PM            BIT(2)
+#define I2C_HID_QUIRK_DELAY_AFTER_SLEEP                BIT(3)
 
 /* flags */
 #define I2C_HID_STARTED                0
@@ -158,6 +159,8 @@ struct i2c_hid {
 
        bool                    irq_wake_enabled;
        struct mutex            reset_lock;
+
+       unsigned long           sleep_delay;
 };
 
 static const struct i2c_hid_quirks {
@@ -172,6 +175,8 @@ static const struct i2c_hid_quirks {
        { I2C_VENDOR_ID_HANTICK, I2C_PRODUCT_ID_HANTICK_5288,
                I2C_HID_QUIRK_NO_IRQ_AFTER_RESET |
                I2C_HID_QUIRK_NO_RUNTIME_PM },
+       { I2C_VENDOR_ID_RAYDIUM, I2C_PRODUCT_ID_RAYDIUM_4B33,
+               I2C_HID_QUIRK_DELAY_AFTER_SLEEP },
        { 0, 0 }
 };
 
@@ -387,6 +392,7 @@ static int i2c_hid_set_power(struct i2c_client *client, int power_state)
 {
        struct i2c_hid *ihid = i2c_get_clientdata(client);
        int ret;
+       unsigned long now, delay;
 
        i2c_hid_dbg(ihid, "%s\n", __func__);
 
@@ -404,9 +410,22 @@ static int i2c_hid_set_power(struct i2c_client *client, int power_state)
                        goto set_pwr_exit;
        }
 
+       if (ihid->quirks & I2C_HID_QUIRK_DELAY_AFTER_SLEEP &&
+           power_state == I2C_HID_PWR_ON) {
+               now = jiffies;
+               if (time_after(ihid->sleep_delay, now)) {
+                       delay = jiffies_to_usecs(ihid->sleep_delay - now);
+                       usleep_range(delay, delay + 1);
+               }
+       }
+
        ret = __i2c_hid_command(client, &hid_set_power_cmd, power_state,
                0, NULL, 0, NULL, 0);
 
+       if (ihid->quirks & I2C_HID_QUIRK_DELAY_AFTER_SLEEP &&
+           power_state == I2C_HID_PWR_SLEEP)
+               ihid->sleep_delay = jiffies + msecs_to_jiffies(20);
+
        if (ret)
                dev_err(&client->dev, "failed to change power setting.\n");
 
index cac262a..89f2976 100644 (file)
@@ -331,6 +331,14 @@ static const struct dmi_system_id i2c_hid_dmi_desc_override_table[] = {
                .driver_data = (void *)&sipodev_desc
        },
        {
+               .ident = "Direkt-Tek DTLAPY133-1",
+               .matches = {
+                       DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Direkt-Tek"),
+                       DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "DTLAPY133-1"),
+               },
+               .driver_data = (void *)&sipodev_desc
+       },
+       {
                .ident = "Mediacom Flexbook Edge 11",
                .matches = {
                        DMI_EXACT_MATCH(DMI_SYS_VENDOR, "MEDIACOM"),
index 23872d0..a746017 100644 (file)
@@ -512,14 +512,24 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd,
                        if (cmd == HIDIOCGCOLLECTIONINDEX) {
                                if (uref->usage_index >= field->maxusage)
                                        goto inval;
+                               uref->usage_index =
+                                       array_index_nospec(uref->usage_index,
+                                                          field->maxusage);
                        } else if (uref->usage_index >= field->report_count)
                                goto inval;
                }
 
-               if ((cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) &&
-                   (uref_multi->num_values > HID_MAX_MULTI_USAGES ||
-                    uref->usage_index + uref_multi->num_values > field->report_count))
-                       goto inval;
+               if (cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) {
+                       if (uref_multi->num_values > HID_MAX_MULTI_USAGES ||
+                           uref->usage_index + uref_multi->num_values >
+                           field->report_count)
+                               goto inval;
+
+                       uref->usage_index =
+                               array_index_nospec(uref->usage_index,
+                                                  field->report_count -
+                                                  uref_multi->num_values);
+               }
 
                switch (cmd) {
                case HIDIOCGUSAGE:
index 975c951..84f61ce 100644 (file)
@@ -649,8 +649,10 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
                                if (info[i]->config[j] & HWMON_T_INPUT) {
                                        err = hwmon_thermal_add_sensor(dev,
                                                                hwdev, j);
-                                       if (err)
-                                               goto free_device;
+                                       if (err) {
+                                               device_unregister(hdev);
+                                               goto ida_remove;
+                                       }
                                }
                        }
                }
@@ -658,8 +660,6 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,
 
        return hdev;
 
-free_device:
-       device_unregister(hdev);
 free_hwmon:
        kfree(hwdev);
 ida_remove:
index 0ccca87..293dd1c 100644 (file)
@@ -181,7 +181,7 @@ static ssize_t show_label(struct device *dev, struct device_attribute *devattr,
        return sprintf(buf, "%s\n", sdata->label);
 }
 
-static int __init get_logical_cpu(int hwcpu)
+static int get_logical_cpu(int hwcpu)
 {
        int cpu;
 
@@ -192,9 +192,8 @@ static int __init get_logical_cpu(int hwcpu)
        return -ENOENT;
 }
 
-static void __init make_sensor_label(struct device_node *np,
-                                    struct sensor_data *sdata,
-                                    const char *label)
+static void make_sensor_label(struct device_node *np,
+                             struct sensor_data *sdata, const char *label)
 {
        u32 id;
        size_t n;
index 56ccb1e..f2c6819 100644 (file)
@@ -224,6 +224,15 @@ config I2C_NFORCE2_S4985
          This driver can also be built as a module.  If so, the module
          will be called i2c-nforce2-s4985.
 
+config I2C_NVIDIA_GPU
+       tristate "NVIDIA GPU I2C controller"
+       depends on PCI
+       help
+         If you say yes to this option, support will be included for the
+         NVIDIA GPU I2C controller which is used to communicate with the GPU's
+         Type-C controller. This driver can also be built as a module called
+         i2c-nvidia-gpu.
+
 config I2C_SIS5595
        tristate "SiS 5595"
        depends on PCI
@@ -752,7 +761,7 @@ config I2C_OCORES
 
 config I2C_OMAP
        tristate "OMAP I2C adapter"
-       depends on ARCH_OMAP
+       depends on ARCH_OMAP || ARCH_K3
        default y if MACH_OMAP_H3 || MACH_OMAP_OSK
        help
          If you say yes to this option, support will be included for the
index 18b26af..5f0cb69 100644 (file)
@@ -19,6 +19,7 @@ obj-$(CONFIG_I2C_ISCH)                += i2c-isch.o
 obj-$(CONFIG_I2C_ISMT)         += i2c-ismt.o
 obj-$(CONFIG_I2C_NFORCE2)      += i2c-nforce2.o
 obj-$(CONFIG_I2C_NFORCE2_S4985)        += i2c-nforce2-s4985.o
+obj-$(CONFIG_I2C_NVIDIA_GPU)   += i2c-nvidia-gpu.o
 obj-$(CONFIG_I2C_PIIX4)                += i2c-piix4.o
 obj-$(CONFIG_I2C_SIS5595)      += i2c-sis5595.o
 obj-$(CONFIG_I2C_SIS630)       += i2c-sis630.o
diff --git a/drivers/i2c/busses/i2c-nvidia-gpu.c b/drivers/i2c/busses/i2c-nvidia-gpu.c
new file mode 100644 (file)
index 0000000..8822357
--- /dev/null
@@ -0,0 +1,368 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Nvidia GPU I2C controller Driver
+ *
+ * Copyright (C) 2018 NVIDIA Corporation. All rights reserved.
+ * Author: Ajay Gupta <ajayg@nvidia.com>
+ */
+#include <linux/delay.h>
+#include <linux/i2c.h>
+#include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/platform_device.h>
+#include <linux/pm.h>
+#include <linux/pm_runtime.h>
+
+#include <asm/unaligned.h>
+
+/* I2C definitions */
+#define I2C_MST_CNTL                           0x00
+#define I2C_MST_CNTL_GEN_START                 BIT(0)
+#define I2C_MST_CNTL_GEN_STOP                  BIT(1)
+#define I2C_MST_CNTL_CMD_READ                  (1 << 2)
+#define I2C_MST_CNTL_CMD_WRITE                 (2 << 2)
+#define I2C_MST_CNTL_BURST_SIZE_SHIFT          6
+#define I2C_MST_CNTL_GEN_NACK                  BIT(28)
+#define I2C_MST_CNTL_STATUS                    GENMASK(30, 29)
+#define I2C_MST_CNTL_STATUS_OKAY               (0 << 29)
+#define I2C_MST_CNTL_STATUS_NO_ACK             (1 << 29)
+#define I2C_MST_CNTL_STATUS_TIMEOUT            (2 << 29)
+#define I2C_MST_CNTL_STATUS_BUS_BUSY           (3 << 29)
+#define I2C_MST_CNTL_CYCLE_TRIGGER             BIT(31)
+
+#define I2C_MST_ADDR                           0x04
+
+#define I2C_MST_I2C0_TIMING                            0x08
+#define I2C_MST_I2C0_TIMING_SCL_PERIOD_100KHZ          0x10e
+#define I2C_MST_I2C0_TIMING_TIMEOUT_CLK_CNT            16
+#define I2C_MST_I2C0_TIMING_TIMEOUT_CLK_CNT_MAX                255
+#define I2C_MST_I2C0_TIMING_TIMEOUT_CHECK              BIT(24)
+
+#define I2C_MST_DATA                                   0x0c
+
+#define I2C_MST_HYBRID_PADCTL                          0x20
+#define I2C_MST_HYBRID_PADCTL_MODE_I2C                 BIT(0)
+#define I2C_MST_HYBRID_PADCTL_I2C_SCL_INPUT_RCV                BIT(14)
+#define I2C_MST_HYBRID_PADCTL_I2C_SDA_INPUT_RCV                BIT(15)
+
+struct gpu_i2c_dev {
+       struct device *dev;
+       void __iomem *regs;
+       struct i2c_adapter adapter;
+       struct i2c_board_info *gpu_ccgx_ucsi;
+};
+
+static void gpu_enable_i2c_bus(struct gpu_i2c_dev *i2cd)
+{
+       u32 val;
+
+       /* enable I2C */
+       val = readl(i2cd->regs + I2C_MST_HYBRID_PADCTL);
+       val |= I2C_MST_HYBRID_PADCTL_MODE_I2C |
+               I2C_MST_HYBRID_PADCTL_I2C_SCL_INPUT_RCV |
+               I2C_MST_HYBRID_PADCTL_I2C_SDA_INPUT_RCV;
+       writel(val, i2cd->regs + I2C_MST_HYBRID_PADCTL);
+
+       /* enable 100KHZ mode */
+       val = I2C_MST_I2C0_TIMING_SCL_PERIOD_100KHZ;
+       val |= (I2C_MST_I2C0_TIMING_TIMEOUT_CLK_CNT_MAX
+           << I2C_MST_I2C0_TIMING_TIMEOUT_CLK_CNT);
+       val |= I2C_MST_I2C0_TIMING_TIMEOUT_CHECK;
+       writel(val, i2cd->regs + I2C_MST_I2C0_TIMING);
+}
+
+static int gpu_i2c_check_status(struct gpu_i2c_dev *i2cd)
+{
+       unsigned long target = jiffies + msecs_to_jiffies(1000);
+       u32 val;
+
+       do {
+               val = readl(i2cd->regs + I2C_MST_CNTL);
+               if (!(val & I2C_MST_CNTL_CYCLE_TRIGGER))
+                       break;
+               if ((val & I2C_MST_CNTL_STATUS) !=
+                               I2C_MST_CNTL_STATUS_BUS_BUSY)
+                       break;
+               usleep_range(500, 600);
+       } while (time_is_after_jiffies(target));
+
+       if (time_is_before_jiffies(target)) {
+               dev_err(i2cd->dev, "i2c timeout error %x\n", val);
+               return -ETIME;
+       }
+
+       val = readl(i2cd->regs + I2C_MST_CNTL);
+       switch (val & I2C_MST_CNTL_STATUS) {
+       case I2C_MST_CNTL_STATUS_OKAY:
+               return 0;
+       case I2C_MST_CNTL_STATUS_NO_ACK:
+               return -EIO;
+       case I2C_MST_CNTL_STATUS_TIMEOUT:
+               return -ETIME;
+       default:
+               return 0;
+       }
+}
+
+static int gpu_i2c_read(struct gpu_i2c_dev *i2cd, u8 *data, u16 len)
+{
+       int status;
+       u32 val;
+
+       val = I2C_MST_CNTL_GEN_START | I2C_MST_CNTL_CMD_READ |
+               (len << I2C_MST_CNTL_BURST_SIZE_SHIFT) |
+               I2C_MST_CNTL_CYCLE_TRIGGER | I2C_MST_CNTL_GEN_NACK;
+       writel(val, i2cd->regs + I2C_MST_CNTL);
+
+       status = gpu_i2c_check_status(i2cd);
+       if (status < 0)
+               return status;
+
+       val = readl(i2cd->regs + I2C_MST_DATA);
+       switch (len) {
+       case 1:
+               data[0] = val;
+               break;
+       case 2:
+               put_unaligned_be16(val, data);
+               break;
+       case 3:
+               put_unaligned_be16(val >> 8, data);
+               data[2] = val;
+               break;
+       case 4:
+               put_unaligned_be32(val, data);
+               break;
+       default:
+               break;
+       }
+       return status;
+}
+
+static int gpu_i2c_start(struct gpu_i2c_dev *i2cd)
+{
+       writel(I2C_MST_CNTL_GEN_START, i2cd->regs + I2C_MST_CNTL);
+       return gpu_i2c_check_status(i2cd);
+}
+
+static int gpu_i2c_stop(struct gpu_i2c_dev *i2cd)
+{
+       writel(I2C_MST_CNTL_GEN_STOP, i2cd->regs + I2C_MST_CNTL);
+       return gpu_i2c_check_status(i2cd);
+}
+
+static int gpu_i2c_write(struct gpu_i2c_dev *i2cd, u8 data)
+{
+       u32 val;
+
+       writel(data, i2cd->regs + I2C_MST_DATA);
+
+       val = I2C_MST_CNTL_CMD_WRITE | (1 << I2C_MST_CNTL_BURST_SIZE_SHIFT);
+       writel(val, i2cd->regs + I2C_MST_CNTL);
+
+       return gpu_i2c_check_status(i2cd);
+}
+
+static int gpu_i2c_master_xfer(struct i2c_adapter *adap,
+                              struct i2c_msg *msgs, int num)
+{
+       struct gpu_i2c_dev *i2cd = i2c_get_adapdata(adap);
+       int status, status2;
+       int i, j;
+
+       /*
+        * The controller supports maximum 4 byte read due to known
+        * limitation of sending STOP after every read.
+        */
+       for (i = 0; i < num; i++) {
+               if (msgs[i].flags & I2C_M_RD) {
+                       /* program client address before starting read */
+                       writel(msgs[i].addr, i2cd->regs + I2C_MST_ADDR);
+                       /* gpu_i2c_read has implicit start */
+                       status = gpu_i2c_read(i2cd, msgs[i].buf, msgs[i].len);
+                       if (status < 0)
+                               goto stop;
+               } else {
+                       u8 addr = i2c_8bit_addr_from_msg(msgs + i);
+
+                       status = gpu_i2c_start(i2cd);
+                       if (status < 0) {
+                               if (i == 0)
+                                       return status;
+                               goto stop;
+                       }
+
+                       status = gpu_i2c_write(i2cd, addr);
+                       if (status < 0)
+                               goto stop;
+
+                       for (j = 0; j < msgs[i].len; j++) {
+                               status = gpu_i2c_write(i2cd, msgs[i].buf[j]);
+                               if (status < 0)
+                                       goto stop;
+                       }
+               }
+       }
+       status = gpu_i2c_stop(i2cd);
+       if (status < 0)
+               return status;
+
+       return i;
+stop:
+       status2 = gpu_i2c_stop(i2cd);
+       if (status2 < 0)
+               dev_err(i2cd->dev, "i2c stop failed %d\n", status2);
+       return status;
+}
+
+static const struct i2c_adapter_quirks gpu_i2c_quirks = {
+       .max_read_len = 4,
+       .flags = I2C_AQ_COMB_WRITE_THEN_READ,
+};
+
+static u32 gpu_i2c_functionality(struct i2c_adapter *adap)
+{
+       return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
+}
+
+static const struct i2c_algorithm gpu_i2c_algorithm = {
+       .master_xfer    = gpu_i2c_master_xfer,
+       .functionality  = gpu_i2c_functionality,
+};
+
+/*
+ * This driver is for Nvidia GPU cards with USB Type-C interface.
+ * We want to identify the cards using vendor ID and class code only
+ * to avoid dependency of adding product id for any new card which
+ * requires this driver.
+ * Currently there is no class code defined for UCSI device over PCI
+ * so using UNKNOWN class for now and it will be updated when UCSI
+ * over PCI gets a class code.
+ * There is no other NVIDIA cards with UNKNOWN class code. Even if the
+ * driver gets loaded for an undesired card then eventually i2c_read()
+ * (initiated from UCSI i2c_client) will timeout or UCSI commands will
+ * timeout.
+ */
+#define PCI_CLASS_SERIAL_UNKNOWN       0x0c80
+static const struct pci_device_id gpu_i2c_ids[] = {
+       { PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+               PCI_CLASS_SERIAL_UNKNOWN << 8, 0xffffff00},
+       { }
+};
+MODULE_DEVICE_TABLE(pci, gpu_i2c_ids);
+
+static int gpu_populate_client(struct gpu_i2c_dev *i2cd, int irq)
+{
+       struct i2c_client *ccgx_client;
+
+       i2cd->gpu_ccgx_ucsi = devm_kzalloc(i2cd->dev,
+                                          sizeof(*i2cd->gpu_ccgx_ucsi),
+                                          GFP_KERNEL);
+       if (!i2cd->gpu_ccgx_ucsi)
+               return -ENOMEM;
+
+       strlcpy(i2cd->gpu_ccgx_ucsi->type, "ccgx-ucsi",
+               sizeof(i2cd->gpu_ccgx_ucsi->type));
+       i2cd->gpu_ccgx_ucsi->addr = 0x8;
+       i2cd->gpu_ccgx_ucsi->irq = irq;
+       ccgx_client = i2c_new_device(&i2cd->adapter, i2cd->gpu_ccgx_ucsi);
+       if (!ccgx_client)
+               return -ENODEV;
+
+       return 0;
+}
+
+static int gpu_i2c_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+{
+       struct gpu_i2c_dev *i2cd;
+       int status;
+
+       i2cd = devm_kzalloc(&pdev->dev, sizeof(*i2cd), GFP_KERNEL);
+       if (!i2cd)
+               return -ENOMEM;
+
+       i2cd->dev = &pdev->dev;
+       dev_set_drvdata(&pdev->dev, i2cd);
+
+       status = pcim_enable_device(pdev);
+       if (status < 0) {
+               dev_err(&pdev->dev, "pcim_enable_device failed %d\n", status);
+               return status;
+       }
+
+       pci_set_master(pdev);
+
+       i2cd->regs = pcim_iomap(pdev, 0, 0);
+       if (!i2cd->regs) {
+               dev_err(&pdev->dev, "pcim_iomap failed\n");
+               return -ENOMEM;
+       }
+
+       status = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI);
+       if (status < 0) {
+               dev_err(&pdev->dev, "pci_alloc_irq_vectors err %d\n", status);
+               return status;
+       }
+
+       gpu_enable_i2c_bus(i2cd);
+
+       i2c_set_adapdata(&i2cd->adapter, i2cd);
+       i2cd->adapter.owner = THIS_MODULE;
+       strlcpy(i2cd->adapter.name, "NVIDIA GPU I2C adapter",
+               sizeof(i2cd->adapter.name));
+       i2cd->adapter.algo = &gpu_i2c_algorithm;
+       i2cd->adapter.quirks = &gpu_i2c_quirks;
+       i2cd->adapter.dev.parent = &pdev->dev;
+       status = i2c_add_adapter(&i2cd->adapter);
+       if (status < 0)
+               goto free_irq_vectors;
+
+       status = gpu_populate_client(i2cd, pdev->irq);
+       if (status < 0) {
+               dev_err(&pdev->dev, "gpu_populate_client failed %d\n", status);
+               goto del_adapter;
+       }
+
+       return 0;
+
+del_adapter:
+       i2c_del_adapter(&i2cd->adapter);
+free_irq_vectors:
+       pci_free_irq_vectors(pdev);
+       return status;
+}
+
+static void gpu_i2c_remove(struct pci_dev *pdev)
+{
+       struct gpu_i2c_dev *i2cd = dev_get_drvdata(&pdev->dev);
+
+       i2c_del_adapter(&i2cd->adapter);
+       pci_free_irq_vectors(pdev);
+}
+
+static int gpu_i2c_resume(struct device *dev)
+{
+       struct gpu_i2c_dev *i2cd = dev_get_drvdata(dev);
+
+       gpu_enable_i2c_bus(i2cd);
+       return 0;
+}
+
+static UNIVERSAL_DEV_PM_OPS(gpu_i2c_driver_pm, NULL, gpu_i2c_resume, NULL);
+
+static struct pci_driver gpu_i2c_driver = {
+       .name           = "nvidia-gpu",
+       .id_table       = gpu_i2c_ids,
+       .probe          = gpu_i2c_probe,
+       .remove         = gpu_i2c_remove,
+       .driver         = {
+               .pm     = &gpu_i2c_driver_pm,
+       },
+};
+
+module_pci_driver(gpu_i2c_driver);
+
+MODULE_AUTHOR("Ajay Gupta <ajayg@nvidia.com>");
+MODULE_DESCRIPTION("Nvidia GPU I2C controller Driver");
+MODULE_LICENSE("GPL v2");
index 527f55c..db075bc 100644 (file)
@@ -571,18 +571,19 @@ static int geni_i2c_probe(struct platform_device *pdev)
 
        dev_dbg(&pdev->dev, "i2c fifo/se-dma mode. fifo depth:%d\n", tx_depth);
 
-       ret = i2c_add_adapter(&gi2c->adap);
-       if (ret) {
-               dev_err(&pdev->dev, "Error adding i2c adapter %d\n", ret);
-               return ret;
-       }
-
        gi2c->suspended = 1;
        pm_runtime_set_suspended(gi2c->se.dev);
        pm_runtime_set_autosuspend_delay(gi2c->se.dev, I2C_AUTO_SUSPEND_DELAY);
        pm_runtime_use_autosuspend(gi2c->se.dev);
        pm_runtime_enable(gi2c->se.dev);
 
+       ret = i2c_add_adapter(&gi2c->adap);
+       if (ret) {
+               dev_err(&pdev->dev, "Error adding i2c adapter %d\n", ret);
+               pm_runtime_disable(gi2c->se.dev);
+               return ret;
+       }
+
        return 0;
 }
 
@@ -590,8 +591,8 @@ static int geni_i2c_remove(struct platform_device *pdev)
 {
        struct geni_i2c_dev *gi2c = platform_get_drvdata(pdev);
 
-       pm_runtime_disable(gi2c->se.dev);
        i2c_del_adapter(&gi2c->adap);
+       pm_runtime_disable(gi2c->se.dev);
        return 0;
 }
 
index ce7acd1..1870cf8 100644 (file)
@@ -75,8 +75,6 @@ static void pattern_trig_timer_function(struct timer_list *t)
 {
        struct pattern_trig_data *data = from_timer(data, t, timer);
 
-       mutex_lock(&data->lock);
-
        for (;;) {
                if (!data->is_indefinite && !data->repeat)
                        break;
@@ -87,9 +85,10 @@ static void pattern_trig_timer_function(struct timer_list *t)
                                           data->curr->brightness);
                        mod_timer(&data->timer,
                                  jiffies + msecs_to_jiffies(data->curr->delta_t));
-
-                       /* Skip the tuple with zero duration */
-                       pattern_trig_update_patterns(data);
+                       if (!data->next->delta_t) {
+                               /* Skip the tuple with zero duration */
+                               pattern_trig_update_patterns(data);
+                       }
                        /* Select next tuple */
                        pattern_trig_update_patterns(data);
                } else {
@@ -116,8 +115,6 @@ static void pattern_trig_timer_function(struct timer_list *t)
 
                break;
        }
-
-       mutex_unlock(&data->lock);
 }
 
 static int pattern_trig_start_pattern(struct led_classdev *led_cdev)
@@ -176,14 +173,10 @@ static ssize_t repeat_store(struct device *dev, struct device_attribute *attr,
        if (res < -1 || res == 0)
                return -EINVAL;
 
-       /*
-        * Clear previous patterns' performence firstly, and remove the timer
-        * without mutex lock to avoid dead lock.
-        */
-       del_timer_sync(&data->timer);
-
        mutex_lock(&data->lock);
 
+       del_timer_sync(&data->timer);
+
        if (data->is_hw_pattern)
                led_cdev->pattern_clear(led_cdev);
 
@@ -234,14 +227,10 @@ static ssize_t pattern_trig_store_patterns(struct led_classdev *led_cdev,
        struct pattern_trig_data *data = led_cdev->trigger_data;
        int ccount, cr, offset = 0, err = 0;
 
-       /*
-        * Clear previous patterns' performence firstly, and remove the timer
-        * without mutex lock to avoid dead lock.
-        */
-       del_timer_sync(&data->timer);
-
        mutex_lock(&data->lock);
 
+       del_timer_sync(&data->timer);
+
        if (data->is_hw_pattern)
                led_cdev->pattern_clear(led_cdev);
 
index e514d57..aa98342 100644 (file)
@@ -207,7 +207,7 @@ comment "Disk-On-Chip Device Drivers"
 config MTD_DOCG3
        tristate "M-Systems Disk-On-Chip G3"
        select BCH
-       select BCH_CONST_PARAMS
+       select BCH_CONST_PARAMS if !MTD_NAND_BCH
        select BITREVERSE
        help
          This provides an MTD device driver for the M-Systems DiskOnChip
index 784c6e1..fd5fe12 100644 (file)
@@ -221,7 +221,14 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
                info->mtd = info->subdev[0].mtd;
                ret = 0;
        } else if (info->num_subdev > 1) {
-               struct mtd_info *cdev[nr];
+               struct mtd_info **cdev;
+
+               cdev = kmalloc_array(nr, sizeof(*cdev), GFP_KERNEL);
+               if (!cdev) {
+                       ret = -ENOMEM;
+                       goto err;
+               }
+
                /*
                 * We detected multiple devices.  Concatenate them together.
                 */
@@ -230,6 +237,7 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
 
                info->mtd = mtd_concat_create(cdev, info->num_subdev,
                                              plat->name);
+               kfree(cdev);
                if (info->mtd == NULL) {
                        ret = -ENXIO;
                        goto err;
index 05bd077..71050a0 100644 (file)
@@ -590,7 +590,6 @@ retry:
 
 /**
  * panic_nand_wait - [GENERIC] wait until the command is done
- * @mtd: MTD device structure
  * @chip: NAND chip structure
  * @timeo: timeout
  *
index e24db81..d846428 100644 (file)
@@ -996,7 +996,7 @@ static int cqspi_direct_read_execute(struct spi_nor *nor, u_char *buf,
 err_unmap:
        dma_unmap_single(nor->dev, dma_dst, len, DMA_FROM_DEVICE);
 
-       return 0;
+       return ret;
 }
 
 static ssize_t cqspi_read(struct spi_nor *nor, loff_t from,
index 9407ca5..3e54e31 100644 (file)
@@ -3250,12 +3250,14 @@ static int spi_nor_init_params(struct spi_nor *nor,
                memcpy(&sfdp_params, params, sizeof(sfdp_params));
                memcpy(&prev_map, &nor->erase_map, sizeof(prev_map));
 
-               if (spi_nor_parse_sfdp(nor, &sfdp_params))
+               if (spi_nor_parse_sfdp(nor, &sfdp_params)) {
+                       nor->addr_width = 0;
                        /* restore previous erase map */
                        memcpy(&nor->erase_map, &prev_map,
                               sizeof(nor->erase_map));
-               else
+               } else {
                        memcpy(params, &sfdp_params, sizeof(*params));
+               }
        }
 
        return 0;
index ffa37ad..333387f 100644 (file)
@@ -3112,13 +3112,13 @@ static int bond_slave_netdev_event(unsigned long event,
        case NETDEV_CHANGE:
                /* For 802.3ad mode only:
                 * Getting invalid Speed/Duplex values here will put slave
-                * in weird state. So mark it as link-down for the time
+                * in weird state. So mark it as link-fail for the time
                 * being and let link-monitoring (miimon) set it right when
                 * correct speeds/duplex are available.
                 */
                if (bond_update_speed_duplex(slave) &&
                    BOND_MODE(bond) == BOND_MODE_8023AD)
-                       slave->link = BOND_LINK_DOWN;
+                       slave->link = BOND_LINK_FAIL;
 
                if (BOND_MODE(bond) == BOND_MODE_8023AD)
                        bond_3ad_adapter_speed_duplex_changed(slave);
index 54e0ca6..86b6464 100644 (file)
@@ -1117,11 +1117,6 @@ static int ksz_switch_init(struct ksz_device *dev)
 {
        int i;
 
-       mutex_init(&dev->reg_mutex);
-       mutex_init(&dev->stats_mutex);
-       mutex_init(&dev->alu_mutex);
-       mutex_init(&dev->vlan_mutex);
-
        dev->ds->ops = &ksz_switch_ops;
 
        for (i = 0; i < ARRAY_SIZE(ksz_switch_chips); i++) {
@@ -1206,6 +1201,11 @@ int ksz_switch_register(struct ksz_device *dev)
        if (dev->pdata)
                dev->chip_id = dev->pdata->chip_id;
 
+       mutex_init(&dev->reg_mutex);
+       mutex_init(&dev->stats_mutex);
+       mutex_init(&dev->alu_mutex);
+       mutex_init(&dev->vlan_mutex);
+
        if (ksz_switch_detect(dev))
                return -EINVAL;
 
index d721ccf..38e399e 100644 (file)
@@ -567,6 +567,8 @@ int mv88e6xxx_g1_stats_clear(struct mv88e6xxx_chip *chip)
        if (err)
                return err;
 
+       /* Keep the histogram mode bits */
+       val &= MV88E6XXX_G1_STATS_OP_HIST_RX_TX;
        val |= MV88E6XXX_G1_STATS_OP_BUSY | MV88E6XXX_G1_STATS_OP_FLUSH_ALL;
 
        err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_STATS_OP, val);
index 6a633c7..99ef1da 100644 (file)
@@ -407,13 +407,13 @@ static void aq_ethtool_get_pauseparam(struct net_device *ndev,
                                      struct ethtool_pauseparam *pause)
 {
        struct aq_nic_s *aq_nic = netdev_priv(ndev);
+       u32 fc = aq_nic->aq_nic_cfg.flow_control;
 
        pause->autoneg = 0;
 
-       if (aq_nic->aq_hw->aq_nic_cfg->flow_control & AQ_NIC_FC_RX)
-               pause->rx_pause = 1;
-       if (aq_nic->aq_hw->aq_nic_cfg->flow_control & AQ_NIC_FC_TX)
-               pause->tx_pause = 1;
+       pause->rx_pause = !!(fc & AQ_NIC_FC_RX);
+       pause->tx_pause = !!(fc & AQ_NIC_FC_TX);
+
 }
 
 static int aq_ethtool_set_pauseparam(struct net_device *ndev,
index e868924..a1e70da 100644 (file)
@@ -204,6 +204,10 @@ struct aq_hw_ops {
 
        int (*hw_get_fw_version)(struct aq_hw_s *self, u32 *fw_version);
 
+       int (*hw_set_offload)(struct aq_hw_s *self,
+                             struct aq_nic_cfg_s *aq_nic_cfg);
+
+       int (*hw_set_fc)(struct aq_hw_s *self, u32 fc, u32 tc);
 };
 
 struct aq_fw_ops {
@@ -226,6 +230,8 @@ struct aq_fw_ops {
 
        int (*update_stats)(struct aq_hw_s *self);
 
+       u32 (*get_flow_control)(struct aq_hw_s *self, u32 *fcmode);
+
        int (*set_flow_control)(struct aq_hw_s *self);
 
        int (*set_power)(struct aq_hw_s *self, unsigned int power_state,
index e3ae29e..7c07eef 100644 (file)
@@ -99,8 +99,11 @@ static int aq_ndev_set_features(struct net_device *ndev,
        struct aq_nic_s *aq_nic = netdev_priv(ndev);
        struct aq_nic_cfg_s *aq_cfg = aq_nic_get_cfg(aq_nic);
        bool is_lro = false;
+       int err = 0;
+
+       aq_cfg->features = features;
 
-       if (aq_cfg->hw_features & NETIF_F_LRO) {
+       if (aq_cfg->aq_hw_caps->hw_features & NETIF_F_LRO) {
                is_lro = features & NETIF_F_LRO;
 
                if (aq_cfg->is_lro != is_lro) {
@@ -112,8 +115,11 @@ static int aq_ndev_set_features(struct net_device *ndev,
                        }
                }
        }
+       if ((aq_nic->ndev->features ^ features) & NETIF_F_RXCSUM)
+               err = aq_nic->aq_hw_ops->hw_set_offload(aq_nic->aq_hw,
+                                                       aq_cfg);
 
-       return 0;
+       return err;
 }
 
 static int aq_ndev_set_mac_address(struct net_device *ndev, void *addr)
index 5fed244..7abdc09 100644 (file)
@@ -118,12 +118,13 @@ void aq_nic_cfg_start(struct aq_nic_s *self)
        }
 
        cfg->link_speed_msk &= cfg->aq_hw_caps->link_speed_msk;
-       cfg->hw_features = cfg->aq_hw_caps->hw_features;
+       cfg->features = cfg->aq_hw_caps->hw_features;
 }
 
 static int aq_nic_update_link_status(struct aq_nic_s *self)
 {
        int err = self->aq_fw_ops->update_link_status(self->aq_hw);
+       u32 fc = 0;
 
        if (err)
                return err;
@@ -133,6 +134,15 @@ static int aq_nic_update_link_status(struct aq_nic_s *self)
                        AQ_CFG_DRV_NAME, self->link_status.mbps,
                        self->aq_hw->aq_link_status.mbps);
                aq_nic_update_interrupt_moderation_settings(self);
+
+               /* Driver has to update flow control settings on RX block
+                * on any link event.
+                * We should query FW whether it negotiated FC.
+                */
+               if (self->aq_fw_ops->get_flow_control)
+                       self->aq_fw_ops->get_flow_control(self->aq_hw, &fc);
+               if (self->aq_hw_ops->hw_set_fc)
+                       self->aq_hw_ops->hw_set_fc(self->aq_hw, fc, 0);
        }
 
        self->link_status = self->aq_hw->aq_link_status;
@@ -590,7 +600,7 @@ int aq_nic_set_multicast_list(struct aq_nic_s *self, struct net_device *ndev)
                }
        }
 
-       if (i > 0 && i < AQ_HW_MULTICAST_ADDRESS_MAX) {
+       if (i > 0 && i <= AQ_HW_MULTICAST_ADDRESS_MAX) {
                packet_filter |= IFF_MULTICAST;
                self->mc_list.count = i;
                self->aq_hw_ops->hw_multicast_list_set(self->aq_hw,
@@ -772,7 +782,9 @@ void aq_nic_get_link_ksettings(struct aq_nic_s *self,
                ethtool_link_ksettings_add_link_mode(cmd, advertising,
                                                     Pause);
 
-       if (self->aq_nic_cfg.flow_control & AQ_NIC_FC_TX)
+       /* Asym is when either RX or TX, but not both */
+       if (!!(self->aq_nic_cfg.flow_control & AQ_NIC_FC_TX) ^
+           !!(self->aq_nic_cfg.flow_control & AQ_NIC_FC_RX))
                ethtool_link_ksettings_add_link_mode(cmd, advertising,
                                                     Asym_Pause);
 
index c1582f4..44ec47a 100644 (file)
@@ -23,7 +23,7 @@ struct aq_vec_s;
 
 struct aq_nic_cfg_s {
        const struct aq_hw_caps_s *aq_hw_caps;
-       u64 hw_features;
+       u64 features;
        u32 rxds;               /* rx ring size, descriptors # */
        u32 txds;               /* tx ring size, descriptors # */
        u32 vecs;               /* vecs==allocated irqs */
index 3db9144..74550cc 100644 (file)
@@ -172,6 +172,27 @@ bool aq_ring_tx_clean(struct aq_ring_s *self)
        return !!budget;
 }
 
+static void aq_rx_checksum(struct aq_ring_s *self,
+                          struct aq_ring_buff_s *buff,
+                          struct sk_buff *skb)
+{
+       if (!(self->aq_nic->ndev->features & NETIF_F_RXCSUM))
+               return;
+
+       if (unlikely(buff->is_cso_err)) {
+               ++self->stats.rx.errors;
+               skb->ip_summed = CHECKSUM_NONE;
+               return;
+       }
+       if (buff->is_ip_cso) {
+               __skb_incr_checksum_unnecessary(skb);
+               if (buff->is_udp_cso || buff->is_tcp_cso)
+                       __skb_incr_checksum_unnecessary(skb);
+       } else {
+               skb->ip_summed = CHECKSUM_NONE;
+       }
+}
+
 #define AQ_SKB_ALIGN SKB_DATA_ALIGN(sizeof(struct skb_shared_info))
 int aq_ring_rx_clean(struct aq_ring_s *self,
                     struct napi_struct *napi,
@@ -267,18 +288,8 @@ int aq_ring_rx_clean(struct aq_ring_s *self,
                }
 
                skb->protocol = eth_type_trans(skb, ndev);
-               if (unlikely(buff->is_cso_err)) {
-                       ++self->stats.rx.errors;
-                       skb->ip_summed = CHECKSUM_NONE;
-               } else {
-                       if (buff->is_ip_cso) {
-                               __skb_incr_checksum_unnecessary(skb);
-                               if (buff->is_udp_cso || buff->is_tcp_cso)
-                                       __skb_incr_checksum_unnecessary(skb);
-                       } else {
-                               skb->ip_summed = CHECKSUM_NONE;
-                       }
-               }
+
+               aq_rx_checksum(self, buff, skb);
 
                skb_set_hash(skb, buff->rss_hash,
                             buff->is_hash_l4 ? PKT_HASH_TYPE_L4 :
index 76d25d5..f02592f 100644 (file)
@@ -100,12 +100,17 @@ static int hw_atl_b0_hw_reset(struct aq_hw_s *self)
        return err;
 }
 
+static int hw_atl_b0_set_fc(struct aq_hw_s *self, u32 fc, u32 tc)
+{
+       hw_atl_rpb_rx_xoff_en_per_tc_set(self, !!(fc & AQ_NIC_FC_RX), tc);
+       return 0;
+}
+
 static int hw_atl_b0_hw_qos_set(struct aq_hw_s *self)
 {
        u32 tc = 0U;
        u32 buff_size = 0U;
        unsigned int i_priority = 0U;
-       bool is_rx_flow_control = false;
 
        /* TPS Descriptor rate init */
        hw_atl_tps_tx_pkt_shed_desc_rate_curr_time_res_set(self, 0x0U);
@@ -138,7 +143,6 @@ static int hw_atl_b0_hw_qos_set(struct aq_hw_s *self)
 
        /* QoS Rx buf size per TC */
        tc = 0;
-       is_rx_flow_control = (AQ_NIC_FC_RX & self->aq_nic_cfg->flow_control);
        buff_size = HW_ATL_B0_RXBUF_MAX;
 
        hw_atl_rpb_rx_pkt_buff_size_per_tc_set(self, buff_size, tc);
@@ -150,7 +154,8 @@ static int hw_atl_b0_hw_qos_set(struct aq_hw_s *self)
                                                   (buff_size *
                                                   (1024U / 32U) * 50U) /
                                                   100U, tc);
-       hw_atl_rpb_rx_xoff_en_per_tc_set(self, is_rx_flow_control ? 1U : 0U, tc);
+
+       hw_atl_b0_set_fc(self, self->aq_nic_cfg->flow_control, tc);
 
        /* QoS 802.1p priority -> TC mapping */
        for (i_priority = 8U; i_priority--;)
@@ -229,8 +234,10 @@ static int hw_atl_b0_hw_offload_set(struct aq_hw_s *self,
        hw_atl_tpo_tcp_udp_crc_offload_en_set(self, 1);
 
        /* RX checksums offloads*/
-       hw_atl_rpo_ipv4header_crc_offload_en_set(self, 1);
-       hw_atl_rpo_tcp_udp_crc_offload_en_set(self, 1);
+       hw_atl_rpo_ipv4header_crc_offload_en_set(self, !!(aq_nic_cfg->features &
+                                                NETIF_F_RXCSUM));
+       hw_atl_rpo_tcp_udp_crc_offload_en_set(self, !!(aq_nic_cfg->features &
+                                             NETIF_F_RXCSUM));
 
        /* LSO offloads*/
        hw_atl_tdm_large_send_offload_en_set(self, 0xFFFFFFFFU);
@@ -655,9 +662,9 @@ static int hw_atl_b0_hw_ring_rx_receive(struct aq_hw_s *self,
                struct hw_atl_rxd_wb_s *rxd_wb = (struct hw_atl_rxd_wb_s *)
                        &ring->dx_ring[ring->hw_head * HW_ATL_B0_RXD_SIZE];
 
-               unsigned int is_err = 1U;
                unsigned int is_rx_check_sum_enabled = 0U;
                unsigned int pkt_type = 0U;
+               u8 rx_stat = 0U;
 
                if (!(rxd_wb->status & 0x1U)) { /* RxD is not done */
                        break;
@@ -665,35 +672,35 @@ static int hw_atl_b0_hw_ring_rx_receive(struct aq_hw_s *self,
 
                buff = &ring->buff_ring[ring->hw_head];
 
-               is_err = (0x0000003CU & rxd_wb->status);
+               rx_stat = (0x0000003CU & rxd_wb->status) >> 2;
 
                is_rx_check_sum_enabled = (rxd_wb->type) & (0x3U << 19);
-               is_err &= ~0x20U; /* exclude validity bit */
 
                pkt_type = 0xFFU & (rxd_wb->type >> 4);
 
-               if (is_rx_check_sum_enabled) {
-                       if (0x0U == (pkt_type & 0x3U))
-                               buff->is_ip_cso = (is_err & 0x08U) ? 0U : 1U;
+               if (is_rx_check_sum_enabled & BIT(0) &&
+                   (0x0U == (pkt_type & 0x3U)))
+                       buff->is_ip_cso = (rx_stat & BIT(1)) ? 0U : 1U;
 
+               if (is_rx_check_sum_enabled & BIT(1)) {
                        if (0x4U == (pkt_type & 0x1CU))
-                               buff->is_udp_cso = buff->is_cso_err ? 0U : 1U;
+                               buff->is_udp_cso = (rx_stat & BIT(2)) ? 0U :
+                                                  !!(rx_stat & BIT(3));
                        else if (0x0U == (pkt_type & 0x1CU))
-                               buff->is_tcp_cso = buff->is_cso_err ? 0U : 1U;
-
-                       /* Checksum offload workaround for small packets */
-                       if (rxd_wb->pkt_len <= 60) {
-                               buff->is_ip_cso = 0U;
-                               buff->is_cso_err = 0U;
-                       }
+                               buff->is_tcp_cso = (rx_stat & BIT(2)) ? 0U :
+                                                  !!(rx_stat & BIT(3));
+               }
+               buff->is_cso_err = !!(rx_stat & 0x6);
+               /* Checksum offload workaround for small packets */
+               if (unlikely(rxd_wb->pkt_len <= 60)) {
+                       buff->is_ip_cso = 0U;
+                       buff->is_cso_err = 0U;
                }
-
-               is_err &= ~0x18U;
 
                dma_unmap_page(ndev, buff->pa, buff->len, DMA_FROM_DEVICE);
 
-               if (is_err || rxd_wb->type & 0x1000U) {
-                       /* status error or DMA error */
+               if ((rx_stat & BIT(0)) || rxd_wb->type & 0x1000U) {
+                       /* MAC error or DMA error */
                        buff->is_error = 1U;
                } else {
                        if (self->aq_nic_cfg->is_rss) {
@@ -915,6 +922,12 @@ static int hw_atl_b0_hw_interrupt_moderation_set(struct aq_hw_s *self)
 static int hw_atl_b0_hw_stop(struct aq_hw_s *self)
 {
        hw_atl_b0_hw_irq_disable(self, HW_ATL_B0_INT_MASK);
+
+       /* Invalidate Descriptor Cache to prevent writing to the cached
+        * descriptors and to the data pointer of those descriptors
+        */
+       hw_atl_rdm_rx_dma_desc_cache_init_set(self, 1);
+
        return aq_hw_err_from_flags(self);
 }
 
@@ -963,4 +976,6 @@ const struct aq_hw_ops hw_atl_ops_b0 = {
        .hw_get_regs                 = hw_atl_utils_hw_get_regs,
        .hw_get_hw_stats             = hw_atl_utils_get_hw_stats,
        .hw_get_fw_version           = hw_atl_utils_get_fw_version,
+       .hw_set_offload              = hw_atl_b0_hw_offload_set,
+       .hw_set_fc                   = hw_atl_b0_set_fc,
 };
index be0a3a9..5502ec5 100644 (file)
@@ -619,6 +619,14 @@ void hw_atl_rpb_rx_flow_ctl_mode_set(struct aq_hw_s *aq_hw, u32 rx_flow_ctl_mode
                            HW_ATL_RPB_RX_FC_MODE_SHIFT, rx_flow_ctl_mode);
 }
 
+void hw_atl_rdm_rx_dma_desc_cache_init_set(struct aq_hw_s *aq_hw, u32 init)
+{
+       aq_hw_write_reg_bit(aq_hw, HW_ATL_RDM_RX_DMA_DESC_CACHE_INIT_ADR,
+                           HW_ATL_RDM_RX_DMA_DESC_CACHE_INIT_MSK,
+                           HW_ATL_RDM_RX_DMA_DESC_CACHE_INIT_SHIFT,
+                           init);
+}
+
 void hw_atl_rpb_rx_pkt_buff_size_per_tc_set(struct aq_hw_s *aq_hw,
                                            u32 rx_pkt_buff_size_per_tc, u32 buffer)
 {
index 7056c73..41f2399 100644 (file)
@@ -325,6 +325,9 @@ void hw_atl_rpb_rx_pkt_buff_size_per_tc_set(struct aq_hw_s *aq_hw,
                                            u32 rx_pkt_buff_size_per_tc,
                                            u32 buffer);
 
+/* set rdm rx dma descriptor cache init */
+void hw_atl_rdm_rx_dma_desc_cache_init_set(struct aq_hw_s *aq_hw, u32 init);
+
 /* set rx xoff enable (per tc) */
 void hw_atl_rpb_rx_xoff_en_per_tc_set(struct aq_hw_s *aq_hw, u32 rx_xoff_en_per_tc,
                                      u32 buffer);
index 716674a..a715fa3 100644 (file)
 /* default value of bitfield desc{d}_reset */
 #define HW_ATL_RDM_DESCDRESET_DEFAULT 0x0
 
+/* rdm_desc_init_i bitfield definitions
+ * preprocessor definitions for the bitfield rdm_desc_init_i.
+ * port="pif_rdm_desc_init_i"
+ */
+
+/* register address for bitfield rdm_desc_init_i */
+#define HW_ATL_RDM_RX_DMA_DESC_CACHE_INIT_ADR 0x00005a00
+/* bitmask for bitfield rdm_desc_init_i */
+#define HW_ATL_RDM_RX_DMA_DESC_CACHE_INIT_MSK 0xffffffff
+/* inverted bitmask for bitfield rdm_desc_init_i */
+#define HW_ATL_RDM_RX_DMA_DESC_CACHE_INIT_MSKN 0x00000000
+/* lower bit position of bitfield  rdm_desc_init_i */
+#define HW_ATL_RDM_RX_DMA_DESC_CACHE_INIT_SHIFT 0
+/* width of bitfield rdm_desc_init_i */
+#define HW_ATL_RDM_RX_DMA_DESC_CACHE_INIT_WIDTH 32
+/* default value of bitfield rdm_desc_init_i */
+#define HW_ATL_RDM_RX_DMA_DESC_CACHE_INIT_DEFAULT 0x0
+
 /* rx int_desc_wrb_en bitfield definitions
  * preprocessor definitions for the bitfield "int_desc_wrb_en".
  * port="pif_rdm_int_desc_wrb_en_i"
index 096ca57..7de3220 100644 (file)
@@ -30,6 +30,8 @@
 #define HW_ATL_FW2X_MPI_STATE_ADDR     0x370
 #define HW_ATL_FW2X_MPI_STATE2_ADDR    0x374
 
+#define HW_ATL_FW2X_CAP_PAUSE            BIT(CAPS_HI_PAUSE)
+#define HW_ATL_FW2X_CAP_ASYM_PAUSE       BIT(CAPS_HI_ASYMMETRIC_PAUSE)
 #define HW_ATL_FW2X_CAP_SLEEP_PROXY      BIT(CAPS_HI_SLEEP_PROXY)
 #define HW_ATL_FW2X_CAP_WOL              BIT(CAPS_HI_WOL)
 
@@ -451,6 +453,24 @@ static int aq_fw2x_set_flow_control(struct aq_hw_s *self)
        return 0;
 }
 
+static u32 aq_fw2x_get_flow_control(struct aq_hw_s *self, u32 *fcmode)
+{
+       u32 mpi_state = aq_hw_read_reg(self, HW_ATL_FW2X_MPI_STATE2_ADDR);
+
+       if (mpi_state & HW_ATL_FW2X_CAP_PAUSE)
+               if (mpi_state & HW_ATL_FW2X_CAP_ASYM_PAUSE)
+                       *fcmode = AQ_NIC_FC_RX;
+               else
+                       *fcmode = AQ_NIC_FC_RX | AQ_NIC_FC_TX;
+       else
+               if (mpi_state & HW_ATL_FW2X_CAP_ASYM_PAUSE)
+                       *fcmode = AQ_NIC_FC_TX;
+               else
+                       *fcmode = 0;
+
+       return 0;
+}
+
 const struct aq_fw_ops aq_fw_2x_ops = {
        .init = aq_fw2x_init,
        .deinit = aq_fw2x_deinit,
@@ -465,4 +485,5 @@ const struct aq_fw_ops aq_fw_2x_ops = {
        .set_eee_rate = aq_fw2x_set_eee_rate,
        .get_eee_rate = aq_fw2x_get_eee_rate,
        .set_flow_control = aq_fw2x_set_flow_control,
+       .get_flow_control = aq_fw2x_get_flow_control
 };
index 78c5de4..9d0e74f 100644 (file)
@@ -140,6 +140,5 @@ struct alx_priv {
 };
 
 extern const struct ethtool_ops alx_ethtool_ops;
-extern const char alx_drv_name[];
 
 #endif
index 7968c64..c131cfc 100644 (file)
@@ -49,7 +49,7 @@
 #include "hw.h"
 #include "reg.h"
 
-const char alx_drv_name[] = "alx";
+static const char alx_drv_name[] = "alx";
 
 static void alx_free_txbuf(struct alx_tx_queue *txq, int entry)
 {
index 4122553..0e2d99c 100644 (file)
@@ -1902,9 +1902,6 @@ static void bcm_sysport_netif_start(struct net_device *dev)
                intrl2_1_mask_clear(priv, 0xffffffff);
        else
                intrl2_0_mask_clear(priv, INTRL2_0_TDMA_MBDONE_MASK);
-
-       /* Last call before we start the real business */
-       netif_tx_start_all_queues(dev);
 }
 
 static void rbuf_init(struct bcm_sysport_priv *priv)
@@ -2048,6 +2045,8 @@ static int bcm_sysport_open(struct net_device *dev)
 
        bcm_sysport_netif_start(dev);
 
+       netif_tx_start_all_queues(dev);
+
        return 0;
 
 out_clear_rx_int:
@@ -2071,7 +2070,7 @@ static void bcm_sysport_netif_stop(struct net_device *dev)
        struct bcm_sysport_priv *priv = netdev_priv(dev);
 
        /* stop all software from updating hardware */
-       netif_tx_stop_all_queues(dev);
+       netif_tx_disable(dev);
        napi_disable(&priv->napi);
        cancel_work_sync(&priv->dim.dim.work);
        phy_stop(dev->phydev);
@@ -2658,12 +2657,12 @@ static int __maybe_unused bcm_sysport_suspend(struct device *d)
        if (!netif_running(dev))
                return 0;
 
+       netif_device_detach(dev);
+
        bcm_sysport_netif_stop(dev);
 
        phy_suspend(dev->phydev);
 
-       netif_device_detach(dev);
-
        /* Disable UniMAC RX */
        umac_enable_set(priv, CMD_RX_EN, 0);
 
@@ -2746,8 +2745,6 @@ static int __maybe_unused bcm_sysport_resume(struct device *d)
                goto out_free_rx_ring;
        }
 
-       netif_device_attach(dev);
-
        /* RX pipe enable */
        topctrl_writel(priv, 0, RX_FLUSH_CNTL);
 
@@ -2788,6 +2785,8 @@ static int __maybe_unused bcm_sysport_resume(struct device *d)
 
        bcm_sysport_netif_start(dev);
 
+       netif_device_attach(dev);
+
        return 0;
 
 out_free_rx_ring:
index 20c1681..2d6f090 100644 (file)
@@ -2855,7 +2855,6 @@ static void bcmgenet_netif_start(struct net_device *dev)
 
        umac_enable_set(priv, CMD_TX_EN | CMD_RX_EN, true);
 
-       netif_tx_start_all_queues(dev);
        bcmgenet_enable_tx_napi(priv);
 
        /* Monitor link interrupts now */
@@ -2937,6 +2936,8 @@ static int bcmgenet_open(struct net_device *dev)
 
        bcmgenet_netif_start(dev);
 
+       netif_tx_start_all_queues(dev);
+
        return 0;
 
 err_irq1:
@@ -2958,7 +2959,7 @@ static void bcmgenet_netif_stop(struct net_device *dev)
        struct bcmgenet_priv *priv = netdev_priv(dev);
 
        bcmgenet_disable_tx_napi(priv);
-       netif_tx_stop_all_queues(dev);
+       netif_tx_disable(dev);
 
        /* Disable MAC receive */
        umac_enable_set(priv, CMD_RX_EN, false);
@@ -3620,13 +3621,13 @@ static int bcmgenet_suspend(struct device *d)
        if (!netif_running(dev))
                return 0;
 
+       netif_device_detach(dev);
+
        bcmgenet_netif_stop(dev);
 
        if (!device_may_wakeup(d))
                phy_suspend(dev->phydev);
 
-       netif_device_detach(dev);
-
        /* Prepare the device for Wake-on-LAN and switch to the slow clock */
        if (device_may_wakeup(d) && priv->wolopts) {
                ret = bcmgenet_power_down(priv, GENET_POWER_WOL_MAGIC);
@@ -3700,8 +3701,6 @@ static int bcmgenet_resume(struct device *d)
        /* Always enable ring 16 - descriptor ring */
        bcmgenet_enable_dma(priv, dma_ctrl);
 
-       netif_device_attach(dev);
-
        if (!device_may_wakeup(d))
                phy_resume(dev->phydev);
 
@@ -3710,6 +3709,8 @@ static int bcmgenet_resume(struct device *d)
 
        bcmgenet_netif_start(dev);
 
+       netif_device_attach(dev);
+
        return 0;
 
 out_clk_disable:
index 3f96aa3..20fcf0d 100644 (file)
@@ -3760,7 +3760,8 @@ static int hns3_reset_notify_init_enet(struct hnae3_handle *handle)
        /* Hardware table is only clear when pf resets */
        if (!(handle->flags & HNAE3_SUPPORT_VF)) {
                ret = hns3_restore_vlan(netdev);
-               return ret;
+               if (ret)
+                       return ret;
        }
 
        ret = hns3_restore_fd_rules(netdev);
index aa5cb98..494e562 100644 (file)
@@ -1168,14 +1168,14 @@ static int hclge_pfc_setup_hw(struct hclge_dev *hdev)
  */
 static int hclge_bp_setup_hw(struct hclge_dev *hdev, u8 tc)
 {
-       struct hclge_vport *vport = hdev->vport;
-       u32 i, k, qs_bitmap;
-       int ret;
+       int i;
 
        for (i = 0; i < HCLGE_BP_GRP_NUM; i++) {
-               qs_bitmap = 0;
+               u32 qs_bitmap = 0;
+               int k, ret;
 
                for (k = 0; k < hdev->num_alloc_vport; k++) {
+                       struct hclge_vport *vport = &hdev->vport[k];
                        u16 qs_id = vport->qs_offset + tc;
                        u8 grp, sub_grp;
 
@@ -1185,8 +1185,6 @@ static int hclge_bp_setup_hw(struct hclge_dev *hdev, u8 tc)
                                                  HCLGE_BP_SUB_GRP_ID_S);
                        if (i == grp)
                                qs_bitmap |= (1 << sub_grp);
-
-                       vport++;
                }
 
                ret = hclge_tm_qs_bp_cfg(hdev, tc, i, qs_bitmap);
index 7893bef..c9d5d0a 100644 (file)
@@ -1545,7 +1545,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
        tx_crq.v1.sge_len = cpu_to_be32(skb->len);
        tx_crq.v1.ioba = cpu_to_be64(data_dma_addr);
 
-       if (adapter->vlan_header_insertion) {
+       if (adapter->vlan_header_insertion && skb_vlan_tag_present(skb)) {
                tx_crq.v1.flags2 |= IBMVNIC_TX_VLAN_INSERT;
                tx_crq.v1.vlan_id = cpu_to_be16(skb->vlan_tci);
        }
index bc71a21..21c2688 100644 (file)
@@ -12249,6 +12249,8 @@ static int i40e_config_netdev(struct i40e_vsi *vsi)
                          NETIF_F_GSO_GRE               |
                          NETIF_F_GSO_GRE_CSUM          |
                          NETIF_F_GSO_PARTIAL           |
+                         NETIF_F_GSO_IPXIP4            |
+                         NETIF_F_GSO_IPXIP6            |
                          NETIF_F_GSO_UDP_TUNNEL        |
                          NETIF_F_GSO_UDP_TUNNEL_CSUM   |
                          NETIF_F_SCTP_CRC              |
@@ -12266,13 +12268,13 @@ static int i40e_config_netdev(struct i40e_vsi *vsi)
        /* record features VLANs can make use of */
        netdev->vlan_features |= hw_enc_features | NETIF_F_TSO_MANGLEID;
 
-       if (!(pf->flags & I40E_FLAG_MFP_ENABLED))
-               netdev->hw_features |= NETIF_F_NTUPLE | NETIF_F_HW_TC;
-
        hw_features = hw_enc_features           |
                      NETIF_F_HW_VLAN_CTAG_TX   |
                      NETIF_F_HW_VLAN_CTAG_RX;
 
+       if (!(pf->flags & I40E_FLAG_MFP_ENABLED))
+               hw_features |= NETIF_F_NTUPLE | NETIF_F_HW_TC;
+
        netdev->hw_features |= hw_features;
 
        netdev->features |= hw_features | NETIF_F_HW_VLAN_CTAG_FILTER;
index 4c4b571..b854837 100644 (file)
@@ -76,6 +76,8 @@ extern const char ice_drv_ver[];
 #define ICE_MIN_INTR_PER_VF            (ICE_MIN_QS_PER_VF + 1)
 #define ICE_DFLT_INTR_PER_VF           (ICE_DFLT_QS_PER_VF + 1)
 
+#define ICE_MAX_RESET_WAIT             20
+
 #define ICE_VSIQF_HKEY_ARRAY_SIZE      ((VSIQF_HKEY_MAX_INDEX + 1) *   4)
 
 #define ICE_DFLT_NETIF_M (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK)
@@ -189,7 +191,6 @@ struct ice_vsi {
        u64 tx_linearize;
        DECLARE_BITMAP(state, __ICE_STATE_NBITS);
        DECLARE_BITMAP(flags, ICE_VSI_FLAG_NBITS);
-       unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
        unsigned int current_netdev_flags;
        u32 tx_restart;
        u32 tx_busy;
@@ -369,5 +370,6 @@ int ice_set_rss(struct ice_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size);
 int ice_get_rss(struct ice_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size);
 void ice_fill_rss_lut(u8 *lut, u16 rss_table_size, u16 rss_size);
 void ice_print_link_msg(struct ice_vsi *vsi, bool isup);
+void ice_napi_del(struct ice_vsi *vsi);
 
 #endif /* _ICE_H_ */
index 8cd6a24..554fd70 100644 (file)
@@ -811,6 +811,9 @@ void ice_deinit_hw(struct ice_hw *hw)
        /* Attempt to disable FW logging before shutting down control queues */
        ice_cfg_fw_log(hw, false);
        ice_shutdown_all_ctrlq(hw);
+
+       /* Clear VSI contexts if not already cleared */
+       ice_clear_all_vsi_ctx(hw);
 }
 
 /**
index 9692358..648acdb 100644 (file)
@@ -1517,10 +1517,15 @@ ice_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause)
        }
 
        if (!test_bit(__ICE_DOWN, pf->state)) {
-               /* Give it a little more time to try to come back */
+               /* Give it a little more time to try to come back. If still
+                * down, restart autoneg link or reinitialize the interface.
+                */
                msleep(75);
                if (!test_bit(__ICE_DOWN, pf->state))
                        return ice_nway_reset(netdev);
+
+               ice_down(vsi);
+               ice_up(vsi);
        }
 
        return err;
index 5fdea6e..596b9fb 100644 (file)
 #define GLNVM_ULD                              0x000B6008
 #define GLNVM_ULD_CORER_DONE_M                 BIT(3)
 #define GLNVM_ULD_GLOBR_DONE_M                 BIT(4)
+#define GLPCI_CNF2                             0x000BE004
+#define GLPCI_CNF2_CACHELINE_SIZE_M            BIT(1)
 #define PF_FUNC_RID                            0x0009E880
 #define PF_FUNC_RID_FUNC_NUM_S                 0
 #define PF_FUNC_RID_FUNC_NUM_M                 ICE_M(0x7, 0)
index 5bacad0..1041fa2 100644 (file)
@@ -1997,7 +1997,7 @@ int ice_cfg_vlan_pruning(struct ice_vsi *vsi, bool ena)
        status = ice_update_vsi(&vsi->back->hw, vsi->idx, ctxt, NULL);
        if (status) {
                netdev_err(vsi->netdev, "%sabling VLAN pruning on VSI handle: %d, VSI HW ID: %d failed, err = %d, aq_err = %d\n",
-                          ena ? "Ena" : "Dis", vsi->idx, vsi->vsi_num, status,
+                          ena ? "En" : "Dis", vsi->idx, vsi->vsi_num, status,
                           vsi->back->hw.adminq.sq_last_status);
                goto err_out;
        }
@@ -2458,6 +2458,7 @@ int ice_vsi_release(struct ice_vsi *vsi)
         * on this wq
         */
        if (vsi->netdev && !ice_is_reset_in_progress(pf->state)) {
+               ice_napi_del(vsi);
                unregister_netdev(vsi->netdev);
                free_netdev(vsi->netdev);
                vsi->netdev = NULL;
index 0599345..333312a 100644 (file)
@@ -1465,7 +1465,7 @@ skip_req_irq:
  * ice_napi_del - Remove NAPI handler for the VSI
  * @vsi: VSI for which NAPI handler is to be removed
  */
-static void ice_napi_del(struct ice_vsi *vsi)
+void ice_napi_del(struct ice_vsi *vsi)
 {
        int v_idx;
 
@@ -1622,7 +1622,6 @@ static int ice_vlan_rx_add_vid(struct net_device *netdev,
 {
        struct ice_netdev_priv *np = netdev_priv(netdev);
        struct ice_vsi *vsi = np->vsi;
-       int ret;
 
        if (vid >= VLAN_N_VID) {
                netdev_err(netdev, "VLAN id requested %d is out of range %d\n",
@@ -1635,7 +1634,8 @@ static int ice_vlan_rx_add_vid(struct net_device *netdev,
 
        /* Enable VLAN pruning when VLAN 0 is added */
        if (unlikely(!vid)) {
-               ret = ice_cfg_vlan_pruning(vsi, true);
+               int ret = ice_cfg_vlan_pruning(vsi, true);
+
                if (ret)
                        return ret;
        }
@@ -1644,12 +1644,7 @@ static int ice_vlan_rx_add_vid(struct net_device *netdev,
         * needed to continue allowing all untagged packets since VLAN prune
         * list is applied to all packets by the switch
         */
-       ret = ice_vsi_add_vlan(vsi, vid);
-
-       if (!ret)
-               set_bit(vid, vsi->active_vlans);
-
-       return ret;
+       return ice_vsi_add_vlan(vsi, vid);
 }
 
 /**
@@ -1677,8 +1672,6 @@ static int ice_vlan_rx_kill_vid(struct net_device *netdev,
        if (status)
                return status;
 
-       clear_bit(vid, vsi->active_vlans);
-
        /* Disable VLAN pruning when VLAN 0 is removed */
        if (unlikely(!vid))
                status = ice_cfg_vlan_pruning(vsi, false);
@@ -2002,6 +1995,22 @@ static int ice_init_interrupt_scheme(struct ice_pf *pf)
 }
 
 /**
+ * ice_verify_cacheline_size - verify driver's assumption of 64 Byte cache lines
+ * @pf: pointer to the PF structure
+ *
+ * There is no error returned here because the driver should be able to handle
+ * 128 Byte cache lines, so we only print a warning in case issues are seen,
+ * specifically with Tx.
+ */
+static void ice_verify_cacheline_size(struct ice_pf *pf)
+{
+       if (rd32(&pf->hw, GLPCI_CNF2) & GLPCI_CNF2_CACHELINE_SIZE_M)
+               dev_warn(&pf->pdev->dev,
+                        "%d Byte cache line assumption is invalid, driver may have Tx timeouts!\n",
+                        ICE_CACHE_LINE_BYTES);
+}
+
+/**
  * ice_probe - Device initialization routine
  * @pdev: PCI device information struct
  * @ent: entry in ice_pci_tbl
@@ -2151,6 +2160,8 @@ static int ice_probe(struct pci_dev *pdev,
        /* since everything is good, start the service timer */
        mod_timer(&pf->serv_tmr, round_jiffies(jiffies + pf->serv_tmr_period));
 
+       ice_verify_cacheline_size(pf);
+
        return 0;
 
 err_alloc_sw_unroll:
@@ -2182,6 +2193,12 @@ static void ice_remove(struct pci_dev *pdev)
        if (!pf)
                return;
 
+       for (i = 0; i < ICE_MAX_RESET_WAIT; i++) {
+               if (!ice_is_reset_in_progress(pf->state))
+                       break;
+               msleep(100);
+       }
+
        set_bit(__ICE_DOWN, pf->state);
        ice_service_task_stop(pf);
 
@@ -2510,31 +2527,6 @@ static int ice_vsi_vlan_setup(struct ice_vsi *vsi)
 }
 
 /**
- * ice_restore_vlan - Reinstate VLANs when vsi/netdev comes back up
- * @vsi: the VSI being brought back up
- */
-static int ice_restore_vlan(struct ice_vsi *vsi)
-{
-       int err;
-       u16 vid;
-
-       if (!vsi->netdev)
-               return -EINVAL;
-
-       err = ice_vsi_vlan_setup(vsi);
-       if (err)
-               return err;
-
-       for_each_set_bit(vid, vsi->active_vlans, VLAN_N_VID) {
-               err = ice_vlan_rx_add_vid(vsi->netdev, htons(ETH_P_8021Q), vid);
-               if (err)
-                       break;
-       }
-
-       return err;
-}
-
-/**
  * ice_vsi_cfg - Setup the VSI
  * @vsi: the VSI being configured
  *
@@ -2546,7 +2538,9 @@ static int ice_vsi_cfg(struct ice_vsi *vsi)
 
        if (vsi->netdev) {
                ice_set_rx_mode(vsi->netdev);
-               err = ice_restore_vlan(vsi);
+
+               err = ice_vsi_vlan_setup(vsi);
+
                if (err)
                        return err;
        }
@@ -3296,7 +3290,7 @@ static void ice_rebuild(struct ice_pf *pf)
        struct device *dev = &pf->pdev->dev;
        struct ice_hw *hw = &pf->hw;
        enum ice_status ret;
-       int err;
+       int err, i;
 
        if (test_bit(__ICE_DOWN, pf->state))
                goto clear_recovery;
@@ -3370,6 +3364,22 @@ static void ice_rebuild(struct ice_pf *pf)
        }
 
        ice_reset_all_vfs(pf, true);
+
+       for (i = 0; i < pf->num_alloc_vsi; i++) {
+               bool link_up;
+
+               if (!pf->vsi[i] || pf->vsi[i]->type != ICE_VSI_PF)
+                       continue;
+               ice_get_link_status(pf->vsi[i]->port_info, &link_up);
+               if (link_up) {
+                       netif_carrier_on(pf->vsi[i]->netdev);
+                       netif_tx_wake_all_queues(pf->vsi[i]->netdev);
+               } else {
+                       netif_carrier_off(pf->vsi[i]->netdev);
+                       netif_tx_stop_all_queues(pf->vsi[i]->netdev);
+               }
+       }
+
        /* if we get here, reset flow is successful */
        clear_bit(__ICE_RESET_FAILED, pf->state);
        return;
index 33403f3..40c9c65 100644 (file)
@@ -348,6 +348,18 @@ static void ice_clear_vsi_ctx(struct ice_hw *hw, u16 vsi_handle)
 }
 
 /**
+ * ice_clear_all_vsi_ctx - clear all the VSI context entries
+ * @hw: pointer to the hw struct
+ */
+void ice_clear_all_vsi_ctx(struct ice_hw *hw)
+{
+       u16 i;
+
+       for (i = 0; i < ICE_MAX_VSI; i++)
+               ice_clear_vsi_ctx(hw, i);
+}
+
+/**
  * ice_add_vsi - add VSI context to the hardware and VSI handle list
  * @hw: pointer to the hw struct
  * @vsi_handle: unique VSI handle provided by drivers
index b88d96a..d5ef0bd 100644 (file)
@@ -190,6 +190,8 @@ ice_update_vsi(struct ice_hw *hw, u16 vsi_handle, struct ice_vsi_ctx *vsi_ctx,
               struct ice_sq_cd *cd);
 bool ice_is_vsi_valid(struct ice_hw *hw, u16 vsi_handle);
 struct ice_vsi_ctx *ice_get_vsi_ctx(struct ice_hw *hw, u16 vsi_handle);
+void ice_clear_all_vsi_ctx(struct ice_hw *hw);
+/* Switch config */
 enum ice_status ice_get_initial_sw_cfg(struct ice_hw *hw);
 
 /* Switch/bridge related commands */
index 5dae968..fe5bbab 100644 (file)
@@ -1520,7 +1520,7 @@ int ice_tso(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
 
        /* update gso_segs and bytecount */
        first->gso_segs = skb_shinfo(skb)->gso_segs;
-       first->bytecount = (first->gso_segs - 1) * off->header_len;
+       first->bytecount += (first->gso_segs - 1) * off->header_len;
 
        cd_tso_len = skb->len - off->header_len;
        cd_mss = skb_shinfo(skb)->gso_size;
@@ -1556,15 +1556,15 @@ int ice_tso(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
  * magnitude greater than our largest possible GSO size.
  *
  * This would then be implemented as:
- *     return (((size >> 12) * 85) >> 8) + 1;
+ *     return (((size >> 12) * 85) >> 8) + ICE_DESCS_FOR_SKB_DATA_PTR;
  *
  * Since multiplication and division are commutative, we can reorder
  * operations into:
- *     return ((size * 85) >> 20) + 1;
+ *     return ((size * 85) >> 20) + ICE_DESCS_FOR_SKB_DATA_PTR;
  */
 static unsigned int ice_txd_use_count(unsigned int size)
 {
-       return ((size * 85) >> 20) + 1;
+       return ((size * 85) >> 20) + ICE_DESCS_FOR_SKB_DATA_PTR;
 }
 
 /**
@@ -1706,7 +1706,8 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_ring *tx_ring)
         *       + 1 desc for context descriptor,
         * otherwise try next time
         */
-       if (ice_maybe_stop_tx(tx_ring, count + 4 + 1)) {
+       if (ice_maybe_stop_tx(tx_ring, count + ICE_DESCS_PER_CACHE_LINE +
+                             ICE_DESCS_FOR_CTX_DESC)) {
                tx_ring->tx_stats.tx_busy++;
                return NETDEV_TX_BUSY;
        }
index 1d0f58b..75d0eaf 100644 (file)
 #define ICE_RX_BUF_WRITE       16      /* Must be power of 2 */
 #define ICE_MAX_TXQ_PER_TXQG   128
 
-/* Tx Descriptors needed, worst case */
-#define DESC_NEEDED (MAX_SKB_FRAGS + 4)
+/* We are assuming that the cache line is always 64 Bytes here for ice.
+ * In order to make sure that is a correct assumption there is a check in probe
+ * to print a warning if the read from GLPCI_CNF2 tells us that the cache line
+ * size is 128 bytes. We do it this way because we do not want to read the
+ * GLPCI_CNF2 register or a variable containing the value on every pass through
+ * the Tx path.
+ */
+#define ICE_CACHE_LINE_BYTES           64
+#define ICE_DESCS_PER_CACHE_LINE       (ICE_CACHE_LINE_BYTES / \
+                                        sizeof(struct ice_tx_desc))
+#define ICE_DESCS_FOR_CTX_DESC         1
+#define ICE_DESCS_FOR_SKB_DATA_PTR     1
+/* Tx descriptors needed, worst case */
+#define DESC_NEEDED (MAX_SKB_FRAGS + ICE_DESCS_FOR_CTX_DESC + \
+                    ICE_DESCS_PER_CACHE_LINE + ICE_DESCS_FOR_SKB_DATA_PTR)
 #define ICE_DESC_UNUSED(R)     \
        ((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \
        (R)->next_to_clean - (R)->next_to_use - 1)
index 12f9432..f4dbc81 100644 (file)
@@ -92,12 +92,12 @@ struct ice_link_status {
        u64 phy_type_low;
        u16 max_frame_size;
        u16 link_speed;
+       u16 req_speeds;
        u8 lse_ena;     /* Link Status Event notification */
        u8 link_info;
        u8 an_info;
        u8 ext_info;
        u8 pacing;
-       u8 req_speeds;
        /* Refer to #define from module_type[ICE_MODULE_TYPE_TOTAL_BYTE] of
         * ice_aqc_get_phy_caps structure
         */
index 45f10f8..e71065f 100644 (file)
@@ -348,7 +348,7 @@ static int ice_vsi_set_pvid(struct ice_vsi *vsi, u16 vid)
        struct ice_vsi_ctx ctxt = { 0 };
        enum ice_status status;
 
-       ctxt.info.vlan_flags = ICE_AQ_VSI_VLAN_MODE_TAGGED |
+       ctxt.info.vlan_flags = ICE_AQ_VSI_VLAN_MODE_UNTAGGED |
                               ICE_AQ_VSI_PVLAN_INSERT_PVID |
                               ICE_AQ_VSI_VLAN_EMOD_STR;
        ctxt.info.pvid = cpu_to_le16(vid);
@@ -2171,7 +2171,6 @@ static int ice_vc_process_vlan_msg(struct ice_vf *vf, u8 *msg, bool add_v)
 
                        if (!ice_vsi_add_vlan(vsi, vid)) {
                                vf->num_vlan++;
-                               set_bit(vid, vsi->active_vlans);
 
                                /* Enable VLAN pruning when VLAN 0 is added */
                                if (unlikely(!vid))
@@ -2190,7 +2189,6 @@ static int ice_vc_process_vlan_msg(struct ice_vf *vf, u8 *msg, bool add_v)
                         */
                        if (!ice_vsi_kill_vlan(vsi, vid)) {
                                vf->num_vlan--;
-                               clear_bit(vid, vsi->active_vlans);
 
                                /* Disable VLAN pruning when removing VLAN 0 */
                                if (unlikely(!vid))
index 29ced6b..2b95dc9 100644 (file)
  *   2^40 * 10^-9 /  60  = 18.3 minutes.
  *
  * SYSTIM is converted to real time using a timecounter. As
- * timecounter_cyc2time() allows old timestamps, the timecounter
- * needs to be updated at least once per half of the SYSTIM interval.
- * Scheduling of delayed work is not very accurate, so we aim for 8
- * minutes to be sure the actual interval is shorter than 9.16 minutes.
+ * timecounter_cyc2time() allows old timestamps, the timecounter needs
+ * to be updated at least once per half of the SYSTIM interval.
+ * Scheduling of delayed work is not very accurate, and also the NIC
+ * clock can be adjusted to run up to 6% faster and the system clock
+ * up to 10% slower, so we aim for 6 minutes to be sure the actual
+ * interval in the NIC time is shorter than 9.16 minutes.
  */
 
-#define IGB_SYSTIM_OVERFLOW_PERIOD     (HZ * 60 * 8)
+#define IGB_SYSTIM_OVERFLOW_PERIOD     (HZ * 60 * 6)
 #define IGB_PTP_TX_TIMEOUT             (HZ * 15)
 #define INCPERIOD_82576                        BIT(E1000_TIMINCA_16NS_SHIFT)
 #define INCVALUE_82576_MASK            GENMASK(E1000_TIMINCA_16NS_SHIFT - 1, 0)
index 5bfd349..3ba672e 100644 (file)
@@ -494,7 +494,7 @@ struct mvneta_port {
 #if defined(__LITTLE_ENDIAN)
 struct mvneta_tx_desc {
        u32  command;           /* Options used by HW for packet transmitting.*/
-       u16  reserverd1;        /* csum_l4 (for future use)             */
+       u16  reserved1;         /* csum_l4 (for future use)             */
        u16  data_size;         /* Data size of transmitted packet in bytes */
        u32  buf_phys_addr;     /* Physical addr of transmitted buffer  */
        u32  reserved2;         /* hw_cmd - (for future use, PMT)       */
@@ -519,7 +519,7 @@ struct mvneta_rx_desc {
 #else
 struct mvneta_tx_desc {
        u16  data_size;         /* Data size of transmitted packet in bytes */
-       u16  reserverd1;        /* csum_l4 (for future use)             */
+       u16  reserved1;         /* csum_l4 (for future use)             */
        u32  command;           /* Options used by HW for packet transmitting.*/
        u32  reserved2;         /* hw_cmd - (for future use, PMT)       */
        u32  buf_phys_addr;     /* Physical addr of transmitted buffer  */
index 1857ee0..6f5153a 100644 (file)
@@ -1006,7 +1006,6 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
                ring->packets++;
        }
        ring->bytes += tx_info->nr_bytes;
-       netdev_tx_sent_queue(ring->tx_queue, tx_info->nr_bytes);
        AVG_PERF_COUNTER(priv->pstats.tx_pktsz_avg, skb->len);
 
        if (tx_info->inl)
@@ -1044,7 +1043,10 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
                netif_tx_stop_queue(ring->tx_queue);
                ring->queue_stopped++;
        }
-       send_doorbell = !skb->xmit_more || netif_xmit_stopped(ring->tx_queue);
+
+       send_doorbell = __netdev_tx_sent_queue(ring->tx_queue,
+                                              tx_info->nr_bytes,
+                                              skb->xmit_more);
 
        real_size = (real_size / 16) & 0x3f;
 
index a2df12b..9bec940 100644 (file)
@@ -3568,7 +3568,6 @@ static int mlxsw_sp_cpu_policers_set(struct mlxsw_core *mlxsw_core)
                        burst_size = 7;
                        break;
                case MLXSW_REG_HTGT_TRAP_GROUP_SP_IP2ME:
-                       is_bytes = true;
                        rate = 4 * 1024;
                        burst_size = 4;
                        break;
index cc1b373..46dc93d 100644 (file)
@@ -147,7 +147,8 @@ qed_sp_fcoe_func_start(struct qed_hwfn *p_hwfn,
                       "Cannot satisfy CQ amount. CQs requested %d, CQs available %d. Aborting function start\n",
                       fcoe_pf_params->num_cqs,
                       p_hwfn->hw_info.feat_num[QED_FCOE_CQ]);
-               return -EINVAL;
+               rc = -EINVAL;
+               goto err;
        }
 
        p_data->mtu = cpu_to_le16(fcoe_pf_params->mtu);
@@ -156,14 +157,14 @@ qed_sp_fcoe_func_start(struct qed_hwfn *p_hwfn,
 
        rc = qed_cxt_acquire_cid(p_hwfn, PROTOCOLID_FCOE, &dummy_cid);
        if (rc)
-               return rc;
+               goto err;
 
        cxt_info.iid = dummy_cid;
        rc = qed_cxt_get_cid_info(p_hwfn, &cxt_info);
        if (rc) {
                DP_NOTICE(p_hwfn, "Cannot find context info for dummy cid=%d\n",
                          dummy_cid);
-               return rc;
+               goto err;
        }
        p_cxt = cxt_info.p_cxt;
        SET_FIELD(p_cxt->tstorm_ag_context.flags3,
@@ -240,6 +241,10 @@ qed_sp_fcoe_func_start(struct qed_hwfn *p_hwfn,
        rc = qed_spq_post(p_hwfn, p_ent, NULL);
 
        return rc;
+
+err:
+       qed_sp_destroy_request(p_hwfn, p_ent);
+       return rc;
 }
 
 static int
index 1135387..4f8a685 100644 (file)
@@ -200,6 +200,7 @@ qed_sp_iscsi_func_start(struct qed_hwfn *p_hwfn,
                       "Cannot satisfy CQ amount. Queues requested %d, CQs available %d. Aborting function start\n",
                       p_params->num_queues,
                       p_hwfn->hw_info.feat_num[QED_ISCSI_CQ]);
+               qed_sp_destroy_request(p_hwfn, p_ent);
                return -EINVAL;
        }
 
index 82a1bd1..67c02ea 100644 (file)
@@ -740,8 +740,7 @@ int qed_sp_vport_update(struct qed_hwfn *p_hwfn,
 
        rc = qed_sp_vport_update_rss(p_hwfn, p_ramrod, p_rss_params);
        if (rc) {
-               /* Return spq entry which is taken in qed_sp_init_request()*/
-               qed_spq_return_entry(p_hwfn, p_ent);
+               qed_sp_destroy_request(p_hwfn, p_ent);
                return rc;
        }
 
@@ -1355,6 +1354,7 @@ qed_filter_ucast_common(struct qed_hwfn *p_hwfn,
                        DP_NOTICE(p_hwfn,
                                  "%d is not supported yet\n",
                                  p_filter_cmd->opcode);
+                       qed_sp_destroy_request(p_hwfn, *pp_ent);
                        return -EINVAL;
                }
 
@@ -2056,13 +2056,13 @@ qed_configure_rfs_ntuple_filter(struct qed_hwfn *p_hwfn,
        } else {
                rc = qed_fw_vport(p_hwfn, p_params->vport_id, &abs_vport_id);
                if (rc)
-                       return rc;
+                       goto err;
 
                if (p_params->qid != QED_RFS_NTUPLE_QID_RSS) {
                        rc = qed_fw_l2_queue(p_hwfn, p_params->qid,
                                             &abs_rx_q_id);
                        if (rc)
-                               return rc;
+                               goto err;
 
                        p_ramrod->rx_qid_valid = 1;
                        p_ramrod->rx_qid = cpu_to_le16(abs_rx_q_id);
@@ -2083,6 +2083,10 @@ qed_configure_rfs_ntuple_filter(struct qed_hwfn *p_hwfn,
                   (u64)p_params->addr, p_params->length);
 
        return qed_spq_post(p_hwfn, p_ent, NULL);
+
+err:
+       qed_sp_destroy_request(p_hwfn, p_ent);
+       return rc;
 }
 
 int qed_get_rxq_coalesce(struct qed_hwfn *p_hwfn,
index f40f654..a96364d 100644 (file)
@@ -1944,9 +1944,12 @@ int qed_mcp_trans_speed_mask(struct qed_hwfn *p_hwfn,
                             struct qed_ptt *p_ptt, u32 *p_speed_mask)
 {
        u32 transceiver_type, transceiver_state;
+       int ret;
 
-       qed_mcp_get_transceiver_data(p_hwfn, p_ptt, &transceiver_state,
-                                    &transceiver_type);
+       ret = qed_mcp_get_transceiver_data(p_hwfn, p_ptt, &transceiver_state,
+                                          &transceiver_type);
+       if (ret)
+               return ret;
 
        if (qed_is_transceiver_ready(transceiver_state, transceiver_type) ==
                                     false)
index c71391b..6211343 100644 (file)
@@ -1514,6 +1514,7 @@ qed_rdma_register_tid(void *rdma_cxt,
        default:
                rc = -EINVAL;
                DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "rc = %d\n", rc);
+               qed_sp_destroy_request(p_hwfn, p_ent);
                return rc;
        }
        SET_FIELD(p_ramrod->flags1,
index f9167d1..e49fada 100644 (file)
@@ -745,6 +745,7 @@ static int qed_roce_sp_destroy_qp_responder(struct qed_hwfn *p_hwfn,
                DP_NOTICE(p_hwfn,
                          "qed destroy responder failed: cannot allocate memory (ramrod). rc = %d\n",
                          rc);
+               qed_sp_destroy_request(p_hwfn, p_ent);
                return rc;
        }
 
index e95431f..3157c0d 100644 (file)
@@ -167,6 +167,9 @@ struct qed_spq_entry {
        enum spq_mode                   comp_mode;
        struct qed_spq_comp_cb          comp_cb;
        struct qed_spq_comp_done        comp_done; /* SPQ_MODE_EBLOCK */
+
+       /* Posted entry for unlimited list entry in EBLOCK mode */
+       struct qed_spq_entry            *post_ent;
 };
 
 struct qed_eq {
@@ -396,6 +399,17 @@ struct qed_sp_init_data {
        struct qed_spq_comp_cb *p_comp_data;
 };
 
+/**
+ * @brief Returns a SPQ entry to the pool / frees the entry if allocated.
+ *        Should be called on in error flows after initializing the SPQ entry
+ *        and before posting it.
+ *
+ * @param p_hwfn
+ * @param p_ent
+ */
+void qed_sp_destroy_request(struct qed_hwfn *p_hwfn,
+                           struct qed_spq_entry *p_ent);
+
 int qed_sp_init_request(struct qed_hwfn *p_hwfn,
                        struct qed_spq_entry **pp_ent,
                        u8 cmd,
index 77b6248..888274f 100644 (file)
 #include "qed_sp.h"
 #include "qed_sriov.h"
 
+void qed_sp_destroy_request(struct qed_hwfn *p_hwfn,
+                           struct qed_spq_entry *p_ent)
+{
+       /* qed_spq_get_entry() can either get an entry from the free_pool,
+        * or, if no entries are left, allocate a new entry and add it to
+        * the unlimited_pending list.
+        */
+       if (p_ent->queue == &p_hwfn->p_spq->unlimited_pending)
+               kfree(p_ent);
+       else
+               qed_spq_return_entry(p_hwfn, p_ent);
+}
+
 int qed_sp_init_request(struct qed_hwfn *p_hwfn,
                        struct qed_spq_entry **pp_ent,
                        u8 cmd, u8 protocol, struct qed_sp_init_data *p_data)
@@ -80,7 +93,7 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,
 
        case QED_SPQ_MODE_BLOCK:
                if (!p_data->p_comp_data)
-                       return -EINVAL;
+                       goto err;
 
                p_ent->comp_cb.cookie = p_data->p_comp_data->cookie;
                break;
@@ -95,7 +108,7 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,
        default:
                DP_NOTICE(p_hwfn, "Unknown SPQE completion mode %d\n",
                          p_ent->comp_mode);
-               return -EINVAL;
+               goto err;
        }
 
        DP_VERBOSE(p_hwfn, QED_MSG_SPQ,
@@ -109,6 +122,11 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,
        memset(&p_ent->ramrod, 0, sizeof(p_ent->ramrod));
 
        return 0;
+
+err:
+       qed_sp_destroy_request(p_hwfn, p_ent);
+
+       return -EINVAL;
 }
 
 static enum tunnel_clss qed_tunn_clss_to_fw_clss(u8 type)
index c4a6274..0a9c5bb 100644 (file)
@@ -142,6 +142,7 @@ static int qed_spq_block(struct qed_hwfn *p_hwfn,
 
        DP_INFO(p_hwfn, "Ramrod is stuck, requesting MCP drain\n");
        rc = qed_mcp_drain(p_hwfn, p_ptt);
+       qed_ptt_release(p_hwfn, p_ptt);
        if (rc) {
                DP_NOTICE(p_hwfn, "MCP drain failed\n");
                goto err;
@@ -150,18 +151,15 @@ static int qed_spq_block(struct qed_hwfn *p_hwfn,
        /* Retry after drain */
        rc = __qed_spq_block(p_hwfn, p_ent, p_fw_ret, true);
        if (!rc)
-               goto out;
+               return 0;
 
        comp_done = (struct qed_spq_comp_done *)p_ent->comp_cb.cookie;
-       if (comp_done->done == 1)
+       if (comp_done->done == 1) {
                if (p_fw_ret)
                        *p_fw_ret = comp_done->fw_return_code;
-out:
-       qed_ptt_release(p_hwfn, p_ptt);
-       return 0;
-
+               return 0;
+       }
 err:
-       qed_ptt_release(p_hwfn, p_ptt);
        DP_NOTICE(p_hwfn,
                  "Ramrod is stuck [CID %08x cmd %02x protocol %02x echo %04x]\n",
                  le32_to_cpu(p_ent->elem.hdr.cid),
@@ -685,6 +683,8 @@ static int qed_spq_add_entry(struct qed_hwfn *p_hwfn,
                        /* EBLOCK responsible to free the allocated p_ent */
                        if (p_ent->comp_mode != QED_SPQ_MODE_EBLOCK)
                                kfree(p_ent);
+                       else
+                               p_ent->post_ent = p_en2;
 
                        p_ent = p_en2;
                }
@@ -767,6 +767,25 @@ static int qed_spq_pend_post(struct qed_hwfn *p_hwfn)
                                 SPQ_HIGH_PRI_RESERVE_DEFAULT);
 }
 
+/* Avoid overriding of SPQ entries when getting out-of-order completions, by
+ * marking the completions in a bitmap and increasing the chain consumer only
+ * for the first successive completed entries.
+ */
+static void qed_spq_comp_bmap_update(struct qed_hwfn *p_hwfn, __le16 echo)
+{
+       u16 pos = le16_to_cpu(echo) % SPQ_RING_SIZE;
+       struct qed_spq *p_spq = p_hwfn->p_spq;
+
+       __set_bit(pos, p_spq->p_comp_bitmap);
+       while (test_bit(p_spq->comp_bitmap_idx,
+                       p_spq->p_comp_bitmap)) {
+               __clear_bit(p_spq->comp_bitmap_idx,
+                           p_spq->p_comp_bitmap);
+               p_spq->comp_bitmap_idx++;
+               qed_chain_return_produced(&p_spq->chain);
+       }
+}
+
 int qed_spq_post(struct qed_hwfn *p_hwfn,
                 struct qed_spq_entry *p_ent, u8 *fw_return_code)
 {
@@ -824,11 +843,12 @@ int qed_spq_post(struct qed_hwfn *p_hwfn,
                                   p_ent->queue == &p_spq->unlimited_pending);
 
                if (p_ent->queue == &p_spq->unlimited_pending) {
-                       /* This is an allocated p_ent which does not need to
-                        * return to pool.
-                        */
+                       struct qed_spq_entry *p_post_ent = p_ent->post_ent;
+
                        kfree(p_ent);
-                       return rc;
+
+                       /* Return the entry which was actually posted */
+                       p_ent = p_post_ent;
                }
 
                if (rc)
@@ -842,7 +862,7 @@ int qed_spq_post(struct qed_hwfn *p_hwfn,
 spq_post_fail2:
        spin_lock_bh(&p_spq->lock);
        list_del(&p_ent->list);
-       qed_chain_return_produced(&p_spq->chain);
+       qed_spq_comp_bmap_update(p_hwfn, p_ent->elem.hdr.echo);
 
 spq_post_fail:
        /* return to the free pool */
@@ -874,25 +894,8 @@ int qed_spq_completion(struct qed_hwfn *p_hwfn,
        spin_lock_bh(&p_spq->lock);
        list_for_each_entry_safe(p_ent, tmp, &p_spq->completion_pending, list) {
                if (p_ent->elem.hdr.echo == echo) {
-                       u16 pos = le16_to_cpu(echo) % SPQ_RING_SIZE;
-
                        list_del(&p_ent->list);
-
-                       /* Avoid overriding of SPQ entries when getting
-                        * out-of-order completions, by marking the completions
-                        * in a bitmap and increasing the chain consumer only
-                        * for the first successive completed entries.
-                        */
-                       __set_bit(pos, p_spq->p_comp_bitmap);
-
-                       while (test_bit(p_spq->comp_bitmap_idx,
-                                       p_spq->p_comp_bitmap)) {
-                               __clear_bit(p_spq->comp_bitmap_idx,
-                                           p_spq->p_comp_bitmap);
-                               p_spq->comp_bitmap_idx++;
-                               qed_chain_return_produced(&p_spq->chain);
-                       }
-
+                       qed_spq_comp_bmap_update(p_hwfn, echo);
                        p_spq->comp_count++;
                        found = p_ent;
                        break;
@@ -931,11 +934,9 @@ int qed_spq_completion(struct qed_hwfn *p_hwfn,
                           QED_MSG_SPQ,
                           "Got a completion without a callback function\n");
 
-       if ((found->comp_mode != QED_SPQ_MODE_EBLOCK) ||
-           (found->queue == &p_spq->unlimited_pending))
+       if (found->comp_mode != QED_SPQ_MODE_EBLOCK)
                /* EBLOCK  is responsible for returning its own entry into the
-                * free list, unless it originally added the entry into the
-                * unlimited pending list.
+                * free list.
                 */
                qed_spq_return_entry(p_hwfn, found);
 
index 9b08a9d..ca6290f 100644 (file)
@@ -101,6 +101,7 @@ static int qed_sp_vf_start(struct qed_hwfn *p_hwfn, struct qed_vf_info *p_vf)
        default:
                DP_NOTICE(p_hwfn, "Unknown VF personality %d\n",
                          p_hwfn->hw_info.personality);
+               qed_sp_destroy_request(p_hwfn, p_ent);
                return -EINVAL;
        }
 
index 9647578..14f26bf 100644 (file)
@@ -459,7 +459,7 @@ static int qlcnic_tx_pkt(struct qlcnic_adapter *adapter,
                         struct cmd_desc_type0 *first_desc, struct sk_buff *skb,
                         struct qlcnic_host_tx_ring *tx_ring)
 {
-       u8 l4proto, opcode = 0, hdr_len = 0;
+       u8 l4proto, opcode = 0, hdr_len = 0, tag_vlan = 0;
        u16 flags = 0, vlan_tci = 0;
        int copied, offset, copy_len, size;
        struct cmd_desc_type0 *hwdesc;
@@ -472,14 +472,16 @@ static int qlcnic_tx_pkt(struct qlcnic_adapter *adapter,
                flags = QLCNIC_FLAGS_VLAN_TAGGED;
                vlan_tci = ntohs(vh->h_vlan_TCI);
                protocol = ntohs(vh->h_vlan_encapsulated_proto);
+               tag_vlan = 1;
        } else if (skb_vlan_tag_present(skb)) {
                flags = QLCNIC_FLAGS_VLAN_OOB;
                vlan_tci = skb_vlan_tag_get(skb);
+               tag_vlan = 1;
        }
        if (unlikely(adapter->tx_pvid)) {
-               if (vlan_tci && !(adapter->flags & QLCNIC_TAGGING_ENABLED))
+               if (tag_vlan && !(adapter->flags & QLCNIC_TAGGING_ENABLED))
                        return -EIO;
-               if (vlan_tci && (adapter->flags & QLCNIC_TAGGING_ENABLED))
+               if (tag_vlan && (adapter->flags & QLCNIC_TAGGING_ENABLED))
                        goto set_flags;
 
                flags = QLCNIC_FLAGS_VLAN_OOB;
index 0afc3d3..d11c16a 100644 (file)
@@ -234,7 +234,7 @@ int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,
                      struct net_device *real_dev,
                      struct rmnet_endpoint *ep)
 {
-       struct rmnet_priv *priv;
+       struct rmnet_priv *priv = netdev_priv(rmnet_dev);
        int rc;
 
        if (ep->egress_dev)
@@ -247,6 +247,8 @@ int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,
        rmnet_dev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
        rmnet_dev->hw_features |= NETIF_F_SG;
 
+       priv->real_dev = real_dev;
+
        rc = register_netdevice(rmnet_dev);
        if (!rc) {
                ep->egress_dev = rmnet_dev;
@@ -255,9 +257,7 @@ int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,
 
                rmnet_dev->rtnl_link_ops = &rmnet_link_ops;
 
-               priv = netdev_priv(rmnet_dev);
                priv->mux_id = id;
-               priv->real_dev = real_dev;
 
                netdev_dbg(rmnet_dev, "rmnet dev created\n");
        }
index b1b305f..272b9ca 100644 (file)
@@ -365,7 +365,8 @@ struct dma_features {
 
 /* GMAC TX FIFO is 8K, Rx FIFO is 16K */
 #define BUF_SIZE_16KiB 16384
-#define BUF_SIZE_8KiB 8192
+/* RX Buffer size must be < 8191 and multiple of 4/8/16 bytes */
+#define BUF_SIZE_8KiB 8188
 #define BUF_SIZE_4KiB 4096
 #define BUF_SIZE_2KiB 2048
 
index ca9d7e4..40d6356 100644 (file)
@@ -31,7 +31,7 @@
 /* Enhanced descriptors */
 static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end)
 {
-       p->des1 |= cpu_to_le32(((BUF_SIZE_8KiB - 1)
+       p->des1 |= cpu_to_le32((BUF_SIZE_8KiB
                        << ERDES1_BUFFER2_SIZE_SHIFT)
                   & ERDES1_BUFFER2_SIZE_MASK);
 
index 77914c8..5ef91a7 100644 (file)
@@ -262,7 +262,7 @@ static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
                                  int mode, int end)
 {
        p->des0 |= cpu_to_le32(RDES0_OWN);
-       p->des1 |= cpu_to_le32((BUF_SIZE_8KiB - 1) & ERDES1_BUFFER1_SIZE_MASK);
+       p->des1 |= cpu_to_le32(BUF_SIZE_8KiB & ERDES1_BUFFER1_SIZE_MASK);
 
        if (mode == STMMAC_CHAIN_MODE)
                ehn_desc_rx_set_on_chain(p);
index abc3f85..d8c5bc4 100644 (file)
@@ -140,7 +140,7 @@ static void clean_desc3(void *priv_ptr, struct dma_desc *p)
 static int set_16kib_bfsize(int mtu)
 {
        int ret = 0;
-       if (unlikely(mtu >= BUF_SIZE_8KiB))
+       if (unlikely(mtu > BUF_SIZE_8KiB))
                ret = BUF_SIZE_16KiB;
        return ret;
 }
index 3b7f10a..c5cae8e 100644 (file)
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+// SPDX-License-Identifier: GPL-2.0+
 /*     FDDI network adapter driver for DEC FDDIcontroller 700/700-C devices.
  *
  *     Copyright (c) 2018  Maciej W. Rozycki
@@ -56,7 +56,7 @@
 #define DRV_VERSION "v.1.1.4"
 #define DRV_RELDATE "Oct  6 2018"
 
-static char version[] =
+static const char version[] =
        DRV_NAME ": " DRV_VERSION "  " DRV_RELDATE "  Maciej W. Rozycki\n";
 
 MODULE_AUTHOR("Maciej W. Rozycki <macro@linux-mips.org>");
@@ -784,7 +784,7 @@ err_rx:
 static void fza_tx_smt(struct net_device *dev)
 {
        struct fza_private *fp = netdev_priv(dev);
-       struct fza_buffer_tx __iomem *smt_tx_ptr, *skb_data_ptr;
+       struct fza_buffer_tx __iomem *smt_tx_ptr;
        int i, len;
        u32 own;
 
@@ -799,6 +799,7 @@ static void fza_tx_smt(struct net_device *dev)
 
                if (!netif_queue_stopped(dev)) {
                        if (dev_nit_active(dev)) {
+                               struct fza_buffer_tx *skb_data_ptr;
                                struct sk_buff *skb;
 
                                /* Length must be a multiple of 4 as only word
index b06acf3..93bda61 100644 (file)
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*     FDDI network adapter driver for DEC FDDIcontroller 700/700-C devices.
  *
  *     Copyright (c) 2018  Maciej W. Rozycki
@@ -235,6 +235,7 @@ struct fza_ring_cmd {
 #define FZA_RING_CMD           0x200400        /* command ring address */
 #define FZA_RING_CMD_SIZE      0x40            /* command descriptor ring
                                                 * size
+                                                */
 /* Command constants. */
 #define FZA_RING_CMD_MASK      0x7fffffff
 #define FZA_RING_CMD_NOP       0x00000000      /* nop */
index e86ea10..7045370 100644 (file)
@@ -92,7 +92,7 @@ static int bcm54612e_config_init(struct phy_device *phydev)
        return 0;
 }
 
-static int bcm5481x_config(struct phy_device *phydev)
+static int bcm54xx_config_clock_delay(struct phy_device *phydev)
 {
        int rc, val;
 
@@ -429,7 +429,7 @@ static int bcm5481_config_aneg(struct phy_device *phydev)
        ret = genphy_config_aneg(phydev);
 
        /* Then we can set up the delay. */
-       bcm5481x_config(phydev);
+       bcm54xx_config_clock_delay(phydev);
 
        if (of_property_read_bool(np, "enet-phy-lane-swap")) {
                /* Lane Swap - Undocumented register...magic! */
@@ -442,6 +442,19 @@ static int bcm5481_config_aneg(struct phy_device *phydev)
        return ret;
 }
 
+static int bcm54616s_config_aneg(struct phy_device *phydev)
+{
+       int ret;
+
+       /* Aneg firsly. */
+       ret = genphy_config_aneg(phydev);
+
+       /* Then we can set up the delay. */
+       bcm54xx_config_clock_delay(phydev);
+
+       return ret;
+}
+
 static int brcm_phy_setbits(struct phy_device *phydev, int reg, int set)
 {
        int val;
@@ -636,6 +649,7 @@ static struct phy_driver broadcom_drivers[] = {
        .features       = PHY_GBIT_FEATURES,
        .flags          = PHY_HAS_INTERRUPT,
        .config_init    = bcm54xx_config_init,
+       .config_aneg    = bcm54616s_config_aneg,
        .ack_interrupt  = bcm_phy_ack_intr,
        .config_intr    = bcm_phy_config_intr,
 }, {
index 7fc8508..271e8ad 100644 (file)
@@ -220,7 +220,7 @@ static struct phy_driver realtek_drvs[] = {
                .flags          = PHY_HAS_INTERRUPT,
        }, {
                .phy_id         = 0x001cc816,
-               .name           = "RTL8201F 10/100Mbps Ethernet",
+               .name           = "RTL8201F Fast Ethernet",
                .phy_id_mask    = 0x001fffff,
                .features       = PHY_BASIC_FEATURES,
                .flags          = PHY_HAS_INTERRUPT,
index 262e7a3..f2d01cb 100644 (file)
@@ -1321,6 +1321,8 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
        dev->net->ethtool_ops = &smsc95xx_ethtool_ops;
        dev->net->flags |= IFF_MULTICAST;
        dev->net->hard_header_len += SMSC95XX_TX_OVERHEAD_CSUM;
+       dev->net->min_mtu = ETH_MIN_MTU;
+       dev->net->max_mtu = ETH_DATA_LEN;
        dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
 
        pdata->dev = dev;
@@ -1598,6 +1600,8 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
                return ret;
        }
 
+       cancel_delayed_work_sync(&pdata->carrier_check);
+
        if (pdata->suspend_flags) {
                netdev_warn(dev->net, "error during last resume\n");
                pdata->suspend_flags = 0;
@@ -1840,6 +1844,11 @@ done:
         */
        if (ret && PMSG_IS_AUTO(message))
                usbnet_resume(intf);
+
+       if (ret)
+               schedule_delayed_work(&pdata->carrier_check,
+                                     CARRIER_CHECK_DELAY);
+
        return ret;
 }
 
index 2e65be8..559d567 100644 (file)
@@ -1519,8 +1519,10 @@ static void __nvme_revalidate_disk(struct gendisk *disk, struct nvme_id_ns *id)
        if (ns->ndev)
                nvme_nvm_update_nvm_info(ns);
 #ifdef CONFIG_NVME_MULTIPATH
-       if (ns->head->disk)
+       if (ns->head->disk) {
                nvme_update_disk_info(ns->head->disk, ns, id);
+               blk_queue_stack_limits(ns->head->disk->queue, ns->queue);
+       }
 #endif
 }
 
index 5e3cc8c..9901afd 100644 (file)
@@ -285,6 +285,7 @@ int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *head)
        blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
        /* set to a default value for 512 until disk is validated */
        blk_queue_logical_block_size(q, 512);
+       blk_set_stacking_limits(&q->limits);
 
        /* we need to propagate up the VMC settings */
        if (ctrl->vwc & NVME_CTRL_VWC_PRESENT)
index f4efe28..a5f9bbc 100644 (file)
@@ -420,7 +420,7 @@ static void nvmet_p2pmem_ns_add_p2p(struct nvmet_ctrl *ctrl,
        struct pci_dev *p2p_dev;
        int ret;
 
-       if (!ctrl->p2p_client)
+       if (!ctrl->p2p_client || !ns->use_p2pmem)
                return;
 
        if (ns->p2p_dev) {
index ddce100..3f7971d 100644 (file)
@@ -122,7 +122,6 @@ struct nvmet_rdma_device {
        int                     inline_page_count;
 };
 
-static struct workqueue_struct *nvmet_rdma_delete_wq;
 static bool nvmet_rdma_use_srq;
 module_param_named(use_srq, nvmet_rdma_use_srq, bool, 0444);
 MODULE_PARM_DESC(use_srq, "Use shared receive queue.");
@@ -1274,12 +1273,12 @@ static int nvmet_rdma_queue_connect(struct rdma_cm_id *cm_id,
 
        if (queue->host_qid == 0) {
                /* Let inflight controller teardown complete */
-               flush_workqueue(nvmet_rdma_delete_wq);
+               flush_scheduled_work();
        }
 
        ret = nvmet_rdma_cm_accept(cm_id, queue, &event->param.conn);
        if (ret) {
-               queue_work(nvmet_rdma_delete_wq, &queue->release_work);
+               schedule_work(&queue->release_work);
                /* Destroying rdma_cm id is not needed here */
                return 0;
        }
@@ -1344,7 +1343,7 @@ static void __nvmet_rdma_queue_disconnect(struct nvmet_rdma_queue *queue)
 
        if (disconnect) {
                rdma_disconnect(queue->cm_id);
-               queue_work(nvmet_rdma_delete_wq, &queue->release_work);
+               schedule_work(&queue->release_work);
        }
 }
 
@@ -1374,7 +1373,7 @@ static void nvmet_rdma_queue_connect_fail(struct rdma_cm_id *cm_id,
        mutex_unlock(&nvmet_rdma_queue_mutex);
 
        pr_err("failed to connect queue %d\n", queue->idx);
-       queue_work(nvmet_rdma_delete_wq, &queue->release_work);
+       schedule_work(&queue->release_work);
 }
 
 /**
@@ -1656,17 +1655,8 @@ static int __init nvmet_rdma_init(void)
        if (ret)
                goto err_ib_client;
 
-       nvmet_rdma_delete_wq = alloc_workqueue("nvmet-rdma-delete-wq",
-                       WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_SYSFS, 0);
-       if (!nvmet_rdma_delete_wq) {
-               ret = -ENOMEM;
-               goto err_unreg_transport;
-       }
-
        return 0;
 
-err_unreg_transport:
-       nvmet_unregister_transport(&nvmet_rdma_ops);
 err_ib_client:
        ib_unregister_client(&nvmet_rdma_ib_client);
        return ret;
@@ -1674,7 +1664,6 @@ err_ib_client:
 
 static void __exit nvmet_rdma_exit(void)
 {
-       destroy_workqueue(nvmet_rdma_delete_wq);
        nvmet_unregister_transport(&nvmet_rdma_ops);
        ib_unregister_client(&nvmet_rdma_ib_client);
        WARN_ON_ONCE(!list_empty(&nvmet_rdma_queue_list));
index 0f27fad..5592437 100644 (file)
@@ -149,9 +149,11 @@ int of_dma_configure(struct device *dev, struct device_node *np, bool force_dma)
         * set by the driver.
         */
        mask = DMA_BIT_MASK(ilog2(dma_addr + size - 1) + 1);
-       dev->bus_dma_mask = mask;
        dev->coherent_dma_mask &= mask;
        *dev->dma_mask &= mask;
+       /* ...but only set bus mask if we found valid dma-ranges earlier */
+       if (!ret)
+               dev->bus_dma_mask = mask;
 
        coherent = of_dma_is_coherent(np);
        dev_dbg(dev, "device is%sdma coherent\n",
index 35c64a4..fe6b136 100644 (file)
@@ -104,9 +104,14 @@ static int __init of_numa_parse_distance_map_v1(struct device_node *map)
                distance = of_read_number(matrix, 1);
                matrix++;
 
+               if ((nodea == nodeb && distance != LOCAL_DISTANCE) ||
+                   (nodea != nodeb && distance <= LOCAL_DISTANCE)) {
+                       pr_err("Invalid distance[node%d -> node%d] = %d\n",
+                              nodea, nodeb, distance);
+                       return -EINVAL;
+               }
+
                numa_set_distance(nodea, nodeb, distance);
-               pr_debug("distance[node%d -> node%d] = %d\n",
-                        nodea, nodeb, distance);
 
                /* Set default distance of node B->A same as A->B */
                if (nodeb > nodea)
index 6843bc7..04e294d 100644 (file)
@@ -87,6 +87,18 @@ struct qeth_dbf_info {
 #define SENSE_RESETTING_EVENT_BYTE 1
 #define SENSE_RESETTING_EVENT_FLAG 0x80
 
+static inline u32 qeth_get_device_id(struct ccw_device *cdev)
+{
+       struct ccw_dev_id dev_id;
+       u32 id;
+
+       ccw_device_get_id(cdev, &dev_id);
+       id = dev_id.devno;
+       id |= (u32) (dev_id.ssid << 16);
+
+       return id;
+}
+
 /*
  * Common IO related definitions
  */
@@ -97,7 +109,8 @@ struct qeth_dbf_info {
 #define CARD_RDEV_ID(card) dev_name(&card->read.ccwdev->dev)
 #define CARD_WDEV_ID(card) dev_name(&card->write.ccwdev->dev)
 #define CARD_DDEV_ID(card) dev_name(&card->data.ccwdev->dev)
-#define CHANNEL_ID(channel) dev_name(&channel->ccwdev->dev)
+#define CCW_DEVID(cdev)                (qeth_get_device_id(cdev))
+#define CARD_DEVID(card)       (CCW_DEVID(CARD_RDEV(card)))
 
 /**
  * card stuff
@@ -830,6 +843,11 @@ struct qeth_trap_id {
 /*some helper functions*/
 #define QETH_CARD_IFNAME(card) (((card)->dev)? (card)->dev->name : "")
 
+static inline bool qeth_netdev_is_registered(struct net_device *dev)
+{
+       return dev->netdev_ops != NULL;
+}
+
 static inline void qeth_scrub_qdio_buffer(struct qdio_buffer *buf,
                                          unsigned int elements)
 {
@@ -973,7 +991,7 @@ int qeth_wait_for_threads(struct qeth_card *, unsigned long);
 int qeth_do_run_thread(struct qeth_card *, unsigned long);
 void qeth_clear_thread_start_bit(struct qeth_card *, unsigned long);
 void qeth_clear_thread_running_bit(struct qeth_card *, unsigned long);
-int qeth_core_hardsetup_card(struct qeth_card *);
+int qeth_core_hardsetup_card(struct qeth_card *card, bool *carrier_ok);
 void qeth_print_status_message(struct qeth_card *);
 int qeth_init_qdio_queues(struct qeth_card *);
 int qeth_send_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *,
@@ -1028,11 +1046,6 @@ int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
 int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
 void qeth_trace_features(struct qeth_card *);
 void qeth_close_dev(struct qeth_card *);
-int qeth_send_setassparms(struct qeth_card *, struct qeth_cmd_buffer *, __u16,
-                         long,
-                         int (*reply_cb)(struct qeth_card *,
-                                         struct qeth_reply *, unsigned long),
-                         void *);
 int qeth_setassparms_cb(struct qeth_card *, struct qeth_reply *, unsigned long);
 struct qeth_cmd_buffer *qeth_get_setassparms_cmd(struct qeth_card *,
                                                 enum qeth_ipa_funcs,
index 3274f13..4bce5ae 100644 (file)
@@ -167,6 +167,8 @@ const char *qeth_get_cardname_short(struct qeth_card *card)
                                return "OSD_1000";
                        case QETH_LINK_TYPE_10GBIT_ETH:
                                return "OSD_10GIG";
+                       case QETH_LINK_TYPE_25GBIT_ETH:
+                               return "OSD_25GIG";
                        case QETH_LINK_TYPE_LANE_ETH100:
                                return "OSD_FE_LANE";
                        case QETH_LINK_TYPE_LANE_TR:
@@ -554,8 +556,8 @@ static int __qeth_issue_next_read(struct qeth_card *card)
        if (!iob) {
                dev_warn(&card->gdev->dev, "The qeth device driver "
                        "failed to recover an error on the device\n");
-               QETH_DBF_MESSAGE(2, "%s issue_next_read failed: no iob "
-                       "available\n", dev_name(&card->gdev->dev));
+               QETH_DBF_MESSAGE(2, "issue_next_read on device %x failed: no iob available\n",
+                                CARD_DEVID(card));
                return -ENOMEM;
        }
        qeth_setup_ccw(channel->ccw, CCW_CMD_READ, QETH_BUFSIZE, iob->data);
@@ -563,8 +565,8 @@ static int __qeth_issue_next_read(struct qeth_card *card)
        rc = ccw_device_start(channel->ccwdev, channel->ccw,
                              (addr_t) iob, 0, 0);
        if (rc) {
-               QETH_DBF_MESSAGE(2, "%s error in starting next read ccw! "
-                       "rc=%i\n", dev_name(&card->gdev->dev), rc);
+               QETH_DBF_MESSAGE(2, "error %i on device %x when starting next read ccw!\n",
+                                rc, CARD_DEVID(card));
                atomic_set(&channel->irq_pending, 0);
                card->read_or_write_problem = 1;
                qeth_schedule_recovery(card);
@@ -613,16 +615,14 @@ static void qeth_issue_ipa_msg(struct qeth_ipa_cmd *cmd, int rc,
        const char *ipa_name;
        int com = cmd->hdr.command;
        ipa_name = qeth_get_ipa_cmd_name(com);
+
        if (rc)
-               QETH_DBF_MESSAGE(2, "IPA: %s(x%X) for %s/%s returned "
-                               "x%X \"%s\"\n",
-                               ipa_name, com, dev_name(&card->gdev->dev),
-                               QETH_CARD_IFNAME(card), rc,
-                               qeth_get_ipa_msg(rc));
+               QETH_DBF_MESSAGE(2, "IPA: %s(%#x) for device %x returned %#x \"%s\"\n",
+                                ipa_name, com, CARD_DEVID(card), rc,
+                                qeth_get_ipa_msg(rc));
        else
-               QETH_DBF_MESSAGE(5, "IPA: %s(x%X) for %s/%s succeeded\n",
-                               ipa_name, com, dev_name(&card->gdev->dev),
-                               QETH_CARD_IFNAME(card));
+               QETH_DBF_MESSAGE(5, "IPA: %s(%#x) for device %x succeeded\n",
+                                ipa_name, com, CARD_DEVID(card));
 }
 
 static struct qeth_ipa_cmd *qeth_check_ipa_data(struct qeth_card *card,
@@ -711,7 +711,7 @@ static int qeth_check_idx_response(struct qeth_card *card,
 
        QETH_DBF_HEX(CTRL, 2, buffer, QETH_DBF_CTRL_LEN);
        if ((buffer[2] & 0xc0) == 0xc0) {
-               QETH_DBF_MESSAGE(2, "received an IDX TERMINATE with cause code %#02x\n",
+               QETH_DBF_MESSAGE(2, "received an IDX TERMINATE with cause code %#04x\n",
                                 buffer[4]);
                QETH_CARD_TEXT(card, 2, "ckidxres");
                QETH_CARD_TEXT(card, 2, " idxterm");
@@ -972,8 +972,8 @@ static int qeth_get_problem(struct qeth_card *card, struct ccw_device *cdev,
                QETH_CARD_TEXT(card, 2, "CGENCHK");
                dev_warn(&cdev->dev, "The qeth device driver "
                        "failed to recover an error on the device\n");
-               QETH_DBF_MESSAGE(2, "%s check on device dstat=x%x, cstat=x%x\n",
-                       dev_name(&cdev->dev), dstat, cstat);
+               QETH_DBF_MESSAGE(2, "check on channel %x with dstat=%#x, cstat=%#x\n",
+                                CCW_DEVID(cdev), dstat, cstat);
                print_hex_dump(KERN_WARNING, "qeth: irb ", DUMP_PREFIX_OFFSET,
                                16, 1, irb, 64, 1);
                return 1;
@@ -1013,8 +1013,8 @@ static long qeth_check_irb_error(struct qeth_card *card,
 
        switch (PTR_ERR(irb)) {
        case -EIO:
-               QETH_DBF_MESSAGE(2, "%s i/o-error on device\n",
-                       dev_name(&cdev->dev));
+               QETH_DBF_MESSAGE(2, "i/o-error on channel %x\n",
+                                CCW_DEVID(cdev));
                QETH_CARD_TEXT(card, 2, "ckirberr");
                QETH_CARD_TEXT_(card, 2, "  rc%d", -EIO);
                break;
@@ -1031,8 +1031,8 @@ static long qeth_check_irb_error(struct qeth_card *card,
                }
                break;
        default:
-               QETH_DBF_MESSAGE(2, "%s unknown error %ld on device\n",
-                       dev_name(&cdev->dev), PTR_ERR(irb));
+               QETH_DBF_MESSAGE(2, "unknown error %ld on channel %x\n",
+                                PTR_ERR(irb), CCW_DEVID(cdev));
                QETH_CARD_TEXT(card, 2, "ckirberr");
                QETH_CARD_TEXT(card, 2, "  rc???");
        }
@@ -1114,9 +1114,9 @@ static void qeth_irq(struct ccw_device *cdev, unsigned long intparm,
                        dev_warn(&channel->ccwdev->dev,
                                "The qeth device driver failed to recover "
                                "an error on the device\n");
-                       QETH_DBF_MESSAGE(2, "%s sense data available. cstat "
-                               "0x%X dstat 0x%X\n",
-                               dev_name(&channel->ccwdev->dev), cstat, dstat);
+                       QETH_DBF_MESSAGE(2, "sense data available on channel %x: cstat %#X dstat %#X\n",
+                                        CCW_DEVID(channel->ccwdev), cstat,
+                                        dstat);
                        print_hex_dump(KERN_WARNING, "qeth: irb ",
                                DUMP_PREFIX_OFFSET, 16, 1, irb, 32, 1);
                        print_hex_dump(KERN_WARNING, "qeth: sense data ",
@@ -1890,8 +1890,8 @@ static int qeth_idx_activate_channel(struct qeth_card *card,
        if (channel->state != CH_STATE_ACTIVATING) {
                dev_warn(&channel->ccwdev->dev, "The qeth device driver"
                        " failed to recover an error on the device\n");
-               QETH_DBF_MESSAGE(2, "%s IDX activate timed out\n",
-                       dev_name(&channel->ccwdev->dev));
+               QETH_DBF_MESSAGE(2, "IDX activate timed out on channel %x\n",
+                                CCW_DEVID(channel->ccwdev));
                QETH_DBF_TEXT_(SETUP, 2, "2err%d", -ETIME);
                return -ETIME;
        }
@@ -1926,17 +1926,15 @@ static void qeth_idx_write_cb(struct qeth_card *card,
                                "The adapter is used exclusively by another "
                                "host\n");
                else
-                       QETH_DBF_MESSAGE(2, "%s IDX_ACTIVATE on write channel:"
-                               " negative reply\n",
-                               dev_name(&channel->ccwdev->dev));
+                       QETH_DBF_MESSAGE(2, "IDX_ACTIVATE on channel %x: negative reply\n",
+                                        CCW_DEVID(channel->ccwdev));
                goto out;
        }
        memcpy(&temp, QETH_IDX_ACT_FUNC_LEVEL(iob->data), 2);
        if ((temp & ~0x0100) != qeth_peer_func_level(card->info.func_level)) {
-               QETH_DBF_MESSAGE(2, "%s IDX_ACTIVATE on write channel: "
-                       "function level mismatch (sent: 0x%x, received: "
-                       "0x%x)\n", dev_name(&channel->ccwdev->dev),
-                       card->info.func_level, temp);
+               QETH_DBF_MESSAGE(2, "IDX_ACTIVATE on channel %x: function level mismatch (sent: %#x, received: %#x)\n",
+                                CCW_DEVID(channel->ccwdev),
+                                card->info.func_level, temp);
                goto out;
        }
        channel->state = CH_STATE_UP;
@@ -1973,9 +1971,8 @@ static void qeth_idx_read_cb(struct qeth_card *card,
                                "insufficient authorization\n");
                        break;
                default:
-                       QETH_DBF_MESSAGE(2, "%s IDX_ACTIVATE on read channel:"
-                               " negative reply\n",
-                               dev_name(&channel->ccwdev->dev));
+                       QETH_DBF_MESSAGE(2, "IDX_ACTIVATE on channel %x: negative reply\n",
+                                        CCW_DEVID(channel->ccwdev));
                }
                QETH_CARD_TEXT_(card, 2, "idxread%c",
                        QETH_IDX_ACT_CAUSE_CODE(iob->data));
@@ -1984,10 +1981,9 @@ static void qeth_idx_read_cb(struct qeth_card *card,
 
        memcpy(&temp, QETH_IDX_ACT_FUNC_LEVEL(iob->data), 2);
        if (temp != qeth_peer_func_level(card->info.func_level)) {
-               QETH_DBF_MESSAGE(2, "%s IDX_ACTIVATE on read channel: function "
-                       "level mismatch (sent: 0x%x, received: 0x%x)\n",
-                       dev_name(&channel->ccwdev->dev),
-                       card->info.func_level, temp);
+               QETH_DBF_MESSAGE(2, "IDX_ACTIVATE on channel %x: function level mismatch (sent: %#x, received: %#x)\n",
+                                CCW_DEVID(channel->ccwdev),
+                                card->info.func_level, temp);
                goto out;
        }
        memcpy(&card->token.issuer_rm_r,
@@ -2096,9 +2092,8 @@ int qeth_send_control_data(struct qeth_card *card, int len,
                                      (addr_t) iob, 0, 0, event_timeout);
        spin_unlock_irq(get_ccwdev_lock(channel->ccwdev));
        if (rc) {
-               QETH_DBF_MESSAGE(2, "%s qeth_send_control_data: "
-                       "ccw_device_start rc = %i\n",
-                       dev_name(&channel->ccwdev->dev), rc);
+               QETH_DBF_MESSAGE(2, "qeth_send_control_data on device %x: ccw_device_start rc = %i\n",
+                                CARD_DEVID(card), rc);
                QETH_CARD_TEXT_(card, 2, " err%d", rc);
                spin_lock_irq(&card->lock);
                list_del_init(&reply->list);
@@ -2853,8 +2848,8 @@ struct qeth_cmd_buffer *qeth_get_ipacmd_buffer(struct qeth_card *card,
        } else {
                dev_warn(&card->gdev->dev,
                         "The qeth driver ran out of channel command buffers\n");
-               QETH_DBF_MESSAGE(1, "%s The qeth driver ran out of channel command buffers",
-                                dev_name(&card->gdev->dev));
+               QETH_DBF_MESSAGE(1, "device %x ran out of channel command buffers",
+                                CARD_DEVID(card));
        }
 
        return iob;
@@ -2989,10 +2984,9 @@ static int qeth_query_ipassists_cb(struct qeth_card *card,
                return 0;
        default:
                if (cmd->hdr.return_code) {
-                       QETH_DBF_MESSAGE(1, "%s IPA_CMD_QIPASSIST: Unhandled "
-                                               "rc=%d\n",
-                                               dev_name(&card->gdev->dev),
-                                               cmd->hdr.return_code);
+                       QETH_DBF_MESSAGE(1, "IPA_CMD_QIPASSIST on device %x: Unhandled rc=%#x\n",
+                                        CARD_DEVID(card),
+                                        cmd->hdr.return_code);
                        return 0;
                }
        }
@@ -3004,8 +2998,8 @@ static int qeth_query_ipassists_cb(struct qeth_card *card,
                card->options.ipa6.supported_funcs = cmd->hdr.ipa_supported;
                card->options.ipa6.enabled_funcs = cmd->hdr.ipa_enabled;
        } else
-               QETH_DBF_MESSAGE(1, "%s IPA_CMD_QIPASSIST: Flawed LIC detected"
-                                       "\n", dev_name(&card->gdev->dev));
+               QETH_DBF_MESSAGE(1, "IPA_CMD_QIPASSIST on device %x: Flawed LIC detected\n",
+                                CARD_DEVID(card));
        return 0;
 }
 
@@ -4297,10 +4291,9 @@ static int qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card,
                cmd->data.setadapterparms.hdr.return_code);
        if (cmd->data.setadapterparms.hdr.return_code !=
                                                SET_ACCESS_CTRL_RC_SUCCESS)
-               QETH_DBF_MESSAGE(3, "ERR:SET_ACCESS_CTRL(%s,%d)==%d\n",
-                               card->gdev->dev.kobj.name,
-                               access_ctrl_req->subcmd_code,
-                               cmd->data.setadapterparms.hdr.return_code);
+               QETH_DBF_MESSAGE(3, "ERR:SET_ACCESS_CTRL(%#x) on device %x: %#x\n",
+                                access_ctrl_req->subcmd_code, CARD_DEVID(card),
+                                cmd->data.setadapterparms.hdr.return_code);
        switch (cmd->data.setadapterparms.hdr.return_code) {
        case SET_ACCESS_CTRL_RC_SUCCESS:
                if (card->options.isolation == ISOLATION_MODE_NONE) {
@@ -4312,14 +4305,14 @@ static int qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card,
                }
                break;
        case SET_ACCESS_CTRL_RC_ALREADY_NOT_ISOLATED:
-               QETH_DBF_MESSAGE(2, "%s QDIO data connection isolation already "
-                               "deactivated\n", dev_name(&card->gdev->dev));
+               QETH_DBF_MESSAGE(2, "QDIO data connection isolation on device %x already deactivated\n",
+                                CARD_DEVID(card));
                if (fallback)
                        card->options.isolation = card->options.prev_isolation;
                break;
        case SET_ACCESS_CTRL_RC_ALREADY_ISOLATED:
-               QETH_DBF_MESSAGE(2, "%s QDIO data connection isolation already"
-                               " activated\n", dev_name(&card->gdev->dev));
+               QETH_DBF_MESSAGE(2, "QDIO data connection isolation on device %x already activated\n",
+                                CARD_DEVID(card));
                if (fallback)
                        card->options.isolation = card->options.prev_isolation;
                break;
@@ -4405,10 +4398,8 @@ int qeth_set_access_ctrl_online(struct qeth_card *card, int fallback)
                rc = qeth_setadpparms_set_access_ctrl(card,
                        card->options.isolation, fallback);
                if (rc) {
-                       QETH_DBF_MESSAGE(3,
-                               "IPA(SET_ACCESS_CTRL,%s,%d) sent failed\n",
-                               card->gdev->dev.kobj.name,
-                               rc);
+                       QETH_DBF_MESSAGE(3, "IPA(SET_ACCESS_CTRL(%d) on device %x: sent failed\n",
+                                        rc, CARD_DEVID(card));
                        rc = -EOPNOTSUPP;
                }
        } else if (card->options.isolation != ISOLATION_MODE_NONE) {
@@ -4443,7 +4434,8 @@ static int qeth_mdio_read(struct net_device *dev, int phy_id, int regnum)
                rc = BMCR_FULLDPLX;
                if ((card->info.link_type != QETH_LINK_TYPE_GBIT_ETH) &&
                    (card->info.link_type != QETH_LINK_TYPE_OSN) &&
-                   (card->info.link_type != QETH_LINK_TYPE_10GBIT_ETH))
+                   (card->info.link_type != QETH_LINK_TYPE_10GBIT_ETH) &&
+                   (card->info.link_type != QETH_LINK_TYPE_25GBIT_ETH))
                        rc |= BMCR_SPEED100;
                break;
        case MII_BMSR: /* Basic mode status register */
@@ -4634,8 +4626,8 @@ static int qeth_snmp_command(struct qeth_card *card, char __user *udata)
        rc = qeth_send_ipa_snmp_cmd(card, iob, QETH_SETADP_BASE_LEN + req_len,
                                    qeth_snmp_command_cb, (void *)&qinfo);
        if (rc)
-               QETH_DBF_MESSAGE(2, "SNMP command failed on %s: (0x%x)\n",
-                          QETH_CARD_IFNAME(card), rc);
+               QETH_DBF_MESSAGE(2, "SNMP command failed on device %x: (%#x)\n",
+                                CARD_DEVID(card), rc);
        else {
                if (copy_to_user(udata, qinfo.udata, qinfo.udata_len))
                        rc = -EFAULT;
@@ -4869,8 +4861,8 @@ static void qeth_determine_capabilities(struct qeth_card *card)
 
        rc = qeth_read_conf_data(card, (void **) &prcd, &length);
        if (rc) {
-               QETH_DBF_MESSAGE(2, "%s qeth_read_conf_data returned %i\n",
-                       dev_name(&card->gdev->dev), rc);
+               QETH_DBF_MESSAGE(2, "qeth_read_conf_data on device %x returned %i\n",
+                                CARD_DEVID(card), rc);
                QETH_DBF_TEXT_(SETUP, 2, "5err%d", rc);
                goto out_offline;
        }
@@ -5086,7 +5078,7 @@ static struct ccw_driver qeth_ccw_driver = {
        .remove = ccwgroup_remove_ccwdev,
 };
 
-int qeth_core_hardsetup_card(struct qeth_card *card)
+int qeth_core_hardsetup_card(struct qeth_card *card, bool *carrier_ok)
 {
        int retries = 3;
        int rc;
@@ -5096,8 +5088,8 @@ int qeth_core_hardsetup_card(struct qeth_card *card)
        qeth_update_from_chp_desc(card);
 retry:
        if (retries < 3)
-               QETH_DBF_MESSAGE(2, "%s Retrying to do IDX activates.\n",
-                       dev_name(&card->gdev->dev));
+               QETH_DBF_MESSAGE(2, "Retrying to do IDX activates on device %x.\n",
+                                CARD_DEVID(card));
        rc = qeth_qdio_clear_card(card, card->info.type != QETH_CARD_TYPE_IQD);
        ccw_device_set_offline(CARD_DDEV(card));
        ccw_device_set_offline(CARD_WDEV(card));
@@ -5161,13 +5153,20 @@ retriable:
                if (rc == IPA_RC_LAN_OFFLINE) {
                        dev_warn(&card->gdev->dev,
                                "The LAN is offline\n");
-                       netif_carrier_off(card->dev);
+                       *carrier_ok = false;
                } else {
                        rc = -ENODEV;
                        goto out;
                }
        } else {
-               netif_carrier_on(card->dev);
+               *carrier_ok = true;
+       }
+
+       if (qeth_netdev_is_registered(card->dev)) {
+               if (*carrier_ok)
+                       netif_carrier_on(card->dev);
+               else
+                       netif_carrier_off(card->dev);
        }
 
        card->options.ipa4.supported_funcs = 0;
@@ -5201,8 +5200,8 @@ retriable:
 out:
        dev_warn(&card->gdev->dev, "The qeth device driver failed to recover "
                "an error on the device\n");
-       QETH_DBF_MESSAGE(2, "%s Initialization in hardsetup failed! rc=%d\n",
-               dev_name(&card->gdev->dev), rc);
+       QETH_DBF_MESSAGE(2, "Initialization for device %x failed in hardsetup! rc=%d\n",
+                        CARD_DEVID(card), rc);
        return rc;
 }
 EXPORT_SYMBOL_GPL(qeth_core_hardsetup_card);
@@ -5481,11 +5480,12 @@ struct qeth_cmd_buffer *qeth_get_setassparms_cmd(struct qeth_card *card,
 }
 EXPORT_SYMBOL_GPL(qeth_get_setassparms_cmd);
 
-int qeth_send_setassparms(struct qeth_card *card,
-                         struct qeth_cmd_buffer *iob, __u16 len, long data,
-                         int (*reply_cb)(struct qeth_card *,
-                                         struct qeth_reply *, unsigned long),
-                         void *reply_param)
+static int qeth_send_setassparms(struct qeth_card *card,
+                                struct qeth_cmd_buffer *iob, u16 len,
+                                long data, int (*reply_cb)(struct qeth_card *,
+                                                           struct qeth_reply *,
+                                                           unsigned long),
+                                void *reply_param)
 {
        int rc;
        struct qeth_ipa_cmd *cmd;
@@ -5501,7 +5501,6 @@ int qeth_send_setassparms(struct qeth_card *card,
        rc = qeth_send_ipa_cmd(card, iob, reply_cb, reply_param);
        return rc;
 }
-EXPORT_SYMBOL_GPL(qeth_send_setassparms);
 
 int qeth_send_simple_setassparms_prot(struct qeth_card *card,
                                      enum qeth_ipa_funcs ipa_func,
@@ -6170,8 +6169,14 @@ static void qeth_set_cmd_adv_sup(struct ethtool_link_ksettings *cmd,
                WARN_ON_ONCE(1);
        }
 
-       /* fallthrough from high to low, to select all legal speeds: */
+       /* partially does fall through, to also select lower speeds */
        switch (maxspeed) {
+       case SPEED_25000:
+               ethtool_link_ksettings_add_link_mode(cmd, supported,
+                                                    25000baseSR_Full);
+               ethtool_link_ksettings_add_link_mode(cmd, advertising,
+                                                    25000baseSR_Full);
+               break;
        case SPEED_10000:
                ethtool_link_ksettings_add_link_mode(cmd, supported,
                                                     10000baseT_Full);
@@ -6254,6 +6259,10 @@ int qeth_core_ethtool_get_link_ksettings(struct net_device *netdev,
                cmd->base.speed = SPEED_10000;
                cmd->base.port = PORT_FIBRE;
                break;
+       case QETH_LINK_TYPE_25GBIT_ETH:
+               cmd->base.speed = SPEED_25000;
+               cmd->base.port = PORT_FIBRE;
+               break;
        default:
                cmd->base.speed = SPEED_10;
                cmd->base.port = PORT_TP;
@@ -6320,6 +6329,9 @@ int qeth_core_ethtool_get_link_ksettings(struct net_device *netdev,
        case CARD_INFO_PORTS_10G:
                cmd->base.speed = SPEED_10000;
                break;
+       case CARD_INFO_PORTS_25G:
+               cmd->base.speed = SPEED_25000;
+               break;
        }
 
        return 0;
index e850904..3e54be2 100644 (file)
@@ -90,6 +90,7 @@ enum qeth_link_types {
        QETH_LINK_TYPE_GBIT_ETH     = 0x03,
        QETH_LINK_TYPE_OSN          = 0x04,
        QETH_LINK_TYPE_10GBIT_ETH   = 0x10,
+       QETH_LINK_TYPE_25GBIT_ETH   = 0x12,
        QETH_LINK_TYPE_LANE_ETH100  = 0x81,
        QETH_LINK_TYPE_LANE_TR      = 0x82,
        QETH_LINK_TYPE_LANE_ETH1000 = 0x83,
@@ -347,6 +348,7 @@ enum qeth_card_info_port_speed {
        CARD_INFO_PORTS_100M            = 0x00000006,
        CARD_INFO_PORTS_1G              = 0x00000007,
        CARD_INFO_PORTS_10G             = 0x00000008,
+       CARD_INFO_PORTS_25G             = 0x0000000A,
 };
 
 /* (SET)DELIP(M) IPA stuff ***************************************************/
@@ -436,7 +438,7 @@ struct qeth_ipacmd_setassparms {
                __u32 flags_32bit;
                struct qeth_ipa_caps caps;
                struct qeth_checksum_cmd chksum;
-               struct qeth_arp_cache_entry add_arp_entry;
+               struct qeth_arp_cache_entry arp_entry;
                struct qeth_arp_query_data query_arp;
                struct qeth_tso_start_data tso;
                __u8 ip[16];
index 23aaf37..2914a1a 100644 (file)
@@ -146,11 +146,11 @@ static int qeth_l2_write_mac(struct qeth_card *card, u8 *mac)
        QETH_CARD_TEXT(card, 2, "L2Wmac");
        rc = qeth_l2_send_setdelmac(card, mac, cmd);
        if (rc == -EEXIST)
-               QETH_DBF_MESSAGE(2, "MAC %pM already registered on %s\n",
-                                mac, QETH_CARD_IFNAME(card));
+               QETH_DBF_MESSAGE(2, "MAC already registered on device %x\n",
+                                CARD_DEVID(card));
        else if (rc)
-               QETH_DBF_MESSAGE(2, "Failed to register MAC %pM on %s: %d\n",
-                                mac, QETH_CARD_IFNAME(card), rc);
+               QETH_DBF_MESSAGE(2, "Failed to register MAC on device %x: %d\n",
+                                CARD_DEVID(card), rc);
        return rc;
 }
 
@@ -163,8 +163,8 @@ static int qeth_l2_remove_mac(struct qeth_card *card, u8 *mac)
        QETH_CARD_TEXT(card, 2, "L2Rmac");
        rc = qeth_l2_send_setdelmac(card, mac, cmd);
        if (rc)
-               QETH_DBF_MESSAGE(2, "Failed to delete MAC %pM on %s: %d\n",
-                                mac, QETH_CARD_IFNAME(card), rc);
+               QETH_DBF_MESSAGE(2, "Failed to delete MAC on device %u: %d\n",
+                                CARD_DEVID(card), rc);
        return rc;
 }
 
@@ -260,9 +260,9 @@ static int qeth_l2_send_setdelvlan_cb(struct qeth_card *card,
 
        QETH_CARD_TEXT(card, 2, "L2sdvcb");
        if (cmd->hdr.return_code) {
-               QETH_DBF_MESSAGE(2, "Error in processing VLAN %i on %s: 0x%x.\n",
+               QETH_DBF_MESSAGE(2, "Error in processing VLAN %u on device %x: %#x.\n",
                                 cmd->data.setdelvlan.vlan_id,
-                                QETH_CARD_IFNAME(card), cmd->hdr.return_code);
+                                CARD_DEVID(card), cmd->hdr.return_code);
                QETH_CARD_TEXT_(card, 2, "L2VL%4x", cmd->hdr.command);
                QETH_CARD_TEXT_(card, 2, "err%d", cmd->hdr.return_code);
        }
@@ -455,8 +455,8 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
                rc = qeth_vm_request_mac(card);
                if (!rc)
                        goto out;
-               QETH_DBF_MESSAGE(2, "z/VM MAC Service failed on device %s: x%x\n",
-                                CARD_BUS_ID(card), rc);
+               QETH_DBF_MESSAGE(2, "z/VM MAC Service failed on device %x: %#x\n",
+                                CARD_DEVID(card), rc);
                QETH_DBF_TEXT_(SETUP, 2, "err%04x", rc);
                /* fall back to alternative mechanism: */
        }
@@ -468,8 +468,8 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
                rc = qeth_setadpparms_change_macaddr(card);
                if (!rc)
                        goto out;
-               QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device %s: x%x\n",
-                                CARD_BUS_ID(card), rc);
+               QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device %x: %#x\n",
+                                CARD_DEVID(card), rc);
                QETH_DBF_TEXT_(SETUP, 2, "1err%04x", rc);
                /* fall back once more: */
        }
@@ -826,7 +826,8 @@ static void qeth_l2_remove_device(struct ccwgroup_device *cgdev)
 
        if (cgdev->state == CCWGROUP_ONLINE)
                qeth_l2_set_offline(cgdev);
-       unregister_netdev(card->dev);
+       if (qeth_netdev_is_registered(card->dev))
+               unregister_netdev(card->dev);
 }
 
 static const struct ethtool_ops qeth_l2_ethtool_ops = {
@@ -862,11 +863,11 @@ static const struct net_device_ops qeth_l2_netdev_ops = {
        .ndo_set_features       = qeth_set_features
 };
 
-static int qeth_l2_setup_netdev(struct qeth_card *card)
+static int qeth_l2_setup_netdev(struct qeth_card *card, bool carrier_ok)
 {
        int rc;
 
-       if (card->dev->netdev_ops)
+       if (qeth_netdev_is_registered(card->dev))
                return 0;
 
        card->dev->priv_flags |= IFF_UNICAST_FLT;
@@ -919,6 +920,9 @@ static int qeth_l2_setup_netdev(struct qeth_card *card)
        qeth_l2_request_initial_mac(card);
        netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT);
        rc = register_netdev(card->dev);
+       if (!rc && carrier_ok)
+               netif_carrier_on(card->dev);
+
        if (rc)
                card->dev->netdev_ops = NULL;
        return rc;
@@ -949,6 +953,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
        struct qeth_card *card = dev_get_drvdata(&gdev->dev);
        int rc = 0;
        enum qeth_card_states recover_flag;
+       bool carrier_ok;
 
        mutex_lock(&card->discipline_mutex);
        mutex_lock(&card->conf_mutex);
@@ -956,7 +961,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
        QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
 
        recover_flag = card->state;
-       rc = qeth_core_hardsetup_card(card);
+       rc = qeth_core_hardsetup_card(card, &carrier_ok);
        if (rc) {
                QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc);
                rc = -ENODEV;
@@ -967,7 +972,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
                dev_info(&card->gdev->dev,
                "The device represents a Bridge Capable Port\n");
 
-       rc = qeth_l2_setup_netdev(card);
+       rc = qeth_l2_setup_netdev(card, carrier_ok);
        if (rc)
                goto out_remove;
 
index 0b161cc..f08b745 100644 (file)
@@ -278,9 +278,6 @@ static void qeth_l3_clear_ip_htable(struct qeth_card *card, int recover)
 
        QETH_CARD_TEXT(card, 4, "clearip");
 
-       if (recover && card->options.sniffer)
-               return;
-
        spin_lock_bh(&card->ip_lock);
 
        hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) {
@@ -494,9 +491,8 @@ int qeth_l3_setrouting_v4(struct qeth_card *card)
                                  QETH_PROT_IPV4);
        if (rc) {
                card->options.route4.type = NO_ROUTER;
-               QETH_DBF_MESSAGE(2, "Error (0x%04x) while setting routing type"
-                       " on %s. Type set to 'no router'.\n", rc,
-                       QETH_CARD_IFNAME(card));
+               QETH_DBF_MESSAGE(2, "Error (%#06x) while setting routing type on device %x. Type set to 'no router'.\n",
+                                rc, CARD_DEVID(card));
        }
        return rc;
 }
@@ -518,9 +514,8 @@ int qeth_l3_setrouting_v6(struct qeth_card *card)
                                  QETH_PROT_IPV6);
        if (rc) {
                card->options.route6.type = NO_ROUTER;
-               QETH_DBF_MESSAGE(2, "Error (0x%04x) while setting routing type"
-                       " on %s. Type set to 'no router'.\n", rc,
-                       QETH_CARD_IFNAME(card));
+               QETH_DBF_MESSAGE(2, "Error (%#06x) while setting routing type on device %x. Type set to 'no router'.\n",
+                                rc, CARD_DEVID(card));
        }
        return rc;
 }
@@ -663,6 +658,8 @@ static int qeth_l3_register_addr_entry(struct qeth_card *card,
        int rc = 0;
        int cnt = 3;
 
+       if (card->options.sniffer)
+               return 0;
 
        if (addr->proto == QETH_PROT_IPV4) {
                QETH_CARD_TEXT(card, 2, "setaddr4");
@@ -697,6 +694,9 @@ static int qeth_l3_deregister_addr_entry(struct qeth_card *card,
 {
        int rc = 0;
 
+       if (card->options.sniffer)
+               return 0;
+
        if (addr->proto == QETH_PROT_IPV4) {
                QETH_CARD_TEXT(card, 2, "deladdr4");
                QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int));
@@ -1070,8 +1070,8 @@ qeth_diags_trace_cb(struct qeth_card *card, struct qeth_reply *reply,
                }
                break;
        default:
-               QETH_DBF_MESSAGE(2, "Unknown sniffer action (0x%04x) on %s\n",
-                       cmd->data.diagass.action, QETH_CARD_IFNAME(card));
+               QETH_DBF_MESSAGE(2, "Unknown sniffer action (%#06x) on device %x\n",
+                                cmd->data.diagass.action, CARD_DEVID(card));
        }
 
        return 0;
@@ -1517,32 +1517,25 @@ static void qeth_l3_set_rx_mode(struct net_device *dev)
        qeth_l3_handle_promisc_mode(card);
 }
 
-static const char *qeth_l3_arp_get_error_cause(int *rc)
+static int qeth_l3_arp_makerc(int rc)
 {
-       switch (*rc) {
-       case QETH_IPA_ARP_RC_FAILED:
-               *rc = -EIO;
-               return "operation failed";
+       switch (rc) {
+       case IPA_RC_SUCCESS:
+               return 0;
        case QETH_IPA_ARP_RC_NOTSUPP:
-               *rc = -EOPNOTSUPP;
-               return "operation not supported";
-       case QETH_IPA_ARP_RC_OUT_OF_RANGE:
-               *rc = -EINVAL;
-               return "argument out of range";
        case QETH_IPA_ARP_RC_Q_NOTSUPP:
-               *rc = -EOPNOTSUPP;
-               return "query operation not supported";
+               return -EOPNOTSUPP;
+       case QETH_IPA_ARP_RC_OUT_OF_RANGE:
+               return -EINVAL;
        case QETH_IPA_ARP_RC_Q_NO_DATA:
-               *rc = -ENOENT;
-               return "no query data available";
+               return -ENOENT;
        default:
-               return "unknown error";
+               return -EIO;
        }
 }
 
 static int qeth_l3_arp_set_no_entries(struct qeth_card *card, int no_entries)
 {
-       int tmp;
        int rc;
 
        QETH_CARD_TEXT(card, 3, "arpstnoe");
@@ -1560,13 +1553,10 @@ static int qeth_l3_arp_set_no_entries(struct qeth_card *card, int no_entries)
        rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING,
                                          IPA_CMD_ASS_ARP_SET_NO_ENTRIES,
                                          no_entries);
-       if (rc) {
-               tmp = rc;
-               QETH_DBF_MESSAGE(2, "Could not set number of ARP entries on "
-                       "%s: %s (0x%x/%d)\n", QETH_CARD_IFNAME(card),
-                       qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
-       }
-       return rc;
+       if (rc)
+               QETH_DBF_MESSAGE(2, "Could not set number of ARP entries on device %x: %#x\n",
+                                CARD_DEVID(card), rc);
+       return qeth_l3_arp_makerc(rc);
 }
 
 static __u32 get_arp_entry_size(struct qeth_card *card,
@@ -1716,7 +1706,6 @@ static int qeth_l3_query_arp_cache_info(struct qeth_card *card,
 {
        struct qeth_cmd_buffer *iob;
        struct qeth_ipa_cmd *cmd;
-       int tmp;
        int rc;
 
        QETH_CARD_TEXT_(card, 3, "qarpipv%i", prot);
@@ -1735,15 +1724,10 @@ static int qeth_l3_query_arp_cache_info(struct qeth_card *card,
        rc = qeth_l3_send_ipa_arp_cmd(card, iob,
                           QETH_SETASS_BASE_LEN+QETH_ARP_CMD_LEN,
                           qeth_l3_arp_query_cb, (void *)qinfo);
-       if (rc) {
-               tmp = rc;
-               QETH_DBF_MESSAGE(2,
-                       "Error while querying ARP cache on %s: %s "
-                       "(0x%x/%d)\n", QETH_CARD_IFNAME(card),
-                       qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
-       }
-
-       return rc;
+       if (rc)
+               QETH_DBF_MESSAGE(2, "Error while querying ARP cache on device %x: %#x\n",
+                                CARD_DEVID(card), rc);
+       return qeth_l3_arp_makerc(rc);
 }
 
 static int qeth_l3_arp_query(struct qeth_card *card, char __user *udata)
@@ -1793,15 +1777,18 @@ out:
        return rc;
 }
 
-static int qeth_l3_arp_add_entry(struct qeth_card *card,
-                               struct qeth_arp_cache_entry *entry)
+static int qeth_l3_arp_modify_entry(struct qeth_card *card,
+                                   struct qeth_arp_cache_entry *entry,
+                                   enum qeth_arp_process_subcmds arp_cmd)
 {
+       struct qeth_arp_cache_entry *cmd_entry;
        struct qeth_cmd_buffer *iob;
-       char buf[16];
-       int tmp;
        int rc;
 
-       QETH_CARD_TEXT(card, 3, "arpadent");
+       if (arp_cmd == IPA_CMD_ASS_ARP_ADD_ENTRY)
+               QETH_CARD_TEXT(card, 3, "arpadd");
+       else
+               QETH_CARD_TEXT(card, 3, "arpdel");
 
        /*
         * currently GuestLAN only supports the ARP assist function
@@ -1814,71 +1801,25 @@ static int qeth_l3_arp_add_entry(struct qeth_card *card,
                return -EOPNOTSUPP;
        }
 
-       iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
-                                      IPA_CMD_ASS_ARP_ADD_ENTRY,
-                                      sizeof(struct qeth_arp_cache_entry),
-                                      QETH_PROT_IPV4);
+       iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING, arp_cmd,
+                                      sizeof(*cmd_entry), QETH_PROT_IPV4);
        if (!iob)
                return -ENOMEM;
-       rc = qeth_send_setassparms(card, iob,
-                                  sizeof(struct qeth_arp_cache_entry),
-                                  (unsigned long) entry,
-                                  qeth_setassparms_cb, NULL);
-       if (rc) {
-               tmp = rc;
-               qeth_l3_ipaddr4_to_string((u8 *)entry->ipaddr, buf);
-               QETH_DBF_MESSAGE(2, "Could not add ARP entry for address %s "
-                       "on %s: %s (0x%x/%d)\n", buf, QETH_CARD_IFNAME(card),
-                       qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
-       }
-       return rc;
-}
-
-static int qeth_l3_arp_remove_entry(struct qeth_card *card,
-                               struct qeth_arp_cache_entry *entry)
-{
-       struct qeth_cmd_buffer *iob;
-       char buf[16] = {0, };
-       int tmp;
-       int rc;
 
-       QETH_CARD_TEXT(card, 3, "arprment");
+       cmd_entry = &__ipa_cmd(iob)->data.setassparms.data.arp_entry;
+       ether_addr_copy(cmd_entry->macaddr, entry->macaddr);
+       memcpy(cmd_entry->ipaddr, entry->ipaddr, 4);
+       rc = qeth_send_ipa_cmd(card, iob, qeth_setassparms_cb, NULL);
+       if (rc)
+               QETH_DBF_MESSAGE(2, "Could not modify (cmd: %#x) ARP entry on device %x: %#x\n",
+                                arp_cmd, CARD_DEVID(card), rc);
 
-       /*
-        * currently GuestLAN only supports the ARP assist function
-        * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_REMOVE_ENTRY;
-        * thus we say EOPNOTSUPP for this ARP function
-        */
-       if (card->info.guestlan)
-               return -EOPNOTSUPP;
-       if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
-               return -EOPNOTSUPP;
-       }
-       memcpy(buf, entry, 12);
-       iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
-                                      IPA_CMD_ASS_ARP_REMOVE_ENTRY,
-                                      12,
-                                      QETH_PROT_IPV4);
-       if (!iob)
-               return -ENOMEM;
-       rc = qeth_send_setassparms(card, iob,
-                                  12, (unsigned long)buf,
-                                  qeth_setassparms_cb, NULL);
-       if (rc) {
-               tmp = rc;
-               memset(buf, 0, 16);
-               qeth_l3_ipaddr4_to_string((u8 *)entry->ipaddr, buf);
-               QETH_DBF_MESSAGE(2, "Could not delete ARP entry for address %s"
-                       " on %s: %s (0x%x/%d)\n", buf, QETH_CARD_IFNAME(card),
-                       qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
-       }
-       return rc;
+       return qeth_l3_arp_makerc(rc);
 }
 
 static int qeth_l3_arp_flush_cache(struct qeth_card *card)
 {
        int rc;
-       int tmp;
 
        QETH_CARD_TEXT(card, 3, "arpflush");
 
@@ -1894,19 +1835,17 @@ static int qeth_l3_arp_flush_cache(struct qeth_card *card)
        }
        rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING,
                                          IPA_CMD_ASS_ARP_FLUSH_CACHE, 0);
-       if (rc) {
-               tmp = rc;
-               QETH_DBF_MESSAGE(2, "Could not flush ARP cache on %s: %s "
-                       "(0x%x/%d)\n", QETH_CARD_IFNAME(card),
-                       qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
-       }
-       return rc;
+       if (rc)
+               QETH_DBF_MESSAGE(2, "Could not flush ARP cache on device %x: %#x\n",
+                                CARD_DEVID(card), rc);
+       return qeth_l3_arp_makerc(rc);
 }
 
 static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct qeth_card *card = dev->ml_priv;
        struct qeth_arp_cache_entry arp_entry;
+       enum qeth_arp_process_subcmds arp_cmd;
        int rc = 0;
 
        switch (cmd) {
@@ -1925,27 +1864,16 @@ static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
                rc = qeth_l3_arp_query(card, rq->ifr_ifru.ifru_data);
                break;
        case SIOC_QETH_ARP_ADD_ENTRY:
-               if (!capable(CAP_NET_ADMIN)) {
-                       rc = -EPERM;
-                       break;
-               }
-               if (copy_from_user(&arp_entry, rq->ifr_ifru.ifru_data,
-                                  sizeof(struct qeth_arp_cache_entry)))
-                       rc = -EFAULT;
-               else
-                       rc = qeth_l3_arp_add_entry(card, &arp_entry);
-               break;
        case SIOC_QETH_ARP_REMOVE_ENTRY:
-               if (!capable(CAP_NET_ADMIN)) {
-                       rc = -EPERM;
-                       break;
-               }
-               if (copy_from_user(&arp_entry, rq->ifr_ifru.ifru_data,
-                                  sizeof(struct qeth_arp_cache_entry)))
-                       rc = -EFAULT;
-               else
-                       rc = qeth_l3_arp_remove_entry(card, &arp_entry);
-               break;
+               if (!capable(CAP_NET_ADMIN))
+                       return -EPERM;
+               if (copy_from_user(&arp_entry, rq->ifr_data, sizeof(arp_entry)))
+                       return -EFAULT;
+
+               arp_cmd = (cmd == SIOC_QETH_ARP_ADD_ENTRY) ?
+                               IPA_CMD_ASS_ARP_ADD_ENTRY :
+                               IPA_CMD_ASS_ARP_REMOVE_ENTRY;
+               return qeth_l3_arp_modify_entry(card, &arp_entry, arp_cmd);
        case SIOC_QETH_ARP_FLUSH_CACHE:
                if (!capable(CAP_NET_ADMIN)) {
                        rc = -EPERM;
@@ -2383,12 +2311,12 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = {
        .ndo_neigh_setup        = qeth_l3_neigh_setup,
 };
 
-static int qeth_l3_setup_netdev(struct qeth_card *card)
+static int qeth_l3_setup_netdev(struct qeth_card *card, bool carrier_ok)
 {
        unsigned int headroom;
        int rc;
 
-       if (card->dev->netdev_ops)
+       if (qeth_netdev_is_registered(card->dev))
                return 0;
 
        if (card->info.type == QETH_CARD_TYPE_OSD ||
@@ -2457,6 +2385,9 @@ static int qeth_l3_setup_netdev(struct qeth_card *card)
 
        netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT);
        rc = register_netdev(card->dev);
+       if (!rc && carrier_ok)
+               netif_carrier_on(card->dev);
+
 out:
        if (rc)
                card->dev->netdev_ops = NULL;
@@ -2497,7 +2428,8 @@ static void qeth_l3_remove_device(struct ccwgroup_device *cgdev)
        if (cgdev->state == CCWGROUP_ONLINE)
                qeth_l3_set_offline(cgdev);
 
-       unregister_netdev(card->dev);
+       if (qeth_netdev_is_registered(card->dev))
+               unregister_netdev(card->dev);
        qeth_l3_clear_ip_htable(card, 0);
        qeth_l3_clear_ipato_list(card);
 }
@@ -2507,6 +2439,7 @@ static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode)
        struct qeth_card *card = dev_get_drvdata(&gdev->dev);
        int rc = 0;
        enum qeth_card_states recover_flag;
+       bool carrier_ok;
 
        mutex_lock(&card->discipline_mutex);
        mutex_lock(&card->conf_mutex);
@@ -2514,14 +2447,14 @@ static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode)
        QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
 
        recover_flag = card->state;
-       rc = qeth_core_hardsetup_card(card);
+       rc = qeth_core_hardsetup_card(card, &carrier_ok);
        if (rc) {
                QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc);
                rc = -ENODEV;
                goto out_remove;
        }
 
-       rc = qeth_l3_setup_netdev(card);
+       rc = qeth_l3_setup_netdev(card, carrier_ok);
        if (rc)
                goto out_remove;
 
index ff6ba6d..cc56cb3 100644 (file)
@@ -1614,10 +1614,10 @@ static void sci_request_dma(struct uart_port *port)
                hrtimer_init(&s->rx_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
                s->rx_timer.function = rx_timer_fn;
 
+               s->chan_rx_saved = s->chan_rx = chan;
+
                if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
                        sci_submit_rx(s);
-
-               s->chan_rx_saved = s->chan_rx = chan;
        }
 }
 
@@ -3102,6 +3102,7 @@ static struct uart_driver sci_uart_driver = {
 static int sci_remove(struct platform_device *dev)
 {
        struct sci_port *port = platform_get_drvdata(dev);
+       unsigned int type = port->port.type;    /* uart_remove_... clears it */
 
        sci_ports_in_use &= ~BIT(port->port.line);
        uart_remove_one_port(&sci_uart_driver, &port->port);
@@ -3112,8 +3113,7 @@ static int sci_remove(struct platform_device *dev)
                sysfs_remove_file(&dev->dev.kobj,
                                  &dev_attr_rx_fifo_trigger.attr);
        }
-       if (port->port.type == PORT_SCIFA || port->port.type == PORT_SCIFB ||
-           port->port.type == PORT_HSCIF) {
+       if (type == PORT_SCIFA || type == PORT_SCIFB || type == PORT_HSCIF) {
                sysfs_remove_file(&dev->dev.kobj,
                                  &dev_attr_rx_fifo_timeout.attr);
        }
index 7576cea..f438eaa 100644 (file)
@@ -77,7 +77,7 @@ speed_t tty_termios_baud_rate(struct ktermios *termios)
                else
                        cbaud += 15;
        }
-       return baud_table[cbaud];
+       return cbaud >= n_baud_table ? 0 : baud_table[cbaud];
 }
 EXPORT_SYMBOL(tty_termios_baud_rate);
 
@@ -113,7 +113,7 @@ speed_t tty_termios_input_baud_rate(struct ktermios *termios)
                else
                        cbaud += 15;
        }
-       return baud_table[cbaud];
+       return cbaud >= n_baud_table ? 0 : baud_table[cbaud];
 #else  /* IBSHIFT */
        return tty_termios_baud_rate(termios);
 #endif /* IBSHIFT */
index 55370e6..41ec8e5 100644 (file)
@@ -1548,7 +1548,7 @@ static void csi_K(struct vc_data *vc, int vpar)
        scr_memsetw(start + offset, vc->vc_video_erase_char, 2 * count);
        vc->vc_need_wrap = 0;
        if (con_should_update(vc))
-               do_update_region(vc, (unsigned long) start, count);
+               do_update_region(vc, (unsigned long)(start + offset), count);
 }
 
 static void csi_X(struct vc_data *vc, int vpar) /* erase the following vpar positions */
index e36d6c7..7811888 100644 (file)
@@ -23,6 +23,16 @@ config TYPEC_UCSI
 
 if TYPEC_UCSI
 
+config UCSI_CCG
+       tristate "UCSI Interface Driver for Cypress CCGx"
+       depends on I2C
+       help
+         This driver enables UCSI support on platforms that expose a
+         Cypress CCGx Type-C controller over I2C interface.
+
+         To compile the driver as a module, choose M here: the module will be
+         called ucsi_ccg.
+
 config UCSI_ACPI
        tristate "UCSI ACPI Interface Driver"
        depends on ACPI
index 7afbea5..2f4900b 100644 (file)
@@ -8,3 +8,5 @@ typec_ucsi-y                    := ucsi.o
 typec_ucsi-$(CONFIG_TRACING)   += trace.o
 
 obj-$(CONFIG_UCSI_ACPI)                += ucsi_acpi.o
+
+obj-$(CONFIG_UCSI_CCG)         += ucsi_ccg.o
diff --git a/drivers/usb/typec/ucsi/ucsi_ccg.c b/drivers/usb/typec/ucsi/ucsi_ccg.c
new file mode 100644 (file)
index 0000000..de8a43b
--- /dev/null
@@ -0,0 +1,307 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * UCSI driver for Cypress CCGx Type-C controller
+ *
+ * Copyright (C) 2017-2018 NVIDIA Corporation. All rights reserved.
+ * Author: Ajay Gupta <ajayg@nvidia.com>
+ *
+ * Some code borrowed from drivers/usb/typec/ucsi/ucsi_acpi.c
+ */
+#include <linux/acpi.h>
+#include <linux/delay.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/platform_device.h>
+
+#include <asm/unaligned.h>
+#include "ucsi.h"
+
+struct ucsi_ccg {
+       struct device *dev;
+       struct ucsi *ucsi;
+       struct ucsi_ppm ppm;
+       struct i2c_client *client;
+};
+
+#define CCGX_RAB_INTR_REG                      0x06
+#define CCGX_RAB_UCSI_CONTROL                  0x39
+#define CCGX_RAB_UCSI_CONTROL_START            BIT(0)
+#define CCGX_RAB_UCSI_CONTROL_STOP             BIT(1)
+#define CCGX_RAB_UCSI_DATA_BLOCK(offset)       (0xf000 | ((offset) & 0xff))
+
+static int ccg_read(struct ucsi_ccg *uc, u16 rab, u8 *data, u32 len)
+{
+       struct i2c_client *client = uc->client;
+       const struct i2c_adapter_quirks *quirks = client->adapter->quirks;
+       unsigned char buf[2];
+       struct i2c_msg msgs[] = {
+               {
+                       .addr   = client->addr,
+                       .flags  = 0x0,
+                       .len    = sizeof(buf),
+                       .buf    = buf,
+               },
+               {
+                       .addr   = client->addr,
+                       .flags  = I2C_M_RD,
+                       .buf    = data,
+               },
+       };
+       u32 rlen, rem_len = len, max_read_len = len;
+       int status;
+
+       /* check any max_read_len limitation on i2c adapter */
+       if (quirks && quirks->max_read_len)
+               max_read_len = quirks->max_read_len;
+
+       while (rem_len > 0) {
+               msgs[1].buf = &data[len - rem_len];
+               rlen = min_t(u16, rem_len, max_read_len);
+               msgs[1].len = rlen;
+               put_unaligned_le16(rab, buf);
+               status = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
+               if (status < 0) {
+                       dev_err(uc->dev, "i2c_transfer failed %d\n", status);
+                       return status;
+               }
+               rab += rlen;
+               rem_len -= rlen;
+       }
+
+       return 0;
+}
+
+static int ccg_write(struct ucsi_ccg *uc, u16 rab, u8 *data, u32 len)
+{
+       struct i2c_client *client = uc->client;
+       unsigned char *buf;
+       struct i2c_msg msgs[] = {
+               {
+                       .addr   = client->addr,
+                       .flags  = 0x0,
+               }
+       };
+       int status;
+
+       buf = kzalloc(len + sizeof(rab), GFP_KERNEL);
+       if (!buf)
+               return -ENOMEM;
+
+       put_unaligned_le16(rab, buf);
+       memcpy(buf + sizeof(rab), data, len);
+
+       msgs[0].len = len + sizeof(rab);
+       msgs[0].buf = buf;
+
+       status = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
+       if (status < 0) {
+               dev_err(uc->dev, "i2c_transfer failed %d\n", status);
+               kfree(buf);
+               return status;
+       }
+
+       kfree(buf);
+       return 0;
+}
+
+static int ucsi_ccg_init(struct ucsi_ccg *uc)
+{
+       unsigned int count = 10;
+       u8 data;
+       int status;
+
+       data = CCGX_RAB_UCSI_CONTROL_STOP;
+       status = ccg_write(uc, CCGX_RAB_UCSI_CONTROL, &data, sizeof(data));
+       if (status < 0)
+               return status;
+
+       data = CCGX_RAB_UCSI_CONTROL_START;
+       status = ccg_write(uc, CCGX_RAB_UCSI_CONTROL, &data, sizeof(data));
+       if (status < 0)
+               return status;
+
+       /*
+        * Flush CCGx RESPONSE queue by acking interrupts. Above ucsi control
+        * register write will push response which must be cleared.
+        */
+       do {
+               status = ccg_read(uc, CCGX_RAB_INTR_REG, &data, sizeof(data));
+               if (status < 0)
+                       return status;
+
+               if (!data)
+                       return 0;
+
+               status = ccg_write(uc, CCGX_RAB_INTR_REG, &data, sizeof(data));
+               if (status < 0)
+                       return status;
+
+               usleep_range(10000, 11000);
+       } while (--count);
+
+       return -ETIMEDOUT;
+}
+
+static int ucsi_ccg_send_data(struct ucsi_ccg *uc)
+{
+       u8 *ppm = (u8 *)uc->ppm.data;
+       int status;
+       u16 rab;
+
+       rab = CCGX_RAB_UCSI_DATA_BLOCK(offsetof(struct ucsi_data, message_out));
+       status = ccg_write(uc, rab, ppm +
+                          offsetof(struct ucsi_data, message_out),
+                          sizeof(uc->ppm.data->message_out));
+       if (status < 0)
+               return status;
+
+       rab = CCGX_RAB_UCSI_DATA_BLOCK(offsetof(struct ucsi_data, ctrl));
+       return ccg_write(uc, rab, ppm + offsetof(struct ucsi_data, ctrl),
+                        sizeof(uc->ppm.data->ctrl));
+}
+
+static int ucsi_ccg_recv_data(struct ucsi_ccg *uc)
+{
+       u8 *ppm = (u8 *)uc->ppm.data;
+       int status;
+       u16 rab;
+
+       rab = CCGX_RAB_UCSI_DATA_BLOCK(offsetof(struct ucsi_data, cci));
+       status = ccg_read(uc, rab, ppm + offsetof(struct ucsi_data, cci),
+                         sizeof(uc->ppm.data->cci));
+       if (status < 0)
+               return status;
+
+       rab = CCGX_RAB_UCSI_DATA_BLOCK(offsetof(struct ucsi_data, message_in));
+       return ccg_read(uc, rab, ppm + offsetof(struct ucsi_data, message_in),
+                       sizeof(uc->ppm.data->message_in));
+}
+
+static int ucsi_ccg_ack_interrupt(struct ucsi_ccg *uc)
+{
+       int status;
+       unsigned char data;
+
+       status = ccg_read(uc, CCGX_RAB_INTR_REG, &data, sizeof(data));
+       if (status < 0)
+               return status;
+
+       return ccg_write(uc, CCGX_RAB_INTR_REG, &data, sizeof(data));
+}
+
+static int ucsi_ccg_sync(struct ucsi_ppm *ppm)
+{
+       struct ucsi_ccg *uc = container_of(ppm, struct ucsi_ccg, ppm);
+       int status;
+
+       status = ucsi_ccg_recv_data(uc);
+       if (status < 0)
+               return status;
+
+       /* ack interrupt to allow next command to run */
+       return ucsi_ccg_ack_interrupt(uc);
+}
+
+static int ucsi_ccg_cmd(struct ucsi_ppm *ppm, struct ucsi_control *ctrl)
+{
+       struct ucsi_ccg *uc = container_of(ppm, struct ucsi_ccg, ppm);
+
+       ppm->data->ctrl.raw_cmd = ctrl->raw_cmd;
+       return ucsi_ccg_send_data(uc);
+}
+
+static irqreturn_t ccg_irq_handler(int irq, void *data)
+{
+       struct ucsi_ccg *uc = data;
+
+       ucsi_notify(uc->ucsi);
+
+       return IRQ_HANDLED;
+}
+
+static int ucsi_ccg_probe(struct i2c_client *client,
+                         const struct i2c_device_id *id)
+{
+       struct device *dev = &client->dev;
+       struct ucsi_ccg *uc;
+       int status;
+       u16 rab;
+
+       uc = devm_kzalloc(dev, sizeof(*uc), GFP_KERNEL);
+       if (!uc)
+               return -ENOMEM;
+
+       uc->ppm.data = devm_kzalloc(dev, sizeof(struct ucsi_data), GFP_KERNEL);
+       if (!uc->ppm.data)
+               return -ENOMEM;
+
+       uc->ppm.cmd = ucsi_ccg_cmd;
+       uc->ppm.sync = ucsi_ccg_sync;
+       uc->dev = dev;
+       uc->client = client;
+
+       /* reset ccg device and initialize ucsi */
+       status = ucsi_ccg_init(uc);
+       if (status < 0) {
+               dev_err(uc->dev, "ucsi_ccg_init failed - %d\n", status);
+               return status;
+       }
+
+       status = devm_request_threaded_irq(dev, client->irq, NULL,
+                                          ccg_irq_handler,
+                                          IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
+                                          dev_name(dev), uc);
+       if (status < 0) {
+               dev_err(uc->dev, "request_threaded_irq failed - %d\n", status);
+               return status;
+       }
+
+       uc->ucsi = ucsi_register_ppm(dev, &uc->ppm);
+       if (IS_ERR(uc->ucsi)) {
+               dev_err(uc->dev, "ucsi_register_ppm failed\n");
+               return PTR_ERR(uc->ucsi);
+       }
+
+       rab = CCGX_RAB_UCSI_DATA_BLOCK(offsetof(struct ucsi_data, version));
+       status = ccg_read(uc, rab, (u8 *)(uc->ppm.data) +
+                         offsetof(struct ucsi_data, version),
+                         sizeof(uc->ppm.data->version));
+       if (status < 0) {
+               ucsi_unregister_ppm(uc->ucsi);
+               return status;
+       }
+
+       i2c_set_clientdata(client, uc);
+       return 0;
+}
+
+static int ucsi_ccg_remove(struct i2c_client *client)
+{
+       struct ucsi_ccg *uc = i2c_get_clientdata(client);
+
+       ucsi_unregister_ppm(uc->ucsi);
+
+       return 0;
+}
+
+static const struct i2c_device_id ucsi_ccg_device_id[] = {
+       {"ccgx-ucsi", 0},
+       {}
+};
+MODULE_DEVICE_TABLE(i2c, ucsi_ccg_device_id);
+
+static struct i2c_driver ucsi_ccg_driver = {
+       .driver = {
+               .name = "ucsi_ccg",
+       },
+       .probe = ucsi_ccg_probe,
+       .remove = ucsi_ccg_remove,
+       .id_table = ucsi_ccg_device_id,
+};
+
+module_i2c_driver(ucsi_ccg_driver);
+
+MODULE_AUTHOR("Ajay Gupta <ajayg@nvidia.com>");
+MODULE_DESCRIPTION("UCSI driver for Cypress CCGx Type-C controller");
+MODULE_LICENSE("GPL v2");
index f15f89d..7ea6fb6 100644 (file)
@@ -914,7 +914,7 @@ int gnttab_dma_free_pages(struct gnttab_dma_alloc_args *args)
 
        ret = xenmem_reservation_increase(args->nr_pages, args->frames);
        if (ret != args->nr_pages) {
-               pr_debug("Failed to decrease reservation for DMA buffer\n");
+               pr_debug("Failed to increase reservation for DMA buffer\n");
                ret = -EFAULT;
        } else {
                ret = 0;
index df1ed37..de01a6d 100644 (file)
 
 MODULE_LICENSE("GPL");
 
-static unsigned int limit = 64;
-module_param(limit, uint, 0644);
-MODULE_PARM_DESC(limit, "Maximum number of pages that may be allocated by "
-                       "the privcmd-buf device per open file");
-
 struct privcmd_buf_private {
        struct mutex lock;
        struct list_head list;
-       unsigned int allocated;
 };
 
 struct privcmd_buf_vma_private {
@@ -60,13 +54,10 @@ static void privcmd_buf_vmapriv_free(struct privcmd_buf_vma_private *vma_priv)
 {
        unsigned int i;
 
-       vma_priv->file_priv->allocated -= vma_priv->n_pages;
-
        list_del(&vma_priv->list);
 
        for (i = 0; i < vma_priv->n_pages; i++)
-               if (vma_priv->pages[i])
-                       __free_page(vma_priv->pages[i]);
+               __free_page(vma_priv->pages[i]);
 
        kfree(vma_priv);
 }
@@ -146,8 +137,7 @@ static int privcmd_buf_mmap(struct file *file, struct vm_area_struct *vma)
        unsigned int i;
        int ret = 0;
 
-       if (!(vma->vm_flags & VM_SHARED) || count > limit ||
-           file_priv->allocated + count > limit)
+       if (!(vma->vm_flags & VM_SHARED))
                return -EINVAL;
 
        vma_priv = kzalloc(sizeof(*vma_priv) + count * sizeof(void *),
@@ -155,19 +145,15 @@ static int privcmd_buf_mmap(struct file *file, struct vm_area_struct *vma)
        if (!vma_priv)
                return -ENOMEM;
 
-       vma_priv->n_pages = count;
-       count = 0;
-       for (i = 0; i < vma_priv->n_pages; i++) {
+       for (i = 0; i < count; i++) {
                vma_priv->pages[i] = alloc_page(GFP_KERNEL | __GFP_ZERO);
                if (!vma_priv->pages[i])
                        break;
-               count++;
+               vma_priv->n_pages++;
        }
 
        mutex_lock(&file_priv->lock);
 
-       file_priv->allocated += count;
-
        vma_priv->file_priv = file_priv;
        vma_priv->users = 1;
 
index 8095352..68f322f 100644 (file)
@@ -3163,6 +3163,9 @@ void btrfs_destroy_inode(struct inode *inode);
 int btrfs_drop_inode(struct inode *inode);
 int __init btrfs_init_cachep(void);
 void __cold btrfs_destroy_cachep(void);
+struct inode *btrfs_iget_path(struct super_block *s, struct btrfs_key *location,
+                             struct btrfs_root *root, int *new,
+                             struct btrfs_path *path);
 struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
                         struct btrfs_root *root, int *was_new);
 struct extent_map *btrfs_get_extent(struct btrfs_inode *inode,
index b0ab41d..3f0b6d1 100644 (file)
@@ -1664,9 +1664,8 @@ static int cleaner_kthread(void *arg)
        struct btrfs_root *root = arg;
        struct btrfs_fs_info *fs_info = root->fs_info;
        int again;
-       struct btrfs_trans_handle *trans;
 
-       do {
+       while (1) {
                again = 0;
 
                /* Make the cleaner go to sleep early. */
@@ -1715,42 +1714,16 @@ static int cleaner_kthread(void *arg)
                 */
                btrfs_delete_unused_bgs(fs_info);
 sleep:
+               if (kthread_should_park())
+                       kthread_parkme();
+               if (kthread_should_stop())
+                       return 0;
                if (!again) {
                        set_current_state(TASK_INTERRUPTIBLE);
-                       if (!kthread_should_stop())
-                               schedule();
+                       schedule();
                        __set_current_state(TASK_RUNNING);
                }
-       } while (!kthread_should_stop());
-
-       /*
-        * Transaction kthread is stopped before us and wakes us up.
-        * However we might have started a new transaction and COWed some
-        * tree blocks when deleting unused block groups for example. So
-        * make sure we commit the transaction we started to have a clean
-        * shutdown when evicting the btree inode - if it has dirty pages
-        * when we do the final iput() on it, eviction will trigger a
-        * writeback for it which will fail with null pointer dereferences
-        * since work queues and other resources were already released and
-        * destroyed by the time the iput/eviction/writeback is made.
-        */
-       trans = btrfs_attach_transaction(root);
-       if (IS_ERR(trans)) {
-               if (PTR_ERR(trans) != -ENOENT)
-                       btrfs_err(fs_info,
-                                 "cleaner transaction attach returned %ld",
-                                 PTR_ERR(trans));
-       } else {
-               int ret;
-
-               ret = btrfs_commit_transaction(trans);
-               if (ret)
-                       btrfs_err(fs_info,
-                                 "cleaner open transaction commit returned %d",
-                                 ret);
        }
-
-       return 0;
 }
 
 static int transaction_kthread(void *arg)
@@ -3931,6 +3904,13 @@ void close_ctree(struct btrfs_fs_info *fs_info)
        int ret;
 
        set_bit(BTRFS_FS_CLOSING_START, &fs_info->flags);
+       /*
+        * We don't want the cleaner to start new transactions, add more delayed
+        * iputs, etc. while we're closing. We can't use kthread_stop() yet
+        * because that frees the task_struct, and the transaction kthread might
+        * still try to wake up the cleaner.
+        */
+       kthread_park(fs_info->cleaner_kthread);
 
        /* wait for the qgroup rescan worker to stop */
        btrfs_qgroup_wait_for_completion(fs_info, false);
@@ -3958,9 +3938,8 @@ void close_ctree(struct btrfs_fs_info *fs_info)
 
        if (!sb_rdonly(fs_info->sb)) {
                /*
-                * If the cleaner thread is stopped and there are
-                * block groups queued for removal, the deletion will be
-                * skipped when we quit the cleaner thread.
+                * The cleaner kthread is stopped, so do one final pass over
+                * unused block groups.
                 */
                btrfs_delete_unused_bgs(fs_info);
 
@@ -4359,13 +4338,23 @@ static int btrfs_destroy_pinned_extent(struct btrfs_fs_info *fs_info,
        unpin = pinned_extents;
 again:
        while (1) {
+               /*
+                * The btrfs_finish_extent_commit() may get the same range as
+                * ours between find_first_extent_bit and clear_extent_dirty.
+                * Hence, hold the unused_bg_unpin_mutex to avoid double unpin
+                * the same extent range.
+                */
+               mutex_lock(&fs_info->unused_bg_unpin_mutex);
                ret = find_first_extent_bit(unpin, 0, &start, &end,
                                            EXTENT_DIRTY, NULL);
-               if (ret)
+               if (ret) {
+                       mutex_unlock(&fs_info->unused_bg_unpin_mutex);
                        break;
+               }
 
                clear_extent_dirty(unpin, start, end);
                btrfs_error_unpin_extent_range(fs_info, start, end);
+               mutex_unlock(&fs_info->unused_bg_unpin_mutex);
                cond_resched();
        }
 
index 4ba0aed..74aa552 100644 (file)
@@ -75,7 +75,8 @@ static struct inode *__lookup_free_space_inode(struct btrfs_root *root,
         * sure NOFS is set to keep us from deadlocking.
         */
        nofs_flag = memalloc_nofs_save();
-       inode = btrfs_iget(fs_info->sb, &location, root, NULL);
+       inode = btrfs_iget_path(fs_info->sb, &location, root, NULL, path);
+       btrfs_release_path(path);
        memalloc_nofs_restore(nofs_flag);
        if (IS_ERR(inode))
                return inode;
@@ -838,6 +839,25 @@ int load_free_space_cache(struct btrfs_fs_info *fs_info,
        path->search_commit_root = 1;
        path->skip_locking = 1;
 
+       /*
+        * We must pass a path with search_commit_root set to btrfs_iget in
+        * order to avoid a deadlock when allocating extents for the tree root.
+        *
+        * When we are COWing an extent buffer from the tree root, when looking
+        * for a free extent, at extent-tree.c:find_free_extent(), we can find
+        * block group without its free space cache loaded. When we find one
+        * we must load its space cache which requires reading its free space
+        * cache's inode item from the root tree. If this inode item is located
+        * in the same leaf that we started COWing before, then we end up in
+        * deadlock on the extent buffer (trying to read lock it when we
+        * previously write locked it).
+        *
+        * It's safe to read the inode item using the commit root because
+        * block groups, once loaded, stay in memory forever (until they are
+        * removed) as well as their space caches once loaded. New block groups
+        * once created get their ->cached field set to BTRFS_CACHE_FINISHED so
+        * we will never try to read their inode item while the fs is mounted.
+        */
        inode = lookup_free_space_inode(fs_info, block_group, path);
        if (IS_ERR(inode)) {
                btrfs_free_path(path);
index d3df5b5..9ea4c6f 100644 (file)
@@ -1531,12 +1531,11 @@ out_check:
        }
        btrfs_release_path(path);
 
-       if (cur_offset <= end && cow_start == (u64)-1) {
+       if (cur_offset <= end && cow_start == (u64)-1)
                cow_start = cur_offset;
-               cur_offset = end;
-       }
 
        if (cow_start != (u64)-1) {
+               cur_offset = end;
                ret = cow_file_range(inode, locked_page, cow_start, end, end,
                                     page_started, nr_written, 1, NULL);
                if (ret)
@@ -3570,10 +3569,11 @@ static noinline int acls_after_inode_item(struct extent_buffer *leaf,
 /*
  * read an inode from the btree into the in-memory inode
  */
-static int btrfs_read_locked_inode(struct inode *inode)
+static int btrfs_read_locked_inode(struct inode *inode,
+                                  struct btrfs_path *in_path)
 {
        struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
-       struct btrfs_path *path;
+       struct btrfs_path *path = in_path;
        struct extent_buffer *leaf;
        struct btrfs_inode_item *inode_item;
        struct btrfs_root *root = BTRFS_I(inode)->root;
@@ -3589,15 +3589,18 @@ static int btrfs_read_locked_inode(struct inode *inode)
        if (!ret)
                filled = true;
 
-       path = btrfs_alloc_path();
-       if (!path)
-               return -ENOMEM;
+       if (!path) {
+               path = btrfs_alloc_path();
+               if (!path)
+                       return -ENOMEM;
+       }
 
        memcpy(&location, &BTRFS_I(inode)->location, sizeof(location));
 
        ret = btrfs_lookup_inode(NULL, root, path, &location, 0);
        if (ret) {
-               btrfs_free_path(path);
+               if (path != in_path)
+                       btrfs_free_path(path);
                return ret;
        }
 
@@ -3722,7 +3725,8 @@ cache_acl:
                                  btrfs_ino(BTRFS_I(inode)),
                                  root->root_key.objectid, ret);
        }
-       btrfs_free_path(path);
+       if (path != in_path)
+               btrfs_free_path(path);
 
        if (!maybe_acls)
                cache_no_acl(inode);
@@ -5644,8 +5648,9 @@ static struct inode *btrfs_iget_locked(struct super_block *s,
 /* Get an inode object given its location and corresponding root.
  * Returns in *is_new if the inode was read from disk
  */
-struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
-                        struct btrfs_root *root, int *new)
+struct inode *btrfs_iget_path(struct super_block *s, struct btrfs_key *location,
+                             struct btrfs_root *root, int *new,
+                             struct btrfs_path *path)
 {
        struct inode *inode;
 
@@ -5656,7 +5661,7 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
        if (inode->i_state & I_NEW) {
                int ret;
 
-               ret = btrfs_read_locked_inode(inode);
+               ret = btrfs_read_locked_inode(inode, path);
                if (!ret) {
                        inode_tree_add(inode);
                        unlock_new_inode(inode);
@@ -5678,6 +5683,12 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
        return inode;
 }
 
+struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
+                        struct btrfs_root *root, int *new)
+{
+       return btrfs_iget_path(s, location, root, new, NULL);
+}
+
 static struct inode *new_simple_dir(struct super_block *s,
                                    struct btrfs_key *key,
                                    struct btrfs_root *root)
index 3ca6943..802a628 100644 (file)
@@ -3488,6 +3488,8 @@ static int btrfs_extent_same_range(struct inode *src, u64 loff, u64 olen,
                        const u64 sz = BTRFS_I(src)->root->fs_info->sectorsize;
 
                        len = round_down(i_size_read(src), sz) - loff;
+                       if (len == 0)
+                               return 0;
                        olen = len;
                }
        }
@@ -4257,9 +4259,17 @@ static noinline int btrfs_clone_files(struct file *file, struct file *file_src,
                goto out_unlock;
        if (len == 0)
                olen = len = src->i_size - off;
-       /* if we extend to eof, continue to block boundary */
-       if (off + len == src->i_size)
+       /*
+        * If we extend to eof, continue to block boundary if and only if the
+        * destination end offset matches the destination file's size, otherwise
+        * we would be corrupting data by placing the eof block into the middle
+        * of a file.
+        */
+       if (off + len == src->i_size) {
+               if (!IS_ALIGNED(len, bs) && destoff + len < inode->i_size)
+                       goto out_unlock;
                len = ALIGN(src->i_size, bs) - off;
+       }
 
        if (len == 0) {
                ret = 0;
index b362b45..cbc9d0d 100644 (file)
@@ -1916,7 +1916,7 @@ restore:
 }
 
 /* Used to sort the devices by max_avail(descending sort) */
-static int btrfs_cmp_device_free_bytes(const void *dev_info1,
+static inline int btrfs_cmp_device_free_bytes(const void *dev_info1,
                                       const void *dev_info2)
 {
        if (((struct btrfs_device_info *)dev_info1)->max_avail >
@@ -1945,8 +1945,8 @@ static inline void btrfs_descending_sort_devices(
  * The helper to calc the free space on the devices that can be used to store
  * file data.
  */
-static int btrfs_calc_avail_data_space(struct btrfs_fs_info *fs_info,
-                                      u64 *free_bytes)
+static inline int btrfs_calc_avail_data_space(struct btrfs_fs_info *fs_info,
+                                             u64 *free_bytes)
 {
        struct btrfs_device_info *devices_info;
        struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
index cab0b1f..efcf89a 100644 (file)
@@ -440,7 +440,7 @@ static int check_block_group_item(struct btrfs_fs_info *fs_info,
            type != (BTRFS_BLOCK_GROUP_METADATA |
                           BTRFS_BLOCK_GROUP_DATA)) {
                block_group_err(fs_info, leaf, slot,
-"invalid type, have 0x%llx (%lu bits set) expect either 0x%llx, 0x%llx, 0x%llu or 0x%llx",
+"invalid type, have 0x%llx (%lu bits set) expect either 0x%llx, 0x%llx, 0x%llx or 0x%llx",
                        type, hweight64(type),
                        BTRFS_BLOCK_GROUP_DATA, BTRFS_BLOCK_GROUP_METADATA,
                        BTRFS_BLOCK_GROUP_SYSTEM,
index e07f337..a5ce99a 100644 (file)
@@ -4396,6 +4396,23 @@ static int btrfs_log_changed_extents(struct btrfs_trans_handle *trans,
        logged_end = end;
 
        list_for_each_entry_safe(em, n, &tree->modified_extents, list) {
+               /*
+                * Skip extents outside our logging range. It's important to do
+                * it for correctness because if we don't ignore them, we may
+                * log them before their ordered extent completes, and therefore
+                * we could log them without logging their respective checksums
+                * (the checksum items are added to the csum tree at the very
+                * end of btrfs_finish_ordered_io()). Also leave such extents
+                * outside of our range in the list, since we may have another
+                * ranged fsync in the near future that needs them. If an extent
+                * outside our range corresponds to a hole, log it to avoid
+                * leaving gaps between extents (fsck will complain when we are
+                * not using the NO_HOLES feature).
+                */
+               if ((em->start > end || em->start + em->len <= start) &&
+                   em->block_start != EXTENT_MAP_HOLE)
+                       continue;
+
                list_del_init(&em->list);
                /*
                 * Just an arbitrary number, this can be really CPU intensive
index 27cad84..189df66 100644 (file)
@@ -1931,10 +1931,17 @@ static ssize_t ceph_copy_file_range(struct file *src_file, loff_t src_off,
        if (!prealloc_cf)
                return -ENOMEM;
 
-       /* Start by sync'ing the source file */
+       /* Start by sync'ing the source and destination files */
        ret = file_write_and_wait_range(src_file, src_off, (src_off + len));
-       if (ret < 0)
+       if (ret < 0) {
+               dout("failed to write src file (%zd)\n", ret);
+               goto out;
+       }
+       ret = file_write_and_wait_range(dst_file, dst_off, (dst_off + len));
+       if (ret < 0) {
+               dout("failed to write dst file (%zd)\n", ret);
                goto out;
+       }
 
        /*
         * We need FILE_WR caps for dst_ci and FILE_RD for src_ci as other
index 67a9aeb..bd13a32 100644 (file)
@@ -80,12 +80,8 @@ static int parse_reply_info_in(void **p, void *end,
        info->symlink = *p;
        *p += info->symlink_len;
 
-       if (features & CEPH_FEATURE_DIRLAYOUTHASH)
-               ceph_decode_copy_safe(p, end, &info->dir_layout,
-                                     sizeof(info->dir_layout), bad);
-       else
-               memset(&info->dir_layout, 0, sizeof(info->dir_layout));
-
+       ceph_decode_copy_safe(p, end, &info->dir_layout,
+                             sizeof(info->dir_layout), bad);
        ceph_decode_32_safe(p, end, info->xattr_len, bad);
        ceph_decode_need(p, end, info->xattr_len, bad);
        info->xattr_data = *p;
@@ -3182,10 +3178,8 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
        recon_state.pagelist = pagelist;
        if (session->s_con.peer_features & CEPH_FEATURE_MDSENC)
                recon_state.msg_version = 3;
-       else if (session->s_con.peer_features & CEPH_FEATURE_FLOCK)
-               recon_state.msg_version = 2;
        else
-               recon_state.msg_version = 1;
+               recon_state.msg_version = 2;
        err = iterate_session_caps(session, encode_caps_cb, &recon_state);
        if (err < 0)
                goto fail;
index 32d4f13..03f4d24 100644 (file)
@@ -237,7 +237,8 @@ static bool check_quota_exceeded(struct inode *inode, enum quota_check_op op,
                ceph_put_snap_realm(mdsc, realm);
                realm = next;
        }
-       ceph_put_snap_realm(mdsc, realm);
+       if (realm)
+               ceph_put_snap_realm(mdsc, realm);
        up_read(&mdsc->snap_rwsem);
 
        return exceeded;
index 05f01fb..22a9d81 100644 (file)
@@ -5835,9 +5835,10 @@ int ext4_mark_iloc_dirty(handle_t *handle,
 {
        int err = 0;
 
-       if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
+       if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) {
+               put_bh(iloc->bh);
                return -EIO;
-
+       }
        if (IS_I_VERSION(inode))
                inode_inc_iversion(inode);
 
index 17adcb1..437f71f 100644 (file)
@@ -126,6 +126,7 @@ static struct buffer_head *__ext4_read_dirblock(struct inode *inode,
        if (!is_dx_block && type == INDEX) {
                ext4_error_inode(inode, func, line, block,
                       "directory leaf block found instead of index block");
+               brelse(bh);
                return ERR_PTR(-EFSCORRUPTED);
        }
        if (!ext4_has_metadata_csum(inode->i_sb) ||
@@ -2811,7 +2812,9 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode)
                        list_del_init(&EXT4_I(inode)->i_orphan);
                        mutex_unlock(&sbi->s_orphan_lock);
                }
-       }
+       } else
+               brelse(iloc.bh);
+
        jbd_debug(4, "superblock will point to %lu\n", inode->i_ino);
        jbd_debug(4, "orphan inode %lu will point to %d\n",
                        inode->i_ino, NEXT_ORPHAN(inode));
index ebbc663..a5efee3 100644 (file)
@@ -459,16 +459,18 @@ static int set_flexbg_block_bitmap(struct super_block *sb, handle_t *handle,
 
                BUFFER_TRACE(bh, "get_write_access");
                err = ext4_journal_get_write_access(handle, bh);
-               if (err)
+               if (err) {
+                       brelse(bh);
                        return err;
+               }
                ext4_debug("mark block bitmap %#04llx (+%llu/%u)\n",
                           first_cluster, first_cluster - start, count2);
                ext4_set_bits(bh->b_data, first_cluster - start, count2);
 
                err = ext4_handle_dirty_metadata(handle, NULL, bh);
+               brelse(bh);
                if (unlikely(err))
                        return err;
-               brelse(bh);
        }
 
        return 0;
@@ -605,7 +607,6 @@ handle_bb:
                bh = bclean(handle, sb, block);
                if (IS_ERR(bh)) {
                        err = PTR_ERR(bh);
-                       bh = NULL;
                        goto out;
                }
                overhead = ext4_group_overhead_blocks(sb, group);
@@ -618,9 +619,9 @@ handle_bb:
                ext4_mark_bitmap_end(EXT4_B2C(sbi, group_data[i].blocks_count),
                                     sb->s_blocksize * 8, bh->b_data);
                err = ext4_handle_dirty_metadata(handle, NULL, bh);
+               brelse(bh);
                if (err)
                        goto out;
-               brelse(bh);
 
 handle_ib:
                if (bg_flags[i] & EXT4_BG_INODE_UNINIT)
@@ -635,18 +636,16 @@ handle_ib:
                bh = bclean(handle, sb, block);
                if (IS_ERR(bh)) {
                        err = PTR_ERR(bh);
-                       bh = NULL;
                        goto out;
                }
 
                ext4_mark_bitmap_end(EXT4_INODES_PER_GROUP(sb),
                                     sb->s_blocksize * 8, bh->b_data);
                err = ext4_handle_dirty_metadata(handle, NULL, bh);
+               brelse(bh);
                if (err)
                        goto out;
-               brelse(bh);
        }
-       bh = NULL;
 
        /* Mark group tables in block bitmap */
        for (j = 0; j < GROUP_TABLE_COUNT; j++) {
@@ -685,7 +684,6 @@ handle_ib:
        }
 
 out:
-       brelse(bh);
        err2 = ext4_journal_stop(handle);
        if (err2 && !err)
                err = err2;
@@ -873,6 +871,7 @@ static int add_new_gdb(handle_t *handle, struct inode *inode,
        err = ext4_handle_dirty_metadata(handle, NULL, gdb_bh);
        if (unlikely(err)) {
                ext4_std_error(sb, err);
+               iloc.bh = NULL;
                goto exit_inode;
        }
        brelse(dind);
@@ -924,6 +923,7 @@ static int add_new_gdb_meta_bg(struct super_block *sb,
                                     sizeof(struct buffer_head *),
                                     GFP_NOFS);
        if (!n_group_desc) {
+               brelse(gdb_bh);
                err = -ENOMEM;
                ext4_warning(sb, "not enough memory for %lu groups",
                             gdb_num + 1);
@@ -939,8 +939,6 @@ static int add_new_gdb_meta_bg(struct super_block *sb,
        kvfree(o_group_desc);
        BUFFER_TRACE(gdb_bh, "get_write_access");
        err = ext4_journal_get_write_access(handle, gdb_bh);
-       if (unlikely(err))
-               brelse(gdb_bh);
        return err;
 }
 
@@ -1124,8 +1122,10 @@ static void update_backups(struct super_block *sb, sector_t blk_off, char *data,
                           backup_block, backup_block -
                           ext4_group_first_block_no(sb, group));
                BUFFER_TRACE(bh, "get_write_access");
-               if ((err = ext4_journal_get_write_access(handle, bh)))
+               if ((err = ext4_journal_get_write_access(handle, bh))) {
+                       brelse(bh);
                        break;
+               }
                lock_buffer(bh);
                memcpy(bh->b_data, data, size);
                if (rest)
@@ -2023,7 +2023,7 @@ retry:
 
        err = ext4_alloc_flex_bg_array(sb, n_group + 1);
        if (err)
-               return err;
+               goto out;
 
        err = ext4_mb_alloc_groupinfo(sb, n_group + 1);
        if (err)
@@ -2059,6 +2059,10 @@ retry:
                n_blocks_count_retry = 0;
                free_flex_gd(flex_gd);
                flex_gd = NULL;
+               if (resize_inode) {
+                       iput(resize_inode);
+                       resize_inode = NULL;
+               }
                goto retry;
        }
 
index a221f1c..53ff6c2 100644 (file)
@@ -4075,6 +4075,14 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
        sbi->s_groups_count = blocks_count;
        sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count,
                        (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb)));
+       if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) !=
+           le32_to_cpu(es->s_inodes_count)) {
+               ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu",
+                        le32_to_cpu(es->s_inodes_count),
+                        ((u64)sbi->s_groups_count * sbi->s_inodes_per_group));
+               ret = -EINVAL;
+               goto failed_mount;
+       }
        db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) /
                   EXT4_DESC_PER_BLOCK(sb);
        if (ext4_has_feature_meta_bg(sb)) {
@@ -4094,14 +4102,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
                ret = -ENOMEM;
                goto failed_mount;
        }
-       if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) !=
-           le32_to_cpu(es->s_inodes_count)) {
-               ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu",
-                        le32_to_cpu(es->s_inodes_count),
-                        ((u64)sbi->s_groups_count * sbi->s_inodes_per_group));
-               ret = -EINVAL;
-               goto failed_mount;
-       }
 
        bgl_lock_init(sbi->s_blockgroup_lock);
 
@@ -4510,6 +4510,7 @@ failed_mount6:
        percpu_counter_destroy(&sbi->s_freeinodes_counter);
        percpu_counter_destroy(&sbi->s_dirs_counter);
        percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
+       percpu_free_rwsem(&sbi->s_journal_flag_rwsem);
 failed_mount5:
        ext4_ext_release(sb);
        ext4_release_system_zone(sb);
index f36fc5d..7643d52 100644 (file)
@@ -1031,10 +1031,8 @@ static int ext4_xattr_inode_update_ref(handle_t *handle, struct inode *ea_inode,
        inode_lock(ea_inode);
 
        ret = ext4_reserve_inode_write(handle, ea_inode, &iloc);
-       if (ret) {
-               iloc.bh = NULL;
+       if (ret)
                goto out;
-       }
 
        ref_count = ext4_xattr_inode_get_ref(ea_inode);
        ref_count += ref_change;
@@ -1080,12 +1078,10 @@ static int ext4_xattr_inode_update_ref(handle_t *handle, struct inode *ea_inode,
        }
 
        ret = ext4_mark_iloc_dirty(handle, ea_inode, &iloc);
-       iloc.bh = NULL;
        if (ret)
                ext4_warning_inode(ea_inode,
                                   "ext4_mark_iloc_dirty() failed ret=%d", ret);
 out:
-       brelse(iloc.bh);
        inode_unlock(ea_inode);
        return ret;
 }
@@ -1388,6 +1384,12 @@ retry:
                bh = ext4_getblk(handle, ea_inode, block, 0);
                if (IS_ERR(bh))
                        return PTR_ERR(bh);
+               if (!bh) {
+                       WARN_ON_ONCE(1);
+                       EXT4_ERROR_INODE(ea_inode,
+                                        "ext4_getblk() return bh = NULL");
+                       return -EFSCORRUPTED;
+               }
                ret = ext4_journal_get_write_access(handle, bh);
                if (ret)
                        goto out;
@@ -2276,8 +2278,10 @@ static struct buffer_head *ext4_xattr_get_block(struct inode *inode)
        if (!bh)
                return ERR_PTR(-EIO);
        error = ext4_xattr_check_block(inode, bh);
-       if (error)
+       if (error) {
+               brelse(bh);
                return ERR_PTR(error);
+       }
        return bh;
 }
 
@@ -2397,6 +2401,8 @@ retry_inode:
                        error = ext4_xattr_block_set(handle, inode, &i, &bs);
                } else if (error == -ENOSPC) {
                        if (EXT4_I(inode)->i_file_acl && !bs.s.base) {
+                               brelse(bs.bh);
+                               bs.bh = NULL;
                                error = ext4_xattr_block_find(inode, &i, &bs);
                                if (error)
                                        goto cleanup;
@@ -2617,6 +2623,8 @@ out:
        kfree(buffer);
        if (is)
                brelse(is->iloc.bh);
+       if (bs)
+               brelse(bs->bh);
        kfree(is);
        kfree(bs);
 
@@ -2696,7 +2704,6 @@ int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
                               struct ext4_inode *raw_inode, handle_t *handle)
 {
        struct ext4_xattr_ibody_header *header;
-       struct buffer_head *bh;
        struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
        static unsigned int mnt_count;
        size_t min_offs;
@@ -2737,13 +2744,17 @@ retry:
         * EA block can hold new_extra_isize bytes.
         */
        if (EXT4_I(inode)->i_file_acl) {
+               struct buffer_head *bh;
+
                bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl);
                error = -EIO;
                if (!bh)
                        goto cleanup;
                error = ext4_xattr_check_block(inode, bh);
-               if (error)
+               if (error) {
+                       brelse(bh);
                        goto cleanup;
+               }
                base = BHDR(bh);
                end = bh->b_data + bh->b_size;
                min_offs = end - base;
index 98d27da..74f6429 100644 (file)
@@ -1540,8 +1540,13 @@ static int do_umount(struct mount *mnt, int flags)
 
        namespace_lock();
        lock_mount_hash();
-       event++;
 
+       /* Recheck MNT_LOCKED with the locks held */
+       retval = -EINVAL;
+       if (mnt->mnt.mnt_flags & MNT_LOCKED)
+               goto out;
+
+       event++;
        if (flags & MNT_DETACH) {
                if (!list_empty(&mnt->mnt_list))
                        umount_tree(mnt, UMOUNT_PROPAGATE);
@@ -1555,6 +1560,7 @@ static int do_umount(struct mount *mnt, int flags)
                        retval = 0;
                }
        }
+out:
        unlock_mount_hash();
        namespace_unlock();
        return retval;
@@ -1645,7 +1651,7 @@ int ksys_umount(char __user *name, int flags)
                goto dput_and_out;
        if (!check_mnt(mnt))
                goto dput_and_out;
-       if (mnt->mnt.mnt_flags & MNT_LOCKED)
+       if (mnt->mnt.mnt_flags & MNT_LOCKED) /* Check optimistically */
                goto dput_and_out;
        retval = -EPERM;
        if (flags & MNT_FORCE && !capable(CAP_SYS_ADMIN))
@@ -1728,8 +1734,14 @@ struct mount *copy_tree(struct mount *mnt, struct dentry *dentry,
                for (s = r; s; s = next_mnt(s, r)) {
                        if (!(flag & CL_COPY_UNBINDABLE) &&
                            IS_MNT_UNBINDABLE(s)) {
-                               s = skip_mnt_tree(s);
-                               continue;
+                               if (s->mnt.mnt_flags & MNT_LOCKED) {
+                                       /* Both unbindable and locked. */
+                                       q = ERR_PTR(-EPERM);
+                                       goto out;
+                               } else {
+                                       s = skip_mnt_tree(s);
+                                       continue;
+                               }
                        }
                        if (!(flag & CL_COPY_MNT_NS_FILE) &&
                            is_mnt_ns_file(s->mnt.mnt_root)) {
@@ -1782,7 +1794,7 @@ void drop_collected_mounts(struct vfsmount *mnt)
 {
        namespace_lock();
        lock_mount_hash();
-       umount_tree(real_mount(mnt), UMOUNT_SYNC);
+       umount_tree(real_mount(mnt), 0);
        unlock_mount_hash();
        namespace_unlock();
 }
index 6fc5425..2652d00 100644 (file)
@@ -243,7 +243,7 @@ xfs_attr3_leaf_verify(
        struct xfs_mount                *mp = bp->b_target->bt_mount;
        struct xfs_attr_leafblock       *leaf = bp->b_addr;
        struct xfs_attr_leaf_entry      *entries;
-       uint16_t                        end;
+       uint32_t                        end;    /* must be 32bit - see below */
        int                             i;
 
        xfs_attr3_leaf_hdr_from_disk(mp->m_attr_geo, &ichdr, leaf);
@@ -293,6 +293,11 @@ xfs_attr3_leaf_verify(
        /*
         * Quickly check the freemap information.  Attribute data has to be
         * aligned to 4-byte boundaries, and likewise for the free space.
+        *
+        * Note that for 64k block size filesystems, the freemap entries cannot
+        * overflow as they are only be16 fields. However, when checking end
+        * pointer of the freemap, we have to be careful to detect overflows and
+        * so use uint32_t for those checks.
         */
        for (i = 0; i < XFS_ATTR_LEAF_MAPSIZE; i++) {
                if (ichdr.freemap[i].base > mp->m_attr_geo->blksize)
@@ -303,7 +308,9 @@ xfs_attr3_leaf_verify(
                        return __this_address;
                if (ichdr.freemap[i].size & 0x3)
                        return __this_address;
-               end = ichdr.freemap[i].base + ichdr.freemap[i].size;
+
+               /* be care of 16 bit overflows here */
+               end = (uint32_t)ichdr.freemap[i].base + ichdr.freemap[i].size;
                if (end < ichdr.freemap[i].base)
                        return __this_address;
                if (end > mp->m_attr_geo->blksize)
index 6e2c08f..6ecdbb3 100644 (file)
@@ -1608,7 +1608,7 @@ xfs_ioc_getbmap(
        error = 0;
 out_free_buf:
        kmem_free(buf);
-       return 0;
+       return error;
 }
 
 struct getfsmap_info {
index 576c375..6b736ea 100644 (file)
@@ -107,5 +107,5 @@ assfail(char *expr, char *file, int line)
 void
 xfs_hex_dump(void *p, int length)
 {
-       print_hex_dump(KERN_ALERT, "", DUMP_PREFIX_ADDRESS, 16, 1, p, length, 1);
+       print_hex_dump(KERN_ALERT, "", DUMP_PREFIX_OFFSET, 16, 1, p, length, 1);
 }
index 89f3b03..e3667c9 100644 (file)
@@ -3,7 +3,7 @@
 #define _4LEVEL_FIXUP_H
 
 #define __ARCH_HAS_4LEVEL_HACK
-#define __PAGETABLE_PUD_FOLDED
+#define __PAGETABLE_PUD_FOLDED 1
 
 #define PUD_SHIFT                      PGDIR_SHIFT
 #define PUD_SIZE                       PGDIR_SIZE
index 9c2e070..73474bb 100644 (file)
@@ -3,7 +3,7 @@
 #define _5LEVEL_FIXUP_H
 
 #define __ARCH_HAS_5LEVEL_HACK
-#define __PAGETABLE_P4D_FOLDED
+#define __PAGETABLE_P4D_FOLDED 1
 
 #define P4D_SHIFT                      PGDIR_SHIFT
 #define P4D_SIZE                       PGDIR_SIZE
index 0c34215..1d6dd38 100644 (file)
@@ -5,7 +5,7 @@
 #ifndef __ASSEMBLY__
 #include <asm-generic/5level-fixup.h>
 
-#define __PAGETABLE_PUD_FOLDED
+#define __PAGETABLE_PUD_FOLDED 1
 
 /*
  * Having the pud type consist of a pgd gets the size right, and allows
index 1a29b2a..04cb913 100644 (file)
@@ -4,7 +4,7 @@
 
 #ifndef __ASSEMBLY__
 
-#define __PAGETABLE_P4D_FOLDED
+#define __PAGETABLE_P4D_FOLDED 1
 
 typedef struct { pgd_t pgd; } p4d_t;
 
index f35f6e8..b85b827 100644 (file)
@@ -8,7 +8,7 @@
 
 struct mm_struct;
 
-#define __PAGETABLE_PMD_FOLDED
+#define __PAGETABLE_PMD_FOLDED 1
 
 /*
  * Having the pmd type consist of a pud gets the size right, and allows
index e950b9c..9bef475 100644 (file)
@@ -9,7 +9,7 @@
 #else
 #include <asm-generic/pgtable-nop4d.h>
 
-#define __PAGETABLE_PUD_FOLDED
+#define __PAGETABLE_PUD_FOLDED 1
 
 /*
  * Having the pud type consist of a p4d gets the size right, and allows
index 5657a20..359fb93 100644 (file)
@@ -1127,4 +1127,20 @@ static inline bool arch_has_pfn_modify_check(void)
 #endif
 #endif
 
+/*
+ * On some architectures it depends on the mm if the p4d/pud or pmd
+ * layer of the page table hierarchy is folded or not.
+ */
+#ifndef mm_p4d_folded
+#define mm_p4d_folded(mm)      __is_defined(__PAGETABLE_P4D_FOLDED)
+#endif
+
+#ifndef mm_pud_folded
+#define mm_pud_folded(mm)      __is_defined(__PAGETABLE_PUD_FOLDED)
+#endif
+
+#ifndef mm_pmd_folded
+#define mm_pmd_folded(mm)      __is_defined(__PAGETABLE_PMD_FOLDED)
+#endif
+
 #endif /* _ASM_GENERIC_PGTABLE_H */
diff --git a/include/dt-bindings/power/rk3066-power.h b/include/dt-bindings/power/rk3066-power.h
new file mode 100644 (file)
index 0000000..acf9f31
--- /dev/null
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __DT_BINDINGS_POWER_RK3066_POWER_H__
+#define __DT_BINDINGS_POWER_RK3066_POWER_H__
+
+/* VD_CORE */
+#define RK3066_PD_A9_0         0
+#define RK3066_PD_A9_1         1
+#define RK3066_PD_DBG          4
+#define RK3066_PD_SCU          5
+
+/* VD_LOGIC */
+#define RK3066_PD_VIDEO                6
+#define RK3066_PD_VIO          7
+#define RK3066_PD_GPU          8
+#define RK3066_PD_PERI         9
+#define RK3066_PD_CPU          10
+#define RK3066_PD_ALIVE                11
+
+/* VD_PMU */
+#define RK3066_PD_RTC          12
+
+#endif
diff --git a/include/dt-bindings/power/rk3188-power.h b/include/dt-bindings/power/rk3188-power.h
new file mode 100644 (file)
index 0000000..93d23df
--- /dev/null
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __DT_BINDINGS_POWER_RK3188_POWER_H__
+#define __DT_BINDINGS_POWER_RK3188_POWER_H__
+
+/* VD_CORE */
+#define RK3188_PD_A9_0         0
+#define RK3188_PD_A9_1         1
+#define RK3188_PD_A9_2         2
+#define RK3188_PD_A9_3         3
+#define RK3188_PD_DBG          4
+#define RK3188_PD_SCU          5
+
+/* VD_LOGIC */
+#define RK3188_PD_VIDEO                6
+#define RK3188_PD_VIO          7
+#define RK3188_PD_GPU          8
+#define RK3188_PD_PERI         9
+#define RK3188_PD_CPU          10
+#define RK3188_PD_ALIVE                11
+
+/* VD_PMU */
+#define RK3188_PD_RTC          12
+
+#endif
diff --git a/include/dt-bindings/thermal/tegra194-bpmp-thermal.h b/include/dt-bindings/thermal/tegra194-bpmp-thermal.h
new file mode 100644 (file)
index 0000000..aa7fb08
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * This header provides constants for binding nvidia,tegra194-bpmp-thermal.
+ */
+
+#ifndef _DT_BINDINGS_THERMAL_TEGRA194_BPMP_THERMAL_H
+#define _DT_BINDINGS_THERMAL_TEGRA194_BPMP_THERMAL_H
+
+#define TEGRA194_BPMP_THERMAL_ZONE_CPU 2
+#define TEGRA194_BPMP_THERMAL_ZONE_GPU 3
+#define TEGRA194_BPMP_THERMAL_ZONE_AUX 4
+#define TEGRA194_BPMP_THERMAL_ZONE_PLLX 5
+#define TEGRA194_BPMP_THERMAL_ZONE_AO 6
+#define TEGRA194_BPMP_THERMAL_ZONE_TJ_MAX 7
+
+#endif
index 6b92b33..65a38c4 100644 (file)
@@ -213,12 +213,6 @@ DEFINE_CEPH_FEATURE_DEPRECATED(63, 1, RESERVED_BROKEN, LUMINOUS) // client-facin
         CEPH_FEATURE_NEW_OSDOPREPLY_ENCODING | \
         CEPH_FEATURE_CEPHX_V2)
 
-#define CEPH_FEATURES_REQUIRED_DEFAULT   \
-       (CEPH_FEATURE_NOSRCADDR |        \
-        CEPH_FEATURE_SUBSCRIBE2 |       \
-        CEPH_FEATURE_RECONNECT_SEQ |    \
-        CEPH_FEATURE_PGID64 |           \
-        CEPH_FEATURE_PGPOOL3 |          \
-        CEPH_FEATURE_OSDENC)
+#define CEPH_FEATURES_REQUIRED_DEFAULT 0
 
 #endif
index c0f5db3..2010493 100644 (file)
 #define KASAN_ABI_VERSION 3
 #endif
 
-/*
- * Because __no_sanitize_address conflicts with inlining:
- *   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
- * we do one or the other. 
- */
-#ifdef CONFIG_KASAN
-#define __no_sanitize_address_or_inline                                        \
-       __no_sanitize_address __maybe_unused notrace
-#else
-#define __no_sanitize_address_or_inline inline
-#endif
-
 #if GCC_VERSION >= 50100
 #define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
 #endif
index 18c80cf..06396c1 100644 (file)
@@ -189,7 +189,7 @@ void __read_once_size(const volatile void *p, void *res, int size)
  *     https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
  * '__maybe_unused' allows us to avoid defined-but-not-used warnings.
  */
-# define __no_kasan_or_inline __no_sanitize_address __maybe_unused
+# define __no_kasan_or_inline __no_sanitize_address notrace __maybe_unused
 #else
 # define __no_kasan_or_inline __always_inline
 #endif
index 6b28c1b..f8c400b 100644 (file)
@@ -4,22 +4,26 @@
 
 /*
  * The attributes in this file are unconditionally defined and they directly
- * map to compiler attribute(s) -- except those that are optional.
+ * map to compiler attribute(s), unless one of the compilers does not support
+ * the attribute. In that case, __has_attribute is used to check for support
+ * and the reason is stated in its comment ("Optional: ...").
  *
  * Any other "attributes" (i.e. those that depend on a configuration option,
  * on a compiler, on an architecture, on plugins, on other attributes...)
  * should be defined elsewhere (e.g. compiler_types.h or compiler-*.h).
+ * The intention is to keep this file as simple as possible, as well as
+ * compiler- and version-agnostic (e.g. avoiding GCC_VERSION checks).
  *
  * This file is meant to be sorted (by actual attribute name,
  * not by #define identifier). Use the __attribute__((__name__)) syntax
  * (i.e. with underscores) to avoid future collisions with other macros.
- * If an attribute is optional, state the reason in the comment.
+ * Provide links to the documentation of each supported compiler, if it exists.
  */
 
 /*
- * To check for optional attributes, we use __has_attribute, which is supported
- * on gcc >= 5, clang >= 2.9 and icc >= 17. In the meantime, to support
- * 4.6 <= gcc < 5, we implement __has_attribute by hand.
+ * __has_attribute is supported on gcc >= 5, clang >= 2.9 and icc >= 17.
+ * In the meantime, to support 4.6 <= gcc < 5, we implement __has_attribute
+ * by hand.
  *
  * sparse does not support __has_attribute (yet) and defines __GNUC_MINOR__
  * depending on the compiler used to build it; however, these attributes have
index 3439d7d..4a3f9c0 100644 (file)
@@ -130,6 +130,10 @@ struct ftrace_likely_data {
 # define randomized_struct_fields_end
 #endif
 
+#ifndef asm_volatile_goto
+#define asm_volatile_goto(x...) asm goto(x)
+#endif
+
 /* Are two types/vars the same type (ignoring qualifiers)? */
 #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
 
index 2827b87..387c70d 100644 (file)
@@ -722,8 +722,8 @@ struct hid_usage_id {
  * input will not be passed to raw_event unless hid_device_io_start is
  * called.
  *
- * raw_event and event should return 0 on no action performed, 1 when no
- * further processing should be done and negative on error
+ * raw_event and event should return negative on error, any other value will
+ * pass the event on to .event() typically return 0 for success.
  *
  * input_mapping shall return a negative value to completely ignore this usage
  * (e.g. doubled or invalid usage), zero to continue with parsing of this
index e6bb36a..8336b2f 100644 (file)
@@ -21,6 +21,7 @@
 #define PIT_LATCH      ((PIT_TICK_RATE + HZ/2) / HZ)
 
 extern raw_spinlock_t i8253_lock;
+extern bool i8253_clear_counter_on_shutdown;
 extern struct clock_event_device i8253_clockevent;
 extern void clockevent_i8253_init(bool oneshot);
 
index fcf9cc9..5411de9 100644 (file)
@@ -1744,11 +1744,15 @@ int __pud_alloc(struct mm_struct *mm, p4d_t *p4d, unsigned long address);
 
 static inline void mm_inc_nr_puds(struct mm_struct *mm)
 {
+       if (mm_pud_folded(mm))
+               return;
        atomic_long_add(PTRS_PER_PUD * sizeof(pud_t), &mm->pgtables_bytes);
 }
 
 static inline void mm_dec_nr_puds(struct mm_struct *mm)
 {
+       if (mm_pud_folded(mm))
+               return;
        atomic_long_sub(PTRS_PER_PUD * sizeof(pud_t), &mm->pgtables_bytes);
 }
 #endif
@@ -1768,11 +1772,15 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address);
 
 static inline void mm_inc_nr_pmds(struct mm_struct *mm)
 {
+       if (mm_pmd_folded(mm))
+               return;
        atomic_long_add(PTRS_PER_PMD * sizeof(pmd_t), &mm->pgtables_bytes);
 }
 
 static inline void mm_dec_nr_pmds(struct mm_struct *mm)
 {
+       if (mm_pmd_folded(mm))
+               return;
        atomic_long_sub(PTRS_PER_PMD * sizeof(pmd_t), &mm->pgtables_bytes);
 }
 #endif
index abe975c..7f53ece 100644 (file)
@@ -324,9 +324,8 @@ static inline unsigned int nanddev_ntargets(const struct nand_device *nand)
  */
 static inline unsigned int nanddev_neraseblocks(const struct nand_device *nand)
 {
-       return (u64)nand->memorg.luns_per_target *
-              nand->memorg.eraseblocks_per_lun *
-              nand->memorg.pages_per_eraseblock;
+       return nand->memorg.ntargets * nand->memorg.luns_per_target *
+              nand->memorg.eraseblocks_per_lun;
 }
 
 /**
@@ -569,7 +568,7 @@ static inline void nanddev_pos_next_eraseblock(struct nand_device *nand,
 }
 
 /**
- * nanddev_pos_next_eraseblock() - Move a position to the next page
+ * nanddev_pos_next_page() - Move a position to the next page
  * @nand: NAND device
  * @pos: the position to update
  *
index dc1d9ed..857f8ab 100644 (file)
@@ -3190,6 +3190,26 @@ static inline void netdev_tx_sent_queue(struct netdev_queue *dev_queue,
 #endif
 }
 
+/* Variant of netdev_tx_sent_queue() for drivers that are aware
+ * that they should not test BQL status themselves.
+ * We do want to change __QUEUE_STATE_STACK_XOFF only for the last
+ * skb of a batch.
+ * Returns true if the doorbell must be used to kick the NIC.
+ */
+static inline bool __netdev_tx_sent_queue(struct netdev_queue *dev_queue,
+                                         unsigned int bytes,
+                                         bool xmit_more)
+{
+       if (xmit_more) {
+#ifdef CONFIG_BQL
+               dql_queued(&dev_queue->dql, bytes);
+#endif
+               return netif_tx_queue_stopped(dev_queue);
+       }
+       netdev_tx_sent_queue(dev_queue, bytes);
+       return true;
+}
+
 /**
  *     netdev_sent_queue - report the number of bytes queued to hardware
  *     @dev: network device
index 34fc80f..1d100ef 100644 (file)
@@ -314,7 +314,7 @@ enum {
 extern ip_set_id_t ip_set_get_byname(struct net *net,
                                     const char *name, struct ip_set **set);
 extern void ip_set_put_byindex(struct net *net, ip_set_id_t index);
-extern const char *ip_set_name_byindex(struct net *net, ip_set_id_t index);
+extern void ip_set_name_byindex(struct net *net, ip_set_id_t index, char *name);
 extern ip_set_id_t ip_set_nfnl_get_byindex(struct net *net, ip_set_id_t index);
 extern void ip_set_nfnl_put(struct net *net, ip_set_id_t index);
 
index 8e2bab1..70877f8 100644 (file)
@@ -43,11 +43,11 @@ ip_set_init_comment(struct ip_set *set, struct ip_set_comment *comment,
        rcu_assign_pointer(comment->c, c);
 }
 
-/* Used only when dumping a set, protected by rcu_read_lock_bh() */
+/* Used only when dumping a set, protected by rcu_read_lock() */
 static inline int
 ip_set_put_comment(struct sk_buff *skb, const struct ip_set_comment *comment)
 {
-       struct ip_set_comment_rcu *c = rcu_dereference_bh(comment->c);
+       struct ip_set_comment_rcu *c = rcu_dereference(comment->c);
 
        if (!c)
                return 0;
index 08f9247..9003e29 100644 (file)
@@ -119,6 +119,8 @@ static inline int hardlockup_detector_perf_init(void) { return 0; }
 void watchdog_nmi_stop(void);
 void watchdog_nmi_start(void);
 int watchdog_nmi_probe(void);
+int watchdog_nmi_enable(unsigned int cpu);
+void watchdog_nmi_disable(unsigned int cpu);
 
 /**
  * touch_nmi_watchdog - restart NMI watchdog timeout.
index 14b789a..1656c59 100644 (file)
@@ -317,6 +317,8 @@ bool ipv6_chk_acast_addr(struct net *net, struct net_device *dev,
                         const struct in6_addr *addr);
 bool ipv6_chk_acast_addr_src(struct net *net, struct net_device *dev,
                             const struct in6_addr *addr);
+int ipv6_anycast_init(void);
+void ipv6_anycast_cleanup(void);
 
 /* Device notifier */
 int register_inet6addr_notifier(struct notifier_block *nb);
index d7578cf..c9c78c1 100644 (file)
@@ -146,10 +146,12 @@ struct ifacaddr6 {
        struct in6_addr         aca_addr;
        struct fib6_info        *aca_rt;
        struct ifacaddr6        *aca_next;
+       struct hlist_node       aca_addr_lst;
        int                     aca_users;
        refcount_t              aca_refcnt;
        unsigned long           aca_cstamp;
        unsigned long           aca_tstamp;
+       struct rcu_head         rcu;
 };
 
 #define        IFA_HOST        IPV6_ADDR_LOOPBACK
index eed04af..ae7b86f 100644 (file)
@@ -153,4 +153,43 @@ void nf_ct_l4proto_log_invalid(const struct sk_buff *skb,
                               const char *fmt, ...) { }
 #endif /* CONFIG_SYSCTL */
 
+static inline struct nf_generic_net *nf_generic_pernet(struct net *net)
+{
+       return &net->ct.nf_ct_proto.generic;
+}
+
+static inline struct nf_tcp_net *nf_tcp_pernet(struct net *net)
+{
+       return &net->ct.nf_ct_proto.tcp;
+}
+
+static inline struct nf_udp_net *nf_udp_pernet(struct net *net)
+{
+       return &net->ct.nf_ct_proto.udp;
+}
+
+static inline struct nf_icmp_net *nf_icmp_pernet(struct net *net)
+{
+       return &net->ct.nf_ct_proto.icmp;
+}
+
+static inline struct nf_icmp_net *nf_icmpv6_pernet(struct net *net)
+{
+       return &net->ct.nf_ct_proto.icmpv6;
+}
+
+#ifdef CONFIG_NF_CT_PROTO_DCCP
+static inline struct nf_dccp_net *nf_dccp_pernet(struct net *net)
+{
+       return &net->ct.nf_ct_proto.dccp;
+}
+#endif
+
+#ifdef CONFIG_NF_CT_PROTO_SCTP
+static inline struct nf_sctp_net *nf_sctp_pernet(struct net *net)
+{
+       return &net->ct.nf_ct_proto.sctp;
+}
+#endif
+
 #endif /*_NF_CONNTRACK_PROTOCOL_H*/
index f5ff8a7..b01eb50 100644 (file)
@@ -83,11 +83,11 @@ struct kfd_ioctl_set_cu_mask_args {
 };
 
 struct kfd_ioctl_get_queue_wave_state_args {
-       uint64_t ctl_stack_address;     /* to KFD */
-       uint32_t ctl_stack_used_size;   /* from KFD */
-       uint32_t save_area_used_size;   /* from KFD */
-       uint32_t queue_id;              /* to KFD */
-       uint32_t pad;
+       __u64 ctl_stack_address;        /* to KFD */
+       __u32 ctl_stack_used_size;      /* from KFD */
+       __u32 save_area_used_size;      /* from KFD */
+       __u32 queue_id;                 /* to KFD */
+       __u32 pad;
 };
 
 /* For kfd_ioctl_set_memory_policy_args.default_policy and alternate_policy */
@@ -255,10 +255,10 @@ struct kfd_hsa_memory_exception_data {
 
 /* hw exception data */
 struct kfd_hsa_hw_exception_data {
-       uint32_t reset_type;
-       uint32_t reset_cause;
-       uint32_t memory_lost;
-       uint32_t gpu_id;
+       __u32 reset_type;
+       __u32 reset_cause;
+       __u32 memory_lost;
+       __u32 gpu_id;
 };
 
 /* Event data */
index 579974b..7de4f1b 100644 (file)
@@ -1635,8 +1635,8 @@ enum nft_ng_attributes {
        NFTA_NG_MODULUS,
        NFTA_NG_TYPE,
        NFTA_NG_OFFSET,
-       NFTA_NG_SET_NAME,
-       NFTA_NG_SET_ID,
+       NFTA_NG_SET_NAME,       /* deprecated */
+       NFTA_NG_SET_ID,         /* deprecated */
        __NFTA_NG_MAX
 };
 #define NFTA_NG_MAX    (__NFTA_NG_MAX - 1)
index 156ccd0..1610fdb 100644 (file)
 #include <linux/if_vlan.h>
 #include <linux/if_pppox.h>
 
+#ifndef __KERNEL__
+#include <limits.h> /* for INT_MIN, INT_MAX */
+#endif
+
 /* Bridge Hooks */
 /* After promisc drops, checksum checks. */
 #define NF_BR_PRE_ROUTING      0
index 34dd3d4..c81feb3 100644 (file)
@@ -568,6 +568,8 @@ struct sctp_assoc_reset_event {
 
 #define SCTP_ASSOC_CHANGE_DENIED       0x0004
 #define SCTP_ASSOC_CHANGE_FAILED       0x0008
+#define SCTP_STREAM_CHANGE_DENIED      SCTP_ASSOC_CHANGE_DENIED
+#define SCTP_STREAM_CHANGE_FAILED      SCTP_ASSOC_CHANGE_FAILED
 struct sctp_stream_change_event {
        __u16 strchange_type;
        __u16 strchange_flags;
@@ -1151,6 +1153,7 @@ struct sctp_add_streams {
 /* SCTP Stream schedulers */
 enum sctp_sched_type {
        SCTP_SS_FCFS,
+       SCTP_SS_DEFAULT = SCTP_SS_FCFS,
        SCTP_SS_PRIO,
        SCTP_SS_RR,
        SCTP_SS_MAX = SCTP_SS_RR
index 18803ff..4969817 100644 (file)
@@ -42,16 +42,12 @@ int xen_setup_shutdown_event(void);
 
 extern unsigned long *xen_contiguous_bitmap;
 
-#ifdef CONFIG_XEN_PV
+#if defined(CONFIG_XEN_PV) || defined(CONFIG_ARM) || defined(CONFIG_ARM64)
 int xen_create_contiguous_region(phys_addr_t pstart, unsigned int order,
                                unsigned int address_bits,
                                dma_addr_t *dma_handle);
 
 void xen_destroy_contiguous_region(phys_addr_t pstart, unsigned int order);
-
-int xen_remap_pfn(struct vm_area_struct *vma, unsigned long addr,
-                 xen_pfn_t *pfn, int nr, int *err_ptr, pgprot_t prot,
-                 unsigned int domid, bool no_translate, struct page **pages);
 #else
 static inline int xen_create_contiguous_region(phys_addr_t pstart,
                                               unsigned int order,
@@ -63,7 +59,13 @@ static inline int xen_create_contiguous_region(phys_addr_t pstart,
 
 static inline void xen_destroy_contiguous_region(phys_addr_t pstart,
                                                 unsigned int order) { }
+#endif
 
+#if defined(CONFIG_XEN_PV)
+int xen_remap_pfn(struct vm_area_struct *vma, unsigned long addr,
+                 xen_pfn_t *pfn, int nr, int *err_ptr, pgprot_t prot,
+                 unsigned int domid, bool no_translate, struct page **pages);
+#else
 static inline int xen_remap_pfn(struct vm_area_struct *vma, unsigned long addr,
                                xen_pfn_t *pfn, int nr, int *err_ptr,
                                pgprot_t prot,  unsigned int domid,
index 6377225..1a796e0 100644 (file)
@@ -553,7 +553,6 @@ bool is_bpf_text_address(unsigned long addr)
 int bpf_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
                    char *sym)
 {
-       unsigned long symbol_start, symbol_end;
        struct bpf_prog_aux *aux;
        unsigned int it = 0;
        int ret = -ERANGE;
@@ -566,10 +565,9 @@ int bpf_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
                if (it++ != symnum)
                        continue;
 
-               bpf_get_prog_addr_region(aux->prog, &symbol_start, &symbol_end);
                bpf_get_prog_name(aux->prog, sym);
 
-               *value = symbol_start;
+               *value = (unsigned long)aux->prog->bpf_func;
                *type  = BPF_SYM_ELF_TYPE;
 
                ret = 0;
index ccb9327..cf5040f 100644 (file)
@@ -2078,6 +2078,7 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
                info.jited_prog_len = 0;
                info.xlated_prog_len = 0;
                info.nr_jited_ksyms = 0;
+               info.nr_jited_func_lens = 0;
                goto done;
        }
 
@@ -2158,11 +2159,11 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
        }
 
        ulen = info.nr_jited_ksyms;
-       info.nr_jited_ksyms = prog->aux->func_cnt;
+       info.nr_jited_ksyms = prog->aux->func_cnt ? : 1;
        if (info.nr_jited_ksyms && ulen) {
                if (bpf_dump_raw_ok()) {
+                       unsigned long ksym_addr;
                        u64 __user *user_ksyms;
-                       ulong ksym_addr;
                        u32 i;
 
                        /* copy the address of the kernel symbol
@@ -2170,10 +2171,17 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
                         */
                        ulen = min_t(u32, info.nr_jited_ksyms, ulen);
                        user_ksyms = u64_to_user_ptr(info.jited_ksyms);
-                       for (i = 0; i < ulen; i++) {
-                               ksym_addr = (ulong) prog->aux->func[i]->bpf_func;
-                               ksym_addr &= PAGE_MASK;
-                               if (put_user((u64) ksym_addr, &user_ksyms[i]))
+                       if (prog->aux->func_cnt) {
+                               for (i = 0; i < ulen; i++) {
+                                       ksym_addr = (unsigned long)
+                                               prog->aux->func[i]->bpf_func;
+                                       if (put_user((u64) ksym_addr,
+                                                    &user_ksyms[i]))
+                                               return -EFAULT;
+                               }
+                       } else {
+                               ksym_addr = (unsigned long) prog->bpf_func;
+                               if (put_user((u64) ksym_addr, &user_ksyms[0]))
                                        return -EFAULT;
                        }
                } else {
@@ -2182,7 +2190,7 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
        }
 
        ulen = info.nr_jited_func_lens;
-       info.nr_jited_func_lens = prog->aux->func_cnt;
+       info.nr_jited_func_lens = prog->aux->func_cnt ? : 1;
        if (info.nr_jited_func_lens && ulen) {
                if (bpf_dump_raw_ok()) {
                        u32 __user *user_lens;
@@ -2191,9 +2199,16 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
                        /* copy the JITed image lengths for each function */
                        ulen = min_t(u32, info.nr_jited_func_lens, ulen);
                        user_lens = u64_to_user_ptr(info.jited_func_lens);
-                       for (i = 0; i < ulen; i++) {
-                               func_len = prog->aux->func[i]->jited_len;
-                               if (put_user(func_len, &user_lens[i]))
+                       if (prog->aux->func_cnt) {
+                               for (i = 0; i < ulen; i++) {
+                                       func_len =
+                                               prog->aux->func[i]->jited_len;
+                                       if (put_user(func_len, &user_lens[i]))
+                                               return -EFAULT;
+                               }
+                       } else {
+                               func_len = prog->jited_len;
+                               if (put_user(func_len, &user_lens[0]))
                                        return -EFAULT;
                        }
                } else {
index b3a3a1f..b0fbf68 100644 (file)
@@ -319,16 +319,23 @@ int release_resource(struct resource *old)
 EXPORT_SYMBOL(release_resource);
 
 /**
- * Finds the lowest iomem resource that covers part of [start..end].  The
- * caller must specify start, end, flags, and desc (which may be
+ * Finds the lowest iomem resource that covers part of [@start..@end].  The
+ * caller must specify @start, @end, @flags, and @desc (which may be
  * IORES_DESC_NONE).
  *
- * If a resource is found, returns 0 and *res is overwritten with the part
- * of the resource that's within [start..end]; if none is found, returns
- * -1.
+ * If a resource is found, returns 0 and @*res is overwritten with the part
+ * of the resource that's within [@start..@end]; if none is found, returns
+ * -1 or -EINVAL for other invalid parameters.
  *
  * This function walks the whole tree and not just first level children
  * unless @first_lvl is true.
+ *
+ * @start:     start address of the resource searched for
+ * @end:       end address of same resource
+ * @flags:     flags which the resource must have
+ * @desc:      descriptor the resource must have
+ * @first_lvl: walk only the first level children, if set
+ * @res:       return ptr, if resource found
  */
 static int find_next_iomem_res(resource_size_t start, resource_size_t end,
                               unsigned long flags, unsigned long desc,
@@ -399,6 +406,8 @@ static int __walk_iomem_res_desc(resource_size_t start, resource_size_t end,
  * @flags: I/O resource flags
  * @start: start addr
  * @end: end addr
+ * @arg: function argument for the callback @func
+ * @func: callback function that is called for each qualifying resource area
  *
  * NOTE: For a new descriptor search, define a new IORES_DESC in
  * <linux/ioport.h> and set it in 'desc' of a target resource entry.
index f12225f..091e089 100644 (file)
@@ -5851,11 +5851,14 @@ void __init sched_init_smp(void)
        /*
         * There's no userspace yet to cause hotplug operations; hence all the
         * CPU masks are stable and all blatant races in the below code cannot
-        * happen.
+        * happen. The hotplug lock is nevertheless taken to satisfy lockdep,
+        * but there won't be any contention on it.
         */
+       cpus_read_lock();
        mutex_lock(&sched_domains_mutex);
        sched_init_domains(cpu_active_mask);
        mutex_unlock(&sched_domains_mutex);
+       cpus_read_unlock();
 
        /* Move init over to a non-isolated CPU */
        if (set_cpus_allowed_ptr(current, housekeeping_cpumask(HK_FLAG_DOMAIN)) < 0)
index ee271bb..3648d03 100644 (file)
@@ -2400,8 +2400,8 @@ void task_numa_fault(int last_cpupid, int mem_node, int pages, int flags)
                local = 1;
 
        /*
-        * Retry task to preferred node migration periodically, in case it
-        * case it previously failed, or the scheduler moved us.
+        * Retry to migrate task to preferred node periodically, in case it
+        * previously failed, or the scheduler moved us.
         */
        if (time_after(jiffies, p->numa_migrate_retry)) {
                task_numa_placement(p);
index ce32cf7..8f0644a 100644 (file)
@@ -917,9 +917,6 @@ static void check_process_timers(struct task_struct *tsk,
        struct task_cputime cputime;
        unsigned long soft;
 
-       if (dl_task(tsk))
-               check_dl_overrun(tsk);
-
        /*
         * If cputimer is not running, then there are no active
         * process wide timers (POSIX 1.b, itimers, RLIMIT_CPU).
index 3ef15a6..bd30e93 100644 (file)
@@ -535,7 +535,7 @@ int traceprobe_update_arg(struct probe_arg *arg)
                        if (code[1].op != FETCH_OP_IMM)
                                return -EINVAL;
 
-                       tmp = strpbrk("+-", code->data);
+                       tmp = strpbrk(code->data, "+-");
                        if (tmp)
                                c = *tmp;
                        ret = traceprobe_split_symbol_offset(code->data,
index e5222b5..923414a 100644 (file)
@@ -974,10 +974,6 @@ static ssize_t map_write(struct file *file, const char __user *buf,
        if (!new_idmap_permitted(file, ns, cap_setid, &new_map))
                goto out;
 
-       ret = sort_idmaps(&new_map);
-       if (ret < 0)
-               goto out;
-
        ret = -EPERM;
        /* Map the lower ids from the parent user namespace to the
         * kernel global id space.
@@ -1004,6 +1000,14 @@ static ssize_t map_write(struct file *file, const char __user *buf,
                e->lower_first = lower_first;
        }
 
+       /*
+        * If we want to use binary search for lookup, this clones the extent
+        * array and sorts both copies.
+        */
+       ret = sort_idmaps(&new_map);
+       if (ret < 0)
+               goto out;
+
        /* Install the map */
        if (new_map.nr_extents <= UID_GID_MAP_MAX_BASE_EXTENTS) {
                memcpy(map->extent, new_map.extent,
index 5d73f5c..7977764 100644 (file)
@@ -27,7 +27,7 @@ ifeq ($(ARCH),arm)
         CFLAGS += -I../../../arch/arm/include -mfpu=neon
         HAS_NEON = yes
 endif
-ifeq ($(ARCH),arm64)
+ifeq ($(ARCH),aarch64)
         CFLAGS += -I../../../arch/arm64/include
         HAS_NEON = yes
 endif
@@ -41,7 +41,7 @@ ifeq ($(IS_X86),yes)
                    gcc -c -x assembler - >&/dev/null &&        \
                    rm ./-.o && echo -DCONFIG_AS_AVX512=1)
 else ifeq ($(HAS_NEON),yes)
-        OBJS   += neon.o neon1.o neon2.o neon4.o neon8.o
+        OBJS   += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
         CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1
 else
         HAS_ALTIVEC := $(shell printf '\#include <altivec.h>\nvector int a;\n' |\
index 77d43ae..0ffcbdd 100644 (file)
@@ -3272,7 +3272,7 @@ struct sk_buff *dev_hard_start_xmit(struct sk_buff *first, struct net_device *de
                }
 
                skb = next;
-               if (netif_xmit_stopped(txq) && skb) {
+               if (netif_tx_queue_stopped(txq) && skb) {
                        rc = NETDEV_TX_BUSY;
                        break;
                }
index 676f3ad..588f475 100644 (file)
@@ -1166,8 +1166,8 @@ ip_proto_again:
                break;
        }
 
-       if (dissector_uses_key(flow_dissector,
-                              FLOW_DISSECTOR_KEY_PORTS)) {
+       if (dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_PORTS) &&
+           !(key_control->flags & FLOW_DIS_IS_FRAGMENT)) {
                key_ports = skb_flow_dissector_target(flow_dissector,
                                                      FLOW_DISSECTOR_KEY_PORTS,
                                                      target_container);
index 5da9552..2b9fdbc 100644 (file)
@@ -717,7 +717,8 @@ int netpoll_setup(struct netpoll *np)
 
                                read_lock_bh(&idev->lock);
                                list_for_each_entry(ifp, &idev->addr_list, if_list) {
-                                       if (ipv6_addr_type(&ifp->addr) & IPV6_ADDR_LINKLOCAL)
+                                       if (!!(ipv6_addr_type(&ifp->addr) & IPV6_ADDR_LINKLOCAL) !=
+                                           !!(ipv6_addr_type(&np->remote_ip.in6) & IPV6_ADDR_LINKLOCAL))
                                                continue;
                                        np->local_ip.in6 = ifp->addr;
                                        err = 0;
index e01274b..33d9227 100644 (file)
@@ -3367,7 +3367,7 @@ static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb)
                        cb->seq = 0;
                }
                ret = dumpit(skb, cb);
-               if (ret < 0)
+               if (ret)
                        break;
        }
        cb->family = idx;
index 946de0e..b4ee5c8 100644 (file)
@@ -4944,6 +4944,8 @@ static unsigned int skb_gso_mac_seglen(const struct sk_buff *skb)
  *
  * This is a helper to do that correctly considering GSO_BY_FRAGS.
  *
+ * @skb: GSO skb
+ *
  * @seg_len: The segmented length (from skb_gso_*_seglen). In the
  *           GSO_BY_FRAGS case this will be [header sizes + GSO_BY_FRAGS].
  *
index 6fcc4bc..080a880 100644 (file)
@@ -3279,6 +3279,7 @@ int sock_load_diag_module(int family, int protocol)
 
 #ifdef CONFIG_INET
        if (family == AF_INET &&
+           protocol != IPPROTO_RAW &&
            !rcu_access_pointer(inet_protos[protocol]))
                return -ENOENT;
 #endif
index bcb11f3..760a9e5 100644 (file)
@@ -178,21 +178,22 @@ static struct inet_frag_queue *inet_frag_alloc(struct netns_frags *nf,
 }
 
 static struct inet_frag_queue *inet_frag_create(struct netns_frags *nf,
-                                               void *arg)
+                                               void *arg,
+                                               struct inet_frag_queue **prev)
 {
        struct inet_frags *f = nf->f;
        struct inet_frag_queue *q;
-       int err;
 
        q = inet_frag_alloc(nf, f, arg);
-       if (!q)
+       if (!q) {
+               *prev = ERR_PTR(-ENOMEM);
                return NULL;
-
+       }
        mod_timer(&q->timer, jiffies + nf->timeout);
 
-       err = rhashtable_insert_fast(&nf->rhashtable, &q->node,
-                                    f->rhash_params);
-       if (err < 0) {
+       *prev = rhashtable_lookup_get_insert_key(&nf->rhashtable, &q->key,
+                                                &q->node, f->rhash_params);
+       if (*prev) {
                q->flags |= INET_FRAG_COMPLETE;
                inet_frag_kill(q);
                inet_frag_destroy(q);
@@ -204,22 +205,22 @@ static struct inet_frag_queue *inet_frag_create(struct netns_frags *nf,
 /* TODO : call from rcu_read_lock() and no longer use refcount_inc_not_zero() */
 struct inet_frag_queue *inet_frag_find(struct netns_frags *nf, void *key)
 {
-       struct inet_frag_queue *fq;
+       struct inet_frag_queue *fq = NULL, *prev;
 
        if (!nf->high_thresh || frag_mem_limit(nf) > nf->high_thresh)
                return NULL;
 
        rcu_read_lock();
 
-       fq = rhashtable_lookup(&nf->rhashtable, key, nf->f->rhash_params);
-       if (fq) {
+       prev = rhashtable_lookup(&nf->rhashtable, key, nf->f->rhash_params);
+       if (!prev)
+               fq = inet_frag_create(nf, key, &prev);
+       if (prev && !IS_ERR(prev)) {
+               fq = prev;
                if (!refcount_inc_not_zero(&fq->refcnt))
                        fq = NULL;
-               rcu_read_unlock();
-               return fq;
        }
        rcu_read_unlock();
-
-       return inet_frag_create(nf, key);
+       return fq;
 }
 EXPORT_SYMBOL(inet_frag_find);
index 9b0158f..d6ee343 100644 (file)
@@ -722,10 +722,14 @@ struct sk_buff *ip_check_defrag(struct net *net, struct sk_buff *skb, u32 user)
        if (ip_is_fragment(&iph)) {
                skb = skb_share_check(skb, GFP_ATOMIC);
                if (skb) {
-                       if (!pskb_may_pull(skb, netoff + iph.ihl * 4))
-                               return skb;
-                       if (pskb_trim_rcsum(skb, netoff + len))
-                               return skb;
+                       if (!pskb_may_pull(skb, netoff + iph.ihl * 4)) {
+                               kfree_skb(skb);
+                               return NULL;
+                       }
+                       if (pskb_trim_rcsum(skb, netoff + len)) {
+                               kfree_skb(skb);
+                               return NULL;
+                       }
                        memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
                        if (ip_defrag(net, skb, user))
                                return NULL;
index 26c36cc..fffcc13 100644 (file)
@@ -1246,7 +1246,7 @@ int ip_setsockopt(struct sock *sk, int level,
                return -ENOPROTOOPT;
 
        err = do_ip_setsockopt(sk, level, optname, optval, optlen);
-#ifdef CONFIG_BPFILTER
+#if IS_ENABLED(CONFIG_BPFILTER_UMH)
        if (optname >= BPFILTER_IPT_SO_SET_REPLACE &&
            optname < BPFILTER_IPT_SET_MAX)
                err = bpfilter_ip_set_sockopt(sk, optname, optval, optlen);
@@ -1559,7 +1559,7 @@ int ip_getsockopt(struct sock *sk, int level,
        int err;
 
        err = do_ip_getsockopt(sk, level, optname, optval, optlen, 0);
-#ifdef CONFIG_BPFILTER
+#if IS_ENABLED(CONFIG_BPFILTER_UMH)
        if (optname >= BPFILTER_IPT_SO_GET_INFO &&
            optname < BPFILTER_IPT_GET_MAX)
                err = bpfilter_ip_get_sockopt(sk, optname, optval, optlen);
@@ -1596,7 +1596,7 @@ int compat_ip_getsockopt(struct sock *sk, int level, int optname,
        err = do_ip_getsockopt(sk, level, optname, optval, optlen,
                MSG_CMSG_COMPAT);
 
-#ifdef CONFIG_BPFILTER
+#if IS_ENABLED(CONFIG_BPFILTER_UMH)
        if (optname >= BPFILTER_IPT_SO_GET_INFO &&
            optname < BPFILTER_IPT_GET_MAX)
                err = bpfilter_ip_get_sockopt(sk, optname, optval, optlen);
index 3f4d610..f0cd291 100644 (file)
@@ -1001,6 +1001,9 @@ static int __init inet6_init(void)
        err = ip6_flowlabel_init();
        if (err)
                goto ip6_flowlabel_fail;
+       err = ipv6_anycast_init();
+       if (err)
+               goto ipv6_anycast_fail;
        err = addrconf_init();
        if (err)
                goto addrconf_fail;
@@ -1091,6 +1094,8 @@ ipv6_frag_fail:
 ipv6_exthdrs_fail:
        addrconf_cleanup();
 addrconf_fail:
+       ipv6_anycast_cleanup();
+ipv6_anycast_fail:
        ip6_flowlabel_cleanup();
 ip6_flowlabel_fail:
        ndisc_late_cleanup();
index 4e0ff70..9499905 100644 (file)
 
 #include <net/checksum.h>
 
+#define IN6_ADDR_HSIZE_SHIFT   8
+#define IN6_ADDR_HSIZE         BIT(IN6_ADDR_HSIZE_SHIFT)
+/*     anycast address hash table
+ */
+static struct hlist_head inet6_acaddr_lst[IN6_ADDR_HSIZE];
+static DEFINE_SPINLOCK(acaddr_hash_lock);
+
 static int ipv6_dev_ac_dec(struct net_device *dev, const struct in6_addr *addr);
 
+static u32 inet6_acaddr_hash(struct net *net, const struct in6_addr *addr)
+{
+       u32 val = ipv6_addr_hash(addr) ^ net_hash_mix(net);
+
+       return hash_32(val, IN6_ADDR_HSIZE_SHIFT);
+}
+
 /*
  *     socket join an anycast group
  */
@@ -204,16 +218,39 @@ void ipv6_sock_ac_close(struct sock *sk)
        rtnl_unlock();
 }
 
+static void ipv6_add_acaddr_hash(struct net *net, struct ifacaddr6 *aca)
+{
+       unsigned int hash = inet6_acaddr_hash(net, &aca->aca_addr);
+
+       spin_lock(&acaddr_hash_lock);
+       hlist_add_head_rcu(&aca->aca_addr_lst, &inet6_acaddr_lst[hash]);
+       spin_unlock(&acaddr_hash_lock);
+}
+
+static void ipv6_del_acaddr_hash(struct ifacaddr6 *aca)
+{
+       spin_lock(&acaddr_hash_lock);
+       hlist_del_init_rcu(&aca->aca_addr_lst);
+       spin_unlock(&acaddr_hash_lock);
+}
+
 static void aca_get(struct ifacaddr6 *aca)
 {
        refcount_inc(&aca->aca_refcnt);
 }
 
+static void aca_free_rcu(struct rcu_head *h)
+{
+       struct ifacaddr6 *aca = container_of(h, struct ifacaddr6, rcu);
+
+       fib6_info_release(aca->aca_rt);
+       kfree(aca);
+}
+
 static void aca_put(struct ifacaddr6 *ac)
 {
        if (refcount_dec_and_test(&ac->aca_refcnt)) {
-               fib6_info_release(ac->aca_rt);
-               kfree(ac);
+               call_rcu(&ac->rcu, aca_free_rcu);
        }
 }
 
@@ -229,6 +266,7 @@ static struct ifacaddr6 *aca_alloc(struct fib6_info *f6i,
        aca->aca_addr = *addr;
        fib6_info_hold(f6i);
        aca->aca_rt = f6i;
+       INIT_HLIST_NODE(&aca->aca_addr_lst);
        aca->aca_users = 1;
        /* aca_tstamp should be updated upon changes */
        aca->aca_cstamp = aca->aca_tstamp = jiffies;
@@ -285,6 +323,8 @@ int __ipv6_dev_ac_inc(struct inet6_dev *idev, const struct in6_addr *addr)
        aca_get(aca);
        write_unlock_bh(&idev->lock);
 
+       ipv6_add_acaddr_hash(net, aca);
+
        ip6_ins_rt(net, f6i);
 
        addrconf_join_solict(idev->dev, &aca->aca_addr);
@@ -325,6 +365,7 @@ int __ipv6_dev_ac_dec(struct inet6_dev *idev, const struct in6_addr *addr)
        else
                idev->ac_list = aca->aca_next;
        write_unlock_bh(&idev->lock);
+       ipv6_del_acaddr_hash(aca);
        addrconf_leave_solict(idev, &aca->aca_addr);
 
        ip6_del_rt(dev_net(idev->dev), aca->aca_rt);
@@ -352,6 +393,8 @@ void ipv6_ac_destroy_dev(struct inet6_dev *idev)
                idev->ac_list = aca->aca_next;
                write_unlock_bh(&idev->lock);
 
+               ipv6_del_acaddr_hash(aca);
+
                addrconf_leave_solict(idev, &aca->aca_addr);
 
                ip6_del_rt(dev_net(idev->dev), aca->aca_rt);
@@ -390,17 +433,25 @@ static bool ipv6_chk_acast_dev(struct net_device *dev, const struct in6_addr *ad
 bool ipv6_chk_acast_addr(struct net *net, struct net_device *dev,
                         const struct in6_addr *addr)
 {
+       unsigned int hash = inet6_acaddr_hash(net, addr);
+       struct net_device *nh_dev;
+       struct ifacaddr6 *aca;
        bool found = false;
 
        rcu_read_lock();
        if (dev)
                found = ipv6_chk_acast_dev(dev, addr);
        else
-               for_each_netdev_rcu(net, dev)
-                       if (ipv6_chk_acast_dev(dev, addr)) {
+               hlist_for_each_entry_rcu(aca, &inet6_acaddr_lst[hash],
+                                        aca_addr_lst) {
+                       nh_dev = fib6_info_nh_dev(aca->aca_rt);
+                       if (!nh_dev || !net_eq(dev_net(nh_dev), net))
+                               continue;
+                       if (ipv6_addr_equal(&aca->aca_addr, addr)) {
                                found = true;
                                break;
                        }
+               }
        rcu_read_unlock();
        return found;
 }
@@ -540,3 +591,24 @@ void ac6_proc_exit(struct net *net)
        remove_proc_entry("anycast6", net->proc_net);
 }
 #endif
+
+/*     Init / cleanup code
+ */
+int __init ipv6_anycast_init(void)
+{
+       int i;
+
+       for (i = 0; i < IN6_ADDR_HSIZE; i++)
+               INIT_HLIST_HEAD(&inet6_acaddr_lst[i]);
+       return 0;
+}
+
+void ipv6_anycast_cleanup(void)
+{
+       int i;
+
+       spin_lock(&acaddr_hash_lock);
+       for (i = 0; i < IN6_ADDR_HSIZE; i++)
+               WARN_ON(!hlist_empty(&inet6_acaddr_lst[i]));
+       spin_unlock(&acaddr_hash_lock);
+}
index 1b8bc00..ae37861 100644 (file)
@@ -591,7 +591,7 @@ static int inet6_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)
 
        /* fib entries are never clones */
        if (arg.filter.flags & RTM_F_CLONED)
-               return skb->len;
+               goto out;
 
        w = (void *)cb->args[2];
        if (!w) {
@@ -621,7 +621,7 @@ static int inet6_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)
                tb = fib6_get_table(net, arg.filter.table_id);
                if (!tb) {
                        if (arg.filter.dump_all_families)
-                               return skb->len;
+                               goto out;
 
                        NL_SET_ERR_MSG_MOD(cb->extack, "FIB table does not exist");
                        return -ENOENT;
index b8ac369..d219979 100644 (file)
@@ -587,11 +587,16 @@ int nf_ct_frag6_gather(struct net *net, struct sk_buff *skb, u32 user)
         */
        ret = -EINPROGRESS;
        if (fq->q.flags == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) &&
-           fq->q.meat == fq->q.len &&
-           nf_ct_frag6_reasm(fq, skb, dev))
-               ret = 0;
-       else
+           fq->q.meat == fq->q.len) {
+               unsigned long orefdst = skb->_skb_refdst;
+
+               skb->_skb_refdst = 0UL;
+               if (nf_ct_frag6_reasm(fq, skb, dev))
+                       ret = 0;
+               skb->_skb_refdst = orefdst;
+       } else {
                skb_dst_drop(skb);
+       }
 
 out_unlock:
        spin_unlock_bh(&fq->q.lock);
index bc4bd24..1577f2f 100644 (file)
@@ -55,11 +55,15 @@ MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
 MODULE_DESCRIPTION("core IP set support");
 MODULE_ALIAS_NFNL_SUBSYS(NFNL_SUBSYS_IPSET);
 
-/* When the nfnl mutex is held: */
+/* When the nfnl mutex or ip_set_ref_lock is held: */
 #define ip_set_dereference(p)          \
-       rcu_dereference_protected(p, lockdep_nfnl_is_held(NFNL_SUBSYS_IPSET))
+       rcu_dereference_protected(p,    \
+               lockdep_nfnl_is_held(NFNL_SUBSYS_IPSET) || \
+               lockdep_is_held(&ip_set_ref_lock))
 #define ip_set(inst, id)               \
        ip_set_dereference((inst)->ip_set_list)[id]
+#define ip_set_ref_netlink(inst,id)    \
+       rcu_dereference_raw((inst)->ip_set_list)[id]
 
 /* The set types are implemented in modules and registered set types
  * can be found in ip_set_type_list. Adding/deleting types is
@@ -693,21 +697,20 @@ ip_set_put_byindex(struct net *net, ip_set_id_t index)
 EXPORT_SYMBOL_GPL(ip_set_put_byindex);
 
 /* Get the name of a set behind a set index.
- * We assume the set is referenced, so it does exist and
- * can't be destroyed. The set cannot be renamed due to
- * the referencing either.
- *
+ * Set itself is protected by RCU, but its name isn't: to protect against
+ * renaming, grab ip_set_ref_lock as reader (see ip_set_rename()) and copy the
+ * name.
  */
-const char *
-ip_set_name_byindex(struct net *net, ip_set_id_t index)
+void
+ip_set_name_byindex(struct net *net, ip_set_id_t index, char *name)
 {
-       const struct ip_set *set = ip_set_rcu_get(net, index);
+       struct ip_set *set = ip_set_rcu_get(net, index);
 
        BUG_ON(!set);
-       BUG_ON(set->ref == 0);
 
-       /* Referenced, so it's safe */
-       return set->name;
+       read_lock_bh(&ip_set_ref_lock);
+       strncpy(name, set->name, IPSET_MAXNAMELEN);
+       read_unlock_bh(&ip_set_ref_lock);
 }
 EXPORT_SYMBOL_GPL(ip_set_name_byindex);
 
@@ -961,7 +964,7 @@ static int ip_set_create(struct net *net, struct sock *ctnl,
                        /* Wraparound */
                        goto cleanup;
 
-               list = kcalloc(i, sizeof(struct ip_set *), GFP_KERNEL);
+               list = kvcalloc(i, sizeof(struct ip_set *), GFP_KERNEL);
                if (!list)
                        goto cleanup;
                /* nfnl mutex is held, both lists are valid */
@@ -973,7 +976,7 @@ static int ip_set_create(struct net *net, struct sock *ctnl,
                /* Use new list */
                index = inst->ip_set_max;
                inst->ip_set_max = i;
-               kfree(tmp);
+               kvfree(tmp);
                ret = 0;
        } else if (ret) {
                goto cleanup;
@@ -1153,7 +1156,7 @@ static int ip_set_rename(struct net *net, struct sock *ctnl,
        if (!set)
                return -ENOENT;
 
-       read_lock_bh(&ip_set_ref_lock);
+       write_lock_bh(&ip_set_ref_lock);
        if (set->ref != 0) {
                ret = -IPSET_ERR_REFERENCED;
                goto out;
@@ -1170,7 +1173,7 @@ static int ip_set_rename(struct net *net, struct sock *ctnl,
        strncpy(set->name, name2, IPSET_MAXNAMELEN);
 
 out:
-       read_unlock_bh(&ip_set_ref_lock);
+       write_unlock_bh(&ip_set_ref_lock);
        return ret;
 }
 
@@ -1252,7 +1255,7 @@ ip_set_dump_done(struct netlink_callback *cb)
                struct ip_set_net *inst =
                        (struct ip_set_net *)cb->args[IPSET_CB_NET];
                ip_set_id_t index = (ip_set_id_t)cb->args[IPSET_CB_INDEX];
-               struct ip_set *set = ip_set(inst, index);
+               struct ip_set *set = ip_set_ref_netlink(inst, index);
 
                if (set->variant->uref)
                        set->variant->uref(set, cb, false);
@@ -1441,7 +1444,7 @@ next_set:
 release_refcount:
        /* If there was an error or set is done, release set */
        if (ret || !cb->args[IPSET_CB_ARG0]) {
-               set = ip_set(inst, index);
+               set = ip_set_ref_netlink(inst, index);
                if (set->variant->uref)
                        set->variant->uref(set, cb, false);
                pr_debug("release set %s\n", set->name);
@@ -2059,7 +2062,7 @@ ip_set_net_init(struct net *net)
        if (inst->ip_set_max >= IPSET_INVALID_ID)
                inst->ip_set_max = IPSET_INVALID_ID - 1;
 
-       list = kcalloc(inst->ip_set_max, sizeof(struct ip_set *), GFP_KERNEL);
+       list = kvcalloc(inst->ip_set_max, sizeof(struct ip_set *), GFP_KERNEL);
        if (!list)
                return -ENOMEM;
        inst->is_deleted = false;
@@ -2087,7 +2090,7 @@ ip_set_net_exit(struct net *net)
                }
        }
        nfnl_unlock(NFNL_SUBSYS_IPSET);
-       kfree(rcu_dereference_protected(inst->ip_set_list, 1));
+       kvfree(rcu_dereference_protected(inst->ip_set_list, 1));
 }
 
 static struct pernet_operations ip_set_net_ops = {
index d391485..613e18e 100644 (file)
@@ -213,13 +213,13 @@ hash_netportnet4_uadt(struct ip_set *set, struct nlattr *tb[],
 
        if (tb[IPSET_ATTR_CIDR]) {
                e.cidr[0] = nla_get_u8(tb[IPSET_ATTR_CIDR]);
-               if (!e.cidr[0] || e.cidr[0] > HOST_MASK)
+               if (e.cidr[0] > HOST_MASK)
                        return -IPSET_ERR_INVALID_CIDR;
        }
 
        if (tb[IPSET_ATTR_CIDR2]) {
                e.cidr[1] = nla_get_u8(tb[IPSET_ATTR_CIDR2]);
-               if (!e.cidr[1] || e.cidr[1] > HOST_MASK)
+               if (e.cidr[1] > HOST_MASK)
                        return -IPSET_ERR_INVALID_CIDR;
        }
 
@@ -493,13 +493,13 @@ hash_netportnet6_uadt(struct ip_set *set, struct nlattr *tb[],
 
        if (tb[IPSET_ATTR_CIDR]) {
                e.cidr[0] = nla_get_u8(tb[IPSET_ATTR_CIDR]);
-               if (!e.cidr[0] || e.cidr[0] > HOST_MASK)
+               if (e.cidr[0] > HOST_MASK)
                        return -IPSET_ERR_INVALID_CIDR;
        }
 
        if (tb[IPSET_ATTR_CIDR2]) {
                e.cidr[1] = nla_get_u8(tb[IPSET_ATTR_CIDR2]);
-               if (!e.cidr[1] || e.cidr[1] > HOST_MASK)
+               if (e.cidr[1] > HOST_MASK)
                        return -IPSET_ERR_INVALID_CIDR;
        }
 
index 072a658..4eef55d 100644 (file)
@@ -148,9 +148,7 @@ __list_set_del_rcu(struct rcu_head * rcu)
 {
        struct set_elem *e = container_of(rcu, struct set_elem, rcu);
        struct ip_set *set = e->set;
-       struct list_set *map = set->data;
 
-       ip_set_put_byindex(map->net, e->id);
        ip_set_ext_destroy(set, e);
        kfree(e);
 }
@@ -158,15 +156,21 @@ __list_set_del_rcu(struct rcu_head * rcu)
 static inline void
 list_set_del(struct ip_set *set, struct set_elem *e)
 {
+       struct list_set *map = set->data;
+
        set->elements--;
        list_del_rcu(&e->list);
+       ip_set_put_byindex(map->net, e->id);
        call_rcu(&e->rcu, __list_set_del_rcu);
 }
 
 static inline void
-list_set_replace(struct set_elem *e, struct set_elem *old)
+list_set_replace(struct ip_set *set, struct set_elem *e, struct set_elem *old)
 {
+       struct list_set *map = set->data;
+
        list_replace_rcu(&old->list, &e->list);
+       ip_set_put_byindex(map->net, old->id);
        call_rcu(&old->rcu, __list_set_del_rcu);
 }
 
@@ -298,7 +302,7 @@ list_set_uadd(struct ip_set *set, void *value, const struct ip_set_ext *ext,
        INIT_LIST_HEAD(&e->list);
        list_set_init_extensions(set, ext, e);
        if (n)
-               list_set_replace(e, n);
+               list_set_replace(set, e, n);
        else if (next)
                list_add_tail_rcu(&e->list, &next->list);
        else if (prev)
@@ -486,6 +490,7 @@ list_set_list(const struct ip_set *set,
        const struct list_set *map = set->data;
        struct nlattr *atd, *nested;
        u32 i = 0, first = cb->args[IPSET_CB_ARG0];
+       char name[IPSET_MAXNAMELEN];
        struct set_elem *e;
        int ret = 0;
 
@@ -504,8 +509,8 @@ list_set_list(const struct ip_set *set,
                nested = ipset_nest_start(skb, IPSET_ATTR_DATA);
                if (!nested)
                        goto nla_put_failure;
-               if (nla_put_string(skb, IPSET_ATTR_NAME,
-                                  ip_set_name_byindex(map->net, e->id)))
+               ip_set_name_byindex(map->net, e->id, name);
+               if (nla_put_string(skb, IPSET_ATTR_NAME, name))
                        goto nla_put_failure;
                if (ip_set_put_extensions(skb, set, e, true))
                        goto nla_put_failure;
index ca1168d..e92e749 100644 (file)
@@ -1073,19 +1073,22 @@ static unsigned int early_drop_list(struct net *net,
        return drops;
 }
 
-static noinline int early_drop(struct net *net, unsigned int _hash)
+static noinline int early_drop(struct net *net, unsigned int hash)
 {
-       unsigned int i;
+       unsigned int i, bucket;
 
        for (i = 0; i < NF_CT_EVICTION_RANGE; i++) {
                struct hlist_nulls_head *ct_hash;
-               unsigned int hash, hsize, drops;
+               unsigned int hsize, drops;
 
                rcu_read_lock();
                nf_conntrack_get_ht(&ct_hash, &hsize);
-               hash = reciprocal_scale(_hash++, hsize);
+               if (!i)
+                       bucket = reciprocal_scale(hash, hsize);
+               else
+                       bucket = (bucket + 1) % hsize;
 
-               drops = early_drop_list(net, &ct_hash[hash]);
+               drops = early_drop_list(net, &ct_hash[bucket]);
                rcu_read_unlock();
 
                if (drops) {
index 171e9e1..023c144 100644 (file)
@@ -384,11 +384,6 @@ dccp_state_table[CT_DCCP_ROLE_MAX + 1][DCCP_PKT_SYNCACK + 1][CT_DCCP_MAX + 1] =
        },
 };
 
-static inline struct nf_dccp_net *dccp_pernet(struct net *net)
-{
-       return &net->ct.nf_ct_proto.dccp;
-}
-
 static noinline bool
 dccp_new(struct nf_conn *ct, const struct sk_buff *skb,
         const struct dccp_hdr *dh)
@@ -401,7 +396,7 @@ dccp_new(struct nf_conn *ct, const struct sk_buff *skb,
        state = dccp_state_table[CT_DCCP_ROLE_CLIENT][dh->dccph_type][CT_DCCP_NONE];
        switch (state) {
        default:
-               dn = dccp_pernet(net);
+               dn = nf_dccp_pernet(net);
                if (dn->dccp_loose == 0) {
                        msg = "not picking up existing connection ";
                        goto out_invalid;
@@ -568,7 +563,7 @@ static int dccp_packet(struct nf_conn *ct, struct sk_buff *skb,
 
        timeouts = nf_ct_timeout_lookup(ct);
        if (!timeouts)
-               timeouts = dccp_pernet(nf_ct_net(ct))->dccp_timeout;
+               timeouts = nf_dccp_pernet(nf_ct_net(ct))->dccp_timeout;
        nf_ct_refresh_acct(ct, ctinfo, skb, timeouts[new_state]);
 
        return NF_ACCEPT;
@@ -681,7 +676,7 @@ static int nlattr_to_dccp(struct nlattr *cda[], struct nf_conn *ct)
 static int dccp_timeout_nlattr_to_obj(struct nlattr *tb[],
                                      struct net *net, void *data)
 {
-       struct nf_dccp_net *dn = dccp_pernet(net);
+       struct nf_dccp_net *dn = nf_dccp_pernet(net);
        unsigned int *timeouts = data;
        int i;
 
@@ -814,7 +809,7 @@ static int dccp_kmemdup_sysctl_table(struct net *net, struct nf_proto_net *pn,
 
 static int dccp_init_net(struct net *net)
 {
-       struct nf_dccp_net *dn = dccp_pernet(net);
+       struct nf_dccp_net *dn = nf_dccp_pernet(net);
        struct nf_proto_net *pn = &dn->pn;
 
        if (!pn->users) {
index e10e867..5da19d5 100644 (file)
@@ -27,11 +27,6 @@ static bool nf_generic_should_process(u8 proto)
        }
 }
 
-static inline struct nf_generic_net *generic_pernet(struct net *net)
-{
-       return &net->ct.nf_ct_proto.generic;
-}
-
 static bool generic_pkt_to_tuple(const struct sk_buff *skb,
                                 unsigned int dataoff,
                                 struct net *net, struct nf_conntrack_tuple *tuple)
@@ -58,7 +53,7 @@ static int generic_packet(struct nf_conn *ct,
        }
 
        if (!timeout)
-               timeout = &generic_pernet(nf_ct_net(ct))->timeout;
+               timeout = &nf_generic_pernet(nf_ct_net(ct))->timeout;
 
        nf_ct_refresh_acct(ct, ctinfo, skb, *timeout);
        return NF_ACCEPT;
@@ -72,7 +67,7 @@ static int generic_packet(struct nf_conn *ct,
 static int generic_timeout_nlattr_to_obj(struct nlattr *tb[],
                                         struct net *net, void *data)
 {
-       struct nf_generic_net *gn = generic_pernet(net);
+       struct nf_generic_net *gn = nf_generic_pernet(net);
        unsigned int *timeout = data;
 
        if (!timeout)
@@ -138,7 +133,7 @@ static int generic_kmemdup_sysctl_table(struct nf_proto_net *pn,
 
 static int generic_init_net(struct net *net)
 {
-       struct nf_generic_net *gn = generic_pernet(net);
+       struct nf_generic_net *gn = nf_generic_pernet(net);
        struct nf_proto_net *pn = &gn->pn;
 
        gn->timeout = nf_ct_generic_timeout;
index 3598520..de64d8a 100644 (file)
 
 static const unsigned int nf_ct_icmp_timeout = 30*HZ;
 
-static inline struct nf_icmp_net *icmp_pernet(struct net *net)
-{
-       return &net->ct.nf_ct_proto.icmp;
-}
-
 static bool icmp_pkt_to_tuple(const struct sk_buff *skb, unsigned int dataoff,
                              struct net *net, struct nf_conntrack_tuple *tuple)
 {
@@ -103,7 +98,7 @@ static int icmp_packet(struct nf_conn *ct,
        }
 
        if (!timeout)
-               timeout = &icmp_pernet(nf_ct_net(ct))->timeout;
+               timeout = &nf_icmp_pernet(nf_ct_net(ct))->timeout;
 
        nf_ct_refresh_acct(ct, ctinfo, skb, *timeout);
        return NF_ACCEPT;
@@ -275,7 +270,7 @@ static int icmp_timeout_nlattr_to_obj(struct nlattr *tb[],
                                      struct net *net, void *data)
 {
        unsigned int *timeout = data;
-       struct nf_icmp_net *in = icmp_pernet(net);
+       struct nf_icmp_net *in = nf_icmp_pernet(net);
 
        if (tb[CTA_TIMEOUT_ICMP_TIMEOUT]) {
                if (!timeout)
@@ -337,7 +332,7 @@ static int icmp_kmemdup_sysctl_table(struct nf_proto_net *pn,
 
 static int icmp_init_net(struct net *net)
 {
-       struct nf_icmp_net *in = icmp_pernet(net);
+       struct nf_icmp_net *in = nf_icmp_pernet(net);
        struct nf_proto_net *pn = &in->pn;
 
        in->timeout = nf_ct_icmp_timeout;
index 378618f..a15eefb 100644 (file)
 
 static const unsigned int nf_ct_icmpv6_timeout = 30*HZ;
 
-static inline struct nf_icmp_net *icmpv6_pernet(struct net *net)
-{
-       return &net->ct.nf_ct_proto.icmpv6;
-}
-
 static bool icmpv6_pkt_to_tuple(const struct sk_buff *skb,
                                unsigned int dataoff,
                                struct net *net,
@@ -87,7 +82,7 @@ static bool icmpv6_invert_tuple(struct nf_conntrack_tuple *tuple,
 
 static unsigned int *icmpv6_get_timeouts(struct net *net)
 {
-       return &icmpv6_pernet(net)->timeout;
+       return &nf_icmpv6_pernet(net)->timeout;
 }
 
 /* Returns verdict for packet, or -1 for invalid. */
@@ -286,7 +281,7 @@ static int icmpv6_timeout_nlattr_to_obj(struct nlattr *tb[],
                                        struct net *net, void *data)
 {
        unsigned int *timeout = data;
-       struct nf_icmp_net *in = icmpv6_pernet(net);
+       struct nf_icmp_net *in = nf_icmpv6_pernet(net);
 
        if (!timeout)
                timeout = icmpv6_get_timeouts(net);
@@ -348,7 +343,7 @@ static int icmpv6_kmemdup_sysctl_table(struct nf_proto_net *pn,
 
 static int icmpv6_init_net(struct net *net)
 {
-       struct nf_icmp_net *in = icmpv6_pernet(net);
+       struct nf_icmp_net *in = nf_icmpv6_pernet(net);
        struct nf_proto_net *pn = &in->pn;
 
        in->timeout = nf_ct_icmpv6_timeout;
index 3d719d3..d53e3e7 100644 (file)
@@ -146,11 +146,6 @@ static const u8 sctp_conntracks[2][11][SCTP_CONNTRACK_MAX] = {
        }
 };
 
-static inline struct nf_sctp_net *sctp_pernet(struct net *net)
-{
-       return &net->ct.nf_ct_proto.sctp;
-}
-
 #ifdef CONFIG_NF_CONNTRACK_PROCFS
 /* Print out the private part of the conntrack. */
 static void sctp_print_conntrack(struct seq_file *s, struct nf_conn *ct)
@@ -480,7 +475,7 @@ static int sctp_packet(struct nf_conn *ct,
 
        timeouts = nf_ct_timeout_lookup(ct);
        if (!timeouts)
-               timeouts = sctp_pernet(nf_ct_net(ct))->timeouts;
+               timeouts = nf_sctp_pernet(nf_ct_net(ct))->timeouts;
 
        nf_ct_refresh_acct(ct, ctinfo, skb, timeouts[new_state]);
 
@@ -599,7 +594,7 @@ static int sctp_timeout_nlattr_to_obj(struct nlattr *tb[],
                                      struct net *net, void *data)
 {
        unsigned int *timeouts = data;
-       struct nf_sctp_net *sn = sctp_pernet(net);
+       struct nf_sctp_net *sn = nf_sctp_pernet(net);
        int i;
 
        /* set default SCTP timeouts. */
@@ -736,7 +731,7 @@ static int sctp_kmemdup_sysctl_table(struct nf_proto_net *pn,
 
 static int sctp_init_net(struct net *net)
 {
-       struct nf_sctp_net *sn = sctp_pernet(net);
+       struct nf_sctp_net *sn = nf_sctp_pernet(net);
        struct nf_proto_net *pn = &sn->pn;
 
        if (!pn->users) {
index 1bcf998..4dcbd51 100644 (file)
@@ -272,11 +272,6 @@ static const u8 tcp_conntracks[2][6][TCP_CONNTRACK_MAX] = {
        }
 };
 
-static inline struct nf_tcp_net *tcp_pernet(struct net *net)
-{
-       return &net->ct.nf_ct_proto.tcp;
-}
-
 #ifdef CONFIG_NF_CONNTRACK_PROCFS
 /* Print out the private part of the conntrack. */
 static void tcp_print_conntrack(struct seq_file *s, struct nf_conn *ct)
@@ -475,7 +470,7 @@ static bool tcp_in_window(const struct nf_conn *ct,
                          const struct tcphdr *tcph)
 {
        struct net *net = nf_ct_net(ct);
-       struct nf_tcp_net *tn = tcp_pernet(net);
+       struct nf_tcp_net *tn = nf_tcp_pernet(net);
        struct ip_ct_tcp_state *sender = &state->seen[dir];
        struct ip_ct_tcp_state *receiver = &state->seen[!dir];
        const struct nf_conntrack_tuple *tuple = &ct->tuplehash[dir].tuple;
@@ -767,7 +762,7 @@ static noinline bool tcp_new(struct nf_conn *ct, const struct sk_buff *skb,
 {
        enum tcp_conntrack new_state;
        struct net *net = nf_ct_net(ct);
-       const struct nf_tcp_net *tn = tcp_pernet(net);
+       const struct nf_tcp_net *tn = nf_tcp_pernet(net);
        const struct ip_ct_tcp_state *sender = &ct->proto.tcp.seen[0];
        const struct ip_ct_tcp_state *receiver = &ct->proto.tcp.seen[1];
 
@@ -841,7 +836,7 @@ static int tcp_packet(struct nf_conn *ct,
                      const struct nf_hook_state *state)
 {
        struct net *net = nf_ct_net(ct);
-       struct nf_tcp_net *tn = tcp_pernet(net);
+       struct nf_tcp_net *tn = nf_tcp_pernet(net);
        struct nf_conntrack_tuple *tuple;
        enum tcp_conntrack new_state, old_state;
        unsigned int index, *timeouts;
@@ -1283,7 +1278,7 @@ static unsigned int tcp_nlattr_tuple_size(void)
 static int tcp_timeout_nlattr_to_obj(struct nlattr *tb[],
                                     struct net *net, void *data)
 {
-       struct nf_tcp_net *tn = tcp_pernet(net);
+       struct nf_tcp_net *tn = nf_tcp_pernet(net);
        unsigned int *timeouts = data;
        int i;
 
@@ -1508,7 +1503,7 @@ static int tcp_kmemdup_sysctl_table(struct nf_proto_net *pn,
 
 static int tcp_init_net(struct net *net)
 {
-       struct nf_tcp_net *tn = tcp_pernet(net);
+       struct nf_tcp_net *tn = nf_tcp_pernet(net);
        struct nf_proto_net *pn = &tn->pn;
 
        if (!pn->users) {
index a7aa703..c879d8d 100644 (file)
@@ -32,14 +32,9 @@ static const unsigned int udp_timeouts[UDP_CT_MAX] = {
        [UDP_CT_REPLIED]        = 180*HZ,
 };
 
-static inline struct nf_udp_net *udp_pernet(struct net *net)
-{
-       return &net->ct.nf_ct_proto.udp;
-}
-
 static unsigned int *udp_get_timeouts(struct net *net)
 {
-       return udp_pernet(net)->timeouts;
+       return nf_udp_pernet(net)->timeouts;
 }
 
 static void udp_error_log(const struct sk_buff *skb,
@@ -212,7 +207,7 @@ static int udp_timeout_nlattr_to_obj(struct nlattr *tb[],
                                     struct net *net, void *data)
 {
        unsigned int *timeouts = data;
-       struct nf_udp_net *un = udp_pernet(net);
+       struct nf_udp_net *un = nf_udp_pernet(net);
 
        if (!timeouts)
                timeouts = un->timeouts;
@@ -292,7 +287,7 @@ static int udp_kmemdup_sysctl_table(struct nf_proto_net *pn,
 
 static int udp_init_net(struct net *net)
 {
-       struct nf_udp_net *un = udp_pernet(net);
+       struct nf_udp_net *un = nf_udp_pernet(net);
        struct nf_proto_net *pn = &un->pn;
 
        if (!pn->users) {
index e7a50af..a518eb1 100644 (file)
@@ -382,7 +382,8 @@ err:
 static int
 cttimeout_default_fill_info(struct net *net, struct sk_buff *skb, u32 portid,
                            u32 seq, u32 type, int event, u16 l3num,
-                           const struct nf_conntrack_l4proto *l4proto)
+                           const struct nf_conntrack_l4proto *l4proto,
+                           const unsigned int *timeouts)
 {
        struct nlmsghdr *nlh;
        struct nfgenmsg *nfmsg;
@@ -408,7 +409,7 @@ cttimeout_default_fill_info(struct net *net, struct sk_buff *skb, u32 portid,
        if (!nest_parms)
                goto nla_put_failure;
 
-       ret = l4proto->ctnl_timeout.obj_to_nlattr(skb, NULL);
+       ret = l4proto->ctnl_timeout.obj_to_nlattr(skb, timeouts);
        if (ret < 0)
                goto nla_put_failure;
 
@@ -430,6 +431,7 @@ static int cttimeout_default_get(struct net *net, struct sock *ctnl,
                                 struct netlink_ext_ack *extack)
 {
        const struct nf_conntrack_l4proto *l4proto;
+       unsigned int *timeouts = NULL;
        struct sk_buff *skb2;
        int ret, err;
        __u16 l3num;
@@ -442,12 +444,44 @@ static int cttimeout_default_get(struct net *net, struct sock *ctnl,
        l4num = nla_get_u8(cda[CTA_TIMEOUT_L4PROTO]);
        l4proto = nf_ct_l4proto_find_get(l4num);
 
-       /* This protocol is not supported, skip. */
-       if (l4proto->l4proto != l4num) {
-               err = -EOPNOTSUPP;
+       err = -EOPNOTSUPP;
+       if (l4proto->l4proto != l4num)
                goto err;
+
+       switch (l4proto->l4proto) {
+       case IPPROTO_ICMP:
+               timeouts = &nf_icmp_pernet(net)->timeout;
+               break;
+       case IPPROTO_TCP:
+               timeouts = nf_tcp_pernet(net)->timeouts;
+               break;
+       case IPPROTO_UDP:
+               timeouts = nf_udp_pernet(net)->timeouts;
+               break;
+       case IPPROTO_DCCP:
+#ifdef CONFIG_NF_CT_PROTO_DCCP
+               timeouts = nf_dccp_pernet(net)->dccp_timeout;
+#endif
+               break;
+       case IPPROTO_ICMPV6:
+               timeouts = &nf_icmpv6_pernet(net)->timeout;
+               break;
+       case IPPROTO_SCTP:
+#ifdef CONFIG_NF_CT_PROTO_SCTP
+               timeouts = nf_sctp_pernet(net)->timeouts;
+#endif
+               break;
+       case 255:
+               timeouts = &nf_generic_pernet(net)->timeout;
+               break;
+       default:
+               WARN_ON_ONCE(1);
+               break;
        }
 
+       if (!timeouts)
+               goto err;
+
        skb2 = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
        if (skb2 == NULL) {
                err = -ENOMEM;
@@ -458,8 +492,7 @@ static int cttimeout_default_get(struct net *net, struct sock *ctnl,
                                          nlh->nlmsg_seq,
                                          NFNL_MSG_TYPE(nlh->nlmsg_type),
                                          IPCTNL_MSG_TIMEOUT_DEFAULT_SET,
-                                         l3num,
-                                         l4proto);
+                                         l3num, l4proto, timeouts);
        if (ret <= 0) {
                kfree_skb(skb2);
                err = -ENOMEM;
index 768292e..9d0ede4 100644 (file)
@@ -54,9 +54,11 @@ static bool nft_xt_put(struct nft_xt *xt)
        return false;
 }
 
-static int nft_compat_chain_validate_dependency(const char *tablename,
-                                               const struct nft_chain *chain)
+static int nft_compat_chain_validate_dependency(const struct nft_ctx *ctx,
+                                               const char *tablename)
 {
+       enum nft_chain_types type = NFT_CHAIN_T_DEFAULT;
+       const struct nft_chain *chain = ctx->chain;
        const struct nft_base_chain *basechain;
 
        if (!tablename ||
@@ -64,9 +66,12 @@ static int nft_compat_chain_validate_dependency(const char *tablename,
                return 0;
 
        basechain = nft_base_chain(chain);
-       if (strcmp(tablename, "nat") == 0 &&
-           basechain->type->type != NFT_CHAIN_T_NAT)
-               return -EINVAL;
+       if (strcmp(tablename, "nat") == 0) {
+               if (ctx->family != NFPROTO_BRIDGE)
+                       type = NFT_CHAIN_T_NAT;
+               if (basechain->type->type != type)
+                       return -EINVAL;
+       }
 
        return 0;
 }
@@ -342,8 +347,7 @@ static int nft_target_validate(const struct nft_ctx *ctx,
                if (target->hooks && !(hook_mask & target->hooks))
                        return -EINVAL;
 
-               ret = nft_compat_chain_validate_dependency(target->table,
-                                                          ctx->chain);
+               ret = nft_compat_chain_validate_dependency(ctx, target->table);
                if (ret < 0)
                        return ret;
        }
@@ -590,8 +594,7 @@ static int nft_match_validate(const struct nft_ctx *ctx,
                if (match->hooks && !(hook_mask & match->hooks))
                        return -EINVAL;
 
-               ret = nft_compat_chain_validate_dependency(match->table,
-                                                          ctx->chain);
+               ret = nft_compat_chain_validate_dependency(ctx, match->table);
                if (ret < 0)
                        return ret;
        }
index 649d170..3cc1b3d 100644 (file)
@@ -24,7 +24,6 @@ struct nft_ng_inc {
        u32                     modulus;
        atomic_t                counter;
        u32                     offset;
-       struct nft_set          *map;
 };
 
 static u32 nft_ng_inc_gen(struct nft_ng_inc *priv)
@@ -48,34 +47,11 @@ static void nft_ng_inc_eval(const struct nft_expr *expr,
        regs->data[priv->dreg] = nft_ng_inc_gen(priv);
 }
 
-static void nft_ng_inc_map_eval(const struct nft_expr *expr,
-                               struct nft_regs *regs,
-                               const struct nft_pktinfo *pkt)
-{
-       struct nft_ng_inc *priv = nft_expr_priv(expr);
-       const struct nft_set *map = priv->map;
-       const struct nft_set_ext *ext;
-       u32 result;
-       bool found;
-
-       result = nft_ng_inc_gen(priv);
-       found = map->ops->lookup(nft_net(pkt), map, &result, &ext);
-
-       if (!found)
-               return;
-
-       nft_data_copy(&regs->data[priv->dreg],
-                     nft_set_ext_data(ext), map->dlen);
-}
-
 static const struct nla_policy nft_ng_policy[NFTA_NG_MAX + 1] = {
        [NFTA_NG_DREG]          = { .type = NLA_U32 },
        [NFTA_NG_MODULUS]       = { .type = NLA_U32 },
        [NFTA_NG_TYPE]          = { .type = NLA_U32 },
        [NFTA_NG_OFFSET]        = { .type = NLA_U32 },
-       [NFTA_NG_SET_NAME]      = { .type = NLA_STRING,
-                                   .len = NFT_SET_MAXNAMELEN - 1 },
-       [NFTA_NG_SET_ID]        = { .type = NLA_U32 },
 };
 
 static int nft_ng_inc_init(const struct nft_ctx *ctx,
@@ -101,22 +77,6 @@ static int nft_ng_inc_init(const struct nft_ctx *ctx,
                                           NFT_DATA_VALUE, sizeof(u32));
 }
 
-static int nft_ng_inc_map_init(const struct nft_ctx *ctx,
-                              const struct nft_expr *expr,
-                              const struct nlattr * const tb[])
-{
-       struct nft_ng_inc *priv = nft_expr_priv(expr);
-       u8 genmask = nft_genmask_next(ctx->net);
-
-       nft_ng_inc_init(ctx, expr, tb);
-
-       priv->map = nft_set_lookup_global(ctx->net, ctx->table,
-                                         tb[NFTA_NG_SET_NAME],
-                                         tb[NFTA_NG_SET_ID], genmask);
-
-       return PTR_ERR_OR_ZERO(priv->map);
-}
-
 static int nft_ng_dump(struct sk_buff *skb, enum nft_registers dreg,
                       u32 modulus, enum nft_ng_types type, u32 offset)
 {
@@ -143,27 +103,10 @@ static int nft_ng_inc_dump(struct sk_buff *skb, const struct nft_expr *expr)
                           priv->offset);
 }
 
-static int nft_ng_inc_map_dump(struct sk_buff *skb,
-                              const struct nft_expr *expr)
-{
-       const struct nft_ng_inc *priv = nft_expr_priv(expr);
-
-       if (nft_ng_dump(skb, priv->dreg, priv->modulus,
-                       NFT_NG_INCREMENTAL, priv->offset) ||
-           nla_put_string(skb, NFTA_NG_SET_NAME, priv->map->name))
-               goto nla_put_failure;
-
-       return 0;
-
-nla_put_failure:
-       return -1;
-}
-
 struct nft_ng_random {
        enum nft_registers      dreg:8;
        u32                     modulus;
        u32                     offset;
-       struct nft_set          *map;
 };
 
 static u32 nft_ng_random_gen(struct nft_ng_random *priv)
@@ -183,25 +126,6 @@ static void nft_ng_random_eval(const struct nft_expr *expr,
        regs->data[priv->dreg] = nft_ng_random_gen(priv);
 }
 
-static void nft_ng_random_map_eval(const struct nft_expr *expr,
-                                  struct nft_regs *regs,
-                                  const struct nft_pktinfo *pkt)
-{
-       struct nft_ng_random *priv = nft_expr_priv(expr);
-       const struct nft_set *map = priv->map;
-       const struct nft_set_ext *ext;
-       u32 result;
-       bool found;
-
-       result = nft_ng_random_gen(priv);
-       found = map->ops->lookup(nft_net(pkt), map, &result, &ext);
-       if (!found)
-               return;
-
-       nft_data_copy(&regs->data[priv->dreg],
-                     nft_set_ext_data(ext), map->dlen);
-}
-
 static int nft_ng_random_init(const struct nft_ctx *ctx,
                              const struct nft_expr *expr,
                              const struct nlattr * const tb[])
@@ -226,21 +150,6 @@ static int nft_ng_random_init(const struct nft_ctx *ctx,
                                           NFT_DATA_VALUE, sizeof(u32));
 }
 
-static int nft_ng_random_map_init(const struct nft_ctx *ctx,
-                                 const struct nft_expr *expr,
-                                 const struct nlattr * const tb[])
-{
-       struct nft_ng_random *priv = nft_expr_priv(expr);
-       u8 genmask = nft_genmask_next(ctx->net);
-
-       nft_ng_random_init(ctx, expr, tb);
-       priv->map = nft_set_lookup_global(ctx->net, ctx->table,
-                                         tb[NFTA_NG_SET_NAME],
-                                         tb[NFTA_NG_SET_ID], genmask);
-
-       return PTR_ERR_OR_ZERO(priv->map);
-}
-
 static int nft_ng_random_dump(struct sk_buff *skb, const struct nft_expr *expr)
 {
        const struct nft_ng_random *priv = nft_expr_priv(expr);
@@ -249,22 +158,6 @@ static int nft_ng_random_dump(struct sk_buff *skb, const struct nft_expr *expr)
                           priv->offset);
 }
 
-static int nft_ng_random_map_dump(struct sk_buff *skb,
-                                 const struct nft_expr *expr)
-{
-       const struct nft_ng_random *priv = nft_expr_priv(expr);
-
-       if (nft_ng_dump(skb, priv->dreg, priv->modulus,
-                       NFT_NG_RANDOM, priv->offset) ||
-           nla_put_string(skb, NFTA_NG_SET_NAME, priv->map->name))
-               goto nla_put_failure;
-
-       return 0;
-
-nla_put_failure:
-       return -1;
-}
-
 static struct nft_expr_type nft_ng_type;
 static const struct nft_expr_ops nft_ng_inc_ops = {
        .type           = &nft_ng_type,
@@ -274,14 +167,6 @@ static const struct nft_expr_ops nft_ng_inc_ops = {
        .dump           = nft_ng_inc_dump,
 };
 
-static const struct nft_expr_ops nft_ng_inc_map_ops = {
-       .type           = &nft_ng_type,
-       .size           = NFT_EXPR_SIZE(sizeof(struct nft_ng_inc)),
-       .eval           = nft_ng_inc_map_eval,
-       .init           = nft_ng_inc_map_init,
-       .dump           = nft_ng_inc_map_dump,
-};
-
 static const struct nft_expr_ops nft_ng_random_ops = {
        .type           = &nft_ng_type,
        .size           = NFT_EXPR_SIZE(sizeof(struct nft_ng_random)),
@@ -290,14 +175,6 @@ static const struct nft_expr_ops nft_ng_random_ops = {
        .dump           = nft_ng_random_dump,
 };
 
-static const struct nft_expr_ops nft_ng_random_map_ops = {
-       .type           = &nft_ng_type,
-       .size           = NFT_EXPR_SIZE(sizeof(struct nft_ng_random)),
-       .eval           = nft_ng_random_map_eval,
-       .init           = nft_ng_random_map_init,
-       .dump           = nft_ng_random_map_dump,
-};
-
 static const struct nft_expr_ops *
 nft_ng_select_ops(const struct nft_ctx *ctx, const struct nlattr * const tb[])
 {
@@ -312,12 +189,8 @@ nft_ng_select_ops(const struct nft_ctx *ctx, const struct nlattr * const tb[])
 
        switch (type) {
        case NFT_NG_INCREMENTAL:
-               if (tb[NFTA_NG_SET_NAME])
-                       return &nft_ng_inc_map_ops;
                return &nft_ng_inc_ops;
        case NFT_NG_RANDOM:
-               if (tb[NFTA_NG_SET_NAME])
-                       return &nft_ng_random_map_ops;
                return &nft_ng_random_ops;
        }
 
index ca5e5d8..b13618c 100644 (file)
@@ -50,7 +50,7 @@ static int nft_osf_init(const struct nft_ctx *ctx,
        int err;
        u8 ttl;
 
-       if (nla_get_u8(tb[NFTA_OSF_TTL])) {
+       if (tb[NFTA_OSF_TTL]) {
                ttl = nla_get_u8(tb[NFTA_OSF_TTL]);
                if (ttl > 2)
                        return -EINVAL;
index c6acfc2..eb4cbd2 100644 (file)
@@ -114,6 +114,22 @@ static void idletimer_tg_expired(struct timer_list *t)
        schedule_work(&timer->work);
 }
 
+static int idletimer_check_sysfs_name(const char *name, unsigned int size)
+{
+       int ret;
+
+       ret = xt_check_proc_name(name, size);
+       if (ret < 0)
+               return ret;
+
+       if (!strcmp(name, "power") ||
+           !strcmp(name, "subsystem") ||
+           !strcmp(name, "uevent"))
+               return -EINVAL;
+
+       return 0;
+}
+
 static int idletimer_tg_create(struct idletimer_tg_info *info)
 {
        int ret;
@@ -124,6 +140,10 @@ static int idletimer_tg_create(struct idletimer_tg_info *info)
                goto out;
        }
 
+       ret = idletimer_check_sysfs_name(info->label, sizeof(info->label));
+       if (ret < 0)
+               goto out_free_timer;
+
        sysfs_attr_init(&info->timer->attr.attr);
        info->timer->attr.attr.name = kstrdup(info->label, GFP_KERNEL);
        if (!info->timer->attr.attr.name) {
index 6bec37a..a4660c4 100644 (file)
@@ -1203,7 +1203,8 @@ static int ovs_ct_commit(struct net *net, struct sw_flow_key *key,
                                         &info->labels.mask);
                if (err)
                        return err;
-       } else if (labels_nonzero(&info->labels.mask)) {
+       } else if (IS_ENABLED(CONFIG_NF_CONNTRACK_LABELS) &&
+                  labels_nonzero(&info->labels.mask)) {
                err = ovs_ct_set_labels(ct, key, &info->labels.value,
                                        &info->labels.mask);
                if (err)
index 382196e..bc628ac 100644 (file)
@@ -611,6 +611,7 @@ struct rxrpc_call {
                                                 * not hard-ACK'd packet follows this.
                                                 */
        rxrpc_seq_t             tx_top;         /* Highest Tx slot allocated. */
+       u16                     tx_backoff;     /* Delay to insert due to Tx failure */
 
        /* TCP-style slow-start congestion control [RFC5681].  Since the SMSS
         * is fixed, we keep these numbers in terms of segments (ie. DATA
index 8e7434e..468efc3 100644 (file)
@@ -123,6 +123,7 @@ static void __rxrpc_propose_ACK(struct rxrpc_call *call, u8 ack_reason,
                else
                        ack_at = expiry;
 
+               ack_at += READ_ONCE(call->tx_backoff);
                ack_at += now;
                if (time_before(ack_at, call->ack_at)) {
                        WRITE_ONCE(call->ack_at, ack_at);
@@ -311,6 +312,7 @@ void rxrpc_process_call(struct work_struct *work)
                container_of(work, struct rxrpc_call, processor);
        rxrpc_serial_t *send_ack;
        unsigned long now, next, t;
+       unsigned int iterations = 0;
 
        rxrpc_see_call(call);
 
@@ -319,6 +321,11 @@ void rxrpc_process_call(struct work_struct *work)
               call->debug_id, rxrpc_call_states[call->state], call->events);
 
 recheck_state:
+       /* Limit the number of times we do this before returning to the manager */
+       iterations++;
+       if (iterations > 5)
+               goto requeue;
+
        if (test_and_clear_bit(RXRPC_CALL_EV_ABORT, &call->events)) {
                rxrpc_send_abort_packet(call);
                goto recheck_state;
@@ -447,13 +454,16 @@ recheck_state:
        rxrpc_reduce_call_timer(call, next, now, rxrpc_timer_restart);
 
        /* other events may have been raised since we started checking */
-       if (call->events && call->state < RXRPC_CALL_COMPLETE) {
-               __rxrpc_queue_call(call);
-               goto out;
-       }
+       if (call->events && call->state < RXRPC_CALL_COMPLETE)
+               goto requeue;
 
 out_put:
        rxrpc_put_call(call, rxrpc_call_put);
 out:
        _leave("");
+       return;
+
+requeue:
+       __rxrpc_queue_call(call);
+       goto out;
 }
index 1894188..736aa92 100644 (file)
@@ -35,6 +35,21 @@ struct rxrpc_abort_buffer {
 static const char rxrpc_keepalive_string[] = "";
 
 /*
+ * Increase Tx backoff on transmission failure and clear it on success.
+ */
+static void rxrpc_tx_backoff(struct rxrpc_call *call, int ret)
+{
+       if (ret < 0) {
+               u16 tx_backoff = READ_ONCE(call->tx_backoff);
+
+               if (tx_backoff < HZ)
+                       WRITE_ONCE(call->tx_backoff, tx_backoff + 1);
+       } else {
+               WRITE_ONCE(call->tx_backoff, 0);
+       }
+}
+
+/*
  * Arrange for a keepalive ping a certain time after we last transmitted.  This
  * lets the far side know we're still interested in this call and helps keep
  * the route through any intervening firewall open.
@@ -210,6 +225,7 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, bool ping,
        else
                trace_rxrpc_tx_packet(call->debug_id, &pkt->whdr,
                                      rxrpc_tx_point_call_ack);
+       rxrpc_tx_backoff(call, ret);
 
        if (call->state < RXRPC_CALL_COMPLETE) {
                if (ret < 0) {
@@ -218,7 +234,7 @@ int rxrpc_send_ack_packet(struct rxrpc_call *call, bool ping,
                        rxrpc_propose_ACK(call, pkt->ack.reason,
                                          ntohs(pkt->ack.maxSkew),
                                          ntohl(pkt->ack.serial),
-                                         true, true,
+                                         false, true,
                                          rxrpc_propose_ack_retry_tx);
                } else {
                        spin_lock_bh(&call->lock);
@@ -300,7 +316,7 @@ int rxrpc_send_abort_packet(struct rxrpc_call *call)
        else
                trace_rxrpc_tx_packet(call->debug_id, &pkt.whdr,
                                      rxrpc_tx_point_call_abort);
-
+       rxrpc_tx_backoff(call, ret);
 
        rxrpc_put_connection(conn);
        return ret;
@@ -413,6 +429,7 @@ int rxrpc_send_data_packet(struct rxrpc_call *call, struct sk_buff *skb,
        else
                trace_rxrpc_tx_packet(call->debug_id, &whdr,
                                      rxrpc_tx_point_call_data_nofrag);
+       rxrpc_tx_backoff(call, ret);
        if (ret == -EMSGSIZE)
                goto send_fragmentable;
 
@@ -445,9 +462,18 @@ done:
                        rxrpc_reduce_call_timer(call, expect_rx_by, nowj,
                                                rxrpc_timer_set_for_normal);
                }
-       }
 
-       rxrpc_set_keepalive(call);
+               rxrpc_set_keepalive(call);
+       } else {
+               /* Cancel the call if the initial transmission fails,
+                * particularly if that's due to network routing issues that
+                * aren't going away anytime soon.  The layer above can arrange
+                * the retransmission.
+                */
+               if (!test_and_set_bit(RXRPC_CALL_BEGAN_RX_TIMER, &call->flags))
+                       rxrpc_set_call_completion(call, RXRPC_CALL_LOCAL_ERROR,
+                                                 RX_USER_ABORT, ret);
+       }
 
        _leave(" = %d [%u]", ret, call->peer->maxdata);
        return ret;
@@ -506,6 +532,7 @@ send_fragmentable:
        else
                trace_rxrpc_tx_packet(call->debug_id, &whdr,
                                      rxrpc_tx_point_call_data_frag);
+       rxrpc_tx_backoff(call, ret);
 
        up_write(&conn->params.local->defrag_sem);
        goto done;
index 1dae5f2..c8cf4d1 100644 (file)
@@ -258,7 +258,8 @@ static int tcf_mirred_act(struct sk_buff *skb, const struct tc_action *a,
        if (is_redirect) {
                skb2->tc_redirected = 1;
                skb2->tc_from_ingress = skb2->tc_at_ingress;
-
+               if (skb2->tc_from_ingress)
+                       skb2->tstamp = 0;
                /* let's the caller reinsert the packet, if possible */
                if (use_reinsert) {
                        res->ingress = want_ingress;
index 9aada2d..c6c3278 100644 (file)
@@ -709,11 +709,23 @@ static int fl_set_enc_opt(struct nlattr **tb, struct fl_flow_key *key,
                          struct netlink_ext_ack *extack)
 {
        const struct nlattr *nla_enc_key, *nla_opt_key, *nla_opt_msk = NULL;
-       int option_len, key_depth, msk_depth = 0;
+       int err, option_len, key_depth, msk_depth = 0;
+
+       err = nla_validate_nested(tb[TCA_FLOWER_KEY_ENC_OPTS],
+                                 TCA_FLOWER_KEY_ENC_OPTS_MAX,
+                                 enc_opts_policy, extack);
+       if (err)
+               return err;
 
        nla_enc_key = nla_data(tb[TCA_FLOWER_KEY_ENC_OPTS]);
 
        if (tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]) {
+               err = nla_validate_nested(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK],
+                                         TCA_FLOWER_KEY_ENC_OPTS_MAX,
+                                         enc_opts_policy, extack);
+               if (err)
+                       return err;
+
                nla_opt_msk = nla_data(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]);
                msk_depth = nla_len(tb[TCA_FLOWER_KEY_ENC_OPTS_MASK]);
        }
index 57b3ad9..2c38e3d 100644 (file)
@@ -648,15 +648,6 @@ deliver:
                         */
                        skb->dev = qdisc_dev(sch);
 
-#ifdef CONFIG_NET_CLS_ACT
-                       /*
-                        * If it's at ingress let's pretend the delay is
-                        * from the network (tstamp will be updated).
-                        */
-                       if (skb->tc_redirected && skb->tc_from_ingress)
-                               skb->tstamp = 0;
-#endif
-
                        if (q->slot.slot_next) {
                                q->slot.packets_left--;
                                q->slot.bytes_left -= qdisc_pkt_len(skb);
index 9cb854b..c37e1c2 100644 (file)
@@ -212,7 +212,7 @@ void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q)
        INIT_LIST_HEAD(&q->retransmit);
        INIT_LIST_HEAD(&q->sacked);
        INIT_LIST_HEAD(&q->abandoned);
-       sctp_sched_set_sched(asoc, SCTP_SS_FCFS);
+       sctp_sched_set_sched(asoc, SCTP_SS_DEFAULT);
 }
 
 /* Free the outqueue structure and any related pending chunks.
index 201c3b5..836727e 100644 (file)
@@ -1594,14 +1594,17 @@ static int tipc_link_proto_rcv(struct tipc_link *l, struct sk_buff *skb,
                if (in_range(peers_prio, l->priority + 1, TIPC_MAX_LINK_PRI))
                        l->priority = peers_prio;
 
-               /* ACTIVATE_MSG serves as PEER_RESET if link is already down */
-               if (msg_peer_stopping(hdr))
+               /* If peer is going down we want full re-establish cycle */
+               if (msg_peer_stopping(hdr)) {
                        rc = tipc_link_fsm_evt(l, LINK_FAILURE_EVT);
-               else if ((mtyp == RESET_MSG) || !link_is_up(l))
+                       break;
+               }
+               /* ACTIVATE_MSG serves as PEER_RESET if link is already down */
+               if (mtyp == RESET_MSG || !link_is_up(l))
                        rc = tipc_link_fsm_evt(l, LINK_PEER_RESET_EVT);
 
                /* ACTIVATE_MSG takes up link if it was already locally reset */
-               if ((mtyp == ACTIVATE_MSG) && (l->state == LINK_ESTABLISHING))
+               if (mtyp == ACTIVATE_MSG && l->state == LINK_ESTABLISHING)
                        rc = TIPC_LINK_UP_EVT;
 
                l->peer_session = msg_session(hdr);
index da66e77..0ef9064 100755 (executable)
@@ -102,7 +102,8 @@ if [ ! -r "$INITFILE" ]; then
 fi
 
 MERGE_LIST=$*
-SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)[= ].*/\2/p"
+SED_CONFIG_EXP1="s/^\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)=.*/\1/p"
+SED_CONFIG_EXP2="s/^# \(${CONFIG_PREFIX}[a-zA-Z0-9_]*\) is not set$/\1/p"
 
 TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
 
@@ -116,7 +117,7 @@ for MERGE_FILE in $MERGE_LIST ; do
                echo "The merge file '$MERGE_FILE' does not exist.  Exit." >&2
                exit 1
        fi
-       CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
+       CFG_LIST=$(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $MERGE_FILE)
 
        for CFG in $CFG_LIST ; do
                grep -q -w $CFG $TMP_FILE || continue
@@ -159,7 +160,7 @@ make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET
 
 
 # Check all specified config values took (might have missed-dependency issues)
-for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
+for CFG in $(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $TMP_FILE); do
 
        REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
        ACTUAL_VAL=$(grep -w -e "$CFG" "$KCONFIG_CONFIG")
index 90c9a8a..f43a274 100755 (executable)
@@ -81,11 +81,11 @@ else
        cp System.map "$tmpdir/boot/System.map-$version"
        cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version"
 fi
-cp "$($MAKE -s image_name)" "$tmpdir/$installed_image_path"
+cp "$($MAKE -s -f $srctree/Makefile image_name)" "$tmpdir/$installed_image_path"
 
-if grep -q "^CONFIG_OF=y" $KCONFIG_CONFIG ; then
+if grep -q "^CONFIG_OF_EARLY_FLATTREE=y" $KCONFIG_CONFIG ; then
        # Only some architectures with OF support have this target
-       if grep -q dtbs_install "${srctree}/arch/$SRCARCH/Makefile"; then
+       if [ -d "${srctree}/arch/$SRCARCH/boot/dts" ]; then
                $MAKE KBUILD_SRC= INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install
        fi
 fi
index 663a7f3..edcad61 100755 (executable)
@@ -88,6 +88,7 @@ set_debarch() {
 version=$KERNELRELEASE
 if [ -n "$KDEB_PKGVERSION" ]; then
        packageversion=$KDEB_PKGVERSION
+       revision=${packageversion##*-}
 else
        revision=$(cat .version 2>/dev/null||echo 1)
        packageversion=$version-$revision
@@ -205,10 +206,12 @@ cat <<EOF > debian/rules
 #!$(command -v $MAKE) -f
 
 build:
-       \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC=
+       \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \
+       KBUILD_BUILD_VERSION=${revision} KBUILD_SRC=
 
 binary-arch:
-       \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC= intdeb-pkg
+       \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \
+       KBUILD_BUILD_VERSION=${revision} KBUILD_SRC= intdeb-pkg
 
 clean:
        rm -rf debian/*tmp debian/files
index e05646d..009147d 100755 (executable)
@@ -12,6 +12,7 @@
 # how we were called determines which rpms we build and how we build them
 if [ "$1" = prebuilt ]; then
        S=DEL
+       MAKE="$MAKE -f $srctree/Makefile"
 else
        S=
 fi
@@ -78,19 +79,19 @@ $S  %prep
 $S     %setup -q
 $S
 $S     %build
-$S     make %{?_smp_mflags} KBUILD_BUILD_VERSION=%{release}
+$S     $MAKE %{?_smp_mflags} KBUILD_BUILD_VERSION=%{release}
 $S
        %install
        mkdir -p %{buildroot}/boot
        %ifarch ia64
        mkdir -p %{buildroot}/boot/efi
-       cp \$(make image_name) %{buildroot}/boot/efi/vmlinuz-$KERNELRELEASE
+       cp \$($MAKE image_name) %{buildroot}/boot/efi/vmlinuz-$KERNELRELEASE
        ln -s efi/vmlinuz-$KERNELRELEASE %{buildroot}/boot/
        %else
-       cp \$(make image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE
+       cp \$($MAKE image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE
        %endif
-$M     make %{?_smp_mflags} INSTALL_MOD_PATH=%{buildroot} KBUILD_SRC= modules_install
-       make %{?_smp_mflags} INSTALL_HDR_PATH=%{buildroot}/usr KBUILD_SRC= headers_install
+$M     $MAKE %{?_smp_mflags} INSTALL_MOD_PATH=%{buildroot} modules_install
+       $MAKE %{?_smp_mflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
        cp System.map %{buildroot}/boot/System.map-$KERNELRELEASE
        cp .config %{buildroot}/boot/config-$KERNELRELEASE
        bzip2 -9 --keep vmlinux
index 79f7dd5..71f3941 100755 (executable)
@@ -74,7 +74,7 @@ scm_version()
                fi
 
                # Check for uncommitted changes
-               if git status -uno --porcelain | grep -qv '^.. scripts/package'; then
+               if git diff-index --name-only HEAD | grep -qv "^scripts/package"; then
                        printf '%s' -dirty
                fi
 
index 97f49b7..568575b 100644 (file)
@@ -58,8 +58,8 @@ static void hda_fixup_thinkpad_acpi(struct hda_codec *codec,
                        removefunc = false;
                }
                if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0 &&
-                   snd_hda_gen_add_micmute_led(codec,
-                                               update_tpacpi_micmute) > 0)
+                   !snd_hda_gen_add_micmute_led(codec,
+                                                update_tpacpi_micmute))
                        removefunc = false;
        }
 
index 12835ea..378c051 100644 (file)
 #define wmb()          asm volatile("dmb ishst" ::: "memory")
 #define rmb()          asm volatile("dmb ishld" ::: "memory")
 
-#define smp_store_release(p, v)                                        \
-do {                                                           \
-       union { typeof(*p) __val; char __c[1]; } __u =          \
-               { .__val = (__force typeof(*p)) (v) };          \
-                                                               \
-       switch (sizeof(*p)) {                                   \
-       case 1:                                                 \
-               asm volatile ("stlrb %w1, %0"                   \
-                               : "=Q" (*p)                     \
-                               : "r" (*(__u8 *)__u.__c)        \
-                               : "memory");                    \
-               break;                                          \
-       case 2:                                                 \
-               asm volatile ("stlrh %w1, %0"                   \
-                               : "=Q" (*p)                     \
-                               : "r" (*(__u16 *)__u.__c)       \
-                               : "memory");                    \
-               break;                                          \
-       case 4:                                                 \
-               asm volatile ("stlr %w1, %0"                    \
-                               : "=Q" (*p)                     \
-                               : "r" (*(__u32 *)__u.__c)       \
-                               : "memory");                    \
-               break;                                          \
-       case 8:                                                 \
-               asm volatile ("stlr %1, %0"                     \
-                               : "=Q" (*p)                     \
-                               : "r" (*(__u64 *)__u.__c)       \
-                               : "memory");                    \
-               break;                                          \
-       default:                                                \
-               /* Only to shut up gcc ... */                   \
-               mb();                                           \
-               break;                                          \
-       }                                                       \
+#define smp_store_release(p, v)                                                \
+do {                                                                   \
+       union { typeof(*p) __val; char __c[1]; } __u =                  \
+               { .__val = (v) };                                       \
+                                                                       \
+       switch (sizeof(*p)) {                                           \
+       case 1:                                                         \
+               asm volatile ("stlrb %w1, %0"                           \
+                               : "=Q" (*p)                             \
+                               : "r" (*(__u8_alias_t *)__u.__c)        \
+                               : "memory");                            \
+               break;                                                  \
+       case 2:                                                         \
+               asm volatile ("stlrh %w1, %0"                           \
+                               : "=Q" (*p)                             \
+                               : "r" (*(__u16_alias_t *)__u.__c)       \
+                               : "memory");                            \
+               break;                                                  \
+       case 4:                                                         \
+               asm volatile ("stlr %w1, %0"                            \
+                               : "=Q" (*p)                             \
+                               : "r" (*(__u32_alias_t *)__u.__c)       \
+                               : "memory");                            \
+               break;                                                  \
+       case 8:                                                         \
+               asm volatile ("stlr %1, %0"                             \
+                               : "=Q" (*p)                             \
+                               : "r" (*(__u64_alias_t *)__u.__c)       \
+                               : "memory");                            \
+               break;                                                  \
+       default:                                                        \
+               /* Only to shut up gcc ... */                           \
+               mb();                                                   \
+               break;                                                  \
+       }                                                               \
 } while (0)
 
-#define smp_load_acquire(p)                                    \
-({                                                             \
-       union { typeof(*p) __val; char __c[1]; } __u;           \
-                                                               \
-       switch (sizeof(*p)) {                                   \
-       case 1:                                                 \
-               asm volatile ("ldarb %w0, %1"                   \
-                       : "=r" (*(__u8 *)__u.__c)               \
-                       : "Q" (*p) : "memory");                 \
-               break;                                          \
-       case 2:                                                 \
-               asm volatile ("ldarh %w0, %1"                   \
-                       : "=r" (*(__u16 *)__u.__c)              \
-                       : "Q" (*p) : "memory");                 \
-               break;                                          \
-       case 4:                                                 \
-               asm volatile ("ldar %w0, %1"                    \
-                       : "=r" (*(__u32 *)__u.__c)              \
-                       : "Q" (*p) : "memory");                 \
-               break;                                          \
-       case 8:                                                 \
-               asm volatile ("ldar %0, %1"                     \
-                       : "=r" (*(__u64 *)__u.__c)              \
-                       : "Q" (*p) : "memory");                 \
-               break;                                          \
-       default:                                                \
-               /* Only to shut up gcc ... */                   \
-               mb();                                           \
-               break;                                          \
-       }                                                       \
-       __u.__val;                                              \
+#define smp_load_acquire(p)                                            \
+({                                                                     \
+       union { typeof(*p) __val; char __c[1]; } __u =                  \
+               { .__c = { 0 } };                                       \
+                                                                       \
+       switch (sizeof(*p)) {                                           \
+       case 1:                                                         \
+               asm volatile ("ldarb %w0, %1"                           \
+                       : "=r" (*(__u8_alias_t *)__u.__c)               \
+                       : "Q" (*p) : "memory");                         \
+               break;                                                  \
+       case 2:                                                         \
+               asm volatile ("ldarh %w0, %1"                           \
+                       : "=r" (*(__u16_alias_t *)__u.__c)              \
+                       : "Q" (*p) : "memory");                         \
+               break;                                                  \
+       case 4:                                                         \
+               asm volatile ("ldar %w0, %1"                            \
+                       : "=r" (*(__u32_alias_t *)__u.__c)              \
+                       : "Q" (*p) : "memory");                         \
+               break;                                                  \
+       case 8:                                                         \
+               asm volatile ("ldar %0, %1"                             \
+                       : "=r" (*(__u64_alias_t *)__u.__c)              \
+                       : "Q" (*p) : "memory");                         \
+               break;                                                  \
+       default:                                                        \
+               /* Only to shut up gcc ... */                           \
+               mb();                                                   \
+               break;                                                  \
+       }                                                               \
+       __u.__val;                                                      \
 })
 
 #endif /* _TOOLS_LINUX_ASM_AARCH64_BARRIER_H */
index 236b9b9..667c14e 100644 (file)
@@ -55,7 +55,6 @@ counted. The following modifiers exist:
  S - read sample value (PERF_SAMPLE_READ)
  D - pin the event to the PMU
  W - group is weak and will fallback to non-group if not schedulable,
-     only supported in 'perf stat' for now.
 
 The 'p' modifier can be used for specifying how precise the instruction
 address should be. The 'p' modifier can be specified multiple times:
index 3ccb4f0..d956554 100644 (file)
@@ -387,7 +387,7 @@ SHELL = $(SHELL_PATH)
 
 linux_uapi_dir := $(srctree)/tools/include/uapi/linux
 asm_generic_uapi_dir := $(srctree)/tools/include/uapi/asm-generic
-arch_asm_uapi_dir := $(srctree)/tools/arch/$(ARCH)/include/uapi/asm/
+arch_asm_uapi_dir := $(srctree)/tools/arch/$(SRCARCH)/include/uapi/asm/
 
 beauty_outdir := $(OUTPUT)trace/beauty/generated
 beauty_ioctl_outdir := $(beauty_outdir)/ioctl
index 10cf889..488779b 100644 (file)
@@ -391,7 +391,12 @@ try_again:
                                        ui__warning("%s\n", msg);
                                goto try_again;
                        }
-
+                       if ((errno == EINVAL || errno == EBADF) &&
+                           pos->leader != pos &&
+                           pos->weak_group) {
+                               pos = perf_evlist__reset_weak_group(evlist, pos);
+                               goto try_again;
+                       }
                        rc = -errno;
                        perf_evsel__open_strerror(pos, &opts->target,
                                                  errno, msg, sizeof(msg));
index d1028d7..a635abf 100644 (file)
@@ -383,32 +383,6 @@ static bool perf_evsel__should_store_id(struct perf_evsel *counter)
        return STAT_RECORD || counter->attr.read_format & PERF_FORMAT_ID;
 }
 
-static struct perf_evsel *perf_evsel__reset_weak_group(struct perf_evsel *evsel)
-{
-       struct perf_evsel *c2, *leader;
-       bool is_open = true;
-
-       leader = evsel->leader;
-       pr_debug("Weak group for %s/%d failed\n",
-                       leader->name, leader->nr_members);
-
-       /*
-        * for_each_group_member doesn't work here because it doesn't
-        * include the first entry.
-        */
-       evlist__for_each_entry(evsel_list, c2) {
-               if (c2 == evsel)
-                       is_open = false;
-               if (c2->leader == leader) {
-                       if (is_open)
-                               perf_evsel__close(c2);
-                       c2->leader = c2;
-                       c2->nr_members = 0;
-               }
-       }
-       return leader;
-}
-
 static bool is_target_alive(struct target *_target,
                            struct thread_map *threads)
 {
@@ -477,7 +451,7 @@ try_again:
                        if ((errno == EINVAL || errno == EBADF) &&
                            counter->leader != counter &&
                            counter->weak_group) {
-                               counter = perf_evsel__reset_weak_group(counter);
+                               counter = perf_evlist__reset_weak_group(evsel_list, counter);
                                goto try_again;
                        }
 
index b2838de..aa0c73e 100644 (file)
@@ -1429,6 +1429,9 @@ int cmd_top(int argc, const char **argv)
                }
        }
 
+       if (opts->branch_stack && callchain_param.enabled)
+               symbol_conf.show_branchflag_count = true;
+
        sort__mode = SORT_MODE__TOP;
        /* display thread wants entries to be collapsed in a different tree */
        perf_hpp_list.need_collapse = 1;
index dc8a6c4..8356194 100644 (file)
@@ -108,6 +108,7 @@ struct trace {
        } stats;
        unsigned int            max_stack;
        unsigned int            min_stack;
+       bool                    raw_augmented_syscalls;
        bool                    not_ev_qualifier;
        bool                    live;
        bool                    full_time;
@@ -1724,13 +1725,28 @@ static int trace__fprintf_sample(struct trace *trace, struct perf_evsel *evsel,
        return printed;
 }
 
-static void *syscall__augmented_args(struct syscall *sc, struct perf_sample *sample, int *augmented_args_size)
+static void *syscall__augmented_args(struct syscall *sc, struct perf_sample *sample, int *augmented_args_size, bool raw_augmented)
 {
        void *augmented_args = NULL;
+       /*
+        * For now with BPF raw_augmented we hook into raw_syscalls:sys_enter
+        * and there we get all 6 syscall args plus the tracepoint common
+        * fields (sizeof(long)) and the syscall_nr (another long). So we check
+        * if that is the case and if so don't look after the sc->args_size,
+        * but always after the full raw_syscalls:sys_enter payload, which is
+        * fixed.
+        *
+        * We'll revisit this later to pass s->args_size to the BPF augmenter
+        * (now tools/perf/examples/bpf/augmented_raw_syscalls.c, so that it
+        * copies only what we need for each syscall, like what happens when we
+        * use syscalls:sys_enter_NAME, so that we reduce the kernel/userspace
+        * traffic to just what is needed for each syscall.
+        */
+       int args_size = raw_augmented ? (8 * (int)sizeof(long)) : sc->args_size;
 
-       *augmented_args_size = sample->raw_size - sc->args_size;
+       *augmented_args_size = sample->raw_size - args_size;
        if (*augmented_args_size > 0)
-               augmented_args = sample->raw_data + sc->args_size;
+               augmented_args = sample->raw_data + args_size;
 
        return augmented_args;
 }
@@ -1780,7 +1796,7 @@ static int trace__sys_enter(struct trace *trace, struct perf_evsel *evsel,
         * here and avoid using augmented syscalls when the evsel is the raw_syscalls one.
         */
        if (evsel != trace->syscalls.events.sys_enter)
-               augmented_args = syscall__augmented_args(sc, sample, &augmented_args_size);
+               augmented_args = syscall__augmented_args(sc, sample, &augmented_args_size, trace->raw_augmented_syscalls);
        ttrace->entry_time = sample->time;
        msg = ttrace->entry_str;
        printed += scnprintf(msg + printed, trace__entry_str_size - printed, "%s(", sc->name);
@@ -1833,7 +1849,7 @@ static int trace__fprintf_sys_enter(struct trace *trace, struct perf_evsel *evse
                goto out_put;
 
        args = perf_evsel__sc_tp_ptr(evsel, args, sample);
-       augmented_args = syscall__augmented_args(sc, sample, &augmented_args_size);
+       augmented_args = syscall__augmented_args(sc, sample, &augmented_args_size, trace->raw_augmented_syscalls);
        syscall__scnprintf_args(sc, msg, sizeof(msg), args, augmented_args, augmented_args_size, trace, thread);
        fprintf(trace->output, "%s", msg);
        err = 0;
@@ -3501,7 +3517,15 @@ int cmd_trace(int argc, const char **argv)
                evsel->handler = trace__sys_enter;
 
                evlist__for_each_entry(trace.evlist, evsel) {
+                       bool raw_syscalls_sys_exit = strcmp(perf_evsel__name(evsel), "raw_syscalls:sys_exit") == 0;
+
+                       if (raw_syscalls_sys_exit) {
+                               trace.raw_augmented_syscalls = true;
+                               goto init_augmented_syscall_tp;
+                       }
+
                        if (strstarts(perf_evsel__name(evsel), "syscalls:sys_exit_")) {
+init_augmented_syscall_tp:
                                perf_evsel__init_augmented_syscall_tp(evsel);
                                perf_evsel__init_augmented_syscall_tp_ret(evsel);
                                evsel->handler = trace__sys_exit;
diff --git a/tools/perf/examples/bpf/augmented_raw_syscalls.c b/tools/perf/examples/bpf/augmented_raw_syscalls.c
new file mode 100644 (file)
index 0000000..90a1933
--- /dev/null
@@ -0,0 +1,131 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Augment the raw_syscalls tracepoints with the contents of the pointer arguments.
+ *
+ * Test it with:
+ *
+ * perf trace -e tools/perf/examples/bpf/augmented_raw_syscalls.c cat /etc/passwd > /dev/null
+ *
+ * This exactly matches what is marshalled into the raw_syscall:sys_enter
+ * payload expected by the 'perf trace' beautifiers.
+ *
+ * For now it just uses the existing tracepoint augmentation code in 'perf
+ * trace', in the next csets we'll hook up these with the sys_enter/sys_exit
+ * code that will combine entry/exit in a strace like way.
+ */
+
+#include <stdio.h>
+#include <linux/socket.h>
+
+/* bpf-output associated map */
+struct bpf_map SEC("maps") __augmented_syscalls__ = {
+       .type = BPF_MAP_TYPE_PERF_EVENT_ARRAY,
+       .key_size = sizeof(int),
+       .value_size = sizeof(u32),
+       .max_entries = __NR_CPUS__,
+};
+
+struct syscall_enter_args {
+       unsigned long long common_tp_fields;
+       long               syscall_nr;
+       unsigned long      args[6];
+};
+
+struct syscall_exit_args {
+       unsigned long long common_tp_fields;
+       long               syscall_nr;
+       long               ret;
+};
+
+struct augmented_filename {
+       unsigned int    size;
+       int             reserved;
+       char            value[256];
+};
+
+#define SYS_OPEN 2
+#define SYS_OPENAT 257
+
+SEC("raw_syscalls:sys_enter")
+int sys_enter(struct syscall_enter_args *args)
+{
+       struct {
+               struct syscall_enter_args args;
+               struct augmented_filename filename;
+       } augmented_args;
+       unsigned int len = sizeof(augmented_args);
+       const void *filename_arg = NULL;
+
+       probe_read(&augmented_args.args, sizeof(augmented_args.args), args);
+       /*
+        * Yonghong and Edward Cree sayz:
+        *
+        * https://www.spinics.net/lists/netdev/msg531645.html
+        *
+        * >>   R0=inv(id=0) R1=inv2 R6=ctx(id=0,off=0,imm=0) R7=inv64 R10=fp0,call_-1
+        * >> 10: (bf) r1 = r6
+        * >> 11: (07) r1 += 16
+        * >> 12: (05) goto pc+2
+        * >> 15: (79) r3 = *(u64 *)(r1 +0)
+        * >> dereference of modified ctx ptr R1 off=16 disallowed
+        * > Aha, we at least got a different error message this time.
+        * > And indeed llvm has done that optimisation, rather than the more obvious
+        * > 11: r3 = *(u64 *)(r1 +16)
+        * > because it wants to have lots of reads share a single insn.  You may be able
+        * > to defeat that optimisation by adding compiler barriers, idk.  Maybe someone
+        * > with llvm knowledge can figure out how to stop it (ideally, llvm would know
+        * > when it's generating for bpf backend and not do that).  -O0?  Â¯\_(ツ)_/¯
+        *
+        * The optimization mostly likes below:
+        *
+        *      br1:
+        *      ...
+        *      r1 += 16
+        *      goto merge
+        *      br2:
+        *      ...
+        *      r1 += 20
+        *      goto merge
+        *      merge:
+        *      *(u64 *)(r1 + 0)
+        *
+        * The compiler tries to merge common loads. There is no easy way to
+        * stop this compiler optimization without turning off a lot of other
+        * optimizations. The easiest way is to add barriers:
+        *
+        *       __asm__ __volatile__("": : :"memory")
+        *
+        *       after the ctx memory access to prevent their down stream merging.
+        */
+       switch (augmented_args.args.syscall_nr) {
+       case SYS_OPEN:   filename_arg = (const void *)args->args[0];
+                       __asm__ __volatile__("": : :"memory");
+                        break;
+       case SYS_OPENAT: filename_arg = (const void *)args->args[1];
+                        break;
+       }
+
+       if (filename_arg != NULL) {
+               augmented_args.filename.reserved = 0;
+               augmented_args.filename.size = probe_read_str(&augmented_args.filename.value,
+                                                             sizeof(augmented_args.filename.value),
+                                                             filename_arg);
+               if (augmented_args.filename.size < sizeof(augmented_args.filename.value)) {
+                       len -= sizeof(augmented_args.filename.value) - augmented_args.filename.size;
+                       len &= sizeof(augmented_args.filename.value) - 1;
+               }
+       } else {
+               len = sizeof(augmented_args.args);
+       }
+
+       perf_event_output(args, &__augmented_syscalls__, BPF_F_CURRENT_CPU, &augmented_args, len);
+       return 0;
+}
+
+SEC("raw_syscalls:sys_exit")
+int sys_exit(struct syscall_exit_args *args)
+{
+       return 1; /* 0 as soon as we start copying data returned by the kernel, e.g. 'read' */
+}
+
+license(GPL);
index ac1bcdc..f7eb63c 100644 (file)
@@ -125,7 +125,7 @@ perf_get_timestamp(void)
 }
 
 static int
-debug_cache_init(void)
+create_jit_cache_dir(void)
 {
        char str[32];
        char *base, *p;
@@ -144,8 +144,13 @@ debug_cache_init(void)
 
        strftime(str, sizeof(str), JIT_LANG"-jit-%Y%m%d", &tm);
 
-       snprintf(jit_path, PATH_MAX - 1, "%s/.debug/", base);
-
+       ret = snprintf(jit_path, PATH_MAX, "%s/.debug/", base);
+       if (ret >= PATH_MAX) {
+               warnx("jvmti: cannot generate jit cache dir because %s/.debug/"
+                       " is too long, please check the cwd, JITDUMPDIR, and"
+                       " HOME variables", base);
+               return -1;
+       }
        ret = mkdir(jit_path, 0755);
        if (ret == -1) {
                if (errno != EEXIST) {
@@ -154,20 +159,32 @@ debug_cache_init(void)
                }
        }
 
-       snprintf(jit_path, PATH_MAX - 1, "%s/.debug/jit", base);
+       ret = snprintf(jit_path, PATH_MAX, "%s/.debug/jit", base);
+       if (ret >= PATH_MAX) {
+               warnx("jvmti: cannot generate jit cache dir because"
+                       " %s/.debug/jit is too long, please check the cwd,"
+                       " JITDUMPDIR, and HOME variables", base);
+               return -1;
+       }
        ret = mkdir(jit_path, 0755);
        if (ret == -1) {
                if (errno != EEXIST) {
-                       warn("cannot create jit cache dir %s", jit_path);
+                       warn("jvmti: cannot create jit cache dir %s", jit_path);
                        return -1;
                }
        }
 
-       snprintf(jit_path, PATH_MAX - 1, "%s/.debug/jit/%s.XXXXXXXX", base, str);
-
+       ret = snprintf(jit_path, PATH_MAX, "%s/.debug/jit/%s.XXXXXXXX", base, str);
+       if (ret >= PATH_MAX) {
+               warnx("jvmti: cannot generate jit cache dir because"
+                       " %s/.debug/jit/%s.XXXXXXXX is too long, please check"
+                       " the cwd, JITDUMPDIR, and HOME variables",
+                       base, str);
+               return -1;
+       }
        p = mkdtemp(jit_path);
        if (p != jit_path) {
-               warn("cannot create jit cache dir %s", jit_path);
+               warn("jvmti: cannot create jit cache dir %s", jit_path);
                return -1;
        }
 
@@ -228,7 +245,7 @@ void *jvmti_open(void)
 {
        char dump_path[PATH_MAX];
        struct jitheader header;
-       int fd;
+       int fd, ret;
        FILE *fp;
 
        init_arch_timestamp();
@@ -245,12 +262,22 @@ void *jvmti_open(void)
 
        memset(&header, 0, sizeof(header));
 
-       debug_cache_init();
+       /*
+        * jitdump file dir
+        */
+       if (create_jit_cache_dir() < 0)
+               return NULL;
 
        /*
         * jitdump file name
         */
-       scnprintf(dump_path, PATH_MAX, "%s/jit-%i.dump", jit_path, getpid());
+       ret = snprintf(dump_path, PATH_MAX, "%s/jit-%i.dump", jit_path, getpid());
+       if (ret >= PATH_MAX) {
+               warnx("jvmti: cannot generate jitdump file full path because"
+                       " %s/jit-%i.dump is too long, please check the cwd,"
+                       " JITDUMPDIR, and HOME variables", jit_path, getpid());
+               return NULL;
+       }
 
        fd = open(dump_path, O_CREAT|O_TRUNC|O_RDWR, 0666);
        if (fd == -1)
index 24cb0bd..f278ce5 100755 (executable)
@@ -119,6 +119,14 @@ def dsoname(name):
                return "[kernel]"
        return name
 
+def findnth(s, sub, n, offs=0):
+       pos = s.find(sub)
+       if pos < 0:
+               return pos
+       if n <= 1:
+               return offs + pos
+       return findnth(s[pos + 1:], sub, n - 1, offs + pos + 1)
+
 # Percent to one decimal place
 
 def PercentToOneDP(n, d):
@@ -1464,6 +1472,317 @@ class BranchWindow(QMdiSubWindow):
                else:
                        self.find_bar.NotFound()
 
+# Dialog data item converted and validated using a SQL table
+
+class SQLTableDialogDataItem():
+
+       def __init__(self, glb, label, placeholder_text, table_name, match_column, column_name1, column_name2, parent):
+               self.glb = glb
+               self.label = label
+               self.placeholder_text = placeholder_text
+               self.table_name = table_name
+               self.match_column = match_column
+               self.column_name1 = column_name1
+               self.column_name2 = column_name2
+               self.parent = parent
+
+               self.value = ""
+
+               self.widget = QLineEdit()
+               self.widget.editingFinished.connect(self.Validate)
+               self.widget.textChanged.connect(self.Invalidate)
+               self.red = False
+               self.error = ""
+               self.validated = True
+
+               self.last_id = 0
+               self.first_time = 0
+               self.last_time = 2 ** 64
+               if self.table_name == "<timeranges>":
+                       query = QSqlQuery(self.glb.db)
+                       QueryExec(query, "SELECT id, time FROM samples ORDER BY id DESC LIMIT 1")
+                       if query.next():
+                               self.last_id = int(query.value(0))
+                               self.last_time = int(query.value(1))
+                       QueryExec(query, "SELECT time FROM samples WHERE time != 0 ORDER BY id LIMIT 1")
+                       if query.next():
+                               self.first_time = int(query.value(0))
+                       if placeholder_text:
+                               placeholder_text += ", between " + str(self.first_time) + " and " + str(self.last_time)
+
+               if placeholder_text:
+                       self.widget.setPlaceholderText(placeholder_text)
+
+       def ValueToIds(self, value):
+               ids = []
+               query = QSqlQuery(self.glb.db)
+               stmt = "SELECT id FROM " + self.table_name + " WHERE " + self.match_column + " = '" + value + "'"
+               ret = query.exec_(stmt)
+               if ret:
+                       while query.next():
+                               ids.append(str(query.value(0)))
+               return ids
+
+       def IdBetween(self, query, lower_id, higher_id, order):
+               QueryExec(query, "SELECT id FROM samples WHERE id > " + str(lower_id) + " AND id < " + str(higher_id) + " ORDER BY id " + order + " LIMIT 1")
+               if query.next():
+                       return True, int(query.value(0))
+               else:
+                       return False, 0
+
+       def BinarySearchTime(self, lower_id, higher_id, target_time, get_floor):
+               query = QSqlQuery(self.glb.db)
+               while True:
+                       next_id = int((lower_id + higher_id) / 2)
+                       QueryExec(query, "SELECT time FROM samples WHERE id = " + str(next_id))
+                       if not query.next():
+                               ok, dbid = self.IdBetween(query, lower_id, next_id, "DESC")
+                               if not ok:
+                                       ok, dbid = self.IdBetween(query, next_id, higher_id, "")
+                                       if not ok:
+                                               return str(higher_id)
+                               next_id = dbid
+                               QueryExec(query, "SELECT time FROM samples WHERE id = " + str(next_id))
+                       next_time = int(query.value(0))
+                       if get_floor:
+                               if target_time > next_time:
+                                       lower_id = next_id
+                               else:
+                                       higher_id = next_id
+                               if higher_id <= lower_id + 1:
+                                       return str(higher_id)
+                       else:
+                               if target_time >= next_time:
+                                       lower_id = next_id
+                               else:
+                                       higher_id = next_id
+                               if higher_id <= lower_id + 1:
+                                       return str(lower_id)
+
+       def ConvertRelativeTime(self, val):
+               print "val ", val
+               mult = 1
+               suffix = val[-2:]
+               if suffix == "ms":
+                       mult = 1000000
+               elif suffix == "us":
+                       mult = 1000
+               elif suffix == "ns":
+                       mult = 1
+               else:
+                       return val
+               val = val[:-2].strip()
+               if not self.IsNumber(val):
+                       return val
+               val = int(val) * mult
+               if val >= 0:
+                       val += self.first_time
+               else:
+                       val += self.last_time
+               return str(val)
+
+       def ConvertTimeRange(self, vrange):
+               print "vrange ", vrange
+               if vrange[0] == "":
+                       vrange[0] = str(self.first_time)
+               if vrange[1] == "":
+                       vrange[1] = str(self.last_time)
+               vrange[0] = self.ConvertRelativeTime(vrange[0])
+               vrange[1] = self.ConvertRelativeTime(vrange[1])
+               print "vrange2 ", vrange
+               if not self.IsNumber(vrange[0]) or not self.IsNumber(vrange[1]):
+                       return False
+               print "ok1"
+               beg_range = max(int(vrange[0]), self.first_time)
+               end_range = min(int(vrange[1]), self.last_time)
+               if beg_range > self.last_time or end_range < self.first_time:
+                       return False
+               print "ok2"
+               vrange[0] = self.BinarySearchTime(0, self.last_id, beg_range, True)
+               vrange[1] = self.BinarySearchTime(1, self.last_id + 1, end_range, False)
+               print "vrange3 ", vrange
+               return True
+
+       def AddTimeRange(self, value, ranges):
+               print "value ", value
+               n = value.count("-")
+               if n == 1:
+                       pass
+               elif n == 2:
+                       if value.split("-")[1].strip() == "":
+                               n = 1
+               elif n == 3:
+                       n = 2
+               else:
+                       return False
+               pos = findnth(value, "-", n)
+               vrange = [value[:pos].strip() ,value[pos+1:].strip()]
+               if self.ConvertTimeRange(vrange):
+                       ranges.append(vrange)
+                       return True
+               return False
+
+       def InvalidValue(self, value):
+               self.value = ""
+               palette = QPalette()
+               palette.setColor(QPalette.Text,Qt.red)
+               self.widget.setPalette(palette)
+               self.red = True
+               self.error = self.label + " invalid value '" + value + "'"
+               self.parent.ShowMessage(self.error)
+
+       def IsNumber(self, value):
+               try:
+                       x = int(value)
+               except:
+                       x = 0
+               return str(x) == value
+
+       def Invalidate(self):
+               self.validated = False
+
+       def Validate(self):
+               input_string = self.widget.text()
+               self.validated = True
+               if self.red:
+                       palette = QPalette()
+                       self.widget.setPalette(palette)
+                       self.red = False
+               if not len(input_string.strip()):
+                       self.error = ""
+                       self.value = ""
+                       return
+               if self.table_name == "<timeranges>":
+                       ranges = []
+                       for value in [x.strip() for x in input_string.split(",")]:
+                               if not self.AddTimeRange(value, ranges):
+                                       return self.InvalidValue(value)
+                       ranges = [("(" + self.column_name1 + " >= " + r[0] + " AND " + self.column_name1 + " <= " + r[1] + ")") for r in ranges]
+                       self.value = " OR ".join(ranges)
+               elif self.table_name == "<ranges>":
+                       singles = []
+                       ranges = []
+                       for value in [x.strip() for x in input_string.split(",")]:
+                               if "-" in value:
+                                       vrange = value.split("-")
+                                       if len(vrange) != 2 or not self.IsNumber(vrange[0]) or not self.IsNumber(vrange[1]):
+                                               return self.InvalidValue(value)
+                                       ranges.append(vrange)
+                               else:
+                                       if not self.IsNumber(value):
+                                               return self.InvalidValue(value)
+                                       singles.append(value)
+                       ranges = [("(" + self.column_name1 + " >= " + r[0] + " AND " + self.column_name1 + " <= " + r[1] + ")") for r in ranges]
+                       if len(singles):
+                               ranges.append(self.column_name1 + " IN (" + ",".join(singles) + ")")
+                       self.value = " OR ".join(ranges)
+               elif self.table_name:
+                       all_ids = []
+                       for value in [x.strip() for x in input_string.split(",")]:
+                               ids = self.ValueToIds(value)
+                               if len(ids):
+                                       all_ids.extend(ids)
+                               else:
+                                       return self.InvalidValue(value)
+                       self.value = self.column_name1 + " IN (" + ",".join(all_ids) + ")"
+                       if self.column_name2:
+                               self.value = "( " + self.value + " OR " + self.column_name2 + " IN (" + ",".join(all_ids) + ") )"
+               else:
+                       self.value = input_string.strip()
+               self.error = ""
+               self.parent.ClearMessage()
+
+       def IsValid(self):
+               if not self.validated:
+                       self.Validate()
+               if len(self.error):
+                       self.parent.ShowMessage(self.error)
+                       return False
+               return True
+
+# Selected branch report creation dialog
+
+class SelectedBranchDialog(QDialog):
+
+       def __init__(self, glb, parent=None):
+               super(SelectedBranchDialog, self).__init__(parent)
+
+               self.glb = glb
+
+               self.name = ""
+               self.where_clause = ""
+
+               self.setWindowTitle("Selected Branches")
+               self.setMinimumWidth(600)
+
+               items = (
+                       ("Report name:", "Enter a name to appear in the window title bar", "", "", "", ""),
+                       ("Time ranges:", "Enter time ranges", "<timeranges>", "", "samples.id", ""),
+                       ("CPUs:", "Enter CPUs or ranges e.g. 0,5-6", "<ranges>", "", "cpu", ""),
+                       ("Commands:", "Only branches with these commands will be included", "comms", "comm", "comm_id", ""),
+                       ("PIDs:", "Only branches with these process IDs will be included", "threads", "pid", "thread_id", ""),
+                       ("TIDs:", "Only branches with these thread IDs will be included", "threads", "tid", "thread_id", ""),
+                       ("DSOs:", "Only branches with these DSOs will be included", "dsos", "short_name", "samples.dso_id", "to_dso_id"),
+                       ("Symbols:", "Only branches with these symbols will be included", "symbols", "name", "symbol_id", "to_symbol_id"),
+                       ("Raw SQL clause: ", "Enter a raw SQL WHERE clause", "", "", "", ""),
+                       )
+               self.data_items = [SQLTableDialogDataItem(glb, *x, parent=self) for x in items]
+
+               self.grid = QGridLayout()
+
+               for row in xrange(len(self.data_items)):
+                       self.grid.addWidget(QLabel(self.data_items[row].label), row, 0)
+                       self.grid.addWidget(self.data_items[row].widget, row, 1)
+
+               self.status = QLabel()
+
+               self.ok_button = QPushButton("Ok", self)
+               self.ok_button.setDefault(True)
+               self.ok_button.released.connect(self.Ok)
+               self.ok_button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
+
+               self.cancel_button = QPushButton("Cancel", self)
+               self.cancel_button.released.connect(self.reject)
+               self.cancel_button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
+
+               self.hbox = QHBoxLayout()
+               #self.hbox.addStretch()
+               self.hbox.addWidget(self.status)
+               self.hbox.addWidget(self.ok_button)
+               self.hbox.addWidget(self.cancel_button)
+
+               self.vbox = QVBoxLayout()
+               self.vbox.addLayout(self.grid)
+               self.vbox.addLayout(self.hbox)
+
+               self.setLayout(self.vbox);
+
+       def Ok(self):
+               self.name = self.data_items[0].value
+               if not self.name:
+                       self.ShowMessage("Report name is required")
+                       return
+               for d in self.data_items:
+                       if not d.IsValid():
+                               return
+               for d in self.data_items[1:]:
+                       if len(d.value):
+                               if len(self.where_clause):
+                                       self.where_clause += " AND "
+                               self.where_clause += d.value
+               if len(self.where_clause):
+                       self.where_clause = " AND ( " + self.where_clause + " ) "
+               else:
+                       self.ShowMessage("No selection")
+                       return
+               self.accept()
+
+       def ShowMessage(self, msg):
+               self.status.setText("<font color=#FF0000>" + msg)
+
+       def ClearMessage(self):
+               self.status.setText("")
+
 # Event list
 
 def GetEventList(db):
@@ -1656,7 +1975,7 @@ class TableWindow(QMdiSubWindow, ResizeColumnsToContentsBase):
        def FindDone(self, row):
                self.find_bar.Idle()
                if row >= 0:
-                       self.view.setCurrentIndex(self.model.index(row, 0, QModelIndex()))
+                       self.view.setCurrentIndex(self.model.mapFromSource(self.data_model.index(row, 0, QModelIndex())))
                else:
                        self.find_bar.NotFound()
 
@@ -1765,6 +2084,149 @@ class WindowMenu():
        def setActiveSubWindow(self, nr):
                self.mdi_area.setActiveSubWindow(self.mdi_area.subWindowList()[nr - 1])
 
+# Help text
+
+glb_help_text = """
+<h1>Contents</h1>
+<style>
+p.c1 {
+    text-indent: 40px;
+}
+p.c2 {
+    text-indent: 80px;
+}
+}
+</style>
+<p class=c1><a href=#reports>1. Reports</a></p>
+<p class=c2><a href=#callgraph>1.1 Context-Sensitive Call Graph</a></p>
+<p class=c2><a href=#allbranches>1.2 All branches</a></p>
+<p class=c2><a href=#selectedbranches>1.3 Selected branches</a></p>
+<p class=c1><a href=#tables>2. Tables</a></p>
+<h1 id=reports>1. Reports</h1>
+<h2 id=callgraph>1.1 Context-Sensitive Call Graph</h2>
+The result is a GUI window with a tree representing a context-sensitive
+call-graph. Expanding a couple of levels of the tree and adjusting column
+widths to suit will display something like:
+<pre>
+                                         Call Graph: pt_example
+Call Path                          Object      Count   Time(ns)  Time(%)  Branch Count   Branch Count(%)
+v- ls
+    v- 2638:2638
+        v- _start                  ld-2.19.so    1     10074071   100.0         211135            100.0
+          |- unknown               unknown       1        13198     0.1              1              0.0
+          >- _dl_start             ld-2.19.so    1      1400980    13.9          19637              9.3
+          >- _d_linit_internal     ld-2.19.so    1       448152     4.4          11094              5.3
+          v-__libc_start_main@plt  ls            1      8211741    81.5         180397             85.4
+             >- _dl_fixup          ld-2.19.so    1         7607     0.1            108              0.1
+             >- __cxa_atexit       libc-2.19.so  1        11737     0.1             10              0.0
+             >- __libc_csu_init    ls            1        10354     0.1             10              0.0
+             |- _setjmp            libc-2.19.so  1            0     0.0              4              0.0
+             v- main               ls            1      8182043    99.6         180254             99.9
+</pre>
+<h3>Points to note:</h3>
+<ul>
+<li>The top level is a command name (comm)</li>
+<li>The next level is a thread (pid:tid)</li>
+<li>Subsequent levels are functions</li>
+<li>'Count' is the number of calls</li>
+<li>'Time' is the elapsed time until the function returns</li>
+<li>Percentages are relative to the level above</li>
+<li>'Branch Count' is the total number of branches for that function and all functions that it calls
+</ul>
+<h3>Find</h3>
+Ctrl-F displays a Find bar which finds function names by either an exact match or a pattern match.
+The pattern matching symbols are ? for any character and * for zero or more characters.
+<h2 id=allbranches>1.2 All branches</h2>
+The All branches report displays all branches in chronological order.
+Not all data is fetched immediately. More records can be fetched using the Fetch bar provided.
+<h3>Disassembly</h3>
+Open a branch to display disassembly. This only works if:
+<ol>
+<li>The disassembler is available. Currently, only Intel XED is supported - see <a href=#xed>Intel XED Setup</a></li>
+<li>The object code is available. Currently, only the perf build ID cache is searched for object code.
+The default directory ~/.debug can be overridden by setting environment variable PERF_BUILDID_DIR.
+One exception is kcore where the DSO long name is used (refer dsos_view on the Tables menu),
+or alternatively, set environment variable PERF_KCORE to the kcore file name.</li>
+</ol>
+<h4 id=xed>Intel XED Setup</h4>
+To use Intel XED, libxed.so must be present.  To build and install libxed.so:
+<pre>
+git clone https://github.com/intelxed/mbuild.git mbuild
+git clone https://github.com/intelxed/xed
+cd xed
+./mfile.py --share
+sudo ./mfile.py --prefix=/usr/local install
+sudo ldconfig
+</pre>
+<h3>Find</h3>
+Ctrl-F displays a Find bar which finds substrings by either an exact match or a regular expression match.
+Refer to Python documentation for the regular expression syntax.
+All columns are searched, but only currently fetched rows are searched.
+<h2 id=selectedbranches>1.3 Selected branches</h2>
+This is the same as the <a href=#allbranches>All branches</a> report but with the data reduced
+by various selection criteria. A dialog box displays available criteria which are AND'ed together.
+<h3>1.3.1 Time ranges</h3>
+The time ranges hint text shows the total time range. Relative time ranges can also be entered in
+ms, us or ns. Also, negative values are relative to the end of trace.  Examples:
+<pre>
+       81073085947329-81073085958238   From 81073085947329 to 81073085958238
+       100us-200us             From 100us to 200us
+       10ms-                   From 10ms to the end
+       -100ns                  The first 100ns
+       -10ms-                  The last 10ms
+</pre>
+N.B. Due to the granularity of timestamps, there could be no branches in any given time range.
+<h1 id=tables>2. Tables</h1>
+The Tables menu shows all tables and views in the database. Most tables have an associated view
+which displays the information in a more friendly way. Not all data for large tables is fetched
+immediately. More records can be fetched using the Fetch bar provided. Columns can be sorted,
+but that can be slow for large tables.
+<p>There are also tables of database meta-information.
+For SQLite3 databases, the sqlite_master table is included.
+For PostgreSQL databases, information_schema.tables/views/columns are included.
+<h3>Find</h3>
+Ctrl-F displays a Find bar which finds substrings by either an exact match or a regular expression match.
+Refer to Python documentation for the regular expression syntax.
+All columns are searched, but only currently fetched rows are searched.
+<p>N.B. Results are found in id order, so if the table is re-ordered, find-next and find-previous
+will go to the next/previous result in id order, instead of display order.
+"""
+
+# Help window
+
+class HelpWindow(QMdiSubWindow):
+
+       def __init__(self, glb, parent=None):
+               super(HelpWindow, self).__init__(parent)
+
+               self.text = QTextBrowser()
+               self.text.setHtml(glb_help_text)
+               self.text.setReadOnly(True)
+               self.text.setOpenExternalLinks(True)
+
+               self.setWidget(self.text)
+
+               AddSubWindow(glb.mainwindow.mdi_area, self, "Exported SQL Viewer Help")
+
+# Main window that only displays the help text
+
+class HelpOnlyWindow(QMainWindow):
+
+       def __init__(self, parent=None):
+               super(HelpOnlyWindow, self).__init__(parent)
+
+               self.setMinimumSize(200, 100)
+               self.resize(800, 600)
+               self.setWindowTitle("Exported SQL Viewer Help")
+               self.setWindowIcon(self.style().standardIcon(QStyle.SP_MessageBoxInformation))
+
+               self.text = QTextBrowser()
+               self.text.setHtml(glb_help_text)
+               self.text.setReadOnly(True)
+               self.text.setOpenExternalLinks(True)
+
+               self.setCentralWidget(self.text)
+
 # Font resize
 
 def ResizeFont(widget, diff):
@@ -1851,6 +2313,9 @@ class MainWindow(QMainWindow):
 
                self.window_menu = WindowMenu(self.mdi_area, menu)
 
+               help_menu = menu.addMenu("&Help")
+               help_menu.addAction(CreateAction("&Exported SQL Viewer Help", "Helpful information", self.Help, self, QKeySequence.HelpContents))
+
        def Find(self):
                win = self.mdi_area.activeSubWindow()
                if win:
@@ -1888,6 +2353,8 @@ class MainWindow(QMainWindow):
                        if event == "branches":
                                label = "All branches" if branches_events == 1 else "All branches " + "(id=" + dbid + ")"
                                reports_menu.addAction(CreateAction(label, "Create a new window displaying branch events", lambda x=dbid: self.NewBranchView(x), self))
+                               label = "Selected branches" if branches_events == 1 else "Selected branches " + "(id=" + dbid + ")"
+                               reports_menu.addAction(CreateAction(label, "Create a new window displaying branch events", lambda x=dbid: self.NewSelectedBranchView(x), self))
 
        def TableMenu(self, tables, menu):
                table_menu = menu.addMenu("&Tables")
@@ -1900,9 +2367,18 @@ class MainWindow(QMainWindow):
        def NewBranchView(self, event_id):
                BranchWindow(self.glb, event_id, "", "", self)
 
+       def NewSelectedBranchView(self, event_id):
+               dialog = SelectedBranchDialog(self.glb, self)
+               ret = dialog.exec_()
+               if ret:
+                       BranchWindow(self.glb, event_id, dialog.name, dialog.where_clause, self)
+
        def NewTableView(self, table_name):
                TableWindow(self.glb, table_name, self)
 
+       def Help(self):
+               HelpWindow(self.glb, self)
+
 # XED Disassembler
 
 class xed_state_t(Structure):
@@ -1929,7 +2405,12 @@ class XEDInstruction():
 class LibXED():
 
        def __init__(self):
-               self.libxed = CDLL("libxed.so")
+               try:
+                       self.libxed = CDLL("libxed.so")
+               except:
+                       self.libxed = None
+               if not self.libxed:
+                       self.libxed = CDLL("/usr/local/lib/libxed.so")
 
                self.xed_tables_init = self.libxed.xed_tables_init
                self.xed_tables_init.restype = None
@@ -2097,10 +2578,16 @@ class DBRef():
 
 def Main():
        if (len(sys.argv) < 2):
-               print >> sys.stderr, "Usage is: exported-sql-viewer.py <database name>"
+               print >> sys.stderr, "Usage is: exported-sql-viewer.py {<database name> | --help-only}"
                raise Exception("Too few arguments")
 
        dbname = sys.argv[1]
+       if dbname == "--help-only":
+               app = QApplication(sys.argv)
+               mainwindow = HelpOnlyWindow()
+               mainwindow.show()
+               err = app.exec_()
+               sys.exit(err)
 
        is_sqlite3 = False
        try:
index e88e6f9..668d2a9 100644 (file)
@@ -1810,3 +1810,30 @@ void perf_evlist__force_leader(struct perf_evlist *evlist)
                leader->forced_leader = true;
        }
 }
+
+struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evsel_list,
+                                                struct perf_evsel *evsel)
+{
+       struct perf_evsel *c2, *leader;
+       bool is_open = true;
+
+       leader = evsel->leader;
+       pr_debug("Weak group for %s/%d failed\n",
+                       leader->name, leader->nr_members);
+
+       /*
+        * for_each_group_member doesn't work here because it doesn't
+        * include the first entry.
+        */
+       evlist__for_each_entry(evsel_list, c2) {
+               if (c2 == evsel)
+                       is_open = false;
+               if (c2->leader == leader) {
+                       if (is_open)
+                               perf_evsel__close(c2);
+                       c2->leader = c2;
+                       c2->nr_members = 0;
+               }
+       }
+       return leader;
+}
index dc66436..9919eed 100644 (file)
@@ -312,4 +312,7 @@ bool perf_evlist__exclude_kernel(struct perf_evlist *evlist);
 
 void perf_evlist__force_leader(struct perf_evlist *evlist);
 
+struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evlist,
+                                                struct perf_evsel *evsel);
+
 #endif /* __PERF_EVLIST_H */
index 6d18705..d37bb15 100644 (file)
@@ -956,7 +956,6 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
                attr->sample_freq    = 0;
                attr->sample_period  = 0;
                attr->write_backward = 0;
-               attr->sample_id_all  = 0;
        }
 
        if (opts->no_samples)
index 58f6a9c..4503f3c 100644 (file)
@@ -1474,6 +1474,8 @@ static void intel_pt_calc_mtc_timestamp(struct intel_pt_decoder *decoder)
                decoder->have_calc_cyc_to_tsc = false;
                intel_pt_calc_cyc_to_tsc(decoder, true);
        }
+
+       intel_pt_log_to("Setting timestamp", decoder->timestamp);
 }
 
 static void intel_pt_calc_cbr(struct intel_pt_decoder *decoder)
@@ -1514,6 +1516,8 @@ static void intel_pt_calc_cyc_timestamp(struct intel_pt_decoder *decoder)
                decoder->timestamp = timestamp;
 
        decoder->timestamp_insn_cnt = 0;
+
+       intel_pt_log_to("Setting timestamp", decoder->timestamp);
 }
 
 /* Walk PSB+ packets when already in sync. */
index e02bc7b..5e64da2 100644 (file)
@@ -31,6 +31,11 @@ static FILE *f;
 static char log_name[MAX_LOG_NAME];
 bool intel_pt_enable_logging;
 
+void *intel_pt_log_fp(void)
+{
+       return f;
+}
+
 void intel_pt_log_enable(void)
 {
        intel_pt_enable_logging = true;
index 45b64f9..cc08493 100644 (file)
@@ -22,6 +22,7 @@
 
 struct intel_pt_pkt;
 
+void *intel_pt_log_fp(void);
 void intel_pt_log_enable(void);
 void intel_pt_log_disable(void);
 void intel_pt_log_set_name(const char *name);
index 86cc9a6..149ff36 100644 (file)
@@ -206,6 +206,16 @@ static void intel_pt_dump_event(struct intel_pt *pt, unsigned char *buf,
        intel_pt_dump(pt, buf, len);
 }
 
+static void intel_pt_log_event(union perf_event *event)
+{
+       FILE *f = intel_pt_log_fp();
+
+       if (!intel_pt_enable_logging || !f)
+               return;
+
+       perf_event__fprintf(event, f);
+}
+
 static int intel_pt_do_fix_overlap(struct intel_pt *pt, struct auxtrace_buffer *a,
                                   struct auxtrace_buffer *b)
 {
@@ -2010,9 +2020,9 @@ static int intel_pt_process_event(struct perf_session *session,
                 event->header.type == PERF_RECORD_SWITCH_CPU_WIDE)
                err = intel_pt_context_switch(pt, event, sample);
 
-       intel_pt_log("event %s (%u): cpu %d time %"PRIu64" tsc %#"PRIx64"\n",
-                    perf_event__name(event->header.type), event->header.type,
-                    sample->cpu, sample->time, timestamp);
+       intel_pt_log("event %u: cpu %d time %"PRIu64" tsc %#"PRIx64" ",
+                    event->header.type, sample->cpu, sample->time, timestamp);
+       intel_pt_log_event(event);
 
        return err;
 }
index 7799788..7e49baa 100644 (file)
@@ -773,7 +773,7 @@ static void pmu_add_cpu_aliases(struct list_head *head, struct perf_pmu *pmu)
 
                if (!is_arm_pmu_core(name)) {
                        pname = pe->pmu ? pe->pmu : "cpu";
-                       if (strncmp(pname, name, strlen(pname)))
+                       if (strcmp(pname, name))
                                continue;
                }