]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Merge tag 'samsung-dt-4.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/krzk...
authorArnd Bergmann <arnd@arndb.de>
Tue, 7 Feb 2017 14:50:58 +0000 (15:50 +0100)
committerArnd Bergmann <arnd@arndb.de>
Tue, 7 Feb 2017 14:50:58 +0000 (15:50 +0100)
Pull "Samsung DeviceTree update for v4.11, third round" from Krzysztof Kozlowski

1. Add descriptive user-friendly label names for power domains. This
   makes debugging easier.

* tag 'samsung-dt-4.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux:
  ARM: dts: exynos: Add labels to all existing power domains

857 files changed:
Documentation/DocBook/Makefile
Documentation/admin-guide/kernel-parameters.txt
Documentation/block/queue-sysfs.txt
Documentation/devicetree/bindings/arm/axentia.txt [new file with mode: 0644]
Documentation/devicetree/bindings/arm/davinci.txt
Documentation/devicetree/bindings/arm/marvell/98dx3236.txt [new file with mode: 0644]
Documentation/devicetree/bindings/clock/st,stm32-rcc.txt
Documentation/devicetree/bindings/eeprom/eeprom.txt
Documentation/devicetree/bindings/input/tps65218-pwrbutton.txt
Documentation/devicetree/bindings/interrupt-controller/arm,gic.txt
Documentation/devicetree/bindings/net/marvell,prestera.txt [new file with mode: 0644]
Documentation/devicetree/bindings/power/supply/tps65217_charger.txt
Documentation/devicetree/bindings/vendor-prefixes.txt
Documentation/driver-api/infrastructure.rst
Documentation/networking/mpls-sysctl.txt
Documentation/unaligned-memory-access.txt
Documentation/vfio-mediated-device.txt
MAINTAINERS
Makefile
arch/arm/Kconfig
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/alpine.dtsi
arch/arm/boot/dts/am335x-bone-common.dtsi
arch/arm/boot/dts/am335x-boneblack-common.dtsi [new file with mode: 0644]
arch/arm/boot/dts/am335x-boneblack-wireless.dts [new file with mode: 0644]
arch/arm/boot/dts/am335x-boneblack.dts
arch/arm/boot/dts/am335x-bonegreen-common.dtsi [new file with mode: 0644]
arch/arm/boot/dts/am335x-bonegreen-wireless.dts [new file with mode: 0644]
arch/arm/boot/dts/am335x-bonegreen.dts
arch/arm/boot/dts/am335x-chilisom.dtsi
arch/arm/boot/dts/am335x-evm.dts
arch/arm/boot/dts/am335x-evmsk.dts
arch/arm/boot/dts/am335x-icev2.dts
arch/arm/boot/dts/am335x-nano.dts
arch/arm/boot/dts/am335x-phycore-som.dtsi
arch/arm/boot/dts/am335x-sl50.dts
arch/arm/boot/dts/am335x-wega.dtsi
arch/arm/boot/dts/am33xx.dtsi
arch/arm/boot/dts/am4372.dtsi
arch/arm/boot/dts/am437x-gp-evm.dts
arch/arm/boot/dts/am437x-idk-evm.dts
arch/arm/boot/dts/am437x-sk-evm.dts
arch/arm/boot/dts/am43x-epos-evm.dts
arch/arm/boot/dts/am571x-idk.dts
arch/arm/boot/dts/am572x-idk.dts
arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi
arch/arm/boot/dts/am57xx-beagle-x15-revb1.dts
arch/arm/boot/dts/am57xx-beagle-x15.dts
arch/arm/boot/dts/am57xx-idk-common.dtsi
arch/arm/boot/dts/armada-370-db.dts
arch/arm/boot/dts/armada-370-dlink-dns327l.dts
arch/arm/boot/dts/armada-370-mirabox.dts
arch/arm/boot/dts/armada-370-netgear-rn102.dts
arch/arm/boot/dts/armada-370-netgear-rn104.dts
arch/arm/boot/dts/armada-370-rd.dts
arch/arm/boot/dts/armada-370-synology-ds213j.dts
arch/arm/boot/dts/armada-370-xp.dtsi
arch/arm/boot/dts/armada-370.dtsi
arch/arm/boot/dts/armada-375-db.dts
arch/arm/boot/dts/armada-375.dtsi
arch/arm/boot/dts/armada-380.dtsi
arch/arm/boot/dts/armada-385-linksys.dtsi
arch/arm/boot/dts/armada-385-turris-omnia.dts
arch/arm/boot/dts/armada-385.dtsi
arch/arm/boot/dts/armada-388-clearfog-base.dts [new file with mode: 0644]
arch/arm/boot/dts/armada-388-clearfog-pro.dts [new file with mode: 0644]
arch/arm/boot/dts/armada-388-clearfog.dts
arch/arm/boot/dts/armada-388-clearfog.dtsi [new file with mode: 0644]
arch/arm/boot/dts/armada-388-db.dts
arch/arm/boot/dts/armada-388-rd.dts
arch/arm/boot/dts/armada-38x-solidrun-microsom.dtsi
arch/arm/boot/dts/armada-38x.dtsi
arch/arm/boot/dts/armada-390-db.dts
arch/arm/boot/dts/armada-390.dtsi
arch/arm/boot/dts/armada-395.dtsi
arch/arm/boot/dts/armada-398-db.dts
arch/arm/boot/dts/armada-398.dtsi
arch/arm/boot/dts/armada-39x.dtsi
arch/arm/boot/dts/armada-xp-98dx3236.dtsi [new file with mode: 0644]
arch/arm/boot/dts/armada-xp-98dx3336.dtsi [new file with mode: 0644]
arch/arm/boot/dts/armada-xp-98dx4251.dtsi [new file with mode: 0644]
arch/arm/boot/dts/armada-xp-axpwifiap.dts
arch/arm/boot/dts/armada-xp-db-dxbc2.dts [new file with mode: 0644]
arch/arm/boot/dts/armada-xp-db-xc3-24g4xg.dts [new file with mode: 0644]
arch/arm/boot/dts/armada-xp-db.dts
arch/arm/boot/dts/armada-xp-gp.dts
arch/arm/boot/dts/armada-xp-lenovo-ix4-300d.dts
arch/arm/boot/dts/armada-xp-linksys-mamba.dts
arch/arm/boot/dts/armada-xp-matrix.dts
arch/arm/boot/dts/armada-xp-mv78230.dtsi
arch/arm/boot/dts/armada-xp-mv78260.dtsi
arch/arm/boot/dts/armada-xp-mv78460.dtsi
arch/arm/boot/dts/armada-xp-netgear-rn2120.dts
arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts
arch/arm/boot/dts/armada-xp-synology-ds414.dts
arch/arm/boot/dts/armada-xp.dtsi
arch/arm/boot/dts/aspeed-ast2500-evb.dts
arch/arm/boot/dts/aspeed-bmc-opp-palmetto.dts
arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts [new file with mode: 0644]
arch/arm/boot/dts/aspeed-g4.dtsi
arch/arm/boot/dts/aspeed-g5.dtsi
arch/arm/boot/dts/at91-linea.dtsi [new file with mode: 0644]
arch/arm/boot/dts/at91-sama5d2_xplained.dts
arch/arm/boot/dts/at91-sama5d4_xplained.dts
arch/arm/boot/dts/at91-tse850-3.dts [new file with mode: 0644]
arch/arm/boot/dts/axm55xx.dtsi
arch/arm/boot/dts/bcm-nsp.dtsi
arch/arm/boot/dts/bcm2835-rpi.dtsi
arch/arm/boot/dts/bcm283x.dtsi
arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dts
arch/arm/boot/dts/bcm4708-asus-rt-ac68u.dts
arch/arm/boot/dts/bcm4708-buffalo-wzr-1750dhp.dts
arch/arm/boot/dts/bcm4708-luxul-xap-1510.dts
arch/arm/boot/dts/bcm4708-luxul-xwc-1000.dts
arch/arm/boot/dts/bcm4708-netgear-r6250.dts
arch/arm/boot/dts/bcm4708-netgear-r6300-v2.dts
arch/arm/boot/dts/bcm4708-smartrg-sr400ac.dts
arch/arm/boot/dts/bcm4708.dtsi
arch/arm/boot/dts/bcm47081-asus-rt-n18u.dts
arch/arm/boot/dts/bcm47081-buffalo-wzr-600dhp2.dts
arch/arm/boot/dts/bcm47081-buffalo-wzr-900dhp.dts
arch/arm/boot/dts/bcm47081-luxul-xap-1410.dts [new file with mode: 0644]
arch/arm/boot/dts/bcm47081-luxul-xwr-1200.dts [new file with mode: 0644]
arch/arm/boot/dts/bcm47081.dtsi
arch/arm/boot/dts/bcm4709-asus-rt-ac87u.dts
arch/arm/boot/dts/bcm4709-buffalo-wxr-1900dhp.dts
arch/arm/boot/dts/bcm4709-netgear-r7000.dts
arch/arm/boot/dts/bcm4709-netgear-r8000.dts
arch/arm/boot/dts/bcm4709-tplink-archer-c9-v1.dts
arch/arm/boot/dts/bcm4709.dtsi
arch/arm/boot/dts/bcm47094-dlink-dir-885l.dts
arch/arm/boot/dts/bcm47094-luxul-xwr-3100.dts
arch/arm/boot/dts/bcm47094-netgear-r8500.dts
arch/arm/boot/dts/bcm47094.dtsi
arch/arm/boot/dts/bcm5301x.dtsi
arch/arm/boot/dts/bcm53573.dtsi
arch/arm/boot/dts/bcm94708.dts
arch/arm/boot/dts/bcm94709.dts
arch/arm/boot/dts/bcm953012er.dts
arch/arm/boot/dts/bcm953012k.dts
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/bcm988312hr.dts
arch/arm/boot/dts/da850-evm.dts
arch/arm/boot/dts/da850-lcdk.dts
arch/arm/boot/dts/da850-lego-ev3.dts [new file with mode: 0644]
arch/arm/boot/dts/da850.dtsi
arch/arm/boot/dts/dm814x.dtsi
arch/arm/boot/dts/dm816x.dtsi
arch/arm/boot/dts/dove-cm-a510.dtsi
arch/arm/boot/dts/dove-sbc-a510.dts
arch/arm/boot/dts/dra7-evm.dts
arch/arm/boot/dts/dra7.dtsi
arch/arm/boot/dts/dra71-evm.dts
arch/arm/boot/dts/dra72-evm-common.dtsi
arch/arm/boot/dts/dra72-evm-revc.dts
arch/arm/boot/dts/dra72-evm-tps65917.dtsi
arch/arm/boot/dts/ecx-2000.dts
arch/arm/boot/dts/exynos3250.dtsi
arch/arm/boot/dts/exynos5.dtsi
arch/arm/boot/dts/exynos5260.dtsi
arch/arm/boot/dts/exynos5440.dtsi
arch/arm/boot/dts/imx1-ads.dts
arch/arm/boot/dts/imx1.dtsi
arch/arm/boot/dts/imx23.dtsi
arch/arm/boot/dts/imx25.dtsi
arch/arm/boot/dts/imx27-apf27dev.dts
arch/arm/boot/dts/imx27-eukrea-mbimxsd27-baseboard.dts
arch/arm/boot/dts/imx27-pdk.dts
arch/arm/boot/dts/imx27-phytec-phycard-s-som.dtsi
arch/arm/boot/dts/imx27-phytec-phycore-rdk.dts
arch/arm/boot/dts/imx27-phytec-phycore-som.dtsi
arch/arm/boot/dts/imx27.dtsi
arch/arm/boot/dts/imx28.dtsi
arch/arm/boot/dts/imx31.dtsi
arch/arm/boot/dts/imx35.dtsi
arch/arm/boot/dts/imx50-evk.dts
arch/arm/boot/dts/imx51-apf51dev.dts
arch/arm/boot/dts/imx51-babbage.dts
arch/arm/boot/dts/imx51-digi-connectcore-som.dtsi
arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard.dts
arch/arm/boot/dts/imx53-qsb-common.dtsi
arch/arm/boot/dts/imx53-qsb.dts
arch/arm/boot/dts/imx53-qsrb.dts
arch/arm/boot/dts/imx53-smd.dts
arch/arm/boot/dts/imx53-tqma53.dtsi
arch/arm/boot/dts/imx53-tx53.dtsi
arch/arm/boot/dts/imx53-voipac-dmm-668.dtsi
arch/arm/boot/dts/imx6dl-aristainetos2_4.dts
arch/arm/boot/dts/imx6dl-aristainetos2_7.dts
arch/arm/boot/dts/imx6dl-aristainetos_4.dts
arch/arm/boot/dts/imx6dl-colibri-eval-v3.dts
arch/arm/boot/dts/imx6dl-cubox-i.dts
arch/arm/boot/dts/imx6dl-hummingboard.dts
arch/arm/boot/dts/imx6dl-icore-rqs.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6dl-icore.dts
arch/arm/boot/dts/imx6dl-nit6xlite.dts
arch/arm/boot/dts/imx6dl-nitrogen6x.dts
arch/arm/boot/dts/imx6dl-sabrelite.dts
arch/arm/boot/dts/imx6dl-savageboard.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6dl-ts4900.dts
arch/arm/boot/dts/imx6q-apalis-ixora.dts
arch/arm/boot/dts/imx6q-b450v3.dts
arch/arm/boot/dts/imx6q-b650v3.dts
arch/arm/boot/dts/imx6q-b850v3.dts
arch/arm/boot/dts/imx6q-ba16.dtsi
arch/arm/boot/dts/imx6q-bx50v3.dtsi
arch/arm/boot/dts/imx6q-cm-fx6.dts
arch/arm/boot/dts/imx6q-cubox-i.dts
arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
arch/arm/boot/dts/imx6q-evi.dts
arch/arm/boot/dts/imx6q-gw5400-a.dts
arch/arm/boot/dts/imx6q-h100.dts
arch/arm/boot/dts/imx6q-hummingboard.dts
arch/arm/boot/dts/imx6q-icore-rqs.dts
arch/arm/boot/dts/imx6q-icore.dts
arch/arm/boot/dts/imx6q-marsboard.dts
arch/arm/boot/dts/imx6q-mccmon6.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6q-nitrogen6_max.dts
arch/arm/boot/dts/imx6q-nitrogen6_som2.dts
arch/arm/boot/dts/imx6q-nitrogen6x.dts
arch/arm/boot/dts/imx6q-novena.dts
arch/arm/boot/dts/imx6q-sabrelite.dts
arch/arm/boot/dts/imx6q-savageboard.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6q-ts4900.dts
arch/arm/boot/dts/imx6q-utilite-pro.dts
arch/arm/boot/dts/imx6qdl-apalis.dtsi
arch/arm/boot/dts/imx6qdl-apf6dev.dtsi
arch/arm/boot/dts/imx6qdl-aristainetos.dtsi
arch/arm/boot/dts/imx6qdl-aristainetos2.dtsi
arch/arm/boot/dts/imx6qdl-colibri.dtsi
arch/arm/boot/dts/imx6qdl-cubox-i.dtsi
arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi
arch/arm/boot/dts/imx6qdl-gw51xx.dtsi
arch/arm/boot/dts/imx6qdl-gw52xx.dtsi
arch/arm/boot/dts/imx6qdl-gw53xx.dtsi
arch/arm/boot/dts/imx6qdl-gw54xx.dtsi
arch/arm/boot/dts/imx6qdl-gw551x.dtsi
arch/arm/boot/dts/imx6qdl-gw552x.dtsi
arch/arm/boot/dts/imx6qdl-gw553x.dtsi
arch/arm/boot/dts/imx6qdl-hummingboard.dtsi
arch/arm/boot/dts/imx6qdl-icore-rqs.dtsi
arch/arm/boot/dts/imx6qdl-icore.dtsi
arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi
arch/arm/boot/dts/imx6qdl-microsom.dtsi
arch/arm/boot/dts/imx6qdl-nit6xlite.dtsi
arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi
arch/arm/boot/dts/imx6qdl-nitrogen6_som2.dtsi
arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi
arch/arm/boot/dts/imx6qdl-rex.dtsi
arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
arch/arm/boot/dts/imx6qdl-sabresd.dtsi
arch/arm/boot/dts/imx6qdl-savageboard.dtsi [new file with mode: 0644]
arch/arm/boot/dts/imx6qdl-ts4900.dtsi
arch/arm/boot/dts/imx6qdl-tx6.dtsi
arch/arm/boot/dts/imx6qdl.dtsi
arch/arm/boot/dts/imx6qp.dtsi
arch/arm/boot/dts/imx6sl-evk.dts
arch/arm/boot/dts/imx6sl.dtsi
arch/arm/boot/dts/imx6sx-nitrogen6sx.dts
arch/arm/boot/dts/imx6sx-sdb-sai.dts
arch/arm/boot/dts/imx6sx-udoo-neo.dtsi
arch/arm/boot/dts/imx6sx.dtsi
arch/arm/boot/dts/imx6ul-geam-kit.dts
arch/arm/boot/dts/imx6ul-geam.dtsi
arch/arm/boot/dts/imx6ul-isiot-emmc.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6ul-isiot-nand.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6ul-isiot.dtsi [new file with mode: 0644]
arch/arm/boot/dts/imx6ul-liteboard.dts
arch/arm/boot/dts/imx6ul-litesom.dtsi
arch/arm/boot/dts/imx6ul-opos6ul.dtsi [new file with mode: 0644]
arch/arm/boot/dts/imx6ul-opos6uldev.dts [new file with mode: 0644]
arch/arm/boot/dts/imx6ul-pico-hobbit.dts
arch/arm/boot/dts/imx6ul-tx6ul.dtsi
arch/arm/boot/dts/imx6ul.dtsi
arch/arm/boot/dts/imx6ull-14x14-evk.dts
arch/arm/boot/dts/imx6ull.dtsi
arch/arm/boot/dts/imx7-colibri.dtsi
arch/arm/boot/dts/imx7d-cl-som-imx7.dts
arch/arm/boot/dts/imx7d-nitrogen7.dts
arch/arm/boot/dts/imx7d-pinfunc.h
arch/arm/boot/dts/imx7d-sdb.dts
arch/arm/boot/dts/imx7s-warp.dts
arch/arm/boot/dts/imx7s.dtsi
arch/arm/boot/dts/keystone-k2e-netcp.dtsi
arch/arm/boot/dts/keystone-k2e.dtsi
arch/arm/boot/dts/keystone-k2g.dtsi
arch/arm/boot/dts/keystone-k2hk-netcp.dtsi
arch/arm/boot/dts/keystone-k2hk.dtsi
arch/arm/boot/dts/keystone-k2l-netcp.dtsi
arch/arm/boot/dts/keystone-k2l.dtsi
arch/arm/boot/dts/keystone.dtsi
arch/arm/boot/dts/kirkwood-dir665.dts
arch/arm/boot/dts/kirkwood-linkstation-6282.dtsi
arch/arm/boot/dts/kirkwood-linkstation-duo-6281.dtsi
arch/arm/boot/dts/kirkwood-linkstation-lsqvl.dts
arch/arm/boot/dts/kirkwood-linkstation-lsvl.dts
arch/arm/boot/dts/kirkwood-linkstation-lswsxl.dts
arch/arm/boot/dts/kirkwood-linkstation-lswvl.dts
arch/arm/boot/dts/kirkwood-linkstation-lswxl.dts
arch/arm/boot/dts/kirkwood-linkstation.dtsi
arch/arm/boot/dts/kirkwood-linksys-viper.dts
arch/arm/boot/dts/kirkwood-mv88f6281gtw-ge.dts
arch/arm/boot/dts/kirkwood-rd88f6281-a.dts
arch/arm/boot/dts/kirkwood-rd88f6281-z0.dts
arch/arm/boot/dts/kirkwood-rd88f6281.dtsi
arch/arm/boot/dts/ls1021a.dtsi
arch/arm/boot/dts/mt2701-evb.dts
arch/arm/boot/dts/mt2701.dtsi
arch/arm/boot/dts/mt6580.dtsi
arch/arm/boot/dts/mt6589.dtsi
arch/arm/boot/dts/mt7623-evb.dts
arch/arm/boot/dts/mt7623.dtsi
arch/arm/boot/dts/mt8127.dtsi
arch/arm/boot/dts/mt8135.dtsi
arch/arm/boot/dts/mvebu-linkstation-fan.dtsi
arch/arm/boot/dts/mvebu-linkstation-gpio-simple.dtsi
arch/arm/boot/dts/omap2.dtsi
arch/arm/boot/dts/omap3-beagle-xm.dts
arch/arm/boot/dts/omap3-igep.dtsi
arch/arm/boot/dts/omap3-n900.dts
arch/arm/boot/dts/omap3.dtsi
arch/arm/boot/dts/omap4-panda-common.dtsi
arch/arm/boot/dts/omap4.dtsi
arch/arm/boot/dts/omap5-igep0050.dts
arch/arm/boot/dts/omap5-uevm.dts
arch/arm/boot/dts/omap5.dtsi
arch/arm/boot/dts/orion5x-kuroboxpro.dts
arch/arm/boot/dts/orion5x-linkstation-lsgl.dts
arch/arm/boot/dts/orion5x-linkstation-lswtgl.dts
arch/arm/boot/dts/orion5x-linkstation.dtsi
arch/arm/boot/dts/orion5x-lschl.dts
arch/arm/boot/dts/orion5x-lswsgl.dts
arch/arm/boot/dts/ox810se.dtsi
arch/arm/boot/dts/ox820.dtsi
arch/arm/boot/dts/qcom-apq8060-dragonboard.dts
arch/arm/boot/dts/qcom-apq8064-arrow-sd-600eval.dts
arch/arm/boot/dts/qcom-apq8064-ifc6410.dts
arch/arm/boot/dts/qcom-apq8064-pins.dtsi
arch/arm/boot/dts/qcom-apq8064-sony-xperia-yuga.dts
arch/arm/boot/dts/qcom-apq8064.dtsi
arch/arm/boot/dts/qcom-ipq8064.dtsi
arch/arm/boot/dts/qcom-msm8660-surf.dts
arch/arm/boot/dts/qcom-msm8660.dtsi
arch/arm/boot/dts/qcom-msm8974-sony-xperia-honami.dts
arch/arm/boot/dts/qcom-msm8974.dtsi
arch/arm/boot/dts/r7s72100-rskrza1.dts
arch/arm/boot/dts/r7s72100.dtsi
arch/arm/boot/dts/r8a73a4.dtsi
arch/arm/boot/dts/r8a7743.dtsi
arch/arm/boot/dts/r8a7745.dtsi
arch/arm/boot/dts/r8a7778.dtsi
arch/arm/boot/dts/r8a7779-marzen.dts
arch/arm/boot/dts/r8a7779.dtsi
arch/arm/boot/dts/r8a7790.dtsi
arch/arm/boot/dts/r8a7791.dtsi
arch/arm/boot/dts/r8a7792.dtsi
arch/arm/boot/dts/r8a7793-gose.dts
arch/arm/boot/dts/r8a7793.dtsi
arch/arm/boot/dts/r8a7794.dtsi
arch/arm/boot/dts/rk1108.dtsi
arch/arm/boot/dts/rk3036-evb.dts
arch/arm/boot/dts/rk3036-kylin.dts
arch/arm/boot/dts/rk3036.dtsi
arch/arm/boot/dts/rk3066a-bqcurie2.dts
arch/arm/boot/dts/rk3066a-marsboard.dts
arch/arm/boot/dts/rk3066a-mk808.dts
arch/arm/boot/dts/rk3066a-rayeager.dts
arch/arm/boot/dts/rk3066a.dtsi
arch/arm/boot/dts/rk3188-px3-evb.dts
arch/arm/boot/dts/rk3188-radxarock.dts
arch/arm/boot/dts/rk3188.dtsi
arch/arm/boot/dts/rk3229-evb.dts
arch/arm/boot/dts/rk322x.dtsi
arch/arm/boot/dts/rk3288-evb-act8846.dts
arch/arm/boot/dts/rk3288-evb-rk808.dts
arch/arm/boot/dts/rk3288-evb.dtsi
arch/arm/boot/dts/rk3288-fennec.dts
arch/arm/boot/dts/rk3288-firefly-beta.dts
arch/arm/boot/dts/rk3288-firefly-reload-core.dtsi
arch/arm/boot/dts/rk3288-firefly-reload.dts
arch/arm/boot/dts/rk3288-firefly.dts
arch/arm/boot/dts/rk3288-firefly.dtsi
arch/arm/boot/dts/rk3288-miqi.dts
arch/arm/boot/dts/rk3288-popmetal.dts
arch/arm/boot/dts/rk3288-r89.dts
arch/arm/boot/dts/rk3288-rock2-som.dtsi
arch/arm/boot/dts/rk3288-rock2-square.dts
arch/arm/boot/dts/rk3288-veyron-analog-audio.dtsi
arch/arm/boot/dts/rk3288-veyron-brain.dts
arch/arm/boot/dts/rk3288-veyron-chromebook.dtsi
arch/arm/boot/dts/rk3288-veyron-jaq.dts
arch/arm/boot/dts/rk3288-veyron-jerry.dts
arch/arm/boot/dts/rk3288-veyron-mickey.dts
arch/arm/boot/dts/rk3288-veyron-minnie.dts
arch/arm/boot/dts/rk3288-veyron-pinky.dts
arch/arm/boot/dts/rk3288-veyron-sdmmc.dtsi
arch/arm/boot/dts/rk3288-veyron-speedy.dts
arch/arm/boot/dts/rk3288-veyron.dtsi
arch/arm/boot/dts/rk3288.dtsi
arch/arm/boot/dts/sama5d2.dtsi
arch/arm/boot/dts/sama5d36ek_cmp.dts [new file with mode: 0644]
arch/arm/boot/dts/sama5d3_uart.dtsi
arch/arm/boot/dts/sama5d3xcm_cmp.dtsi [new file with mode: 0644]
arch/arm/boot/dts/sama5d3xmb_cmp.dtsi [new file with mode: 0644]
arch/arm/boot/dts/sama5d4.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 [new file with mode: 0644]
arch/arm/boot/dts/socfpga_arria5.dtsi
arch/arm/boot/dts/socfpga_arria5_socdk.dts
arch/arm/boot/dts/socfpga_cyclone5_socdk.dts
arch/arm/boot/dts/ste-dbx5x0.dtsi
arch/arm/boot/dts/ste-href.dtsi
arch/arm/boot/dts/ste-hrefprev60.dtsi
arch/arm/boot/dts/ste-hrefv60plus.dtsi
arch/arm/boot/dts/ste-snowball.dts
arch/arm/boot/dts/stih407-family.dtsi
arch/arm/boot/dts/stih410-b2120.dts
arch/arm/boot/dts/stih410.dtsi
arch/arm/boot/dts/stm32429i-eval.dts
arch/arm/boot/dts/stm32f429-disco.dts
arch/arm/boot/dts/stm32f429.dtsi
arch/arm/boot/dts/stm32f469-disco.dts
arch/arm/boot/dts/sun4i-a10-a1000.dts
arch/arm/boot/dts/sun4i-a10-ba10-tvbox.dts
arch/arm/boot/dts/sun4i-a10-chuwi-v7-cw0825.dts
arch/arm/boot/dts/sun4i-a10-cubieboard.dts
arch/arm/boot/dts/sun4i-a10-dserve-dsrv9703c.dts
arch/arm/boot/dts/sun4i-a10-gemei-g9.dts
arch/arm/boot/dts/sun4i-a10-hackberry.dts
arch/arm/boot/dts/sun4i-a10-hyundai-a7hd.dts
arch/arm/boot/dts/sun4i-a10-inet1.dts
arch/arm/boot/dts/sun4i-a10-inet97fv2.dts
arch/arm/boot/dts/sun4i-a10-inet9f-rev03.dts
arch/arm/boot/dts/sun4i-a10-jesurun-q5.dts
arch/arm/boot/dts/sun4i-a10-marsboard.dts
arch/arm/boot/dts/sun4i-a10-mini-xplus.dts
arch/arm/boot/dts/sun4i-a10-mk802.dts
arch/arm/boot/dts/sun4i-a10-olinuxino-lime.dts
arch/arm/boot/dts/sun4i-a10-pcduino.dts
arch/arm/boot/dts/sun4i-a10-pcduino2.dts
arch/arm/boot/dts/sun4i-a10-pov-protab2-ips9.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-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-primo81.dts
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-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.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.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-polaroid-mid2407pxe03.dts
arch/arm/boot/dts/sun8i-a23-polaroid-mid2809pxe04.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.dtsi
arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts
arch/arm/boot/dts/sun8i-h3-nanopi.dtsi
arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
arch/arm/boot/dts/sun8i-h3-orangepi-lite.dts
arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts
arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
arch/arm/boot/dts/sun8i-h3.dtsi
arch/arm/boot/dts/sun8i-q8-common.dtsi
arch/arm/boot/dts/sun8i-r16-parrot.dts
arch/arm/boot/dts/sun8i-reference-design-tablet.dtsi
arch/arm/boot/dts/sun9i-a80-cubieboard4.dts
arch/arm/boot/dts/sun9i-a80-optimus.dts
arch/arm/boot/dts/sun9i-a80.dtsi
arch/arm/boot/dts/sunxi-common-regulators.dtsi
arch/arm/boot/dts/tango4-common.dtsi
arch/arm/boot/dts/tango4-vantage-1172.dts
arch/arm/boot/dts/tegra124-apalis-eval.dts
arch/arm/boot/dts/tegra124-apalis.dtsi
arch/arm/boot/dts/tegra124-nyan-big.dts
arch/arm/boot/dts/tegra124-nyan-blaze.dts
arch/arm/boot/dts/tegra124-nyan.dtsi
arch/arm/boot/dts/tegra20-paz00.dts
arch/arm/boot/dts/tegra20-trimslice.dts
arch/arm/boot/dts/uniphier-pinctrl.dtsi
arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts
arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts
arch/arm/boot/dts/vf-colibri-eval-v3.dtsi
arch/arm/boot/dts/vf-colibri.dtsi
arch/arm/boot/dts/vf500-colibri-eval-v3.dts
arch/arm/boot/dts/vf500-colibri.dtsi
arch/arm/boot/dts/vf500.dtsi
arch/arm/boot/dts/vf610-colibri-eval-v3.dts
arch/arm/boot/dts/vf610-colibri.dtsi
arch/arm/boot/dts/vf610-twr.dts
arch/arm/boot/dts/vf610-zii-dev-rev-b.dts
arch/arm/boot/dts/vf610-zii-dev-rev-c.dts [new file with mode: 0644]
arch/arm/boot/dts/vf610-zii-dev.dtsi [new file with mode: 0644]
arch/arm/boot/dts/vf610.dtsi
arch/arm/boot/dts/vf610m4-colibri.dts
arch/arm/boot/dts/vf610m4-cosmic.dts
arch/arm/boot/dts/vf610m4.dtsi
arch/arm/boot/dts/vfxxx.dtsi
arch/arm/mach-davinci/clock.c
arch/arm/mach-davinci/clock.h
arch/arm/mach-davinci/da850.c
arch/arm/mach-davinci/usb-da8xx.c
arch/arm/mach-exynos/platsmp.c
arch/arm/mach-imx/mach-imx1.c
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/board-generic.c
arch/arm/mach-omap2/gpio.c [deleted file]
arch/arm/mach-omap2/omap_hwmod.c
arch/arm/mach-omap2/omap_hwmod_common_data.h
arch/arm/mach-omap2/prm_common.c
arch/arm/mach-omap2/timer.c
arch/arm/mach-s3c24xx/common.c
arch/arm64/boot/dts/amlogic/meson-gx.dtsi
arch/arm64/boot/dts/amlogic/meson-gxbb-nexbox-a95x.dts
arch/arm64/boot/dts/amlogic/meson-gxbb-p20x.dtsi
arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
arch/arm64/boot/dts/amlogic/meson-gxl-nexbox-a95x.dts
arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
arch/arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts
arch/arm64/boot/dts/amlogic/meson-gxm.dtsi
arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts
arch/arm64/boot/dts/qcom/msm8996.dtsi
arch/arm64/boot/dts/renesas/r8a7795-h3ulcb.dts
arch/arm64/configs/defconfig
arch/arm64/include/asm/asm-uaccess.h [new file with mode: 0644]
arch/arm64/include/asm/current.h
arch/arm64/include/asm/uaccess.h
arch/arm64/kernel/entry.S
arch/arm64/lib/clear_user.S
arch/arm64/lib/copy_from_user.S
arch/arm64/lib/copy_in_user.S
arch/arm64/lib/copy_to_user.S
arch/arm64/mm/cache.S
arch/arm64/mm/dma-mapping.c
arch/arm64/mm/fault.c
arch/arm64/mm/init.c
arch/arm64/xen/hypercall.S
arch/mips/kvm/entry.c
arch/mips/kvm/mips.c
arch/openrisc/kernel/vmlinux.lds.S
arch/parisc/include/asm/thread_info.h
arch/parisc/kernel/time.c
arch/parisc/mm/fault.c
arch/s390/include/asm/asm-prototypes.h [new file with mode: 0644]
arch/s390/kernel/vtime.c
arch/x86/include/asm/bitops.h
arch/x86/kernel/cpu/mcheck/mce_amd.c
arch/x86/kernel/pci-swiotlb.c
arch/x86/kvm/vmx.c
arch/x86/kvm/x86.c
arch/x86/xen/pci-swiotlb-xen.c
arch/x86/xen/setup.c
block/blk-wbt.c
crypto/testmgr.c
drivers/acpi/acpi_watchdog.c
drivers/acpi/glue.c
drivers/acpi/internal.h
drivers/acpi/scan.c
drivers/acpi/sysfs.c
drivers/base/power/domain.c
drivers/clk/clk-stm32f4.c
drivers/clk/renesas/clk-mstp.c
drivers/cpufreq/cpufreq-dt-platdev.c
drivers/cpufreq/intel_pstate.c
drivers/crypto/marvell/cesa.h
drivers/crypto/marvell/hash.c
drivers/crypto/marvell/tdma.c
drivers/devfreq/devfreq.c
drivers/devfreq/exynos-bus.c
drivers/firmware/arm_scpi.c
drivers/firmware/psci_checker.c
drivers/gpu/drm/i915/gvt/cfg_space.c
drivers/gpu/drm/i915/gvt/gtt.c
drivers/gpu/drm/i915/gvt/gtt.h
drivers/gpu/drm/i915/gvt/gvt.h
drivers/gpu/drm/i915/gvt/kvmgt.c
drivers/gpu/drm/i915/gvt/opregion.c
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_gem_request.h
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_dp.c
drivers/gpu/drm/i915/intel_overlay.c
drivers/hid/hid-asus.c
drivers/hid/hid-ids.h
drivers/hid/hid-sensor-hub.c
drivers/hid/hid-sony.c
drivers/hid/usbhid/hid-quirks.c
drivers/hwmon/lm90.c
drivers/iio/accel/st_accel_core.c
drivers/iio/adc/Kconfig
drivers/iio/common/st_sensors/st_sensors_buffer.c
drivers/iio/common/st_sensors/st_sensors_core.c
drivers/iio/counter/104-quad-8.c
drivers/iio/imu/bmi160/bmi160_core.c
drivers/iio/light/max44000.c
drivers/infiniband/hw/mlx4/main.c
drivers/iommu/amd_iommu.c
drivers/iommu/dmar.c
drivers/iommu/intel-iommu.c
drivers/misc/mei/bus.c
drivers/misc/mei/client.c
drivers/net/ethernet/broadcom/bcmsysport.c
drivers/net/ethernet/cadence/macb_pci.c
drivers/net/ethernet/cavium/Kconfig
drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c
drivers/net/ethernet/emulex/benet/be_main.c
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
drivers/net/ethernet/korina.c
drivers/net/ethernet/mellanox/mlx4/en_clock.c
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
drivers/net/ethernet/mellanox/mlx4/en_rx.c
drivers/net/ethernet/mellanox/mlx4/icm.c
drivers/net/ethernet/mellanox/mlx4/main.c
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
drivers/net/ethernet/mellanox/mlx5/core/main.c
drivers/net/ethernet/realtek/r8169.c
drivers/net/ethernet/renesas/sh_eth.c
drivers/net/ethernet/sfc/ef10.c
drivers/net/ethernet/sfc/ethtool.c
drivers/net/ethernet/sfc/net_driver.h
drivers/net/ethernet/sfc/siena.c
drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
drivers/net/ipvlan/ipvlan.h
drivers/net/ipvlan/ipvlan_core.c
drivers/net/ipvlan/ipvlan_main.c
drivers/net/usb/asix_devices.c
drivers/net/vrf.c
drivers/net/wan/slic_ds26522.c
drivers/nvme/host/core.c
drivers/nvme/host/fc.c
drivers/nvme/host/nvme.h
drivers/nvme/host/pci.c
drivers/nvme/host/scsi.c
drivers/nvme/target/admin-cmd.c
drivers/nvme/target/fcloop.c
drivers/nvmem/core.c
drivers/nvmem/imx-ocotp.c
drivers/nvmem/qfprom.c
drivers/pinctrl/meson/pinctrl-meson.c
drivers/pinctrl/pinctrl-amd.c
drivers/pinctrl/samsung/pinctrl-exynos.c
drivers/pinctrl/samsung/pinctrl-exynos.h
drivers/platform/x86/Kconfig
drivers/platform/x86/fujitsu-laptop.c
drivers/staging/octeon/ethernet.c
drivers/usb/core/config.c
drivers/usb/core/hub.c
drivers/usb/dwc2/gadget.c
drivers/usb/dwc2/params.c
drivers/usb/dwc3/core.h
drivers/usb/dwc3/dwc3-omap.c
drivers/usb/dwc3/dwc3-pci.c
drivers/usb/dwc3/ep0.c
drivers/usb/dwc3/gadget.c
drivers/usb/gadget/composite.c
drivers/usb/gadget/function/f_fs.c
drivers/usb/gadget/function/f_hid.c
drivers/usb/gadget/legacy/inode.c
drivers/usb/gadget/udc/core.c
drivers/usb/gadget/udc/dummy_hcd.c
drivers/usb/host/ohci-at91.c
drivers/usb/host/xhci-mem.c
drivers/usb/host/xhci-mtk.c
drivers/usb/host/xhci-pci.c
drivers/usb/host/xhci-ring.c
drivers/usb/host/xhci.c
drivers/usb/host/xhci.h
drivers/usb/musb/blackfin.c
drivers/usb/musb/musb_core.c
drivers/usb/musb/musb_core.h
drivers/usb/musb/musb_dsps.c
drivers/usb/musb/musb_host.c
drivers/usb/musb/musbhsdma.h
drivers/usb/serial/cyberjack.c
drivers/usb/serial/f81534.c
drivers/usb/serial/garmin_gps.c
drivers/usb/serial/io_edgeport.c
drivers/usb/serial/io_ti.c
drivers/usb/serial/iuu_phoenix.c
drivers/usb/serial/keyspan_pda.c
drivers/usb/serial/kobil_sct.c
drivers/usb/serial/mos7720.c
drivers/usb/serial/mos7840.c
drivers/usb/serial/omninet.c
drivers/usb/serial/oti6858.c
drivers/usb/serial/pl2303.c
drivers/usb/serial/quatech2.c
drivers/usb/serial/spcp8x5.c
drivers/usb/serial/ti_usb_3410_5052.c
drivers/usb/storage/unusual_devs.h
drivers/vfio/mdev/mdev_core.c
drivers/vfio/mdev/mdev_private.h
drivers/vfio/mdev/mdev_sysfs.c
drivers/vfio/mdev/vfio_mdev.c
drivers/vfio/pci/vfio_pci.c
drivers/vfio/pci/vfio_pci_rdwr.c
drivers/vfio/vfio_iommu_type1.c
drivers/video/fbdev/cobalt_lcdfb.c
drivers/xen/arm-device.c
drivers/xen/events/events_fifo.c
drivers/xen/evtchn.c
drivers/xen/swiotlb-xen.c
drivers/xen/xenbus/xenbus_comms.h
drivers/xen/xenbus/xenbus_dev_frontend.c
fs/block_dev.c
fs/buffer.c
fs/crypto/keyinfo.c
fs/crypto/policy.c
fs/dax.c
fs/ext2/inode.c
fs/ext4/file.c
fs/notify/mark.c
fs/xfs/libxfs/xfs_ag_resv.c
fs/xfs/libxfs/xfs_refcount_btree.c
fs/xfs/libxfs/xfs_refcount_btree.h
fs/xfs/libxfs/xfs_rmap_btree.c
fs/xfs/libxfs/xfs_rmap_btree.h
fs/xfs/xfs_fsops.c
fs/xfs/xfs_icache.c
fs/xfs/xfs_refcount_item.c
fs/xfs/xfs_sysfs.c
include/asm-generic/asm-prototypes.h
include/dt-bindings/clock/r7s72100-clock.h
include/dt-bindings/clock/stm32fx-clock.h [new file with mode: 0644]
include/dt-bindings/mfd/stm32f4-rcc.h
include/dt-bindings/mfd/tps65217.h [deleted file]
include/linux/dax.h
include/linux/filter.h
include/linux/fsnotify_backend.h
include/linux/genhd.h
include/linux/iio/common/st_sensors.h
include/linux/mdev.h
include/linux/mlx4/device.h
include/linux/mlx5/device.h
include/linux/mlx5/driver.h
include/linux/mlx5/mlx5_ifc.h
include/linux/page-flags.h
include/linux/radix-tree.h
include/linux/swiotlb.h
include/net/netns/ipv4.h
include/net/tcp.h
include/trace/events/swiotlb.h
include/uapi/linux/usb/functionfs.h
kernel/audit_tree.c
kernel/cpu.c
lib/radix-tree.c
lib/swiotlb.c
mm/filemap.c
mm/memory.c
mm/truncate.c
mm/workingset.c
net/atm/lec.c
net/core/drop_monitor.c
net/core/filter.c
net/core/flow_dissector.c
net/core/rtnetlink.c
net/ipv4/fib_frontend.c
net/ipv4/igmp.c
net/ipv4/ip_sockglue.c
net/ipv4/route.c
net/ipv4/sysctl_net_ipv4.c
net/ipv4/tcp_ipv4.c
net/ipv6/ip6_output.c
net/l2tp/l2tp_ip.c
net/l2tp/l2tp_ip6.c
net/mac80211/tx.c
net/openvswitch/datapath.c
net/openvswitch/flow.c
net/sched/cls_api.c
net/sched/cls_flower.c
net/socket.c
net/tipc/socket.c
samples/Kconfig
samples/Makefile
samples/vfio-mdev/Makefile
samples/vfio-mdev/mtty.c
scripts/gcc-plugins/gcc-common.h
scripts/gcc-plugins/latent_entropy_plugin.c
sound/firewire/fireworks/fireworks_stream.c
sound/firewire/tascam/tascam-stream.c
sound/pci/hda/patch_realtek.c
sound/usb/endpoint.c
sound/usb/endpoint.h
sound/usb/pcm.c
usr/Makefile

index c75e5d6b8fa8d48b787eed2a0f926bc36fe0a930..a6eb7dcd4dd5c010fe76ac285769d9e0c5157adc 100644 (file)
@@ -12,7 +12,7 @@ DOCBOOKS := z8530book.xml  \
            kernel-api.xml filesystems.xml lsm.xml kgdb.xml \
            gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
            genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \
-           80211.xml sh.xml regulator.xml w1.xml \
+           sh.xml regulator.xml w1.xml \
            writing_musb_glue_layer.xml iio.xml
 
 ifeq ($(DOCBOOKS),)
index 21e2d88637050b7a33f141e558fff43d3f23d0c9..be7c0d9506b12072219f0396ceb9072eeea03df8 100644 (file)
                        use by PCI
                        Format: <irq>,<irq>...
 
+       acpi_mask_gpe=  [HW,ACPI]
+                       Due to the existence of _Lxx/_Exx, some GPEs triggered
+                       by unsupported hardware/firmware features can result in
+                        GPE floodings that cannot be automatically disabled by
+                        the GPE dispatcher.
+                       This facility can be used to prevent such uncontrolled
+                       GPE floodings.
+                       Format: <int>
+                       Support masking of GPEs numbered from 0x00 to 0x7f.
+
        acpi_no_auto_serialize  [HW,ACPI]
                        Disable auto-serialization of AML methods
                        AML control methods that contain the opcodes to create
                        it if 0 is given (See Documentation/cgroup-v1/memory.txt)
 
        swiotlb=        [ARM,IA-64,PPC,MIPS,X86]
-                       Format: { <int> | force }
+                       Format: { <int> | force | noforce }
                        <int> -- Number of I/O TLB slabs
                        force -- force using of bounce buffers even if they
                                 wouldn't be automatically used by the kernel
+                       noforce -- Never use bounce buffers (for debugging)
 
        switches=       [HW,M68k]
 
index 51642159aedbbc405d1bb90fa89402c2143f8310..c0a3bb5a6e4eb291d077f10633001c439563ccc2 100644 (file)
@@ -54,9 +54,9 @@ This is the hardware sector size of the device, in bytes.
 
 io_poll (RW)
 ------------
-When read, this file shows the total number of block IO polls and how
-many returned success.  Writing '0' to this file will disable polling
-for this device.  Writing any non-zero value will enable this feature.
+When read, this file shows whether polling is enabled (1) or disabled
+(0).  Writing '0' to this file will disable polling for this device.
+Writing any non-zero value will enable this feature.
 
 io_poll_delay (RW)
 ------------------
diff --git a/Documentation/devicetree/bindings/arm/axentia.txt b/Documentation/devicetree/bindings/arm/axentia.txt
new file mode 100644 (file)
index 0000000..ea3fb96
--- /dev/null
@@ -0,0 +1,19 @@
+Device tree bindings for Axentia ARM devices
+============================================
+
+Linea CPU module
+----------------
+
+Required root node properties:
+compatible = "axentia,linea",
+            "atmel,sama5d31", "atmel,sama5d3", "atmel,sama5";
+and following the rules from atmel-at91.txt for a sama5d31 SoC.
+
+
+TSE-850 v3 board
+----------------
+
+Required root node properties:
+compatible = "axentia,tse850v3", "axentia,linea",
+            "atmel,sama5d31", "atmel,sama5d3", "atmel,sama5";
+and following the rules from above for the axentia,linea CPU module.
index f0841ce725b5d2979c9f236f37d657e0c5aba1c2..715622c36260396a54d4934addf4c8645a29e2ef 100644 (file)
@@ -13,6 +13,10 @@ EnBW AM1808 based CMC board
 Required root node properties:
     - compatible = "enbw,cmc", "ti,da850;
 
+LEGO MINDSTORMS EV3 (AM1808 based)
+Required root node properties:
+    - compatible = "lego,ev3", "ti,da850";
+
 Generic DaVinci Boards
 ----------------------
 
diff --git a/Documentation/devicetree/bindings/arm/marvell/98dx3236.txt b/Documentation/devicetree/bindings/arm/marvell/98dx3236.txt
new file mode 100644 (file)
index 0000000..64e8c73
--- /dev/null
@@ -0,0 +1,23 @@
+Marvell 98DX3236, 98DX3336 and 98DX4251 Platforms Device Tree Bindings
+----------------------------------------------------------------------
+
+Boards with a SoC of the Marvell 98DX3236, 98DX3336 and 98DX4251 families
+shall have the following property:
+
+Required root node property:
+
+compatible: must contain "marvell,armadaxp-98dx3236"
+
+In addition, boards using the Marvell 98DX3336 SoC shall have the
+following property:
+
+Required root node property:
+
+compatible: must contain "marvell,armadaxp-98dx3336"
+
+In addition, boards using the Marvell 98DX4251 SoC shall have the
+following property:
+
+Required root node property:
+
+compatible: must contain "marvell,armadaxp-98dx4251"
index 0532d815dae322045de67032428ac411c6b82f9d..8f19d87cbf2451e4668f918832c94922363c07d6 100644 (file)
@@ -17,6 +17,9 @@ Required properties:
   property, containing a phandle to the clock device node, an index selecting
   between gated clocks and other clocks and an index specifying the clock to
   use.
+- clocks: External oscillator clock phandle
+  - high speed external clock signal (HSE)
+  - external I2S clock (I2S_CKIN)
 
 Example:
 
@@ -25,6 +28,7 @@ Example:
                #clock-cells = <2>
                compatible = "st,stm32f42xx-rcc", "st,stm32-rcc";
                reg = <0x40023800 0x400>;
+               clocks = <&clk_hse>, <&clk_i2s_ckin>;
        };
 
 Specifying gated clocks
@@ -66,6 +70,19 @@ The secondary index is bound with the following magic numbers:
 
        0       SYSTICK
        1       FCLK
+       2       CLK_LSI         (low-power clock source)
+       3       CLK_LSE         (generated from a 32.768 kHz low-speed external
+                                crystal or ceramic resonator)
+       4       CLK_HSE_RTC     (HSE division factor for RTC clock)
+       5       CLK_RTC         (real-time clock)
+       6       PLL_VCO_I2S     (vco frequency of I2S pll)
+       7       PLL_VCO_SAI     (vco frequency of SAI pll)
+       8       CLK_LCD         (LCD-TFT)
+       9       CLK_I2S         (I2S clocks)
+       10      CLK_SAI1        (audio clocks)
+       11      CLK_SAI2
+       12      CLK_I2SQ_PDIV   (post divisor of pll i2s q divisor)
+       13      CLK_SAIQ_PDIV   (post divisor of pll sai q divisor)
 
 Example:
 
index 735bc94444bbd7eaf921ea12c12ea4dcad6d63c3..5696eb508e9568da3c99217756e1c3cd9c7da5fc 100644 (file)
@@ -10,6 +10,8 @@ Required properties:
 
        "catalyst,24c32"
 
+       "microchip,24c128"
+
        "ramtron,24c64"
 
        "renesas,r1ex24002"
index 3e5b9793341f4e10679f792c8e19e9fbb55027e1..8682ab6d4a50f86d0d352f6b5b4e8a337c5511c4 100644 (file)
@@ -8,8 +8,9 @@ This driver provides a simple power button event via an Interrupt.
 Required properties:
 - compatible: should be "ti,tps65217-pwrbutton" or "ti,tps65218-pwrbutton"
 
-Required properties for TPS65218:
+Required properties:
 - interrupts: should be one of the following
+   - <2>: For controllers compatible with tps65217
    - <3 IRQ_TYPE_EDGE_BOTH>: For controllers compatible with tps65218
 
 Examples:
@@ -17,6 +18,7 @@ Examples:
 &tps {
        tps65217-pwrbutton {
                compatible = "ti,tps65217-pwrbutton";
+               interrupts = <2>;
        };
 };
 
index 5393e2a45a4241047cb237c39957d65f7ee0848f..560d8a727b8f84e951b227d8fcc838579ddc94b1 100644 (file)
@@ -111,7 +111,7 @@ Example:
                #interrupt-cells = <3>;
                interrupt-controller;
                reg = <0x2c001000 0x1000>,
-                     <0x2c002000 0x1000>,
+                     <0x2c002000 0x2000>,
                      <0x2c004000 0x2000>,
                      <0x2c006000 0x2000>;
                interrupts = <1 9 0xf04>;
diff --git a/Documentation/devicetree/bindings/net/marvell,prestera.txt b/Documentation/devicetree/bindings/net/marvell,prestera.txt
new file mode 100644 (file)
index 0000000..5fbab29
--- /dev/null
@@ -0,0 +1,50 @@
+Marvell Prestera Switch Chip bindings
+-------------------------------------
+
+Required properties:
+- compatible: one of the following
+       "marvell,prestera-98dx3236",
+       "marvell,prestera-98dx3336",
+       "marvell,prestera-98dx4251",
+- reg: address and length of the register set for the device.
+- interrupts: interrupt for the device
+
+Optional properties:
+- dfx: phandle reference to the "DFX Server" node
+
+Example:
+
+switch {
+       compatible = "simple-bus";
+       #address-cells = <1>;
+       #size-cells = <1>;
+       ranges = <0 MBUS_ID(0x03, 0x00) 0 0x100000>;
+
+       packet-processor@0 {
+               compatible = "marvell,prestera-98dx3236";
+               reg = <0 0x4000000>;
+               interrupts = <33>, <34>, <35>;
+               dfx = <&dfx>;
+       };
+};
+
+DFX Server bindings
+-------------------
+
+Required properties:
+- compatible: must be "marvell,dfx-server"
+- reg: address and length of the register set for the device.
+
+Example:
+
+dfx-registers {
+       compatible = "simple-bus";
+       #address-cells = <1>;
+       #size-cells = <1>;
+       ranges = <0 MBUS_ID(0x08, 0x00) 0 0x100000>;
+
+       dfx: dfx@0 {
+               compatible = "marvell,dfx-server";
+               reg = <0 0x100000>;
+       };
+};
index 98d131acee95dbff1631e63a5c01db39c2b3def1..a11072c5a8660d362958995a6fd27123c296b2fa 100644 (file)
@@ -2,11 +2,16 @@ TPS65217 Charger
 
 Required Properties:
 -compatible: "ti,tps65217-charger"
+-interrupts: TPS65217 interrupt numbers for the AC and USB charger input change.
+             Should be <0> for the USB charger and <1> for the AC adapter.
+-interrupt-names: Should be "USB" and "AC"
 
 This node is a subnode of the tps65217 PMIC.
 
 Example:
 
        tps65217-charger {
-               compatible = "ti,tps65090-charger";
+               compatible = "ti,tps65217-charger";
+               interrupts = <0>, <1>;
+               interrupt-names = "USB", "AC";
        };
index 16d3b5e7f5d1f52d1bf3c5f98220ba4f09b99b8f..8800b43d707b0291c119912c74818185b7f0ef07 100644 (file)
@@ -159,11 +159,13 @@ kosagi    Sutajio Ko-Usagi PTE Ltd.
 kyo    Kyocera Corporation
 lacie  LaCie
 lantiq Lantiq Semiconductor
+lego   LEGO Systems A/S
 lenovo Lenovo Group Ltd.
 lg     LG Corporation
 linux  Linux-specific binding
 lltc   Linear Technology Corporation
 lsi    LSI Corp. (LSI Logic)
+lwn    Liebherr-Werk Nenzing GmbH
 macnica        Macnica Americas
 marvell        Marvell Technology Group Ltd.
 maxim  Maxim Integrated Products
@@ -227,6 +229,7 @@ pine64      Pine64
 pixcir  PIXCIR MICROELECTRONICS Co., Ltd
 plathome       Plat'Home Co., Ltd.
 plda   PLDA
+poslab Poslab Technology Co., Ltd.
 powervr        PowerVR (deprecated, use img)
 pulsedlight    PulsedLight, Inc
 qca    Qualcomm Atheros, Inc.
index 0bb0b5fc951236f28c79d85a17f32e19710155da..6d9ff316b608db48b46de6413d9503e23b51536a 100644 (file)
@@ -55,21 +55,6 @@ Device Drivers DMA Management
 .. kernel-doc:: drivers/base/dma-mapping.c
    :export:
 
-Device Drivers Power Management
--------------------------------
-
-.. kernel-doc:: drivers/base/power/main.c
-   :export:
-
-Device Drivers ACPI Support
----------------------------
-
-.. kernel-doc:: drivers/acpi/scan.c
-   :export:
-
-.. kernel-doc:: drivers/acpi/scan.c
-   :internal:
-
 Device drivers PnP support
 --------------------------
 
index 9ed15f86c17c86ffa69fa3527e932b62f4b9ee20..15d8d16934fd13727bb35e9c5078484127bbfa30 100644 (file)
@@ -5,8 +5,8 @@ platform_labels - INTEGER
        possible to configure forwarding for label values equal to or
        greater than the number of platform labels.
 
-       A dense utliziation of the entries in the platform label table
-       is possible and expected aas the platform labels are locally
+       A dense utilization of the entries in the platform label table
+       is possible and expected as the platform labels are locally
        allocated.
 
        If the number of platform label table entries is set to 0 no
index a445da098bc6e5aa733cd55ca2ee8b4a5f04dc2c..3f76c0c379206a72519e864fb5486abf1a75ac0f 100644 (file)
@@ -151,7 +151,7 @@ bool ether_addr_equal(const u8 *addr1, const u8 *addr2)
 #else
        const u16 *a = (const u16 *)addr1;
        const u16 *b = (const u16 *)addr2;
-       return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0;
+       return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0;
 #endif
 }
 
index b38afec35edc2b1ea3f49cce804b0d67667b0c97..d226c7a5ba8bee46aeded6bfd181b840259fd4bb 100644 (file)
@@ -127,22 +127,22 @@ the VFIO when devices are unbound from the driver.
 Physical Device Driver Interface
 --------------------------------
 
-The physical device driver interface provides the parent_ops[3] structure to
-define the APIs to manage work in the mediated core driver that is related to
-the physical device.
+The physical device driver interface provides the mdev_parent_ops[3] structure
+to define the APIs to manage work in the mediated core driver that is related
+to the physical device.
 
-The structures in the parent_ops structure are as follows:
+The structures in the mdev_parent_ops structure are as follows:
 
 * dev_attr_groups: attributes of the parent device
 * mdev_attr_groups: attributes of the mediated device
 * supported_config: attributes to define supported configurations
 
-The functions in the parent_ops structure are as follows:
+The functions in the mdev_parent_ops structure are as follows:
 
 * create: allocate basic resources in a driver for a mediated device
 * remove: free resources in a driver when a mediated device is destroyed
 
-The callbacks in the parent_ops structure are as follows:
+The callbacks in the mdev_parent_ops structure are as follows:
 
 * open: open callback of mediated device
 * close: close callback of mediated device
@@ -151,14 +151,14 @@ The callbacks in the parent_ops structure are as follows:
 * write: write emulation callback
 * mmap: mmap emulation callback
 
-A driver should use the parent_ops structure in the function call to register
-itself with the mdev core driver:
+A driver should use the mdev_parent_ops structure in the function call to
+register itself with the mdev core driver:
 
 extern int  mdev_register_device(struct device *dev,
-                                 const struct parent_ops *ops);
+                                 const struct mdev_parent_ops *ops);
 
-However, the parent_ops structure is not required in the function call that a
-driver should use to unregister itself with the mdev core driver:
+However, the mdev_parent_ops structure is not required in the function call
+that a driver should use to unregister itself with the mdev core driver:
 
 extern void mdev_unregister_device(struct device *dev);
 
@@ -223,6 +223,9 @@ Directories and files under the sysfs for Each Physical Device
 
        sprintf(buf, "%s-%s", dev_driver_string(parent->dev), group->name);
 
+  (or using mdev_parent_dev(mdev) to arrive at the parent device outside
+   of the core mdev code)
+
 * device_api
 
   This attribute should show which device API is being created, for example,
@@ -394,5 +397,5 @@ References
 
 [1] See Documentation/vfio.txt for more information on VFIO.
 [2] struct mdev_driver in include/linux/mdev.h
-[3] struct parent_ops in include/linux/mdev.h
+[3] struct mdev_parent_ops in include/linux/mdev.h
 [4] struct vfio_iommu_driver_ops in include/linux/vfio.h
index cfff2c9e3d9470550fd47dcd7b2638c77121c607..920a804f58de0a2b29c6127c610ea5610ac5e3c6 100644 (file)
@@ -2353,6 +2353,14 @@ S:       Maintained
 F:     Documentation/devicetree/bindings/sound/axentia,*
 F:     sound/soc/atmel/tse850-pcm5142.c
 
+AXENTIA ARM DEVICES
+M:     Peter Rosin <peda@axentia.se>
+L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+S:     Maintained
+F:     Documentation/devicetree/bindings/arm/axentia.txt
+F:     arch/arm/boot/dts/at91-linea.dtsi
+F:     arch/arm/boot/dts/at91-tse850-3.dts
+
 AZ6007 DVB DRIVER
 M:     Mauro Carvalho Chehab <mchehab@s-opensource.com>
 M:     Mauro Carvalho Chehab <mchehab@kernel.org>
@@ -3800,6 +3808,7 @@ F:        include/linux/devcoredump.h
 DEVICE FREQUENCY (DEVFREQ)
 M:     MyungJoo Ham <myungjoo.ham@samsung.com>
 M:     Kyungmin Park <kyungmin.park@samsung.com>
+R:     Chanwoo Choi <cw00.choi@samsung.com>
 L:     linux-pm@vger.kernel.org
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/mzx/devfreq.git
 S:     Maintained
@@ -5080,9 +5089,11 @@ F:       drivers/net/wan/dlci.c
 F:     drivers/net/wan/sdla.c
 
 FRAMEBUFFER LAYER
+M:     Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
 L:     linux-fbdev@vger.kernel.org
+T:     git git://github.com/bzolnier/linux.git
 Q:     http://patchwork.kernel.org/project/linux-fbdev/list/
-S:     Orphan
+S:     Maintained
 F:     Documentation/fb/
 F:     drivers/video/
 F:     include/video/
@@ -5504,6 +5515,7 @@ M:        Alex Elder <elder@kernel.org>
 M:     Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 S:     Maintained
 F:     drivers/staging/greybus/
+L:     greybus-dev@lists.linaro.org
 
 GREYBUS AUDIO PROTOCOLS DRIVERS
 M:     Vaibhav Agarwal <vaibhav.sr@gmail.com>
@@ -5961,6 +5973,7 @@ F:        drivers/media/platform/sti/hva
 Hyper-V CORE AND DRIVERS
 M:     "K. Y. Srinivasan" <kys@microsoft.com>
 M:     Haiyang Zhang <haiyangz@microsoft.com>
+M:     Stephen Hemminger <sthemmin@microsoft.com>
 L:     devel@linuxdriverproject.org
 S:     Maintained
 F:     arch/x86/include/asm/mshyperv.h
@@ -8852,17 +8865,22 @@ F:      drivers/video/fbdev/nvidia/
 NVM EXPRESS DRIVER
 M:     Keith Busch <keith.busch@intel.com>
 M:     Jens Axboe <axboe@fb.com>
+M:     Christoph Hellwig <hch@lst.de>
+M:     Sagi Grimberg <sagi@grimberg.me>
 L:     linux-nvme@lists.infradead.org
-T:     git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
-W:     https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux-block/
+T:     git://git.infradead.org/nvme.git
+W:     http://git.infradead.org/nvme.git
 S:     Supported
 F:     drivers/nvme/host/
 F:     include/linux/nvme.h
+F:     include/uapi/linux/nvme_ioctl.h
 
 NVM EXPRESS TARGET DRIVER
 M:     Christoph Hellwig <hch@lst.de>
 M:     Sagi Grimberg <sagi@grimberg.me>
 L:     linux-nvme@lists.infradead.org
+T:     git://git.infradead.org/nvme.git
+W:     http://git.infradead.org/nvme.git
 S:     Supported
 F:     drivers/nvme/target/
 
@@ -9842,7 +9860,7 @@ M:        Mark Rutland <mark.rutland@arm.com>
 M:     Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
 L:     linux-arm-kernel@lists.infradead.org
 S:     Maintained
-F:     drivers/firmware/psci.c
+F:     drivers/firmware/psci*.c
 F:     include/linux/psci.h
 F:     include/uapi/linux/psci.h
 
@@ -13527,11 +13545,11 @@ F:    arch/x86/xen/*swiotlb*
 F:     drivers/xen/*swiotlb*
 
 XFS FILESYSTEM
-M:     Dave Chinner <david@fromorbit.com>
+M:     Darrick J. Wong <darrick.wong@oracle.com>
 M:     linux-xfs@vger.kernel.org
 L:     linux-xfs@vger.kernel.org
 W:     http://xfs.org/
-T:     git git://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs.git
+T:     git git://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git
 S:     Supported
 F:     Documentation/filesystems/xfs.txt
 F:     fs/xfs/
index ec411ba9e40f98376bb594de459e98413f0dfae9..5f1a84735ff61a18fddd4bbad964f8ac89ecc8e4 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 4
 PATCHLEVEL = 10
 SUBLEVEL = 0
-EXTRAVERSION = -rc1
+EXTRAVERSION = -rc3
 NAME = Roaring Lionus
 
 # *DOCUMENTATION*
index 5fab553fd03ade24fdc1a69a83e5092b791b8a01..186c4c214e0a756b4468b597d5680093408c28c3 100644 (file)
@@ -1502,8 +1502,7 @@ source kernel/Kconfig.preempt
 
 config HZ_FIXED
        int
-       default 200 if ARCH_EBSA110 || ARCH_S3C24XX || \
-               ARCH_S5PV210 || ARCH_EXYNOS4
+       default 200 if ARCH_EBSA110
        default 128 if SOC_AT91RM9200
        default 0
 
index cccdbcb557b6d29b2e45a0c0b9fb792a469cf1fe..d064854d6378381965a544713cc913f8c307c1a3 100644 (file)
@@ -48,11 +48,13 @@ dtb-$(CONFIG_SOC_SAM_V7) += \
        at91-kizbox2.dtb \
        at91-sama5d2_xplained.dtb \
        at91-sama5d3_xplained.dtb \
+       at91-tse850-3.dtb \
        sama5d31ek.dtb \
        sama5d33ek.dtb \
        sama5d34ek.dtb \
        sama5d35ek.dtb \
        sama5d36ek.dtb \
+       sama5d36ek_cmp.dtb \
        at91-sama5d4_ma5d4evk.dtb \
        at91-sama5d4_xplained.dtb \
        at91-sama5d4ek.dtb \
@@ -83,6 +85,8 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \
        bcm47081-asus-rt-n18u.dtb \
        bcm47081-buffalo-wzr-600dhp2.dtb \
        bcm47081-buffalo-wzr-900dhp.dtb \
+       bcm47081-luxul-xap-1410.dtb \
+       bcm47081-luxul-xwr-1200.dtb \
        bcm4709-asus-rt-ac87u.dtb \
        bcm4709-buffalo-wxr-1900dhp.dtb \
        bcm4709-netgear-r7000.dtb \
@@ -128,7 +132,8 @@ dtb-$(CONFIG_ARCH_CLPS711X) += \
 dtb-$(CONFIG_ARCH_DAVINCI) += \
        da850-lcdk.dtb \
        da850-enbw-cmc.dtb \
-       da850-evm.dtb
+       da850-evm.dtb \
+       da850-lego-ev3.dtb
 dtb-$(CONFIG_ARCH_DIGICOLOR) += \
        cx92755_equinox.dtb
 dtb-$(CONFIG_ARCH_EFM32) += \
@@ -349,6 +354,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
        imx6dl-gw553x.dtb \
        imx6dl-hummingboard.dtb \
        imx6dl-icore.dtb \
+       imx6dl-icore-rqs.dtb \
        imx6dl-nit6xlite.dtb \
        imx6dl-nitrogen6x.dtb \
        imx6dl-phytec-pbab01.dtb \
@@ -357,6 +363,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
        imx6dl-sabreauto.dtb \
        imx6dl-sabrelite.dtb \
        imx6dl-sabresd.dtb \
+       imx6dl-savageboard.dtb \
        imx6dl-ts4900.dtb \
        imx6dl-tx6dl-comtft.dtb \
        imx6dl-tx6s-8034.dtb \
@@ -393,6 +400,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
        imx6q-icore.dtb \
        imx6q-icore-rqs.dtb \
        imx6q-marsboard.dtb \
+       imx6q-mccmon6.dtb \
        imx6q-nitrogen6x.dtb \
        imx6q-nitrogen6_max.dtb \
        imx6q-nitrogen6_som2.dtb \
@@ -402,6 +410,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
        imx6q-sabreauto.dtb \
        imx6q-sabrelite.dtb \
        imx6q-sabresd.dtb \
+       imx6q-savageboard.dtb \
        imx6q-sbc6x.dtb \
        imx6q-tbs2910.dtb \
        imx6q-ts4900.dtb \
@@ -434,7 +443,10 @@ dtb-$(CONFIG_SOC_IMX6SX) += \
 dtb-$(CONFIG_SOC_IMX6UL) += \
        imx6ul-14x14-evk.dtb \
        imx6ul-geam-kit.dtb \
+       imx6ul-isiot-emmc.dtb \
+       imx6ul-isiot-nand.dtb \
        imx6ul-liteboard.dtb \
+       imx6ul-opos6uldev.dtb \
        imx6ul-pico-hobbit.dtb \
        imx6ul-tx6ul-0010.dtb \
        imx6ul-tx6ul-0011.dtb \
@@ -458,7 +470,8 @@ dtb-$(CONFIG_SOC_VF610) += \
        vf610-cosmic.dtb \
        vf610m4-cosmic.dtb \
        vf610-twr.dtb \
-       vf610-zii-dev-rev-b.dtb
+       vf610-zii-dev-rev-b.dtb \
+       vf610-zii-dev-rev-c.dtb
 dtb-$(CONFIG_ARCH_MXS) += \
        imx23-evk.dtb \
        imx23-olinuxino.dtb \
@@ -501,6 +514,7 @@ dtb-$(CONFIG_ARCH_OMAP3) += \
        am3517-evm.dtb \
        am3517_mt_ventoux.dtb \
        logicpd-torpedo-37xx-devkit.dtb \
+       logicpd-som-lv-37xx-devkit.dtb \
        omap3430-sdp.dtb \
        omap3-beagle.dtb \
        omap3-beagle-xm.dtb \
@@ -563,7 +577,9 @@ dtb-$(CONFIG_SOC_AM33XX) += \
        am335x-base0033.dtb \
        am335x-bone.dtb \
        am335x-boneblack.dtb \
+       am335x-boneblack-wireless.dtb \
        am335x-bonegreen.dtb \
+       am335x-bonegreen-wireless.dtb \
        am335x-chiliboard.dtb \
        am335x-cm-t335.dtb \
        am335x-evm.dtb \
@@ -717,6 +733,7 @@ dtb-$(CONFIG_ARCH_SHMOBILE_MULTI) += \
        sh73a0-kzm9g.dtb
 dtb-$(CONFIG_ARCH_SOCFPGA) += \
        socfpga_arria5_socdk.dtb \
+       socfpga_arria10_socdk_nand.dtb \
        socfpga_arria10_socdk_qspi.dtb \
        socfpga_arria10_socdk_sdmmc.dtb \
        socfpga_cyclone5_mcvevk.dtb \
@@ -949,6 +966,8 @@ dtb-$(CONFIG_MACH_ARMADA_38X) += \
        armada-385-linksys-cobra.dtb \
        armada-385-turris-omnia.dtb \
        armada-388-clearfog.dtb \
+       armada-388-clearfog-base.dtb \
+       armada-388-clearfog-pro.dtb \
        armada-388-db.dtb \
        armada-388-gp.dtb \
        armada-388-rd.dtb
@@ -957,6 +976,8 @@ dtb-$(CONFIG_MACH_ARMADA_39X) += \
 dtb-$(CONFIG_MACH_ARMADA_XP) += \
        armada-xp-axpwifiap.dtb \
        armada-xp-db.dtb \
+       armada-xp-db-dxbc2.dtb \
+       armada-xp-db-xc3-24g4xg.dtb \
        armada-xp-gp.dtb \
        armada-xp-lenovo-ix4-300d.dtb \
        armada-xp-linksys-mamba.dtb \
@@ -981,6 +1002,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \
        mt8135-evbp1.dtb
 dtb-$(CONFIG_ARCH_ZX) += zx296702-ad1.dtb
 dtb-$(CONFIG_ARCH_ASPEED) += aspeed-bmc-opp-palmetto.dtb \
+       aspeed-bmc-opp-romulus.dtb \
        aspeed-ast2500-evb.dtb
 endif
 
index db8752fc480e7df1e34ddb96576e28e033d789d3..d0eefc3b886c2a55ff2664b917499cefc2653aaf 100644 (file)
@@ -93,7 +93,7 @@ gic: gic@fb001000 {
                        interrupt-controller;
                        reg = <0x0 0xfb001000 0x0 0x1000>,
                              <0x0 0xfb002000 0x0 0x2000>,
-                             <0x0 0xfb004000 0x0 0x1000>,
+                             <0x0 0xfb004000 0x0 0x2000>,
                              <0x0 0xfb006000 0x0 0x2000>;
                        interrupts =
                                <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
index dc561d505bbe2ce10054c7bc19452b0b4b76fc4f..bf6b26abe35b5d4587c2dc880477f9881a76a716 100644 (file)
@@ -6,8 +6,6 @@
  * published by the Free Software Foundation.
  */
 
-#include <dt-bindings/mfd/tps65217.h>
-
 / {
        cpus {
                cpu@0 {
@@ -209,6 +207,8 @@ &usb1_phy {
 &usb0 {
        status = "okay";
        dr_mode = "peripheral";
+       interrupts-extended = <&intc 18 &tps 0>;
+       interrupt-names = "mc", "vbus";
 };
 
 &usb1 {
@@ -319,13 +319,13 @@ &tps {
        ti,pmic-shutdown-controller;
 
        charger {
-               interrupts = <TPS65217_IRQ_AC>, <TPS65217_IRQ_USB>;
-               interrupts-names = "AC", "USB";
+               interrupts = <0>, <1>;
+               interrupt-names = "USB", "AC";
                status = "okay";
        };
 
        pwrbutton {
-               interrupts = <TPS65217_IRQ_PB>;
+               interrupts = <2>;
                status = "okay";
        };
 
diff --git a/arch/arm/boot/dts/am335x-boneblack-common.dtsi b/arch/arm/boot/dts/am335x-boneblack-common.dtsi
new file mode 100644 (file)
index 0000000..325daae
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <dt-bindings/display/tda998x.h>
+
+&ldo3_reg {
+       regulator-min-microvolt = <1800000>;
+       regulator-max-microvolt = <1800000>;
+       regulator-always-on;
+};
+
+&mmc1 {
+       vmmc-supply = <&vmmcsd_fixed>;
+};
+
+&mmc2 {
+       vmmc-supply = <&vmmcsd_fixed>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&emmc_pins>;
+       bus-width = <8>;
+       status = "okay";
+};
+
+&am33xx_pinmux {
+       nxp_hdmi_bonelt_pins: nxp_hdmi_bonelt_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x9b0, PIN_OUTPUT_PULLDOWN | MUX_MODE3)    /* xdma_event_intr0 */
+                       AM33XX_IOPAD(0x8a0, PIN_OUTPUT | MUX_MODE0)             /* lcd_data0.lcd_data0 */
+                       AM33XX_IOPAD(0x8a4, PIN_OUTPUT | MUX_MODE0)             /* lcd_data1.lcd_data1 */
+                       AM33XX_IOPAD(0x8a8, PIN_OUTPUT | MUX_MODE0)             /* lcd_data2.lcd_data2 */
+                       AM33XX_IOPAD(0x8ac, PIN_OUTPUT | MUX_MODE0)             /* lcd_data3.lcd_data3 */
+                       AM33XX_IOPAD(0x8b0, PIN_OUTPUT | MUX_MODE0)             /* lcd_data4.lcd_data4 */
+                       AM33XX_IOPAD(0x8b4, PIN_OUTPUT | MUX_MODE0)             /* lcd_data5.lcd_data5 */
+                       AM33XX_IOPAD(0x8b8, PIN_OUTPUT | MUX_MODE0)             /* lcd_data6.lcd_data6 */
+                       AM33XX_IOPAD(0x8bc, PIN_OUTPUT | MUX_MODE0)             /* lcd_data7.lcd_data7 */
+                       AM33XX_IOPAD(0x8c0, PIN_OUTPUT | MUX_MODE0)             /* lcd_data8.lcd_data8 */
+                       AM33XX_IOPAD(0x8c4, PIN_OUTPUT | MUX_MODE0)             /* lcd_data9.lcd_data9 */
+                       AM33XX_IOPAD(0x8c8, PIN_OUTPUT | MUX_MODE0)             /* lcd_data10.lcd_data10 */
+                       AM33XX_IOPAD(0x8cc, PIN_OUTPUT | MUX_MODE0)             /* lcd_data11.lcd_data11 */
+                       AM33XX_IOPAD(0x8d0, PIN_OUTPUT | MUX_MODE0)             /* lcd_data12.lcd_data12 */
+                       AM33XX_IOPAD(0x8d4, PIN_OUTPUT | MUX_MODE0)             /* lcd_data13.lcd_data13 */
+                       AM33XX_IOPAD(0x8d8, PIN_OUTPUT | MUX_MODE0)             /* lcd_data14.lcd_data14 */
+                       AM33XX_IOPAD(0x8dc, PIN_OUTPUT | MUX_MODE0)             /* lcd_data15.lcd_data15 */
+                       AM33XX_IOPAD(0x8e0, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* lcd_vsync.lcd_vsync */
+                       AM33XX_IOPAD(0x8e4, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* lcd_hsync.lcd_hsync */
+                       AM33XX_IOPAD(0x8e8, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* lcd_pclk.lcd_pclk */
+                       AM33XX_IOPAD(0x8ec, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* lcd_ac_bias_en.lcd_ac_bias_en */
+               >;
+       };
+
+       nxp_hdmi_bonelt_off_pins: nxp_hdmi_bonelt_off_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x9b0, PIN_OUTPUT_PULLDOWN | MUX_MODE3)    /* xdma_event_intr0 */
+               >;
+       };
+
+       mcasp0_pins: mcasp0_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x9ac, PIN_INPUT_PULLUP | MUX_MODE0) /* mcasp0_ahcklx.mcasp0_ahclkx */
+                       AM33XX_IOPAD(0x99c, PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* mcasp0_ahclkr.mcasp0_axr2*/
+                       AM33XX_IOPAD(0x994, PIN_OUTPUT_PULLUP | MUX_MODE0) /* mcasp0_fsx.mcasp0_fsx */
+                       AM33XX_IOPAD(0x990, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mcasp0_aclkx.mcasp0_aclkx */
+                       AM33XX_IOPAD(0x86c, PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a11.GPIO1_27 */
+               >;
+       };
+};
+
+&lcdc {
+       status = "okay";
+
+       /* If you want to get 24 bit RGB and 16 BGR mode instead of
+        * current 16 bit RGB and 24 BGR modes, set the propety
+        * below to "crossed" and uncomment the video-ports -property
+        * in tda19988 node.
+        */
+       blue-and-red-wiring = "straight";
+
+       port {
+               lcdc_0: endpoint@0 {
+                       remote-endpoint = <&hdmi_0>;
+               };
+       };
+};
+
+&i2c0 {
+       tda19988: tda19988 {
+               compatible = "nxp,tda998x";
+               reg = <0x70>;
+
+               pinctrl-names = "default", "off";
+               pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
+               pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
+
+               /* Convert 24bit BGR to RGB, e.g. cross red and blue wiring */
+               /* video-ports = <0x234501>; */
+
+               #sound-dai-cells = <0>;
+               audio-ports = < TDA998x_I2S     0x03>;
+
+               ports {
+                       port@0 {
+                               hdmi_0: endpoint@0 {
+                                       remote-endpoint = <&lcdc_0>;
+                               };
+                       };
+               };
+       };
+};
+
+&rtc {
+       system-power-controller;
+};
+
+&mcasp0        {
+       #sound-dai-cells = <0>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&mcasp0_pins>;
+       status = "okay";
+       op-mode = <0>;  /* MCASP_IIS_MODE */
+       tdm-slots = <2>;
+       serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
+                       0 0 1 0
+               >;
+       tx-num-evt = <32>;
+       rx-num-evt = <32>;
+};
+
+/ {
+       clk_mcasp0_fixed: clk_mcasp0_fixed {
+               #clock-cells = <0>;
+               compatible = "fixed-clock";
+               clock-frequency = <24576000>;
+       };
+
+       clk_mcasp0: clk_mcasp0 {
+               #clock-cells = <0>;
+               compatible = "gpio-gate-clock";
+               clocks = <&clk_mcasp0_fixed>;
+               enable-gpios = <&gpio1 27 0>; /* BeagleBone Black Clk enable on GPIO1_27 */
+       };
+
+       sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "TI BeagleBone Black";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,bitclock-master = <&dailink0_master>;
+               simple-audio-card,frame-master = <&dailink0_master>;
+
+               dailink0_master: simple-audio-card,cpu {
+                       sound-dai = <&mcasp0>;
+                       clocks = <&clk_mcasp0>;
+               };
+
+               simple-audio-card,codec {
+                       sound-dai = <&tda19988>;
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/am335x-boneblack-wireless.dts b/arch/arm/boot/dts/am335x-boneblack-wireless.dts
new file mode 100644 (file)
index 0000000..105bd10
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+/dts-v1/;
+
+#include "am33xx.dtsi"
+#include "am335x-bone-common.dtsi"
+#include "am335x-boneblack-common.dtsi"
+#include <dt-bindings/interrupt-controller/irq.h>
+
+/ {
+       model = "TI AM335x BeagleBone Black Wireless";
+       compatible = "ti,am335x-bone-black-wireless", "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
+
+       wlan_en_reg: fixedregulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "wlan-en-regulator";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               startup-delay-us= <70000>;
+
+               /* WL_EN */
+               gpio = <&gpio3 9 0>;
+               enable-active-high;
+       };
+};
+
+&am33xx_pinmux {
+       bt_pins: pinmux_bt_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x928, PIN_OUTPUT_PULLUP | MUX_MODE7)      /* gmii1_txd0.gpio0_28 - BT_EN */
+               >;
+       };
+
+       mmc3_pins: pinmux_mmc3_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x93c, PIN_INPUT_PULLUP | MUX_MODE6 ) /* (L15) gmii1_rxd1.mmc2_clk */
+                       AM33XX_IOPAD(0x914, PIN_INPUT_PULLUP | MUX_MODE6 ) /* (J16) gmii1_txen.mmc2_cmd */
+                       AM33XX_IOPAD(0x918, PIN_INPUT_PULLUP | MUX_MODE5 ) /* (J17) gmii1_rxdv.mmc2_dat0 */
+                       AM33XX_IOPAD(0x91c, PIN_INPUT_PULLUP | MUX_MODE5 ) /* (J18) gmii1_txd3.mmc2_dat1 */
+                       AM33XX_IOPAD(0x920, PIN_INPUT_PULLUP | MUX_MODE5 ) /* (K15) gmii1_txd2.mmc2_dat2 */
+                       AM33XX_IOPAD(0x908, PIN_INPUT_PULLUP | MUX_MODE5 ) /* (H16) gmii1_col.mmc2_dat3 */
+               >;
+       };
+
+       uart3_pins: pinmux_uart3_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x934, PIN_INPUT_PULLUP | MUX_MODE1)       /* gmii1_rxd3.uart3_rxd */
+                       AM33XX_IOPAD(0x938, PIN_OUTPUT_PULLDOWN | MUX_MODE1)    /* gmii1_rxd2.uart3_txd */
+                       AM33XX_IOPAD(0x948, PIN_INPUT | MUX_MODE3)              /* mdio_data.uart3_ctsn */
+                       AM33XX_IOPAD(0x94c, PIN_OUTPUT_PULLDOWN | MUX_MODE3)    /* mdio_clk.uart3_rtsn */
+               >;
+       };
+
+       wl18xx_pins: pinmux_wl18xx_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x92c, PIN_OUTPUT_PULLDOWN | MUX_MODE7)    /* gmii1_txclk.gpio3_9 WL_EN */
+                       AM33XX_IOPAD(0x944, PIN_INPUT_PULLDOWN | MUX_MODE7)     /* rmii1_refclk.gpio0_29 WL_IRQ */
+                       AM33XX_IOPAD(0x930, PIN_OUTPUT_PULLUP | MUX_MODE7)      /* gmii1_rxclk.gpio3_10 LS_BUF_EN */
+               >;
+       };
+};
+
+&mac {
+       status = "disabled";
+};
+
+&mmc3 {
+       dmas = <&edma_xbar 12 0 1
+               &edma_xbar 13 0 2>;
+       dma-names = "tx", "rx";
+       status = "okay";
+       vmmc-supply = <&wlan_en_reg>;
+       bus-width = <4>;
+       non-removable;
+       cap-power-off-card;
+       ti,needs-special-hs-handling;
+       keep-power-in-suspend;
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
+
+       #address-cells = <1>;
+       #size-cells = <0>;
+       wlcore: wlcore@2 {
+               compatible = "ti,wl1835";
+               reg = <2>;
+               interrupt-parent = <&gpio0>;
+               interrupts = <29 IRQ_TYPE_EDGE_RISING>;
+       };
+};
+
+&uart3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart3_pins &bt_pins>;
+       status = "okay";
+};
+
+&gpio3 {
+       ls_buf_en {
+               gpio-hog;
+               gpios = <10 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "LS_BUF_EN";
+       };
+};
index db00d8ef7b19ebc78d152f4a84e21c6424c250d2..77273df1a02814ba55a889b1cccbd1e51ba2b2c2 100644 (file)
@@ -9,162 +9,9 @@
 
 #include "am33xx.dtsi"
 #include "am335x-bone-common.dtsi"
-#include <dt-bindings/display/tda998x.h>
+#include "am335x-boneblack-common.dtsi"
 
 / {
        model = "TI AM335x BeagleBone Black";
        compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
 };
-
-&ldo3_reg {
-       regulator-min-microvolt = <1800000>;
-       regulator-max-microvolt = <1800000>;
-       regulator-always-on;
-};
-
-&mmc1 {
-       vmmc-supply = <&vmmcsd_fixed>;
-};
-
-&mmc2 {
-       vmmc-supply = <&vmmcsd_fixed>;
-       pinctrl-names = "default";
-       pinctrl-0 = <&emmc_pins>;
-       bus-width = <8>;
-       status = "okay";
-};
-
-&am33xx_pinmux {
-       nxp_hdmi_bonelt_pins: nxp_hdmi_bonelt_pins {
-               pinctrl-single,pins = <
-                       AM33XX_IOPAD(0x9b0, PIN_OUTPUT_PULLDOWN | MUX_MODE3)    /* xdma_event_intr0 */
-                       AM33XX_IOPAD(0x8a0, PIN_OUTPUT | MUX_MODE0)             /* lcd_data0.lcd_data0 */
-                       AM33XX_IOPAD(0x8a4, PIN_OUTPUT | MUX_MODE0)             /* lcd_data1.lcd_data1 */
-                       AM33XX_IOPAD(0x8a8, PIN_OUTPUT | MUX_MODE0)             /* lcd_data2.lcd_data2 */
-                       AM33XX_IOPAD(0x8ac, PIN_OUTPUT | MUX_MODE0)             /* lcd_data3.lcd_data3 */
-                       AM33XX_IOPAD(0x8b0, PIN_OUTPUT | MUX_MODE0)             /* lcd_data4.lcd_data4 */
-                       AM33XX_IOPAD(0x8b4, PIN_OUTPUT | MUX_MODE0)             /* lcd_data5.lcd_data5 */
-                       AM33XX_IOPAD(0x8b8, PIN_OUTPUT | MUX_MODE0)             /* lcd_data6.lcd_data6 */
-                       AM33XX_IOPAD(0x8bc, PIN_OUTPUT | MUX_MODE0)             /* lcd_data7.lcd_data7 */
-                       AM33XX_IOPAD(0x8c0, PIN_OUTPUT | MUX_MODE0)             /* lcd_data8.lcd_data8 */
-                       AM33XX_IOPAD(0x8c4, PIN_OUTPUT | MUX_MODE0)             /* lcd_data9.lcd_data9 */
-                       AM33XX_IOPAD(0x8c8, PIN_OUTPUT | MUX_MODE0)             /* lcd_data10.lcd_data10 */
-                       AM33XX_IOPAD(0x8cc, PIN_OUTPUT | MUX_MODE0)             /* lcd_data11.lcd_data11 */
-                       AM33XX_IOPAD(0x8d0, PIN_OUTPUT | MUX_MODE0)             /* lcd_data12.lcd_data12 */
-                       AM33XX_IOPAD(0x8d4, PIN_OUTPUT | MUX_MODE0)             /* lcd_data13.lcd_data13 */
-                       AM33XX_IOPAD(0x8d8, PIN_OUTPUT | MUX_MODE0)             /* lcd_data14.lcd_data14 */
-                       AM33XX_IOPAD(0x8dc, PIN_OUTPUT | MUX_MODE0)             /* lcd_data15.lcd_data15 */
-                       AM33XX_IOPAD(0x8e0, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* lcd_vsync.lcd_vsync */
-                       AM33XX_IOPAD(0x8e4, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* lcd_hsync.lcd_hsync */
-                       AM33XX_IOPAD(0x8e8, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* lcd_pclk.lcd_pclk */
-                       AM33XX_IOPAD(0x8ec, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* lcd_ac_bias_en.lcd_ac_bias_en */
-               >;
-       };
-       nxp_hdmi_bonelt_off_pins: nxp_hdmi_bonelt_off_pins {
-               pinctrl-single,pins = <
-                       AM33XX_IOPAD(0x9b0, PIN_OUTPUT_PULLDOWN | MUX_MODE3)    /* xdma_event_intr0 */
-               >;
-       };
-
-       mcasp0_pins: mcasp0_pins {
-               pinctrl-single,pins = <
-                       AM33XX_IOPAD(0x9ac, PIN_INPUT_PULLUP | MUX_MODE0) /* mcasp0_ahcklx.mcasp0_ahclkx */
-                       AM33XX_IOPAD(0x99c, PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* mcasp0_ahclkr.mcasp0_axr2*/
-                       AM33XX_IOPAD(0x994, PIN_OUTPUT_PULLUP | MUX_MODE0) /* mcasp0_fsx.mcasp0_fsx */
-                       AM33XX_IOPAD(0x990, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mcasp0_aclkx.mcasp0_aclkx */
-                       AM33XX_IOPAD(0x86c, PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a11.GPIO1_27 */
-               >;
-       };
-};
-
-&lcdc {
-       status = "okay";
-
-       /* If you want to get 24 bit RGB and 16 BGR mode instead of
-        * current 16 bit RGB and 24 BGR modes, set the propety
-        * below to "crossed" and uncomment the video-ports -property
-        * in tda19988 node.
-        */
-       blue-and-red-wiring = "straight";
-
-       port {
-               lcdc_0: endpoint@0 {
-                       remote-endpoint = <&hdmi_0>;
-               };
-       };
-};
-
-&i2c0 {
-       tda19988: tda19988 {
-               compatible = "nxp,tda998x";
-               reg = <0x70>;
-
-               pinctrl-names = "default", "off";
-               pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
-               pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
-
-               /* Convert 24bit BGR to RGB, e.g. cross red and blue wiring */
-               /* video-ports = <0x234501>; */
-
-               #sound-dai-cells = <0>;
-               audio-ports = < TDA998x_I2S     0x03>;
-
-               ports {
-                       port@0 {
-                               hdmi_0: endpoint@0 {
-                                       remote-endpoint = <&lcdc_0>;
-                               };
-                       };
-               };
-       };
-};
-
-&rtc {
-       system-power-controller;
-};
-
-&mcasp0        {
-       #sound-dai-cells = <0>;
-       pinctrl-names = "default";
-       pinctrl-0 = <&mcasp0_pins>;
-       status = "okay";
-       op-mode = <0>;  /* MCASP_IIS_MODE */
-       tdm-slots = <2>;
-       serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
-                       0 0 1 0
-               >;
-       tx-num-evt = <32>;
-       rx-num-evt = <32>;
-};
-
-/ {
-       clk_mcasp0_fixed: clk_mcasp0_fixed {
-               #clock-cells = <0>;
-               compatible = "fixed-clock";
-               clock-frequency = <24576000>;
-       };
-
-       clk_mcasp0: clk_mcasp0 {
-               #clock-cells = <0>;
-               compatible = "gpio-gate-clock";
-               clocks = <&clk_mcasp0_fixed>;
-               enable-gpios = <&gpio1 27 0>; /* BeagleBone Black Clk enable on GPIO1_27 */
-       };
-
-       sound {
-               compatible = "simple-audio-card";
-               simple-audio-card,name = "TI BeagleBone Black";
-               simple-audio-card,format = "i2s";
-               simple-audio-card,bitclock-master = <&dailink0_master>;
-               simple-audio-card,frame-master = <&dailink0_master>;
-
-               dailink0_master: simple-audio-card,cpu {
-                       sound-dai = <&mcasp0>;
-                       clocks = <&clk_mcasp0>;
-               };
-
-               simple-audio-card,codec {
-                       sound-dai = <&tda19988>;
-               };
-       };
-};
diff --git a/arch/arm/boot/dts/am335x-bonegreen-common.dtsi b/arch/arm/boot/dts/am335x-bonegreen-common.dtsi
new file mode 100644 (file)
index 0000000..853e6d3
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+&ldo3_reg {
+       regulator-min-microvolt = <1800000>;
+       regulator-max-microvolt = <1800000>;
+       regulator-always-on;
+};
+
+&mmc1 {
+       vmmc-supply = <&vmmcsd_fixed>;
+};
+
+&mmc2 {
+       vmmc-supply = <&vmmcsd_fixed>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&emmc_pins>;
+       bus-width = <8>;
+       status = "okay";
+};
+
+&am33xx_pinmux {
+       uart2_pins: uart2_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x950, PIN_INPUT | MUX_MODE1)      /* spi0_sclk.uart2_rxd */
+                       AM33XX_IOPAD(0x954, PIN_OUTPUT | MUX_MODE1)     /* spi0_d0.uart2_txd */
+               >;
+       };
+};
+
+&uart2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart2_pins>;
+       status = "okay";
+};
+
+&rtc {
+       system-power-controller;
+};
diff --git a/arch/arm/boot/dts/am335x-bonegreen-wireless.dts b/arch/arm/boot/dts/am335x-bonegreen-wireless.dts
new file mode 100644 (file)
index 0000000..9d1a0fd
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+/dts-v1/;
+
+#include "am33xx.dtsi"
+#include "am335x-bone-common.dtsi"
+#include "am335x-bonegreen-common.dtsi"
+#include <dt-bindings/interrupt-controller/irq.h>
+
+/ {
+       model = "TI AM335x BeagleBone Green Wireless";
+       compatible = "ti,am335x-bone-green-wireless", "ti,am335x-bone-green", "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
+
+       wlan_en_reg: fixedregulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "wlan-en-regulator";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               startup-delay-us= <70000>;
+
+               /* WL_EN */
+               gpio = <&gpio0 26 0>;
+               enable-active-high;
+       };
+};
+
+&am33xx_pinmux {
+       bt_pins: pinmux_bt_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x878, PIN_OUTPUT_PULLUP | MUX_MODE7)      /* gpmc_ad12.gpio1_28 BT_EN */
+               >;
+       };
+
+       mmc3_pins: pinmux_mmc3_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x830, PIN_INPUT_PULLUP | MUX_MODE3)       /* gpmc_ad12.mmc2_dat0 */
+                       AM33XX_IOPAD(0x834, PIN_INPUT_PULLUP | MUX_MODE3)       /* gpmc_ad13.mmc2_dat1 */
+                       AM33XX_IOPAD(0x838, PIN_INPUT_PULLUP | MUX_MODE3)       /* gpmc_ad14.mmc2_dat2 */
+                       AM33XX_IOPAD(0x83c, PIN_INPUT_PULLUP | MUX_MODE3)       /* gpmc_ad15.mmc2_dat3 */
+                       AM33XX_IOPAD(0x888, PIN_INPUT_PULLUP | MUX_MODE3)       /* gpmc_csn3.mmc2_cmd */
+                       AM33XX_IOPAD(0x88c, PIN_INPUT_PULLUP | MUX_MODE3)       /* gpmc_clk.mmc2_clk */
+               >;
+       };
+
+       uart3_pins: pinmux_uart3_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x934, PIN_INPUT_PULLUP | MUX_MODE1)       /* gmii1_rxd3.uart3_rxd */
+                       AM33XX_IOPAD(0x938, PIN_OUTPUT_PULLDOWN | MUX_MODE1)    /* gmii1_rxd2.uart3_txd */
+                       AM33XX_IOPAD(0x948, PIN_INPUT | MUX_MODE3)              /* mdio_data.uart3_ctsn */
+                       AM33XX_IOPAD(0x94c, PIN_OUTPUT_PULLDOWN | MUX_MODE3)    /* mdio_clk.uart3_rtsn */
+               >;
+       };
+
+       wl18xx_pins: pinmux_wl18xx_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x828, PIN_OUTPUT_PULLDOWN | MUX_MODE7)    /* gpmc_ad10.gpio0_26 WL_EN */
+                       AM33XX_IOPAD(0x82C, PIN_INPUT_PULLDOWN | MUX_MODE7)     /* gpmc_ad11.gpio0_27 WL_IRQ */
+                       AM33XX_IOPAD(0x87C, PIN_OUTPUT_PULLUP | MUX_MODE7)      /* gpmc_csn0.gpio1_29 LS_BUF_EN */
+               >;
+       };
+};
+
+&mac {
+       status = "disabled";
+};
+
+&mmc3 {
+       dmas = <&edma_xbar 12 0 1
+               &edma_xbar 13 0 2>;
+       dma-names = "tx", "rx";
+       status = "okay";
+       vmmc-supply = <&wlan_en_reg>;
+       bus-width = <4>;
+       non-removable;
+       cap-power-off-card;
+       ti,needs-special-hs-handling;
+       keep-power-in-suspend;
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
+
+       #address-cells = <1>;
+       #size-cells = <0>;
+       wlcore: wlcore@2 {
+               compatible = "ti,wl1835";
+               reg = <2>;
+               interrupt-parent = <&gpio0>;
+               interrupts = <27 IRQ_TYPE_EDGE_RISING>;
+       };
+};
+
+&uart3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart3_pins &bt_pins>;
+       status = "okay";
+};
+
+&gpio1 {
+       ls_buf_en {
+               gpio-hog;
+               gpios = <29 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "LS_BUF_EN";
+       };
+};
+
+/* BT_AUD_OUT from wl1835 has to be pulled low when WL_EN is activated.*/
+/* in case it isn't, wilink8 ends up in one of the test modes that     */
+/* intruces various issues (elp wkaeup timeouts etc.)                  */
+/* On the BBGW this pin is routed through the level shifter (U21) that */
+/* introduces a pullup on the line and wilink8 ends up in a bad state. */
+/* use a gpio hog to force this pin low. An alternative may be adding  */
+/* an external pulldown on U21 pin 4.                                  */
+
+&gpio3 {
+       bt_aud_in {
+               gpio-hog;
+               gpios = <16 GPIO_ACTIVE_HIGH>;
+               output-low;
+               line-name = "MCASP0_AHCLKR";
+       };
+};
index dce3c8657e04db18d539d52444d9f1b3a51f721d..a8b4d969ce2a04df353635daf36f6213cf617e65 100644 (file)
@@ -9,45 +9,9 @@
 
 #include "am33xx.dtsi"
 #include "am335x-bone-common.dtsi"
+#include "am335x-bonegreen-common.dtsi"
 
 / {
        model = "TI AM335x BeagleBone Green";
        compatible = "ti,am335x-bone-green", "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
 };
-
-&ldo3_reg {
-       regulator-min-microvolt = <1800000>;
-       regulator-max-microvolt = <1800000>;
-       regulator-always-on;
-};
-
-&mmc1 {
-       vmmc-supply = <&vmmcsd_fixed>;
-};
-
-&mmc2 {
-       vmmc-supply = <&vmmcsd_fixed>;
-       pinctrl-names = "default";
-       pinctrl-0 = <&emmc_pins>;
-       bus-width = <8>;
-       status = "okay";
-};
-
-&am33xx_pinmux {
-       uart2_pins: uart2_pins {
-               pinctrl-single,pins = <
-                       AM33XX_IOPAD(0x950, PIN_INPUT | MUX_MODE1)      /* spi0_sclk.uart2_rxd */
-                       AM33XX_IOPAD(0x954, PIN_OUTPUT | MUX_MODE1)     /* spi0_d0.uart2_txd */
-               >;
-       };
-};
-
-&uart2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&uart2_pins>;
-       status = "okay";
-};
-
-&rtc {
-       system-power-controller;
-};
index f9ee5859c154ade0b5858ad97373277389b2b31a..1b43ebd08b38106a92ccc088998ef9f3cf51bab7 100644 (file)
@@ -124,6 +124,14 @@ ldo4_reg: regulator@6 {
 
 &rtc {
        system-power-controller;
+
+       pinctrl-0 = <&ext_wakeup>;
+       pinctrl-names = "default";
+
+       ext_wakeup: ext-wakeup {
+               pins = "ext_wakeup0";
+               input-enable;
+       };
 };
 
 /* NAND Flash */
index c2186ec2834b4c297197ba76708b29e24dca7023..1c37a7c1ea17dd76fc2686c1bd9dd17acc250d99 100644 (file)
@@ -25,6 +25,10 @@ memory@80000000 {
                reg = <0x80000000 0x10000000>; /* 256 MB */
        };
 
+       chosen {
+               stdout-path = &uart0;
+       };
+
        vbat: fixedregulator0 {
                compatible = "regulator-fixed";
                regulator-name = "vbat";
index e2548d1ce753a659acbcdd72ef7d2af4d78afdbf..9e43c443738a8acedd2c0e160a5b6ddc9e0f6c39 100644 (file)
@@ -32,6 +32,10 @@ memory@80000000 {
                reg = <0x80000000 0x10000000>; /* 256 MB */
        };
 
+       chosen {
+               stdout-path = &uart0;
+       };
+
        vbat: fixedregulator0 {
                compatible = "regulator-fixed";
                regulator-name = "vbat";
index 1463df3b5b195544f7fafc97f3a7dc62efa01f4f..ff9417ce93c026fcb7ffec2a9c0ba07910f3ace2 100644 (file)
@@ -24,6 +24,10 @@ memory@80000000 {
                reg = <0x80000000 0x10000000>; /* 256 MB */
        };
 
+       chosen {
+               stdout-path = &uart3;
+       };
+
        vbat: fixedregulator0 {
                compatible = "regulator-fixed";
                regulator-name = "vbat";
index 483d585c89084ca305f11e5015fade982e14dbc8..807494bc722ba3934c61fe378a46f2079a5be33e 100644 (file)
@@ -249,7 +249,8 @@ &gpmc {
 
        #address-cells = <2>;
        #size-cells = <1>;
-       ranges = <0 0 0x08000000 0x08000000>;   /* CS0: NOR 128M */
+       ranges = <0 0 0x08000000 0x08000000>,   /* CS0: NOR 128M */
+                <1 0 0x1c000000 0x01000000>;   /* CS1: FRAM 16M */
 
        nor@0,0 {
                reg = <0 0x00000000 0x08000000>;
@@ -342,6 +343,34 @@ partition@6 {
                        reg = <0x04000000 0x04000000>; /* 64MB */
                };
        };
+
+       fram@1,0 {
+               reg = <1 0x00000000 0x01000000>;
+               bank-width = <2>;
+
+               gpmc,mux-add-data = <2>;
+
+               gpmc,sync-clk-ps = <0>;
+               gpmc,cs-on-ns = <0>;
+               gpmc,cs-rd-off-ns = <160>;
+               gpmc,cs-wr-off-ns = <160>;
+               gpmc,adv-on-ns = <10>;
+               gpmc,adv-rd-off-ns = <20>;
+               gpmc,adv-wr-off-ns = <20>;
+               gpmc,oe-on-ns = <30>;
+               gpmc,oe-off-ns = <150>;
+               gpmc,we-on-ns = <30>;
+               gpmc,we-off-ns = <150>;
+               gpmc,rd-cycle-ns = <160>;
+               gpmc,wr-cycle-ns = <160>;
+               gpmc,access-ns = <130>;
+               gpmc,page-burst-access-ns = <10>;
+               gpmc,cycle2cycle-samecsen;
+               gpmc,cycle2cycle-diffcsen;
+               gpmc,cycle2cycle-delay-ns = <10>;
+               gpmc,wr-data-mux-bus-ns = <30>;
+               gpmc,wr-access-ns = <0>;
+       };
 };
 
 &mac {
index 75e24add3f13551500ddd27b47793ff703b866d0..14533ff6d0add3dd061bee2920d1edbc978d579e 100644 (file)
@@ -78,7 +78,7 @@ AM33XX_IOPAD(0x94c, PIN_OUTPUT_PULLUP | MUX_MODE0)                    /* mdio_clk.mdio_clk */
 };
 
 &cpsw_emac0 {
-       phy_id = <&davinci_mdio>, <0>;
+       phy-handle = <&phy0>;
        phy-mode = "rmii";
        dual_emac_res_vlan = <1>;
 };
@@ -87,6 +87,10 @@ &davinci_mdio {
        pinctrl-names = "default";
        pinctrl-0 = <&mdio_pins>;
        status = "okay";
+
+       phy0: ethernet-phy@0 {
+               reg = <0>;
+       };
 };
 
 &mac {
@@ -120,6 +124,12 @@ tps: pmic@2d {
                reg = <0x2d>;
        };
 
+       i2c_tmp102: temp@4b {
+               compatible = "ti,tmp102";
+               reg = <0x4b>;
+               status = "disabled";
+       };
+
        i2c_eeprom: eeprom@52 {
                compatible = "atmel,24c32";
                pagesize = <32>;
@@ -201,43 +211,6 @@ nandflash: nand@0,0 {
 
                #address-cells = <1>;
                #size-cells = <1>;
-
-               partition@0 {
-                       label = "xload";
-                       reg = <0x0 0x20000>;
-               };
-               partition@1 {
-                       label = "xload_backup1";
-                       reg = <0x20000 0x20000>;
-               };
-               partition@2 {
-                       label = "xload_backup2";
-                       reg = <0x40000 0x20000>;
-               };
-               partition@3 {
-                       label = "xload_backup3";
-                       reg = <0x60000 0x20000>;
-               };
-               partition@4 {
-                       label = "barebox";
-                       reg = <0x80000 0x80000>;
-               };
-               partition@5 {
-                       label = "bareboxenv";
-                       reg = <0x100000 0x40000>;
-               };
-               partition@6 {
-                       label = "oftree";
-                       reg = <0x140000 0x40000>;
-               };
-               partition@7 {
-                       label = "kernel";
-                       reg = <0x180000 0x800000>;
-               };
-               partition@8 {
-                       label = "root";
-                       reg = <0x980000 0x0>;
-               };
        };
 };
 
@@ -341,33 +314,12 @@ &spi0 {
        status = "okay";
 
        serial_flash: m25p80@0 {
-               compatible = "m25p80";
+               compatible = "jedec,spi-nor";
                spi-max-frequency = <48000000>;
                reg = <0x0>;
                m25p,fast-read;
                status = "disabled";
                #address-cells = <1>;
                #size-cells = <1>;
-
-               partition@0 {
-                       label = "xload";
-                       reg = <0x0 0x20000>;
-               };
-               partition@1 {
-                       label = "barebox";
-                       reg = <0x20000 0x80000>;
-               };
-               partition@2 {
-                       label = "bareboxenv";
-                       reg = <0xa0000 0x20000>;
-               };
-               partition@3 {
-                       label = "oftree";
-                       reg = <0xc0000 0x20000>;
-               };
-               partition@4 {
-                       label = "kernel";
-                       reg = <0xe0000 0x0>;
-               };
        };
 };
index b0dfa6f14cd5ef919ba807b6fe8325e77c1879b2..c5d2589c55fc3ddfab5909413e7bbfe59aba50f7 100644 (file)
@@ -136,6 +136,13 @@ AM33XX_IOPAD(0x974, PIN_OUTPUT_PULLDOWN | MUX_MODE0)       /* uart0_txd.uart0_txd */
                >;
        };
 
+       uart1_pins: pinmux_uart1_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x980, PIN_INPUT_PULLUP | MUX_MODE0)       /* uart1_rxd.uart1_rxd */
+                       AM33XX_IOPAD(0x984, PIN_OUTPUT_PULLDOWN | MUX_MODE0)    /* uart1_txd.uart1_txd */
+               >;
+       };
+
        uart4_pins: pinmux_uart4_pins {
                pinctrl-single,pins = <
                        AM33XX_IOPAD(0x870, PIN_INPUT_PULLUP | MUX_MODE6)       /* gpmc_wait0.uart4_rxd */
@@ -150,13 +157,6 @@ AM33XX_IOPAD(0x98c, PIN_INPUT_PULLUP | MUX_MODE0)  /* i2c0_scl.i2c0_scl */
                >;
        };
 
-       i2c1_pins: pinmux_i2c1_pins {
-               pinctrl-single,pins = <
-                       AM33XX_IOPAD(0x980, PIN_INPUT_PULLUP | MUX_MODE3)       /* uart1_rxd.i2c1_sda */
-                       AM33XX_IOPAD(0x984, PIN_INPUT_PULLUP | MUX_MODE3)       /* uart1_txdi2c1_scl */
-               >;
-       };
-
        i2c2_pins: pinmux_i2c2_pins {
                pinctrl-single,pins = <
                        AM33XX_IOPAD(0x978, PIN_INPUT_PULLUP | MUX_MODE3)       /* uart1_ctsn.i2c2_sda */
@@ -262,6 +262,16 @@ AM33XX_IOPAD(0x84c, PIN_OUTPUT | MUX_MODE6)        /* gpmc_a3.ehrpwm1b */
                >;
        };
 
+       spi0_pins: pinmux_spi0_pins {
+               pinctrl-single,pins = <
+                       AM33XX_IOPAD(0x954, PIN_INPUT_PULLUP | MUX_MODE0)       /* SPI0_MOSI - spi0_d0.spi0_d0 */
+                       AM33XX_IOPAD(0x958, PIN_INPUT_PULLUP | MUX_MODE0)       /* SPI0_MISO - spi0_d1.spi0_d1 */
+                       AM33XX_IOPAD(0x950, PIN_INPUT_PULLUP | MUX_MODE0)       /* SPI0_CLK  - spi0_clk.spi0_clk */
+                       AM33XX_IOPAD(0x95c, PIN_INPUT_PULLUP | MUX_MODE0)       /* SPI0_CS0 (NBATTSS) - spi0_cs0.spi0_cs0 */
+                       AM33XX_IOPAD(0x960, PIN_INPUT_PULLUP | MUX_MODE0)       /* SPI0_CS1 (FPGA_FLASH_NCS) - spi0_cs1.spi0_cs1 */
+               >;
+       };
+
        lwb_pins: pinmux_lwb_pins {
                pinctrl-single,pins = <
                        AM33XX_IOPAD(0x9a4, PIN_OUTPUT | MUX_MODE7)     /* SoundPA_en - mcasp0_fsr.gpio3_19 */
@@ -292,16 +302,22 @@ tps: tps@24 {
                reg = <0x24>;
        };
 
+       bq32000: rtc@68 {
+               compatible = "ti,bq32000";
+               trickle-resistor-ohms = <1120>;
+               reg = <0x68>;
+       };
+
        eeprom: eeprom@50 {
                compatible = "at,24c256";
                reg = <0x50>;
        };
-};
 
-&i2c1 {
-       status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins>;
+       gpio_exp: mcp23017@20 {
+               compatible = "microchip,mcp23017";
+               reg = <0x20>;
+       };
+
 };
 
 &i2c2 {
@@ -321,6 +337,16 @@ audio_codec: tlv320aic3106@1b {
                DRVDD-supply = <&ldo4_reg>;
                DVDD-supply = <&ldo3_reg>;
        };
+
+       /* Ambient Light Sensor */
+       als: isl29023@44 {
+               compatible = "isil,isl29023";
+               reg = <0x44>;
+       };
+};
+
+&rtc {
+       status = "disabled";
 };
 
 &usb {
@@ -394,12 +420,32 @@ &uart0 {
        pinctrl-0 = <&uart0_pins>;
 };
 
+&uart1 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_pins>;
+};
+
 &uart4 {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&uart4_pins>;
 };
 
+&spi0 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi0_pins>;
+
+       flash: n25q032@1 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "micron,n25q032";
+               reg = <1>;
+               spi-max-frequency = <5000000>;
+       };
+};
+
 #include "tps65217.dtsi"
 
 &tps {
index 02c67365c4e1611cb6413b7a0cd0fa115a8a5e75..8ce541739b24f08bb4a4a0677caee390ba4f899e 100644 (file)
@@ -119,11 +119,17 @@ AM33XX_IOPAD(0x878, PIN_INPUT_PULLDOWN | MUX_MODE1)       /* gpmc_ben1.mii2_col */
 };
 
 &cpsw_emac1 {
-       phy_id = <&davinci_mdio>, <1>;
+       phy-handle = <&phy1>;
        phy-mode = "mii";
        dual_emac_res_vlan = <2>;
 };
 
+&davinci_mdio {
+       phy1: ethernet-phy@1 {
+               reg = <1>;
+       };
+};
+
 &mac {
        slaves = <2>;
        pinctrl-names = "default";
@@ -206,7 +212,6 @@ &usb {
 };
 
 &usb0 {
-       dr_mode = "peripheral";
        status = "okay";
 };
 
index 64c8aa9057a3366b746078a51e662f76a35e8f4b..18d72a245e889ac28561b34417680702fb0e10e1 100644 (file)
@@ -16,6 +16,7 @@ / {
        interrupt-parent = <&intc>;
        #address-cells = <1>;
        #size-cells = <1>;
+       chosen { };
 
        aliases {
                i2c0 = &i2c0;
index ac55f93fc91e997deef1815adeb9d9dee9e2c555..2df9e6050c2f382fea2d09f6a95e634210d3a88f 100644 (file)
@@ -16,6 +16,7 @@ / {
        interrupt-parent = <&wakeupgen>;
        #address-cells = <1>;
        #size-cells = <1>;
+       chosen { };
 
        memory@0 {
                device_type = "memory";
index 957840cc7b78748f06530d3aafa8dcf13b271001..a4f31739057f3640153f9d6d977204762322aba4 100644 (file)
@@ -23,6 +23,10 @@ aliases {
                display0 = &lcd0;
        };
 
+       chosen {
+               stdout-path = &uart0;
+       };
+
        evm_v3_3d: fixedregulator-v3_3d {
                compatible = "regulator-fixed";
                regulator-name = "evm_v3_3d";
index b76a7c0264a5a45ff97ca0141c8994fb8b18d097..c1f7f9336e644925eead9afa54fef4ddbfcaf6e3 100644 (file)
@@ -18,6 +18,10 @@ / {
        model = "TI AM437x Industrial Development Kit";
        compatible = "ti,am437x-idk-evm","ti,am4372","ti,am43";
 
+       chosen {
+               stdout-path = &uart0;
+       };
+
        v24_0d: fixed-regulator-v24_0d {
                compatible = "regulator-fixed";
                regulator-name = "V24_0D";
index 319d94205350752622b05340414b5febd50b0605..4dc54bee2f36311cd5db14d2b80ebbc615aeb3cc 100644 (file)
@@ -24,6 +24,10 @@ aliases {
                display0 = &lcd0;
        };
 
+       chosen {
+               stdout-path = &uart0;
+       };
+
        /* fixed 32k external oscillator clock */
        clk_32k_rtc: clk_32k_rtc {
                #clock-cells = <0>;
index 9d35c3f07cad70ba7d72927cc1c0b3749a07a8d3..9acd4ccdec4e24fa21a9488814b0fc929fd1cc40 100644 (file)
@@ -24,6 +24,10 @@ aliases {
                display0 = &lcd0;
        };
 
+       chosen {
+               stdout-path = &uart0;
+       };
+
        vmmcsd_fixed: fixedregulator-sd {
                compatible = "regulator-fixed";
                regulator-name = "vmmcsd_fixed";
index d6e43e5184c1829483a3b5b0fb1cc99268a0d611..ad68d1eb3bc3d2a4feec75053323f4ed90d394e4 100644 (file)
@@ -62,11 +62,6 @@ mmc0-led {
                        linux,default-trigger = "mmc0";
                };
        };
-
-       extcon_usb2: extcon_usb2 {
-            compatible = "linux,extcon-usb-gpio";
-            id-gpio = <&gpio5 7 GPIO_ACTIVE_HIGH>;
-       };
 };
 
 &mmc1 {
@@ -79,3 +74,8 @@ &mmc1 {
 &omap_dwc3_2 {
        extcon = <&extcon_usb2>;
 };
+
+&extcon_usb2 {
+       id-gpio = <&gpio5 7 GPIO_ACTIVE_HIGH>;
+       vbus-gpio = <&gpio7 22 GPIO_ACTIVE_HIGH>;
+};
index 27d9149cedba78c81c7025a2404d3f80b14524f6..8350b4b34b085231663c9235b570e487827a5000 100644 (file)
@@ -23,11 +23,6 @@ memory@0 {
                reg = <0x0 0x80000000 0x0 0x80000000>;
        };
 
-       extcon_usb2: extcon_usb2 {
-               compatible = "linux,extcon-usb-gpio";
-               id-gpio = <&gpio3 16 GPIO_ACTIVE_HIGH>;
-       };
-
        status-leds {
                compatible = "gpio-leds";
                cpu0-led {
@@ -76,6 +71,11 @@ &omap_dwc3_2 {
        extcon = <&extcon_usb2>;
 };
 
+&extcon_usb2 {
+       id-gpio = <&gpio3 16 GPIO_ACTIVE_HIGH>;
+       vbus-gpio = <&gpio3 26 GPIO_ACTIVE_HIGH>;
+};
+
 &mmc1 {
        status = "okay";
        vmmc-supply = <&v3_3d>;
@@ -87,3 +87,7 @@ &mmc1 {
 &sn65hvs882 {
        load-gpios = <&gpio3 19 GPIO_ACTIVE_LOW>;
 };
+
+&pcie1 {
+       gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>;
+};
index 78bee26361f15847ccc0a950a61d201de9e3feb2..585d792a8fdd125f57a3bf8f0e509241ea7c357d 100644 (file)
@@ -22,6 +22,10 @@ aliases {
                display0 = &hdmi0;
        };
 
+       chosen {
+               stdout-path = &uart3;
+       };
+
        memory@0 {
                device_type = "memory";
                reg = <0x0 0x80000000 0x0 0x80000000>;
@@ -421,19 +425,29 @@ &uart3 {
                              <&dra7_pmx_core 0x3f8>;
 };
 
+&davinci_mdio {
+       phy0: ethernet-phy@1 {
+               reg = <1>;
+       };
+
+       phy1: ethernet-phy@2 {
+               reg = <2>;
+       };
+};
+
 &mac {
        status = "okay";
        dual_emac;
 };
 
 &cpsw_emac0 {
-       phy_id = <&davinci_mdio>, <1>;
+       phy-handle = <&phy0>;
        phy-mode = "rgmii";
        dual_emac_res_vlan = <1>;
 };
 
 &cpsw_emac1 {
-       phy_id = <&davinci_mdio>, <2>;
+       phy-handle = <&phy1>;
        phy-mode = "rgmii";
        dual_emac_res_vlan = <2>;
 };
index ca85570629fd59db591da18c15b6c1a37ac8d007..39a92aff0a0dc5338d29c13949001e2558f17474 100644 (file)
@@ -22,3 +22,8 @@ &mmc1 {
        vmmc-supply = <&vdd_3v3>;
        vmmc-aux-supply = <&ldo1_reg>;
 };
+
+/* errata i880 "Ethernet RGMII2 Limited to 10/100 Mbps" */
+&phy1 {
+       max-speed = <100>;
+};
index 8c66f2efd283b2bcea47c5a219966303e838e915..19a60a11c19890d49f608e12c4a4c3a5d3c822bc 100644 (file)
@@ -22,3 +22,8 @@ &tpd12s015 {
 &mmc1 {
        vmmc-supply = <&ldo1_reg>;
 };
+
+/* errata i880 "Ethernet RGMII2 Limited to 10/100 Mbps" */
+&phy1 {
+       max-speed = <100>;
+};
index 555ae21f2b9adcf2ad811b5541a3f865997bb098..0d341c545b010fb810b890166eae3aa7967313ea 100644 (file)
@@ -14,6 +14,10 @@ aliases {
                rtc1 = &rtc;
        };
 
+       chosen {
+               stdout-path = &uart3;
+       };
+
        vmain: fixedregulator-vmain {
                compatible = "regulator-fixed";
                regulator-name = "VMAIN";
@@ -303,6 +307,13 @@ tps659038_gpio: tps659038_gpio {
                        gpio-controller;
                        #gpio-cells = <2>;
                };
+
+               extcon_usb2: tps659038_usb {
+                       compatible = "ti,palmas-usb-vid";
+                       ti,enable-vbus-detection;
+                       ti,enable-id-detection;
+                       /* ID & VBUS GPIOs provided in board dts */
+               };
        };
 };
 
@@ -369,7 +380,7 @@ &usb1 {
 };
 
 &usb2 {
-       dr_mode = "otg";
+       dr_mode = "peripheral";
 };
 
 &mmc2 {
index a9419f8e17e806c41e1effcee4f57fedd294513c..c4eef7323367a57bc66dc481e53db12b0759d9bb 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index aeedc463daa631fd8a4c9dd577a4a6f39f8f9089..db7f3aa386702234ab7b44d98bab2f8fad558fb1 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index a1425409e570dac39481c2f06b6d5f72a0f34ad1..702f58c9642d7c9e8db5a3f6601d710f605b2a5d 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 6bd9265f106253b9b74d50f02b0be42341ead7bf..b1a96e95e92133c5d7e00f12f141155287d770d1 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index c84ab5bf1e186a06ec35b6cb62abdc6e766bdca2..d67e7aa42b54fb0591f996c2897674f4350c8219 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index c3fd6e49212ff5edea6df2f521bf2f527d7e9d66..8b2fa9a49967439b1a6a14973b5f2bf1a547b320 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -173,6 +173,8 @@ partition@1000000 {
        };
 
        dsa {
+               status = "disabled";
+
                compatible = "marvell,dsa";
                #address-cells = <2>;
                #size-cells = <0>;
@@ -235,6 +237,48 @@ &mdio {
        phy0: ethernet-phy@0 {
                reg = <0>;
        };
+
+       switch: switch@10 {
+               compatible = "marvell,mv88e6085";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0x10>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               label = "lan0";
+                       };
+
+                       port@1 {
+                              reg = <1>;
+                              label = "lan1";
+                       };
+
+                       port@2 {
+                              reg = <2>;
+                              label = "lan2";
+                       };
+
+                       port@3 {
+                              reg = <3>;
+                              label = "lan3";
+                       };
+
+                       port@5 {
+                               reg = <5>;
+                               label = "cpu";
+                               ethernet = <&eth1>;
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+               };
+       };
 };
 
 
index 99f9de229ea8362b508ce37c43645f6113cf7e0a..4978011df5bd5899b66ffbe36bbcf711fec7da7e 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index b0520bdeea27e1622d63a5f5febee3b7da4a33d2..09495e87b038beeec3acb78e82e84bbbe392f2be 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index b704bcc597f71c16a37a0ad8c2ec32cb5af376cb..cc011c8bc36bf4ba5615ac6706a50a62c788d61c 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index ef45cbeb3e7d97a53ff71e8e61efac3874c88c7e..bcdbb8ba1d65f349cefcded1a7ebef4c69d09c10 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index f515591e873314d356480104b5cf7f5ad40aa459..50c5e8417802cd42c3beee13bcf9a23b3a127791 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 5102d19cc8f47cac1b304fde8db531f2f6272764..e392f6036f3956a7b2494d7fb502f5b5a3a99349 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 8f0e508f64aed54436090a9dc714958f16edfd85..20d5e8b00f2debf25e7471deea3ac6262a0daaeb 100644 (file)
@@ -103,8 +103,56 @@ fixed-link {
                                };
                        };
 
-                       mdio {
+                       mdio@72004 {
                                status = "okay";
+
+                               switch@0 {
+                                       compatible = "marvell,mv88e6095";
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       reg = <0>;
+
+                                       ports {
+                                               #address-cells = <1>;
+                                               #size-cells = <0>;
+
+                                               port@0 {
+                                                       reg = <0>;
+                                                       label = "lan4";
+                                               };
+
+                                               port@1 {
+                                                       reg = <1>;
+                                                       label = "lan3";
+                                               };
+
+                                               port@2 {
+                                                       reg = <2>;
+                                                       label = "lan2";
+                                               };
+
+                                               port@3 {
+                                                       reg = <3>;
+                                                       label = "lan1";
+                                               };
+
+                                               port@4 {
+                                                       reg = <4>;
+                                                       label = "wan";
+                                               };
+
+                                               port@5 {
+                                                       reg = <5>;
+                                                       label = "cpu";
+                                                       ethernet = <&eth2>;
+
+                                                       fixed-link {
+                                                               speed = <1000>;
+                                                               full-duplex;
+                                                       };
+                                               };
+                                       };
+                               };
                        };
 
                        sata@a8000 {
@@ -261,6 +309,8 @@ sata {
        };
 
        dsa@0 {
+               status = "disabled";
+
                compatible = "marvell,dsa";
                #address-cells = <2>;
                #size-cells = <0>;
index ab49acb2d452b91bc030124417cc0ce9caa28f67..28eede180e4fe257742172d9324206537d1dbc17 100644 (file)
@@ -122,7 +122,7 @@ &eth0 {
        pinctrl-names = "default";
        pinctrl-0 = <&ge0_rgmii_pins>;
        status = "okay";
-       phy-mode = "rgmii-id";
+       phy-mode = "rgmii";
 
        fixed-link {
                speed = <1000>;
@@ -135,7 +135,7 @@ &eth1 {
        pinctrl-names = "default";
        pinctrl-0 = <&ge1_rgmii_pins>;
        status = "okay";
-       phy-mode = "rgmii-id";
+       phy-mode = "rgmii";
 
        fixed-link {
                speed = <1000>;
@@ -273,7 +273,59 @@ phy1: phy@1 {
                /* irq is connected to &pcawan pin 7 */
        };
 
-       /* Switch MV88E7176 at address 0x10 */
+       /* Switch MV88E6176 at address 0x10 */
+       switch@10 {
+               compatible = "marvell,mv88e6085";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               dsa,member = <0 0>;
+
+               reg = <0x10>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       ports@0 {
+                               reg = <0>;
+                               label = "lan0";
+                       };
+
+                       ports@1 {
+                               reg = <1>;
+                               label = "lan1";
+                       };
+
+                       ports@2 {
+                               reg = <2>;
+                               label = "lan2";
+                       };
+
+                       ports@3 {
+                               reg = <3>;
+                               label = "lan3";
+                       };
+
+                       ports@4 {
+                               reg = <4>;
+                               label = "lan4";
+                       };
+
+                       ports@5 {
+                               reg = <5>;
+                               label = "cpu";
+                               ethernet = <&eth1>;
+                               phy-mode = "rgmii-id";
+
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+
+                       /* port 6 is connected to eth0 */
+               };
+       };
 };
 
 &pinctrl {
index 8e67d2c083dd85d8ca0a17032819502f221295e8..8e63be33472e05d058a055c84fe2ebac56250f81 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
diff --git a/arch/arm/boot/dts/armada-388-clearfog-base.dts b/arch/arm/boot/dts/armada-388-clearfog-base.dts
new file mode 100644 (file)
index 0000000..22ed07f
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Device Tree file for SolidRun Clearfog Base revision A1 rev 2.0 (88F6828)
+ *
+ *  Copyright (C) 2015 Russell King
+ *
+ * This board is in development; the contents of this file work with
+ * the A1 rev 2.0 of the board, which does not represent final
+ * production board.  Things will change, don't expect this file to
+ * remain compatible info the future.
+ *
+ * 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
+ *     version 2 as published by the Free Software Foundation.
+ *
+ *     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 "armada-388-clearfog.dtsi"
+
+/ {
+       model = "SolidRun Clearfog Base A1";
+       compatible = "solidrun,clearfog-base-a1",
+               "solidrun,clearfog-a1", "marvell,armada388",
+               "marvell,armada385", "marvell,armada380";
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               pinctrl-0 = <&rear_button_pins>;
+               pinctrl-names = "default";
+
+               button_0 {
+                       /* The rear SW3 button */
+                       label = "Rear Button";
+                       gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
+                       linux,can-disable;
+                       linux,code = <BTN_0>;
+               };
+       };
+};
+
+&eth1 {
+       phy = <&phy1>;
+};
+
+&gpio0 {
+       phy1_reset {
+               gpio-hog;
+               gpios = <19 GPIO_ACTIVE_LOW>;
+               output-low;
+               line-name = "phy1-reset";
+       };
+};
+
+&mdio {
+       pinctrl-0 = <&mdio_pins &microsom_phy_clk_pins &clearfog_phy_pins>;
+       phy1: ethernet-phy@1 {
+               /*
+                * Annoyingly, the marvell phy driver configures the LED
+                * register, rather than preserving reset-loaded setting.
+                * We undo that rubbish here.
+                */
+               marvell,reg-init = <3 16 0 0x101e>;
+               reg = <1>;
+       };
+};
+
+&pinctrl {
+       /* phy1 reset */
+       clearfog_phy_pins: clearfog-phy-pins {
+               marvell,pins = "mpp19";
+               marvell,function = "gpio";
+       };
+       rear_button_pins: rear-button-pins {
+               marvell,pins = "mpp44";
+               marvell,function = "gpio";
+       };
+};
diff --git a/arch/arm/boot/dts/armada-388-clearfog-pro.dts b/arch/arm/boot/dts/armada-388-clearfog-pro.dts
new file mode 100644 (file)
index 0000000..bd85870
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Device Tree file for SolidRun Clearfog Pro revision A1 rev 2.0 (88F6828)
+ *
+ *  Copyright (C) 2015 Russell King
+ *
+ * This board is in development; the contents of this file work with
+ * the A1 rev 2.0 of the board, which does not represent final
+ * production board.  Things will change, don't expect this file to
+ * remain compatible info the future.
+ *
+ * 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
+ *     version 2 as published by the Free Software Foundation.
+ *
+ *     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.
+ */
+#include "armada-388-clearfog.dts"
+
+/ {
+       model = "SolidRun Clearfog Pro A1";
+       compatible = "solidrun,clearfog-pro-a1",
+               "solidrun,clearfog-a1", "marvell,armada388",
+               "marvell,armada385", "marvell,armada380";
+};
index 71ce201c903e378406c9acfc901042a8c2f1d170..2745b741631339b5afb865b9dedc5a0629714052 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Device Tree file for SolidRun Clearfog revision A1 rev 2.0 (88F6828)
+ * Device Tree file for SolidRun Clearfog Pro revision A1 rev 2.0 (88F6828)
  *
  *  Copyright (C) 2015 Russell King
  *
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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 "armada-388.dtsi"
-#include "armada-38x-solidrun-microsom.dtsi"
+#include "armada-388-clearfog.dtsi"
 
 / {
        model = "SolidRun Clearfog A1";
        compatible = "solidrun,clearfog-a1", "marvell,armada388",
                "marvell,armada385", "marvell,armada380";
 
-       aliases {
-               /* So that mvebu u-boot can update the MAC addresses */
-               ethernet1 = &eth0;
-               ethernet2 = &eth1;
-               ethernet3 = &eth2;
-       };
-
-       chosen {
-               stdout-path = "serial0:115200n8";
-       };
-
-       reg_3p3v: regulator-3p3v {
-               compatible = "regulator-fixed";
-               regulator-name = "3P3V";
-               regulator-min-microvolt = <3300000>;
-               regulator-max-microvolt = <3300000>;
-               regulator-always-on;
-       };
-
        soc {
                internal-regs {
-                       ethernet@30000 {
-                               phy-mode = "sgmii";
-                               buffer-manager = <&bm>;
-                               bm,pool-long = <2>;
-                               bm,pool-short = <1>;
-                               status = "okay";
-
-                               fixed-link {
-                                       speed = <1000>;
-                                       full-duplex;
-                               };
-                       };
-
-                       ethernet@34000 {
-                               phy-mode = "sgmii";
-                               buffer-manager = <&bm>;
-                               bm,pool-long = <3>;
-                               bm,pool-short = <1>;
-                               status = "okay";
-
-                               fixed-link {
-                                       speed = <1000>;
-                                       full-duplex;
-                               };
-                       };
-
-                       i2c@11000 {
-                               /* Is there anything on this? */
-                               clock-frequency = <100000>;
-                               pinctrl-0 = <&i2c0_pins>;
-                               pinctrl-names = "default";
-                               status = "okay";
-
-                               /*
-                                * PCA9655 GPIO expander, up to 1MHz clock.
-                                *  0-CON3 CLKREQ#
-                                *  1-CON3 PERST#
-                                *  2-CON2 PERST#
-                                *  3-CON3 W_DISABLE
-                                *  4-CON2 CLKREQ#
-                                *  5-USB3 overcurrent
-                                *  6-USB3 power
-                                *  7-CON2 W_DISABLE
-                                *  8-JP4 P1
-                                *  9-JP4 P4
-                                * 10-JP4 P5
-                                * 11-m.2 DEVSLP
-                                * 12-SFP_LOS
-                                * 13-SFP_TX_FAULT
-                                * 14-SFP_TX_DISABLE
-                                * 15-SFP_MOD_DEF0
-                                */
-                               expander0: gpio-expander@20 {
-                                       /*
-                                        * This is how it should be:
-                                        * compatible = "onnn,pca9655",
-                                        *       "nxp,pca9555";
-                                        * but you can't do this because of
-                                        * the way I2C works.
-                                        */
-                                       compatible = "nxp,pca9555";
-                                       gpio-controller;
-                                       #gpio-cells = <2>;
-                                       reg = <0x20>;
-
-                                       pcie1_0_clkreq {
-                                               gpio-hog;
-                                               gpios = <0 GPIO_ACTIVE_LOW>;
-                                               input;
-                                               line-name = "pcie1.0-clkreq";
-                                       };
-                                       pcie1_0_w_disable {
-                                               gpio-hog;
-                                               gpios = <3 GPIO_ACTIVE_LOW>;
-                                               output-low;
-                                               line-name = "pcie1.0-w-disable";
-                                       };
-                                       pcie2_0_clkreq {
-                                               gpio-hog;
-                                               gpios = <4 GPIO_ACTIVE_LOW>;
-                                               input;
-                                               line-name = "pcie2.0-clkreq";
-                                       };
-                                       pcie2_0_w_disable {
-                                               gpio-hog;
-                                               gpios = <7 GPIO_ACTIVE_LOW>;
-                                               output-low;
-                                               line-name = "pcie2.0-w-disable";
-                                       };
-                                       usb3_ilimit {
-                                               gpio-hog;
-                                               gpios = <5 GPIO_ACTIVE_LOW>;
-                                               input;
-                                               line-name = "usb3-current-limit";
-                                       };
-                                       usb3_power {
-                                               gpio-hog;
-                                               gpios = <6 GPIO_ACTIVE_HIGH>;
-                                               output-high;
-                                               line-name = "usb3-power";
-                                       };
-                                       m2_devslp {
-                                               gpio-hog;
-                                               gpios = <11 GPIO_ACTIVE_HIGH>;
-                                               output-low;
-                                               line-name = "m.2 devslp";
-                                       };
-                                       sfp_los {
-                                               /* SFP loss of signal */
-                                               gpio-hog;
-                                               gpios = <12 GPIO_ACTIVE_HIGH>;
-                                               input;
-                                               line-name = "sfp-los";
-                                       };
-                                       sfp_tx_fault {
-                                               /* SFP laser fault */
-                                               gpio-hog;
-                                               gpios = <13 GPIO_ACTIVE_HIGH>;
-                                               input;
-                                               line-name = "sfp-tx-fault";
-                                       };
-                                       sfp_tx_disable {
-                                               /* SFP transmit disable */
-                                               gpio-hog;
-                                               gpios = <14 GPIO_ACTIVE_HIGH>;
-                                               output-low;
-                                               line-name = "sfp-tx-disable";
-                                       };
-                                       sfp_mod_def0 {
-                                               /* SFP module present */
-                                               gpio-hog;
-                                               gpios = <15 GPIO_ACTIVE_LOW>;
-                                               input;
-                                               line-name = "sfp-mod-def0";
-                                       };
-                               };
-
-                               /* The MCP3021 is 100kHz clock only */
-                               mikrobus_adc: mcp3021@4c {
-                                       compatible = "microchip,mcp3021";
-                                       reg = <0x4c>;
-                               };
-
-                               /* Also something at 0x64 */
-                       };
-
-                       i2c@11100 {
-                               /*
-                                * Routed to SFP, mikrobus, and PCIe.
-                                * SFP limits this to 100kHz, and requires
-                                *  an AT24C01A/02/04 with address pins tied
-                                *  low, which takes addresses 0x50 and 0x51.
-                                * Mikrobus doesn't specify beyond an I2C
-                                *  bus being present.
-                                * PCIe uses ARP to assign addresses, or
-                                *  0x63-0x64.
-                                */
-                               clock-frequency = <100000>;
-                               pinctrl-0 = <&clearfog_i2c1_pins>;
-                               pinctrl-names = "default";
-                               status = "okay";
-                       };
-
-                       pinctrl@18000 {
-                               clearfog_dsa0_clk_pins: clearfog-dsa0-clk-pins {
-                                       marvell,pins = "mpp46";
-                                       marvell,function = "ref";
-                               };
-                               clearfog_dsa0_pins: clearfog-dsa0-pins {
-                                       marvell,pins = "mpp23", "mpp41";
-                                       marvell,function = "gpio";
-                               };
-                               clearfog_i2c1_pins: i2c1-pins {
-                                       /* SFP, PCIe, mSATA, mikrobus */
-                                       marvell,pins = "mpp26", "mpp27";
-                                       marvell,function = "i2c1";
-                               };
-                               clearfog_sdhci_cd_pins: clearfog-sdhci-cd-pins {
-                                       marvell,pins = "mpp20";
-                                       marvell,function = "gpio";
-                               };
-                               clearfog_sdhci_pins: clearfog-sdhci-pins {
-                                       marvell,pins = "mpp21", "mpp28",
-                                                      "mpp37", "mpp38",
-                                                      "mpp39", "mpp40";
-                                       marvell,function = "sd0";
-                               };
-                               clearfog_spi1_cs_pins: spi1-cs-pins {
-                                       marvell,pins = "mpp55";
-                                       marvell,function = "spi1";
-                               };
-                               mikro_pins: mikro-pins {
-                                       /* int: mpp22 rst: mpp29 */
-                                       marvell,pins = "mpp22", "mpp29";
-                                       marvell,function = "gpio";
-                               };
-                               mikro_spi_pins: mikro-spi-pins {
-                                       marvell,pins = "mpp43";
-                                       marvell,function = "spi1";
-                               };
-                               mikro_uart_pins: mikro-uart-pins {
-                                       marvell,pins = "mpp24", "mpp25";
-                                       marvell,function = "ua1";
-                               };
-                               rear_button_pins: rear-button-pins {
-                                       marvell,pins = "mpp34";
-                                       marvell,function = "gpio";
-                               };
-                       };
-
-                       sata@a8000 {
-                               /* pinctrl? */
-                               status = "okay";
-                       };
-
-                       sata@e0000 {
-                               /* pinctrl? */
-                               status = "okay";
-                       };
-
-                       sdhci@d8000 {
-                               bus-width = <4>;
-                               cd-gpios = <&gpio0 20 GPIO_ACTIVE_LOW>;
-                               no-1-8-v;
-                               pinctrl-0 = <&clearfog_sdhci_pins
-                                            &clearfog_sdhci_cd_pins>;
-                               pinctrl-names = "default";
-                               status = "okay";
-                               vmmc = <&reg_3p3v>;
-                               wp-inverted;
-                       };
-
-                       serial@12100 {
-                               /* mikrobus uart */
-                               pinctrl-0 = <&mikro_uart_pins>;
-                               pinctrl-names = "default";
-                               status = "okay";
-                       };
-
-                       usb@58000 {
-                               /* CON3, nearest  power. */
-                               status = "okay";
-                       };
-
                        usb3@f0000 {
                                /* CON2, nearest CPU, USB2 only. */
                                status = "okay";
                        };
-
-                       usb3@f8000 {
-                               /* CON7 */
-                               status = "okay";
-                       };
                };
 
                pcie-controller {
-                       status = "okay";
-                       /*
-                        * The two PCIe units are accessible through
-                        * the mini-PCIe connectors on the board.
-                        */
-                       pcie@2,0 {
-                               /* Port 1, Lane 0. CON3, nearest power. */
-                               reset-gpios = <&expander0 1 GPIO_ACTIVE_LOW>;
-                               status = "okay";
-                       };
                        pcie@3,0 {
                                /* Port 2, Lane 0. CON2, nearest CPU. */
                                reset-gpios = <&expander0 2 GPIO_ACTIVE_LOW>;
@@ -351,6 +72,8 @@ pcie@3,0 {
        };
 
        dsa@0 {
+               status = "disabled";
+
                compatible = "marvell,dsa";
                dsa,ethernet = <&eth1>;
                dsa,mii-bus = <&mdio>;
@@ -421,26 +144,136 @@ button_0 {
        };
 };
 
-&spi1 {
+&eth1 {
+       /* ethernet@30000 */
+       fixed-link {
+               speed = <1000>;
+               full-duplex;
+       };
+};
+
+&expander0 {
        /*
-        * We don't seem to have the W25Q32 on the
-        * A1 Rev 2.0 boards, so disable SPI.
-        * CS0: W25Q32 (doesn't appear to be present)
-        * CS1:
-        * CS2: mikrobus
+        * PCA9655 GPIO expander:
+        *  0-CON3 CLKREQ#
+        *  1-CON3 PERST#
+        *  2-CON2 PERST#
+        *  3-CON3 W_DISABLE
+        *  4-CON2 CLKREQ#
+        *  5-USB3 overcurrent
+        *  6-USB3 power
+        *  7-CON2 W_DISABLE
+        *  8-JP4 P1
+        *  9-JP4 P4
+        * 10-JP4 P5
+        * 11-m.2 DEVSLP
+        * 12-SFP_LOS
+        * 13-SFP_TX_FAULT
+        * 14-SFP_TX_DISABLE
+        * 15-SFP_MOD_DEF0
         */
-       pinctrl-0 = <&spi1_pins
-                    &clearfog_spi1_cs_pins
-                    &mikro_spi_pins>;
-       pinctrl-names = "default";
+       pcie2_0_clkreq {
+               gpio-hog;
+               gpios = <4 GPIO_ACTIVE_LOW>;
+               input;
+               line-name = "pcie2.0-clkreq";
+       };
+       pcie2_0_w_disable {
+               gpio-hog;
+               gpios = <7 GPIO_ACTIVE_LOW>;
+               output-low;
+               line-name = "pcie2.0-w-disable";
+       };
+};
+
+&pinctrl {
+       clearfog_dsa0_clk_pins: clearfog-dsa0-clk-pins {
+               marvell,pins = "mpp46";
+               marvell,function = "ref";
+       };
+       clearfog_dsa0_pins: clearfog-dsa0-pins {
+               marvell,pins = "mpp23", "mpp41";
+               marvell,function = "gpio";
+       };
+       clearfog_spi1_cs_pins: spi1-cs-pins {
+               marvell,pins = "mpp55";
+               marvell,function = "spi1";
+       };
+       rear_button_pins: rear-button-pins {
+               marvell,pins = "mpp34";
+               marvell,function = "gpio";
+       };
+};
+
+&mdio {
        status = "okay";
 
-       spi-flash@0 {
+       switch@4 {
+               compatible = "marvell,mv88e6085";
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "w25q32", "jedec,spi-nor";
-               reg = <0>; /* Chip select 0 */
-               spi-max-frequency = <3000000>;
-               status = "disabled";
+               reg = <4>;
+               pinctrl-0 = <&clearfog_dsa0_clk_pins &clearfog_dsa0_pins>;
+               pinctrl-names = "default";
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               label = "lan5";
+                       };
+
+                       port@1 {
+                               reg = <1>;
+                               label = "lan4";
+                       };
+
+                       port@2 {
+                               reg = <2>;
+                               label = "lan3";
+                       };
+
+                       port@3 {
+                               reg = <3>;
+                               label = "lan2";
+                       };
+
+                       port@4 {
+                               reg = <4>;
+                               label = "lan1";
+                       };
+
+                       port@5 {
+                               reg = <5>;
+                               label = "cpu";
+                               ethernet = <&eth1>;
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+
+                       port@6 {
+                               /* 88E1512 external phy */
+                               reg = <6>;
+                               label = "lan6";
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+               };
        };
 };
+
+&spi1 {
+       /*
+        * Add SPI CS pins for clearfog:
+        * CS0: W25Q32 (not populated on uSOM)
+        * CS1:
+        * CS2: mikrobus
+        */
+       pinctrl-0 = <&spi1_pins &clearfog_spi1_cs_pins &mikro_spi_pins>;
+};
diff --git a/arch/arm/boot/dts/armada-388-clearfog.dtsi b/arch/arm/boot/dts/armada-388-clearfog.dtsi
new file mode 100644 (file)
index 0000000..0f5938b
--- /dev/null
@@ -0,0 +1,307 @@
+/*
+ * Device Tree include file for SolidRun Clearfog 88F6828 based boards
+ *
+ *  Copyright (C) 2015 Russell King
+ *
+ * This board is in development; the contents of this file work with
+ * the A1 rev 2.0 of the board, which does not represent final
+ * production board.  Things will change, don't expect this file to
+ * remain compatible info the future.
+ *
+ * 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
+ *     version 2 as published by the Free Software Foundation.
+ *
+ *     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 , WITHOUT WARRANTY OF ANY KIND
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "armada-388.dtsi"
+#include "armada-38x-solidrun-microsom.dtsi"
+
+/ {
+       aliases {
+               /* So that mvebu u-boot can update the MAC addresses */
+               ethernet1 = &eth0;
+               ethernet2 = &eth1;
+               ethernet3 = &eth2;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       reg_3p3v: regulator-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "3P3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
+
+       soc {
+               internal-regs {
+                       sata@a8000 {
+                               /* pinctrl? */
+                               status = "okay";
+                       };
+
+                       sata@e0000 {
+                               /* pinctrl? */
+                               status = "okay";
+                       };
+
+                       sdhci@d8000 {
+                               bus-width = <4>;
+                               cd-gpios = <&gpio0 20 GPIO_ACTIVE_LOW>;
+                               no-1-8-v;
+                               pinctrl-0 = <&microsom_sdhci_pins
+                                            &clearfog_sdhci_cd_pins>;
+                               pinctrl-names = "default";
+                               status = "okay";
+                               vmmc = <&reg_3p3v>;
+                               wp-inverted;
+                       };
+
+                       usb@58000 {
+                               /* CON3, nearest  power. */
+                               status = "okay";
+                       };
+
+                       usb3@f8000 {
+                               /* CON7 */
+                               status = "okay";
+                       };
+               };
+
+               pcie-controller {
+                       status = "okay";
+                       /*
+                        * The two PCIe units are accessible through
+                        * the mini-PCIe connectors on the board.
+                        */
+                       pcie@2,0 {
+                               /* Port 1, Lane 0. CON3, nearest power. */
+                               reset-gpios = <&expander0 1 GPIO_ACTIVE_LOW>;
+                               status = "okay";
+                       };
+               };
+       };
+};
+
+&eth1 {
+       /* ethernet@30000 */
+       bm,pool-long = <2>;
+       bm,pool-short = <1>;
+       buffer-manager = <&bm>;
+       phy-mode = "sgmii";
+       status = "okay";
+};
+
+&eth2 {
+       /* ethernet@34000 */
+       bm,pool-long = <3>;
+       bm,pool-short = <1>;
+       buffer-manager = <&bm>;
+       phy-mode = "sgmii";
+       status = "okay";
+
+       fixed-link {
+               speed = <1000>;
+               full-duplex;
+       };
+};
+
+&i2c0 {
+       /* Is there anything on this? */
+       clock-frequency = <100000>;
+       pinctrl-0 = <&i2c0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+
+       /*
+        * PCA9655 GPIO expander, up to 1MHz clock.
+        *  0-CON3 CLKREQ#
+        *  1-CON3 PERST#
+        *  2-
+        *  3-CON3 W_DISABLE
+        *  4-
+        *  5-USB3 overcurrent
+        *  6-USB3 power
+        *  7-
+        *  8-JP4 P1
+        *  9-JP4 P4
+        * 10-JP4 P5
+        * 11-m.2 DEVSLP
+        * 12-SFP_LOS
+        * 13-SFP_TX_FAULT
+        * 14-SFP_TX_DISABLE
+        * 15-SFP_MOD_DEF0
+        */
+       expander0: gpio-expander@20 {
+               /*
+                * This is how it should be:
+                * compatible = "onnn,pca9655", "nxp,pca9555";
+                * but you can't do this because of the way I2C works.
+                */
+               compatible = "nxp,pca9555";
+               gpio-controller;
+               #gpio-cells = <2>;
+               reg = <0x20>;
+
+               pcie1_0_clkreq {
+                       gpio-hog;
+                       gpios = <0 GPIO_ACTIVE_LOW>;
+                       input;
+                       line-name = "pcie1.0-clkreq";
+               };
+               pcie1_0_w_disable {
+                       gpio-hog;
+                       gpios = <3 GPIO_ACTIVE_LOW>;
+                       output-low;
+                       line-name = "pcie1.0-w-disable";
+               };
+               usb3_ilimit {
+                       gpio-hog;
+                       gpios = <5 GPIO_ACTIVE_LOW>;
+                       input;
+                       line-name = "usb3-current-limit";
+               };
+               usb3_power {
+                       gpio-hog;
+                       gpios = <6 GPIO_ACTIVE_HIGH>;
+                       output-high;
+                       line-name = "usb3-power";
+               };
+               m2_devslp {
+                       gpio-hog;
+                       gpios = <11 GPIO_ACTIVE_HIGH>;
+                       output-low;
+                       line-name = "m.2 devslp";
+               };
+               sfp_los {
+                       /* SFP loss of signal */
+                       gpio-hog;
+                       gpios = <12 GPIO_ACTIVE_HIGH>;
+                       input;
+                       line-name = "sfp-los";
+               };
+               sfp_tx_fault {
+                       /* SFP laser fault */
+                       gpio-hog;
+                       gpios = <13 GPIO_ACTIVE_HIGH>;
+                       input;
+                       line-name = "sfp-tx-fault";
+               };
+               sfp_tx_disable {
+                       /* SFP transmit disable */
+                       gpio-hog;
+                       gpios = <14 GPIO_ACTIVE_HIGH>;
+                       output-low;
+                       line-name = "sfp-tx-disable";
+               };
+               sfp_mod_def0 {
+                       /* SFP module present */
+                       gpio-hog;
+                       gpios = <15 GPIO_ACTIVE_LOW>;
+                       input;
+                       line-name = "sfp-mod-def0";
+               };
+       };
+
+       /* The MCP3021 is 100kHz clock only */
+       mikrobus_adc: mcp3021@4c {
+               compatible = "microchip,mcp3021";
+               reg = <0x4c>;
+       };
+
+       /* Also something at 0x64 */
+};
+
+&i2c1 {
+       /*
+        * Routed to SFP, mikrobus, and PCIe.
+        * SFP limits this to 100kHz, and requires an AT24C01A/02/04 with
+        *  address pins tied low, which takes addresses 0x50 and 0x51.
+        * Mikrobus doesn't specify beyond an I2C bus being present.
+        * PCIe uses ARP to assign addresses, or 0x63-0x64.
+        */
+       clock-frequency = <100000>;
+       pinctrl-0 = <&clearfog_i2c1_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&pinctrl {
+       clearfog_i2c1_pins: i2c1-pins {
+               /* SFP, PCIe, mSATA, mikrobus */
+               marvell,pins = "mpp26", "mpp27";
+               marvell,function = "i2c1";
+       };
+       clearfog_sdhci_cd_pins: clearfog-sdhci-cd-pins {
+               marvell,pins = "mpp20";
+               marvell,function = "gpio";
+       };
+       mikro_pins: mikro-pins {
+               /* int: mpp22 rst: mpp29 */
+               marvell,pins = "mpp22", "mpp29";
+               marvell,function = "gpio";
+       };
+       mikro_spi_pins: mikro-spi-pins {
+               marvell,pins = "mpp43";
+               marvell,function = "spi1";
+       };
+       mikro_uart_pins: mikro-uart-pins {
+               marvell,pins = "mpp24", "mpp25";
+               marvell,function = "ua1";
+       };
+};
+
+&spi1 {
+       /*
+        * Add SPI CS pins for clearfog:
+        * CS0: W25Q32 (not populated on uSOM)
+        * CS1: PIC microcontroller (Pro models)
+        * CS2: mikrobus
+        */
+       pinctrl-0 = <&spi1_pins &mikro_spi_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
+&uart1 {
+       /* mikrobus uart */
+       pinctrl-0 = <&mikro_uart_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
index de26c762239cb5c41dc11d708c8c979a3cb30219..1ac923826445495edd6f725b44ce9c2134a5382f 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index dd3462ddb6b996401d06c4b3cf36eb6a93a46a34..af82f275eac248791a2286b49c87bfd7c536db08 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 8c9842237b60058bbd1b96de2adb8e99d4e4c053..9b508a8161f53f12344196619b42b26c49fdbe9b 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -62,45 +62,6 @@ MBUS_ID(0x09, 0x15) 0 0xf1110000 0x10000
                          MBUS_ID(0x0c, 0x04) 0 0xf1200000 0x100000>;
 
                internal-regs {
-                       ethernet@70000 {
-                               pinctrl-0 = <&ge0_rgmii_pins>;
-                               pinctrl-names = "default";
-                               phy = <&phy_dedicated>;
-                               phy-mode = "rgmii-id";
-                               buffer-manager = <&bm>;
-                               bm,pool-long = <0>;
-                               bm,pool-short = <1>;
-                               status = "okay";
-                       };
-
-                       mdio@72004 {
-                               /*
-                                * Add the phy clock here, so the phy can be
-                                * accessed to read its IDs prior to binding
-                                * with the driver.
-                                */
-                               pinctrl-0 = <&mdio_pins &microsom_phy_clk_pins>;
-                               pinctrl-names = "default";
-
-                               phy_dedicated: ethernet-phy@0 {
-                                       /*
-                                        * Annoyingly, the marvell phy driver
-                                        * configures the LED register, rather
-                                        * than preserving reset-loaded setting.
-                                        * We undo that rubbish here.
-                                        */
-                                       marvell,reg-init = <3 16 0 0x101e>;
-                                       reg = <0>;
-                               };
-                       };
-
-                       pinctrl@18000 {
-                               microsom_phy_clk_pins: microsom-phy-clk-pins {
-                                       marvell,pins = "mpp45";
-                                       marvell,function = "ref";
-                               };
-                       };
-
                        rtc@a3800 {
                                /*
                                 * If the rtc doesn't work, run "date reset"
@@ -108,21 +69,78 @@ rtc@a3800 {
                                 */
                                status = "okay";
                        };
+               };
+       };
+};
 
-                       serial@12000 {
-                               pinctrl-0 = <&uart0_pins>;
-                               pinctrl-names = "default";
-                               status = "okay";
-                       };
+&bm {
+       status = "okay";
+};
 
-                       bm@c8000 {
-                               status = "okay";
-                       };
-               };
+&bm_bppi {
+       status = "okay";
+};
 
-               bm-bppi {
-                       status = "okay";
-               };
+&eth0 {
+       /* ethernet@70000 */
+       pinctrl-0 = <&ge0_rgmii_pins>;
+       pinctrl-names = "default";
+       phy = <&phy_dedicated>;
+       phy-mode = "rgmii-id";
+       buffer-manager = <&bm>;
+       bm,pool-long = <0>;
+       bm,pool-short = <1>;
+       status = "okay";
+};
+
+&mdio {
+       /*
+        * Add the phy clock here, so the phy can be accessed to read its
+        * IDs prior to binding with the driver.
+        */
+       pinctrl-0 = <&mdio_pins &microsom_phy_clk_pins>;
+       pinctrl-names = "default";
+
+       phy_dedicated: ethernet-phy@0 {
+               /*
+                * Annoyingly, the marvell phy driver configures the LED
+                * register, rather than preserving reset-loaded setting.
+                * We undo that rubbish here.
+                */
+               marvell,reg-init = <3 16 0 0x101e>;
+               reg = <0>;
+       };
+};
+
+&pinctrl {
+       microsom_phy_clk_pins: microsom-phy-clk-pins {
+               marvell,pins = "mpp45";
+               marvell,function = "ref";
+       };
+       /* Optional eMMC */
+       microsom_sdhci_pins: microsom-sdhci-pins {
+               marvell,pins = "mpp21", "mpp28", "mpp37",
+                              "mpp38", "mpp39", "mpp40";
+               marvell,function = "sd0";
+       };
+};
+
+&spi1 {
+       /* The microsom has an optional W25Q32 on board, connected to CS0 */
+       pinctrl-0 = <&spi1_pins>;
 
+       w25q32: spi-flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "w25q32", "jedec,spi-nor";
+               reg = <0>; /* Chip select 0 */
+               spi-max-frequency = <3000000>;
+               status = "disabled";
        };
 };
+
+&uart0 {
+       pinctrl-0 = <&uart0_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
index 7450e9fea45d2defef1dbbabf1d76865466f50df..79b767507eab62d9897480c30b48b278d71bd13a 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 34e279d973c8415de154b30e10870ca6d0fbca0b..2afed2ce47412dce518785bdc1092c27b08766fb 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 6cd18d8aaac795606f06862a107c7b06ec700bce..0d8a54ad007ccbaa9d391d7ec70de65d69db74f3 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index ab5dc49f2bff6281d93c146d209512a0cc562bb0..bf7e4335e36a6fb7550e3310d4f501ca5391728f 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 268c8349c884fd02f8d41af6ba274fdca81563ec..e8604281c3c9916522d496937c73c1b31c6f22c9 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 234a99891a2924e89615c6562211b853a96e21a5..1f4e113fc82121ef88f7e13a73f28c3de530cc04 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index de171baffcf6e0ff8c2eb779be0dd34dc8dbc8e8..60fbfd5907c71049e75935cba303f795be38ad72 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
diff --git a/arch/arm/boot/dts/armada-xp-98dx3236.dtsi b/arch/arm/boot/dts/armada-xp-98dx3236.dtsi
new file mode 100644 (file)
index 0000000..f6a03dc
--- /dev/null
@@ -0,0 +1,254 @@
+/*
+ * Device Tree Include file for Marvell 98dx3236 family SoC
+ *
+ * Copyright (C) 2016 Allied Telesis Labs
+ *
+ * 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.
+ *
+ * Contains definitions specific to the 98dx3236 SoC that are not
+ * common to all Armada XP SoCs.
+ */
+
+#include "armada-xp.dtsi"
+
+/ {
+       model = "Marvell 98DX3236 SoC";
+       compatible = "marvell,armadaxp-98dx3236", "marvell,armadaxp", "marvell,armada-370-xp";
+
+       aliases {
+               gpio0 = &gpio0;
+               gpio1 = &gpio1;
+               gpio2 = &gpio2;
+       };
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               enable-method = "marvell,98dx3236-smp";
+
+               cpu@0 {
+                       device_type = "cpu";
+                       compatible = "marvell,sheeva-v7";
+                       reg = <0>;
+                       clocks = <&cpuclk 0>;
+                       clock-latency = <1000000>;
+               };
+       };
+
+       soc {
+               ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000
+                         MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000
+                         MBUS_ID(0x01, 0x2f) 0 0 0xf0000000 0x1000000
+                         MBUS_ID(0x03, 0x00) 0 0 0xa8000000 0x4000000
+                         MBUS_ID(0x08, 0x00) 0 0 0xac000000 0x100000>;
+
+               /*
+                * 98DX3236 has 1 x1 PCIe unit Gen2.0
+                */
+               pciec: pcie-controller@82000000 {
+                       compatible = "marvell,armada-xp-pcie";
+                       status = "disabled";
+                       device_type = "pci";
+
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+
+                       msi-parent = <&mpic>;
+                       bus-range = <0x00 0xff>;
+
+                       ranges =
+                              <0x82000000 0 0x40000 MBUS_ID(0xf0, 0x01) 0x40000 0 0x00002000   /* Port 0.0 registers */
+                               0x82000000 0x1 0       MBUS_ID(0x04, 0xe8) 0 1 0 /* Port 0.0 MEM */
+                               0x81000000 0x1 0       MBUS_ID(0x04, 0xe0) 0 1 0 /* Port 0.0 IO  */
+                               0x82000000 0x2 0       MBUS_ID(0x04, 0xd8) 0 1 0 /* Port 0.1 MEM */>;
+
+                       pcie1: pcie@1,0 {
+                               device_type = "pci";
+                               assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
+                               reg = <0x0800 0 0 0 0>;
+                               #address-cells = <3>;
+                               #size-cells = <2>;
+                               #interrupt-cells = <1>;
+                               ranges = <0x82000000 0 0 0x82000000 0x1 0 1 0
+                                         0x81000000 0 0 0x81000000 0x1 0 1 0>;
+                               interrupt-map-mask = <0 0 0 0>;
+                               interrupt-map = <0 0 0 0 &mpic 58>;
+                               marvell,pcie-port = <0>;
+                               marvell,pcie-lane = <0>;
+                               clocks = <&gateclk 5>;
+                               status = "disabled";
+                       };
+               };
+
+               internal-regs {
+                       coreclk: mvebu-sar@18230 {
+                               compatible = "marvell,mv98dx3236-core-clock";
+                       };
+
+                       cpuclk: clock-complex@18700 {
+                               compatible = "marvell,mv98dx3236-cpu-clock";
+                       };
+
+                       corediv-clock@18740 {
+                               status = "disabled";
+                       };
+
+                       xor@60900 {
+                               status = "disabled";
+                       };
+
+                       crypto@90000 {
+                               status = "disabled";
+                       };
+
+                       xor@f0900 {
+                               status = "disabled";
+                       };
+
+                       xor@f0800 {
+                               compatible = "marvell,orion-xor";
+                               reg = <0xf0800 0x100
+                                      0xf0a00 0x100>;
+                               clocks = <&gateclk 22>;
+                               status = "okay";
+
+                               xor10 {
+                                       interrupts = <51>;
+                                       dmacap,memcpy;
+                                       dmacap,xor;
+                               };
+                               xor11 {
+                                       interrupts = <52>;
+                                       dmacap,memcpy;
+                                       dmacap,xor;
+                                       dmacap,memset;
+                               };
+                       };
+
+                       gpio0: gpio@18100 {
+                               compatible = "marvell,orion-gpio";
+                               reg = <0x18100 0x40>;
+                               ngpios = <32>;
+                               gpio-controller;
+                               #gpio-cells = <2>;
+                               interrupt-controller;
+                               #interrupt-cells = <2>;
+                               interrupts = <82>, <83>, <84>, <85>;
+                       };
+
+                       /* does not exist */
+                       gpio1: gpio@18140 {
+                               compatible = "marvell,orion-gpio";
+                               reg = <0x18140 0x40>;
+                               status = "disabled";
+                       };
+
+                       gpio2: gpio@18180 { /* rework some properties */
+                               compatible = "marvell,orion-gpio";
+                               reg = <0x18180 0x40>;
+                               ngpios = <1>; /* only gpio #32 */
+                               gpio-controller;
+                               #gpio-cells = <2>;
+                               interrupt-controller;
+                               #interrupt-cells = <2>;
+                               interrupts = <87>;
+                       };
+
+                       nand: nand@d0000 {
+                               clocks = <&dfx_coredivclk 0>;
+                       };
+               };
+
+               dfxr: dfx-registers@ac000000 {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0 MBUS_ID(0x08, 0x00) 0 0x100000>;
+
+                       dfx_coredivclk: corediv-clock@f8268 {
+                               compatible = "marvell,mv98dx3236-corediv-clock";
+                               reg = <0xf8268 0xc>;
+                               #clock-cells = <1>;
+                               clocks = <&mainpll>;
+                               clock-output-names = "nand";
+                       };
+
+                       dfx: dfx@0 {
+                               compatible = "marvell,dfx-server";
+                               reg = <0 0x100000>;
+                       };
+               };
+
+               switch: switch@a8000000 {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0 MBUS_ID(0x03, 0x00) 0 0x100000>;
+
+                       pp0: packet-processor@0 {
+                               compatible = "marvell,prestera-98dx3236";
+                               reg = <0 0x4000000>;
+                               interrupts = <33>, <34>, <35>;
+                               dfx = <&dfx>;
+                       };
+               };
+       };
+};
+
+&pinctrl {
+       compatible = "marvell,98dx3236-pinctrl";
+
+       spi0_pins: spi0-pins {
+               marvell,pins = "mpp0", "mpp1",
+                              "mpp2", "mpp3";
+               marvell,function = "spi0";
+       };
+};
+
+&sdio {
+       status = "disabled";
+};
+
+&crypto_sram0 {
+       status = "disabled";
+};
+
+&crypto_sram1 {
+       status = "disabled";
+};
diff --git a/arch/arm/boot/dts/armada-xp-98dx3336.dtsi b/arch/arm/boot/dts/armada-xp-98dx3336.dtsi
new file mode 100644 (file)
index 0000000..e1580af
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Device Tree Include file for Marvell 98dx3336 family SoC
+ *
+ * Copyright (C) 2016 Allied Telesis Labs
+ *
+ * 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.
+ *
+ * Contains definitions specific to the 98dx3236 SoC that are not
+ * common to all Armada XP SoCs.
+ */
+
+#include "armada-xp-98dx3236.dtsi"
+
+/ {
+       model = "Marvell 98DX3336 SoC";
+       compatible = "marvell,armadaxp-98dx3336", "marvell,armadaxp-98dx3236", "marvell,armadaxp", "marvell,armada-370-xp";
+
+       cpus {
+               cpu@1 {
+                       device_type = "cpu";
+                       compatible = "marvell,sheeva-v7";
+                       reg = <1>;
+                       clocks = <&cpuclk 1>;
+                       clock-latency = <1000000>;
+               };
+       };
+
+       soc {
+               internal-regs {
+                       resume@20980 {
+                               compatible = "marvell,98dx3336-resume-ctrl";
+                               reg = <0x20980 0x10>;
+                       };
+               };
+       };
+};
+
+&pp0 {
+       compatible = "marvell,prestera-98dx3336";
+};
diff --git a/arch/arm/boot/dts/armada-xp-98dx4251.dtsi b/arch/arm/boot/dts/armada-xp-98dx4251.dtsi
new file mode 100644 (file)
index 0000000..4b0533a
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Device Tree Include file for Marvell 98dx4521 family SoC
+ *
+ * Copyright (C) 2016 Allied Telesis Labs
+ *
+ * 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.
+ *
+ * Contains definitions specific to the 98dx4521 SoC that are not
+ * common to all Armada XP SoCs.
+ */
+
+#include "armada-xp-98dx3236.dtsi"
+
+/ {
+       model = "Marvell 98DX4251 SoC";
+       compatible = "marvell,armadaxp-98dx4521", "marvell,armadaxp-98dx3236", "marvell,armadaxp", "marvell,armada-370-xp";
+
+       cpus {
+               cpu@1 {
+                       device_type = "cpu";
+                       compatible = "marvell,sheeva-v7";
+                       reg = <1>;
+                       clocks = <&cpuclk 1>;
+                       clock-latency = <1000000>;
+               };
+       };
+
+       soc {
+               internal-regs {
+                       resume@20980 {
+                               compatible = "marvell,98dx3336-resume-ctrl";
+                               reg = <0x20980 0x10>;
+                       };
+               };
+       };
+};
+
+&sdio {
+       status = "okay";
+};
+
+&pinctrl {
+       compatible = "marvell,98dx4251-pinctrl";
+
+       sdio_pins: sdio-pins {
+               marvell,pins = "mpp5", "mpp6", "mpp7",
+                              "mpp8", "mpp9", "mpp10";
+               marvell,function = "sd0";
+       };
+};
+
+&pp0 {
+       compatible = "marvell,prestera-98dx4251";
+};
index 1e1fc4fccbadab268569c1aa5e4bed44cdd3102b..d0c6a01f48a6aab0cc420e897105b0ec66cc8a32 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
diff --git a/arch/arm/boot/dts/armada-xp-db-dxbc2.dts b/arch/arm/boot/dts/armada-xp-db-dxbc2.dts
new file mode 100644 (file)
index 0000000..a813080
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * Device Tree file for DB-DXBC2 board
+ *
+ * Copyright (C) 2016 Allied Telesis Labs
+ *
+ * Based on armada-xp-db.dts
+ *
+ * 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.
+ *
+ * Note: this Device Tree assumes that the bootloader has remapped the
+ * internal registers to 0xf1000000 (instead of the default
+ * 0xd0000000). The 0xf1000000 is the default used by the recent,
+ * DT-capable, U-Boot bootloaders provided by Marvell. Some earlier
+ * boards were delivered with an older version of the bootloader that
+ * left internal registers mapped at 0xd0000000. If you are in this
+ * situation, you should either update your bootloader (preferred
+ * solution) or the below Device Tree should be adjusted.
+ */
+
+/dts-v1/;
+#include "armada-xp-98dx4251.dtsi"
+
+/ {
+       model = "Marvell Bobcat2 Evaluation Board";
+       compatible = "marvell,db-dxbc2", "marvell,armadaxp-98dx4251", "marvell,armadaxp", "marvell,armada-370-xp";
+
+       chosen {
+               bootargs = "console=ttyS0,115200 earlyprintk";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = <0 0x00000000 0 0x20000000>; /* 512 MB */
+       };
+
+};
+
+&devbus_bootcs {
+       status = "okay";
+
+       /* Device Bus parameters are required */
+
+       /* Read parameters */
+       devbus,bus-width    = <16>;
+       devbus,turn-off-ps  = <60000>;
+       devbus,badr-skew-ps = <0>;
+       devbus,acc-first-ps = <124000>;
+       devbus,acc-next-ps  = <248000>;
+       devbus,rd-setup-ps  = <0>;
+       devbus,rd-hold-ps   = <0>;
+
+       /* Write parameters */
+       devbus,sync-enable = <0>;
+       devbus,wr-high-ps  = <60000>;
+       devbus,wr-low-ps   = <60000>;
+       devbus,ale-wr-ps   = <60000>;
+};
+
+&i2c0 {
+       clock-frequency = <100000>;
+       status = "okay";
+};
+
+&uart0 {
+       status = "okay";
+};
+
+&uart1 {
+       status = "okay";
+};
+
+&nand {
+       status = "okay";
+       num-cs = <1>;
+       marvell,nand-keep-config;
+       marvell,nand-enable-arbiter;
+       nand-on-flash-bbt;
+       nand-ecc-strength = <4>;
+       nand-ecc-step-size = <512>;
+};
+
+&sdio {
+       pinctrl-0 = <&sdio_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+       /* No CD or WP GPIOs */
+       broken-cd;
+};
+
+&spi0 {
+       status = "okay";
+
+       spi-flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "m25p64";
+               reg = <0>; /* Chip select 0 */
+               spi-max-frequency = <20000000>;
+               m25p,fast-read;
+
+               partition@u-boot {
+                       reg = <0x00000000 0x00100000>;
+                       label = "u-boot";
+               };
+               partition@u-boot-env {
+                       reg = <0x00100000 0x00040000>;
+                       label = "u-boot-env";
+               };
+               partition@unused {
+                       reg = <0x00140000 0x00ec0000>;
+                       label = "unused";
+               };
+
+       };
+};
diff --git a/arch/arm/boot/dts/armada-xp-db-xc3-24g4xg.dts b/arch/arm/boot/dts/armada-xp-db-xc3-24g4xg.dts
new file mode 100644 (file)
index 0000000..4e07cb6
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+ * Device Tree file for DB-XC3-24G4XG board
+ *
+ * Copyright (C) 2016 Allied Telesis Labs
+ *
+ * Based on armada-xp-db.dts
+ *
+ * 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.
+ *
+ * Note: this Device Tree assumes that the bootloader has remapped the
+ * internal registers to 0xf1000000 (instead of the default
+ * 0xd0000000). The 0xf1000000 is the default used by the recent,
+ * DT-capable, U-Boot bootloaders provided by Marvell. Some earlier
+ * boards were delivered with an older version of the bootloader that
+ * left internal registers mapped at 0xd0000000. If you are in this
+ * situation, you should either update your bootloader (preferred
+ * solution) or the below Device Tree should be adjusted.
+ */
+
+/dts-v1/;
+#include "armada-xp-98dx3336.dtsi"
+
+/ {
+       model = "DB-XC3-24G4XG";
+       compatible = "marvell,db-xc3-24g4xg", "marvell,armadaxp-98dx3336", "marvell,armadaxp", "marvell,armada-370-xp";
+
+       chosen {
+               bootargs = "console=ttyS0,115200 earlyprintk";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = <0 0x00000000 0 0x40000000>; /* 1 GB */
+       };
+};
+
+&devbus_bootcs {
+       status = "okay";
+
+       /* Device Bus parameters are required */
+
+       /* Read parameters */
+       devbus,bus-width    = <16>;
+       devbus,turn-off-ps  = <60000>;
+       devbus,badr-skew-ps = <0>;
+       devbus,acc-first-ps = <124000>;
+       devbus,acc-next-ps  = <248000>;
+       devbus,rd-setup-ps  = <0>;
+       devbus,rd-hold-ps   = <0>;
+
+       /* Write parameters */
+       devbus,sync-enable = <0>;
+       devbus,wr-high-ps  = <60000>;
+       devbus,wr-low-ps   = <60000>;
+       devbus,ale-wr-ps   = <60000>;
+};
+
+&uart0 {
+       status = "okay";
+};
+
+&uart1 {
+       status = "okay";
+};
+
+&i2c0 {
+       clock-frequency = <100000>;
+       status = "okay";
+};
+
+&nand {
+       status = "okay";
+       num-cs = <1>;
+       marvell,nand-keep-config;
+       marvell,nand-enable-arbiter;
+       nand-on-flash-bbt;
+       nand-ecc-strength = <4>;
+       nand-ecc-step-size = <512>;
+};
+
+&spi0 {
+       status = "okay";
+
+       spi-flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "m25p64";
+               reg = <0>; /* Chip select 0 */
+               spi-max-frequency = <20000000>;
+               m25p,fast-read;
+
+               partition@u-boot {
+                       reg = <0x00000000 0x00100000>;
+                       label = "u-boot";
+               };
+               partition@u-boot-env {
+                       reg = <0x00100000 0x00040000>;
+                       label = "u-boot-env";
+               };
+               partition@unused {
+                       reg = <0x00140000 0x00ec0000>;
+                       label = "unused";
+               };
+
+       };
+};
index 44a724d39dbe4b4ec50b17d73e7ee144bbf9ad49..a33974254d8cddb36ee6538bc1eec767c0ce756d 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 72cb8fa377e3ec4eb6dad1806058fac479c99e04..d62bf7bea1df4db579d8d22311d40ef8f0eaa25e 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index d848ae9007db1efe60680649e4d85b3be0796acc..ce0afba1ce580dfb1e21c33d0aed88c07e5cbd74 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 83ac884c0f8ae52fc2f564bfcf2cc31c68c1f7e2..42ea8764814cfb5278245ea608b4a39fb86000cb 100644 (file)
@@ -302,6 +302,8 @@ gpio_fan {
        };
 
        dsa {
+               status = "disabled";
+
                compatible = "marvell,dsa";
                #address-cells = <2>;
                #size-cells = <0>;
@@ -398,3 +400,54 @@ spi-flash@0 {
                spi-max-frequency = <40000000>;
        };
 };
+
+&mdio {
+       status = "okay";
+
+       switch@0 {
+               compatible = "marvell,mv88e6085";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               label = "lan4";
+                       };
+
+                       port@1 {
+                               reg = <1>;
+                               label = "lan3";
+                       };
+
+                       port@2 {
+                               reg = <2>;
+                               label = "lan2";
+                       };
+
+                       port@3 {
+                               reg = <3>;
+                               label = "lan1";
+                       };
+
+                       port@4 {
+                               reg = <4>;
+                               label = "internet";
+                       };
+
+                       port@5 {
+                               reg = <5>;
+                               label = "cpu";
+                               ethernet = <&eth0>;
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+               };
+       };
+};
index 16277380e7147e41982f7a3bd293978c55d4bb3a..977f6b3fc1f80ff70b14ff4b4d9b3980cc3b366c 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 05c164b5786d1983baf92490bc6f46cbdb93e629..07c5090ecd29e7c23dc2d5bbda16948ceb389c40 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 07894b0d3e59ceba584d1d4ef70c51228ecfbc11..64e936ae7b22d66b3d565f72be4aeec9e722e3b5 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 775bee53ce8604598657d6abb65c37dd93311c6f..d1383dde43eb91511a674f37024d7be07be92ac8 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index a2f0e789465d0b9016a099acadfbe746c8bf80a7..40c6fe21e720c844fd87a626cfb1524561300644 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index b577c9fb03a45aa2f0f256ca90fab4b16a67a56e..66b78131a038b973abb8d0b81b1a0961aac33c83 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index e803da03146a648654d1a51408b1c4f71db595a8..d8e05bab0cee5104e74edb5ad0d8635d07079653 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 5274e4ff5d621ad8e226126071a7f4f453042ff2..fa1e881266ac76a5085bef2af9fb1faf3e5dfccb 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 1b7a5ff0e533f6b19f66bc806f621b1fe9421ce9..d967603dade8f20ab4bbdbde2b808a615ee78646 100644 (file)
@@ -23,3 +23,17 @@ memory {
 &uart5 {
        status = "okay";
 };
+
+&mac0 {
+       status = "okay";
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_rgmii1_default &pinctrl_mdio1_default>;
+};
+
+&mac1 {
+       status = "okay";
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_rgmii2_default &pinctrl_mdio2_default>;
+};
index cc5fcf2940bf73a6d6147c06f471214ea0c5dcc6..1d2fc1e1dc291547bdbbe94cde3a1bf524aac3c8 100644 (file)
@@ -12,14 +12,34 @@ aliases {
 
        chosen {
                stdout-path = &uart5;
-               bootargs = "console=ttyS4,38400 earlyprintk";
+               bootargs = "console=ttyS4,115200 earlyprintk";
        };
 
        memory {
-               reg = <0x40000000 0x10000000>;
+               reg = <0x40000000 0x20000000>;
+       };
+
+       reserved-memory {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               vga_memory: framebuffer@5f000000 {
+                       no-map;
+                       reg = <0x5f000000 0x01000000>; /* 16M */
+               };
        };
 };
 
 &uart5 {
        status = "okay";
 };
+
+&mac0 {
+       status = "okay";
+
+       use-ncsi;
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_rmii1_default>;
+};
diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts b/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts
new file mode 100644 (file)
index 0000000..7a3b2b5
--- /dev/null
@@ -0,0 +1,45 @@
+/dts-v1/;
+
+#include "aspeed-g5.dtsi"
+
+/ {
+       model = "Romulus BMC";
+       compatible = "ibm,romulus-bmc", "aspeed,ast2500";
+
+       aliases {
+               serial4 = &uart5;
+       };
+
+       chosen {
+               stdout-path = &uart5;
+               bootargs = "console=ttyS4,115200 earlyprintk";
+       };
+
+       memory {
+               reg = <0x80000000 0x40000000>;
+       };
+
+       reserved-memory {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               vga_memory: framebuffer@bf000000 {
+                       no-map;
+                       reg = <0xbf000000 0x01000000>; /* 16M */
+               };
+       };
+};
+
+&uart5 {
+       status = "okay";
+};
+
+&mac0 {
+       status = "okay";
+
+       use-ncsi;
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_rmii1_default>;
+};
index 22dee5937d5c264c4a01afcc748952c61168c594..0b4932cc02a8d8bb66165e40c11113647b92633f 100644 (file)
@@ -41,6 +41,22 @@ vic: interrupt-controller@1e6c0080 {
                        reg = <0x1e6c0080 0x80>;
                };
 
+               mac0: ethernet@1e660000 {
+                       compatible = "faraday,ftgmac100";
+                       reg = <0x1e660000 0x180>;
+                       interrupts = <2>;
+                       no-hw-checksum;
+                       status = "disabled";
+               };
+
+               mac1: ethernet@1e680000 {
+                       compatible = "faraday,ftgmac100";
+                       reg = <0x1e680000 0x180>;
+                       interrupts = <3>;
+                       no-hw-checksum;
+                       status = "disabled";
+               };
+
                apb {
                        compatible = "simple-bus";
                        #address-cells = <1>;
@@ -54,6 +70,756 @@ clk_hpll: clk_hpll@1e6e2070 {
                                clocks = <&clk_clkin>;
                        };
 
+                       syscon: syscon@1e6e2000 {
+                               compatible = "aspeed,g4-scu", "syscon", "simple-mfd";
+                               reg = <0x1e6e2000 0x1a8>;
+
+                               pinctrl: pinctrl {
+                                       compatible = "aspeed,g4-pinctrl";
+
+                                       pinctrl_acpi_default: acpi_default {
+                                               function = "ACPI";
+                                               groups = "ACPI";
+                                       };
+
+                                       pinctrl_adc0_default: adc0_default {
+                                               function = "ADC0";
+                                               groups = "ADC0";
+                                       };
+
+                                       pinctrl_adc1_default: adc1_default {
+                                               function = "ADC1";
+                                               groups = "ADC1";
+                                       };
+
+                                       pinctrl_adc10_default: adc10_default {
+                                               function = "ADC10";
+                                               groups = "ADC10";
+                                       };
+
+                                       pinctrl_adc11_default: adc11_default {
+                                               function = "ADC11";
+                                               groups = "ADC11";
+                                       };
+
+                                       pinctrl_adc12_default: adc12_default {
+                                               function = "ADC12";
+                                               groups = "ADC12";
+                                       };
+
+                                       pinctrl_adc13_default: adc13_default {
+                                               function = "ADC13";
+                                               groups = "ADC13";
+                                       };
+
+                                       pinctrl_adc14_default: adc14_default {
+                                               function = "ADC14";
+                                               groups = "ADC14";
+                                       };
+
+                                       pinctrl_adc15_default: adc15_default {
+                                               function = "ADC15";
+                                               groups = "ADC15";
+                                       };
+
+                                       pinctrl_adc2_default: adc2_default {
+                                               function = "ADC2";
+                                               groups = "ADC2";
+                                       };
+
+                                       pinctrl_adc3_default: adc3_default {
+                                               function = "ADC3";
+                                               groups = "ADC3";
+                                       };
+
+                                       pinctrl_adc4_default: adc4_default {
+                                               function = "ADC4";
+                                               groups = "ADC4";
+                                       };
+
+                                       pinctrl_adc5_default: adc5_default {
+                                               function = "ADC5";
+                                               groups = "ADC5";
+                                       };
+
+                                       pinctrl_adc6_default: adc6_default {
+                                               function = "ADC6";
+                                               groups = "ADC6";
+                                       };
+
+                                       pinctrl_adc7_default: adc7_default {
+                                               function = "ADC7";
+                                               groups = "ADC7";
+                                       };
+
+                                       pinctrl_adc8_default: adc8_default {
+                                               function = "ADC8";
+                                               groups = "ADC8";
+                                       };
+
+                                       pinctrl_adc9_default: adc9_default {
+                                               function = "ADC9";
+                                               groups = "ADC9";
+                                       };
+
+                                       pinctrl_bmcint_default: bmcint_default {
+                                               function = "BMCINT";
+                                               groups = "BMCINT";
+                                       };
+
+                                       pinctrl_ddcclk_default: ddcclk_default {
+                                               function = "DDCCLK";
+                                               groups = "DDCCLK";
+                                       };
+
+                                       pinctrl_ddcdat_default: ddcdat_default {
+                                               function = "DDCDAT";
+                                               groups = "DDCDAT";
+                                       };
+
+                                       pinctrl_extrst_default: extrst_default {
+                                               function = "EXTRST";
+                                               groups = "EXTRST";
+                                       };
+
+                                       pinctrl_flack_default: flack_default {
+                                               function = "FLACK";
+                                               groups = "FLACK";
+                                       };
+
+                                       pinctrl_flbusy_default: flbusy_default {
+                                               function = "FLBUSY";
+                                               groups = "FLBUSY";
+                                       };
+
+                                       pinctrl_flwp_default: flwp_default {
+                                               function = "FLWP";
+                                               groups = "FLWP";
+                                       };
+
+                                       pinctrl_gpid_default: gpid_default {
+                                               function = "GPID";
+                                               groups = "GPID";
+                                       };
+
+                                       pinctrl_gpid0_default: gpid0_default {
+                                               function = "GPID0";
+                                               groups = "GPID0";
+                                       };
+
+                                       pinctrl_gpid2_default: gpid2_default {
+                                               function = "GPID2";
+                                               groups = "GPID2";
+                                       };
+
+                                       pinctrl_gpid4_default: gpid4_default {
+                                               function = "GPID4";
+                                               groups = "GPID4";
+                                       };
+
+                                       pinctrl_gpid6_default: gpid6_default {
+                                               function = "GPID6";
+                                               groups = "GPID6";
+                                       };
+
+                                       pinctrl_gpie0_default: gpie0_default {
+                                               function = "GPIE0";
+                                               groups = "GPIE0";
+                                       };
+
+                                       pinctrl_gpie2_default: gpie2_default {
+                                               function = "GPIE2";
+                                               groups = "GPIE2";
+                                       };
+
+                                       pinctrl_gpie4_default: gpie4_default {
+                                               function = "GPIE4";
+                                               groups = "GPIE4";
+                                       };
+
+                                       pinctrl_gpie6_default: gpie6_default {
+                                               function = "GPIE6";
+                                               groups = "GPIE6";
+                                       };
+
+                                       pinctrl_i2c10_default: i2c10_default {
+                                               function = "I2C10";
+                                               groups = "I2C10";
+                                       };
+
+                                       pinctrl_i2c11_default: i2c11_default {
+                                               function = "I2C11";
+                                               groups = "I2C11";
+                                       };
+
+                                       pinctrl_i2c12_default: i2c12_default {
+                                               function = "I2C12";
+                                               groups = "I2C12";
+                                       };
+
+                                       pinctrl_i2c13_default: i2c13_default {
+                                               function = "I2C13";
+                                               groups = "I2C13";
+                                       };
+
+                                       pinctrl_i2c14_default: i2c14_default {
+                                               function = "I2C14";
+                                               groups = "I2C14";
+                                       };
+
+                                       pinctrl_i2c3_default: i2c3_default {
+                                               function = "I2C3";
+                                               groups = "I2C3";
+                                       };
+
+                                       pinctrl_i2c4_default: i2c4_default {
+                                               function = "I2C4";
+                                               groups = "I2C4";
+                                       };
+
+                                       pinctrl_i2c5_default: i2c5_default {
+                                               function = "I2C5";
+                                               groups = "I2C5";
+                                       };
+
+                                       pinctrl_i2c6_default: i2c6_default {
+                                               function = "I2C6";
+                                               groups = "I2C6";
+                                       };
+
+                                       pinctrl_i2c7_default: i2c7_default {
+                                               function = "I2C7";
+                                               groups = "I2C7";
+                                       };
+
+                                       pinctrl_i2c8_default: i2c8_default {
+                                               function = "I2C8";
+                                               groups = "I2C8";
+                                       };
+
+                                       pinctrl_i2c9_default: i2c9_default {
+                                               function = "I2C9";
+                                               groups = "I2C9";
+                                       };
+
+                                       pinctrl_lpcpd_default: lpcpd_default {
+                                               function = "LPCPD";
+                                               groups = "LPCPD";
+                                       };
+
+                                       pinctrl_lpcpme_default: lpcpme_default {
+                                               function = "LPCPME";
+                                               groups = "LPCPME";
+                                       };
+
+                                       pinctrl_lpcrst_default: lpcrst_default {
+                                               function = "LPCRST";
+                                               groups = "LPCRST";
+                                       };
+
+                                       pinctrl_lpcsmi_default: lpcsmi_default {
+                                               function = "LPCSMI";
+                                               groups = "LPCSMI";
+                                       };
+
+                                       pinctrl_mac1link_default: mac1link_default {
+                                               function = "MAC1LINK";
+                                               groups = "MAC1LINK";
+                                       };
+
+                                       pinctrl_mac2link_default: mac2link_default {
+                                               function = "MAC2LINK";
+                                               groups = "MAC2LINK";
+                                       };
+
+                                       pinctrl_mdio1_default: mdio1_default {
+                                               function = "MDIO1";
+                                               groups = "MDIO1";
+                                       };
+
+                                       pinctrl_mdio2_default: mdio2_default {
+                                               function = "MDIO2";
+                                               groups = "MDIO2";
+                                       };
+
+                                       pinctrl_ncts1_default: ncts1_default {
+                                               function = "NCTS1";
+                                               groups = "NCTS1";
+                                       };
+
+                                       pinctrl_ncts2_default: ncts2_default {
+                                               function = "NCTS2";
+                                               groups = "NCTS2";
+                                       };
+
+                                       pinctrl_ncts3_default: ncts3_default {
+                                               function = "NCTS3";
+                                               groups = "NCTS3";
+                                       };
+
+                                       pinctrl_ncts4_default: ncts4_default {
+                                               function = "NCTS4";
+                                               groups = "NCTS4";
+                                       };
+
+                                       pinctrl_ndcd1_default: ndcd1_default {
+                                               function = "NDCD1";
+                                               groups = "NDCD1";
+                                       };
+
+                                       pinctrl_ndcd2_default: ndcd2_default {
+                                               function = "NDCD2";
+                                               groups = "NDCD2";
+                                       };
+
+                                       pinctrl_ndcd3_default: ndcd3_default {
+                                               function = "NDCD3";
+                                               groups = "NDCD3";
+                                       };
+
+                                       pinctrl_ndcd4_default: ndcd4_default {
+                                               function = "NDCD4";
+                                               groups = "NDCD4";
+                                       };
+
+                                       pinctrl_ndsr1_default: ndsr1_default {
+                                               function = "NDSR1";
+                                               groups = "NDSR1";
+                                       };
+
+                                       pinctrl_ndsr2_default: ndsr2_default {
+                                               function = "NDSR2";
+                                               groups = "NDSR2";
+                                       };
+
+                                       pinctrl_ndsr3_default: ndsr3_default {
+                                               function = "NDSR3";
+                                               groups = "NDSR3";
+                                       };
+
+                                       pinctrl_ndsr4_default: ndsr4_default {
+                                               function = "NDSR4";
+                                               groups = "NDSR4";
+                                       };
+
+                                       pinctrl_ndtr1_default: ndtr1_default {
+                                               function = "NDTR1";
+                                               groups = "NDTR1";
+                                       };
+
+                                       pinctrl_ndtr2_default: ndtr2_default {
+                                               function = "NDTR2";
+                                               groups = "NDTR2";
+                                       };
+
+                                       pinctrl_ndtr3_default: ndtr3_default {
+                                               function = "NDTR3";
+                                               groups = "NDTR3";
+                                       };
+
+                                       pinctrl_ndtr4_default: ndtr4_default {
+                                               function = "NDTR4";
+                                               groups = "NDTR4";
+                                       };
+
+                                       pinctrl_ndts4_default: ndts4_default {
+                                               function = "NDTS4";
+                                               groups = "NDTS4";
+                                       };
+
+                                       pinctrl_nri1_default: nri1_default {
+                                               function = "NRI1";
+                                               groups = "NRI1";
+                                       };
+
+                                       pinctrl_nri2_default: nri2_default {
+                                               function = "NRI2";
+                                               groups = "NRI2";
+                                       };
+
+                                       pinctrl_nri3_default: nri3_default {
+                                               function = "NRI3";
+                                               groups = "NRI3";
+                                       };
+
+                                       pinctrl_nri4_default: nri4_default {
+                                               function = "NRI4";
+                                               groups = "NRI4";
+                                       };
+
+                                       pinctrl_nrts1_default: nrts1_default {
+                                               function = "NRTS1";
+                                               groups = "NRTS1";
+                                       };
+
+                                       pinctrl_nrts2_default: nrts2_default {
+                                               function = "NRTS2";
+                                               groups = "NRTS2";
+                                       };
+
+                                       pinctrl_nrts3_default: nrts3_default {
+                                               function = "NRTS3";
+                                               groups = "NRTS3";
+                                       };
+
+                                       pinctrl_oscclk_default: oscclk_default {
+                                               function = "OSCCLK";
+                                               groups = "OSCCLK";
+                                       };
+
+                                       pinctrl_pwm0_default: pwm0_default {
+                                               function = "PWM0";
+                                               groups = "PWM0";
+                                       };
+
+                                       pinctrl_pwm1_default: pwm1_default {
+                                               function = "PWM1";
+                                               groups = "PWM1";
+                                       };
+
+                                       pinctrl_pwm2_default: pwm2_default {
+                                               function = "PWM2";
+                                               groups = "PWM2";
+                                       };
+
+                                       pinctrl_pwm3_default: pwm3_default {
+                                               function = "PWM3";
+                                               groups = "PWM3";
+                                       };
+
+                                       pinctrl_pwm4_default: pwm4_default {
+                                               function = "PWM4";
+                                               groups = "PWM4";
+                                       };
+
+                                       pinctrl_pwm5_default: pwm5_default {
+                                               function = "PWM5";
+                                               groups = "PWM5";
+                                       };
+
+                                       pinctrl_pwm6_default: pwm6_default {
+                                               function = "PWM6";
+                                               groups = "PWM6";
+                                       };
+
+                                       pinctrl_pwm7_default: pwm7_default {
+                                               function = "PWM7";
+                                               groups = "PWM7";
+                                       };
+
+                                       pinctrl_rgmii1_default: rgmii1_default {
+                                               function = "RGMII1";
+                                               groups = "RGMII1";
+                                       };
+
+                                       pinctrl_rgmii2_default: rgmii2_default {
+                                               function = "RGMII2";
+                                               groups = "RGMII2";
+                                       };
+
+                                       pinctrl_rmii1_default: rmii1_default {
+                                               function = "RMII1";
+                                               groups = "RMII1";
+                                       };
+
+                                       pinctrl_rmii2_default: rmii2_default {
+                                               function = "RMII2";
+                                               groups = "RMII2";
+                                       };
+
+                                       pinctrl_rom16_default: rom16_default {
+                                               function = "ROM16";
+                                               groups = "ROM16";
+                                       };
+
+                                       pinctrl_rom8_default: rom8_default {
+                                               function = "ROM8";
+                                               groups = "ROM8";
+                                       };
+
+                                       pinctrl_romcs1_default: romcs1_default {
+                                               function = "ROMCS1";
+                                               groups = "ROMCS1";
+                                       };
+
+                                       pinctrl_romcs2_default: romcs2_default {
+                                               function = "ROMCS2";
+                                               groups = "ROMCS2";
+                                       };
+
+                                       pinctrl_romcs3_default: romcs3_default {
+                                               function = "ROMCS3";
+                                               groups = "ROMCS3";
+                                       };
+
+                                       pinctrl_romcs4_default: romcs4_default {
+                                               function = "ROMCS4";
+                                               groups = "ROMCS4";
+                                       };
+
+                                       pinctrl_rxd1_default: rxd1_default {
+                                               function = "RXD1";
+                                               groups = "RXD1";
+                                       };
+
+                                       pinctrl_rxd2_default: rxd2_default {
+                                               function = "RXD2";
+                                               groups = "RXD2";
+                                       };
+
+                                       pinctrl_rxd3_default: rxd3_default {
+                                               function = "RXD3";
+                                               groups = "RXD3";
+                                       };
+
+                                       pinctrl_rxd4_default: rxd4_default {
+                                               function = "RXD4";
+                                               groups = "RXD4";
+                                       };
+
+                                       pinctrl_salt1_default: salt1_default {
+                                               function = "SALT1";
+                                               groups = "SALT1";
+                                       };
+
+                                       pinctrl_salt2_default: salt2_default {
+                                               function = "SALT2";
+                                               groups = "SALT2";
+                                       };
+
+                                       pinctrl_salt3_default: salt3_default {
+                                               function = "SALT3";
+                                               groups = "SALT3";
+                                       };
+
+                                       pinctrl_salt4_default: salt4_default {
+                                               function = "SALT4";
+                                               groups = "SALT4";
+                                       };
+
+                                       pinctrl_sd1_default: sd1_default {
+                                               function = "SD1";
+                                               groups = "SD1";
+                                       };
+
+                                       pinctrl_sd2_default: sd2_default {
+                                               function = "SD2";
+                                               groups = "SD2";
+                                       };
+
+                                       pinctrl_sgpmck_default: sgpmck_default {
+                                               function = "SGPMCK";
+                                               groups = "SGPMCK";
+                                       };
+
+                                       pinctrl_sgpmi_default: sgpmi_default {
+                                               function = "SGPMI";
+                                               groups = "SGPMI";
+                                       };
+
+                                       pinctrl_sgpmld_default: sgpmld_default {
+                                               function = "SGPMLD";
+                                               groups = "SGPMLD";
+                                       };
+
+                                       pinctrl_sgpmo_default: sgpmo_default {
+                                               function = "SGPMO";
+                                               groups = "SGPMO";
+                                       };
+
+                                       pinctrl_sgpsck_default: sgpsck_default {
+                                               function = "SGPSCK";
+                                               groups = "SGPSCK";
+                                       };
+
+                                       pinctrl_sgpsi0_default: sgpsi0_default {
+                                               function = "SGPSI0";
+                                               groups = "SGPSI0";
+                                       };
+
+                                       pinctrl_sgpsi1_default: sgpsi1_default {
+                                               function = "SGPSI1";
+                                               groups = "SGPSI1";
+                                       };
+
+                                       pinctrl_sgpsld_default: sgpsld_default {
+                                               function = "SGPSLD";
+                                               groups = "SGPSLD";
+                                       };
+
+                                       pinctrl_sioonctrl_default: sioonctrl_default {
+                                               function = "SIOONCTRL";
+                                               groups = "SIOONCTRL";
+                                       };
+
+                                       pinctrl_siopbi_default: siopbi_default {
+                                               function = "SIOPBI";
+                                               groups = "SIOPBI";
+                                       };
+
+                                       pinctrl_siopbo_default: siopbo_default {
+                                               function = "SIOPBO";
+                                               groups = "SIOPBO";
+                                       };
+
+                                       pinctrl_siopwreq_default: siopwreq_default {
+                                               function = "SIOPWREQ";
+                                               groups = "SIOPWREQ";
+                                       };
+
+                                       pinctrl_siopwrgd_default: siopwrgd_default {
+                                               function = "SIOPWRGD";
+                                               groups = "SIOPWRGD";
+                                       };
+
+                                       pinctrl_sios3_default: sios3_default {
+                                               function = "SIOS3";
+                                               groups = "SIOS3";
+                                       };
+
+                                       pinctrl_sios5_default: sios5_default {
+                                               function = "SIOS5";
+                                               groups = "SIOS5";
+                                       };
+
+                                       pinctrl_siosci_default: siosci_default {
+                                               function = "SIOSCI";
+                                               groups = "SIOSCI";
+                                       };
+
+                                       pinctrl_spi1_default: spi1_default {
+                                               function = "SPI1";
+                                               groups = "SPI1";
+                                       };
+
+                                       pinctrl_spi1debug_default: spi1debug_default {
+                                               function = "SPI1DEBUG";
+                                               groups = "SPI1DEBUG";
+                                       };
+
+                                       pinctrl_spi1passthru_default: spi1passthru_default {
+                                               function = "SPI1PASSTHRU";
+                                               groups = "SPI1PASSTHRU";
+                                       };
+
+                                       pinctrl_spics1_default: spics1_default {
+                                               function = "SPICS1";
+                                               groups = "SPICS1";
+                                       };
+
+                                       pinctrl_timer3_default: timer3_default {
+                                               function = "TIMER3";
+                                               groups = "TIMER3";
+                                       };
+
+                                       pinctrl_timer4_default: timer4_default {
+                                               function = "TIMER4";
+                                               groups = "TIMER4";
+                                       };
+
+                                       pinctrl_timer5_default: timer5_default {
+                                               function = "TIMER5";
+                                               groups = "TIMER5";
+                                       };
+
+                                       pinctrl_timer6_default: timer6_default {
+                                               function = "TIMER6";
+                                               groups = "TIMER6";
+                                       };
+
+                                       pinctrl_timer7_default: timer7_default {
+                                               function = "TIMER7";
+                                               groups = "TIMER7";
+                                       };
+
+                                       pinctrl_timer8_default: timer8_default {
+                                               function = "TIMER8";
+                                               groups = "TIMER8";
+                                       };
+
+                                       pinctrl_txd1_default: txd1_default {
+                                               function = "TXD1";
+                                               groups = "TXD1";
+                                       };
+
+                                       pinctrl_txd2_default: txd2_default {
+                                               function = "TXD2";
+                                               groups = "TXD2";
+                                       };
+
+                                       pinctrl_txd3_default: txd3_default {
+                                               function = "TXD3";
+                                               groups = "TXD3";
+                                       };
+
+                                       pinctrl_txd4_default: txd4_default {
+                                               function = "TXD4";
+                                               groups = "TXD4";
+                                       };
+
+                                       pinctrl_uart6_default: uart6_default {
+                                               function = "UART6";
+                                               groups = "UART6";
+                                       };
+
+                                       pinctrl_usbcki_default: usbcki_default {
+                                               function = "USBCKI";
+                                               groups = "USBCKI";
+                                       };
+
+                                       pinctrl_vgabios_rom_default: vgabios_rom_default {
+                                               function = "VGABIOS_ROM";
+                                               groups = "VGABIOS_ROM";
+                                       };
+
+                                       pinctrl_vgahs_default: vgahs_default {
+                                               function = "VGAHS";
+                                               groups = "VGAHS";
+                                       };
+
+                                       pinctrl_vgavs_default: vgavs_default {
+                                               function = "VGAVS";
+                                               groups = "VGAVS";
+                                       };
+
+                                       pinctrl_vpi18_default: vpi18_default {
+                                               function = "VPI18";
+                                               groups = "VPI18";
+                                       };
+
+                                       pinctrl_vpi24_default: vpi24_default {
+                                               function = "VPI24";
+                                               groups = "VPI24";
+                                       };
+
+                                       pinctrl_vpi30_default: vpi30_default {
+                                               function = "VPI30";
+                                               groups = "VPI30";
+                                       };
+
+                                       pinctrl_vpo12_default: vpo12_default {
+                                               function = "VPO12";
+                                               groups = "VPO12";
+                                       };
+
+                                       pinctrl_vpo24_default: vpo24_default {
+                                               function = "VPO24";
+                                               groups = "VPO24";
+                                       };
+
+                                       pinctrl_wdtrst1_default: wdtrst1_default {
+                                               function = "WDTRST1";
+                                               groups = "WDTRST1";
+                                       };
+
+                                       pinctrl_wdtrst2_default: wdtrst2_default {
+                                               function = "WDTRST2";
+                                               groups = "WDTRST2";
+                                       };
+
+                               };
+                       };
+
                        clk_apb: clk_apb@1e6e2008 {
                                #clock-cells = <0>;
                                compatible = "aspeed,g4-apb-clock";
@@ -72,6 +838,16 @@ sram@1e720000 {
                                reg = <0x1e720000 0x8000>;      // 32K
                        };
 
+                       gpio: gpio@1e780000 {
+                               #gpio-cells = <2>;
+                               gpio-controller;
+                               compatible = "aspeed,ast2400-gpio";
+                               reg = <0x1e780000 0x1000>;
+                               interrupts = <20>;
+                               gpio-ranges = <&pinctrl 0 0 220>;
+                               interrupt-controller;
+                       };
+
                        timer: timer@1e782000 {
                                compatible = "aspeed,ast2400-timer";
                                reg = <0x1e782000 0x90>;
index dd94d9361fda8c8b76d61b7454215ad7fb44a312..b664fe380936390a6f1ecdee49f157763e858513 100644 (file)
@@ -32,6 +32,22 @@ vic: interrupt-controller@1e6c0080 {
                        reg = <0x1e6c0080 0x80>;
                };
 
+               mac0: ethernet@1e660000 {
+                       compatible = "faraday,ftgmac100";
+                       reg = <0x1e660000 0x180>;
+                       interrupts = <2>;
+                       no-hw-checksum;
+                       status = "disabled";
+               };
+
+               mac1: ethernet@1e680000 {
+                       compatible = "faraday,ftgmac100";
+                       reg = <0x1e680000 0x180>;
+                       interrupts = <3>;
+                       no-hw-checksum;
+                       status = "disabled";
+               };
+
                apb {
                        compatible = "simple-bus";
                        #address-cells = <1>;
@@ -44,6 +60,822 @@ clk_clkin: clk_clkin@1e6e2070 {
                                reg = <0x1e6e2070 0x04>;
                        };
 
+                       syscon: syscon@1e6e2000 {
+                               compatible = "aspeed,g5-scu", "syscon", "simple-mfd";
+                               reg = <0x1e6e2000 0x1a8>;
+
+                               pinctrl: pinctrl {
+                                       compatible = "aspeed,g5-pinctrl";
+                                       aspeed,external-nodes = <&gfx &lhc>;
+
+                                       pinctrl_acpi_default: acpi_default {
+                                               function = "ACPI";
+                                               groups = "ACPI";
+                                       };
+
+                                       pinctrl_adc0_default: adc0_default {
+                                               function = "ADC0";
+                                               groups = "ADC0";
+                                       };
+
+                                       pinctrl_adc1_default: adc1_default {
+                                               function = "ADC1";
+                                               groups = "ADC1";
+                                       };
+
+                                       pinctrl_adc10_default: adc10_default {
+                                               function = "ADC10";
+                                               groups = "ADC10";
+                                       };
+
+                                       pinctrl_adc11_default: adc11_default {
+                                               function = "ADC11";
+                                               groups = "ADC11";
+                                       };
+
+                                       pinctrl_adc12_default: adc12_default {
+                                               function = "ADC12";
+                                               groups = "ADC12";
+                                       };
+
+                                       pinctrl_adc13_default: adc13_default {
+                                               function = "ADC13";
+                                               groups = "ADC13";
+                                       };
+
+                                       pinctrl_adc14_default: adc14_default {
+                                               function = "ADC14";
+                                               groups = "ADC14";
+                                       };
+
+                                       pinctrl_adc15_default: adc15_default {
+                                               function = "ADC15";
+                                               groups = "ADC15";
+                                       };
+
+                                       pinctrl_adc2_default: adc2_default {
+                                               function = "ADC2";
+                                               groups = "ADC2";
+                                       };
+
+                                       pinctrl_adc3_default: adc3_default {
+                                               function = "ADC3";
+                                               groups = "ADC3";
+                                       };
+
+                                       pinctrl_adc4_default: adc4_default {
+                                               function = "ADC4";
+                                               groups = "ADC4";
+                                       };
+
+                                       pinctrl_adc5_default: adc5_default {
+                                               function = "ADC5";
+                                               groups = "ADC5";
+                                       };
+
+                                       pinctrl_adc6_default: adc6_default {
+                                               function = "ADC6";
+                                               groups = "ADC6";
+                                       };
+
+                                       pinctrl_adc7_default: adc7_default {
+                                               function = "ADC7";
+                                               groups = "ADC7";
+                                       };
+
+                                       pinctrl_adc8_default: adc8_default {
+                                               function = "ADC8";
+                                               groups = "ADC8";
+                                       };
+
+                                       pinctrl_adc9_default: adc9_default {
+                                               function = "ADC9";
+                                               groups = "ADC9";
+                                       };
+
+                                       pinctrl_bmcint_default: bmcint_default {
+                                               function = "BMCINT";
+                                               groups = "BMCINT";
+                                       };
+
+                                       pinctrl_ddcclk_default: ddcclk_default {
+                                               function = "DDCCLK";
+                                               groups = "DDCCLK";
+                                       };
+
+                                       pinctrl_ddcdat_default: ddcdat_default {
+                                               function = "DDCDAT";
+                                               groups = "DDCDAT";
+                                       };
+
+                                       pinctrl_espi_default: espi_default {
+                                               function = "ESPI";
+                                               groups = "ESPI";
+                                       };
+
+                                       pinctrl_fwspics1_default: fwspics1_default {
+                                               function = "FWSPICS1";
+                                               groups = "FWSPICS1";
+                                       };
+
+                                       pinctrl_fwspics2_default: fwspics2_default {
+                                               function = "FWSPICS2";
+                                               groups = "FWSPICS2";
+                                       };
+
+                                       pinctrl_gpid0_default: gpid0_default {
+                                               function = "GPID0";
+                                               groups = "GPID0";
+                                       };
+
+                                       pinctrl_gpid2_default: gpid2_default {
+                                               function = "GPID2";
+                                               groups = "GPID2";
+                                       };
+
+                                       pinctrl_gpid4_default: gpid4_default {
+                                               function = "GPID4";
+                                               groups = "GPID4";
+                                       };
+
+                                       pinctrl_gpid6_default: gpid6_default {
+                                               function = "GPID6";
+                                               groups = "GPID6";
+                                       };
+
+                                       pinctrl_gpie0_default: gpie0_default {
+                                               function = "GPIE0";
+                                               groups = "GPIE0";
+                                       };
+
+                                       pinctrl_gpie2_default: gpie2_default {
+                                               function = "GPIE2";
+                                               groups = "GPIE2";
+                                       };
+
+                                       pinctrl_gpie4_default: gpie4_default {
+                                               function = "GPIE4";
+                                               groups = "GPIE4";
+                                       };
+
+                                       pinctrl_gpie6_default: gpie6_default {
+                                               function = "GPIE6";
+                                               groups = "GPIE6";
+                                       };
+
+                                       pinctrl_i2c10_default: i2c10_default {
+                                               function = "I2C10";
+                                               groups = "I2C10";
+                                       };
+
+                                       pinctrl_i2c11_default: i2c11_default {
+                                               function = "I2C11";
+                                               groups = "I2C11";
+                                       };
+
+                                       pinctrl_i2c12_default: i2c12_default {
+                                               function = "I2C12";
+                                               groups = "I2C12";
+                                       };
+
+                                       pinctrl_i2c13_default: i2c13_default {
+                                               function = "I2C13";
+                                               groups = "I2C13";
+                                       };
+
+                                       pinctrl_i2c14_default: i2c14_default {
+                                               function = "I2C14";
+                                               groups = "I2C14";
+                                       };
+
+                                       pinctrl_i2c3_default: i2c3_default {
+                                               function = "I2C3";
+                                               groups = "I2C3";
+                                       };
+
+                                       pinctrl_i2c4_default: i2c4_default {
+                                               function = "I2C4";
+                                               groups = "I2C4";
+                                       };
+
+                                       pinctrl_i2c5_default: i2c5_default {
+                                               function = "I2C5";
+                                               groups = "I2C5";
+                                       };
+
+                                       pinctrl_i2c6_default: i2c6_default {
+                                               function = "I2C6";
+                                               groups = "I2C6";
+                                       };
+
+                                       pinctrl_i2c7_default: i2c7_default {
+                                               function = "I2C7";
+                                               groups = "I2C7";
+                                       };
+
+                                       pinctrl_i2c8_default: i2c8_default {
+                                               function = "I2C8";
+                                               groups = "I2C8";
+                                       };
+
+                                       pinctrl_i2c9_default: i2c9_default {
+                                               function = "I2C9";
+                                               groups = "I2C9";
+                                       };
+
+                                       pinctrl_lad0_default: lad0_default {
+                                               function = "LAD0";
+                                               groups = "LAD0";
+                                       };
+
+                                       pinctrl_lad1_default: lad1_default {
+                                               function = "LAD1";
+                                               groups = "LAD1";
+                                       };
+
+                                       pinctrl_lad2_default: lad2_default {
+                                               function = "LAD2";
+                                               groups = "LAD2";
+                                       };
+
+                                       pinctrl_lad3_default: lad3_default {
+                                               function = "LAD3";
+                                               groups = "LAD3";
+                                       };
+
+                                       pinctrl_lclk_default: lclk_default {
+                                               function = "LCLK";
+                                               groups = "LCLK";
+                                       };
+
+                                       pinctrl_lframe_default: lframe_default {
+                                               function = "LFRAME";
+                                               groups = "LFRAME";
+                                       };
+
+                                       pinctrl_lpchc_default: lpchc_default {
+                                               function = "LPCHC";
+                                               groups = "LPCHC";
+                                       };
+
+                                       pinctrl_lpcpd_default: lpcpd_default {
+                                               function = "LPCPD";
+                                               groups = "LPCPD";
+                                       };
+
+                                       pinctrl_lpcplus_default: lpcplus_default {
+                                               function = "LPCPLUS";
+                                               groups = "LPCPLUS";
+                                       };
+
+                                       pinctrl_lpcpme_default: lpcpme_default {
+                                               function = "LPCPME";
+                                               groups = "LPCPME";
+                                       };
+
+                                       pinctrl_lpcrst_default: lpcrst_default {
+                                               function = "LPCRST";
+                                               groups = "LPCRST";
+                                       };
+
+                                       pinctrl_lpcsmi_default: lpcsmi_default {
+                                               function = "LPCSMI";
+                                               groups = "LPCSMI";
+                                       };
+
+                                       pinctrl_lsirq_default: lsirq_default {
+                                               function = "LSIRQ";
+                                               groups = "LSIRQ";
+                                       };
+
+                                       pinctrl_mac1link_default: mac1link_default {
+                                               function = "MAC1LINK";
+                                               groups = "MAC1LINK";
+                                       };
+
+                                       pinctrl_mac2link_default: mac2link_default {
+                                               function = "MAC2LINK";
+                                               groups = "MAC2LINK";
+                                       };
+
+                                       pinctrl_mdio1_default: mdio1_default {
+                                               function = "MDIO1";
+                                               groups = "MDIO1";
+                                       };
+
+                                       pinctrl_mdio2_default: mdio2_default {
+                                               function = "MDIO2";
+                                               groups = "MDIO2";
+                                       };
+
+                                       pinctrl_ncts1_default: ncts1_default {
+                                               function = "NCTS1";
+                                               groups = "NCTS1";
+                                       };
+
+                                       pinctrl_ncts2_default: ncts2_default {
+                                               function = "NCTS2";
+                                               groups = "NCTS2";
+                                       };
+
+                                       pinctrl_ncts3_default: ncts3_default {
+                                               function = "NCTS3";
+                                               groups = "NCTS3";
+                                       };
+
+                                       pinctrl_ncts4_default: ncts4_default {
+                                               function = "NCTS4";
+                                               groups = "NCTS4";
+                                       };
+
+                                       pinctrl_ndcd1_default: ndcd1_default {
+                                               function = "NDCD1";
+                                               groups = "NDCD1";
+                                       };
+
+                                       pinctrl_ndcd2_default: ndcd2_default {
+                                               function = "NDCD2";
+                                               groups = "NDCD2";
+                                       };
+
+                                       pinctrl_ndcd3_default: ndcd3_default {
+                                               function = "NDCD3";
+                                               groups = "NDCD3";
+                                       };
+
+                                       pinctrl_ndcd4_default: ndcd4_default {
+                                               function = "NDCD4";
+                                               groups = "NDCD4";
+                                       };
+
+                                       pinctrl_ndsr1_default: ndsr1_default {
+                                               function = "NDSR1";
+                                               groups = "NDSR1";
+                                       };
+
+                                       pinctrl_ndsr2_default: ndsr2_default {
+                                               function = "NDSR2";
+                                               groups = "NDSR2";
+                                       };
+
+                                       pinctrl_ndsr3_default: ndsr3_default {
+                                               function = "NDSR3";
+                                               groups = "NDSR3";
+                                       };
+
+                                       pinctrl_ndsr4_default: ndsr4_default {
+                                               function = "NDSR4";
+                                               groups = "NDSR4";
+                                       };
+
+                                       pinctrl_ndtr1_default: ndtr1_default {
+                                               function = "NDTR1";
+                                               groups = "NDTR1";
+                                       };
+
+                                       pinctrl_ndtr2_default: ndtr2_default {
+                                               function = "NDTR2";
+                                               groups = "NDTR2";
+                                       };
+
+                                       pinctrl_ndtr3_default: ndtr3_default {
+                                               function = "NDTR3";
+                                               groups = "NDTR3";
+                                       };
+
+                                       pinctrl_ndtr4_default: ndtr4_default {
+                                               function = "NDTR4";
+                                               groups = "NDTR4";
+                                       };
+
+                                       pinctrl_nri1_default: nri1_default {
+                                               function = "NRI1";
+                                               groups = "NRI1";
+                                       };
+
+                                       pinctrl_nri2_default: nri2_default {
+                                               function = "NRI2";
+                                               groups = "NRI2";
+                                       };
+
+                                       pinctrl_nri3_default: nri3_default {
+                                               function = "NRI3";
+                                               groups = "NRI3";
+                                       };
+
+                                       pinctrl_nri4_default: nri4_default {
+                                               function = "NRI4";
+                                               groups = "NRI4";
+                                       };
+
+                                       pinctrl_nrts1_default: nrts1_default {
+                                               function = "NRTS1";
+                                               groups = "NRTS1";
+                                       };
+
+                                       pinctrl_nrts2_default: nrts2_default {
+                                               function = "NRTS2";
+                                               groups = "NRTS2";
+                                       };
+
+                                       pinctrl_nrts3_default: nrts3_default {
+                                               function = "NRTS3";
+                                               groups = "NRTS3";
+                                       };
+
+                                       pinctrl_nrts4_default: nrts4_default {
+                                               function = "NRTS4";
+                                               groups = "NRTS4";
+                                       };
+
+                                       pinctrl_oscclk_default: oscclk_default {
+                                               function = "OSCCLK";
+                                               groups = "OSCCLK";
+                                       };
+
+                                       pinctrl_pewake_default: pewake_default {
+                                               function = "PEWAKE";
+                                               groups = "PEWAKE";
+                                       };
+
+                                       pinctrl_pnor_default: pnor_default {
+                                               function = "PNOR";
+                                               groups = "PNOR";
+                                       };
+
+                                       pinctrl_pwm0_default: pwm0_default {
+                                               function = "PWM0";
+                                               groups = "PWM0";
+                                       };
+
+                                       pinctrl_pwm1_default: pwm1_default {
+                                               function = "PWM1";
+                                               groups = "PWM1";
+                                       };
+
+                                       pinctrl_pwm2_default: pwm2_default {
+                                               function = "PWM2";
+                                               groups = "PWM2";
+                                       };
+
+                                       pinctrl_pwm3_default: pwm3_default {
+                                               function = "PWM3";
+                                               groups = "PWM3";
+                                       };
+
+                                       pinctrl_pwm4_default: pwm4_default {
+                                               function = "PWM4";
+                                               groups = "PWM4";
+                                       };
+
+                                       pinctrl_pwm5_default: pwm5_default {
+                                               function = "PWM5";
+                                               groups = "PWM5";
+                                       };
+
+                                       pinctrl_pwm6_default: pwm6_default {
+                                               function = "PWM6";
+                                               groups = "PWM6";
+                                       };
+
+                                       pinctrl_pwm7_default: pwm7_default {
+                                               function = "PWM7";
+                                               groups = "PWM7";
+                                       };
+
+                                       pinctrl_rgmii1_default: rgmii1_default {
+                                               function = "RGMII1";
+                                               groups = "RGMII1";
+                                       };
+
+                                       pinctrl_rgmii2_default: rgmii2_default {
+                                               function = "RGMII2";
+                                               groups = "RGMII2";
+                                       };
+
+                                       pinctrl_rmii1_default: rmii1_default {
+                                               function = "RMII1";
+                                               groups = "RMII1";
+                                       };
+
+                                       pinctrl_rmii2_default: rmii2_default {
+                                               function = "RMII2";
+                                               groups = "RMII2";
+                                       };
+
+                                       pinctrl_rxd1_default: rxd1_default {
+                                               function = "RXD1";
+                                               groups = "RXD1";
+                                       };
+
+                                       pinctrl_rxd2_default: rxd2_default {
+                                               function = "RXD2";
+                                               groups = "RXD2";
+                                       };
+
+                                       pinctrl_rxd3_default: rxd3_default {
+                                               function = "RXD3";
+                                               groups = "RXD3";
+                                       };
+
+                                       pinctrl_rxd4_default: rxd4_default {
+                                               function = "RXD4";
+                                               groups = "RXD4";
+                                       };
+
+                                       pinctrl_salt1_default: salt1_default {
+                                               function = "SALT1";
+                                               groups = "SALT1";
+                                       };
+
+                                       pinctrl_salt10_default: salt10_default {
+                                               function = "SALT10";
+                                               groups = "SALT10";
+                                       };
+
+                                       pinctrl_salt11_default: salt11_default {
+                                               function = "SALT11";
+                                               groups = "SALT11";
+                                       };
+
+                                       pinctrl_salt12_default: salt12_default {
+                                               function = "SALT12";
+                                               groups = "SALT12";
+                                       };
+
+                                       pinctrl_salt13_default: salt13_default {
+                                               function = "SALT13";
+                                               groups = "SALT13";
+                                       };
+
+                                       pinctrl_salt14_default: salt14_default {
+                                               function = "SALT14";
+                                               groups = "SALT14";
+                                       };
+
+                                       pinctrl_salt2_default: salt2_default {
+                                               function = "SALT2";
+                                               groups = "SALT2";
+                                       };
+
+                                       pinctrl_salt3_default: salt3_default {
+                                               function = "SALT3";
+                                               groups = "SALT3";
+                                       };
+
+                                       pinctrl_salt4_default: salt4_default {
+                                               function = "SALT4";
+                                               groups = "SALT4";
+                                       };
+
+                                       pinctrl_salt5_default: salt5_default {
+                                               function = "SALT5";
+                                               groups = "SALT5";
+                                       };
+
+                                       pinctrl_salt6_default: salt6_default {
+                                               function = "SALT6";
+                                               groups = "SALT6";
+                                       };
+
+                                       pinctrl_salt7_default: salt7_default {
+                                               function = "SALT7";
+                                               groups = "SALT7";
+                                       };
+
+                                       pinctrl_salt8_default: salt8_default {
+                                               function = "SALT8";
+                                               groups = "SALT8";
+                                       };
+
+                                       pinctrl_salt9_default: salt9_default {
+                                               function = "SALT9";
+                                               groups = "SALT9";
+                                       };
+
+                                       pinctrl_scl1_default: scl1_default {
+                                               function = "SCL1";
+                                               groups = "SCL1";
+                                       };
+
+                                       pinctrl_scl2_default: scl2_default {
+                                               function = "SCL2";
+                                               groups = "SCL2";
+                                       };
+
+                                       pinctrl_sd1_default: sd1_default {
+                                               function = "SD1";
+                                               groups = "SD1";
+                                       };
+
+                                       pinctrl_sd2_default: sd2_default {
+                                               function = "SD2";
+                                               groups = "SD2";
+                                       };
+
+                                       pinctrl_sda1_default: sda1_default {
+                                               function = "SDA1";
+                                               groups = "SDA1";
+                                       };
+
+                                       pinctrl_sda2_default: sda2_default {
+                                               function = "SDA2";
+                                               groups = "SDA2";
+                                       };
+
+                                       pinctrl_sgps1_default: sgps1_default {
+                                               function = "SGPS1";
+                                               groups = "SGPS1";
+                                       };
+
+                                       pinctrl_sgps2_default: sgps2_default {
+                                               function = "SGPS2";
+                                               groups = "SGPS2";
+                                       };
+
+                                       pinctrl_sioonctrl_default: sioonctrl_default {
+                                               function = "SIOONCTRL";
+                                               groups = "SIOONCTRL";
+                                       };
+
+                                       pinctrl_siopbi_default: siopbi_default {
+                                               function = "SIOPBI";
+                                               groups = "SIOPBI";
+                                       };
+
+                                       pinctrl_siopbo_default: siopbo_default {
+                                               function = "SIOPBO";
+                                               groups = "SIOPBO";
+                                       };
+
+                                       pinctrl_siopwreq_default: siopwreq_default {
+                                               function = "SIOPWREQ";
+                                               groups = "SIOPWREQ";
+                                       };
+
+                                       pinctrl_siopwrgd_default: siopwrgd_default {
+                                               function = "SIOPWRGD";
+                                               groups = "SIOPWRGD";
+                                       };
+
+                                       pinctrl_sios3_default: sios3_default {
+                                               function = "SIOS3";
+                                               groups = "SIOS3";
+                                       };
+
+                                       pinctrl_sios5_default: sios5_default {
+                                               function = "SIOS5";
+                                               groups = "SIOS5";
+                                       };
+
+                                       pinctrl_siosci_default: siosci_default {
+                                               function = "SIOSCI";
+                                               groups = "SIOSCI";
+                                       };
+
+                                       pinctrl_spi1_default: spi1_default {
+                                               function = "SPI1";
+                                               groups = "SPI1";
+                                       };
+
+                                       pinctrl_spi1cs1_default: spi1cs1_default {
+                                               function = "SPI1CS1";
+                                               groups = "SPI1CS1";
+                                       };
+
+                                       pinctrl_spi1debug_default: spi1debug_default {
+                                               function = "SPI1DEBUG";
+                                               groups = "SPI1DEBUG";
+                                       };
+
+                                       pinctrl_spi1passthru_default: spi1passthru_default {
+                                               function = "SPI1PASSTHRU";
+                                               groups = "SPI1PASSTHRU";
+                                       };
+
+                                       pinctrl_spi2ck_default: spi2ck_default {
+                                               function = "SPI2CK";
+                                               groups = "SPI2CK";
+                                       };
+
+                                       pinctrl_spi2cs0_default: spi2cs0_default {
+                                               function = "SPI2CS0";
+                                               groups = "SPI2CS0";
+                                       };
+
+                                       pinctrl_spi2cs1_default: spi2cs1_default {
+                                               function = "SPI2CS1";
+                                               groups = "SPI2CS1";
+                                       };
+
+                                       pinctrl_spi2miso_default: spi2miso_default {
+                                               function = "SPI2MISO";
+                                               groups = "SPI2MISO";
+                                       };
+
+                                       pinctrl_spi2mosi_default: spi2mosi_default {
+                                               function = "SPI2MOSI";
+                                               groups = "SPI2MOSI";
+                                       };
+
+                                       pinctrl_timer3_default: timer3_default {
+                                               function = "TIMER3";
+                                               groups = "TIMER3";
+                                       };
+
+                                       pinctrl_timer4_default: timer4_default {
+                                               function = "TIMER4";
+                                               groups = "TIMER4";
+                                       };
+
+                                       pinctrl_timer5_default: timer5_default {
+                                               function = "TIMER5";
+                                               groups = "TIMER5";
+                                       };
+
+                                       pinctrl_timer6_default: timer6_default {
+                                               function = "TIMER6";
+                                               groups = "TIMER6";
+                                       };
+
+                                       pinctrl_timer7_default: timer7_default {
+                                               function = "TIMER7";
+                                               groups = "TIMER7";
+                                       };
+
+                                       pinctrl_timer8_default: timer8_default {
+                                               function = "TIMER8";
+                                               groups = "TIMER8";
+                                       };
+
+                                       pinctrl_txd1_default: txd1_default {
+                                               function = "TXD1";
+                                               groups = "TXD1";
+                                       };
+
+                                       pinctrl_txd2_default: txd2_default {
+                                               function = "TXD2";
+                                               groups = "TXD2";
+                                       };
+
+                                       pinctrl_txd3_default: txd3_default {
+                                               function = "TXD3";
+                                               groups = "TXD3";
+                                       };
+
+                                       pinctrl_txd4_default: txd4_default {
+                                               function = "TXD4";
+                                               groups = "TXD4";
+                                       };
+
+                                       pinctrl_uart6_default: uart6_default {
+                                               function = "UART6";
+                                               groups = "UART6";
+                                       };
+
+                                       pinctrl_usbcki_default: usbcki_default {
+                                               function = "USBCKI";
+                                               groups = "USBCKI";
+                                       };
+
+                                       pinctrl_vgabiosrom_default: vgabiosrom_default {
+                                               function = "VGABIOSROM";
+                                               groups = "VGABIOSROM";
+                                       };
+
+                                       pinctrl_vgahs_default: vgahs_default {
+                                               function = "VGAHS";
+                                               groups = "VGAHS";
+                                       };
+
+                                       pinctrl_vgavs_default: vgavs_default {
+                                               function = "VGAVS";
+                                               groups = "VGAVS";
+                                       };
+
+                                       pinctrl_vpi24_default: vpi24_default {
+                                               function = "VPI24";
+                                               groups = "VPI24";
+                                       };
+
+                                       pinctrl_vpo_default: vpo_default {
+                                               function = "VPO";
+                                               groups = "VPO";
+                                       };
+
+                                       pinctrl_wdtrst1_default: wdtrst1_default {
+                                               function = "WDTRST1";
+                                               groups = "WDTRST1";
+                                       };
+
+                                       pinctrl_wdtrst2_default: wdtrst2_default {
+                                               function = "WDTRST2";
+                                               groups = "WDTRST2";
+                                       };
+
+                               };
+                       };
+
                        clk_hpll: clk_hpll@1e6e2024 {
                                #clock-cells = <0>;
                                compatible = "aspeed,g5-hpll-clock";
@@ -71,11 +903,27 @@ clk_uart: clk_uart@1e6e2008 {
                                reg = <0x1e6e202c 0x4>;
                        };
 
+                       gfx: display@1e6e6000 {
+                               compatible = "aspeed,ast2500-gfx", "syscon";
+                               reg = <0x1e6e6000 0x1000>;
+                               reg-io-width = <4>;
+                       };
+
                        sram@1e720000 {
                                compatible = "mmio-sram";
                                reg = <0x1e720000 0x9000>;      // 36K
                        };
 
+                       gpio: gpio@1e780000 {
+                               #gpio-cells = <2>;
+                               gpio-controller;
+                               compatible = "aspeed,ast2500-gpio";
+                               reg = <0x1e780000 0x1000>;
+                               interrupts = <20>;
+                               gpio-ranges = <&pinctrl 0 0 220>;
+                               interrupt-controller;
+                       };
+
                        timer: timer@1e782000 {
                                compatible = "aspeed,ast2400-timer";
                                reg = <0x1e782000 0x90>;
@@ -86,6 +934,7 @@ timer: timer@1e782000 {
                                clocks = <&clk_apb>;
                        };
 
+
                        wdt1: wdt@1e785000 {
                                compatible = "aspeed,wdt";
                                reg = <0x1e785000 0x1c>;
@@ -115,6 +964,36 @@ uart1: serial@1e783000 {
                                status = "disabled";
                        };
 
+                       lpc: lpc@1e789000 {
+                               compatible = "aspeed,ast2500-lpc", "simple-mfd";
+                               reg = <0x1e789000 0x1000>;
+
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               ranges = <0 0x1e789000 0x1000>;
+
+                               lpc_bmc: lpc-bmc@0 {
+                                       compatible = "aspeed,ast2500-lpc-bmc";
+                                       reg = <0x0 0x80>;
+                               };
+
+                               lpc_host: lpc-host@80 {
+                                       compatible = "aspeed,ast2500-lpc-host", "simple-mfd", "syscon";
+                                       reg = <0x80 0x1e0>;
+
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+                                       ranges = <0 0x80 0x1e0>;
+
+                                       reg-io-width = <4>;
+
+                                       lhc: lhc@20 {
+                                               compatible = "aspeed,ast2500-lhc";
+                                               reg = <0x20 0x24 0x48 0x8>;
+                                       };
+                               };
+                       };
+
                        uart2: serial@1e78d000 {
                                compatible = "ns16550a";
                                reg = <0x1e78d000 0x1000>;
diff --git a/arch/arm/boot/dts/at91-linea.dtsi b/arch/arm/boot/dts/at91-linea.dtsi
new file mode 100644 (file)
index 0000000..0721c84
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * at91-linea.dtsi - Device Tree Include file for the Axentia Linea Module.
+ *
+ * Copyright (C) 2017 Axentia Technologies AB
+ *
+ * Author: Peter Rosin <peda@axentia.se>
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+#include "sama5d31.dtsi"
+
+/ {
+       compatible = "axentia,linea",
+                    "atmel,sama5d31", "atmel,sama5d3", "atmel,sama5";
+
+       memory {
+               reg = <0x20000000 0x4000000>;
+       };
+};
+
+&slow_xtal {
+       clock-frequency = <32768>;
+};
+
+&main_xtal {
+       clock-frequency = <12000000>;
+};
+
+&i2c0 {
+       status = "okay";
+
+       eeprom@51 {
+               compatible = "st,24c64";
+               reg = <0x51>;
+               pagesize = <32>;
+       };
+};
+
+&nand0 {
+       status = "okay";
+
+       nand-bus-width = <8>;
+       nand-ecc-mode = "hw";
+       atmel,has-pmecc;
+       atmel,pmecc-cap = <4>;
+       atmel,pmecc-sector-size = <512>;
+       nand-on-flash-bbt;
+};
index 0b9a59d5fdac7e7c39b0ed2c4417795bfa84e22d..9f7f8a7d8ff9702443a4a3439fa77fb41ab0f630 100644 (file)
@@ -148,6 +148,8 @@ pdmic@f8018000 {
                        uart1: serial@f8020000 {
                                pinctrl-names = "default";
                                pinctrl-0 = <&pinctrl_uart1_default>;
+                               atmel,use-dma-rx;
+                               atmel,use-dma-tx;
                                status = "okay";
                        };
 
@@ -256,6 +258,8 @@ watchdog@f8048040 {
                        };
 
                        uart3: serial@fc008000 {
+                               atmel,use-dma-rx;
+                               atmel,use-dma-tx;
                                pinctrl-names = "default";
                                pinctrl-0 = <&pinctrl_uart3_default>;
                                status = "okay";
index ed7fce2977387998012466362a67339722e97d29..5ab14cedb1dbc5a5efda3499a950f30201580762 100644 (file)
@@ -69,6 +69,12 @@ main_xtal {
 
        ahb {
                apb {
+                       uart0: serial@f8004000 {
+                               atmel,use-dma-rx;
+                               atmel,use-dma-tx;
+                               status = "okay";
+                       };
+
                        spi0: spi@f8010000 {
                                cs-gpios = <&pioC 3 0>, <0>, <0>, <0>;
                                status = "okay";
@@ -110,6 +116,8 @@ slot@0 {
                        };
 
                        usart3: serial@fc00c000 {
+                               atmel,use-dma-rx;
+                               atmel,use-dma-tx;
                                status = "okay";
                        };
 
diff --git a/arch/arm/boot/dts/at91-tse850-3.dts b/arch/arm/boot/dts/at91-tse850-3.dts
new file mode 100644 (file)
index 0000000..669a2c6
--- /dev/null
@@ -0,0 +1,274 @@
+/*
+ * at91-tse850-3.dts - Device Tree file for the Axentia TSE-850 3.0 board
+ *
+ * Copyright (C) 2017 Axentia Technologies AB
+ *
+ * Author: Peter Rosin <peda@axentia.se>
+ *
+ * Licensed under GPLv2 or later.
+ */
+/dts-v1/;
+#include <dt-bindings/pwm/pwm.h>
+#include "at91-linea.dtsi"
+
+/ {
+       model = "Axentia TSE-850 3.0";
+       compatible = "axentia,tse850v3", "axentia,linea",
+                    "atmel,sama5d31", "atmel,sama5d3", "atmel,sama5";
+
+       ahb {
+               apb {
+                       pinctrl@fffff200 {
+                               tse850 {
+                                       pinctrl_usba_vbus: usba-vbus {
+                                               atmel,pins =
+                                                       <AT91_PIOC 31
+                                                        AT91_PERIPH_GPIO
+                                                        AT91_PINCTRL_DEGLITCH>;
+                                       };
+                               };
+                       };
+
+                       watchdog@fffffe40 {
+                               status = "okay";
+                       };
+               };
+       };
+
+       sck: oscillator {
+               compatible = "fixed-clock";
+
+               #clock-cells = <0>;
+               clock-frequency = <16000000>;
+               clock-output-names = "sck";
+       };
+
+       reg_3v3: regulator {
+               compatible = "regulator-fixed";
+
+               regulator-name = "3v3-supply";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       ana: reg-ana {
+               compatible = "pwm-regulator";
+
+               regulator-name = "ANA";
+
+               pwms = <&pwm0 2 1000 PWM_POLARITY_INVERTED>;
+               pwm-dutycycle-unit = <1000>;
+               pwm-dutycycle-range = <100 1000>;
+
+               regulator-min-microvolt = <2000000>;
+               regulator-max-microvolt = <20000000>;
+               regulator-ramp-delay = <1000>;
+       };
+
+       sound {
+               compatible = "axentia,tse850-pcm5142";
+
+               axentia,cpu-dai = <&ssc0>;
+               axentia,audio-codec = <&pcm5142>;
+
+               axentia,add-gpios = <&pioA 8 GPIO_ACTIVE_LOW>;
+               axentia,loop1-gpios = <&pioA 10 GPIO_ACTIVE_LOW>;
+               axentia,loop2-gpios = <&pioA 11 GPIO_ACTIVE_LOW>;
+
+               axentia,ana-supply = <&ana>;
+       };
+
+       dac: dpot-dac {
+               compatible = "dpot-dac";
+               vref-supply = <&reg_3v3>;
+               io-channels = <&dpot 0>;
+               io-channel-names = "dpot";
+               #io-channel-cells = <1>;
+       };
+
+       envelope-detector {
+               compatible = "axentia,tse850-envelope-detector";
+               io-channels = <&dac 0>;
+               io-channel-names = "dac";
+
+               interrupt-parent = <&pioA>;
+               interrupts = <3 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "comp";
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               ch1-red {
+                       label = "ch-1:red";
+                       gpios = <&pioA 23 GPIO_ACTIVE_LOW>;
+               };
+               ch1-green {
+                       label = "ch-1:green";
+                       gpios = <&pioA 22 GPIO_ACTIVE_LOW>;
+               };
+               ch2-red {
+                       label = "ch-2:red";
+                       gpios = <&pioA 21 GPIO_ACTIVE_LOW>;
+               };
+               ch2-green {
+                       label = "ch-2:green";
+                       gpios = <&pioA 20 GPIO_ACTIVE_LOW>;
+               };
+               data-red {
+                       label = "data:red";
+                       gpios = <&pioA 19 GPIO_ACTIVE_LOW>;
+               };
+               data-green {
+                       label = "data:green";
+                       gpios = <&pioA 18 GPIO_ACTIVE_LOW>;
+               };
+               alarm-red {
+                       label = "alarm:red";
+                       gpios = <&pioA 17 GPIO_ACTIVE_LOW>;
+               };
+               alarm-green {
+                       label = "alarm:green";
+                       gpios = <&pioA 16 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&nand0 {
+       at91bootstrap@0 {
+               label = "at91bootstrap";
+               reg = <0x0 0x40000>;
+       };
+
+       barebox@40000 {
+               label = "bootloader";
+               reg = <0x40000 0x60000>;
+       };
+
+       bareboxenv@c0000 {
+               label = "bareboxenv";
+               reg = <0xc0000 0x40000>;
+       };
+
+       bareboxenv2@100000 {
+               label = "bareboxenv2";
+               reg = <0x100000 0x40000>;
+       };
+
+       oftree@180000 {
+               label = "oftree";
+               reg = <0x180000 0x20000>;
+       };
+
+       kernel@200000 {
+               label = "kernel";
+               reg = <0x200000 0x500000>;
+       };
+
+       rootfs@800000 {
+               label = "rootfs";
+               reg = <0x800000 0x0f800000>;
+       };
+
+       ovlfs@10000000 {
+               label = "ovlfs";
+               reg = <0x10000000 0x10000000>;
+       };
+};
+
+&ssc0 {
+       #sound-dai-cells = <0>;
+
+       status = "okay";
+};
+
+&i2c0 {
+       status = "okay";
+
+       jc42@18 {
+               compatible = "nxp,se97b", "jedec,jc-42.4-temp";
+               reg = <0x18>;
+       };
+
+       dpot: mcp4651-104@28 {
+               compatible = "microchip,mcp4651-104";
+               reg = <0x28>;
+               #io-channel-cells = <1>;
+       };
+
+       pcm5142: pcm5142@4c {
+               compatible = "ti,pcm5142";
+
+               reg = <0x4c>;
+
+               AVDD-supply = <&reg_3v3>;
+               DVDD-supply = <&reg_3v3>;
+               CPVDD-supply = <&reg_3v3>;
+
+               clocks = <&sck>;
+
+               pll-in = <3>;
+               pll-out = <6>;
+       };
+
+       eeprom@50 {
+               compatible = "nxp,24c02";
+               reg = <0x50>;
+               pagesize = <16>;
+       };
+};
+
+&usart0 {
+       status = "okay";
+
+       atmel,use-dma-rx;
+};
+
+&pwm0 {
+       status = "okay";
+
+       pinctrl-0 = <&pinctrl_pwm0_pwml2_1>;
+       pinctrl-names = "default";
+};
+
+&macb1 {
+       status = "okay";
+
+       phy-mode = "rgmii";
+
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       phy0: ethernet-phy@3 {
+               reg = <3>;
+
+               interrupt-parent = <&pioE>;
+               interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
+       };
+};
+
+&usb0 {
+       status = "okay";
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usba_vbus>;
+       atmel,vbus-gpio = <&pioC 31 GPIO_ACTIVE_HIGH>;
+};
+
+&usb1 {
+       status = "okay";
+
+       num-ports = <1>;
+       atmel,vbus-gpio = <&pioD 29 GPIO_ACTIVE_HIGH>;
+       atmel,oc-gpio = <&pioC 15 GPIO_ACTIVE_LOW>;
+};
+
+&usb2 {
+       status = "okay";
+};
+
+&dbgu {
+       status = "okay";
+
+       dmas = <0>, <0>;        /*  Do not use DMA for dbgu */
+};
index a9d6d593fc8a7d51fd654e9847f96d1657bdb07f..47799f59faa5cbdfc8dad50bee16c52f1a9d1775 100644 (file)
@@ -62,7 +62,7 @@ gic: interrupt-controller@2001001000 {
                #address-cells = <0>;
                interrupt-controller;
                reg = <0x20 0x01001000 0 0x1000>,
-                     <0x20 0x01002000 0 0x1000>,
+                     <0x20 0x01002000 0 0x2000>,
                      <0x20 0x01004000 0 0x2000>,
                      <0x20 0x01006000 0 0x2000>;
                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) |
index b6142bda661e1a701c66c6590970553ce5255fcb..6c58c7854dd559f3a3aab86ecdf8c1b1946eb5e2 100644 (file)
@@ -209,6 +209,15 @@ dma@20000 {
                        #dma-cells = <1>;
                };
 
+               sdio: sdhci@21000 {
+                       compatible = "brcm,sdhci-iproc-cygnus";
+                       reg = <0x21000 0x100>;
+                       interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>;
+                       sdhci,auto-cmd12;
+                       clocks = <&lcpll0 BCM_NSP_LCPLL0_SDIO_CLK>;
+                       status = "disabled";
+               };
+
                amac0: ethernet@22000 {
                        compatible = "brcm,nsp-amac";
                        reg = <0x022000 0x1000>,
@@ -227,6 +236,15 @@ amac1: ethernet@23000 {
                        status = "disabled";
                };
 
+               amac2: ethernet@24000 {
+                       compatible = "brcm,nsp-amac";
+                       reg = <0x024000 0x1000>,
+                             <0x112000 0x1000>;
+                       reg-names = "amac_base", "idm_base";
+                       interrupts = <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>;
+                       status = "disabled";
+               };
+
                nand: nand@26000 {
                        compatible = "brcm,nand-iproc", "brcm,brcmnand-v6.1";
                        reg = <0x026000 0x600>,
@@ -241,29 +259,6 @@ nand: nand@26000 {
                        brcm,nand-has-wp;
                };
 
-               gpiob: gpio@30000 {
-                       compatible = "brcm,iproc-nsp-gpio", "brcm,iproc-gpio";
-                       reg = <0x30000 0x50>;
-                       #gpio-cells = <2>;
-                       gpio-controller;
-                       ngpios = <4>;
-                       interrupt-controller;
-                       interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
-               };
-
-               pwm: pwm@31000 {
-                       compatible = "brcm,iproc-pwm";
-                       reg = <0x31000 0x28>;
-                       clocks = <&osc>;
-                       #pwm-cells = <3>;
-                       status = "disabled";
-               };
-
-               rng: rng@33000 {
-                       compatible = "brcm,bcm-nsp-rng";
-                       reg = <0x33000 0x14>;
-               };
-
                qspi: qspi@27200 {
                        compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi";
                        reg = <0x027200 0x184>,
@@ -293,6 +288,29 @@ qspi: qspi@27200 {
                        #size-cells = <0>;
                };
 
+               gpiob: gpio@30000 {
+                       compatible = "brcm,iproc-nsp-gpio", "brcm,iproc-gpio";
+                       reg = <0x30000 0x50>;
+                       #gpio-cells = <2>;
+                       gpio-controller;
+                       ngpios = <4>;
+                       interrupt-controller;
+                       interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               pwm: pwm@31000 {
+                       compatible = "brcm,iproc-pwm";
+                       reg = <0x31000 0x28>;
+                       clocks = <&osc>;
+                       #pwm-cells = <3>;
+                       status = "disabled";
+               };
+
+               rng: rng@33000 {
+                       compatible = "brcm,bcm-nsp-rng";
+                       reg = <0x33000 0x14>;
+               };
+
                ccbtimer0: timer@34000 {
                        compatible = "arm,sp804";
                        reg = <0x34000 0x1000>;
index 6ddf7dfe3f7202642cc4d595ff4763f91248c0a5..38e6050035bcdc1dd9efb1f88581a9f58f226bd1 100644 (file)
@@ -87,3 +87,8 @@ &hdmi {
        power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
        status = "okay";
 };
+
+&vec {
+       power-domains = <&power RPI_POWER_DOMAIN_VEC>;
+       status = "okay";
+};
index 9a44da19089717f02462c657840ae9f24fd942ba..a3106aa446c6906108c90952cd39520ff195ef79 100644 (file)
@@ -476,6 +476,14 @@ i2c2: i2c@7e805000 {
                        status = "disabled";
                };
 
+               vec: vec@7e806000 {
+                       compatible = "brcm,bcm2835-vec";
+                       reg = <0x7e806000 0x1000>;
+                       clocks = <&clocks BCM2835_CLOCK_VEC>;
+                       interrupts = <2 27>;
+                       status = "disabled";
+               };
+
                pixelvalve@7e807000 {
                        compatible = "brcm,bcm2835-pixelvalve2";
                        reg = <0x7e807000 0x100>;
index 112a5a834ddc995171d84f964304d9d3d730d7c5..d241cee4bfcca92451721a1217fe4c446ef69aba 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        leds {
index 3600f56f46f463a5d20d6d1d8c47a0099d98612c..b0e62042f62fe2427729866fe52825cc2099e84c 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        leds {
index 9cb186ea2e979776bdde34a944eb79cac1d1011c..c9ba6b964b3853941961ca6f22c1cd207fb366fa 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x18000000>;
        };
 
        spi {
@@ -136,10 +137,6 @@ eject {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
 &usb2 {
        vcc-gpio = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
 };
index 35e6ed6a3ef7a6e21e414a14da10770edec8f6b6..f591b0f256d82511c9d6d5d1ebee24cc180cc81e 100644 (file)
@@ -55,10 +55,6 @@ restart {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
 &spi_nor {
        status = "okay";
 };
index 1c7e53d60aa40ee8029594d4be166c054a1e770a..50d65d8fbd9afb8dc2b7890278ae3f5c28a18a92 100644 (file)
@@ -56,10 +56,6 @@ restart {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
 &spi_nor {
        status = "okay";
 };
index 8ce39d58eeb8ab2f0e08addce0bb43a08c896412..b9f66c0fae27246229543b63cc8081a1f34d8e32 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        leds {
@@ -83,10 +84,6 @@ restart {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
 &usb3 {
        vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
 };
index 6229ef283c414dc00d8fa2ab5027556b26a66e28..ae0199f6c7a231cef44891234f3c2446b9325ad4 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        leds {
index 70f4bb9d864aedc1bb9b1ce336babaa0940c0796..36b628b190d7d098e7d1c1ca97242d62a61ad1cf 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        leds {
@@ -119,10 +120,6 @@ restart {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
 &spi_nor {
        status = "okay";
 };
index eed4dd1599955bbde4c3ef7f6c5b7efa6c6a2c1d..d0eec099f1f8cda749315e8e29b1a95ca295fa09 100644 (file)
@@ -34,3 +34,7 @@ cpu@1 {
        };
 
 };
+
+&uart0 {
+       status = "okay";
+};
index 71b98cfaf94427c62fd8ce967c22f2cb508079bf..db8608be0ee7ebac7ec951900163cfd4f1213ff2 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        leds {
index a9c8defed4d3e7d18fb5b2ee9ac53166dbdc6dab..d51586d95b9a0cb1dba7745793a8ba01dd17cc6f 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        spi {
@@ -122,7 +123,3 @@ eject {
                };
        };
 };
-
-&uart0 {
-       status = "okay";
-};
index 184fd9214110c6d39a58f32467e4a8b82aaaae24..de041b8c3342d4aec5f11cfb2c34e2545dcb04ae 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        gpio-keys {
diff --git a/arch/arm/boot/dts/bcm47081-luxul-xap-1410.dts b/arch/arm/boot/dts/bcm47081-luxul-xap-1410.dts
new file mode 100644 (file)
index 0000000..9b57598
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2017 Luxul Inc.
+ *
+ * Licensed under the ISC license.
+ */
+
+/dts-v1/;
+
+#include "bcm47081.dtsi"
+
+/ {
+       compatible = "luxul,xap-1410v1", "brcm,bcm47081", "brcm,bcm4708";
+       model = "Luxul XAP-1410 V1";
+
+       chosen {
+               bootargs = "console=ttyS0,115200";
+       };
+
+       memory {
+               reg = <0x00000000 0x08000000>;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               5ghz {
+                       label = "bcm53xx:blue:5ghz";
+                       gpios = <&chipcommon 13 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "none";
+               };
+
+               2ghz {
+                       label = "bcm53xx:blue:2ghz";
+                       gpios = <&chipcommon 14 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "none";
+               };
+
+               status {
+                       label = "bcm53xx:green:status";
+                       gpios = <&chipcommon 15 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "timer";
+               };
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               restart {
+                       label = "Reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&chipcommon 11 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&spi_nor {
+       status = "okay";
+};
diff --git a/arch/arm/boot/dts/bcm47081-luxul-xwr-1200.dts b/arch/arm/boot/dts/bcm47081-luxul-xwr-1200.dts
new file mode 100644 (file)
index 0000000..c544ab3
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2017 Luxul Inc.
+ *
+ * Licensed under the ISC license.
+ */
+
+/dts-v1/;
+
+#include "bcm47081.dtsi"
+#include "bcm5301x-nand-cs0-bch4.dtsi"
+
+/ {
+       compatible = "luxul,xwr-1200v1", "brcm,bcm47081", "brcm,bcm4708";
+       model = "Luxul XWR-1200 V1";
+
+       chosen {
+               bootargs = "console=ttyS0,115200";
+       };
+
+       memory {
+               reg = <0x00000000 0x08000000>;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               power {
+                       label = "bcm53xx:green:power";
+                       gpios = <&chipcommon 0 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "default-on";
+               };
+
+               lan3 {
+                       label = "bcm53xx:green:lan3";
+                       gpios = <&chipcommon 1 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "none";
+               };
+
+               lan4 {
+                       label = "bcm53xx:green:lan4";
+                       gpios = <&chipcommon 2 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "none";
+               };
+
+               wan {
+                       label = "bcm53xx:green:wan";
+                       gpios = <&chipcommon 3 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "none";
+               };
+
+               lan2 {
+                       label = "bcm53xx:green:lan2";
+                       gpios = <&chipcommon 6 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "none";
+               };
+
+               usb {
+                       label = "bcm53xx:green:usb";
+                       gpios = <&chipcommon 8 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "none";
+               };
+
+               status {
+                       label = "bcm53xx:green:status";
+                       gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "timer";
+               };
+
+               2ghz {
+                       label = "bcm53xx:green:2ghz";
+                       gpios = <&chipcommon 13 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "none";
+               };
+
+               5ghz {
+                       label = "bcm53xx:green:5ghz";
+                       gpios = <&chipcommon 14 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "none";
+               };
+
+               lan1 {
+                       label = "bcm53xx:green:lan1";
+                       gpios = <&chipcommon 15 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "none";
+               };
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               restart {
+                       label = "Reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&chipcommon 11 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&usb2 {
+       vcc-gpio = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
+};
+
+&spi_nor {
+       status = "okay";
+};
index f720012ee5ed2f9904c7f39c7acd298f7b85ef37..c5f7619af4a651b53761ec5ec4aa0cd5134d13af 100644 (file)
@@ -24,3 +24,7 @@ cpu@0 {
                };
        };
 };
+
+&uart0 {
+       status = "okay";
+};
index eac0f52e5ebd0cd724432843349b2f1380222b9a..eaca6876db0f22395bfde65c2527d05bce6747f9 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        leds {
index aab39c9864da7c6a690583cf07803044b4673d2a..b32957ca9443f250ee1e868ebb1cebc96f9a2dcd 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x18000000>;
        };
 
        leds {
index fd38d2aa3521292985255e897564b651923d2085..f459a98a72c671a0729cab3a061357940bff7167 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        leds {
@@ -101,6 +102,10 @@ restart {
        };
 };
 
-&uart0 {
-       status = "okay";
+&usb2 {
+       vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
+};
+
+&usb3 {
+       vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
 };
index 92f8a7219e989e60bef22026ebc951d672d36a98..8e39a84e5bf9eb23ca0f0fc0efd9cfd5f5ba410e 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        leds {
@@ -107,8 +108,52 @@ restart {
        };
 };
 
-&uart0 {
-       status = "okay";
+&pcie0 {
+       #address-cells = <3>;
+       #size-cells = <2>;
+
+       bridge@0,0,0 {
+               reg = <0x0000 0 0 0 0>;
+
+               #address-cells = <3>;
+               #size-cells = <2>;
+
+               wifi@0,1,0 {
+                       reg = <0x0000 0 0 0 0>;
+                       ieee80211-freq-limit = <5735000 5835000>;
+               };
+       };
+};
+
+&pcie1 {
+       #address-cells = <3>;
+       #size-cells = <2>;
+
+       bridge@1,0,0 {
+               reg = <0x0000 0 0 0 0>;
+
+               #address-cells = <3>;
+               #size-cells = <2>;
+
+               bridge@1,1,0 {
+                       reg = <0x0000 0 0 0 0>;
+
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+
+                       bridge@1,2,2 {
+                               reg = <0x1000 0 0 0 0>;
+
+                               #address-cells = <3>;
+                               #size-cells = <2>;
+
+                               wifi@1,4,0 {
+                                       reg = <0x0000 0 0 0 0>;
+                                       ieee80211-freq-limit = <5170000 5730000>;
+                               };
+                       };
+               };
+       };
 };
 
 &usb2 {
index 9a92c24ac2d8f545890525291c049f1e457799db..c67bfaa0c8e824bda8e6da609ff893cd3f054e1a 100644 (file)
@@ -97,10 +97,6 @@ restart {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
 &usb2 {
        vcc-gpio = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
 };
index f03976597a6db429481659ed13d1129e5adabd19..c645fea2b7f7e18297ec9a7ddfb3f72d879e4bb7 100644 (file)
@@ -8,4 +8,5 @@
 
 &uart0 {
        clock-frequency = <125000000>;
+       status = "okay";
 };
index 661348dbb7cebf5934a649e03fe2893ac20b5c86..64ded7643e9f3fcf41d49870947357a097769fa0 100644 (file)
@@ -21,7 +21,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        nand: nand@18028000 {
@@ -105,10 +106,6 @@ restart {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
 &usb3 {
        vcc-gpio = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
 };
index 169b35fe5651ea2fc043396699e013fba056af02..5cf4ab1ebe851e19c9e8133bd7a891415cdf4ea0 100644 (file)
@@ -18,7 +18,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x08000000>;
        };
 
        leds {
@@ -31,13 +32,13 @@ power       {
                };
 
                lan3    {
-                       label = "bcm53xx:green:lan1";
+                       label = "bcm53xx:green:lan3";
                        gpios = <&chipcommon 1 GPIO_ACTIVE_LOW>;
                        linux,default-trigger = "default-off";
                };
 
                lan4    {
-                       label = "bcm53xx:green:lan0";
+                       label = "bcm53xx:green:lan4";
                        gpios = <&chipcommon 2 GPIO_ACTIVE_LOW>;
                        linux,default-trigger = "default-off";
                };
@@ -49,7 +50,7 @@ wan   {
                };
 
                lan1    {
-                       label = "bcm53xx:green:lan3";
+                       label = "bcm53xx:green:lan1";
                        gpios = <&chipcommon 4 GPIO_ACTIVE_LOW>;
                        linux,default-trigger = "default-off";
                };
@@ -98,10 +99,6 @@ restart {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
 &usb3 {
        vcc-gpio = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
 };
index 521b4155de60cc3786d4473622508be544048123..600795ee1aed3a3da9c6b01590183ba004ea4068 100644 (file)
@@ -18,7 +18,8 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x08000000>;
+               reg = <0x00000000 0x08000000
+                      0x88000000 0x18000000>;
        };
 
        leds {
@@ -97,7 +98,3 @@ rfkill {
                };
        };
 };
-
-&uart0 {
-       status = "okay";
-};
index 4f09aa0114e66ceedac96e9569816425ab07e2ae..4840a782fc053266257438c44529bc432b22a9c5 100644 (file)
@@ -14,4 +14,5 @@ usb3_phy: usb3-phy {
 
 &uart0 {
        clock-frequency = <125000000>;
+       status = "okay";
 };
index f09a2bb089790714677680eb86450bd225985e56..4fbb089cf5ad3c1f96a15f504ee433ff06b724df 100644 (file)
@@ -243,13 +243,39 @@ chipcommon: chipcommon@0 {
                        #gpio-cells = <2>;
                };
 
+               pcie0: pcie@12000 {
+                       reg = <0x00012000 0x1000>;
+               };
+
+               pcie1: pcie@13000 {
+                       reg = <0x00013000 0x1000>;
+               };
+
                usb2: usb2@21000 {
                        reg = <0x00021000 0x1000>;
 
                        #address-cells = <1>;
                        #size-cells = <1>;
+                       ranges;
+
+                       interrupt-parent = <&gic>;
+
+                       ehci: ehci@21000 {
+                               #usb-cells = <0>;
+
+                               compatible = "generic-ehci";
+                               reg = <0x00021000 0x1000>;
+                               interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
+                               phys = <&usb2_phy>;
+                       };
+
+                       ohci: ohci@22000 {
+                               #usb-cells = <0>;
 
-                       phys = <&usb2_phy>;
+                               compatible = "generic-ohci";
+                               reg = <0x00022000 0x1000>;
+                               interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
+                       };
                };
 
                usb3: usb3@23000 {
@@ -257,6 +283,19 @@ usb3: usb3@23000 {
 
                        #address-cells = <1>;
                        #size-cells = <1>;
+                       ranges;
+
+                       interrupt-parent = <&gic>;
+
+                       xhci: xhci@23000 {
+                               #usb-cells = <0>;
+
+                               compatible = "generic-xhci";
+                               reg = <0x00023000 0x1000>;
+                               interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
+                               phys = <&usb3_phy>;
+                               phy-names = "usb";
+                       };
                };
 
                spi@29000 {
index e2c496a96c32a1381a3782d603c6139a8806c75d..2da04d0a734892d66bc8bb9ec7209b16623627dc 100644 (file)
@@ -124,6 +124,17 @@ ehci: ehci@4000 {
                                reg = <0x4000 0x1000>;
                                interrupt-parent = <&gic>;
                                interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
+
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               ehci_port1: port@1 {
+                                       reg = <1>;
+                               };
+
+                               ehci_port2: port@2 {
+                                       reg = <2>;
+                               };
                        };
 
                        ohci: ohci@d000 {
@@ -133,6 +144,17 @@ ohci: ohci@d000 {
                                reg = <0xd000 0x1000>;
                                interrupt-parent = <&gic>;
                                interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
+
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               ohci_port1: port@1 {
+                                       reg = <1>;
+                               };
+
+                               ohci_port2: port@2 {
+                                       reg = <2>;
+                               };
                        };
                };
 
index 251a486f2da63260419bb973264b1f73598ec2e7..42855a7c1bfa6ca07bb08383107a20fc84c07e1a 100644 (file)
@@ -50,7 +50,3 @@ memory {
                reg = <0x00000000 0x08000000>;
        };
 };
-
-&uart0 {
-       status = "okay";
-};
index b16cac92904fe7145f728a985da7327654f29d5a..95e8be65f2f14039ee4d04bfbcb1425fe1ce15f0 100644 (file)
@@ -50,7 +50,3 @@ memory {
                reg = <0x00000000 0x08000000>;
        };
 };
-
-&uart0 {
-       status = "okay";
-};
index 0a9abecf9423456f8aeac756c2b6533347742b53..decd86bae901c0296a07cff8cf59b32006e972c9 100644 (file)
@@ -70,10 +70,6 @@ restart {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
 &spi_nor {
        status = "okay";
 };
index 05a985a203789c8cbaae5d7a3a55e8496749975b..bfd923096a8c1f5487b4bed2302ee8c784c395c7 100644 (file)
@@ -54,7 +54,6 @@ memory {
 
 &uart0 {
        clock-frequency = <62499840>;
-       status = "okay";
 };
 
 &uart1 {
index a21b0fd21f4ef586223d8033b2bbb1f8b762076a..3f04a40eb90cc904afb27fb71603270a8d8e1bea 100644 (file)
@@ -65,7 +65,6 @@ &amac0 {
        status = "okay";
 };
 
-
 &amac1 {
        status = "okay";
 };
@@ -125,6 +124,40 @@ nand_sel: nand_sel {
        };
 };
 
+&qspi {
+       bspi-sel = <0>;
+       flash: m25p80@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "m25p80";
+               reg = <0x0>;
+               spi-max-frequency = <12500000>;
+               m25p,fast-read;
+               spi-cpol;
+               spi-cpha;
+
+               partition@0 {
+                       label = "boot";
+                       reg = <0x00000000 0x000a0000>;
+               };
+
+               partition@a0000 {
+                       label = "env";
+                       reg = <0x000a0000 0x00060000>;
+               };
+
+               partition@100000 {
+                       label = "system";
+                       reg = <0x00100000 0x00600000>;
+               };
+
+               partition@700000 {
+                       label = "rootfs";
+                       reg = <0x00700000 0x01900000>;
+               };
+       };
+};
+
 &uart0 {
        status = "okay";
 };
index be7f2f8ecf39baabbe3a6276b17976fea14141d1..9fd542200d3d52229e1a0651330a5ef48b2ee8a9 100644 (file)
@@ -65,7 +65,6 @@ &amac0 {
        status = "okay";
 };
 
-
 &amac1 {
        status = "okay";
 };
@@ -125,6 +124,40 @@ nand_sel: nand_sel {
        };
 };
 
+&qspi {
+       bspi-sel = <0>;
+       flash: m25p80@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "m25p80";
+               reg = <0x0>;
+               spi-max-frequency = <12500000>;
+               m25p,fast-read;
+               spi-cpol;
+               spi-cpha;
+
+               partition@0 {
+                       label = "boot";
+                       reg = <0x00000000 0x000a0000>;
+               };
+
+               partition@a0000 {
+                       label = "env";
+                       reg = <0x000a0000 0x00060000>;
+               };
+
+               partition@100000 {
+                       label = "system";
+                       reg = <0x00100000 0x00600000>;
+               };
+
+               partition@700000 {
+                       label = "rootfs";
+                       reg = <0x00700000 0x01900000>;
+               };
+       };
+};
+
 &sata_phy0 {
        status = "okay";
 };
index 959cde911c3c5102c5b5db0f72cf6a6b86476934..41e7fd350fcd1bbf6c36008c5f1e1c179679ffe0 100644 (file)
@@ -59,6 +59,12 @@ gpio-restart {
        };
 };
 
+/* XHCI support needed to be complete */
+
+&amac0 {
+       status = "okay";
+};
+
 &i2c0 {
        temperature-sensor@4c {
                compatible = "adi,adt7461a";
@@ -115,12 +121,6 @@ partition@4000000 {
        };
 };
 
-/* XHCI, MMC, and Ethernet support needed to be complete */
-
-&uart0 {
-       status = "okay";
-};
-
 &pcie0 {
        status = "okay";
 };
@@ -129,6 +129,49 @@ &pcie1 {
        status = "okay";
 };
 
+&pinctrl {
+       pinctrl-names = "default";
+       pinctrl-0 = <&nand_sel>;
+       nand_sel: nand_sel {
+               function = "nand";
+               groups = "nand_grp";
+       };
+};
+
+&qspi {
+       bspi-sel = <0>;
+       flash: m25p80@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "m25p80";
+               reg = <0x0>;
+               spi-max-frequency = <12500000>;
+               m25p,fast-read;
+               spi-cpol;
+               spi-cpha;
+
+               partition@0 {
+                       label = "boot";
+                       reg = <0x00000000 0x000a0000>;
+               };
+
+               partition@a0000 {
+                       label = "env";
+                       reg = <0x000a0000 0x00060000>;
+               };
+
+               partition@100000 {
+                       label = "system";
+                       reg = <0x00100000 0x00600000>;
+               };
+
+               partition@700000 {
+                       label = "rootfs";
+                       reg = <0x00700000 0x01900000>;
+               };
+       };
+};
+
 &sata_phy0 {
        status = "okay";
 };
@@ -141,11 +184,10 @@ &sata {
        status = "okay";
 };
 
-&pinctrl {
-       pinctrl-names = "default";
-       pinctrl-0 = <&nand_sel>;
-       nand_sel: nand_sel {
-               function = "nand";
-               groups = "nand_grp";
-       };
+&sdio {
+       status = "ok";
+};
+
+&uart0 {
+       status = "okay";
 };
index ad2aa87dd15ac9fbd1d6dd831070eb687ca0fc15..477c4860db52236fa12a70aef2235c302f4a2a45 100644 (file)
@@ -65,6 +65,14 @@ &amac0 {
        status = "okay";
 };
 
+&amac1 {
+       status = "okay";
+};
+
+&amac2 {
+       status = "okay";
+};
+
 &nand {
        nandcs@0 {
                compatible = "brcm,nandcs";
@@ -120,6 +128,40 @@ nand_sel: nand_sel {
        };
 };
 
+&qspi {
+       bspi-sel = <0>;
+       flash: m25p80@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "m25p80";
+               reg = <0x0>;
+               spi-max-frequency = <12500000>;
+               m25p,fast-read;
+               spi-cpol;
+               spi-cpha;
+
+               partition@0 {
+                       label = "boot";
+                       reg = <0x00000000 0x000a0000>;
+               };
+
+               partition@a0000 {
+                       label = "env";
+                       reg = <0x000a0000 0x00060000>;
+               };
+
+               partition@100000 {
+                       label = "system";
+                       reg = <0x00100000 0x00600000>;
+               };
+
+               partition@700000 {
+                       label = "rootfs";
+                       reg = <0x00700000 0x01900000>;
+               };
+       };
+};
+
 &srab {
        compatible = "brcm,bcm58622-srab", "brcm,nsp-srab";
        status = "okay";
index 4ceb8fef8041ef3176c9568b283ea0f7f6bf289b..c0a499d5ba447d5503d6655541461dddb9f35317 100644 (file)
@@ -65,6 +65,14 @@ &amac0 {
        status = "okay";
 };
 
+&amac1 {
+       status = "okay";
+};
+
+&amac2 {
+       status = "okay";
+};
+
 &nand {
        nandcs@0 {
                compatible = "brcm,nandcs";
@@ -120,6 +128,48 @@ nand_sel: nand_sel {
        };
 };
 
+&sata_phy0 {
+       status = "okay";
+};
+
+&sata {
+       status = "okay";
+};
+
+&qspi {
+       bspi-sel = <0>;
+       flash: m25p80@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "m25p80";
+               reg = <0x0>;
+               spi-max-frequency = <12500000>;
+               m25p,fast-read;
+               spi-cpol;
+               spi-cpha;
+
+               partition@0 {
+                       label = "boot";
+                       reg = <0x00000000 0x000a0000>;
+               };
+
+               partition@a0000 {
+                       label = "env";
+                       reg = <0x000a0000 0x00060000>;
+               };
+
+               partition@100000 {
+                       label = "system";
+                       reg = <0x00100000 0x00600000>;
+               };
+
+               partition@700000 {
+                       label = "rootfs";
+                       reg = <0x00700000 0x01900000>;
+               };
+       };
+};
+
 &srab {
        compatible = "brcm,bcm58623-srab", "brcm,nsp-srab";
        status = "okay";
@@ -165,14 +215,6 @@ fixed-link {
        };
 };
 
-&sata_phy0 {
-       status = "okay";
-};
-
-&sata {
-       status = "okay";
-};
-
 &uart0 {
        status = "okay";
 };
index 442002597063516f0fa060b3886ac5d11d802e89..f7eb5854a224486adbe98a33da6a4ae59b17a90a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  BSD LICENSE
  *
- *  Copyright (c) 2016 Broadcom.  All rights reserved.
+ *  Copyright(c) 2016 Broadcom.  All rights reserved.
  *
  *  Redistribution and use in source and binary forms, with or without
  *  modification, are permitted provided that the following conditions
@@ -59,6 +59,18 @@ gpio-restart {
        };
 };
 
+&amac0 {
+       status = "okay";
+};
+
+&amac1 {
+       status = "okay";
+};
+
+&amac2 {
+       status = "okay";
+};
+
 &nand {
        nandcs@0 {
                compatible = "brcm,nandcs";
@@ -97,10 +109,6 @@ partition@4000000 {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
 &pcie0 {
        status = "okay";
 };
@@ -118,7 +126,49 @@ nand_sel: nand_sel {
        };
 };
 
-&amac0 {
+&qspi {
+       bspi-sel = <0>;
+       flash: m25p80@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "m25p80";
+               reg = <0x0>;
+               spi-max-frequency = <12500000>;
+               m25p,fast-read;
+               spi-cpol;
+               spi-cpha;
+
+               partition@0 {
+                       label = "boot";
+                       reg = <0x00000000 0x000a0000>;
+               };
+
+               partition@a0000 {
+                       label = "env";
+                       reg = <0x000a0000 0x00060000>;
+               };
+
+               partition@100000 {
+                       label = "system";
+                       reg = <0x00100000 0x00600000>;
+               };
+
+               partition@700000 {
+                       label = "rootfs";
+                       reg = <0x00700000 0x01900000>;
+               };
+       };
+};
+
+&sata_phy0 {
+       status = "okay";
+};
+
+&sata_phy1 {
+       status = "okay";
+};
+
+&sata {
        status = "okay";
 };
 
@@ -167,14 +217,6 @@ fixed-link {
        };
 };
 
-&sata_phy0 {
-       status = "okay";
-};
-
-&sata_phy1 {
-       status = "okay";
-};
-
-&sata {
+&uart0 {
        status = "okay";
 };
index 59d96fb91583c76378e868bf63a84f32803f2ef4..f8d47e517e18ceaa28abc6a43f115d31fa9e71a9 100644 (file)
@@ -53,14 +53,6 @@ memory {
        };
 };
 
-&uart0 {
-       status = "okay";
-};
-
-&uart1 {
-       status = "okay";
-};
-
 &amac0 {
        status = "okay";
 };
@@ -69,27 +61,7 @@ &amac1 {
        status = "okay";
 };
 
-&pcie0 {
-       status = "okay";
-};
-
-&pcie1 {
-       status = "okay";
-};
-
-&pcie2 {
-       status = "okay";
-};
-
-&sata_phy0 {
-       status = "okay";
-};
-
-&sata_phy1 {
-       status = "okay";
-};
-
-&sata {
+&amac2 {
        status = "okay";
 };
 
@@ -112,32 +84,65 @@ partition@0 {
                        reg = <0x00000000 0x00200000>;
                        read-only;
                };
-               partition@1 {
+               partition@200000 {
                        label = "nenv";
                        reg = <0x00200000 0x00400000>;
                };
-               partition@2 {
+               partition@600000 {
                        label = "nsystem";
                        reg = <0x00600000 0x00a00000>;
                };
-               partition@3 {
+               partition@1000000 {
                        label = "nrootfs";
                        reg = <0x01000000 0x03000000>;
                };
-               partition@4 {
+               partition@4000000 {
                        label = "ncustfs";
                        reg = <0x04000000 0x3c000000>;
                };
        };
 };
 
+&pcie0 {
+       status = "okay";
+};
+
+&pcie1 {
+       status = "okay";
+};
+
+&pcie2 {
+       status = "okay";
+};
+
 &pinctrl {
        pinctrl-names = "default";
-       pinctrl-0 = <&nand_sel>;
+       pinctrl-0 = <&nand_sel>, <&gpiobs>, <&pwmc>;
+
        nand_sel: nand_sel {
                function = "nand";
                groups = "nand_grp";
        };
+
+       gpiobs: gpiobs {
+               function = "gpio_b";
+               groups = "gpio_b_0_grp", "gpio_b_1_grp", "gpio_b_2_grp",
+                        "gpio_b_3_grp";
+       };
+
+       pwmc: pwmc {
+               function = "pwm";
+               groups = "pwm0_grp", "pwm1_grp", "pwm2_grp", "pwm3_grp";
+       };
+
+       emmc_sel: emmc_sel {
+               function = "emmc";
+               groups = "emmc_grp";
+       };
+};
+
+&pwm {
+       status = "okay";
 };
 
 &qspi {
@@ -173,3 +178,81 @@ partition@700000 {
                };
        };
 };
+
+&sata_phy0 {
+       status = "okay";
+};
+
+&sata_phy1 {
+       status = "okay";
+};
+
+&sata {
+       status = "okay";
+};
+
+/*
+ * By default the sd slot is functional. For emmc to work add "<&emmc_sel>"
+ * and delete "<&nand_sel>" in "pinctrl-0" property of pinctrl node. Remove the
+ * bus-width property here and disable the nand node with status = "disabled";.
+ *
+ * Ex: pinctrl-0 = <&emmc_sel>, <&gpiobs>, <&pwmc>;
+ */
+&sdio {
+       bus-width = <4>;
+       no-1-8-v;
+       status = "ok";
+};
+
+&srab {
+       compatible = "brcm,bcm58625-srab", "brcm,nsp-srab";
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       label = "port0";
+                       reg = <0>;
+               };
+
+               port@1 {
+                       label = "port1";
+                       reg = <1>;
+               };
+
+               port@2 {
+                       label = "port2";
+                       reg = <2>;
+               };
+
+               port@3 {
+                       label = "port3";
+                       reg = <3>;
+               };
+
+               port@4 {
+                       label = "port4";
+                       reg = <4>;
+               };
+
+               port@5 {
+                       ethernet = <&amac0>;
+                       label = "cpu";
+                       reg = <5>;
+                       fixed-link {
+                               speed = <1000>;
+                               full-duplex;
+                       };
+               };
+       };
+};
+
+&uart0 {
+       status = "okay";
+};
+
+&uart1 {
+       status = "okay";
+};
index 104afe98a43b1d880d9073b69bfc9d27bac69a33..16666324fda8b5b901af538423ad302d13b9f98d 100644 (file)
@@ -65,6 +65,14 @@ &amac0 {
        status = "okay";
 };
 
+&amac1 {
+       status = "okay";
+};
+
+&amac2 {
+       status = "okay";
+};
+
 &nand {
        nandcs@0 {
                compatible = "brcm,nandcs";
@@ -120,6 +128,40 @@ nand_sel: nand_sel {
        };
 };
 
+&qspi {
+       bspi-sel = <0>;
+       flash: m25p80@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "m25p80";
+               reg = <0x0>;
+               spi-max-frequency = <12500000>;
+               m25p,fast-read;
+               spi-cpol;
+               spi-cpha;
+
+               partition@0 {
+                       label = "boot";
+                       reg = <0x00000000 0x000a0000>;
+               };
+
+               partition@a0000 {
+                       label = "env";
+                       reg = <0x000a0000 0x00060000>;
+               };
+
+               partition@100000 {
+                       label = "system";
+                       reg = <0x00100000 0x00600000>;
+               };
+
+               partition@700000 {
+                       label = "rootfs";
+                       reg = <0x00700000 0x01900000>;
+               };
+       };
+};
+
 &sata_phy0 {
        status = "okay";
 };
index 41de15fe15a2f0dfa241748b2b49ef90be48b323..cea36ee6fd0788145435193d53d3608692d9fc68 100644 (file)
@@ -289,3 +289,23 @@ nand@2000000,0 {
                };
        };
 };
+
+&vpif {
+       pinctrl-names = "default";
+       pinctrl-0 = <&vpif_capture_pins>;
+       status = "okay";
+
+       /* VPIF capture port */
+       port {
+               vpif_ch0: endpoint@0 {
+                         reg = <0>;
+                         bus-width = <8>;
+               };
+
+               vpif_ch1: endpoint@1 {
+                         reg = <1>;
+                         bus-width = <8>;
+                         data-shift = <8>;
+               };
+       };
+};
index afcb4821deb18ffb71356a4a9c03f1e945728426..60e027e8a054007ed560ff0f12a86bba34516508 100644 (file)
@@ -6,6 +6,7 @@
 /dts-v1/;
 #include "da850.dtsi"
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
 
 / {
        model = "DA850/AM1808/OMAP-L138 LCDK";
@@ -51,6 +52,62 @@ link0_codec: simple-audio-card,codec {
                        system-clock-frequency = <24576000>;
                };
        };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               autorepeat;
+
+               user1 {
+                       label = "GPIO Key USER1";
+                       linux,code = <BTN_0>;
+                       gpios = <&gpio 36 GPIO_ACTIVE_LOW>;
+               };
+
+               user2 {
+                       label = "GPIO Key USER2";
+                       linux,code = <BTN_1>;
+                       gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       vga-bridge {
+               compatible = "ti,ths8135";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+
+                               vga_bridge_in: endpoint {
+                                       remote-endpoint = <&lcdc_out_vga>;
+                               };
+                       };
+
+                       port@1 {
+                               reg = <1>;
+
+                               vga_bridge_out: endpoint {
+                                       remote-endpoint = <&vga_con_in>;
+                               };
+                       };
+               };
+       };
+
+       vga {
+               compatible = "vga-connector";
+
+               ddc-i2c-bus = <&i2c0>;
+
+               port {
+                       vga_con_in: endpoint {
+                               remote-endpoint = <&vga_bridge_out>;
+                       };
+               };
+       };
 };
 
 &pmx_core {
@@ -167,6 +224,10 @@ &usb0 {
        status = "okay";
 };
 
+&usb1 {
+       status = "okay";
+};
+
 &aemif {
        pinctrl-names = "default";
        pinctrl-0 = <&nand_pins>;
@@ -236,3 +297,28 @@ &prictrl {
 &memctrl {
        status = "okay";
 };
+
+&lcdc {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&lcd_pins>;
+
+       port {
+               lcdc_out_vga: endpoint {
+                       remote-endpoint = <&vga_bridge_in>;
+               };
+       };
+};
+
+&vpif {
+       pinctrl-names = "default";
+       pinctrl-0 = <&vpif_capture_pins>;
+       status = "okay";
+
+       /* VPIF capture port */
+       port {
+               vpif_ch0: endpoint {
+                         bus-width = <8>;
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/da850-lego-ev3.dts b/arch/arm/boot/dts/da850-lego-ev3.dts
new file mode 100644 (file)
index 0000000..112ec92
--- /dev/null
@@ -0,0 +1,313 @@
+/*
+ * Device tree for LEGO MINDSTORMS EV3
+ *
+ * Copyright (C) 2017 David Lechner <david@lechnology.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, version 2.
+ */
+
+/dts-v1/;
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
+#include <dt-bindings/pwm/pwm.h>
+
+#include "da850.dtsi"
+
+/ {
+       compatible = "lego,ev3", "ti,da850";
+       model = "LEGO MINDSTORMS EV3";
+
+       aliases {
+               serial1 = &serial1;
+       };
+
+       memory@c0000000 {
+               device_type = "memory";
+               reg = <0xc0000000 0x04000000>;
+       };
+
+       /*
+        * The buttons on the EV3 are mapped to keyboard keys.
+        */
+       gpio_keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               label = "EV3 Brick Buttons";
+               pinctrl-names = "default";
+               pinctrl-0 = <&button_pins>, <&button_bias>;
+
+               center {
+                       label = "Center";
+                       linux,code = <KEY_ENTER>;
+                       gpios = <&gpio 29 GPIO_ACTIVE_HIGH>;
+               };
+
+               left {
+                       label = "Left";
+                       linux,code = <KEY_LEFT>;
+                       gpios = <&gpio 102 GPIO_ACTIVE_HIGH>;
+               };
+
+               back {
+                       label = "Back";
+                       linux,code = <KEY_BACKSPACE>;
+                       gpios = <&gpio 106 GPIO_ACTIVE_HIGH>;
+               };
+
+               right {
+                       label = "Right";
+                       linux,code = <KEY_RIGHT>;
+                       gpios = <&gpio 124 GPIO_ACTIVE_HIGH>;
+               };
+
+               down {
+                       label = "Down";
+                       linux,code = <KEY_DOWN>;
+                       gpios = <&gpio 126 GPIO_ACTIVE_HIGH>;
+               };
+
+               up {
+                       label = "Up";
+                       linux,code = <KEY_UP>;
+                       gpios = <&gpio 127 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       /*
+        * The EV3 has two built-in bi-color LEDs behind the buttons.
+        */
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-names = "default";
+               pinctrl-0 = <&led_pins>;
+
+               left_green {
+                       label = "led0:green:brick-status";
+                       /* GP6[13] */
+                       gpios = <&gpio 103 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "default-on";
+               };
+
+               right_red {
+                       label = "led1:red:brick-status";
+                       /* GP6[7] */
+                       gpios = <&gpio 108 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "default-on";
+               };
+
+               left_red {
+                       label = "led0:red:brick-status";
+                       /* GP6[12] */
+                       gpios = <&gpio 109 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "default-on";
+               };
+
+               right_green {
+                       label = "led1:green:brick-status";
+                       /* GP6[14] */
+                       gpios = <&gpio 110 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "default-on";
+               };
+       };
+
+       /*
+        * The EV3 is powered down by turning off the main 5V supply.
+        */
+       gpio-poweroff {
+               compatible = "gpio-poweroff";
+               gpios = <&gpio 107 GPIO_ACTIVE_LOW>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&system_power_pin>;
+       };
+
+       /*
+        * This is a 5V current limiting regulator that is shared by USB,
+        * the sensor (input) ports, the motor (output) ports and the A/DC.
+        */
+       vcc5v: regulator1 {
+               pinctrl-names = "default";
+               pinctrl-0 = <&vcc5v_pins>;
+               compatible = "regulator-fixed";
+               regulator-name = "vcc5v";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio 101 0>;
+               over-current-gpios = <&gpio 99 GPIO_ACTIVE_LOW>;
+               enable-active-high;
+               regulator-boot-on;
+       };
+};
+
+&pmx_core {
+       status = "okay";
+
+       spi0_cs3_pin: pinmux_spi0_cs3_pin {
+               pinctrl-single,bits = <
+                       /* CS3 */
+                       0xc 0x01000000 0x0f000000
+               >;
+       };
+
+       mmc0_cd_pin: pinmux_mmc0_cd {
+               pinctrl-single,bits = <
+                       /* GP5[14] */
+                       0x2C 0x00000080 0x000000f0
+               >;
+       };
+
+       button_pins: pinmux_button_pins {
+               pinctrl-single,bits = <
+                       /* GP1[13] */
+                       0x8 0x00000800 0x00000f00
+                       /* GP6[10] */
+                       0x34 0x00800000 0x00f00000
+                       /* GP6[6] */
+                       0x38 0x00000080 0x000000f0
+                       /* GP7[12], GP7[14], GP7[15] */
+                       0x40 0x00808800 0x00f0ff00
+               >;
+       };
+
+       led_pins: pinmux_led_pins {
+               pinctrl-single,bits = <
+                       /* GP6[12], GP6[13], GP6[14] */
+                       0x34 0x00008880 0x0000fff0
+                       /* GP6[7] */
+                       0x38 0x00000008 0x0000000f
+               >;
+       };
+
+       system_power_pin: pinmux_system_power {
+               pinctrl-single,bits = <
+                       /* GP6[11] */
+                       0x34 0x00080000 0x000f0000
+               >;
+       };
+
+       vcc5v_pins: pinmux_vcc5v {
+               pinctrl-single,bits = <
+                       /* GP6[5] */
+                       0x40 0x00000080 0x000000f0
+                       /* GP6[3] */
+                       0x4c 0x00008000 0x0000f000
+               >;
+       };
+};
+
+&pinconf {
+       status = "okay";
+
+       /* Buttons have external pulldown resistors */
+       button_bias: button-bias-groups {
+               disable {
+                       groups = "cp5", "cp24", "cp25", "cp28";
+                       bias-disable;
+               };
+       };
+};
+
+/* Input port 1 */
+&serial1 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&serial1_rxtx_pins>;
+};
+
+&rtc0 {
+       status = "okay";
+};
+
+&i2c0 {
+       status = "okay";
+       clock-frequency = <400000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c0_pins>;
+
+       /*
+        * EEPROM contains the first stage bootloader, HW ID and Bluetooth MAC.
+        */
+       eeprom@50 {
+               compatible = "microchip,24c128";
+               pagesize = <64>;
+               read-only;
+               reg = <0x50>;
+       };
+};
+
+&wdt {
+       status = "okay";
+};
+
+&mmc0 {
+       status = "okay";
+       max-frequency = <50000000>;
+       bus-width = <4>;
+       cd-gpios = <&gpio 94 GPIO_ACTIVE_LOW>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc0_pins>, <&mmc0_cd_pin>;
+};
+
+&spi0 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi0_pins>, <&spi0_cs0_pin>, <&spi0_cs3_pin>;
+
+       flash@0 {
+               compatible = "n25q128a13", "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+               ti,spi-wdelay = <8>;
+
+               /* Partitions are based on the official firmware from LEGO */
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "U-Boot";
+                               reg = <0 0x40000>;
+                       };
+
+                       partition@40000 {
+                               label = "U-Boot Env";
+                               reg = <0x40000 0x10000>;
+                       };
+
+                       partition@50000 {
+                               label = "Kernel";
+                               reg = <0x50000 0x200000>;
+                       };
+
+                       partition@250000 {
+                               label = "Filesystem";
+                               reg = <0x250000 0xa50000>;
+                       };
+
+                       partition@cb0000 {
+                               label = "Storage";
+                               reg = <0xcb0000 0x2f0000>;
+                       };
+               };
+       };
+};
+
+&gpio {
+       status = "okay";
+};
+
+&usb_phy {
+       status = "okay";
+};
+
+&usb0 {
+       status = "okay";
+};
+
+&usb1 {
+       status = "okay";
+       vbus-supply = <&vcc5v>;
+};
index 104155d12c2fa5fb4920e11f74464a1da5e11105..6dfd3bf3a6d8bd21c3ab0c31be63a7d96b12ba2f 100644 (file)
@@ -208,7 +208,18 @@ lcd_pins: pinmux_lcd_pins {
                                        0x4c 0x02000022 0x0f0000ff
                                >;
                        };
-
+                       vpif_capture_pins: vpif_capture_pins {
+                               pinctrl-single,bits = <
+                                       /* VP_DIN[2..7], VP_CLKIN1, VP_CLKIN0 */
+                                       0x38 0x11111111 0xffffffff
+                                       /* VP_DIN[10..15,0..1] */
+                                       0x3c 0x11111111 0xffffffff
+                                       /* VP_DIN[8..9] */
+                                       0x40 0x00000011 0x000000ff
+                                       /* VP_CLKIN3, VP_CLKIN2 */
+                                       0x4c 0x00010100 0x000f0f00
+                               >;
+                       };
                };
                prictrl: priority-controller@14110 {
                        compatible = "ti,da850-mstpri";
@@ -266,22 +277,25 @@ edma1_tptc0: tptc@238000 {
                        interrupt-names = "edm3_tcerrint";
                };
                serial0: serial@42000 {
-                       compatible = "ns16550a";
+                       compatible = "ti,da830-uart", "ns16550a";
                        reg = <0x42000 0x100>;
+                       reg-io-width = <4>;
                        reg-shift = <2>;
                        interrupts = <25>;
                        status = "disabled";
                };
                serial1: serial@10c000 {
-                       compatible = "ns16550a";
+                       compatible = "ti,da830-uart", "ns16550a";
                        reg = <0x10c000 0x100>;
+                       reg-io-width = <4>;
                        reg-shift = <2>;
                        interrupts = <53>;
                        status = "disabled";
                };
                serial2: serial@10d000 {
-                       compatible = "ns16550a";
+                       compatible = "ti,da830-uart", "ns16550a";
                        reg = <0x10d000 0x100>;
+                       reg-io-width = <4>;
                        reg-shift = <2>;
                        interrupts = <61>;
                        status = "disabled";
@@ -324,6 +338,18 @@ mmc0: mmc@40000 {
                        dma-names = "rx", "tx";
                        status = "disabled";
                };
+               vpif: video@217000 {
+                       compatible = "ti,da850-vpif";
+                       reg = <0x217000 0x1000>;
+                       interrupts = <92>;
+                       status = "disabled";
+
+                       /* VPIF capture port */
+                       port {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                       };
+               };
                mmc1: mmc@21b000 {
                        compatible = "ti,da830-mmc";
                        reg = <0x21b000 0x1000>;
@@ -425,6 +451,14 @@ eth0: ethernet@220000 {
                                        >;
                        status = "disabled";
                };
+               usb1: usb@225000 {
+                       compatible = "ti,da830-ohci";
+                       reg = <0x225000 0x1000>;
+                       interrupts = <59>;
+                       phys = <&usb_phy 1>;
+                       phy-names = "usb-phy";
+                       status = "disabled";
+               };
                gpio: gpio@226000 {
                        compatible = "ti,dm6441-gpio";
                        gpio-controller;
@@ -458,10 +492,11 @@ mcasp0: mcasp@100000 {
                        dma-names = "tx", "rx";
                };
 
-               display: display@213000 {
+               lcdc: display@213000 {
                        compatible = "ti,da850-tilcdc";
                        reg = <0x213000 0x1000>;
                        interrupts = <52>;
+                       max-pixelclock = <37500>;
                        status = "disabled";
                };
        };
index 1facc5f12cef700acf90e0b2f2e8594096a9bf9a..81b8cecb58206d8c98d9d986a1995e67e17fe7ed 100644 (file)
@@ -12,6 +12,7 @@ / {
        interrupt-parent = <&intc>;
        #address-cells = <1>;
        #size-cells = <1>;
+       chosen { };
 
        aliases {
                i2c0 = &i2c1;
index 61dd2f6b02bcfe47d7d6a5ddd5734de0e5687e89..6db652ae9bd558021ac99a6a8bcb954a5c94b806 100644 (file)
@@ -12,6 +12,7 @@ / {
        interrupt-parent = <&intc>;
        #address-cells = <1>;
        #size-cells = <1>;
+       chosen { };
 
        aliases {
                i2c0 = &i2c1;
index 59b4056b478fa3ba631b36780fafafd82b984bed..9b9dfbe07be4c86c708163d8d09ee01d97cd2b1a 100644 (file)
  *     published by the Free Software Foundation; version 2 of the
  *     License.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 288e707dea993b826b56640cbd10abe802038821..2bb85a9b76141cb1e31d369863ae617d14bf8041 100644 (file)
  *     published by the Free Software Foundation; version 2 of the
  *     License.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 132f2be10889fbfc7a94d5048b9ee096a0bf848c..4bc4b575c99bd43da80115cf4d8ee74845f3cc22 100644 (file)
@@ -21,6 +21,10 @@ memory@0 {
                reg = <0x0 0x80000000 0x0 0x60000000>; /* 1536 MB */
        };
 
+       chosen {
+               stdout-path = &uart1;
+       };
+
        evm_3v3_sd: fixedregulator-sd {
                compatible = "regulator-fixed";
                regulator-name = "evm_3v3_sd";
@@ -151,204 +155,6 @@ USER2 {
 };
 
 &dra7_pmx_core {
-       pinctrl-names = "default";
-       pinctrl-0 = <&vtt_pin>;
-
-       vtt_pin: pinmux_vtt_pin {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x37b4, PIN_OUTPUT | MUX_MODE14) /* spi1_cs1.gpio7_11 */
-               >;
-       };
-
-       i2c1_pins: pinmux_i2c1_pins {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x3800, PIN_INPUT | MUX_MODE0) /* i2c1_sda */
-                       DRA7XX_CORE_IOPAD(0x3804, PIN_INPUT | MUX_MODE0) /* i2c1_scl */
-               >;
-       };
-
-       i2c2_pins: pinmux_i2c2_pins {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x3808, PIN_INPUT | MUX_MODE0) /* i2c2_sda */
-                       DRA7XX_CORE_IOPAD(0x380c, PIN_INPUT | MUX_MODE0) /* i2c2_scl */
-               >;
-       };
-
-       i2c3_pins: pinmux_i2c3_pins {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x3688, PIN_INPUT | MUX_MODE9) /* gpio6_14.i2c3_sda */
-                       DRA7XX_CORE_IOPAD(0x368c, PIN_INPUT | MUX_MODE9) /* gpio6_15.i2c3_scl */
-               >;
-       };
-
-       mcspi1_pins: pinmux_mcspi1_pins {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x37a4, PIN_INPUT | MUX_MODE0) /* spi1_sclk */
-                       DRA7XX_CORE_IOPAD(0x37a8, PIN_INPUT | MUX_MODE0) /* spi1_d1 */
-                       DRA7XX_CORE_IOPAD(0x37ac, PIN_INPUT | MUX_MODE0) /* spi1_d0 */
-                       DRA7XX_CORE_IOPAD(0x37b0, PIN_INPUT_SLEW | MUX_MODE0) /* spi1_cs0 */
-                       DRA7XX_CORE_IOPAD(0x37b8, PIN_INPUT_SLEW | MUX_MODE6) /* spi1_cs2.hdmi1_hpd */
-                       DRA7XX_CORE_IOPAD(0x37bc, PIN_INPUT_SLEW | MUX_MODE6) /* spi1_cs3.hdmi1_cec */
-               >;
-       };
-
-       mcspi2_pins: pinmux_mcspi2_pins {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x37c0, PIN_INPUT | MUX_MODE0) /* spi2_sclk */
-                       DRA7XX_CORE_IOPAD(0x37c4, PIN_INPUT_SLEW | MUX_MODE0) /* spi2_d1 */
-                       DRA7XX_CORE_IOPAD(0x37c8, PIN_INPUT_SLEW | MUX_MODE0) /* spi2_d1 */
-                       DRA7XX_CORE_IOPAD(0x37cc, PIN_INPUT_SLEW | MUX_MODE0) /* spi2_cs0 */
-               >;
-       };
-
-       uart1_pins: pinmux_uart1_pins {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x37e0, PIN_INPUT_SLEW | MUX_MODE0) /* uart1_rxd */
-                       DRA7XX_CORE_IOPAD(0x37e4, PIN_INPUT_SLEW | MUX_MODE0) /* uart1_txd */
-                       DRA7XX_CORE_IOPAD(0x37e8, PIN_INPUT | MUX_MODE3) /* uart1_ctsn */
-                       DRA7XX_CORE_IOPAD(0x37ec, PIN_INPUT | MUX_MODE3) /* uart1_rtsn */
-               >;
-       };
-
-       uart2_pins: pinmux_uart2_pins {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x37f0, PIN_INPUT | MUX_MODE0) /* uart2_rxd */
-                       DRA7XX_CORE_IOPAD(0x37f4, PIN_INPUT | MUX_MODE0) /* uart2_txd */
-                       DRA7XX_CORE_IOPAD(0x37f8, PIN_INPUT | MUX_MODE0) /* uart2_ctsn */
-                       DRA7XX_CORE_IOPAD(0x37fc, PIN_INPUT | MUX_MODE0) /* uart2_rtsn */
-               >;
-       };
-
-       uart3_pins: pinmux_uart3_pins {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x3648, PIN_INPUT_SLEW | MUX_MODE0) /* uart3_rxd */
-                       DRA7XX_CORE_IOPAD(0x364c, PIN_INPUT_SLEW | MUX_MODE0) /* uart3_txd */
-               >;
-       };
-
-       usb1_pins: pinmux_usb1_pins {
-                pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x3680, PIN_INPUT_SLEW | MUX_MODE0) /* usb1_drvvbus */
-                >;
-        };
-
-       usb2_pins: pinmux_usb2_pins {
-                pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x3684, PIN_INPUT_SLEW | MUX_MODE0) /* usb2_drvvbus */
-                >;
-        };
-
-       nand_flash_x16: nand_flash_x16 {
-               /* On DRA7 EVM, GPMC_WPN and NAND_BOOTn comes from DIP switch
-                * So NAND flash requires following switch settings:
-                * SW5.1 (NAND_BOOTn) = ON (LOW)
-                * SW5.9 (GPMC_WPN) = OFF (HIGH)
-                */
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x3400, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad0     */
-                       DRA7XX_CORE_IOPAD(0x3404, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad1     */
-                       DRA7XX_CORE_IOPAD(0x3408, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad2     */
-                       DRA7XX_CORE_IOPAD(0x340c, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad3     */
-                       DRA7XX_CORE_IOPAD(0x3410, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad4     */
-                       DRA7XX_CORE_IOPAD(0x3414, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad5     */
-                       DRA7XX_CORE_IOPAD(0x3418, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad6     */
-                       DRA7XX_CORE_IOPAD(0x341c, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad7     */
-                       DRA7XX_CORE_IOPAD(0x3420, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad8     */
-                       DRA7XX_CORE_IOPAD(0x3424, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad9     */
-                       DRA7XX_CORE_IOPAD(0x3428, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad10    */
-                       DRA7XX_CORE_IOPAD(0x342c, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad11    */
-                       DRA7XX_CORE_IOPAD(0x3430, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad12    */
-                       DRA7XX_CORE_IOPAD(0x3434, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad13    */
-                       DRA7XX_CORE_IOPAD(0x3438, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad14    */
-                       DRA7XX_CORE_IOPAD(0x343c, PIN_INPUT  | MUX_MODE0)       /* gpmc_ad15    */
-                       DRA7XX_CORE_IOPAD(0x34d8, PIN_INPUT_PULLUP  | MUX_MODE0)        /* gpmc_wait0   */
-                       DRA7XX_CORE_IOPAD(0x34cc, PIN_OUTPUT | MUX_MODE0)       /* gpmc_wen     */
-                       DRA7XX_CORE_IOPAD(0x34b4, PIN_OUTPUT_PULLUP | MUX_MODE0)        /* gpmc_csn0    */
-                       DRA7XX_CORE_IOPAD(0x34c4, PIN_OUTPUT | MUX_MODE0)       /* gpmc_advn_ale */
-                       DRA7XX_CORE_IOPAD(0x34c8, PIN_OUTPUT | MUX_MODE0)       /* gpmc_oen_ren  */
-                       DRA7XX_CORE_IOPAD(0x34d0, PIN_OUTPUT | MUX_MODE0)       /* gpmc_be0n_cle */
-               >;
-       };
-
-       cpsw_default: cpsw_default {
-               pinctrl-single,pins = <
-                       /* Slave 1 */
-                       DRA7XX_CORE_IOPAD(0x3650, PIN_OUTPUT | MUX_MODE0)       /* rgmii0_txc.rgmii0_txc */
-                       DRA7XX_CORE_IOPAD(0x3654, PIN_OUTPUT | MUX_MODE0)       /* rgmii0_txctl.rgmii0_txctl */
-                       DRA7XX_CORE_IOPAD(0x3658, PIN_OUTPUT | MUX_MODE0)       /* rgmii0_td3.rgmii0_txd3 */
-                       DRA7XX_CORE_IOPAD(0x365c, PIN_OUTPUT | MUX_MODE0)       /* rgmii0_txd2.rgmii0_txd2 */
-                       DRA7XX_CORE_IOPAD(0x3660, PIN_OUTPUT | MUX_MODE0)       /* rgmii0_txd1.rgmii0_txd1 */
-                       DRA7XX_CORE_IOPAD(0x3664, PIN_OUTPUT | MUX_MODE0)       /* rgmii0_txd0.rgmii0_txd0 */
-                       DRA7XX_CORE_IOPAD(0x3668, PIN_INPUT | MUX_MODE0)        /* rgmii0_rxc.rgmii0_rxc */
-                       DRA7XX_CORE_IOPAD(0x366c, PIN_INPUT | MUX_MODE0)        /* rgmii0_rxctl.rgmii0_rxctl */
-                       DRA7XX_CORE_IOPAD(0x3670, PIN_INPUT | MUX_MODE0)        /* rgmii0_rxd3.rgmii0_rxd3 */
-                       DRA7XX_CORE_IOPAD(0x3674, PIN_INPUT | MUX_MODE0)        /* rgmii0_rxd2.rgmii0_rxd2 */
-                       DRA7XX_CORE_IOPAD(0x3678, PIN_INPUT | MUX_MODE0)        /* rgmii0_rxd1.rgmii0_rxd1 */
-                       DRA7XX_CORE_IOPAD(0x367c, PIN_INPUT | MUX_MODE0)        /* rgmii0_rxd0.rgmii0_rxd0 */
-
-                       /* Slave 2 */
-                       DRA7XX_CORE_IOPAD(0x3598, PIN_OUTPUT | MUX_MODE3)       /* vin2a_d12.rgmii1_txc */
-                       DRA7XX_CORE_IOPAD(0x359c, PIN_OUTPUT | MUX_MODE3)       /* vin2a_d13.rgmii1_tctl */
-                       DRA7XX_CORE_IOPAD(0x35a0, PIN_OUTPUT | MUX_MODE3)       /* vin2a_d14.rgmii1_td3 */
-                       DRA7XX_CORE_IOPAD(0x35a4, PIN_OUTPUT | MUX_MODE3)       /* vin2a_d15.rgmii1_td2 */
-                       DRA7XX_CORE_IOPAD(0x35a8, PIN_OUTPUT | MUX_MODE3)       /* vin2a_d16.rgmii1_td1 */
-                       DRA7XX_CORE_IOPAD(0x35ac, PIN_OUTPUT | MUX_MODE3)       /* vin2a_d17.rgmii1_td0 */
-                       DRA7XX_CORE_IOPAD(0x35b0, PIN_INPUT | MUX_MODE3)        /* vin2a_d18.rgmii1_rclk */
-                       DRA7XX_CORE_IOPAD(0x35b4, PIN_INPUT | MUX_MODE3)        /* vin2a_d19.rgmii1_rctl */
-                       DRA7XX_CORE_IOPAD(0x35b8, PIN_INPUT | MUX_MODE3)        /* vin2a_d20.rgmii1_rd3 */
-                       DRA7XX_CORE_IOPAD(0x35bc, PIN_INPUT | MUX_MODE3)        /* vin2a_d21.rgmii1_rd2 */
-                       DRA7XX_CORE_IOPAD(0x35c0, PIN_INPUT | MUX_MODE3)        /* vin2a_d22.rgmii1_rd1 */
-                       DRA7XX_CORE_IOPAD(0x35c4, PIN_INPUT | MUX_MODE3)        /* vin2a_d23.rgmii1_rd0 */
-               >;
-
-       };
-
-       cpsw_sleep: cpsw_sleep {
-               pinctrl-single,pins = <
-                       /* Slave 1 */
-                       DRA7XX_CORE_IOPAD(0x3650, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3654, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3658, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x365c, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3660, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3664, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3668, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x366c, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3670, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3674, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3678, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x367c, MUX_MODE15)
-
-                       /* Slave 2 */
-                       DRA7XX_CORE_IOPAD(0x3598, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x359c, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x35a0, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x35a4, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x35a8, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x35ac, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x35b0, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x35b4, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x35b8, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x35bc, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x35c0, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x35c4, MUX_MODE15)
-               >;
-       };
-
-       davinci_mdio_default: davinci_mdio_default {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x363c, PIN_OUTPUT_PULLUP | MUX_MODE0)        /* mdio_d.mdio_d */
-                       DRA7XX_CORE_IOPAD(0x3640, PIN_INPUT_PULLUP | MUX_MODE0) /* mdio_clk.mdio_clk */
-               >;
-       };
-
-       davinci_mdio_sleep: davinci_mdio_sleep {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x363c, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3640, MUX_MODE15)
-               >;
-       };
-
        dcan1_pins_default: dcan1_pins_default {
                pinctrl-single,pins = <
                        DRA7XX_CORE_IOPAD(0x37d0, PIN_OUTPUT_PULLUP | MUX_MODE0) /* dcan1_tx */
@@ -363,36 +169,36 @@ DRA7XX_CORE_IOPAD(0x3818, MUX_MODE15 | PULL_UP)   /* wakeup0.off */
                >;
        };
 
-       atl_pins: pinmux_atl_pins {
-               pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x3698, PIN_OUTPUT | MUX_MODE5)       /* xref_clk1.atl_clk1 */
-                       DRA7XX_CORE_IOPAD(0x369c, PIN_OUTPUT | MUX_MODE5)       /* xref_clk2.atl_clk2 */
-               >;
-       };
-
-       mcasp3_pins: pinmux_mcasp3_pins {
+       mmc1_pins_default: mmc1_pins_default {
                pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x3724, PIN_OUTPUT_PULLDOWN | MUX_MODE0)      /* mcasp3_aclkx */
-                       DRA7XX_CORE_IOPAD(0x3728, PIN_OUTPUT_PULLDOWN | MUX_MODE0)      /* mcasp3_fsx */
-                       DRA7XX_CORE_IOPAD(0x372c, PIN_OUTPUT_PULLDOWN | MUX_MODE0)      /* mcasp3_axr0 */
-                       DRA7XX_CORE_IOPAD(0x3730, PIN_INPUT_PULLDOWN | MUX_MODE0)       /* mcasp3_axr1 */
+                       DRA7XX_CORE_IOPAD(0x376c, PIN_INPUT | MUX_MODE14)       /* mmc1sdcd.gpio219 */
+                       DRA7XX_CORE_IOPAD(0x3754, PIN_INPUT_PULLUP | MUX_MODE0) /* mmc1_clk.clk */
+                       DRA7XX_CORE_IOPAD(0x3758, PIN_INPUT_PULLUP | MUX_MODE0) /* mmc1_cmd.cmd */
+                       DRA7XX_CORE_IOPAD(0x375c, PIN_INPUT_PULLUP | MUX_MODE0) /* mmc1_dat0.dat0 */
+                       DRA7XX_CORE_IOPAD(0x3760, PIN_INPUT_PULLUP | MUX_MODE0) /* mmc1_dat1.dat1 */
+                       DRA7XX_CORE_IOPAD(0x3764, PIN_INPUT_PULLUP | MUX_MODE0) /* mmc1_dat2.dat2 */
+                       DRA7XX_CORE_IOPAD(0x3768, PIN_INPUT_PULLUP | MUX_MODE0) /* mmc1_dat3.dat3 */
                >;
        };
 
-       mcasp3_sleep_pins: pinmux_mcasp3_sleep_pins {
+       mmc2_pins_default: mmc2_pins_default {
                pinctrl-single,pins = <
-                       DRA7XX_CORE_IOPAD(0x3724, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3728, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x372c, MUX_MODE15)
-                       DRA7XX_CORE_IOPAD(0x3730, MUX_MODE15)
+                       DRA7XX_CORE_IOPAD(0x349c, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_a23.mmc2_clk */
+                       DRA7XX_CORE_IOPAD(0x34b0, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_cs1.mmc2_cmd */
+                       DRA7XX_CORE_IOPAD(0x34a0, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_a24.mmc2_dat0 */
+                       DRA7XX_CORE_IOPAD(0x34a4, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_a25.mmc2_dat1 */
+                       DRA7XX_CORE_IOPAD(0x34a8, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_a26.mmc2_dat2 */
+                       DRA7XX_CORE_IOPAD(0x34ac, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_a27.mmc2_dat3 */
+                       DRA7XX_CORE_IOPAD(0x348c, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_a19.mmc2_dat4 */
+                       DRA7XX_CORE_IOPAD(0x3490, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_a20.mmc2_dat5 */
+                       DRA7XX_CORE_IOPAD(0x3494, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_a21.mmc2_dat6 */
+                       DRA7XX_CORE_IOPAD(0x3498, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_a22.mmc2_dat7 */
                >;
        };
 };
 
 &i2c1 {
        status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c1_pins>;
        clock-frequency = <400000>;
 
        tps659038: tps659038@58 {
@@ -581,8 +387,6 @@ tlv320aic3106: tlv320aic3106@19 {
 
 &i2c2 {
        status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c2_pins>;
        clock-frequency = <400000>;
 
        pcf_hdmi: gpio@26 {
@@ -602,45 +406,35 @@ p1 {
 
 &i2c3 {
        status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&i2c3_pins>;
        clock-frequency = <400000>;
 };
 
 &mcspi1 {
        status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&mcspi1_pins>;
 };
 
 &mcspi2 {
        status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&mcspi2_pins>;
 };
 
 &uart1 {
        status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&uart1_pins>;
        interrupts-extended = <&crossbar_mpu GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
                              <&dra7_pmx_core 0x3e0>;
 };
 
 &uart2 {
        status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&uart2_pins>;
 };
 
 &uart3 {
        status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&uart3_pins>;
 };
 
 &mmc1 {
        status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc1_pins_default>;
        vmmc-supply = <&evm_3v3_sd>;
        vmmc_aux-supply = <&ldo1_reg>;
        bus-width = <4>;
@@ -653,6 +447,8 @@ &mmc1 {
 
 &mmc2 {
        status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc2_pins_default>;
        vmmc-supply = <&evm_3v3_sw>;
        bus-width = <8>;
 };
@@ -732,14 +528,10 @@ &omap_dwc3_2 {
 
 &usb1 {
        dr_mode = "peripheral";
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb1_pins>;
 };
 
 &usb2 {
        dr_mode = "host";
-       pinctrl-names = "default";
-       pinctrl-0 = <&usb2_pins>;
 };
 
 &elm {
@@ -747,9 +539,12 @@ &elm {
 };
 
 &gpmc {
-       status = "okay";
-       pinctrl-names = "default";
-       pinctrl-0 = <&nand_flash_x16>;
+       /*
+       * For the existing IOdelay configuration via U-Boot we don't
+       * support NAND on dra7-evm. Keep it disabled. Enabling it
+       * requires a different configuration by U-Boot.
+       */
+       status = "disabled";
        ranges = <0 0 0x08000000 0x01000000>;   /* minimum GPMC partition = 16MB */
        nand@0,0 {
                compatible = "ti,omap2-nand";
@@ -845,9 +640,6 @@ &gpio7 {
 
 &mac {
        status = "okay";
-       pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&cpsw_default>;
-       pinctrl-1 = <&cpsw_sleep>;
        dual_emac;
 };
 
@@ -863,12 +655,6 @@ &cpsw_emac1 {
        dual_emac_res_vlan = <2>;
 };
 
-&davinci_mdio {
-       pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&davinci_mdio_default>;
-       pinctrl-1 = <&davinci_mdio_sleep>;
-};
-
 &dcan1 {
        status = "ok";
        pinctrl-names = "default", "sleep", "active";
@@ -878,9 +664,6 @@ &dcan1 {
 };
 
 &atl {
-       pinctrl-names = "default";
-       pinctrl-0 = <&atl_pins>;
-
        assigned-clocks = <&abe_dpll_sys_clk_mux>,
                          <&atl_gfclk_mux>,
                          <&dpll_abe_ck>,
@@ -899,9 +682,6 @@ atl2 {
 
 &mcasp3 {
        #sound-dai-cells = <0>;
-       pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&mcasp3_pins>;
-       pinctrl-1 = <&mcasp3_sleep_pins>;
 
        assigned-clocks = <&mcasp3_ahclkx_mux>;
        assigned-clock-parents = <&atl_clkin2_ck>;
index addb7530cfbe0dcece696c2e84fbb5ea8896ceb2..a9ffa49c1ebe33852119ca7bf8642925f6f27653 100644 (file)
@@ -18,6 +18,7 @@ / {
 
        compatible = "ti,dra7xx";
        interrupt-parent = <&crossbar_mpu>;
+       chosen { };
 
        aliases {
                i2c0 = &i2c1;
@@ -56,7 +57,7 @@ gic: interrupt-controller@48211000 {
                interrupt-controller;
                #interrupt-cells = <3>;
                reg = <0x0 0x48211000 0x0 0x1000>,
-                     <0x0 0x48212000 0x0 0x1000>,
+                     <0x0 0x48212000 0x0 0x2000>,
                      <0x0 0x48214000 0x0 0x2000>,
                      <0x0 0x48216000 0x0 0x2000>;
                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
index 2b9a5a8d69adb3f3cda300ead53e9fe7a5e381b0..4d57a55473afd1f563667d948b49269e11028697 100644 (file)
@@ -138,6 +138,11 @@ lp8732_ldo1_reg: ldo1 {
        };
 };
 
+&pcf_lcd {
+       interrupt-parent = <&gpio7>;
+       interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
+};
+
 &pcf_gpio_21 {
        interrupt-parent = <&gpio7>;
        interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
index e50fbeea96e0f80aed44cea86647026e491dcd06..ad24544adf0f1041b19c3c097393430bf9fe9ae9 100644 (file)
@@ -18,6 +18,10 @@ aliases {
                display0 = &hdmi0;
        };
 
+       chosen {
+               stdout-path = &uart1;
+       };
+
        evm_12v0: fixedregulator-evm12v0 {
                /* main supply */
                compatible = "regulator-fixed";
@@ -216,6 +220,15 @@ &i2c1 {
        status = "okay";
        clock-frequency = <400000>;
 
+       pcf_lcd: gpio@20 {
+               compatible = "nxp,pcf8575";
+               reg = <0x20>;
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+       };
+
        pcf_gpio_21: gpio@21 {
                compatible = "ti,pcf8575", "nxp,pcf8575";
                reg = <0x21>;
@@ -280,7 +293,12 @@ &elm {
 };
 
 &gpmc {
-       status = "okay";
+       /*
+        * For the existing IOdelay configuration via U-Boot we don't
+        * support NAND on dra72-evm. Keep it disabled. Enabling it
+        * requires a different configuration by U-Boot.
+        */
+       status = "disabled";
        ranges = <0 0 0x08000000 0x01000000>;   /* minimum GPMC partition = 16MB */
        nand@0,0 {
                /* To use NAND, DIP switch SW5 must be set like so:
index c3d939c9666cabb03752806cab94c002073a4d65..3ecac56bf504de779a954208a4b7318a8ae4437c 100644 (file)
@@ -68,6 +68,8 @@ dp83867_0: ethernet-phy@2 {
                ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>;
                ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
                ti,min-output-impedance;
+               interrupt-parent = <&gpio6>;
+               interrupts = <16 IRQ_TYPE_EDGE_FALLING>;
        };
 
        dp83867_1: ethernet-phy@3 {
@@ -75,6 +77,8 @@ dp83867_1: ethernet-phy@3 {
                ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>;
                ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>;
                ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
-               ti,min-output-imepdance;
+               ti,min-output-impedance;
+               interrupt-parent = <&gpio6>;
+               interrupts = <16 IRQ_TYPE_EDGE_FALLING>;
        };
 };
index ee6dac44edf1ada06b65a48d213ec9d8d966119b..e6df676886c0c35052921669039ae31fd446ccbf 100644 (file)
@@ -132,3 +132,19 @@ tps65917_power_button {
                ti,palmas-long-press-seconds = <6>;
        };
 };
+
+&usb2_phy1 {
+       phy-supply = <&ldo4_reg>;
+};
+
+&usb2_phy2 {
+       phy-supply = <&ldo4_reg>;
+};
+
+&dss {
+       vdda_video-supply = <&ldo5_reg>;
+};
+
+&mmc1 {
+       vmmc_aux-supply = <&ldo1_reg>;
+};
index 2ccbb57fbfa87d8a86aef40d16e756aa78df6d3b..c15e7e0c7e08fe3e608483b94619c9ceb026d080 100644 (file)
@@ -99,7 +99,7 @@ intc: interrupt-controller@fff11000 {
                        interrupt-controller;
                        interrupts = <1 9 0xf04>;
                        reg = <0xfff11000 0x1000>,
-                             <0xfff12000 0x1000>,
+                             <0xfff12000 0x2000>,
                              <0xfff14000 0x2000>,
                              <0xfff16000 0x2000>;
                };
index ba17ee1eb749d2eaaa1a4e4041f968ec2e06bffc..9c28ef4508e0d5a2f1d56a0a9b5b1849d6516c62 100644 (file)
@@ -234,7 +234,7 @@ gic: interrupt-controller@10481000 {
                        #interrupt-cells = <3>;
                        interrupt-controller;
                        reg = <0x10481000 0x1000>,
-                             <0x10482000 0x1000>,
+                             <0x10482000 0x2000>,
                              <0x10484000 0x2000>,
                              <0x10486000 0x2000>;
                        interrupts = <GIC_PPI 9
index 7fd870ee5093d98f217b161b39d5f626651d441b..b74c5379ca26dc6cdfc1430a9ebd865f25438278 100644 (file)
@@ -90,11 +90,11 @@ combiner: interrupt-controller@10440000 {
                };
 
                gic: interrupt-controller@10481000 {
-                       compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic";
+                       compatible = "arm,gic-400", "arm,cortex-a15-gic", "arm,cortex-a9-gic";
                        #interrupt-cells = <3>;
                        interrupt-controller;
                        reg =   <0x10481000 0x1000>,
-                               <0x10482000 0x1000>,
+                               <0x10482000 0x2000>,
                                <0x10484000 0x2000>,
                                <0x10486000 0x2000>;
                        interrupts = <GIC_PPI 9
index 5818718618b1e75867a9c5dbaba744d7c2e23d8c..5e88c9645975376ecd3ea8a9a9d0936dad68bdc3 100644 (file)
@@ -167,7 +167,7 @@ gic: interrupt-controller@10481000 {
                        #size-cells = <0>;
                        interrupt-controller;
                        reg = <0x10481000 0x1000>,
-                               <0x10482000 0x1000>,
+                               <0x10482000 0x2000>,
                                <0x10484000 0x2000>,
                                <0x10486000 0x2000>;
                        interrupts = <GIC_PPI 9
index 2a2e570bbee6f17dbd0c639a806f4516eb485c71..77d35bb92950f1be08188858b106490769a2d89b 100644 (file)
@@ -40,7 +40,7 @@ gic: interrupt-controller@2E0000 {
                #interrupt-cells = <3>;
                interrupt-controller;
                reg =   <0x2E1000 0x1000>,
-                       <0x2E2000 0x1000>,
+                       <0x2E2000 0x2000>,
                        <0x2E4000 0x2000>,
                        <0x2E6000 0x2000>;
                interrupts = <GIC_PPI 9
index f50498659cc3e09e97107d32654bb02874712c68..5ea28ee07cf457a65cfed24a7563296483355b5d 100644 (file)
@@ -38,7 +38,6 @@ clk32 {
 
 &cspi1 {
        pinctrl-0 = <&pinctrl_cspi1>;
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 15 GPIO_ACTIVE_LOW>;
        status = "okay";
 };
index b792eee3899b25e7a7a206d16f5737f5fd631a9d..dd3de387a7afde121d2d157a269fae1394d75cd7 100644 (file)
@@ -43,8 +43,9 @@ cpus {
                #size-cells = <0>;
                #address-cells = <1>;
 
-               cpu: cpu@0 {
+               cpu@0 {
                        device_type = "cpu";
+                       reg = <0>;
                        compatible = "arm,arm920t";
                        operating-points = <200000 1900000>;
                        clock-latency = <62500>;
index ac2a9da62b6ce81e4130c44185300ac95c31b2ca..96eae6447b25afae7692a17721182d3788ef126e 100644 (file)
@@ -29,12 +29,13 @@ aliases {
        };
 
        cpus {
-               #address-cells = <0>;
+               #address-cells = <1>;
                #size-cells = <0>;
 
-               cpu {
+               cpu@0 {
                        compatible = "arm,arm926ej-s";
                        device_type = "cpu";
+                       reg = <0>;
                };
        };
 
index 831d09a28155c5caa0b26ee6be42c20986067536..213d86e6e3adebee15d6b3a3ea461f10c603222a 100644 (file)
@@ -43,12 +43,13 @@ aliases {
        };
 
        cpus {
-               #address-cells = <0>;
+               #address-cells = <1>;
                #size-cells = <0>;
 
-               cpu {
+               cpu@0 {
                        compatible = "arm,arm926ej-s";
                        device_type = "cpu";
+                       reg = <0>;
                };
        };
 
@@ -560,7 +561,7 @@ dryice@53ffc000 {
                                reg = <0x53ffc000 0x4000>;
                                clocks = <&clks 81>;
                                clock-names = "ipg";
-                               interrupts = <25>;
+                               interrupts = <25 56>;
                        };
                };
 
index bba3f41b89ef680b587c11cb6e1215a5c45b1885..5f84b598e0d0f43c37719086c6bd087ff6f81d7f 100644 (file)
@@ -77,7 +77,6 @@ reg_max5821: regulator@0 {
 };
 
 &cspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_cspi1 &pinctrl_cspi1_cs>;
@@ -95,7 +94,6 @@ adc@0 {
 };
 
 &cspi2 {
-       fsl,spi-num-chipselects = <3>;
        cs-gpios = <&gpio4 21 GPIO_ACTIVE_LOW>,
                   <&gpio4 27 GPIO_ACTIVE_LOW>,
                   <&gpio2 17 GPIO_ACTIVE_LOW>;
index 27846ff9bb0dc7486e86c3936b4af5ef745f47ad..f56535768ee87990c753976a0150f8ce801033a1 100644 (file)
@@ -81,7 +81,6 @@ reg_lcd: regulator@0 {
 
 &cspi1 {
        pinctrl-0 = <&pinctrl_cspi1>;
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
        status = "okay";
 
index d0ef496a1af862a49daa1823f60f9e7393fa9b2a..96f442ba6d2259d3d9ea229ea64c07b657a9c70a 100644 (file)
@@ -37,7 +37,6 @@ usbphy0: usbphy@0 {
 &cspi2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_cspi2>;
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 21 GPIO_ACTIVE_HIGH>;
        status = "okay";
 
index 1b62480796822396a170f2909777b56dc93afe0c..4f3e0f4735814adec2881d2744ea128aeecaebee 100644 (file)
@@ -23,7 +23,6 @@ memory {
 };
 
 &cspi1 {
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <&gpio4 28 GPIO_ACTIVE_HIGH>,
                   <&gpio4 27 GPIO_ACTIVE_HIGH>;
        status = "okay";
index cf09e72aeb068adbc9c9497f6e21e97835685594..2a9198f99a8d9226957e62710afc4664feb482aa 100644 (file)
@@ -69,7 +69,6 @@ usbphy2: usbphy@2 {
 
 &cspi1 {
        pinctrl-0 = <&pinctrl_cspi1>, <&pinctrl_cspi1cs1>;
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <&gpio4 28 GPIO_ACTIVE_HIGH>,
                   <&gpio4 27 GPIO_ACTIVE_LOW>;
 };
index b4e955e3be8d26deae9a68364b2952b7fccd8f71..82fec935ce835cc7d7d36e4f3c21d8f4f0d10199 100644 (file)
@@ -75,7 +75,6 @@ pins4 {
 &cspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_cspi1>;
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 28 GPIO_ACTIVE_HIGH>;
        status = "okay";
 
index 9d8b5969ee3b0d9455afee96c666e77cae1cc713..6a7cb9e193e2df9540ec3dddfb3f48f5de49fafb 100644 (file)
@@ -65,6 +65,7 @@ cpus {
 
                cpu: cpu@0 {
                        device_type = "cpu";
+                       reg = <0>;
                        compatible = "arm,arm926ej-s";
                        operating-points = <
                                /* kHz uV */
index 3aabf65a6a5224f5681d6ba189087a550824e964..905bdb5127a91d8d7d4637e7034163eca2e5fa0a 100644 (file)
@@ -40,12 +40,13 @@ aliases {
        };
 
        cpus {
-               #address-cells = <0>;
+               #address-cells = <1>;
                #size-cells = <0>;
 
-               cpu {
+               cpu@0 {
                        compatible = "arm,arm926ej-s";
                        device_type = "cpu";
+                       reg = <0>;
                };
        };
 
@@ -1070,6 +1071,7 @@ clks: clkctrl@80040000 {
                        };
 
                        saif0: saif@80042000 {
+                               #sound-dai-cells = <0>;
                                compatible = "fsl,imx28-saif";
                                reg = <0x80042000 0x2000>;
                                interrupts = <59>;
@@ -1086,6 +1088,7 @@ power: power@80044000 {
                        };
 
                        saif1: saif@80046000 {
+                               #sound-dai-cells = <0>;
                                compatible = "fsl,imx28-saif";
                                reg = <0x80046000 0x2000>;
                                interrupts = <58>;
index 685916e3d8a1eaefb083d2a7a81583c18a360168..c0a5d5f90434714d85c07cdf8e5673397da77c47 100644 (file)
@@ -22,20 +22,21 @@ aliases {
        };
 
        cpus {
-               #address-cells = <0>;
+               #address-cells = <1>;
                #size-cells = <0>;
 
-               cpu {
+               cpu@0 {
                        compatible = "arm,arm1136jf-s";
                        device_type = "cpu";
+                       reg = <0>;
                };
        };
 
-       avic: avic-interrupt-controller@60000000 {
+       avic: interrupt-controller@68000000 {
                compatible = "fsl,imx31-avic", "fsl,avic";
                interrupt-controller;
                #interrupt-cells = <1>;
-               reg = <0x60000000 0x100000>;
+               reg = <0x68000000 0x100000>;
        };
 
        soc {
index 9f40e6229189f3c6cb72c99bc11c351598e7f0e3..6f7b943378f67e2aad69c0eb8d4be3fcc8f05a28 100644 (file)
@@ -27,12 +27,13 @@ aliases {
        };
 
        cpus {
-               #address-cells = <0>;
+               #address-cells = <1>;
                #size-cells = <0>;
 
-               cpu {
+               cpu@0 {
                        compatible = "arm,arm1136jf-s";
                        device_type = "cpu";
+                       reg = <0>;
                };
        };
 
index 27d763c7a307d91e9efc282fb29c8e8e5de093c7..dba2d951aa15323be39a717c4f3b4c69cf9ae1aa 100644 (file)
@@ -26,7 +26,6 @@ memory {
 &cspi {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_cspi>;
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <&gpio4 11 0>, <&gpio4 13 0>;
        status = "okay";
 
index 0f3fe29b816ebad2c77d95271e76e089437109b2..a5e6091c8729968beef3bd4279c325a3212a5ca8 100644 (file)
@@ -80,7 +80,6 @@ user {
 &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <&gpio4 24 GPIO_ACTIVE_HIGH>,
                   <&gpio4 25 GPIO_ACTIVE_HIGH>;
        status = "okay";
@@ -89,7 +88,6 @@ &ecspi1 {
 &ecspi2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi2>;
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <&gpio3 28 GPIO_ACTIVE_LOW>,
                   <&gpio3 27 GPIO_ACTIVE_LOW>;
        status = "okay";
index f097b4f29ab49365612c6bd64840ad2b2f64512e..873cf242679c0d1cbc9a84938105abfada2c9610 100644 (file)
@@ -178,7 +178,6 @@ &audmux {
 &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <&gpio4 24 GPIO_ACTIVE_HIGH>,
                   <&gpio4 25 GPIO_ACTIVE_LOW>;
        status = "okay";
index 16fc69c69ab2e60a4cbd847aa98825fe8577e318..b821066a0d2aa40e9597b192f012362e37215713 100644 (file)
@@ -24,7 +24,6 @@ memory {
 &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 24 GPIO_ACTIVE_HIGH>;
        status = "okay";
 
index 728212861ece2422c2d74c38e4cc6fea83367496..1305b05c7ed9224c1a1f38e02d96a7a63c6d81d8 100644 (file)
@@ -114,7 +114,6 @@ &esdhc1 {
 &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>;
        status = "okay";
 
index c05e7cfd0cbcb2bd7b76920bc1cb0fd7913649f3..40b3e31935d0b765aaaed03d27aa21a71eff0e04 100644 (file)
@@ -215,16 +215,16 @@ MX53_PAD_PATA_IORDY__ESDHC3_CLK           0x1d5
 
                pinctrl_fec: fecgrp {
                        fsl,pins = <
-                               MX53_PAD_FEC_MDC__FEC_MDC               0x80000000
-                               MX53_PAD_FEC_MDIO__FEC_MDIO             0x80000000
-                               MX53_PAD_FEC_REF_CLK__FEC_TX_CLK        0x80000000
-                               MX53_PAD_FEC_RX_ER__FEC_RX_ER           0x80000000
-                               MX53_PAD_FEC_CRS_DV__FEC_RX_DV          0x80000000
-                               MX53_PAD_FEC_RXD1__FEC_RDATA_1          0x80000000
-                               MX53_PAD_FEC_RXD0__FEC_RDATA_0          0x80000000
-                               MX53_PAD_FEC_TX_EN__FEC_TX_EN           0x80000000
-                               MX53_PAD_FEC_TXD1__FEC_TDATA_1          0x80000000
-                               MX53_PAD_FEC_TXD0__FEC_TDATA_0          0x80000000
+                               MX53_PAD_FEC_MDC__FEC_MDC               0x4
+                               MX53_PAD_FEC_MDIO__FEC_MDIO             0x1fc
+                               MX53_PAD_FEC_REF_CLK__FEC_TX_CLK        0x180
+                               MX53_PAD_FEC_RX_ER__FEC_RX_ER           0x180
+                               MX53_PAD_FEC_CRS_DV__FEC_RX_DV          0x180
+                               MX53_PAD_FEC_RXD1__FEC_RDATA_1          0x180
+                               MX53_PAD_FEC_RXD0__FEC_RDATA_0          0x180
+                               MX53_PAD_FEC_TX_EN__FEC_TX_EN           0x4
+                               MX53_PAD_FEC_TXD1__FEC_TDATA_1          0x4
+                               MX53_PAD_FEC_TXD0__FEC_TDATA_0          0x4
                        >;
                };
 
index 379939699164aa6dbd1c90b422496c1ab72edff3..f4c158cce908e9fd77ec78c1e79ffa0b18cd0a45 100644 (file)
@@ -90,7 +90,6 @@ ldo6_reg: ldo6 {
                        ldo7_reg: ldo7 {
                                regulator-min-microvolt = <1200000>;
                                regulator-max-microvolt = <3600000>;
-                               regulator-always-on;
                        };
 
                        ldo8_reg: ldo8 {
@@ -113,3 +112,7 @@ ldo10_reg: ldo10 {
                };
        };
 };
+
+&tve {
+       dac-supply = <&ldo7_reg>;
+};
index 96d7eede412e1343d5e4e0a982044cec3ac347d3..479ca4c9e3841671db80573b18a65f709e0a306e 100644 (file)
@@ -130,8 +130,6 @@ vdac_reg: vdac {
                                regulator-name = "VDAC";
                                regulator-min-microvolt = <2500000>;
                                regulator-max-microvolt = <2775000>;
-                               regulator-boot-on;
-                               regulator-always-on;
                        };
 
                        vgen1_reg: vgen1 {
@@ -152,3 +150,7 @@ vgen2_reg: vgen2 {
                };
        };
 };
+
+&tve {
+       dac-supply = <&vdac_reg>;
+};
index 9f51900405550d8e3908bbf86c3112ede9dd2db9..472f6f0f55b3802b49f6a17f00b122ac92708a07 100644 (file)
@@ -63,7 +63,6 @@ &uart3 {
 &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>;
        status = "okay";
 
index 91a6a9ff50d7ef5ff6334f9a59126d4433a0f3a5..85972f2201c2bbd390156506de11f69ab5bf2ef4 100644 (file)
@@ -55,7 +55,6 @@ &uart3 {
 &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
-       fsl,spi-num-chipselects = <4>;
        cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>,
                   <&gpio3 24 0>, <&gpio3 25 0>;
        status = "disabled";
@@ -249,7 +248,6 @@ &i2c3 {
 &cspi {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_cspi>;
-       fsl,spi-num-chipselects = <3>;
        cs-gpios = <&gpio1 18 0>, <&gpio1 19 0>,
                   <&gpio1 21 0>;
        status = "disabled";
index 57e75f1639e09b132ae0056835fa4278c7629257..3a32201419881455a54789a6f76e5efb7a34ecd5 100644 (file)
@@ -161,7 +161,6 @@ &can2 {
 &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
-       fsl,spi-num-chipselects = <2>;
        status = "okay";
 
        cs-gpios = <
index ba689fbd0e413dd5e1e01c9a0295d48bc773dec9..524192cf6a0f0de10298e0e75c9db1945620188c 100644 (file)
@@ -129,7 +129,6 @@ MX53_PAD_PATA_DATA7__EMI_NANDF_D_7  0xa4
 &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
-       fsl,spi-num-chipselects = <4>;
        cs-gpios = <&gpio2 30 0>, <&gpio3 19 0>, <&gpio2 16 0>, <&gpio2 17 0>;
        status = "okay";
 };
index bb92f309c191371fe25946c03b6fe19302d66b71..0677625463d6fec91172fb251f4a49955940c108 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 3d5ad2cc7e2240f041a275d3f6746cf6e32d832e..805b1318b7f77ae9e4d0451f05900f4b3faaa9ce 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index d4c4a22db4888269c26a2294add2421dd4349c7e..32a812b1839ea0cc5e3ab4451b031e6053fb9b29 100644 (file)
@@ -66,7 +66,6 @@ display0_in: endpoint {
 };
 
 &ecspi2 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 24 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi2>;
index e0c21727866dc268b6d393465896791e63671b4b..26541538562c6d937fde7b96066112c5c7463689 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 2a43917d048e8a689b91c8e87823580907971945..f10a36b8647d4a15ece103c5181e8d7abdd47a9c 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index d5c9660319627077de2eadf7320076ba3887063c..39c2602fa87c7c977e8de63451a9fe25dd49c3e6 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
diff --git a/arch/arm/boot/dts/imx6dl-icore-rqs.dts b/arch/arm/boot/dts/imx6dl-icore-rqs.dts
new file mode 100644 (file)
index 0000000..cf42c2f
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2016 Amarula Solutions B.V.
+ * Copyright (C) 2016 Engicam S.r.l.
+ *
+ * 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
+ *     version 2 as published by the Free Software Foundation.
+ *
+ *     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 "imx6q.dtsi"
+#include "imx6qdl-icore-rqs.dtsi"
+
+/ {
+       model = "Engicam i.CoreM6 DualLite/Solo RQS Starter Kit";
+       compatible = "engicam,imx6-icore-rqs", "fsl,imx6dl";
+};
index aec332c14af1b770ff9bff7dda0d44b0eaf81a58..6de83c72bd7243448ca5bd0113880ce5c016fae0 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index e0161e46195c67ff8391de161102cdc3abed01a7..30ce2c0cec2b4ff524a5a75ed67949a98e42270a 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 8398f979b9129a2d0bc46c179dd54aacfa9967e8..ec53d7a09572f79f77b2cebdf353d966bdceea6b 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 0f06ca5c914694f2c7483be4e5c2a6d56d5972c3..2f904527a097af333d3e6e2894666b18582990b7 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
diff --git a/arch/arm/boot/dts/imx6dl-savageboard.dts b/arch/arm/boot/dts/imx6dl-savageboard.dts
new file mode 100644 (file)
index 0000000..b95469c
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2017 Milo Kim <woogyom.kim@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 "imx6dl.dtsi"
+#include "imx6qdl-savageboard.dtsi"
+
+/ {
+       model = "Poslab SavageBoard Dual";
+       compatible = "poslab,imx6dl-savageboard", "fsl,imx6dl";
+};
index 85eddeb30e216ebd9ca11e4a1dfa07de391be1ac..6ea0b780677d64bd3b08d4726bd527386d2afcaa 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 0ea75f7b6039dec9eb66c70a061f152128f3fb84..88cc7f51a4e902fb323a7c8956acaee442d2e425 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 78bfc1a307d60c61ad340d979959748e7abdd564..116bebb5e4353d229b170b697ca9b0abe51a18fa 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 1dcaee23ed9c2c13052617bc479ff7979269c513..33f5c436c09f65878213126af440546ddbd81b00 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 167f7446722a99c8444838a95056346d346def86..d78514c9234952048e15dda288e481e06a30b1e3 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 308e11cea1db47894efc943119b100add1c0078b..14fa6b25dc457f7a230f2d31bfc122e9093ef67f 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -133,7 +133,6 @@ &audmux {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio2 30 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
index e4a415fd899b670bf74f44b3640580910919d960..36d6bb39593a005b20723d1c5517c51ef9bfd2d8 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -95,7 +95,6 @@ sound {
 };
 
 &ecspi5 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi5>;
index a150bca84daa4245e1004a6d0a0006dd8eedd08c..d8a5789a4bc809a67ef3c7f2d6cd715e4193f0b9 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -89,6 +89,14 @@ reg_usb_otg_vbus: usb_otg_vbus {
                gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
                enable-active-high;
        };
+
+       sound-spdif {
+               compatible = "fsl,imx-audio-spdif";
+               model = "imx-spdif";
+               spdif-controller = <&spdif>;
+               spdif-out;
+               spdif-in;
+       };
 };
 
 &cpu0 {
@@ -114,7 +122,6 @@ &cpu0 {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <&gpio2 30 GPIO_ACTIVE_HIGH>, <&gpio3 19 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
@@ -222,6 +229,13 @@ MX6QDL_PAD_EIM_CS1__GPIO2_IO24     0x1b0b1
                >;
        };
 
+       pinctrl_spdif: spdifgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_16__SPDIF_IN  0x1b0b0
+                       MX6QDL_PAD_GPIO_19__SPDIF_OUT 0x1b0b0
+               >;
+       };
+
        pinctrl_uart4: uart4grp {
                fsl,pins = <
                        MX6QDL_PAD_KEY_COL0__UART4_TX_DATA      0x1b0b1
@@ -259,6 +273,12 @@ &snvs_poweroff {
        status = "okay";
 };
 
+&spdif {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_spdif>;
+       status = "okay";
+};
+
 &uart4 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart4>;
index 353425edcdf4d43d50d834c99597e2c16acc03d6..b68aa0e57f20c607940f1ca4d4438021e3ff8659 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 908dab68bdca69c994599ebccca302434ec7666f..f28883bbe7b16db60cbd67bb21b75c94ea5c4626 100644 (file)
@@ -104,7 +104,6 @@ &can1 {
 &ecspi5 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi5>;
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio1 12 0>;
        status = "okay";
 
index 7c7c1a855ece095e780ba55a9705615599a72cdf..fd2220aa49e278f6dac12a553a306e62ea296e66 100644 (file)
@@ -90,7 +90,6 @@ panel_in: endpoint {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 10 GPIO_ACTIVE_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1 &pinctrl_ecspi1cs>;
@@ -98,7 +97,6 @@ &ecspi1 {
 };
 
 &ecspi3 {
-       fsl,spi-num-chipselects = <3>;
        cs-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>,
                <&gpio4 25 GPIO_ACTIVE_LOW>,
                <&gpio4 26 GPIO_ACTIVE_LOW>;
@@ -108,7 +106,6 @@ &ecspi3 {
 };
 
 &ecspi5 {
-       fsl,spi-num-chipselects = <4>;
        cs-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>,
                <&gpio1 13 GPIO_ACTIVE_LOW>,
                <&gpio1 12 GPIO_ACTIVE_LOW>,
index 747bc104ad00b884d8781991fc2911308a3ec797..8e84713f42c069ec5d85cf177d2379c42cf0aa0d 100644 (file)
@@ -138,7 +138,6 @@ &audmux {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
index 65e66f994f88813cb09a521992a2835c6119fe29..8f9252889971a1421f28d05fde46e7956d0a6230 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 1884c16784e2fdde3338b04cf4d83dfb6a891e51..69a7a0a1cb21a57a7295c31450122cc533799f05 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 005318865f66a9bbc2de38ab77426ef6037dd458..e451b4ceb4d81ef1972f0b1f51a782cf3bf94a1c 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -45,7 +45,7 @@
 #include "imx6qdl-icore-rqs.dtsi"
 
 / {
-       model = "Engicam i.CoreM6 Quad SOM";
+       model = "Engicam i.CoreM6 Quad/Dual RQS Starter Kit";
        compatible = "engicam,imx6-icore-rqs", "fsl,imx6q";
 
        sound {
index 025f54350c28409e6e8db01896720d76c7190634..59eb7adc24729e1d8b181375fb1beb508cbd3337 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index f7995c513b678b90d189b0ca4fb0a9b9b5442c26..432291bedcf1629c3d2c62e172bd7c551bc85320 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -97,7 +97,6 @@ &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
        cs-gpios = <&gpio2 30 GPIO_ACTIVE_LOW>;
-       fsl,spi-num-chipselects = <1>;
        status = "okay";
 
        m25p80@0 {
diff --git a/arch/arm/boot/dts/imx6q-mccmon6.dts b/arch/arm/boot/dts/imx6q-mccmon6.dts
new file mode 100644 (file)
index 0000000..eedbe73
--- /dev/null
@@ -0,0 +1,473 @@
+/*
+ * Copyright 2016-2017
+ * Lukasz Majewski, DENX Software Engineering, lukma@denx.de
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+/dts-v1/;
+
+#include "imx6q.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/pwm/pwm.h>
+
+/ {
+       model = "Liebherr (LWN) monitor6 i.MX6 Quad Board";
+       compatible = "lwn,mccmon6", "fsl,imx6q";
+
+       memory {
+               reg = <0x10000000 0x80000000>;
+       };
+
+       backlight_lvds: backlight {
+               compatible = "pwm-backlight";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_backlight>;
+               pwms = <&pwm2 0 5000000 PWM_POLARITY_INVERTED>;
+               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 = <50>;
+               enable-gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
+       };
+
+       reg_lvds: regulator-lvds {
+               compatible = "regulator-fixed";
+               regulator-name = "lvds_ppen";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_reg_lvds>;
+               gpio = <&gpio1 19 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       panel-lvds0 {
+               compatible = "innolux,g121x1-l03";
+               backlight = <&backlight_lvds>;
+               power-supply = <&reg_lvds>;
+
+               port {
+                       panel_in_lvds0: endpoint {
+                               remote-endpoint = <&lvds0_out>;
+                       };
+               };
+       };
+};
+
+&ecspi3 {
+       cs-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_ecspi3 &pinctrl_ecspi3_cs &pinctrl_ecspi3_flwp>;
+       status = "okay";
+
+       s25sl032p: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               spi-max-frequency = <40000000>;
+               reg = <0>;
+       };
+};
+
+&fec {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_enet>;
+       phy-mode = "rgmii";
+       phy-reset-gpios = <&gpio1 27 GPIO_ACTIVE_LOW>;
+       interrupts-extended = <&gpio1 6 IRQ_TYPE_LEVEL_HIGH>,
+                             <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
+       status = "okay";
+};
+
+&i2c1 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c1>;
+       status = "okay";
+};
+
+&i2c2 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c2>;
+       status = "okay";
+
+       pfuze100: pmic@08 {
+               compatible = "fsl,pfuze100";
+               reg = <0x08>;
+
+               regulators {
+                       sw1a_reg: sw1ab {
+                               regulator-min-microvolt = <300000>;
+                               regulator-max-microvolt = <1875000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                               regulator-ramp-delay = <6250>;
+                       };
+
+                       sw1c_reg: sw1c {
+                               regulator-min-microvolt = <300000>;
+                               regulator-max-microvolt = <1875000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                               regulator-ramp-delay = <6250>;
+                       };
+
+                       sw2_reg: sw2 {
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <3950000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       sw3a_reg: sw3a {
+                               regulator-min-microvolt = <400000>;
+                               regulator-max-microvolt = <1975000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       sw3b_reg: sw3b {
+                               regulator-min-microvolt = <400000>;
+                               regulator-max-microvolt = <1975000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       sw4_reg: sw4 {
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <3300000>;
+                       };
+
+                       swbst_reg: swbst {
+                               regulator-min-microvolt = <5000000>;
+                               regulator-max-microvolt = <5150000>;
+                       };
+
+                       snvs_reg: vsnvs {
+                               regulator-min-microvolt = <1000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       vref_reg: vrefddr {
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       vgen1_reg: vgen1 {
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <1550000>;
+                       };
+
+                       vgen2_reg: vgen2 {
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <1550000>;
+                       };
+
+                       vgen3_reg: vgen3 {
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                       };
+
+                       vgen4_reg: vgen4 {
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                       };
+
+                       vgen5_reg: vgen5 {
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                       };
+
+                       vgen6_reg: vgen6 {
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                       };
+               };
+       };
+};
+
+&ldb {
+       status = "okay";
+
+       lvds0: lvds-channel@0 {
+               fsl,data-mapping = "spwg";
+               fsl,data-width = <24>;
+               status = "okay";
+
+               port@4 {
+                       reg = <4>;
+
+                       lvds0_out: endpoint {
+                               remote-endpoint = <&panel_in_lvds0>;
+                       };
+               };
+       };
+};
+
+&pwm2 {
+       #pwm-cells = <3>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_pwm2>;
+       status = "okay";
+};
+
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart1>;
+       status = "okay";
+};
+
+&uart4 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart4>;
+       uart-has-rtscts;
+       status = "okay";
+};
+
+&usdhc2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc2>;
+       cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
+       bus-width = <4>;
+       status = "okay";
+};
+
+&usdhc3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc3>;
+       bus-width = <8>;
+       non-removable;
+       status = "okay";
+};
+
+&weim {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_weim_nor &pinctrl_weim_cs0>;
+       ranges = <0 0 0x08000000 0x08000000>;
+       status = "okay";
+
+       nor@0,0 {
+               compatible = "cfi-flash";
+               reg = <0 0 0x02000000>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               bank-width = <2>;
+               use-advanced-sector-protection;
+               fsl,weim-cs-timing = <0x00620081 0x00000001 0x1c022000
+                               0x0000c000 0x1404a38e 0x00000000>;
+       };
+};
+
+&iomuxc {
+       pinctrl-names = "default";
+
+       pinctrl_backlight: dispgrp {
+               fsl,pins = <
+                       /* BLEN_OUT */
+                       MX6QDL_PAD_GPIO_2__GPIO1_IO02    0x1b0b0
+               >;
+       };
+
+       pinctrl_ecspi3: ecspi3grp {
+               fsl,pins = <
+                       MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO      0x100b1
+                       MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI      0x100b1
+                       MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK      0x100b1
+               >;
+       };
+
+       pinctrl_ecspi3_cs: ecspi3csgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24 0x80000000
+               >;
+       };
+
+       pinctrl_ecspi3_flwp: ecspi3flwpgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_DISP0_DAT6__GPIO4_IO27 0x80000000
+               >;
+       };
+
+       pinctrl_enet: enetgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_ENET_MDIO__ENET_MDIO         0x1b0b0
+                       MX6QDL_PAD_ENET_MDC__ENET_MDC           0x1b0b0
+                       MX6QDL_PAD_RGMII_TXC__RGMII_TXC         0x1b0b0
+                       MX6QDL_PAD_RGMII_TD0__RGMII_TD0         0x1b0b0
+                       MX6QDL_PAD_RGMII_TD1__RGMII_TD1         0x1b0b0
+                       MX6QDL_PAD_RGMII_TD2__RGMII_TD2         0x1b0b0
+                       MX6QDL_PAD_RGMII_TD3__RGMII_TD3         0x1b0b0
+                       MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL   0x1b0b0
+                       MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK    0x1b0b0
+                       MX6QDL_PAD_RGMII_RXC__RGMII_RXC         0x1b0b0
+                       MX6QDL_PAD_RGMII_RD0__RGMII_RD0         0x1b0b0
+                       MX6QDL_PAD_RGMII_RD1__RGMII_RD1         0x1b0b0
+                       MX6QDL_PAD_RGMII_RD2__RGMII_RD2         0x1b0b0
+                       MX6QDL_PAD_RGMII_RD3__RGMII_RD3         0x1b0b0
+                       MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL   0x1b0b0
+                       MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
+                       MX6QDL_PAD_GPIO_6__ENET_IRQ             0x000b1
+                       MX6QDL_PAD_ENET_RXD0__GPIO1_IO27        0x1b0b0
+               >;
+       };
+
+       pinctrl_i2c1: i2c1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_CSI0_DAT9__I2C1_SCL  0x4001b8b1
+                       MX6QDL_PAD_CSI0_DAT8__I2C1_SDA  0x4001b8b1
+               >;
+       };
+
+       pinctrl_i2c2: i2c2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_KEY_COL3__I2C2_SCL   0x4001b8b1
+                       MX6QDL_PAD_KEY_ROW3__I2C2_SDA   0x4001b8b1
+               >;
+       };
+
+       pinctrl_pwm2: pwm2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_1__PWM2_OUT     0x1b0b1
+               >;
+       };
+
+       pinctrl_reg_lvds: reqlvdsgrp {
+               fsl,pins = <
+                       /* LVDS_PPEN_OUT */
+                       MX6QDL_PAD_SD1_DAT2__GPIO1_IO19         0x1b0b0
+               >;
+       };
+
+       pinctrl_uart1: uart1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA    0x1b0b1
+                       MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA    0x1b0b1
+               >;
+       };
+
+       pinctrl_uart4: uart4grp {
+               fsl,pins = <
+                       MX6QDL_PAD_KEY_COL0__UART4_TX_DATA      0x1b0b1
+                       MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA      0x1b0b1
+                       MX6QDL_PAD_CSI0_DAT16__UART4_RTS_B      0x1b0b1
+                       MX6QDL_PAD_CSI0_DAT17__UART4_CTS_B      0x1b0b1
+               >;
+       };
+
+       pinctrl_usdhc2: usdhc2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_SD2_CMD__SD2_CMD             0x17059
+                       MX6QDL_PAD_SD2_CLK__SD2_CLK             0x10059
+                       MX6QDL_PAD_SD2_DAT0__SD2_DATA0          0x17059
+                       MX6QDL_PAD_SD2_DAT1__SD2_DATA1          0x17059
+                       MX6QDL_PAD_SD2_DAT2__SD2_DATA2          0x17059
+                       MX6QDL_PAD_SD2_DAT3__SD2_DATA3          0x17059
+                       MX6QDL_PAD_GPIO_4__GPIO1_IO04           0x1b0b1
+               >;
+       };
+
+       pinctrl_usdhc3: usdhc3grp {
+               fsl,pins = <
+                       MX6QDL_PAD_SD3_CMD__SD3_CMD             0x17059
+                       MX6QDL_PAD_SD3_CLK__SD3_CLK             0x10059
+                       MX6QDL_PAD_SD3_DAT0__SD3_DATA0          0x17059
+                       MX6QDL_PAD_SD3_DAT1__SD3_DATA1          0x17059
+                       MX6QDL_PAD_SD3_DAT2__SD3_DATA2          0x17059
+                       MX6QDL_PAD_SD3_DAT3__SD3_DATA3          0x17059
+                       MX6QDL_PAD_SD3_DAT4__SD3_DATA4          0x17059
+                       MX6QDL_PAD_SD3_DAT5__SD3_DATA5          0x17059
+                       MX6QDL_PAD_SD3_DAT6__SD3_DATA6          0x17059
+                       MX6QDL_PAD_SD3_DAT7__SD3_DATA7          0x17059
+                       MX6QDL_PAD_SD3_RST__SD3_RESET           0x17059
+               >;
+       };
+
+       pinctrl_weim_cs0: weimcs0grp {
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_CS0__EIM_CS0_B           0xb0b1
+               >;
+       };
+
+       pinctrl_weim_nor: weimnorgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_OE__EIM_OE_B             0xb0b1
+                       MX6QDL_PAD_EIM_RW__EIM_RW               0xb0b1
+                       MX6QDL_PAD_EIM_WAIT__EIM_WAIT_B 0xb060
+                       MX6QDL_PAD_EIM_D16__EIM_DATA16          0x1b0b0
+                       MX6QDL_PAD_EIM_D17__EIM_DATA17          0x1b0b0
+                       MX6QDL_PAD_EIM_D18__EIM_DATA18          0x1b0b0
+                       MX6QDL_PAD_EIM_D19__EIM_DATA19          0x1b0b0
+                       MX6QDL_PAD_EIM_D20__EIM_DATA20          0x1b0b0
+                       MX6QDL_PAD_EIM_D21__EIM_DATA21          0x1b0b0
+                       MX6QDL_PAD_EIM_D22__EIM_DATA22          0x1b0b0
+                       MX6QDL_PAD_EIM_D23__EIM_DATA23          0x1b0b0
+                       MX6QDL_PAD_EIM_D24__EIM_DATA24          0x1b0b0
+                       MX6QDL_PAD_EIM_D25__EIM_DATA25          0x1b0b0
+                       MX6QDL_PAD_EIM_D26__EIM_DATA26          0x1b0b0
+                       MX6QDL_PAD_EIM_D27__EIM_DATA27          0x1b0b0
+                       MX6QDL_PAD_EIM_D28__EIM_DATA28          0x1b0b0
+                       MX6QDL_PAD_EIM_D29__EIM_DATA29          0x1b0b0
+                       MX6QDL_PAD_EIM_D30__EIM_DATA30          0x1b0b0
+                       MX6QDL_PAD_EIM_D31__EIM_DATA31          0x1b0b0
+                       MX6QDL_PAD_EIM_A23__EIM_ADDR23          0xb0b1
+                       MX6QDL_PAD_EIM_A22__EIM_ADDR22          0xb0b1
+                       MX6QDL_PAD_EIM_A21__EIM_ADDR21          0xb0b1
+                       MX6QDL_PAD_EIM_A20__EIM_ADDR20          0xb0b1
+                       MX6QDL_PAD_EIM_A19__EIM_ADDR19          0xb0b1
+                       MX6QDL_PAD_EIM_A18__EIM_ADDR18          0xb0b1
+                       MX6QDL_PAD_EIM_A17__EIM_ADDR17          0xb0b1
+                       MX6QDL_PAD_EIM_A16__EIM_ADDR16          0xb0b1
+                       MX6QDL_PAD_EIM_DA15__EIM_AD15           0xb0b1
+                       MX6QDL_PAD_EIM_DA14__EIM_AD14           0xb0b1
+                       MX6QDL_PAD_EIM_DA13__EIM_AD13           0xb0b1
+                       MX6QDL_PAD_EIM_DA12__EIM_AD12           0xb0b1
+                       MX6QDL_PAD_EIM_DA11__EIM_AD11           0xb0b1
+                       MX6QDL_PAD_EIM_DA10__EIM_AD10           0xb0b1
+                       MX6QDL_PAD_EIM_DA9__EIM_AD09            0xb0b1
+                       MX6QDL_PAD_EIM_DA8__EIM_AD08            0xb0b1
+                       MX6QDL_PAD_EIM_DA7__EIM_AD07            0xb0b1
+                       MX6QDL_PAD_EIM_DA6__EIM_AD06            0xb0b1
+                       MX6QDL_PAD_EIM_DA5__EIM_AD05            0xb0b1
+                       MX6QDL_PAD_EIM_DA4__EIM_AD04            0xb0b1
+                       MX6QDL_PAD_EIM_DA3__EIM_AD03            0xb0b1
+                       MX6QDL_PAD_EIM_DA2__EIM_AD02            0xb0b1
+                       MX6QDL_PAD_EIM_DA1__EIM_AD01            0xb0b1
+                       MX6QDL_PAD_EIM_DA0__EIM_AD00            0xb0b1
+               >;
+       };
+};
index d417457ca6dbeaea1eeac659d4a1e08ad0867ecc..2a3c44f98eed8fc415290be719a616c6e12450d5 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index cf4feefe02c569aa756177e0580b4bca57905197..c5d59baa1a07e17ba22bdc884de8391a11289807 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index d1686339dc480be00942aacfbfd5c40da9002557..df8ff397a91421374a51eb5a479b3540f5ca8330 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 758bca96786f93cdfe975ada600153600863aa3e..0fa32b2f3aec92cd175a194047c7fd535b329ae3 100644 (file)
@@ -210,7 +210,6 @@ &audmux {
 &ecspi3 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi3_novena>;
-       fsl,spi-num-chipselects = <3>;
        status = "okay";
 };
 
index 66d10d8d534ccad9db44ab26bb0569540fddfb4d..02a7cdfd57c956545df7d1e34ac10149f88106f2 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
diff --git a/arch/arm/boot/dts/imx6q-savageboard.dts b/arch/arm/boot/dts/imx6q-savageboard.dts
new file mode 100644 (file)
index 0000000..717ac62
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2017 Milo Kim <woogyom.kim@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 "imx6q.dtsi"
+#include "imx6qdl-savageboard.dtsi"
+
+/ {
+       model = "Poslab SavageBoard Quad";
+       compatible = "poslab,imx6q-savageboard", "fsl,imx6q";
+};
+
+&sata {
+       status = "okay";
+};
index 9b81ebc8b0d4a81b2cfd9061366468305fc6ae78..fab76f8cd0768adb0a010d52417b5a84d90d74d0 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 22009947cebcc86f7100b25c07c6693c94021257..69bdd82ce21fc732259aee42a1c80e01025ee1ff 100644 (file)
@@ -59,6 +59,33 @@ aliases {
                rtc1 = &snvs_rtc;
        };
 
+       encoder {
+               compatible = "ti,tfp410";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+
+                               tfp410_in: endpoint {
+                                       remote-endpoint = <&parallel_display_out>;
+                               };
+                       };
+
+                       port@1 {
+                               reg = <1>;
+
+                               tfp410_out: endpoint {
+                                       remote-endpoint = <&hdmi_connector_in>;
+                               };
+                       };
+               };
+       };
+
        gpio-keys {
                compatible = "gpio-keys";
                pinctrl-names = "default";
@@ -72,6 +99,19 @@ power {
                };
        };
 
+       hdmi-connector {
+               compatible = "hdmi-connector";
+
+               type = "a";
+               ddc-i2c-bus = <&i2c_dvi_ddc>;
+
+               port {
+                       hdmi_connector_in: endpoint {
+                               remote-endpoint = <&tfp410_out>;
+                       };
+               };
+       };
+
        i2cmux {
                compatible = "i2c-mux-gpio";
                pinctrl-names = "default";
@@ -105,8 +145,46 @@ i2c_dvi_ddc: i2c@1 {
                        #size-cells = <0>;
                };
        };
+
+       parallel-display {
+               compatible = "fsl,imx-parallel-display";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_ipu1>;
+
+               interface-pix-fmt = "rgb24";
+
+               port@0 {
+                       reg = <0>;
+
+                       parallel_display_in: endpoint {
+                               remote-endpoint = <&ipu1_di0_disp0>;
+                       };
+               };
+
+               port@1 {
+                       reg = <1>;
+
+                       parallel_display_out: endpoint {
+                               remote-endpoint = <&tfp410_in>;
+                       };
+               };
+       };
 };
 
+/*
+ * A single IPU is not able to drive both display interfaces available on the
+ * Utilite Pro at high resolution due to its bandwidth limitation. Since the
+ * tfp410 encoder is wired up to IPU1, sever the link between IPU1 and the
+ * SoC-internal Designware HDMI encoder forcing the latter to be connected to
+ * IPU2 instead of IPU1.
+ */
+/delete-node/&ipu1_di0_hdmi;
+/delete-node/&hdmi_mux_0;
+/delete-node/&ipu1_di1_hdmi;
+/delete-node/&hdmi_mux_1;
+
 &hdmi {
        ddc-i2c-bus = <&i2c2>;
        status = "okay";
@@ -151,6 +229,39 @@ MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
                >;
        };
 
+       pinctrl_ipu1: ipu1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK 0x38
+                       MX6QDL_PAD_DI0_PIN15__IPU1_DI0_PIN15       0x38
+                       MX6QDL_PAD_DI0_PIN2__IPU1_DI0_PIN02        0x38
+                       MX6QDL_PAD_DI0_PIN3__IPU1_DI0_PIN03        0x38
+                       MX6QDL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00   0x38
+                       MX6QDL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01   0x38
+                       MX6QDL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02   0x38
+                       MX6QDL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03   0x38
+                       MX6QDL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04   0x38
+                       MX6QDL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05   0x38
+                       MX6QDL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06   0x38
+                       MX6QDL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07   0x38
+                       MX6QDL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08   0x38
+                       MX6QDL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09   0x38
+                       MX6QDL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10  0x38
+                       MX6QDL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11  0x38
+                       MX6QDL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12  0x38
+                       MX6QDL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13  0x38
+                       MX6QDL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14  0x38
+                       MX6QDL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15  0x38
+                       MX6QDL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16  0x38
+                       MX6QDL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17  0x38
+                       MX6QDL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18  0x38
+                       MX6QDL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19  0x38
+                       MX6QDL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20  0x38
+                       MX6QDL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21  0x38
+                       MX6QDL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22  0x38
+                       MX6QDL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23  0x38
+               >;
+       };
+
        pinctrl_uart2: uart2grp {
                fsl,pins = <
                        MX6QDL_PAD_GPIO_7__UART2_TX_DATA 0x1b0b1
@@ -194,6 +305,10 @@ MX6QDL_PAD_SD3_DAT3__SD3_DATA3     0x170F9
        };
 };
 
+&ipu1_di0_disp0 {
+       remote-endpoint = <&parallel_display_in>;
+};
+
 &pcie {
        pcie@0,0 {
                reg = <0x000000 0 0 0 0>;
index 8c8a049eb3d09d2e8481ad3c8dcb2daf3280329d..ba01dd76d8874fc6df4a87efa48c3bcc5ddff163 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -175,7 +175,6 @@ &can2 {
 
 /* Apalis SPI1 */
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio5 25 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
@@ -184,7 +183,6 @@ &ecspi1 {
 
 /* Apalis SPI2 */
 &ecspi2 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio2 26 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi2>;
index 5e7792d6bf582b07d9d1a1da3ec07ad55518c00f..550e100e85fc3ecdca0957b045d19f94aff80ea4 100644 (file)
@@ -176,7 +176,6 @@ &can2 {
 &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
-       fsl,spi-num-chipselects = <3>;
        cs-gpios = <&gpio4 9 GPIO_ACTIVE_LOW>,
                   <&gpio4 10 GPIO_ACTIVE_LOW>,
                   <&gpio4 11 GPIO_ACTIVE_LOW>;
index 54f4f0193f2b26a21e60fff1d8a6bc52b07732d0..b2debc0aa7207f097988bc661c89fff8c9a7c2e6 100644 (file)
@@ -100,7 +100,6 @@ rtc@68 {
 };
 
 &ecspi4 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 20 0>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi4>;
index 7fff02c406f22b8bda976b6f8cbb89c415c6ed06..ec68f1cace31c4611c904c053a83b3d4efd89915 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -114,7 +114,6 @@ &can2 {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <3>;
        cs-gpios = <&gpio4 9 GPIO_ACTIVE_HIGH
                    &gpio4 10 GPIO_ACTIVE_HIGH
                    &gpio4 11 GPIO_ACTIVE_HIGH>;
@@ -124,7 +123,6 @@ &gpio4 10 GPIO_ACTIVE_HIGH
 };
 
 &ecspi2 {
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <&gpio2 26 GPIO_ACTIVE_HIGH &gpio2 27 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi2>;
@@ -132,7 +130,6 @@ &ecspi2 {
 };
 
 &ecspi4 {
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <&gpio3 29 GPIO_ACTIVE_HIGH &gpio5 2 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi4>;
index e6faa653f91af61fdb8617421da0aad7838179eb..e8078758f26cfd3ca0e022368ac5f266638dfc16 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -138,7 +138,6 @@ &can2 {
 
 /* Colibri SSP */
 &ecspi4 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio5 2 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi4>;
index ff41f83551de6ee72bb6da96b24c3e3ed87d4c58..14fff4ee6516cbd0891329506ee072a0f61c0300 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index b2c083d57598b71cee59df2437ab7aeaa2b4917d..d78312c63672dc71d2ebbf102c77144c9b8778f2 100644 (file)
@@ -29,7 +29,6 @@ chosen {
 };
 
 &ecspi3 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 24 0>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi3>;
index afec2c7628ef5d42dfbfbed6e8033e730328d205..e8c1edc82e6ef122a7fb68ee568d50d0f59a3d11 100644 (file)
@@ -56,38 +56,29 @@ pps {
                status = "okay";
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               reg_3p3v: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "3P3V";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       reg_3p3v: regulator-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "3P3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
 
-               reg_5p0v: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "5P0V";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       reg_5p0v: regulator-5p0v {
+               compatible = "regulator-fixed";
+               regulator-name = "5P0V";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               reg_usb_otg_vbus: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "usb_otg_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       reg_usb_otg_vbus: regulator-usb-otg-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb_otg_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
        };
 };
 
@@ -158,6 +149,81 @@ &i2c2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c2>;
        status = "okay";
+
+       ltc3676: pmic@3c {
+               compatible = "lltc,ltc3676";
+               reg = <0x3c>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_pmic>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <8 IRQ_TYPE_EDGE_FALLING>;
+
+               regulators {
+                       /* VDD_SOC (1+R1/R2 = 1.635) */
+                       reg_vdd_soc: sw1 {
+                               regulator-name = "vddsoc";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_1P8 (1+R1/R2 = 2.505): GPS/VideoIn/ENET-PHY */
+                       reg_1p8v: sw2 {
+                               regulator-name = "vdd1p8";
+                               regulator-min-microvolt = <1033310>;
+                               regulator-max-microvolt = <2004000>;
+                               lltc,fb-voltage-divider = <301000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_ARM (1+R1/R2 = 1.635) */
+                       reg_vdd_arm: sw3 {
+                               regulator-name = "vddarm";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_DDR (1+R1/R2 = 2.105) */
+                       reg_vdd_ddr: sw4 {
+                               regulator-name = "vddddr";
+                               regulator-min-microvolt = <868310>;
+                               regulator-max-microvolt = <1684000>;
+                               lltc,fb-voltage-divider = <221000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_2P5 (1+R1/R2 = 3.435): PCIe/ENET-PHY */
+                       reg_2p5v: ldo2 {
+                               regulator-name = "vdd2p5";
+                               regulator-min-microvolt = <2490375>;
+                               regulator-max-microvolt = <2490375>;
+                               lltc,fb-voltage-divider = <487000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_HIGH (1+R1/R2 = 4.17) */
+                       reg_3p0v: ldo4 {
+                               regulator-name = "vdd3p0";
+                               regulator-min-microvolt = <3023250>;
+                               regulator-max-microvolt = <3023250>;
+                               lltc,fb-voltage-divider = <634000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+               };
+       };
 };
 
 &i2c3 {
@@ -312,6 +378,12 @@ MX6QDL_PAD_GPIO_0__GPIO1_IO00              0x1b0b0
                        >;
                };
 
+               pinctrl_pmic: pmicgrp {
+                       fsl,pins = <
+                               MX6QDL_PAD_GPIO_8__GPIO1_IO08           0x0001b0b0 /* PMIC_IRQ# */
+                       >;
+               };
+
                pinctrl_pps: ppsgrp {
                        fsl,pins = <
                                MX6QDL_PAD_ENET_RXD1__GPIO1_IO26        0x1b0b1
index 54aca3a07ce49a679cd995699157690c19b2b1e3..91991d63a69c9a9af6aac4772be2b21014a8a493 100644 (file)
@@ -71,57 +71,37 @@ pps {
                status = "okay";
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               reg_1p0v: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "1P0V";
-                       regulator-min-microvolt = <1000000>;
-                       regulator-max-microvolt = <1000000>;
-                       regulator-always-on;
-               };
-
-               /* remove this fixed regulator once ltc3676__sw2 driver available */
-               reg_1p8v: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "1P8V";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       regulator-always-on;
-               };
+       reg_1p0v: regulator-1p0v {
+               compatible = "regulator-fixed";
+               regulator-name = "1P0V";
+               regulator-min-microvolt = <1000000>;
+               regulator-max-microvolt = <1000000>;
+               regulator-always-on;
+       };
 
-               reg_3p3v: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "3P3V";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       reg_3p3v: regulator-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "3P3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
 
-               reg_5p0v: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "5P0V";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       reg_5p0v: regulator-5p0v {
+               compatible = "regulator-fixed";
+               regulator-name = "5P0V";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               reg_usb_otg_vbus: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "usb_otg_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       reg_usb_otg_vbus: regulator-usb-otg-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb_otg_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
        };
 
        sound {
@@ -159,7 +139,6 @@ &clks {
 };
 
 &ecspi3 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 24 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi3>;
@@ -233,6 +212,89 @@ &i2c2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c2>;
        status = "okay";
+
+       ltc3676: pmic@3c {
+               compatible = "lltc,ltc3676";
+               reg = <0x3c>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_pmic>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <8 IRQ_TYPE_EDGE_FALLING>;
+
+               regulators {
+                       /* VDD_SOC (1+R1/R2 = 1.635) */
+                       reg_vdd_soc: sw1 {
+                               regulator-name = "vddsoc";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_1P8 (1+R1/R2 = 2.505): GPS/VideoIn/ENET-PHY */
+                       reg_1p8v: sw2 {
+                               regulator-name = "vdd1p8";
+                               regulator-min-microvolt = <1033310>;
+                               regulator-max-microvolt = <2004000>;
+                               lltc,fb-voltage-divider = <301000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_ARM (1+R1/R2 = 1.635) */
+                       reg_vdd_arm: sw3 {
+                               regulator-name = "vddarm";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_DDR (1+R1/R2 = 2.105) */
+                       reg_vdd_ddr: sw4 {
+                               regulator-name = "vddddr";
+                               regulator-min-microvolt = <868310>;
+                               regulator-max-microvolt = <1684000>;
+                               lltc,fb-voltage-divider = <221000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_2P5 (1+R1/R2 = 3.435): PCIe/ENET-PHY */
+                       reg_2p5v: ldo2 {
+                               regulator-name = "vdd2p5";
+                               regulator-min-microvolt = <2490375>;
+                               regulator-max-microvolt = <2490375>;
+                               lltc,fb-voltage-divider = <487000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_AUD_1P8: Audio codec */
+                       reg_aud_1p8v: ldo3 {
+                               regulator-name = "vdd1p8";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-boot-on;
+                       };
+
+                       /* VDD_HIGH (1+R1/R2 = 4.17) */
+                       reg_3p0v: ldo4 {
+                               regulator-name = "vdd3p0";
+                               regulator-min-microvolt = <3023250>;
+                               regulator-max-microvolt = <3023250>;
+                               lltc,fb-voltage-divider = <634000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+               };
+       };
 };
 
 &i2c3 {
@@ -467,6 +529,12 @@ MX6QDL_PAD_ENET_TXD1__GPIO1_IO29   0x1b0b0 /* PCIE_RST# */
                        >;
                };
 
+               pinctrl_pmic: pmicgrp {
+                       fsl,pins = <
+                               MX6QDL_PAD_GPIO_8__GPIO1_IO08           0x0001b0b0 /* PMIC_IRQ# */
+                       >;
+               };
+
                pinctrl_pps: ppsgrp {
                        fsl,pins = <
                                MX6QDL_PAD_ENET_RXD1__GPIO1_IO26        0x1b0b1
index 88e5cb3b6be97db98934075b5375f52b18e95515..a208e7e0dc6e2cd61b35373384ecf3741904c4b8 100644 (file)
@@ -72,57 +72,37 @@ pps {
                status = "okay";
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               reg_1p0v: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "1P0V";
-                       regulator-min-microvolt = <1000000>;
-                       regulator-max-microvolt = <1000000>;
-                       regulator-always-on;
-               };
-
-               /* remove when pmic 1p8 regulator available */
-               reg_1p8v: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "1P8V";
-                       regulator-min-microvolt = <1800000>;
-                       regulator-max-microvolt = <1800000>;
-                       regulator-always-on;
-               };
+       reg_1p0v: regulator-1p0v {
+               compatible = "regulator-fixed";
+               regulator-name = "1P0V";
+               regulator-min-microvolt = <1000000>;
+               regulator-max-microvolt = <1000000>;
+               regulator-always-on;
+       };
 
-               reg_3p3v: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "3P3V";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       reg_3p3v: regulator-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "3P3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
 
-               reg_usb_h1_vbus: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "usb_h1_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       reg_usb_h1_vbus: regulator-usb-h1-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb_h1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
+       };
 
-               reg_usb_otg_vbus: regulator@4 {
-                       compatible = "regulator-fixed";
-                       reg = <4>;
-                       regulator-name = "usb_otg_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
-                       enable-active-high;
-               };
+       reg_usb_otg_vbus: regulator-usb-otg-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb_otg_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
        };
 
        sound {
@@ -226,6 +206,87 @@ &i2c2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c2>;
        status = "okay";
+
+       ltc3676: pmic@3c {
+               compatible = "lltc,ltc3676";
+               reg = <0x3c>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <8 IRQ_TYPE_EDGE_FALLING>;
+
+               regulators {
+                       /* VDD_SOC (1+R1/R2 = 1.635) */
+                       reg_vdd_soc: sw1 {
+                               regulator-name = "vddsoc";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_1P8 (1+R1/R2 = 2.505): GPS/VideoIn/ENET-PHY */
+                       reg_1p8v: sw2 {
+                               regulator-name = "vdd1p8";
+                               regulator-min-microvolt = <1033310>;
+                               regulator-max-microvolt = <2004000>;
+                               lltc,fb-voltage-divider = <301000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_ARM (1+R1/R2 = 1.635) */
+                       reg_vdd_arm: sw3 {
+                               regulator-name = "vddarm";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_DDR (1+R1/R2 = 2.105) */
+                       reg_vdd_ddr: sw4 {
+                               regulator-name = "vddddr";
+                               regulator-min-microvolt = <868310>;
+                               regulator-max-microvolt = <1684000>;
+                               lltc,fb-voltage-divider = <221000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_2P5 (1+R1/R2 = 3.435): PCIe/ENET-PHY */
+                       reg_2p5v: ldo2 {
+                               regulator-name = "vdd2p5";
+                               regulator-min-microvolt = <2490375>;
+                               regulator-max-microvolt = <2490375>;
+                               lltc,fb-voltage-divider = <487000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_AUD_1P8: Audio codec */
+                       reg_aud_1p8v: ldo3 {
+                               regulator-name = "vdd1p8a";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-boot-on;
+                       };
+
+                       /* VDD_HIGH (1+R1/R2 = 4.17) */
+                       reg_3p0v: ldo4 {
+                               regulator-name = "vdd3p0";
+                               regulator-min-microvolt = <3023250>;
+                               regulator-max-microvolt = <3023250>;
+                               lltc,fb-voltage-divider = <634000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+               };
+       };
 };
 
 &i2c3 {
@@ -456,6 +517,12 @@ MX6QDL_PAD_ENET_TXD1__GPIO1_IO29  0x1b0b0 /* PCIE RST */
                        >;
                };
 
+               pinctrl_pmic: pmicgrp {
+                       fsl,pins = <
+                               MX6QDL_PAD_GPIO_8__GPIO1_IO08           0x0001b0b0 /* PMIC_IRQ# */
+                       >;
+               };
+
                pinctrl_pps: ppsgrp {
                        fsl,pins = <
                                MX6QDL_PAD_ENET_RXD1__GPIO1_IO26        0x1b0b1
index 1753ab720b0be2676f90e2fe6c8a16dbee9925ab..968fda94d14bfb09302c18bfe5fbf1942ffc3466 100644 (file)
@@ -149,6 +149,13 @@ &clks {
                                 <&clks IMX6QDL_CLK_PLL3_USB_OTG>;
 };
 
+&ecspi2 {
+       cs-gpios = <&gpio2 26 GPIO_ACTIVE_HIGH>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_ecspi2>;
+       status = "okay";
+};
+
 &fec {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_enet>;
@@ -499,6 +506,15 @@ MX6QDL_PAD_GPIO_16__ENET_REF_CLK   0x4001b0a8
                        >;
                };
 
+               pinctrl_ecspi2: escpi2grp {
+                       fsl,pins = <
+                               MX6QDL_PAD_EIM_CS0__ECSPI2_SCLK 0x100b1
+                               MX6QDL_PAD_EIM_CS1__ECSPI2_MOSI 0x100b1
+                               MX6QDL_PAD_EIM_OE__ECSPI2_MISO  0x100b1
+                               MX6QDL_PAD_EIM_RW__GPIO2_IO26   0x100b1
+                       >;
+               };
+
                pinctrl_flexcan1: flexcan1grp {
                        fsl,pins = <
                                MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX        0x1b0b1
index 4b9fef834822b72f6183d5ef7375e89aca96c1fb..405b40310ddf2828672e8c0d7245b42ea701ae80 100644 (file)
@@ -78,34 +78,25 @@ memory {
                reg = <0x10000000 0x20000000>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               reg_5p0v: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "5P0V";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-               };
+       reg_5p0v: regulator-5p0v {
+               compatible = "regulator-fixed";
+               regulator-name = "5P0V";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+       };
 
-               reg_usb_h1_vbus: regulator@1 {
-                       compatible = "regulator-fixed";
-                       reg = <1>;
-                       regulator-name = "usb_h1_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-               };
+       reg_usb_h1_vbus: regulator-usb-h1-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb_h1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+       };
 
-               reg_usb_otg_vbus: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "usb_otg_vbus";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-               };
+       reg_usb_otg_vbus: regulator-usb-otg-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb_otg_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
        };
 };
 
@@ -174,6 +165,89 @@ &i2c2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c2>;
        status = "okay";
+
+       ltc3676: pmic@3c {
+               compatible = "lltc,ltc3676";
+               reg = <0x3c>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_pmic>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <8 IRQ_TYPE_EDGE_FALLING>;
+
+               regulators {
+                       /* VDD_SOC (1+R1/R2 = 1.635) */
+                       reg_vdd_soc: sw1 {
+                               regulator-name = "vddsoc";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_DDR (1+R1/R2 = 2.105) */
+                       reg_vdd_ddr: sw2 {
+                               regulator-name = "vddddr";
+                               regulator-min-microvolt = <868310>;
+                               regulator-max-microvolt = <1684000>;
+                               lltc,fb-voltage-divider = <221000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_ARM (1+R1/R2 = 1.635) */
+                       reg_vdd_arm: sw3 {
+                               regulator-name = "vddarm";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_3P3 (1+R1/R2 = 1.281) */
+                       reg_3p3: sw4 {
+                               regulator-name = "vdd3p3";
+                               regulator-min-microvolt = <1880000>;
+                               regulator-max-microvolt = <3647000>;
+                               lltc,fb-voltage-divider = <200000 56200>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_1P8a (1+R1/R2 = 2.505): HDMI In core */
+                       reg_1p8a: ldo2 {
+                               regulator-name = "vdd1p8a";
+                               regulator-min-microvolt = <1816125>;
+                               regulator-max-microvolt = <1816125>;
+                               lltc,fb-voltage-divider = <301000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_1P8b: HDMI In analog */
+                       reg_1p8b: ldo3 {
+                               regulator-name = "vdd1p8b";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-boot-on;
+                       };
+
+                       /* VDD_HIGH (1+R1/R2 = 4.17) */
+                       reg_3p0: ldo4 {
+                               regulator-name = "vdd3p0";
+                               regulator-min-microvolt = <3023250>;
+                               regulator-max-microvolt = <3023250>;
+                               lltc,fb-voltage-divider = <634000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+               };
+       };
 };
 
 &i2c3 {
@@ -308,6 +382,12 @@ MX6QDL_PAD_GPIO_0__GPIO1_IO00              0x1b0b0 /* PCIE RST */
                        >;
                };
 
+               pinctrl_pmic: pmicgrp {
+                       fsl,pins = <
+                               MX6QDL_PAD_GPIO_8__GPIO1_IO08           0x0001b0b0 /* PMIC_IRQ# */
+                       >;
+               };
+
                pinctrl_pwm2: pwm2grp {
                        fsl,pins = <
                                MX6QDL_PAD_SD1_DAT2__PWM2_OUT           0x1b0b1
index ee83161f674b70a233e3e016641d428be78f16fc..67613dd7cc926fa6d11c273dadfb1c8314365ad1 100644 (file)
@@ -55,37 +55,28 @@ memory {
                reg = <0x10000000 0x20000000>;
        };
 
-       regulators {
-               compatible = "simple-bus";
-               #address-cells = <1>;
-               #size-cells = <0>;
-
-               reg_1p0v: regulator@0 {
-                       compatible = "regulator-fixed";
-                       reg = <0>;
-                       regulator-name = "1P0V";
-                       regulator-min-microvolt = <1000000>;
-                       regulator-max-microvolt = <1000000>;
-                       regulator-always-on;
-               };
+       reg_1p0v: regulator-1p0v {
+               compatible = "regulator-fixed";
+               regulator-name = "1P0V";
+               regulator-min-microvolt = <1000000>;
+               regulator-max-microvolt = <1000000>;
+               regulator-always-on;
+       };
 
-               reg_3p3v: regulator@2 {
-                       compatible = "regulator-fixed";
-                       reg = <2>;
-                       regulator-name = "3P3V";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
-                       regulator-always-on;
-               };
+       reg_3p3v: regulator-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "3P3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
 
-               reg_5p0v: regulator@3 {
-                       compatible = "regulator-fixed";
-                       reg = <3>;
-                       regulator-name = "5P0V";
-                       regulator-min-microvolt = <5000000>;
-                       regulator-max-microvolt = <5000000>;
-                       regulator-always-on;
-               };
+       reg_5p0v: regulator-5p0v {
+               compatible = "regulator-fixed";
+               regulator-name = "5P0V";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-always-on;
        };
 };
 
@@ -148,6 +139,81 @@ &i2c2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c2>;
        status = "okay";
+
+       ltc3676: pmic@3c {
+               compatible = "lltc,ltc3676";
+               reg = <0x3c>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_pmic>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <8 IRQ_TYPE_EDGE_FALLING>;
+
+               regulators {
+                       /* VDD_SOC (1+R1/R2 = 1.635) */
+                       reg_vdd_soc: sw1 {
+                               regulator-name = "vddsoc";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_1P8 (1+R1/R2 = 2.505): ENET-PHY */
+                       reg_1p8v: sw2 {
+                               regulator-name = "vdd1p8";
+                               regulator-min-microvolt = <1033310>;
+                               regulator-max-microvolt = <2004000>;
+                               lltc,fb-voltage-divider = <301000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_ARM (1+R1/R2 = 1.635) */
+                       reg_vdd_arm: sw3 {
+                               regulator-name = "vddarm";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_DDR (1+R1/R2 = 2.105) */
+                       reg_vdd_ddr: sw4 {
+                               regulator-name = "vddddr";
+                               regulator-min-microvolt = <868310>;
+                               regulator-max-microvolt = <1684000>;
+                               lltc,fb-voltage-divider = <221000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_2P5 (1+R1/R2 = 3.435): PCIe/ENET-PHY */
+                       reg_2p5v: ldo2 {
+                               regulator-name = "vdd2p5";
+                               regulator-min-microvolt = <2490375>;
+                               regulator-max-microvolt = <2490375>;
+                               lltc,fb-voltage-divider = <487000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_HIGH (1+R1/R2 = 4.17) */
+                       reg_3p0v: ldo4 {
+                               regulator-name = "vdd3p0";
+                               regulator-min-microvolt = <3023250>;
+                               regulator-max-microvolt = <3023250>;
+                               lltc,fb-voltage-divider = <634000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+               };
+       };
 };
 
 &i2c3 {
@@ -260,6 +326,12 @@ MX6QDL_PAD_ENET_TXD1__GPIO1_IO29   0x1b0b0
                        >;
                };
 
+               pinctrl_pmic: pmicgrp {
+                       fsl,pins = <
+                               MX6QDL_PAD_GPIO_8__GPIO1_IO08           0x0001b0b0 /* PMIC_IRQ# */
+                       >;
+               };
+
                pinctrl_pwm2: pwm2grp {
                        fsl,pins = <
                                MX6QDL_PAD_SD1_DAT2__PWM2_OUT           0x1b0b1
index 86cec0527f731f044355c0b44ba8ed981c98d02e..57374dddf98d129c8019b4e0b14d63acd546766c 100644 (file)
@@ -92,14 +92,6 @@ pps {
                status = "okay";
        };
 
-       reg_3p3v: regulator-3p3v {
-               compatible = "regulator-fixed";
-               regulator-name = "3P0V";
-               regulator-min-microvolt = <3300000>;
-               regulator-max-microvolt = <3300000>;
-               regulator-always-on;
-       };
-
        reg_5p0v: regulator-5p0v {
                compatible = "regulator-fixed";
                regulator-name = "5P0V";
@@ -179,6 +171,89 @@ &i2c2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_i2c2>;
        status = "okay";
+
+       ltc3676: pmic@3c {
+               compatible = "lltc,ltc3676";
+               reg = <0x3c>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_pmic>;
+               interrupt-parent = <&gpio1>;
+               interrupts = <8 IRQ_TYPE_EDGE_FALLING>;
+
+               regulators {
+                       /* VDD_SOC (1+R1/R2 = 1.635) */
+                       reg_vdd_soc: sw1 {
+                               regulator-name = "vddsoc";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_DDR (1+R1/R2 = 2.105) */
+                       reg_vdd_ddr: sw2 {
+                               regulator-name = "vddddr";
+                               regulator-min-microvolt = <868310>;
+                               regulator-max-microvolt = <1684000>;
+                               lltc,fb-voltage-divider = <221000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_ARM (1+R1/R2 = 1.635) */
+                       reg_vdd_arm: sw3 {
+                               regulator-name = "vddarm";
+                               regulator-min-microvolt = <674400>;
+                               regulator-max-microvolt = <1308000>;
+                               lltc,fb-voltage-divider = <127000 200000>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_3P3 (1+R1/R2 = 1.281) */
+                       reg_3p3v: sw4 {
+                               regulator-name = "vdd3p3";
+                               regulator-min-microvolt = <1880000>;
+                               regulator-max-microvolt = <3647000>;
+                               lltc,fb-voltage-divider = <200000 56200>;
+                               regulator-ramp-delay = <7000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_1P8a (1+R1/R2 = 2.505): Analog Video Decoder */
+                       reg_1p8a: ldo2 {
+                               regulator-name = "vdd1p8a";
+                               regulator-min-microvolt = <1816125>;
+                               regulator-max-microvolt = <1816125>;
+                               lltc,fb-voltage-divider = <301000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       /* VDD_1P8b: microSD VDD_1P8 */
+                       reg_1p8b: ldo3 {
+                               regulator-name = "vdd1p8b";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-boot-on;
+                       };
+
+                       /* VDD_HIGH (1+R1/R2 = 4.17) */
+                       reg_3p0v: ldo4 {
+                               regulator-name = "vdd3p0";
+                               regulator-min-microvolt = <3023250>;
+                               regulator-max-microvolt = <3023250>;
+                               lltc,fb-voltage-divider = <634000 200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+               };
+       };
 };
 
 &i2c3 {
@@ -255,7 +330,6 @@ &usdhc3 {
        pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
        pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
        cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>;
-       vmmc-supply = <&reg_3p3v>;
        status = "okay";
 };
 
@@ -327,6 +401,12 @@ MX6QDL_PAD_GPIO_17__GPIO7_IO12             0x4001b0b0 /* PCIESKT_WDIS# */
                >;
        };
 
+       pinctrl_pmic: pmicgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_8__GPIO1_IO08           0x0001b0b0 /* PMIC_IRQ# */
+               >;
+       };
+
        pinctrl_pps: ppsgrp {
                fsl,pins = <
                        MX6QDL_PAD_ENET_RXD1__GPIO1_IO26        0x1b0b1
index d6c2358ffad4490af869a099e1884bc3122415ac..988334c889eb79986f51f12b27d23cbec46de61d 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index d5c3aa88adbe864e3950fe07e348ac6345232061..5fab5be414feb729fb3458fab43852c2644d0969 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -223,7 +223,7 @@ &usdhc3 {
        pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
        vmcc-supply = <&reg_sd3_vmmc>;
        cd-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>;
-       bus-witdh=<4>;
+       bus-witdh = <4>;
        no-1-8-v;
        status = "okay";
 };
@@ -234,7 +234,7 @@ &usdhc4 {
        pinctrl-1 = <&pinctrl_usdhc4_100mhz>;
        pinctrl-2 = <&pinctrl_usdhc4_200mhz>;
        vmcc-supply = <&reg_sd4_vmmc>;
-       bus-witdh=<8>;
+       bus-witdh = <8>;
        no-1-8-v;
        non-removable;
        status = "okay";
index 023839a02dd0bbd7aea00d754544357e594b6362..55bebfc9ad94b4362f11d6c20836e87a27a68b4f 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 469ef58ce4bc8c7951ba07008c6dd60260ddecff..a9b207751a02fe2f9cc101f57d436f7a31080e39 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 3d62401dbd7fe538f8fad952987114541a18105f..6a410160c9ee40ab7e8132b9ccf8ea77195adad7 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 63acd54f527845f172dfdad2b438b6b5f637c7e1..6b81580623ff70ae494ee28a74b02c180503e23c 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -209,7 +209,6 @@ &clks {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 19 GPIO_ACTIVE_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
@@ -515,8 +514,6 @@ &ldb {
        status = "okay";
 
        lvds-channel@0 {
-               fsl,data-mapping = "spwg";
-               fsl,data-width = <18>;
                status = "okay";
 
                port@4 {
index 34887a10c5f1712e62c0b953405ef330676a6940..000959c05e092e33f9847048b40795e931f8b9b7 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -353,7 +353,6 @@ &clks {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
@@ -739,8 +738,6 @@ &ldb {
        status = "okay";
 
        lvds-channel@0 {
-               fsl,data-mapping = "spwg";
-               fsl,data-width = <18>;
                status = "okay";
 
                port@4 {
@@ -753,8 +750,6 @@ lvds0_out: endpoint {
        };
 
        lvds-channel@1 {
-               fsl,data-mapping = "spwg";
-               fsl,data-width = <18>;
                status = "okay";
 
                port@4 {
index d80f21abea62b5bfbd15c4999b01f282b269e973..8aba8259caf72529abb98926d64efd0bbf89c3bb 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -284,7 +284,6 @@ &clks {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
@@ -640,8 +639,6 @@ &ldb {
        status = "okay";
 
        lvds-channel@0 {
-               fsl,data-mapping = "spwg";
-               fsl,data-width = <18>;
                status = "okay";
 
                port@4 {
index e476d01959ea3f337eb966559c241b3ef82f7fba..70772ebadd4d438f9620983c559551900e4cdfac 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -255,7 +255,6 @@ &clks {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 19 0>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
@@ -533,7 +532,6 @@ MX6QDL_PAD_SD2_DAT0__SD2_DATA0              0x17071
                                MX6QDL_PAD_SD2_DAT1__SD2_DATA1          0x17071
                                MX6QDL_PAD_SD2_DAT2__SD2_DATA2          0x17071
                                MX6QDL_PAD_SD2_DAT3__SD2_DATA3          0x17071
-                               MX6QDL_PAD_NANDF_CS2__GPIO6_IO15        0x000b0
                        >;
                };
 
@@ -580,8 +578,6 @@ &ldb {
        status = "okay";
 
        lvds-channel@0 {
-               fsl,data-mapping = "spwg";
-               fsl,data-width = <18>;
                status = "okay";
 
                port@4 {
index e9801a26f3b44f627de01a887dd8c35b11f21904..6e5cb6a995509962203e575f23580783091c51d8 100644 (file)
@@ -76,7 +76,6 @@ &ecspi3 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi3>;
        status = "okay";
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 24 0>;
 
        flash@0 {
index 17704a5c1bcb5c332e02dfd0b0914ff2d94c18c5..5cf90c24c70791a2fc7c89a386b0ebe3e9fa3d17 100644 (file)
@@ -89,7 +89,6 @@ &audmux {
 };
 
 &ecspi2 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio5 12 GPIO_ACTIVE_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi2>;
@@ -97,7 +96,6 @@ &ecspi2 {
 };
 
 &ecspi3 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 26 GPIO_ACTIVE_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi3>;
index 52390ba83e81687aa2c2d3b73ed1271f530b6324..a2a714d199ea84e783f22954835274bb12948d8e 100644 (file)
@@ -124,7 +124,6 @@ &clks {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 19 0>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1 &pinctrl_ecspi1_cs>;
index 1f9076e271e42098b58a230d38b38d0fef5c2ed5..84131794e97b6f88efaff8b6158e07c9165a43a2 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -241,7 +241,6 @@ &clks {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 19 0>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
@@ -525,8 +524,6 @@ &ldb {
        status = "okay";
 
        lvds-channel@0 {
-               fsl,data-mapping = "spwg";
-               fsl,data-width = <18>;
                status = "okay";
 
                port@4 {
index 55ef53571fddd9d06caa7a66c3daa2b87d72a721..63bf95ed8c88930ccc935f71a236fa02c89243e7 100644 (file)
@@ -160,7 +160,6 @@ &clks {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 9 0>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
diff --git a/arch/arm/boot/dts/imx6qdl-savageboard.dtsi b/arch/arm/boot/dts/imx6qdl-savageboard.dtsi
new file mode 100644 (file)
index 0000000..a616e3c
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+ * Copyright (C) 2017 Milo Kim <woogyom.kim@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.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       chosen {
+               stdout-path = &uart1;
+       };
+
+       memory@10000000 {
+               device_type = "memory";
+               reg = <0x10000000 0x40000000>;
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_gpio_keys>;
+
+               power {
+                       gpios = <&gpio3 7 GPIO_ACTIVE_LOW>;
+                       label = "Power Button";
+                       linux,code = <KEY_POWER>;
+                       wakeup-source;
+               };
+       };
+
+       panel {
+               compatible = "avic,tm097tdh02", "hannstar,hsd100pxn1";
+               backlight = <&panel_bl>;
+               power-supply = <&reg_3p3v>;
+
+               port {
+                       panel_in: endpoint {
+                               remote-endpoint = <&lvds0_out>;
+                       };
+               };
+       };
+
+       panel_bl: backlight {
+               compatible = "pwm-backlight";
+               brightness-levels = <0 4 8 16 32 64 128 255>;
+               default-brightness-level = <4>;
+               power-supply = <&reg_3p3v>;
+               pwms = <&pwm1 0 10000>;
+       };
+
+       reg_3p3v: regulator-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "3P3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-always-on;
+       };
+};
+
+&clks {
+       assigned-clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>,
+                         <&clks IMX6QDL_CLK_LDB_DI1_SEL>;
+       assigned-clock-parents = <&clks IMX6QDL_CLK_PLL3_USB_OTG>,
+                                <&clks IMX6QDL_CLK_PLL3_USB_OTG>;
+};
+
+&fec {
+       phy-mode = "rgmii";
+       phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_enet>;
+       status = "okay";
+};
+
+&hdmi {
+       ddc-i2c-bus = <&i2c2>;
+       status = "okay";
+};
+
+&i2c2 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c2>;
+       status = "okay";
+};
+
+&ldb {
+       status = "okay";
+
+       lvds-channel@0 {
+               reg = <0>;
+               status = "okay";
+
+               port@4 {
+                       reg = <4>;
+
+                       lvds0_out: endpoint {
+                               remote-endpoint = <&panel_in>;
+                       };
+               };
+       };
+};
+
+&pwm1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_pwm1>;
+       status = "okay";
+};
+
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart1>;
+       status = "okay";
+};
+
+&usbh1 {
+       status = "okay";
+};
+
+/* SD card */
+&usdhc3 {
+       bus-width = <4>;
+       cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
+       no-1-8-v;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_sd>;
+       status = "okay";
+};
+
+/* eMMC */
+&usdhc4 {
+       bus-width = <8>;
+       keep-power-in-suspend;
+       no-1-8-v;
+       non-removable;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_emmc>;
+       status = "okay";
+};
+
+&iomuxc {
+       pinctrl_emmc: emmcgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_SD4_CMD__SD4_CMD             0x17059
+                       MX6QDL_PAD_SD4_CLK__SD4_CLK             0x10059
+                       MX6QDL_PAD_SD4_DAT0__SD4_DATA0          0x17059
+                       MX6QDL_PAD_SD4_DAT1__SD4_DATA1          0x17059
+                       MX6QDL_PAD_SD4_DAT2__SD4_DATA2          0x17059
+                       MX6QDL_PAD_SD4_DAT3__SD4_DATA3          0x17059
+                       MX6QDL_PAD_SD4_DAT4__SD4_DATA4          0x17059
+                       MX6QDL_PAD_SD4_DAT5__SD4_DATA5          0x17059
+                       MX6QDL_PAD_SD4_DAT6__SD4_DATA6          0x17059
+                       MX6QDL_PAD_SD4_DAT7__SD4_DATA7          0x17059
+               >;
+       };
+
+       pinctrl_enet: enetgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_ENET_MDIO__ENET_MDIO         0x1b0b0
+                       MX6QDL_PAD_ENET_MDC__ENET_MDC           0x1b0b0
+                       MX6QDL_PAD_RGMII_TXC__RGMII_TXC         0x1b030
+                       MX6QDL_PAD_RGMII_TD0__RGMII_TD0         0x1b030
+                       MX6QDL_PAD_RGMII_TD1__RGMII_TD1         0x1b030
+                       MX6QDL_PAD_RGMII_TD2__RGMII_TD2         0x1b030
+                       MX6QDL_PAD_RGMII_TD3__RGMII_TD3         0x1b030
+                       MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL   0x1b030
+                       MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK    0x1b0b0
+                       MX6QDL_PAD_RGMII_RXC__RGMII_RXC         0x1b030
+                       MX6QDL_PAD_RGMII_RD0__RGMII_RD0         0x1b030
+                       MX6QDL_PAD_RGMII_RD1__RGMII_RD1         0x1b030
+                       MX6QDL_PAD_RGMII_RD2__RGMII_RD2         0x1b030
+                       MX6QDL_PAD_RGMII_RD3__RGMII_RD3         0x1b030
+                       MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL   0x1b030
+                       /* PHY reset */
+                       MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25      0x1b0b0
+               >;
+       };
+
+       pinctrl_gpio_keys: gpiokeysgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_EIM_DA7__GPIO3_IO07          0x1b0b1
+               >;
+       };
+
+       pinctrl_i2c2: i2c2grp {
+               fsl,pins = <
+                       MX6QDL_PAD_KEY_COL3__I2C2_SCL           0x4001b8b1
+                       MX6QDL_PAD_KEY_ROW3__I2C2_SDA           0x4001b8b1
+               >;
+       };
+
+       pinctrl_pwm1: pwm1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_SD1_DAT3__PWM1_OUT           0x1b0b1
+               >;
+       };
+
+       pinctrl_sd: sdgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_SD3_CMD__SD3_CMD             0x17059
+                       MX6QDL_PAD_SD3_CLK__SD3_CLK             0x10059
+                       MX6QDL_PAD_SD3_DAT0__SD3_DATA0          0x17059
+                       MX6QDL_PAD_SD3_DAT1__SD3_DATA1          0x17059
+                       MX6QDL_PAD_SD3_DAT2__SD3_DATA2          0x17059
+                       MX6QDL_PAD_SD3_DAT3__SD3_DATA3          0x17059
+                       /* CD pin */
+                       MX6QDL_PAD_NANDF_D0__GPIO2_IO00         0x1b0b1
+               >;
+       };
+
+       pinctrl_uart1: uart1grp {
+               fsl,pins = <
+                       MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA    0x1b0b1
+                       MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA    0x1b0b1
+               >;
+       };
+};
index 5c26b26e851a3f0414937fe79db54ec41186e4c3..267c956d8910ac16b5384d9d36016fece89cbc93 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -95,7 +95,6 @@ &can2 {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
@@ -109,7 +108,6 @@ n25q064: flash@0 {
 };
 
 &ecspi2 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio6 2 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi2>;
index 2bf2e623ac1e8bd53d0623d44f5de8e0c31111bc..1691714f13a21d9f322ee4d09e7cf7223f650d87 100644 (file)
@@ -221,7 +221,6 @@ &can2 {
 &ecspi1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <
                &gpio2 30 GPIO_ACTIVE_HIGH
                &gpio3 19 GPIO_ACTIVE_HIGH
index 53e6e63cbb0235d634f108f12ad1fd75001817dd..04eba6894c49fecd18fb3f8a7bd85b9e2b5ae105 100644 (file)
@@ -626,8 +626,8 @@ anatop: anatop@020c8000 {
                                regulator-1p1 {
                                        compatible = "fsl,anatop-regulator";
                                        regulator-name = "vdd1p1";
-                                       regulator-min-microvolt = <800000>;
-                                       regulator-max-microvolt = <1375000>;
+                                       regulator-min-microvolt = <1000000>;
+                                       regulator-max-microvolt = <1200000>;
                                        regulator-always-on;
                                        anatop-reg-offset = <0x110>;
                                        anatop-vol-bit-shift = <8>;
@@ -654,15 +654,15 @@ regulator-3p0 {
                                regulator-2p5 {
                                        compatible = "fsl,anatop-regulator";
                                        regulator-name = "vdd2p5";
-                                       regulator-min-microvolt = <2000000>;
+                                       regulator-min-microvolt = <2250000>;
                                        regulator-max-microvolt = <2750000>;
                                        regulator-always-on;
                                        anatop-reg-offset = <0x130>;
                                        anatop-vol-bit-shift = <8>;
                                        anatop-vol-bit-width = <5>;
                                        anatop-min-bit-val = <0>;
-                                       anatop-min-voltage = <2000000>;
-                                       anatop-max-voltage = <2750000>;
+                                       anatop-min-voltage = <2100000>;
+                                       anatop-max-voltage = <2875000>;
                                };
 
                                reg_arm: regulator-vddcore {
@@ -808,7 +808,7 @@ iomuxc: iomuxc@020e0000 {
                                reg = <0x020e0000 0x4000>;
                        };
 
-                       ldb: ldb@020e0008 {
+                       ldb: ldb {
                                #address-cells = <1>;
                                #size-cells = <0>;
                                compatible = "fsl,imx6q-ldb", "fsl,imx53-ldb";
@@ -1100,6 +1100,7 @@ weim: weim@021b8000 {
                                interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>;
                                clocks = <&clks IMX6QDL_CLK_EIM_SLOW>;
                                fsl,weim-cs-gpr = <&gpr>;
+                               status = "disabled";
                        };
 
                        ocotp: ocotp@021bc000 {
index 0d4977ab7d298ac7ca5ede7274c160c2f73a6ba9..24d071f5d9cd2c9b68813f7ef49dfe557f838ff3 100644 (file)
@@ -95,6 +95,12 @@ mmdc0: mmdc@021b0000 { /* MMDC0 */
        };
 };
 
+&fec {
+       /delete-property/interrupts-extended;
+       interrupts = <0 118 IRQ_TYPE_LEVEL_HIGH>,
+                    <0 119 IRQ_TYPE_LEVEL_HIGH>;
+};
+
 &ldb {
        clocks = <&clks IMX6QDL_CLK_LDB_DI0_SEL>, <&clks IMX6QDL_CLK_LDB_DI1_SEL>,
                 <&clks IMX6QDL_CLK_IPU1_DI0_SEL>, <&clks IMX6QDL_CLK_IPU1_DI1_SEL>,
index be118820e9f7f2593908d04c3df11944b498369f..0a90eea17018aceed3268d3969de1cb7bbd2f435 100644 (file)
@@ -117,7 +117,6 @@ &audmux {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio4 11 0>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
index 4fd6de29f07db21ba1c4552b8d4e37c59858699f..19cbd879c448984717a83e1d819efdec822c4957 100644 (file)
@@ -900,6 +900,7 @@ weim: weim@021b8000 {
                                reg = <0x021b8000 0x4000>;
                                interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>;
                                fsl,weim-cs-gpr = <&gpr>;
+                               status = "disabled";
                        };
 
                        ocotp: ocotp@021bc000 {
index 9b817f3501a66a3c3b8efea8f321c9d8bbd6569c..802da45aa5516f803695445d8e8bbc873bd4edac 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
@@ -142,7 +142,6 @@ &audmux {
 };
 
 &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
        cs-gpios = <&gpio2 16 GPIO_ACTIVE_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi1>;
index 0155450d680e2249374ce211109d7209439c5760..2ac865b7c364f2f1e25d8b8cefd1f01f9d58a2e2 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 2b65d26f43966cf1b469dd7e5d38857b664428d9..49f466fe0b1dc2eecdaca3e6638dd80a12029bcd 100644 (file)
@@ -75,6 +75,50 @@ reg_sdio_pwr: regulator-sdio-pwr {
                regulator-max-microvolt = <3300000>;
                regulator-boot-on;
        };
+
+       reg_usb_otg1_vbus: regulator-usb-otg1-vbus {
+               compatible = "regulator-fixed";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_otg1_reg>;
+               regulator-name = "usb_otg1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       reg_usb_otg2_vbus: regulator-usb-otg2-vbus {
+               compatible = "regulator-fixed";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_otg2_reg>;
+               regulator-name = "usb_otg2_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio4 12 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       reg_wlan: regulator-wlan {
+               compatible = "regulator-fixed";
+               regulator-name = "wlan-en-regulator";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>;
+               startup-delay-us = <70000>;
+               enable-active-high;
+       };
+
+       reg_bt: regulator-bt {
+               compatible = "regulator-fixed";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_bt_reg>;
+               enable-active-high;
+               gpio = <&gpio2 17 GPIO_ACTIVE_HIGH>;
+               regulator-name = "bt_reg";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-always-on;
+       };
 };
 
 &cpu0 {
@@ -86,6 +130,7 @@ &fec1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_enet1>;
        phy-mode = "rmii";
+       phy-reset-duration = <10>;
        phy-reset-gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
 };
 
@@ -186,6 +231,11 @@ vgen6_reg: vldo4 {
 };
 
 &iomuxc {
+       pinctrl_bt_reg: btreggrp {
+               fsl,pins =
+                       <MX6SX_PAD_KEY_ROW2__GPIO2_IO_17        0x15059>;
+       };
+
        pinctrl_enet1: enet1grp {
                fsl,pins =
                        <MX6SX_PAD_ENET1_CRS__GPIO2_IO_1        0xa0b1>,
@@ -223,6 +273,14 @@ pinctrl_uart2: uart2grp {
                        <MX6SX_PAD_GPIO1_IO07__UART2_RX         0x1b0b1>;
        };
 
+       pinctrl_uart3: uart3grp {
+               fsl,pins =
+                       <MX6SX_PAD_SD3_DATA4__UART3_RX          0x13059>,
+                       <MX6SX_PAD_SD3_DATA5__UART3_TX          0x13059>,
+                       <MX6SX_PAD_SD3_DATA6__UART3_RTS_B       0x13059>,
+                       <MX6SX_PAD_SD3_DATA7__UART3_CTS_B       0x13059>;
+       };
+
        pinctrl_uart5: uart5grp {
                fsl,pins =
                        <MX6SX_PAD_SD4_DATA4__UART5_RX          0x1b0b1>,
@@ -241,6 +299,28 @@ pinctrl_uart6: uart6grp {
                        <MX6SX_PAD_CSI_DATA07__UART6_CTS_B      0x1b0b1>;
        };
 
+       pinctrl_otg1_reg: otg1grp {
+               fsl,pins =
+                       <MX6SX_PAD_GPIO1_IO09__GPIO1_IO_9        0x10b0>;
+       };
+
+
+       pinctrl_otg2_reg: otg2grp {
+               fsl,pins =
+                       <MX6SX_PAD_NAND_RE_B__GPIO4_IO_12        0x10b0>;
+       };
+
+       pinctrl_usb_otg1: usbotg1grp {
+               fsl,pins =
+                       <MX6SX_PAD_GPIO1_IO10__ANATOP_OTG1_ID    0x17059>,
+                       <MX6SX_PAD_GPIO1_IO08__USB_OTG1_OC       0x10b0>;
+       };
+
+       pinctrl_usb_otg2: usbot2ggrp {
+               fsl,pins =
+                       <MX6SX_PAD_QSPI1A_DATA0__USB_OTG2_OC     0x10b0>;
+       };
+
        pinctrl_usdhc2: usdhc2grp {
                fsl,pins =
                        <MX6SX_PAD_SD2_CMD__USDHC2_CMD          0x17059>,
@@ -251,6 +331,19 @@ pinctrl_usdhc2: usdhc2grp {
                        <MX6SX_PAD_SD2_DATA3__USDHC2_DATA3      0x17059>,
                        <MX6SX_PAD_SD1_DATA0__GPIO6_IO_2        0x17059>; /* CD */
        };
+
+       pinctrl_usdhc3: usdhc3grp {
+               fsl,pins =
+                       <MX6SX_PAD_KEY_COL2__GPIO2_IO_12        0x15059>,
+                       <MX6SX_PAD_KEY_ROW1__GPIO2_IO_16        0x13059>,
+                       <MX6SX_PAD_SD3_DATA0__USDHC3_DATA0      0x17069>,
+                       <MX6SX_PAD_SD3_DATA1__USDHC3_DATA1      0x17069>,
+                       <MX6SX_PAD_SD3_DATA2__USDHC3_DATA2      0x17069>,
+                       <MX6SX_PAD_SD3_DATA3__USDHC3_DATA3      0x17069>,
+                       <MX6SX_PAD_SD3_CMD__USDHC3_CMD          0x17069>,
+                       <MX6SX_PAD_SD3_CLK__USDHC3_CLK          0x10069>,
+                       <MX6SX_PAD_CSI_MCLK__OSC32K_32K_OUT     0x10059>;
+       };
 };
 
 &uart1 {
@@ -266,6 +359,13 @@ &uart2 {
        status = "disabled";
 };
 
+&uart3 { /* Bluetooth */
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart3>;
+       uart-has-rtscts;
+       status = "okay";
+};
+
 /* Arduino serial */
 &uart5 {
        pinctrl-names = "default";
@@ -280,6 +380,21 @@ &uart6 {
        status = "disabled";
 };
 
+&usbotg1 { /* J2 micro USB port */
+       vbus-supply = <&reg_usb_otg1_vbus>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usb_otg1>;
+       status = "okay";
+};
+
+&usbotg2 { /* J3 host USB port */
+       vbus-supply = <&reg_usb_otg2_vbus>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usb_otg2>;
+       dr_mode = "host";
+       status = "okay";
+};
+
 &usdhc2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_usdhc2>;
@@ -291,3 +406,25 @@ &usdhc2 {
        wakeup-source;
        status = "okay";
 };
+
+&usdhc3 { /* Wi-Fi */
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc3>;
+       non-removable;
+       vmmc-supply = <&reg_wlan>;
+       cap-power-off-card;
+       wakeup-source;
+       keep-power-in-suspend;
+       #address-cells = <1>;
+       #size-cells = <0>;
+       status = "okay";
+
+       wlcore: wlcore@2 {
+               compatible = "ti,wl1831";
+               reg = <2>;
+               interrupt-parent = <&gpio2>;
+               interrupts = <16 IRQ_TYPE_EDGE_RISING>;
+               ref-clock-frequency = <38400000>;
+               tcxo-clock-frequency = <26000000>;
+       };
+};
index 076a30f9bcae26d8e62b119ee92fd71d1944e922..10f33301619777a9d676eb49bae893540d920973 100644 (file)
@@ -977,6 +977,7 @@ weim: weim@021b8000 {
                                interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
                                clocks = <&clks IMX6SX_CLK_EIM_SLOW>;
                                fsl,weim-cs-gpr = <&gpr>;
+                               status = "disabled";
                        };
 
                        ocotp: ocotp@021bc000 {
index 4c4af76143e35cf5e9324c75d956a03b08e53f6d..142e60cab65f509e14909033822645785dea17b2 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 64eb9ed59b9cb0eeca073b55d49a3e591420e105..940aef67313bc12acc858060df5b730eb67721d2 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
diff --git a/arch/arm/boot/dts/imx6ul-isiot-emmc.dts b/arch/arm/boot/dts/imx6ul-isiot-emmc.dts
new file mode 100644 (file)
index 0000000..f5b4228
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2016 Amarula Solutions B.V.
+ * Copyright (C) 2016 Engicam S.r.l.
+ *
+ * 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
+ *     version 2 as published by the Free Software Foundation.
+ *
+ *     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 "imx6ul-isiot.dtsi"
+
+/ {
+       model = "Engicam Is.IoT MX6UL eMMC Starter kit";
+       compatible = "engicam,imx6ul-isiot", "fsl,imx6ul";
+};
+
+&usdhc2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc2>;
+       cd-gpios = <&gpio4 5 GPIO_ACTIVE_LOW>;
+       bus-width = <8>;
+       no-1-8-v;
+       status = "okay";
+};
+
+&iomuxc {
+       pinctrl_usdhc2: usdhc2grp {
+               fsl,pins = <
+                       MX6UL_PAD_NAND_RE_B__USDHC2_CLK      0x17070
+                       MX6UL_PAD_NAND_WE_B__USDHC2_CMD      0x10070
+                       MX6UL_PAD_NAND_DATA00__USDHC2_DATA0  0x17070
+                       MX6UL_PAD_NAND_DATA01__USDHC2_DATA1  0x17070
+                       MX6UL_PAD_NAND_DATA02__USDHC2_DATA2  0x17070
+                       MX6UL_PAD_NAND_DATA03__USDHC2_DATA3  0x17070
+                       MX6UL_PAD_NAND_DATA04__USDHC2_DATA4  0x17070
+                       MX6UL_PAD_NAND_DATA05__USDHC2_DATA5  0x17070
+                       MX6UL_PAD_NAND_DATA06__USDHC2_DATA6  0x17070
+                       MX6UL_PAD_NAND_DATA07__USDHC2_DATA7  0x17070
+                       MX6UL_PAD_NAND_ALE__USDHC2_RESET_B   0x17070
+               >;
+       };
+};
diff --git a/arch/arm/boot/dts/imx6ul-isiot-nand.dts b/arch/arm/boot/dts/imx6ul-isiot-nand.dts
new file mode 100644 (file)
index 0000000..de15e1c
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2016 Amarula Solutions B.V.
+ * Copyright (C) 2016 Engicam S.r.l.
+ *
+ * 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
+ *     version 2 as published by the Free Software Foundation.
+ *
+ *     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 "imx6ul-isiot.dtsi"
+
+/ {
+       model = "Engicam Is.IoT MX6UL NAND Starter kit";
+       compatible = "engicam,imx6ul-isiot", "fsl,imx6ul";
+};
+
+&gpmi {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_gpmi_nand>;
+       nand-on-flash-bbt;
+       status = "okay";
+};
+
+&iomuxc {
+       pinctrl_gpmi_nand: gpmi-nand {
+               fsl,pins = <
+                       MX6UL_PAD_NAND_CLE__RAWNAND_CLE         0xb0b1
+                       MX6UL_PAD_NAND_ALE__RAWNAND_ALE         0xb0b1
+                       MX6UL_PAD_NAND_WP_B__RAWNAND_WP_B       0xb0b1
+                       MX6UL_PAD_NAND_READY_B__RAWNAND_READY_B 0xb000
+                       MX6UL_PAD_NAND_CE0_B__RAWNAND_CE0_B     0xb0b1
+                       MX6UL_PAD_NAND_RE_B__RAWNAND_RE_B       0xb0b1
+                       MX6UL_PAD_NAND_WE_B__RAWNAND_WE_B       0xb0b1
+                       MX6UL_PAD_NAND_DATA00__RAWNAND_DATA00   0xb0b1
+                       MX6UL_PAD_NAND_DATA01__RAWNAND_DATA01   0xb0b1
+                       MX6UL_PAD_NAND_DATA02__RAWNAND_DATA02   0xb0b1
+                       MX6UL_PAD_NAND_DATA03__RAWNAND_DATA03   0xb0b1
+                       MX6UL_PAD_NAND_DATA04__RAWNAND_DATA04   0xb0b1
+                       MX6UL_PAD_NAND_DATA05__RAWNAND_DATA05   0xb0b1
+                       MX6UL_PAD_NAND_DATA06__RAWNAND_DATA06   0xb0b1
+                       MX6UL_PAD_NAND_DATA07__RAWNAND_DATA07   0xb0b1
+               >;
+       };
+};
diff --git a/arch/arm/boot/dts/imx6ul-isiot.dtsi b/arch/arm/boot/dts/imx6ul-isiot.dtsi
new file mode 100644 (file)
index 0000000..0b43699
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2016 Amarula Solutions B.V.
+ * Copyright (C) 2016 Engicam S.r.l.
+ *
+ * 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
+ *     version 2 as published by the Free Software Foundation.
+ *
+ *     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.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include "imx6ul.dtsi"
+
+/ {
+       memory {
+               reg = <0x80000000 0x20000000>;
+       };
+
+       chosen {
+               stdout-path = &uart1;
+       };
+};
+
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart1>;
+       status = "okay";
+};
+
+&usdhc1 {
+       pinctrl-names = "default", "state_100mhz", "state_200mhz";
+       pinctrl-0 = <&pinctrl_usdhc1>;
+       pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
+       pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
+       cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
+       bus-width = <4>;
+       no-1-8-v;
+       status = "okay";
+};
+
+&iomuxc {
+       pinctrl_uart1: uart1grp {
+               fsl,pins = <
+                       MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
+                       MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
+               >;
+       };
+
+       pinctrl_usdhc1: usdhc1grp {
+               fsl,pins = <
+                       MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x17059
+                       MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x10059
+                       MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
+                       MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
+                       MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
+                       MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
+               >;
+       };
+
+       pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
+               fsl,pins = <
+                       MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x170b9
+                       MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x100b9
+                       MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9
+                       MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9
+                       MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9
+                       MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9
+               >;
+       };
+
+       pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
+               fsl,pins = <
+                       MX6UL_PAD_SD1_CMD__USDHC1_CMD     0x170f9
+                       MX6UL_PAD_SD1_CLK__USDHC1_CLK     0x100f9
+                       MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170f9
+                       MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170f9
+                       MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170f9
+                       MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170f9
+               >;
+       };
+};
index 6e04cb9202f47858cd09e0aa82e05bb936dcf45f..ed1d891d6a8953dde12c99e0b675bf033471e948 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 461292d33417e9f94a4679baec0d5c59f8f09f90..039721d3dcb421eb253a2eef6b19262401383910 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
diff --git a/arch/arm/boot/dts/imx6ul-opos6ul.dtsi b/arch/arm/boot/dts/imx6ul-opos6ul.dtsi
new file mode 100644 (file)
index 0000000..51095df
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2017 Armadeus Systems <support@armadeus.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.
+ *
+ *     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.
+ */
+
+#include "imx6ul.dtsi"
+
+/ {
+       memory {
+               reg = <0x80000000 0>; /* will be filled by U-Boot */
+       };
+
+       reg_3v3: regulator-3v3 {
+               compatible = "regulator-fixed";
+               regulator-name = "3V3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       usdhc3_pwrseq: usdhc3-pwrseq {
+               compatible = "mmc-pwrseq-simple";
+               reset-gpios = <&gpio2 9 GPIO_ACTIVE_LOW>;
+       };
+};
+
+&fec1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_enet1>;
+       phy-mode = "rmii";
+       phy-reset-duration = <1>;
+       phy-reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;
+       phy-handle = <&ethphy1>;
+       phy-supply = <&reg_3v3>;
+       status = "okay";
+
+       mdio: mdio {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               ethphy1: ethernet-phy@1 {
+                       compatible = "ethernet-phy-ieee802.3-c22";
+                       reg = <1>;
+                       interrupt-parent = <&gpio4>;
+                       interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
+                       status = "okay";
+               };
+       };
+};
+
+/* Bluetooth */
+&uart8 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart8>;
+       uart-has-rtscts;
+       status = "okay";
+};
+
+/* eMMC */
+&usdhc1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc1>;
+       bus-width = <8>;
+       no-1-8-v;
+       non-removable;
+       status = "okay";
+};
+
+/* WiFi */
+&usdhc2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usdhc2>;
+       bus-width = <4>;
+       no-1-8-v;
+       non-removable;
+       mmc-pwrseq = <&usdhc3_pwrseq>;
+       status = "okay";
+
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       brcmf: bcrmf@1 {
+               compatible = "brcm,bcm4329-fmac";
+               reg = <1>;
+               interrupt-parent = <&gpio2>;
+               interrupts = <8 IRQ_TYPE_LEVEL_LOW>;
+               interrupt-names = "host-wake";
+       };
+};
+
+&iomuxc {
+       pinctrl_enet1: enet1grp {
+               fsl,pins = <
+                       MX6UL_PAD_GPIO1_IO06__ENET1_MDIO        0x1b0b0
+                       MX6UL_PAD_GPIO1_IO07__ENET1_MDC         0x1b0b0
+                       MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER      0x130b0
+                       MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN      0x130b0
+                       MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x130b0
+                       MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x130b0
+                       MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0
+                       MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0
+                       MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN      0x1b0b0
+                       /* INT# */
+                       MX6UL_PAD_NAND_DQS__GPIO4_IO16          0x1b0b0
+                       /* RST# */
+                       MX6UL_PAD_NAND_DATA00__GPIO4_IO02       0x130b0
+                       MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1  0x4001b031
+               >;
+       };
+
+       pinctrl_uart8: uart8grp {
+               fsl,pins = <
+                       MX6UL_PAD_ENET2_TX_EN__UART8_DCE_RX     0x1b0b0
+                       MX6UL_PAD_ENET2_TX_DATA1__UART8_DCE_TX  0x1b0b0
+                       MX6UL_PAD_ENET2_RX_ER__UART8_DCE_RTS    0x1b0b0
+                       MX6UL_PAD_ENET2_TX_CLK__UART8_DCE_CTS   0x1b0b0
+                       /* BT_REG_ON */
+                       MX6UL_PAD_ENET2_RX_EN__GPIO2_IO10       0x130b0
+               >;
+       };
+
+       pinctrl_usdhc1: usdhc1grp {
+               fsl,pins = <
+                       MX6UL_PAD_SD1_CMD__USDHC1_CMD           0x17059
+                       MX6UL_PAD_SD1_CLK__USDHC1_CLK           0x10059
+                       MX6UL_PAD_SD1_DATA0__USDHC1_DATA0       0x17059
+                       MX6UL_PAD_SD1_DATA1__USDHC1_DATA1       0x17059
+                       MX6UL_PAD_SD1_DATA2__USDHC1_DATA2       0x17059
+                       MX6UL_PAD_SD1_DATA3__USDHC1_DATA3       0x17059
+                       MX6UL_PAD_NAND_READY_B__USDHC1_DATA4    0x17059
+                       MX6UL_PAD_NAND_CE0_B__USDHC1_DATA5      0x17059
+                       MX6UL_PAD_NAND_CE1_B__USDHC1_DATA6      0x17059
+                       MX6UL_PAD_NAND_CLE__USDHC1_DATA7        0x17059
+               >;
+       };
+
+       pinctrl_usdhc2: usdhc2grp {
+               fsl,pins = <
+                       MX6UL_PAD_LCD_DATA18__USDHC2_CMD        0x1b0b0
+                       MX6UL_PAD_LCD_DATA19__USDHC2_CLK        0x100b0
+                       MX6UL_PAD_LCD_DATA20__USDHC2_DATA0      0x1b0b0
+                       MX6UL_PAD_LCD_DATA21__USDHC2_DATA1      0x1b0b0
+                       MX6UL_PAD_LCD_DATA22__USDHC2_DATA2      0x1b0b0
+                       MX6UL_PAD_LCD_DATA23__USDHC2_DATA3      0x1b0b0
+                       /* WL_REG_ON */
+                       MX6UL_PAD_ENET2_RX_DATA1__GPIO2_IO09    0x130b0
+                       /* WL_IRQ */
+                       MX6UL_PAD_ENET2_RX_DATA0__GPIO2_IO08    0x1b0b0
+               >;
+       };
+};
diff --git a/arch/arm/boot/dts/imx6ul-opos6uldev.dts b/arch/arm/boot/dts/imx6ul-opos6uldev.dts
new file mode 100644 (file)
index 0000000..0e59ee5
--- /dev/null
@@ -0,0 +1,412 @@
+/*
+ * Copyright 2017 Armadeus Systems <support@armadeus.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.
+ *
+ *     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.
+ */
+
+/dts-v1/;
+#include "imx6ul-opos6ul.dtsi"
+
+/ {
+       model = "Armadeus Systems OPOS6UL SoM on OPOS6ULDev board";
+       compatible = "armadeus,opos6uldev", "armadeus,opos6ul", "fsl,imx6ul";
+
+       chosen {
+               stdout-path = &uart1;
+       };
+
+       backlight {
+               compatible = "pwm-backlight";
+               pwms = <&pwm3 0 191000>;
+               brightness-levels = <0 4 8 16 32 64 128 255>;
+               default-brightness-level = <7>;
+               power-supply = <&reg_5v>;
+               status = "okay";
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_gpio_keys>;
+
+               user-button {
+                       label = "User button";
+                       gpios = <&gpio2 11 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_MISC>;
+                       wakeup-source;
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               user-led {
+                       label = "User";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_led>;
+                       gpios = <&gpio3 4 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "heartbeat";
+               };
+       };
+
+       onewire {
+               compatible = "w1-gpio";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_w1>;
+               gpios = <&gpio5 1 GPIO_ACTIVE_HIGH>;
+       };
+
+       reg_5v: regulator-5v {
+               compatible = "regulator-fixed";
+               regulator-name = "5V";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+       };
+
+       reg_usbotg1_vbus: regulator-usbotg1vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usbotg1vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_usbotg1_vbus>;
+               gpio = <&gpio1 5 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       reg_usbotg2_vbus: regulator-usbotg2vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usbotg2vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_usbotg2_vbus>;
+               gpio = <&gpio5 9 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+};
+
+&adc1 {
+       vref-supply = <&reg_3v3>;
+       status = "okay";
+};
+
+&can1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_flexcan1>;
+       xceiver-supply = <&reg_5v>;
+       status = "okay";
+};
+
+&can2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_flexcan2>;
+       xceiver-supply = <&reg_5v>;
+       status = "okay";
+};
+
+&ecspi4 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_ecspi4>;
+       cs-gpios = <&gpio4 9 GPIO_ACTIVE_LOW>, <&gpio4 3 GPIO_ACTIVE_LOW>;
+       status = "okay";
+
+       spidev0: spi@0 {
+               compatible = "spidev";
+               reg = <0>;
+               spi-max-frequency = <5000000>;
+       };
+
+       spidev1: spi@1 {
+               compatible = "spidev";
+               reg = <1>;
+               spi-max-frequency = <5000000>;
+       };
+};
+
+&i2c1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c1>;
+       clock_frequency = <400000>;
+       status = "okay";
+};
+
+&i2c2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c2>;
+       clock_frequency = <400000>;
+       status = "okay";
+};
+
+&lcdif {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_lcdif>;
+       display = <&display0>;
+       lcd-supply = <&reg_3v3>;
+       status = "okay";
+
+       display0: display0 {
+               bits-per-pixel = <32>;
+               bus-width = <18>;
+
+               display-timings {
+                       timing0: timing0 {
+                               clock-frequency = <33000033>;
+                               hactive = <800>;
+                               vactive = <480>;
+                               hback-porch = <96>;
+                               hfront-porch = <96>;
+                               vback-porch = <20>;
+                               vfront-porch = <21>;
+                               hsync-len = <64>;
+                               vsync-len = <4>;
+                               de-active = <1>;
+                               pixelclk-active = <0>;
+                       };
+               };
+       };
+};
+
+&pwm3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_pwm3>;
+       status = "okay";
+};
+
+&snvs_pwrkey {
+       status = "disabled";
+};
+
+&tsc {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_tsc>;
+       xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
+       measure-delay-time = <0xffff>;
+       pre-charge-time = <0xffff>;
+       status = "okay";
+};
+
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart1>;
+       status = "okay";
+};
+
+&uart2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart2>;
+       status = "okay";
+};
+
+&usbotg1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_usbotg1_id>;
+       vbus-supply = <&reg_usbotg1_vbus>;
+       dr_mode = "otg";
+       disable-over-current;
+       status = "okay";
+};
+
+&usbotg2 {
+       vbus-supply = <&reg_usbotg2_vbus>;
+       dr_mode = "host";
+       disable-over-current;
+       status = "okay";
+};
+
+&iomuxc {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_gpios>;
+
+       pinctrl_ecspi4: ecspi4grp {
+               fsl,pins = <
+                       MX6UL_PAD_NAND_DATA04__ECSPI4_SCLK      0x1b0b0
+                       MX6UL_PAD_NAND_DATA05__ECSPI4_MOSI      0x1b0b0
+                       MX6UL_PAD_NAND_DATA06__ECSPI4_MISO      0x1b0b0
+                       MX6UL_PAD_NAND_DATA01__GPIO4_IO03       0x1b0b0
+                       MX6UL_PAD_NAND_DATA07__GPIO4_IO09       0x1b0b0
+               >;
+       };
+
+       pinctrl_flexcan1: flexcan1grp {
+               fsl,pins = <
+                       MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX      0x0b0b0
+                       MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX      0x0b0b0
+               >;
+       };
+
+       pinctrl_flexcan2: flexcan2grp {
+               fsl,pins = <
+                       MX6UL_PAD_UART2_CTS_B__FLEXCAN2_TX      0x0b0b0
+                       MX6UL_PAD_UART2_RTS_B__FLEXCAN2_RX      0x0b0b0
+               >;
+       };
+
+       pinctrl_gpios: gpiosgrp {
+               fsl,pins = <
+                       MX6UL_PAD_GPIO1_IO09__GPIO1_IO09        0x0b0b0
+                       MX6UL_PAD_UART3_RX_DATA__GPIO1_IO25     0x0b0b0
+                       MX6UL_PAD_UART3_TX_DATA__GPIO1_IO24     0x0b0b0
+                       MX6UL_PAD_NAND_RE_B__GPIO4_IO00         0x0b0b0
+                       MX6UL_PAD_GPIO1_IO08__GPIO1_IO08        0x0b0b0
+                       MX6UL_PAD_UART1_CTS_B__GPIO1_IO18       0x0b0b0
+                       MX6UL_PAD_UART1_RTS_B__GPIO1_IO19       0x0b0b0
+                       MX6UL_PAD_NAND_WE_B__GPIO4_IO01         0x0b0b0
+                       MX6UL_PAD_SNVS_TAMPER0__GPIO5_IO00      0x0b0b0
+                       MX6UL_PAD_SNVS_TAMPER2__GPIO5_IO02      0x0b0b0
+                       MX6UL_PAD_SNVS_TAMPER3__GPIO5_IO03      0x0b0b0
+                       MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04      0x0b0b0
+                       MX6UL_PAD_SNVS_TAMPER5__GPIO5_IO05      0x0b0b0
+                       MX6UL_PAD_SNVS_TAMPER6__GPIO5_IO06      0x0b0b0
+                       MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07      0x0b0b0
+                       MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08      0x0b0b0
+               >;
+       };
+
+       pinctrl_gpio_keys: gpiokeysgrp {
+               fsl,pins = <
+                       MX6UL_PAD_ENET2_TX_DATA0__GPIO2_IO11    0x0b0b0
+               >;
+       };
+
+       pinctrl_i2c1: i2c1grp {
+               fsl,pins = <
+                       MX6UL_PAD_UART4_RX_DATA__I2C1_SDA       0x4001b8b0
+                       MX6UL_PAD_UART4_TX_DATA__I2C1_SCL       0x4001b8b0
+               >;
+       };
+
+       pinctrl_i2c2: i2c2grp {
+               fsl,pins = <
+                       MX6UL_PAD_UART5_RX_DATA__I2C2_SDA       0x4001b8b0
+                       MX6UL_PAD_UART5_TX_DATA__I2C2_SCL       0x4001b8b0
+               >;
+       };
+
+       pinctrl_lcdif: lcdifgrp {
+               fsl,pins = <
+                       MX6UL_PAD_LCD_CLK__LCDIF_CLK        0x100b1
+                       MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE  0x100b1
+                       MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC    0x100b1
+                       MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC    0x100b1
+                       MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x100b1
+                       MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x100b1
+                       MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x100b1
+                       MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x100b1
+                       MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x100b1
+                       MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x100b1
+                       MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x100b1
+                       MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x100b1
+                       MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x100b1
+                       MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x100b1
+                       MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x100b1
+                       MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x100b1
+                       MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x100b1
+                       MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x100b1
+                       MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x100b1
+                       MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x100b1
+                       MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x100b1
+                       MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x100b1
+               >;
+       };
+
+       pinctrl_led: ledgrp {
+               fsl,pins = <
+                       MX6UL_PAD_LCD_RESET__GPIO3_IO04         0x0b0b0
+               >;
+       };
+
+       pinctrl_pwm3: pwm3grp {
+               fsl,pins = <
+                       MX6UL_PAD_NAND_ALE__PWM3_OUT            0x1b0b0
+               >;
+       };
+
+       pinctrl_tsc: tscgrp {
+               fsl,pins = <
+                       MX6UL_PAD_GPIO1_IO01__GPIO1_IO01       0xb0
+                       MX6UL_PAD_GPIO1_IO02__GPIO1_IO02       0xb0
+                       MX6UL_PAD_GPIO1_IO03__GPIO1_IO03       0xb0
+                       MX6UL_PAD_GPIO1_IO04__GPIO1_IO04       0xb0
+               >;
+       };
+
+       pinctrl_uart1: uart1grp {
+               fsl,pins = <
+                       MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX   0x1b0b1
+                       MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX   0x1b0b1
+               >;
+       };
+
+       pinctrl_uart2: uart2grp {
+               fsl,pins = <
+                       MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX   0x1b0b1
+                       MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX   0x1b0b1
+               >;
+       };
+
+       pinctrl_usbotg1_id: usbotg1idgrp {
+               fsl,pins = <
+                       MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID    0x1b0b0
+               >;
+       };
+
+       pinctrl_usbotg1_vbus: usbotg1vbusgrp {
+               fsl,pins = <
+                       MX6UL_PAD_GPIO1_IO05__GPIO1_IO05        0x1b0b0
+               >;
+       };
+
+       pinctrl_usbotg2_vbus: usbotg2vbusgrp {
+               fsl,pins = <
+                       MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09      0x1b0b0
+               >;
+       };
+
+       pinctrl_w1: w1grp {
+               fsl,pins = <
+                       MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01      0x0b0b0
+               >;
+       };
+};
index 827d9e8fc74e778d987c9ca28322d06feddf47ad..7d7254b12a7563788ff85812437d8f5dab79336b 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 530e9ca13a7416ea7faaa2c87576b3ac6b4da31d..c784a0b75ca0e83c4e9e2a610f3617a94adbe08a 100644 (file)
@@ -285,7 +285,6 @@ &can2 {
 &ecspi2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi2>;
-       fsl,spi-num-chipselects = <2>;
        cs-gpios = <
                &gpio1 29 GPIO_ACTIVE_HIGH
                &gpio1 10 GPIO_ACTIVE_HIGH
index 39845a7e046303e6448e506d7199a49b7530de74..42cc7c4b6defedc5c58ab1b88bb78fb0eeedf9e5 100644 (file)
@@ -91,11 +91,11 @@ cpu0: cpu@0 {
        };
 
        intc: interrupt-controller@00a01000 {
-               compatible = "arm,cortex-a7-gic";
+               compatible = "arm,gic-400", "arm,cortex-a7-gic";
                #interrupt-cells = <3>;
                interrupt-controller;
                reg = <0x00a01000 0x1000>,
-                     <0x00a02000 0x1000>,
+                     <0x00a02000 0x2000>,
                      <0x00a04000 0x2000>,
                      <0x00a06000 0x2000>;
        };
@@ -534,7 +534,6 @@ reg_3p0: regulator-3p0 {
                                        anatop-min-bit-val = <0>;
                                        anatop-min-voltage = <2625000>;
                                        anatop-max-voltage = <3400000>;
-                                       anatop-enable-bit = <0>;
                                };
 
                                reg_arm: regulator-vddcore {
@@ -851,6 +850,12 @@ mmdc: mmdc@021b0000 {
                                reg = <0x021b0000 0x4000>;
                        };
 
+                       ocotp: ocotp-ctrl@021bc000 {
+                               compatible = "fsl,imx6ul-ocotp", "syscon";
+                               reg = <0x021bc000 0x4000>;
+                               clocks = <&clks IMX6UL_CLK_OCOTP>;
+                       };
+
                        lcdif: lcdif@021c8000 {
                                compatible = "fsl,imx6ul-lcdif", "fsl,imx28-lcdif";
                                reg = <0x021c8000 0x4000>;
index db5bc076e1cc1073b7fa3e25ad8f08b0d4e4bf18..4741871434dd6e2203a8a37f6c07f2d68f31a47c 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index dee8ab8135e1e972ce2069225d33c018e27d3f56..0c182917b863cf454bb26000f799241a3df11dcb 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index a9cc65725f19d9a26631c85bbece4f7543dcd024..a171545478be6ba6eb855016e78a66a0a61d6875 100644 (file)
@@ -596,29 +596,29 @@ &iomuxc_lpsr {
 
        pinctrl_gpio_lpsr: gpio1-grp {
                fsl,pins = <
-                       MX7D_PAD_GPIO1_IO01__GPIO1_IO1  0x59
-                       MX7D_PAD_GPIO1_IO02__GPIO1_IO2  0x59
-                       MX7D_PAD_GPIO1_IO03__GPIO1_IO3  0x59
+                       MX7D_PAD_LPSR_GPIO1_IO01__GPIO1_IO1     0x59
+                       MX7D_PAD_LPSR_GPIO1_IO02__GPIO1_IO2     0x59
+                       MX7D_PAD_LPSR_GPIO1_IO03__GPIO1_IO3     0x59
                >;
        };
 
        pinctrl_i2c1: i2c1-grp {
                fsl,pins = <
-                       MX7D_PAD_GPIO1_IO05__I2C1_SDA   0x4000007f
-                       MX7D_PAD_GPIO1_IO04__I2C1_SCL   0x4000007f
+                       MX7D_PAD_LPSR_GPIO1_IO05__I2C1_SDA      0x4000007f
+                       MX7D_PAD_LPSR_GPIO1_IO04__I2C1_SCL      0x4000007f
                >;
        };
 
        pinctrl_cd_usdhc1: usdhc1-cd-grp {
                fsl,pins = <
-                       MX7D_PAD_GPIO1_IO00__GPIO1_IO0  0x59 /* CD */
+                       MX7D_PAD_LPSR_GPIO1_IO00__GPIO1_IO0     0x59 /* CD */
                >;
        };
 
        pinctrl_uart1_ctrl2: uart1-ctrl2-grp {
                fsl,pins = <
-                       MX7D_PAD_GPIO1_IO07__GPIO1_IO7  0x14 /* DSR */
-                       MX7D_PAD_GPIO1_IO06__GPIO1_IO6  0x14 /* RI */
+                       MX7D_PAD_LPSR_GPIO1_IO07__GPIO1_IO7     0x14 /* DSR */
+                       MX7D_PAD_LPSR_GPIO1_IO06__GPIO1_IO6     0x14 /* RI */
                >;
        };
 };
index 58b09bf1ba2d00be154eb5be3b76dbb6dbdaeb2c..ae45af1ad062acd7df10c0f2a772b81ccae91c76 100644 (file)
@@ -261,12 +261,6 @@ MX7D_PAD_UART1_RX_DATA__UART1_DCE_RX       0x79
                >;
        };
 
-       pinctrl_usbotg1: usbotg1grp {
-               fsl,pins = <
-                       MX7D_PAD_GPIO1_IO05__GPIO1_IO5          0x14 /* OTG PWREN */
-               >;
-       };
-
        pinctrl_usdhc3: usdhc3grp {
                fsl,pins = <
                        MX7D_PAD_SD3_CMD__SD3_CMD               0x59
@@ -283,3 +277,11 @@ MX7D_PAD_SD3_STROBE__SD3_STROBE            0x19
                >;
        };
 };
+
+&iomuxc_lpsr {
+       pinctrl_usbotg1: usbotg1grp {
+               fsl,pins = <
+                       MX7D_PAD_LPSR_GPIO1_IO05__GPIO1_IO5     0x14 /* OTG PWREN */
+               >;
+       };
+};
\ No newline at end of file
index ce08f180f213e14f6ee5ed0a543c376a606ab865..5d98e2b5d54b934e2e75c7081333053f607b1580 100644 (file)
@@ -712,33 +712,33 @@ &iomuxc_lpsr {
 
        pinctrl_hog_2: hoggrp-2 {
                fsl,pins = <
-                       MX7D_PAD_GPIO1_IO02__GPIO1_IO2          0x7d
-                       MX7D_PAD_GPIO1_IO03__CCM_CLKO2          0x7d
+                       MX7D_PAD_LPSR_GPIO1_IO02__GPIO1_IO2     0x7d
+                       MX7D_PAD_LPSR_GPIO1_IO03__CCM_CLKO2     0x7d
                >;
        };
 
        pinctrl_backlight_j9: backlightj9grp {
                fsl,pins = <
-                       MX7D_PAD_GPIO1_IO07__GPIO1_IO7          0x7d
+                       MX7D_PAD_LPSR_GPIO1_IO07__GPIO1_IO7     0x7d
                >;
        };
 
        pinctrl_pwm1: pwm1grp {
                fsl,pins = <
-                       MX7D_PAD_GPIO1_IO01__PWM1_OUT           0x7d
+                       MX7D_PAD_LPSR_GPIO1_IO01__PWM1_OUT      0x7d
                >;
        };
 
        pinctrl_usbotg1: usbotg1grp {
                fsl,pins = <
-                       MX7D_PAD_GPIO1_IO04__USB_OTG1_OC        0x7d
-                       MX7D_PAD_GPIO1_IO05__GPIO1_IO5          0x14
+                       MX7D_PAD_LPSR_GPIO1_IO04__USB_OTG1_OC   0x7d
+                       MX7D_PAD_LPSR_GPIO1_IO05__GPIO1_IO5     0x14
                >;
        };
 
        pinctrl_wdog1: wdog1grp {
                fsl,pins = <
-                       MX7D_PAD_GPIO1_IO00__WDOD1_WDOG_B       0x75
+                       MX7D_PAD_LPSR_GPIO1_IO00__WDOD1_WDOG_B  0x75
                >;
        };
 };
index 7bc3c00e56c63fd8dc6fe176c98145e2ef2adf01..f6f7e78f8820e15d40913d244e20ba5eae458331 100644 (file)
  * <mux_reg conf_reg input_reg mux_mode input_val>
  */
 
-#define MX7D_PAD_GPIO1_IO00__GPIO1_IO0                            0x0000 0x0030 0x0000 0x0 0x0
-#define MX7D_PAD_GPIO1_IO00__PWM4_OUT                             0x0000 0x0030 0x0000 0x1 0x0
-#define MX7D_PAD_GPIO1_IO00__WDOD1_WDOG_ANY                       0x0000 0x0030 0x0000 0x2 0x0
-#define MX7D_PAD_GPIO1_IO00__WDOD1_WDOG_B                         0x0000 0x0030 0x0000 0x3 0x0
-#define MX7D_PAD_GPIO1_IO00__WDOD1_WDOG__RST_B_DEB                0x0000 0x0030 0x0000 0x4 0x0
-#define MX7D_PAD_GPIO1_IO01__GPIO1_IO1                            0x0004 0x0034 0x0000 0x0 0x0
-#define MX7D_PAD_GPIO1_IO01__PWM1_OUT                             0x0004 0x0034 0x0000 0x1 0x0
-#define MX7D_PAD_GPIO1_IO01__CCM_ENET_REF_CLK3                    0x0004 0x0034 0x0000 0x2 0x0
-#define MX7D_PAD_GPIO1_IO01__SAI1_MCLK                            0x0004 0x0034 0x0000 0x3 0x0
-#define MX7D_PAD_GPIO1_IO01__ANATOP_24M_OUT                       0x0004 0x0034 0x0000 0x4 0x0
-#define MX7D_PAD_GPIO1_IO01__OBSERVE0_OUT                         0x0004 0x0034 0x0000 0x6 0x0
-#define MX7D_PAD_GPIO1_IO02__GPIO1_IO2                            0x0008 0x0038 0x0000 0x0 0x0
-#define MX7D_PAD_GPIO1_IO02__PWM2_OUT                             0x0008 0x0038 0x0000 0x1 0x0
-#define MX7D_PAD_GPIO1_IO02__CCM_ENET_REF_CLK1                    0x0008 0x0038 0x0564 0x2 0x3
-#define MX7D_PAD_GPIO1_IO02__SAI2_MCLK                            0x0008 0x0038 0x0000 0x3 0x0
-#define MX7D_PAD_GPIO1_IO02__CCM_CLKO1                            0x0008 0x0038 0x0000 0x5 0x0
-#define MX7D_PAD_GPIO1_IO02__OBSERVE1_OUT                         0x0008 0x0038 0x0000 0x6 0x0
-#define MX7D_PAD_GPIO1_IO02__USB_OTG1_ID                          0x0008 0x0038 0x0734 0x7 0x3
-#define MX7D_PAD_GPIO1_IO03__GPIO1_IO3                            0x000C 0x003C 0x0000 0x0 0x0
-#define MX7D_PAD_GPIO1_IO03__PWM3_OUT                             0x000C 0x003C 0x0000 0x1 0x0
-#define MX7D_PAD_GPIO1_IO03__CCM_ENET_REF_CLK2                    0x000C 0x003C 0x0570 0x2 0x3
-#define MX7D_PAD_GPIO1_IO03__SAI3_MCLK                            0x000C 0x003C 0x0000 0x3 0x0
-#define MX7D_PAD_GPIO1_IO03__CCM_CLKO2                            0x000C 0x003C 0x0000 0x5 0x0
-#define MX7D_PAD_GPIO1_IO03__OBSERVE2_OUT                         0x000C 0x003C 0x0000 0x6 0x0
-#define MX7D_PAD_GPIO1_IO03__USB_OTG2_ID                          0x000C 0x003C 0x0730 0x7 0x3
-#define MX7D_PAD_GPIO1_IO04__GPIO1_IO4                            0x0010 0x0040 0x0000 0x0 0x0
-#define MX7D_PAD_GPIO1_IO04__USB_OTG1_OC                          0x0010 0x0040 0x072C 0x1 0x1
-#define MX7D_PAD_GPIO1_IO04__FLEXTIMER1_CH4                       0x0010 0x0040 0x0594 0x2 0x1
-#define MX7D_PAD_GPIO1_IO04__UART5_DCE_CTS                        0x0010 0x0040 0x0000 0x3 0x0
-#define MX7D_PAD_GPIO1_IO04__UART5_DTE_RTS                        0x0010 0x0040 0x0710 0x3 0x4
-#define MX7D_PAD_GPIO1_IO04__I2C1_SCL                             0x0010 0x0040 0x05D4 0x4 0x2
-#define MX7D_PAD_GPIO1_IO04__OBSERVE3_OUT                         0x0010 0x0040 0x0000 0x6 0x0
-#define MX7D_PAD_GPIO1_IO05__GPIO1_IO5                            0x0014 0x0044 0x0000 0x0 0x0
-#define MX7D_PAD_GPIO1_IO05__USB_OTG1_PWR                         0x0014 0x0044 0x0000 0x1 0x0
-#define MX7D_PAD_GPIO1_IO05__FLEXTIMER1_CH5                       0x0014 0x0044 0x0598 0x2 0x1
-#define MX7D_PAD_GPIO1_IO05__UART5_DCE_RTS                        0x0014 0x0044 0x0710 0x3 0x5
-#define MX7D_PAD_GPIO1_IO05__UART5_DTE_CTS                        0x0014 0x0044 0x0000 0x3 0x0
-#define MX7D_PAD_GPIO1_IO05__I2C1_SDA                             0x0014 0x0044 0x05D8 0x4 0x2
-#define MX7D_PAD_GPIO1_IO05__OBSERVE4_OUT                         0x0014 0x0044 0x0000 0x6 0x0
-#define MX7D_PAD_GPIO1_IO06__GPIO1_IO6                            0x0018 0x0048 0x0000 0x0 0x0
-#define MX7D_PAD_GPIO1_IO06__USB_OTG2_OC                          0x0018 0x0048 0x0728 0x1 0x1
-#define MX7D_PAD_GPIO1_IO06__FLEXTIMER1_CH6                       0x0018 0x0048 0x059C 0x2 0x1
-#define MX7D_PAD_GPIO1_IO06__UART5_DCE_RX                         0x0018 0x0048 0x0714 0x3 0x4
-#define MX7D_PAD_GPIO1_IO06__UART5_DTE_TX                         0x0018 0x0048 0x0000 0x3 0x0
-#define MX7D_PAD_GPIO1_IO06__I2C2_SCL                             0x0018 0x0048 0x05DC 0x4 0x2
-#define MX7D_PAD_GPIO1_IO06__CCM_WAIT                             0x0018 0x0048 0x0000 0x5 0x0
-#define MX7D_PAD_GPIO1_IO06__KPP_ROW4                             0x0018 0x0048 0x0624 0x6 0x1
-#define MX7D_PAD_GPIO1_IO07__GPIO1_IO7                            0x001C 0x004C 0x0000 0x0 0x0
-#define MX7D_PAD_GPIO1_IO07__USB_OTG2_PWR                         0x001C 0x004C 0x0000 0x1 0x0
-#define MX7D_PAD_GPIO1_IO07__FLEXTIMER1_CH7                       0x001C 0x004C 0x05A0 0x2 0x1
-#define MX7D_PAD_GPIO1_IO07__UART5_DCE_TX                         0x001C 0x004C 0x0000 0x3 0x0
-#define MX7D_PAD_GPIO1_IO07__UART5_DTE_RX                         0x001C 0x004C 0x0714 0x3 0x5
-#define MX7D_PAD_GPIO1_IO07__I2C2_SDA                             0x001C 0x004C 0x05E0 0x4 0x2
-#define MX7D_PAD_GPIO1_IO07__CCM_STOP                             0x001C 0x004C 0x0000 0x5 0x0
-#define MX7D_PAD_GPIO1_IO07__KPP_COL4                             0x001C 0x004C 0x0604 0x6 0x1
+#define MX7D_PAD_LPSR_GPIO1_IO00__GPIO1_IO0                       0x0000 0x0030 0x0000 0x0 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO00__PWM4_OUT                        0x0000 0x0030 0x0000 0x1 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO00__WDOD1_WDOG_ANY                  0x0000 0x0030 0x0000 0x2 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO00__WDOD1_WDOG_B                    0x0000 0x0030 0x0000 0x3 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO00__WDOD1_WDOG__RST_B_DEB           0x0000 0x0030 0x0000 0x4 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO01__GPIO1_IO1                       0x0004 0x0034 0x0000 0x0 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO01__PWM1_OUT                        0x0004 0x0034 0x0000 0x1 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO01__CCM_ENET_REF_CLK3               0x0004 0x0034 0x0000 0x2 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO01__SAI1_MCLK                       0x0004 0x0034 0x0000 0x3 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO01__ANATOP_24M_OUT                  0x0004 0x0034 0x0000 0x4 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO01__OBSERVE0_OUT                    0x0004 0x0034 0x0000 0x6 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO02__GPIO1_IO2                       0x0008 0x0038 0x0000 0x0 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO02__PWM2_OUT                        0x0008 0x0038 0x0000 0x1 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO02__CCM_ENET_REF_CLK1               0x0008 0x0038 0x0564 0x2 0x3
+#define MX7D_PAD_LPSR_GPIO1_IO02__SAI2_MCLK                       0x0008 0x0038 0x0000 0x3 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO02__CCM_CLKO1                       0x0008 0x0038 0x0000 0x5 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO02__OBSERVE1_OUT                    0x0008 0x0038 0x0000 0x6 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO02__USB_OTG1_ID                     0x0008 0x0038 0x0734 0x7 0x3
+#define MX7D_PAD_LPSR_GPIO1_IO03__GPIO1_IO3                       0x000C 0x003C 0x0000 0x0 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO03__PWM3_OUT                        0x000C 0x003C 0x0000 0x1 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO03__CCM_ENET_REF_CLK2               0x000C 0x003C 0x0570 0x2 0x3
+#define MX7D_PAD_LPSR_GPIO1_IO03__SAI3_MCLK                       0x000C 0x003C 0x0000 0x3 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO03__CCM_CLKO2                       0x000C 0x003C 0x0000 0x5 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO03__OBSERVE2_OUT                    0x000C 0x003C 0x0000 0x6 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO03__USB_OTG2_ID                     0x000C 0x003C 0x0730 0x7 0x3
+#define MX7D_PAD_LPSR_GPIO1_IO04__GPIO1_IO4                       0x0010 0x0040 0x0000 0x0 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO04__USB_OTG1_OC                     0x0010 0x0040 0x072C 0x1 0x1
+#define MX7D_PAD_LPSR_GPIO1_IO04__FLEXTIMER1_CH4                  0x0010 0x0040 0x0594 0x2 0x1
+#define MX7D_PAD_LPSR_GPIO1_IO04__UART5_DCE_CTS                   0x0010 0x0040 0x0000 0x3 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO04__UART5_DTE_RTS                   0x0010 0x0040 0x0710 0x3 0x4
+#define MX7D_PAD_LPSR_GPIO1_IO04__I2C1_SCL                        0x0010 0x0040 0x05D4 0x4 0x2
+#define MX7D_PAD_LPSR_GPIO1_IO04__OBSERVE3_OUT                    0x0010 0x0040 0x0000 0x6 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO05__GPIO1_IO5                       0x0014 0x0044 0x0000 0x0 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO05__USB_OTG1_PWR                    0x0014 0x0044 0x0000 0x1 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO05__FLEXTIMER1_CH5                  0x0014 0x0044 0x0598 0x2 0x1
+#define MX7D_PAD_LPSR_GPIO1_IO05__UART5_DCE_RTS                   0x0014 0x0044 0x0710 0x3 0x5
+#define MX7D_PAD_LPSR_GPIO1_IO05__UART5_DTE_CTS                   0x0014 0x0044 0x0000 0x3 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO05__I2C1_SDA                        0x0014 0x0044 0x05D8 0x4 0x2
+#define MX7D_PAD_LPSR_GPIO1_IO05__OBSERVE4_OUT                    0x0014 0x0044 0x0000 0x6 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO06__GPIO1_IO6                       0x0018 0x0048 0x0000 0x0 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO06__USB_OTG2_OC                     0x0018 0x0048 0x0728 0x1 0x1
+#define MX7D_PAD_LPSR_GPIO1_IO06__FLEXTIMER1_CH6                  0x0018 0x0048 0x059C 0x2 0x1
+#define MX7D_PAD_LPSR_GPIO1_IO06__UART5_DCE_RX                    0x0018 0x0048 0x0714 0x3 0x4
+#define MX7D_PAD_LPSR_GPIO1_IO06__UART5_DTE_TX                    0x0018 0x0048 0x0000 0x3 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO06__I2C2_SCL                        0x0018 0x0048 0x05DC 0x4 0x2
+#define MX7D_PAD_LPSR_GPIO1_IO06__CCM_WAIT                        0x0018 0x0048 0x0000 0x5 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO06__KPP_ROW4                        0x0018 0x0048 0x0624 0x6 0x1
+#define MX7D_PAD_LPSR_GPIO1_IO07__GPIO1_IO7                       0x001C 0x004C 0x0000 0x0 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO07__USB_OTG2_PWR                    0x001C 0x004C 0x0000 0x1 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO07__FLEXTIMER1_CH7                  0x001C 0x004C 0x05A0 0x2 0x1
+#define MX7D_PAD_LPSR_GPIO1_IO07__UART5_DCE_TX                    0x001C 0x004C 0x0000 0x3 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO07__UART5_DTE_RX                    0x001C 0x004C 0x0714 0x3 0x5
+#define MX7D_PAD_LPSR_GPIO1_IO07__I2C2_SDA                        0x001C 0x004C 0x05E0 0x4 0x2
+#define MX7D_PAD_LPSR_GPIO1_IO07__CCM_STOP                        0x001C 0x004C 0x0000 0x5 0x0
+#define MX7D_PAD_LPSR_GPIO1_IO07__KPP_COL4                        0x001C 0x004C 0x0604 0x6 0x1
 #define MX7D_PAD_GPIO1_IO08__GPIO1_IO8                            0x0014 0x026C 0x0000 0x0 0x0
 #define MX7D_PAD_GPIO1_IO08__SD1_VSELECT                          0x0014 0x026C 0x0000 0x1 0x0
 #define MX7D_PAD_GPIO1_IO08__WDOG1_WDOG_B                         0x0014 0x026C 0x0000 0x2 0x0
index 2f33c463cbce4f1eff456ea75666b22efb3ae5cc..5be01a1bf84020e0c999e42f98b7cf32aa0214d4 100644 (file)
@@ -111,7 +111,6 @@ &cpu0 {
 };
 
 &ecspi3 {
-       fsl,spi-num-chipselects = <1>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ecspi3>;
        cs-gpios = <&gpio5 9 GPIO_ACTIVE_HIGH>;
@@ -502,12 +501,6 @@ MX7D_PAD_LCD_RESET__LCD_RESET              0x79
                        >;
                };
 
-               pinctrl_pwm1: pwm1grp {
-                       fsl,pins = <
-                               MX7D_PAD_GPIO1_IO01__PWM1_OUT           0x110b0
-                       >;
-               };
-
                pinctrl_tsc2046_pendown: tsc2046_pendown {
                        fsl,pins = <
                                MX7D_PAD_EPDC_BDR1__GPIO2_IO29          0x59
@@ -635,11 +628,19 @@ MX7D_PAD_SD3_DATA7__SD3_DATA7             0x5b
                                MX7D_PAD_SD3_STROBE__SD3_STROBE         0x1b
                        >;
                };
+       };
+};
 
-               pinctrl_wdog: wdoggrp {
-                       fsl,pins = <
-                               MX7D_PAD_GPIO1_IO00__WDOD1_WDOG_B       0x74
-                       >;
-               };
+&iomuxc_lpsr {
+       pinctrl_wdog: wdoggrp {
+               fsl,pins = <
+                       MX7D_PAD_LPSR_GPIO1_IO00__WDOD1_WDOG_B          0x74
+               >;
+       };
+
+       pinctrl_pwm1: pwm1grp {
+               fsl,pins = <
+                       MX7D_PAD_LPSR_GPIO1_IO01__PWM1_OUT              0x110b0
+               >;
        };
 };
index 0345267f3390e59eaa675b4e601f3aac52a98304..d5237fd0fa657f90c2756ba3b5fef224a11170d6 100644 (file)
@@ -437,10 +437,12 @@ MX7D_PAD_SD3_DATA7__SD3_DATA7             0x5b
                        MX7D_PAD_SD3_RESET_B__SD3_RESET_B       0x1b
                >;
        };
+};
 
+&iomuxc_lpsr {
        pinctrl_wdog: wdoggrp {
                fsl,pins = <
-                       MX7D_PAD_GPIO1_IO00__WDOD1_WDOG_B       0x74
+                       MX7D_PAD_LPSR_GPIO1_IO00__WDOD1_WDOG_B  0x74
                >;
        };
 };
index 8ff2cbdd8f0df26e59805a12dcb0ee871cc3ca73..8db1eb9d8bbd67eb10ae4b8eee2ae07abf3f2896 100644 (file)
@@ -509,7 +509,6 @@ reg_1p0d: regulator-vdd1p0d {
                                        anatop-min-bit-val = <8>;
                                        anatop-min-voltage = <800000>;
                                        anatop-max-voltage = <1200000>;
-                                       anatop-enable-bit = <31>;
                                };
                        };
 
index ac990f6797253e074592c0060b60e4fb6f743226..ba828cb5958764e1479130ec38aca8ad83d4664a 100644 (file)
@@ -138,7 +138,8 @@ netcp: netcp@24000000 {
        /* NetCP address range */
        ranges = <0 0x24000000 0x1000000>;
 
-       clocks = <&papllclk>, <&clkcpgmac>, <&chipclk12>;
+       clocks = <&clkpa>, <&clkcpgmac>, <&chipclk12>;
+       clock-names = "pa_clk", "ethss_clk", "cpts";
        dma-coherent;
 
        ti,navigator-dmas = <&dma_gbe 0>,
index 497c417db5b641ecba3760dc23977f1d42251d16..0dd4cdd6d40c8afe9f15f355b8ec493844154d0f 100644 (file)
@@ -8,6 +8,8 @@
  * published by the Free Software Foundation.
  */
 
+#include <dt-bindings/reset/ti-syscon.h>
+
 / {
        compatible = "ti,k2e", "ti,keystone";
        model = "Texas Instruments Keystone 2 Edison SoC";
@@ -82,6 +84,29 @@ usb1: dwc3@25010000 {
                        };
                };
 
+               msm_ram: msmram@0c000000 {
+                       compatible = "mmio-sram";
+                       reg = <0x0c000000 0x200000>;
+                       ranges = <0x0 0x0c000000 0x200000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       sram-bm@1f0000 {
+                               reg = <0x001f0000 0x8000>;
+                       };
+               };
+
+               psc: power-sleep-controller@02350000 {
+                       pscrst: reset-controller {
+                               compatible = "ti,k2e-pscrst", "ti,syscon-reset";
+                               #reset-cells = <1>;
+
+                               ti,reset-bits = <
+                                       0xa3c 8 0xa3c 8 0x83c 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 0: dsp0 */
+                               >;
+                       };
+               };
+
                dspgpio0: keystone_dsp_gpio@02620240 {
                        compatible = "ti,keystone-dsp-gpio";
                        gpio-controller;
index 63c7cf0c6b6dc36d762cc0ef3c1617f001b35a9b..f59567fe7d91d03fe6147e362b14ba347edcf16d 100644 (file)
@@ -40,12 +40,12 @@ cpu@0 {
        };
 
        gic: interrupt-controller@02561000 {
-               compatible = "arm,cortex-a15-gic";
+               compatible = "arm,gic-400", "arm,cortex-a15-gic";
                #interrupt-cells = <3>;
                interrupt-controller;
                reg = <0x0 0x02561000 0x0 0x1000>,
                      <0x0 0x02562000 0x0 0x2000>,
-                     <0x0 0x02564000 0x0 0x1000>,
+                     <0x0 0x02564000 0x0 0x2000>,
                      <0x0 0x02566000 0x0 0x2000>;
                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) |
                                IRQ_TYPE_LEVEL_HIGH)>;
@@ -77,6 +77,18 @@ soc {
                ranges = <0x0 0x0 0x0 0xc0000000>;
                dma-ranges = <0x80000000 0x8 0x00000000 0x80000000>;
 
+               msm_ram: msmram@0c000000 {
+                       compatible = "mmio-sram";
+                       reg = <0x0c000000 0x100000>;
+                       ranges = <0x0 0x0c000000 0x100000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       sram-bm@f7000 {
+                               reg = <0x000f7000 0x8000>;
+                       };
+               };
+
                k2g_pinctrl: pinmux@02621000 {
                        compatible = "pinctrl-single";
                        reg = <0x02621000 0x410>;
@@ -90,7 +102,7 @@ devctrl: device-state-control@02620000 {
                };
 
                uart0: serial@02530c00 {
-                       compatible = "ns16550a";
+                       compatible = "ti,da830-uart", "ns16550a";
                        current-speed = <115200>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
index f86d6ddb832b59f41a088ae2d063ebbb73f2142b..a5ac845464bf2fd843aa3ac36adf955b0473cf3b 100644 (file)
@@ -155,7 +155,8 @@ netcp: netcp@2000000 {
        /* NetCP address range */
        ranges  = <0 0x2000000 0x100000>;
 
-       clocks = <&papllclk>, <&clkcpgmac>, <&chipclk12>;
+       clocks = <&clkpa>, <&clkcpgmac>, <&chipclk12>;
+       clock-names = "pa_clk", "ethss_clk", "cpts";
        dma-coherent;
 
        ti,navigator-dmas = <&dma_gbe 22>,
index 8f67fa8df93646858a34266854bfdcce3e61c62c..69d449430511a45b2d2d242771b1ac9b7402792a 100644 (file)
@@ -8,6 +8,8 @@
  * published by the Free Software Foundation.
  */
 
+#include <dt-bindings/reset/ti-syscon.h>
+
 / {
        compatible = "ti,k2hk", "ti,keystone";
        model = "Texas Instruments Keystone 2 Kepler/Hawking SoC";
@@ -46,6 +48,36 @@ cpu@3 {
        soc {
                /include/ "keystone-k2hk-clocks.dtsi"
 
+               msm_ram: msmram@0c000000 {
+                       compatible = "mmio-sram";
+                       reg = <0x0c000000 0x600000>;
+                       ranges = <0x0 0x0c000000 0x600000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       sram-bm@5f0000 {
+                               reg = <0x5f0000 0x8000>;
+                       };
+               };
+
+               psc: power-sleep-controller@02350000 {
+                       pscrst: reset-controller {
+                               compatible = "ti,k2hk-pscrst", "ti,syscon-reset";
+                               #reset-cells = <1>;
+
+                               ti,reset-bits = <
+                                       0xa3c 8 0xa3c 8 0x83c 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 0: dsp0 */
+                                       0xa40 8 0xa40 8 0x840 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 1: dsp1 */
+                                       0xa44 8 0xa44 8 0x844 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 2: dsp2 */
+                                       0xa48 8 0xa48 8 0x848 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 3: dsp3 */
+                                       0xa4c 8 0xa4c 8 0x84c 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 4: dsp4 */
+                                       0xa50 8 0xa50 8 0x850 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 5: dsp5 */
+                                       0xa54 8 0xa54 8 0x854 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 6: dsp6 */
+                                       0xa58 8 0xa58 8 0x858 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 7: dsp7 */
+                               >;
+                       };
+               };
+
                dspgpio0: keystone_dsp_gpio@02620240 {
                        compatible = "ti,keystone-dsp-gpio";
                        gpio-controller;
index 5acbd0dcc2abd9d3ffd3ac09adeab6f2dc33dfad..b6f26824e83a96a88e34d33b99a0f4dace08e306 100644 (file)
@@ -137,7 +137,8 @@ netcp: netcp@26000000 {
        /* NetCP address range */
        ranges = <0 0x26000000 0x1000000>;
 
-       clocks = <&clkosr>, <&papllclk>, <&clkcpgmac>, <&chipclk12>;
+       clocks = <&clkpa>, <&clkcpgmac>, <&chipclk12>, <&clkosr>;
+       clock-names = "pa_clk", "ethss_clk", "cpts", "osr_clk";
        dma-coherent;
 
        ti,navigator-dmas = <&dma_gbe 0>,
index 0c5e74e79ba2d73163eea0f9eb3800a75499fa91..b58e7ebc091994645dd1adb35c7e7dc843fae7b0 100644 (file)
@@ -8,6 +8,8 @@
  * published by the Free Software Foundation.
  */
 
+#include <dt-bindings/reset/ti-syscon.h>
+
 / {
        compatible = "ti,k2l", "ti,keystone";
        model = "Texas Instruments Keystone 2 Lamarr SoC";
@@ -35,7 +37,7 @@ soc {
                /include/ "keystone-k2l-clocks.dtsi"
 
                uart2: serial@02348400 {
-                       compatible = "ns16550a";
+                       compatible = "ti,da830-uart", "ns16550a";
                        current-speed = <115200>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
@@ -45,7 +47,7 @@ uart2: serial@02348400 {
                };
 
                uart3:  serial@02348800 {
-                       compatible = "ns16550a";
+                       compatible = "ti,da830-uart", "ns16550a";
                        current-speed = <115200>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
@@ -204,6 +206,32 @@ gpio_emifa_pins: pinmux_gpio_emifa_pins {
                        };
                };
 
+               msm_ram: msmram@0c000000 {
+                       compatible = "mmio-sram";
+                       reg = <0x0c000000 0x200000>;
+                       ranges = <0x0 0x0c000000 0x200000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       sram-bm@1f8000 {
+                               reg = <0x001f8000 0x8000>;
+                       };
+               };
+
+               psc: power-sleep-controller@02350000 {
+                       pscrst: reset-controller {
+                               compatible = "ti,k2l-pscrst", "ti,syscon-reset";
+                               #reset-cells = <1>;
+
+                               ti,reset-bits = <
+                                       0xa3c 8 0xa3c 8 0x83c 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 0: dsp0 */
+                                       0xa40 8 0xa40 8 0x840 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 1: dsp1 */
+                                       0xa44 8 0xa44 8 0x844 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 2: dsp2 */
+                                       0xa48 8 0xa48 8 0x848 8 (ASSERT_CLEAR | DEASSERT_SET | STATUS_CLEAR) /* 3: dsp3 */
+                               >;
+                       };
+               };
+
                dspgpio0: keystone_dsp_gpio@02620240 {
                        compatible = "ti,keystone-dsp-gpio";
                        gpio-controller;
index 02708ba2d4f467e3f53f5dc94459da8e54b1c996..8dd74f48a6d3720119153745bdea67f629d19c29 100644 (file)
@@ -30,12 +30,12 @@ memory {
        };
 
        gic: interrupt-controller {
-               compatible = "arm,cortex-a15-gic";
+               compatible = "arm,gic-400", "arm,cortex-a15-gic";
                #interrupt-cells = <3>;
                interrupt-controller;
                reg = <0x0 0x02561000 0x0 0x1000>,
                      <0x0 0x02562000 0x0 0x2000>,
-                     <0x0 0x02564000 0x0 0x1000>,
+                     <0x0 0x02564000 0x0 0x2000>,
                      <0x0 0x02566000 0x0 0x2000>;
                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) |
                                IRQ_TYPE_LEVEL_HIGH)>;
@@ -83,6 +83,11 @@ pllctrl: pll-controller@02310000 {
                        reg = <0x02310000 0x200>;
                };
 
+               psc: power-sleep-controller@02350000 {
+                       compatible = "syscon", "simple-mfd";
+                       reg = <0x02350000 0x1000>;
+               };
+
                devctrl: device-state-control@02620000 {
                        compatible = "ti,keystone-devctrl", "syscon";
                        reg = <0x02620000 0x1000>;
@@ -98,7 +103,7 @@ rstctrl: reset-controller {
                /include/ "keystone-clocks.dtsi"
 
                uart0: serial@02530c00 {
-                       compatible = "ns16550a";
+                       compatible = "ti,da830-uart", "ns16550a";
                        current-speed = <115200>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
@@ -108,7 +113,7 @@ uart0: serial@02530c00 {
                };
 
                uart1:  serial@02531000 {
-                       compatible = "ns16550a";
+                       compatible = "ti,da830-uart", "ns16550a";
                        current-speed = <115200>;
                        reg-shift = <2>;
                        reg-io-width = <4>;
index 41acbb6dd6ab8b4583797f293b59a5686cff7b6a..4d2b15d6244ad4ee38fbd881f336f059a66a3d05 100644 (file)
@@ -194,6 +194,8 @@ wps {
        };
 
        dsa {
+               status = "disabled";
+
                compatible = "marvell,dsa";
                #address-cells = <2>;
                #size-cells = <0>;
@@ -241,6 +243,53 @@ port@6 {
 
 &mdio {
        status = "okay";
+
+       switch@0 {
+               compatible = "marvell,mv88e6085";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               label = "lan4";
+                       };
+
+                       port@1 {
+                              reg = <1>;
+                              label = "lan3";
+                       };
+
+                       port@2 {
+                              reg = <2>;
+                              label = "lan2";
+                       };
+
+                       port@3 {
+                              reg = <3>;
+                              label = "lan1";
+                       };
+
+                       port@4 {
+                               reg = <4>;
+                               label = "wan";
+                       };
+
+                       port@6 {
+                               reg = <6>;
+                               label = "cpu";
+                               ethernet = <&eth0port>;
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+               };
+       };
 };
 
 /* eth0 is connected to a Marvell 88E6171 switch, without a PHY. So set
index 6548e68a20d000d75bd9f506907499066136103f..b9125e5ed0764afa00e0952c32983d431efb5966 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index cf2e69f0d54fffcf3deebda51a68b2b798d07687..29d929535453beb068154e2eaa3c4f4ede97841f 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 6dc0df2969f04318850c9914f182d09c3e974380..9cc05203baee3ea8357907b734f4b9f10bc55e04 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index edcba5c44b05fe9b17c5c0b31ae4acf5633e17b6..ff37e76ab551d5a96039fea2a1c7f05b382109e5 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 4b6450186af59e0550e59f44925b86bbe4a6962a..f602c059c7189280afc1d4b18b25f449dff2ebc9 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 954ec1d5b6dc24c3567df4001ae655c2026d6a88..ef8fc1a077f802e469445657a17824b27de66359 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index ecd5c12a805dbeccd7899780da5ae9e96555d156..ce41d553b693f3885b325ff7390f36dba0d82026 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 36c54c9dfa3095c46a283720f48be18147f45748..b459042a904a526597f5f212b941c1176c1a3cfe 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 345fcac48dc7f8211de3dc6f07dac73f5e604e6e..df7851820507db0d84958db809a75aac2cc71611 100644 (file)
@@ -70,6 +70,8 @@ white-pulse {
        };
 
        dsa {
+               status = "disabled";
+
                compatible = "marvell,dsa";
                #address-cells = <2>;
                #size-cells = <0>;
@@ -207,6 +209,53 @@ &pcie1 {
 
 &mdio {
        status = "okay";
+
+       switch@10 {
+               compatible = "marvell,mv88e6085";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <16>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               label = "ethernet1";
+                       };
+
+                       port@1 {
+                               reg = <1>;
+                               label = "ethernet2";
+                       };
+
+                       port@2 {
+                               reg = <2>;
+                               label = "ethernet3";
+                       };
+
+                       port@3 {
+                               reg = <3>;
+                               label = "ethernet4";
+                       };
+
+                       port@4 {
+                               reg = <4>;
+                               label = "internet";
+                       };
+
+                       port@5 {
+                               reg = <5>;
+                               label = "cpu";
+                               ethernet = <&eth0port>;
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+               };
+       };
 };
 
 &uart0 {
index 172a38c0b8a96e32097ab72fc27621bdf2a02eec..327023a477b897f4cfdabb3eefbc043b394327ed 100644 (file)
@@ -112,6 +112,8 @@ wps {
        };
 
        dsa {
+               status = "disabled";
+
                compatible = "marvell,dsa";
                #address-cells = <1>;
                #size-cells = <0>;
@@ -159,6 +161,53 @@ port@5 {
 
 &mdio {
        status = "okay";
+
+       switch@0 {
+               compatible = "marvell,mv88e6085";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               label = "lan1";
+                       };
+
+                       port@1 {
+                               reg = <1>;
+                               label = "lan2";
+                       };
+
+                       port@2 {
+                               reg = <2>;
+                               label = "lan3";
+                       };
+
+                       port@3 {
+                               reg = <3>;
+                               label = "lan4";
+                       };
+
+                       port@4 {
+                               reg = <4>;
+                               label = "wan";
+                       };
+
+                       port@5 {
+                               reg = <5>;
+                               label = "cpu";
+                               ethernet = <&eth0port>;
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+               };
+       };
 };
 
 &eth0 {
index 6f771a99cb02ef9f655a7abdbbe90ed1b22abaf1..9ec5a65561e9c3a02fd8e930ea8f06598ac35876 100644 (file)
@@ -19,11 +19,6 @@ / {
        model = "Marvell RD88f6281 Reference design, with A0 or higher SoC";
        compatible = "marvell,rd88f6281-a", "marvell,rd88f6281","marvell,kirkwood-88f6281", "marvell,kirkwood";
 
-       dsa {
-               switch@0 {
-                       reg = <10 0>;    /* MDIO address 10, switch 0 in tree */
-               };
-       };
 };
 
 &mdio {
@@ -34,6 +29,10 @@ ethphy1: ethernet-phy@11 {
        };
 };
 
+&switch {
+       reg = <10>;
+};
+
 &eth1 {
        status = "okay";
 
index 1a797381d3d4283c8c7938b8654c7ec2e989b65e..6a4a65ec79443585db252ea924110094ae287d8c 100644 (file)
@@ -33,3 +33,14 @@ port@4 {
 &eth1 {
       status = "disabled";
 };
+
+&switch {
+       reg = <0>;
+
+       ports {
+               port@4 {
+                       reg = <4>;
+                       label = "wan";
+               };
+       };
+};
index d5aacf137e4096fe43b1a99034e648a557b32c6d..91f5da5dae5f15d2ed8e163e3f6d0118390913b6 100644 (file)
@@ -54,6 +54,8 @@ mvsdio@90000 {
        };
 
        dsa {
+               status = "disabled";
+
                compatible = "marvell,dsa";
                #address-cells = <2>;
                #size-cells = <0>;
@@ -115,6 +117,48 @@ partition@300000 {
 
 &mdio {
        status = "okay";
+
+       switch: switch@0 {
+               compatible = "marvell,mv88e6085";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               label = "lan1";
+                       };
+
+                       port@1 {
+                               reg = <1>;
+                               label = "lan2";
+                       };
+
+                       port@2 {
+                               reg = <2>;
+                               label = "lan3";
+                       };
+
+                       port@3 {
+                               reg = <3>;
+                               label = "lan4";
+                       };
+
+                       port@5 {
+                               reg = <5>;
+                               label = "cpu";
+                               ethernet = <&eth0port>;
+                               fixed-link {
+                                       speed = <1000>;
+                                       full-duplex;
+                               };
+                       };
+
+               };
+       };
 };
 
 &eth0 {
index 282d854f43426d8515dd19200cf8e05fa5d5d16d..45ea57fafa1887aaf2648c947d56e79bb076fdee 100644 (file)
@@ -110,11 +110,11 @@ soc {
                ranges;
 
                gic: interrupt-controller@1400000 {
-                       compatible = "arm,cortex-a7-gic";
+                       compatible = "arm,gic-400", "arm,cortex-a7-gic";
                        #interrupt-cells = <3>;
                        interrupt-controller;
                        reg = <0x0 0x1401000 0x0 0x1000>,
-                             <0x0 0x1402000 0x0 0x1000>,
+                             <0x0 0x1402000 0x0 0x2000>,
                              <0x0 0x1404000 0x0 0x2000>,
                              <0x0 0x1406000 0x0 0x2000>;
                        interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
index 082ca8807c629b37b9a3be7ffe5b13eef6244272..a4837985b7a7dc399be9ce3729aa15e4caccbc76 100644 (file)
@@ -24,6 +24,60 @@ memory {
        };
 };
 
+&auxadc {
+       status = "okay";
+};
+
+&pio {
+       spi_pins_a: spi0@0 {
+               pins_spi {
+                       pinmux = <MT2701_PIN_53_SPI0_CSN__FUNC_SPI0_CS>,
+                                <MT2701_PIN_54_SPI0_CK__FUNC_SPI0_CK>,
+                                <MT2701_PIN_55_SPI0_MI__FUNC_SPI0_MI>,
+                                <MT2701_PIN_56_SPI0_MO__FUNC_SPI0_MO>;
+                       bias-disable;
+               };
+       };
+
+       spi_pins_b: spi1@0 {
+               pins_spi {
+                       pinmux = <MT2701_PIN_7_SPI1_CSN__FUNC_SPI1_CS>,
+                                <MT2701_PIN_8_SPI1_MI__FUNC_SPI1_MI>,
+                                <MT2701_PIN_9_SPI1_MO__FUNC_SPI1_MO>,
+                                <MT2701_PIN_199_SPI1_CLK__FUNC_SPI1_CK>;
+                       bias-disable;
+               };
+       };
+
+       spi_pins_c: spi2@0 {
+               pins_spi {
+                       pinmux = <MT2701_PIN_101_SPI2_CSN__FUNC_SPI2_CS>,
+                                <MT2701_PIN_102_SPI2_MI__FUNC_SPI2_MI>,
+                                <MT2701_PIN_103_SPI2_MO__FUNC_SPI2_MO>,
+                                <MT2701_PIN_104_SPI2_CLK__FUNC_SPI2_CK>;
+                       bias-disable;
+               };
+       };
+};
+
+&spi0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi_pins_a>;
+       status = "disabled";
+};
+
+&spi1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi_pins_b>;
+       status = "disabled";
+};
+
+&spi2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi_pins_c>;
+       status = "disabled";
+};
+
 &uart0 {
        status = "okay";
 };
index 7eab6f4c4665746af3a5e7bcaa237d5115d6a428..803721050116a6d4829b7939fea61aac4111fbd5 100644 (file)
@@ -13,6 +13,7 @@
  */
 
 #include <dt-bindings/clock/mt2701-clk.h>
+#include <dt-bindings/power/mt2701-power.h>
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/reset/mt2701-resets.h>
@@ -87,6 +88,36 @@ rtc32k: oscillator@1 {
                clock-output-names = "rtc32k";
        };
 
+       thermal-zones {
+               cpu_thermal: cpu_thermal {
+                       polling-delay-passive = <1000>; /* milliseconds */
+                       polling-delay = <1000>; /* milliseconds */
+
+                       thermal-sensors = <&thermal 0>;
+                       sustainable-power = <1000>;
+
+                       trips {
+                               threshold: trip-point@0 {
+                                       temperature = <68000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               target: trip-point@1 {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "passive";
+                               };
+
+                               cpu_crit: cpu_crit@0 {
+                                       temperature = <115000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+                       };
+               };
+       };
+
        timer {
                compatible = "arm,armv7-timer";
                interrupt-parent = <&gic>;
@@ -96,24 +127,6 @@ timer {
                             <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
        };
 
-       pio: pinctrl@10005000 {
-               compatible = "mediatek,mt2701-pinctrl";
-               reg = <0 0x1000b000 0 0x1000>;
-               mediatek,pctl-regmap = <&syscfg_pctl_a>;
-               pins-are-numbered;
-               gpio-controller;
-               #gpio-cells = <2>;
-               interrupt-controller;
-               #interrupt-cells = <2>;
-               interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
-                            <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>;
-       };
-
-       syscfg_pctl_a: syscfg@10005000 {
-               compatible = "mediatek,mt2701-pctl-a-syscfg", "syscon";
-               reg = <0 0x10005000 0 0x1000>;
-       };
-
        topckgen: syscon@10000000 {
                compatible = "mediatek,mt2701-topckgen", "syscon";
                reg = <0 0x10000000 0 0x1000>;
@@ -134,6 +147,22 @@ pericfg: syscon@10003000 {
                #reset-cells = <1>;
        };
 
+       syscfg_pctl_a: syscfg@10005000 {
+               compatible = "mediatek,mt2701-pctl-a-syscfg", "syscon";
+               reg = <0 0x10005000 0 0x1000>;
+       };
+
+       scpsys: scpsys@10006000 {
+               compatible = "mediatek,mt2701-scpsys", "syscon";
+               #power-domain-cells = <1>;
+               reg = <0 0x10006000 0 0x1000>;
+               infracfg = <&infracfg>;
+               clocks = <&topckgen CLK_TOP_MM_SEL>,
+                        <&topckgen CLK_TOP_MFG_SEL>,
+                        <&topckgen CLK_TOP_ETHIF_SEL>;
+               clock-names = "mm", "mfg", "ethif";
+       };
+
        watchdog: watchdog@10007000 {
                compatible = "mediatek,mt2701-wdt",
                             "mediatek,mt6589-wdt";
@@ -149,6 +178,29 @@ timer: timer@10008000 {
                clock-names = "system-clk", "rtc-clk";
        };
 
+       pio: pinctrl@1000b000 {
+               compatible = "mediatek,mt2701-pinctrl";
+               reg = <0 0x1000b000 0 0x1000>;
+               mediatek,pctl-regmap = <&syscfg_pctl_a>;
+               pins-are-numbered;
+               gpio-controller;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+               interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
+                            <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>;
+       };
+
+       smi_common: smi@1000c000 {
+               compatible = "mediatek,mt2701-smi-common";
+               reg = <0 0x1000c000 0 0x1000>;
+               clocks = <&infracfg CLK_INFRA_SMI>,
+                        <&mmsys CLK_MM_SMI_COMMON>,
+                        <&infracfg CLK_INFRA_SMI>;
+               clock-names = "apb", "smi", "async";
+               power-domains = <&scpsys MT2701_POWER_DOMAIN_DISP>;
+       };
+
        sysirq: interrupt-controller@10200100 {
                compatible = "mediatek,mt2701-sysirq",
                             "mediatek,mt6577-sysirq";
@@ -158,6 +210,16 @@ sysirq: interrupt-controller@10200100 {
                reg = <0 0x10200100 0 0x1c>;
        };
 
+       iommu: mmsys_iommu@10205000 {
+               compatible = "mediatek,mt2701-m4u";
+               reg = <0 0x10205000 0 0x1000>;
+               interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_LOW>;
+               clocks = <&infracfg CLK_INFRA_M4U>;
+               clock-names = "bclk";
+               mediatek,larbs = <&larb0 &larb1 &larb2>;
+               #iommu-cells = <1>;
+       };
+
        apmixedsys: syscon@10209000 {
                compatible = "mediatek,mt2701-apmixedsys", "syscon";
                reg = <0 0x10209000 0 0x1000>;
@@ -170,11 +232,20 @@ gic: interrupt-controller@10211000 {
                #interrupt-cells = <3>;
                interrupt-parent = <&gic>;
                reg = <0 0x10211000 0 0x1000>,
-                     <0 0x10212000 0 0x1000>,
+                     <0 0x10212000 0 0x2000>,
                      <0 0x10214000 0 0x2000>,
                      <0 0x10216000 0 0x2000>;
        };
 
+       auxadc: adc@11001000 {
+               compatible = "mediatek,mt2701-auxadc";
+               reg = <0 0x11001000 0 0x1000>;
+               clocks = <&pericfg CLK_PERI_AUXADC>;
+               clock-names = "main";
+               #io-channel-cells = <1>;
+               status = "disabled";
+       };
+
        uart0: serial@11002000 {
                compatible = "mediatek,mt2701-uart",
                             "mediatek,mt6577-uart";
@@ -214,4 +285,144 @@ uart3: serial@11005000 {
                clock-names = "baud", "bus";
                status = "disabled";
        };
+
+       spi0: spi@1100a000 {
+               compatible = "mediatek,mt2701-spi";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0 0x1100a000 0 0x100>;
+               interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_LOW>;
+               clocks = <&topckgen CLK_TOP_SYSPLL3_D2>,
+                        <&topckgen CLK_TOP_SPI0_SEL>,
+                        <&pericfg CLK_PERI_SPI0>;
+               clock-names = "parent-clk", "sel-clk", "spi-clk";
+               status = "disabled";
+       };
+
+       thermal: thermal@1100b000 {
+               #thermal-sensor-cells = <0>;
+               compatible = "mediatek,mt2701-thermal";
+               reg = <0 0x1100b000 0 0x1000>;
+               interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_LOW>;
+               clocks = <&pericfg CLK_PERI_THERM>, <&pericfg CLK_PERI_AUXADC>;
+               clock-names = "therm", "auxadc";
+               resets = <&pericfg MT2701_PERI_THERM_SW_RST>;
+               reset-names = "therm";
+               mediatek,auxadc = <&auxadc>;
+               mediatek,apmixedsys = <&apmixedsys>;
+       };
+
+       nandc: nfi@1100d000 {
+               compatible = "mediatek,mt2701-nfc";
+               reg = <0 0x1100d000 0 0x1000>;
+               interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_LOW>;
+               clocks = <&pericfg CLK_PERI_NFI>,
+                        <&pericfg CLK_PERI_NFI_PAD>;
+               clock-names = "nfi_clk", "pad_clk";
+               status = "disabled";
+               ecc-engine = <&bch>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+       };
+
+       bch: ecc@1100e000 {
+               compatible = "mediatek,mt2701-ecc";
+               reg = <0 0x1100e000 0 0x1000>;
+               interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_LOW>;
+               clocks = <&pericfg CLK_PERI_NFI_ECC>;
+               clock-names = "nfiecc_clk";
+               status = "disabled";
+       };
+
+       spi1: spi@11016000 {
+               compatible = "mediatek,mt2701-spi";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0 0x11016000 0 0x100>;
+               interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_LOW>;
+               clocks = <&topckgen CLK_TOP_SYSPLL3_D2>,
+                        <&topckgen CLK_TOP_SPI1_SEL>,
+                        <&pericfg CLK_PERI_SPI1>;
+               clock-names = "parent-clk", "sel-clk", "spi-clk";
+               status = "disabled";
+       };
+
+       spi2: spi@11017000 {
+               compatible = "mediatek,mt2701-spi";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0 0x11017000 0 0x1000>;
+               interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_LOW>;
+               clocks = <&topckgen CLK_TOP_SYSPLL3_D2>,
+                        <&topckgen CLK_TOP_SPI2_SEL>,
+                        <&pericfg CLK_PERI_SPI2>;
+               clock-names = "parent-clk", "sel-clk", "spi-clk";
+               status = "disabled";
+       };
+
+       mmsys: syscon@14000000 {
+               compatible = "mediatek,mt2701-mmsys", "syscon";
+               reg = <0 0x14000000 0 0x1000>;
+               #clock-cells = <1>;
+       };
+
+       larb0: larb@14010000 {
+               compatible = "mediatek,mt2701-smi-larb";
+               reg = <0 0x14010000 0 0x1000>;
+               mediatek,smi = <&smi_common>;
+               clocks = <&mmsys CLK_MM_SMI_LARB0>,
+                        <&mmsys CLK_MM_SMI_LARB0>;
+               clock-names = "apb", "smi";
+               power-domains = <&scpsys MT2701_POWER_DOMAIN_DISP>;
+       };
+
+       imgsys: syscon@15000000 {
+               compatible = "mediatek,mt2701-imgsys", "syscon";
+               reg = <0 0x15000000 0 0x1000>;
+               #clock-cells = <1>;
+       };
+
+       larb2: larb@15001000 {
+               compatible = "mediatek,mt2701-smi-larb";
+               reg = <0 0x15001000 0 0x1000>;
+               mediatek,smi = <&smi_common>;
+               clocks = <&imgsys CLK_IMG_SMI_COMM>,
+                        <&imgsys CLK_IMG_SMI_COMM>;
+               clock-names = "apb", "smi";
+               power-domains = <&scpsys MT2701_POWER_DOMAIN_ISP>;
+       };
+
+       vdecsys: syscon@16000000 {
+               compatible = "mediatek,mt2701-vdecsys", "syscon";
+               reg = <0 0x16000000 0 0x1000>;
+               #clock-cells = <1>;
+       };
+
+       larb1: larb@16010000 {
+               compatible = "mediatek,mt2701-smi-larb";
+               reg = <0 0x16010000 0 0x1000>;
+               mediatek,smi = <&smi_common>;
+               clocks = <&vdecsys CLK_VDEC_CKGEN>,
+                        <&vdecsys CLK_VDEC_LARB>;
+               clock-names = "apb", "smi";
+               power-domains = <&scpsys MT2701_POWER_DOMAIN_VDEC>;
+       };
+
+       hifsys: syscon@1a000000 {
+               compatible = "mediatek,mt2701-hifsys", "syscon";
+               reg = <0 0x1a000000 0 0x1000>;
+               #clock-cells = <1>;
+       };
+
+       ethsys: syscon@1b000000 {
+               compatible = "mediatek,mt2701-ethsys", "syscon";
+               reg = <0 0x1b000000 0 0x1000>;
+               #clock-cells = <1>;
+       };
+
+       bdpsys: syscon@1c000000 {
+               compatible = "mediatek,mt2701-bdpsys", "syscon";
+               reg = <0 0x1c000000 0 0x1000>;
+               #clock-cells = <1>;
+       };
 };
index 06fdf6c2d5fdc36b6ec99867d7342f86f31722a7..a349dba5ff797807f25e5956bb923a70d2e89390 100644 (file)
@@ -91,7 +91,7 @@ gic: interrupt-controller@10211000 {
                #interrupt-cells = <3>;
                interrupt-parent = <&gic>;
                reg = <0x10211000 0x1000>,
-                     <0x10212000 0x1000>,
+                     <0x10212000 0x2000>,
                      <0x10214000 0x2000>,
                      <0x10216000 0x2000>;
        };
index 88b3cb128698fb9d2e0abf9cfc46134b4538477e..0d6f60af76402f5de54b7ecea8add726d85b31b0 100644 (file)
@@ -102,7 +102,7 @@ gic: interrupt-controller@10211000 {
                        #interrupt-cells = <3>;
                        interrupt-parent = <&gic>;
                        reg = <0x10211000 0x1000>,
-                             <0x10212000 0x1000>,
+                             <0x10212000 0x2000>,
                              <0x10214000 0x2000>,
                              <0x10216000 0x2000>;
                };
index a9ee2d64c6f748119ffba6d6c6993cb7164f4604..b60b41cad592e66655b9ee5127f4e0174a86aa65 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2016 MediaTek Inc.
- * Author: John Crispin <blogic@openwrt.org>
+ * Author: John Crispin <john@phrozen.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
index fd2b614ae6f3d034d23f2e3c54d7a00c108ed011..402579ab70d2b94a21f58fd8bea2eeb1885a9072 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2016 MediaTek Inc.
- * Author: John Crispin <blogic@openwrt.org>
+ * Author: John Crispin <john@phrozen.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -104,7 +104,7 @@ gic: interrupt-controller@10211000 {
                #interrupt-cells = <3>;
                interrupt-parent = <&gic>;
                reg = <0 0x10211000 0 0x1000>,
-                     <0 0x10212000 0 0x1000>,
+                     <0 0x10212000 0 0x2000>,
                      <0 0x10214000 0 0x2000>,
                      <0 0x10216000 0 0x2000>;
        };
index 52086c8018e203648db36fd6b715d866935f3d34..916c095d11b909ea1f6b2a4e08a0a215158501f4 100644 (file)
@@ -129,7 +129,7 @@ gic: interrupt-controller@10211000 {
                        #interrupt-cells = <3>;
                        interrupt-parent = <&gic>;
                        reg = <0 0x10211000 0 0x1000>,
-                             <0 0x10212000 0 0x1000>,
+                             <0 0x10212000 0 0x2000>,
                              <0 0x10214000 0 0x2000>,
                              <0 0x10216000 0 0x2000>;
                };
index 1d7f92bdcb9c30b00a9a6a0c8e3103ac37dee9e0..a97b4ee4ae797f9ca56fc16ae6d4b37466f4eef7 100644 (file)
@@ -221,7 +221,7 @@ gic: interrupt-controller@10211000 {
                        #interrupt-cells = <3>;
                        interrupt-parent = <&gic>;
                        reg = <0 0x10211000 0 0x1000>,
-                             <0 0x10212000 0 0x1000>,
+                             <0 0x10212000 0 0x2000>,
                              <0 0x10214000 0 0x2000>,
                              <0 0x10216000 0 0x2000>;
                };
index e211a3c47a76cd378b80b7f0c20e09dff980f629..e172029a0c4de6b4c16f014f57fe347ee57b281d 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 68d75e79a360b219258c034ea7f028651de4d1f2..c2d87ba6190a3f72726c6e5360a6c37ab34634ef 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 4f793a025a721b03f3a5e1f074c4c531033cf62f..f1d6de8b3c193eee0d88b0465f33de4e122ba266 100644 (file)
@@ -17,6 +17,7 @@ / {
        interrupt-parent = <&intc>;
        #address-cells = <1>;
        #size-cells = <1>;
+       chosen { };
 
        aliases {
                serial0 = &uart1;
index 85e297ed0ea1c1390b16525736c46c26909de310..673cee2234b2979f4102236b3296b13fb9aed244 100644 (file)
@@ -27,6 +27,7 @@ memory@80000000 {
        aliases {
                display0 = &dvi0;
                display1 = &tv0;
+               ethernet = &ethernet;
        };
 
        leds {
@@ -348,6 +349,21 @@ &usbhshost {
 
 &usbhsehci {
        phys = <0 &hsusb2_phy>;
+
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       hub@2 {
+               compatible = "usb424,9514";
+               reg = <2>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               ethernet: usbether@1 {
+                       compatible = "usb424,ec00";
+                       reg = <1>;
+               };
+       };
 };
 
 &vaux2 {
index 54c4c07bbe4a366887a8541e37d8fe45439705ff..e268efde6c6d36f68ac1a8e5f71a1c0c406b3aff 100644 (file)
@@ -126,27 +126,6 @@ nand@0,0 {
 
                #address-cells = <1>;
                #size-cells = <1>;
-
-               partition@0 {
-                       label = "SPL";
-                       reg = <0 0x100000>;
-               };
-               partition@80000 {
-                       label = "U-Boot";
-                       reg = <0x100000 0x180000>;
-               };
-               partition@1c0000 {
-                       label = "Environment";
-                       reg = <0x280000 0x100000>;
-               };
-               partition@280000 {
-                       label = "Kernel";
-                       reg = <0x380000 0x300000>;
-               };
-               partition@780000 {
-                       label = "Filesystem";
-                       reg = <0x680000 0x1f980000>;
-               };
        };
 };
 
index 87ca50b53002b9cf244b9dca24a0f2fbdca3dabc..b64cfda8dbb73d9518fe72e79427e0a0e90a9a43 100644 (file)
@@ -47,7 +47,7 @@ leds {
                compatible = "gpio-leds";
                heartbeat {
                        label = "debug::sleep";
-                       gpios = <&gpio6 2 GPIO_ACTIVE_HIGH>;  /* gpio162 */
+                       gpios = <&gpio6 2 GPIO_ACTIVE_HIGH>;  /* 162 */
                        linux,default-trigger = "default-on";
                        pinctrl-names = "default";
                        pinctrl-0 = <&debug_leds>;
@@ -625,6 +625,7 @@ bq27200: bq27200@55 {
                reg = <0x55>;
        };
 
+       /* Stereo headphone amplifier */
        tpa6130a2: tpa6130a2@60 {
                compatible = "ti,tpa6130a2";
                reg = <0x60>;
@@ -734,6 +735,8 @@ &mmc2 {
        vmmc_aux-supply = <&vsim>;
        bus-width = <8>;
        non-removable;
+       no-sdio;
+       no-sd;
 };
 
 &mmc3 {
index ecf5eb584c75058598b9c90bc3f3568bf3a7ce7e..a3ff4933dbc173936bbec5a222aba6642e70564d 100644 (file)
@@ -17,6 +17,7 @@ / {
        interrupt-parent = <&intc>;
        #address-cells = <1>;
        #size-cells = <1>;
+       chosen { };
 
        aliases {
                i2c0 = &i2c1;
index 1673689e67054513637acd291de4ae4073c04e02..edbc4090297ddcd3d5e7cf035261156898271196 100644 (file)
@@ -16,6 +16,7 @@ memory@80000000 {
        aliases {
                display0 = &dvi0;
                display1 = &hdmi0;
+               ethernet = &ethernet;
        };
 
        leds: leds {
@@ -520,6 +521,21 @@ &usbhshost {
 
 &usbhsehci {
        phys = <&hsusb1_phy>;
+
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       hub@1 {
+               compatible = "usb424,9514";
+               reg = <1>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               ethernet: usbether@1 {
+                       compatible = "usb424,ec00";
+                       reg = <1>;
+               };
+       };
 };
 
 &dss {
index 8087456b5fbec60c9379e5937b299ce820a7cb03..578c53f08309090069454261e09bb0f1617e4a98 100644 (file)
@@ -15,6 +15,7 @@ / {
        interrupt-parent = <&wakeupgen>;
        #address-cells = <1>;
        #size-cells = <1>;
+       chosen { };
 
        aliases {
                i2c0 = &i2c1;
index 8fc19218057e0c4dc36ee013c8213c663d102db6..fef2a446b61c32113704a2a782ec89443d250a29 100644 (file)
@@ -19,6 +19,10 @@ memory@80000000 {
                reg = <0x0 0x80000000 0 0x7f000000>;    /* 2032 MB */
        };
 
+       aliases {
+               ethernet = &ethernet;
+       };
+
        gpio_keys {
                compatible = "gpio-keys";
                pinctrl-0 = <&power_button_pin>;
@@ -116,3 +120,20 @@ OMAP5_IOPAD(0x1c4, PIN_OUTPUT | MUX_MODE6) /* mcspi1_somi.gpio5_144 */
                OMAP5_IOPAD(0x1ca, PIN_OUTPUT | MUX_MODE6)      /* perslimbus2_clock.gpio5_145 */
        >;
 };
+
+&usbhsehci {
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       hub@2 {
+               compatible = "usb424,3503";
+               reg = <2>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               ethernet: usbether@3 {
+                       compatible = "usb424,7500";
+                       reg = <3>;
+               };
+       };
+};
index a8c72611fbe37da136feff1e0fddf40dc263cc22..0d42c46f13e7e37534d8149345690d3a3e9d837f 100644 (file)
@@ -18,6 +18,10 @@ memory@80000000 {
                reg = <0 0x80000000 0 0x7f000000>; /* 2032 MB */
        };
 
+       aliases {
+               ethernet = &ethernet;
+       };
+
        leds {
                compatible = "gpio-leds";
                led1 {
@@ -164,6 +168,23 @@ OMAP5_IOPAD(0x1be, PIN_OUTPUT | MUX_MODE6) /* mcspi1_somi.gpio5_141 */
        >;
 };
 
+&usbhsehci {
+       #address-cells = <1>;
+       #size-cells = <0>;
+
+       hub@2 {
+               compatible = "usb424,3503";
+               reg = <2>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+       };
+
+       ethernet: usbether@3 {
+               compatible = "usb424,9730";
+               reg = <3>;
+       };
+};
+
 &wlcore {
        compatible = "ti,wl1837";
 };
index 968c67a49dbd158b3b3ca24ad2bd85b6f45687d6..71b480968a74546071afb559350a0e6c4f72cf98 100644 (file)
@@ -17,6 +17,7 @@ / {
 
        compatible = "ti,omap5";
        interrupt-parent = <&wakeupgen>;
+       chosen { };
 
        aliases {
                i2c0 = &i2c1;
@@ -91,7 +92,7 @@ gic: interrupt-controller@48211000 {
                interrupt-controller;
                #interrupt-cells = <3>;
                reg = <0 0x48211000 0 0x1000>,
-                     <0 0x48212000 0 0x1000>,
+                     <0 0x48212000 0 0x2000>,
                      <0 0x48214000 0 0x2000>,
                      <0 0x48216000 0 0x2000>;
                interrupt-parent = <&gic>;
index 1a672b098d0b12ae6683398510dccf455f7f8cd5..e28b568e741a388ab86ad0fc22a9009af83d11e4 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 51dc734cd5b902663df96e15dfeba4820966ce05..9f6fedd39170585364ca787ce9c47921ee44d863 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 0eead400f42770e46f44250ef1629cdb295a1422..7f77ce8cc1fc65a0427ba1267b90765c113fc29a 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index ed456ab35fd84ae4eddd49dd9c2542bbfc5fcc0e..e9991c83d7b70540782e581f6e8a4c99ebe9065e 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 94740925284587f8f40219e920ced179e67cac3a..7c999b092e06a8ba5385b5901cefd3f8f94fcdf0 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 6b47a52ceb9c8af0a1472eb940f8911f1b3b56b8..ea966ec03dd0b5e285c138c91512fdbcc3566f18 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index ce13705c38d4f62f4adf716fac8a9960a55011ae..46aa6db8353ac3bc1dfa9f2af943d0fee15551c7 100644 (file)
@@ -7,6 +7,8 @@
  */
 
 /include/ "skeleton.dtsi"
+#include <dt-bindings/clock/oxsemi,ox810se.h>
+#include <dt-bindings/reset/oxsemi,ox810se.h>
 
 / {
        compatible = "oxsemi,ox810se";
@@ -242,7 +244,7 @@ uart0: serial@200000 {
                               current-speed = <115200>;
                               no-loopback-test;
                               status = "disabled";
-                              resets = <&reset 17>;
+                              resets = <&reset RESET_UART1>;
                        };
 
                        uart1: serial@300000 {
@@ -256,7 +258,7 @@ uart1: serial@300000 {
                               current-speed = <115200>;
                               no-loopback-test;
                               status = "disabled";
-                              resets = <&reset 18>;
+                              resets = <&reset RESET_UART2>;
                        };
 
                        uart2: serial@900000 {
@@ -270,7 +272,7 @@ uart2: serial@900000 {
                               current-speed = <115200>;
                               no-loopback-test;
                               status = "disabled";
-                              resets = <&reset 22>;
+                              resets = <&reset RESET_UART3>;
                        };
 
                        uart3: serial@a00000 {
@@ -284,7 +286,7 @@ uart3: serial@a00000 {
                               current-speed = <115200>;
                               no-loopback-test;
                               status = "disabled";
-                              resets = <&reset 23>;
+                              resets = <&reset RESET_UART4>;
                        };
                };
 
index e40f282a023a1f607d66e9b0cd711c143a45ab20..459207536a46654246517adfdd62cd6a38629202 100644 (file)
@@ -8,6 +8,8 @@
 
 /include/ "skeleton.dtsi"
 #include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/clock/oxsemi,ox820.h>
+#include <dt-bindings/reset/oxsemi,ox820.h>
 
 / {
        compatible = "oxsemi,ox820";
@@ -83,8 +85,8 @@ soc {
                nandc: nand-controller@41000000 {
                        compatible = "oxsemi,ox820-nand";
                        reg = <0x41000000 0x100000>;
-                       clocks = <&stdclk 11>;
-                       resets = <&reset 15>;
+                       clocks = <&stdclk CLK_820_NAND>;
+                       resets = <&reset RESET_NAND>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
@@ -99,9 +101,9 @@ etha: ethernet@40400000 {
                        mac-address = [000000000000]; /* Filled in by U-Boot */
                        phy-mode = "rgmii";
 
-                       clocks = <&stdclk 9>, <&gmacclk>;
+                       clocks = <&stdclk CLK_820_ETHA>, <&gmacclk>;
                        clock-names = "gmac", "stmmaceth";
-                       resets = <&reset 6>;
+                       resets = <&reset RESET_MAC>;
 
                        /* Regmap for sys registers */
                        oxsemi,sys-ctrl = <&sys>;
@@ -208,7 +210,7 @@ uart0: serial@200000 {
                               no-loopback-test;
                               status = "disabled";
                               clocks = <&sysclk>;
-                              resets = <&reset 17>;
+                              resets = <&reset RESET_UART1>;
                        };
 
                        uart1: serial@300000 {
@@ -222,7 +224,7 @@ uart1: serial@300000 {
                               no-loopback-test;
                               status = "disabled";
                               clocks = <&sysclk>;
-                              resets = <&reset 18>;
+                              resets = <&reset RESET_UART2>;
                        };
 
                        rps@400000 {
index 4b8872cc8bf935393550c2f6b04c7d0ba50ae0c1..39d9e6ddefedbbc4d1d82f2bf99ba9c2a785f32f 100644 (file)
@@ -220,6 +220,14 @@ mux1 {
                                        function = "ebi2";
                                };
                        };
+
+                       /* Interrupt line for the KXSD9 accelerometer */
+                       dragon_kxsd9_gpios: kxsd9 {
+                               irq {
+                                       pins = "gpio57"; /* IRQ line */
+                                       bias-pull-up;
+                               };
+                       };
                };
 
                qcom,ssbi@500000 {
@@ -272,6 +280,15 @@ pinconf {
                                                        power-source = <PM8058_GPIO_S3>;
                                                };
                                        };
+                                       dragon_mpu3050_gpios: mpu3050-gpios {
+                                               pinconf {
+                                                       pins = "gpio17";
+                                                       function = "normal";
+                                                       input-enable;
+                                                       bias-disable;
+                                                       power-source = <PM8058_GPIO_S3>;
+                                               };
+                                       };
                                        dragon_sdcc3_gpios: sdcc3-gpios {
                                                pinconf {
                                                        pins = "gpio22";
@@ -369,8 +386,8 @@ i2c@19c80000 {
                                ak8975@0c {
                                        compatible = "asahi-kasei,ak8975";
                                        reg = <0x0c>;
-                                       /* GPIO33 has interrupt 224 on the PM8058 */
-                                       interrupt-parent = <&pm8058_gpio>;
+                                       /* FIXME: GPIO33 has interrupt 224 on the PM8058 */
+                                       interrupt-parent = <&pm8058>;
                                        interrupts = <224 IRQ_TYPE_EDGE_RISING>;
                                        pinctrl-names = "default";
                                        pinctrl-0 = <&dragon_ak8975_gpios>;
@@ -380,8 +397,8 @@ ak8975@0c {
                                bmp085@77 {
                                        compatible = "bosch,bmp085";
                                        reg = <0x77>;
-                                       /* GPIO16 has interrupt 207 on the PM8058 */
-                                       interrupt-parent = <&pm8058_gpio>;
+                                       /* FIXME: GPIO16 has interrupt 207 on the PM8058 */
+                                       interrupt-parent = <&pm8058>;
                                        interrupts = <207 IRQ_TYPE_EDGE_RISING>;
                                        reset-gpios = <&tlmm 86 GPIO_ACTIVE_LOW>;
                                        pinctrl-names = "default";
@@ -389,6 +406,41 @@ bmp085@77 {
                                        vddd-supply = <&pm8058_lvs0>; // 1.8V
                                        vdda-supply = <&pm8058_l14>; // 2.85V
                                };
+                               mpu3050@68 {
+                                       compatible = "invensense,mpu3050";
+                                       reg = <0x68>;
+                                       /*
+                                        * GPIO17 has interrupt 208 on the
+                                        * PM8058, it is pulled high by a 10k
+                                        * resistor to VLOGIC so needs to be
+                                        * active low/falling edge.
+                                        */
+                                       interrupts-extended = <&pm8058 208 IRQ_TYPE_EDGE_FALLING>;
+                                       pinctrl-names = "default";
+                                       pinctrl-0 = <&dragon_mpu3050_gpios>;
+                                       vlogic-supply = <&pm8058_lvs0>; // 1.8V
+                                       vdd-supply = <&pm8058_l14>; // 2.85V
+
+                                       /*
+                                        * The MPU-3050 acts as a hub for the
+                                        * accelerometer.
+                                        */
+                                       i2c-gate {
+                                               #address-cells = <1>;
+                                               #size-cells = <0>;
+
+                                               kxsd9@18 {
+                                                       compatible = "kionix,kxsd9";
+                                                       reg = <0x18>;
+                                                       interrupt-parent = <&tlmm>;
+                                                       interrupts = <57 IRQ_TYPE_EDGE_FALLING>;
+                                                       pinctrl-names = "default";
+                                                       pinctrl-0 = <&dragon_kxsd9_gpios>;
+                                                       iovdd-supply = <&pm8058_lvs0>; // 1.8V
+                                                       vdd-supply = <&pm8058_l14>; // 2.85V
+                                               };
+                                       };
+                               };
                        };
                };
 
@@ -412,7 +464,7 @@ ethernet-ebi2@2,0 {
                                 * The second interrupt is the PME interrupt
                                 * for network wakeup, connected to the TLMM.
                                 */
-                               interrupts-extended = <&pmicintc 198 IRQ_TYPE_EDGE_FALLING>,
+                               interrupts-extended = <&pm8058 198 IRQ_TYPE_EDGE_FALLING>,
                                                    <&tlmm 29 IRQ_TYPE_EDGE_RISING>;
                                reset-gpios = <&tlmm 30 GPIO_ACTIVE_LOW>;
                                vdd33a-supply = <&dragon_veth>;
index 39ae2bc8cb084a288873812c9530cff7e402a959..8f5de029bca9eae93ae957ce525ba1550f2a7d0c 100644 (file)
@@ -39,6 +39,17 @@ vcc3v3: vcc3v3 {
 
        };
 
+       hdmi-out {
+               compatible = "hdmi-connector";
+               type = "a";
+
+               port {
+                       hdmi_con: endpoint {
+                               remote-endpoint = <&hdmi_out>;
+                       };
+               };
+       };
+
        soc {
                rpm@108000 {
                        regulators {
@@ -74,6 +85,14 @@ s1 {
                                        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>;
@@ -121,6 +140,16 @@ l6 {
                                        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>;
@@ -347,5 +376,45 @@ sdcc@12180000 {
                                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 3d37cab3b9a9cb5c9a9f8dcd314c059fc9b1545a..881ce707311a05e35160456e76bf564863ea0895 100644 (file)
@@ -75,25 +75,6 @@ conf {
                                        bias-disable;
                                };
                        };
-
-                       hdmi_pinctrl: hdmi-pinctrl {
-                               mux {
-                                       pins = "gpio70", "gpio71", "gpio72";
-                                       function = "hdmi";
-                               };
-
-                               pinconf_ddc {
-                                       pins = "gpio70", "gpio71";
-                                       bias-pull-up;
-                                       drive-strength = <2>;
-                               };
-
-                               pinconf_hpd {
-                                       pins = "gpio72";
-                                       bias-pull-down;
-                                       drive-strength = <16>;
-                               };
-                       };
                };
 
                rpm@108000 {
@@ -368,9 +349,6 @@ hdmi-tx@4a00000 {
 
                        hpd-gpios = <&tlmm_pinmux 72 GPIO_ACTIVE_HIGH>;
 
-                       pinctrl-names = "default";
-                       pinctrl-0 = <&hdmi_pinctrl>;
-
                        ports {
                                port@0 {
                                        endpoint {
index 6b801e7e57a2103f8cfb9f00a21bf071d25c71a7..173ab7c299cea326055e1fa6cc9da27018895b89 100644 (file)
@@ -284,4 +284,41 @@ pinconf {
                        bias-disable = <0>;
                };
        };
+
+       riva_fm_pin_a: riva-fm-active {
+               pins = "gpio14", "gpio15";
+               function = "riva_fm";
+       };
+
+       riva_bt_pin_a: riva-bt-active {
+               pins = "gpio16", "gpio17";
+               function = "riva_bt";
+       };
+
+       riva_wlan_pin_a: riva-wlan-active {
+               pins = "gpio64", "gpio65", "gpio66", "gpio67", "gpio68";
+               function = "riva_wlan";
+
+               drive-strength = <6>;
+               bias-pull-down;
+       };
+
+       hdmi_pinctrl: hdmi-pinctrl {
+               mux {
+                       pins = "gpio70", "gpio71", "gpio72";
+                       function = "hdmi";
+               };
+
+               pinconf_ddc {
+                       pins = "gpio70", "gpio71";
+                       bias-pull-up;
+                       drive-strength = <2>;
+               };
+
+               pinconf_hpd {
+                       pins = "gpio72";
+                       bias-pull-down;
+                       drive-strength = <16>;
+               };
+       };
 };
index ebd675ca94b4ec3e217eb6b9f6011dabdc44f2eb..a34ba355545495dfa6547bfd395f20a008afba2c 100644 (file)
@@ -390,5 +390,12 @@ sdcc3: sdcc@12180000 {
                                pinctrl-0 = <&sdcc3_pins>, <&sdcc3_cd_pin_a>;
                        };
                };
+
+               riva-pil@3204000 {
+                       status = "okay";
+
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&riva_wlan_pin_a>, <&riva_bt_pin_a>, <&riva_fm_pin_a>;
+               };
        };
 };
index 268bd470c865e6022d907ca495b6913acfd7c1ef..14a6f5ed02de66f7592329643d43b69d645a15db 100644 (file)
@@ -4,6 +4,7 @@
 #include <dt-bindings/clock/qcom,gcc-msm8960.h>
 #include <dt-bindings/reset/qcom,gcc-msm8960.h>
 #include <dt-bindings/clock/qcom,mmcc-msm8960.h>
+#include <dt-bindings/clock/qcom,rpmcc.h>
 #include <dt-bindings/soc/qcom,gsbi.h>
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
@@ -21,13 +22,18 @@ smem_region: smem@80000000 {
                        reg = <0x80000000 0x200000>;
                        no-map;
                };
+
+               wcnss_mem: wcnss@8f000000 {
+                       reg = <0x8f000000 0x700000>;
+                       no-map;
+               };
        };
 
        cpus {
                #address-cells = <1>;
                #size-cells = <0>;
 
-               cpu@0 {
+               CPU0: cpu@0 {
                        compatible = "qcom,krait";
                        enable-method = "qcom,kpss-acc-v1";
                        device_type = "cpu";
@@ -38,7 +44,7 @@ cpu@0 {
                        cpu-idle-states = <&CPU_SPC>;
                };
 
-               cpu@1 {
+               CPU1: cpu@1 {
                        compatible = "qcom,krait";
                        enable-method = "qcom,kpss-acc-v1";
                        device_type = "cpu";
@@ -49,7 +55,7 @@ cpu@1 {
                        cpu-idle-states = <&CPU_SPC>;
                };
 
-               cpu@2 {
+               CPU2: cpu@2 {
                        compatible = "qcom,krait";
                        enable-method = "qcom,kpss-acc-v1";
                        device_type = "cpu";
@@ -60,7 +66,7 @@ cpu@2 {
                        cpu-idle-states = <&CPU_SPC>;
                };
 
-               cpu@3 {
+               CPU3: cpu@3 {
                        compatible = "qcom,krait";
                        enable-method = "qcom,kpss-acc-v1";
                        device_type = "cpu";
@@ -179,7 +185,7 @@ cpu-pmu {
        };
 
        clocks {
-               cxo_board {
+               cxo_board: cxo_board {
                        compatible = "fixed-clock";
                        #clock-cells = <0>;
                        clock-frequency = <19200000>;
@@ -303,6 +309,9 @@ dsps_smsm: dsps@4 {
        firmware {
                scm {
                        compatible = "qcom,scm-apq8064";
+
+                       clocks = <&rpmcc RPM_DAYTONA_FABRIC_CLK>;
+                       clock-names = "core";
                };
        };
 
@@ -627,6 +636,33 @@ rng@1a500000 {
                        clock-names = "core";
                };
 
+               ssbi@c00000 {
+                       compatible = "qcom,ssbi";
+                       reg = <0x00c00000 0x1000>;
+                       qcom,controller-type = "pmic-arbiter";
+
+                       pm8821: pmic@1 {
+                               compatible = "qcom,pm8821";
+                               interrupt-parent = <&tlmm_pinmux>;
+                               interrupts = <76 IRQ_TYPE_LEVEL_LOW>;
+                               #interrupt-cells = <2>;
+                               interrupt-controller;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               pm8821_mpps: mpps@50 {
+                                       compatible = "qcom,pm8821-mpp", "qcom,ssbi-mpp";
+                                       reg = <0x50>;
+                                       interrupts = <24 IRQ_TYPE_NONE>,
+                                                    <25 IRQ_TYPE_NONE>,
+                                                    <26 IRQ_TYPE_NONE>,
+                                                    <27 IRQ_TYPE_NONE>;
+                                       gpio-controller;
+                                       #gpio-cells = <2>;
+                               };
+                       };
+               };
+
                qcom,ssbi@500000 {
                        compatible = "qcom,ssbi";
                        reg = <0x00500000 0x1000>;
@@ -1323,6 +1359,8 @@ pcie: pci@1b500000 {
 
                hdmi: hdmi-tx@4a00000 {
                        compatible = "qcom,hdmi-tx-8960";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&hdmi_pinctrl>;
                        reg = <0x04a00000 0x2f0>;
                        reg-names = "core_physical";
                        interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
@@ -1416,6 +1454,249 @@ mdp_dtv_out: endpoint {
                                };
                        };
                };
+
+               riva: riva-pil@3204000 {
+                       compatible = "qcom,riva-pil";
+
+                       reg = <0x03200800 0x1000>, <0x03202000 0x2000>, <0x03204000 0x100>;
+                       reg-names = "ccu", "dxe", "pmu";
+
+                       interrupts-extended = <&intc GIC_SPI 199 IRQ_TYPE_EDGE_RISING>,
+                                             <&wcnss_smsm 6 IRQ_TYPE_EDGE_RISING>;
+                       interrupt-names = "wdog", "fatal";
+
+                       memory-region = <&wcnss_mem>;
+
+                       vddcx-supply = <&pm8921_s3>;
+                       vddmx-supply = <&pm8921_l24>;
+                       vddpx-supply = <&pm8921_s4>;
+
+                       status = "disabled";
+
+                       iris {
+                               compatible = "qcom,wcn3660";
+
+                               clocks = <&cxo_board>;
+                               clock-names = "xo";
+
+                               vddxo-supply = <&pm8921_l4>;
+                               vddrfa-supply = <&pm8921_s2>;
+                               vddpa-supply = <&pm8921_l10>;
+                               vdddig-supply = <&pm8921_lvs2>;
+                       };
+
+                       smd-edge {
+                               interrupts = <GIC_SPI 198 IRQ_TYPE_EDGE_RISING>;
+
+                               qcom,ipc = <&l2cc 8 25>;
+                               qcom,smd-edge = <6>;
+
+                               label = "riva";
+
+                               wcnss {
+                                       compatible = "qcom,wcnss";
+                                       qcom,smd-channels = "WCNSS_CTRL";
+
+                                       qcom,mmio = <&riva>;
+
+                                       bt {
+                                               compatible = "qcom,wcnss-bt";
+                                       };
+
+                                       wifi {
+                                               compatible = "qcom,wcnss-wlan";
+
+                                               interrupts = <GIC_SPI 203 IRQ_TYPE_LEVEL_HIGH>,
+                                                            <GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH>;
+                                               interrupt-names = "tx", "rx";
+
+                                               qcom,smem-states = <&apps_smsm 10>, <&apps_smsm 9>;
+                                               qcom,smem-state-names = "tx-enable", "tx-rings-empty";
+                                       };
+                               };
+                       };
+               };
+
+               etb@1a01000 {
+                       compatible = "coresight-etb10", "arm,primecell";
+                       reg = <0x1a01000 0x1000>;
+
+                       clocks = <&rpmcc RPM_QDSS_CLK>;
+                       clock-names = "apb_pclk";
+
+                       port {
+                               etb_in: endpoint {
+                                       slave-mode;
+                                       remote-endpoint = <&replicator_out0>;
+                               };
+                       };
+               };
+
+               tpiu@1a03000 {
+                       compatible = "arm,coresight-tpiu", "arm,primecell";
+                       reg = <0x1a03000 0x1000>;
+
+                       clocks = <&rpmcc RPM_QDSS_CLK>;
+                       clock-names = "apb_pclk";
+
+                       port {
+                               tpiu_in: endpoint {
+                                       slave-mode;
+                                       remote-endpoint = <&replicator_out1>;
+                               };
+                       };
+               };
+
+               replicator {
+                       compatible = "arm,coresight-replicator";
+
+                       clocks = <&rpmcc RPM_QDSS_CLK>;
+                       clock-names = "apb_pclk";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               port@0 {
+                                       reg = <0>;
+                                       replicator_out0: endpoint {
+                                               remote-endpoint = <&etb_in>;
+                                       };
+                               };
+                               port@1 {
+                                       reg = <1>;
+                                       replicator_out1: endpoint {
+                                               remote-endpoint = <&tpiu_in>;
+                                       };
+                               };
+                               port@2 {
+                                       reg = <0>;
+                                       replicator_in: endpoint {
+                                               slave-mode;
+                                               remote-endpoint = <&funnel_out>;
+                                       };
+                               };
+                       };
+               };
+
+               funnel@1a04000 {
+                       compatible = "arm,coresight-funnel", "arm,primecell";
+                       reg = <0x1a04000 0x1000>;
+
+                       clocks = <&rpmcc RPM_QDSS_CLK>;
+                       clock-names = "apb_pclk";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               /*
+                                * Not described input ports:
+                                * 2 - connected to STM component
+                                * 3 - not-connected
+                                * 6 - not-connected
+                                * 7 - not-connected
+                                */
+                               port@0 {
+                                       reg = <0>;
+                                       funnel_in0: endpoint {
+                                               slave-mode;
+                                               remote-endpoint = <&etm0_out>;
+                                       };
+                               };
+                               port@1 {
+                                       reg = <1>;
+                                       funnel_in1: endpoint {
+                                               slave-mode;
+                                               remote-endpoint = <&etm1_out>;
+                                       };
+                               };
+                               port@4 {
+                                       reg = <4>;
+                                       funnel_in4: endpoint {
+                                               slave-mode;
+                                               remote-endpoint = <&etm2_out>;
+                                       };
+                               };
+                               port@5 {
+                                       reg = <5>;
+                                       funnel_in5: endpoint {
+                                               slave-mode;
+                                               remote-endpoint = <&etm3_out>;
+                                       };
+                               };
+                               port@8 {
+                                       reg = <0>;
+                                       funnel_out: endpoint {
+                                               remote-endpoint = <&replicator_in>;
+                                       };
+                               };
+                       };
+               };
+
+               etm@1a1c000 {
+                       compatible = "arm,coresight-etm3x", "arm,primecell";
+                       reg = <0x1a1c000 0x1000>;
+
+                       clocks = <&rpmcc RPM_QDSS_CLK>;
+                       clock-names = "apb_pclk";
+
+                       cpu = <&CPU0>;
+
+                       port {
+                               etm0_out: endpoint {
+                                       remote-endpoint = <&funnel_in0>;
+                               };
+                       };
+               };
+
+               etm@1a1d000 {
+                       compatible = "arm,coresight-etm3x", "arm,primecell";
+                       reg = <0x1a1d000 0x1000>;
+
+                       clocks = <&rpmcc RPM_QDSS_CLK>;
+                       clock-names = "apb_pclk";
+
+                       cpu = <&CPU1>;
+
+                       port {
+                               etm1_out: endpoint {
+                                       remote-endpoint = <&funnel_in1>;
+                               };
+                       };
+               };
+
+               etm@1a1e000 {
+                       compatible = "arm,coresight-etm3x", "arm,primecell";
+                       reg = <0x1a1e000 0x1000>;
+
+                       clocks = <&rpmcc RPM_QDSS_CLK>;
+                       clock-names = "apb_pclk";
+
+                       cpu = <&CPU2>;
+
+                       port {
+                               etm2_out: endpoint {
+                                       remote-endpoint = <&funnel_in4>;
+                               };
+                       };
+               };
+
+               etm@1a1f000 {
+                       compatible = "arm,coresight-etm3x", "arm,primecell";
+                       reg = <0x1a1f000 0x1000>;
+
+                       clocks = <&rpmcc RPM_QDSS_CLK>;
+                       clock-names = "apb_pclk";
+
+                       cpu = <&CPU3>;
+
+                       port {
+                               etm3_out: endpoint {
+                                       remote-endpoint = <&funnel_in5>;
+                               };
+                       };
+               };
        };
 };
 #include "qcom-apq8064-pins.dtsi"
index 2e375576ffd06edc7c1f83863df13e6f17f571e4..76f4e8921d58f8a1a1c6bf2ab42edc9c839a8324 100644 (file)
@@ -65,13 +65,13 @@ clocks {
                cxo_board {
                        compatible = "fixed-clock";
                        #clock-cells = <0>;
-                       clock-frequency = <19200000>;
+                       clock-frequency = <25000000>;
                };
 
                pxo_board {
                        compatible = "fixed-clock";
                        #clock-cells = <0>;
-                       clock-frequency = <27000000>;
+                       clock-frequency = <25000000>;
                };
 
                sleep_clk: sleep_clk {
index 23de764558abef44b67570c6001450595f02906e..1adc04978a47fe575ddd30e601f58fb4c5663e1a 100644 (file)
@@ -48,7 +48,7 @@ sdcc3: sdcc@12180000 {
        };
 };
 
-&pmicintc {
+&pm8058 {
        keypad@148 {
                linux,keymap = <
                        MATRIX_KEY(0, 0, KEY_FN_F1)
index 4d828f810746872da14fe49c204462c3b11c983e..91c9a62ae7250184147c9750e417d39f54915827 100644 (file)
@@ -163,7 +163,7 @@ qcom,ssbi@500000 {
                        reg = <0x500000 0x1000>;
                        qcom,controller-type = "pmic-arbiter";
 
-                       pmicintc: pmic@0 {
+                       pm8058: pmic@0 {
                                compatible = "qcom,pm8058";
                                interrupt-parent = <&tlmm>;
                                interrupts = <88 8>;
@@ -176,7 +176,7 @@ pm8058_gpio: gpio@150 {
                                        compatible = "qcom,pm8058-gpio",
                                                     "qcom,ssbi-gpio";
                                        reg = <0x150>;
-                                       interrupt-parent = <&pmicintc>;
+                                       interrupt-parent = <&pm8058>;
                                        interrupts = <192 IRQ_TYPE_NONE>,
                                                     <193 IRQ_TYPE_NONE>,
                                                     <194 IRQ_TYPE_NONE>,
@@ -232,7 +232,7 @@ pm8058_mpps: mpps@50 {
                                        reg = <0x50>;
                                        gpio-controller;
                                        #gpio-cells = <2>;
-                                       interrupt-parent = <&pmicintc>;
+                                       interrupt-parent = <&pm8058>;
                                        interrupts =
                                        <128 IRQ_TYPE_NONE>,
                                        <129 IRQ_TYPE_NONE>,
@@ -251,7 +251,7 @@ pm8058_mpps: mpps@50 {
                                pwrkey@1c {
                                        compatible = "qcom,pm8058-pwrkey";
                                        reg = <0x1c>;
-                                       interrupt-parent = <&pmicintc>;
+                                       interrupt-parent = <&pm8058>;
                                        interrupts = <50 1>, <51 1>;
                                        debounce = <15625>;
                                        pull-up;
@@ -260,7 +260,7 @@ pwrkey@1c {
                                keypad@148 {
                                        compatible = "qcom,pm8058-keypad";
                                        reg = <0x148>;
-                                       interrupt-parent = <&pmicintc>;
+                                       interrupt-parent = <&pm8058>;
                                        interrupts = <74 1>, <75 1>;
                                        debounce = <15>;
                                        scan-delay = <32>;
@@ -270,7 +270,7 @@ keypad@148 {
                                rtc@1e8 {
                                        compatible = "qcom,pm8058-rtc";
                                        reg = <0x1e8>;
-                                       interrupt-parent = <&pmicintc>;
+                                       interrupt-parent = <&pm8058>;
                                        interrupts = <39 1>;
                                        allow-set-time;
                                };
index e7c1577d56f4812663afc7bbb4ad262743139bf5..96c853bab8babe174169768fba59ce8951d10549 100644 (file)
@@ -413,6 +413,14 @@ pin {
        dma-controller@f9944000 {
                qcom,controlled-remotely;
        };
+
+       usb-phy@f9a55000 {
+               status = "ok";
+       };
+
+       usb@f9a55000 {
+               status = "ok";
+       };
 };
 
 &spmi_bus {
index 49d579f288654aace0b7a2b630286a10322f8136..d3e1a61b86710ee017adec7c243e5ce2878d0252 100644 (file)
@@ -3,6 +3,7 @@
 #include <dt-bindings/interrupt-controller/arm-gic.h>
 #include <dt-bindings/clock/qcom,gcc-msm8974.h>
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/reset/qcom,gcc-msm8974.h>
 #include "skeleton.dtsi"
 
 / {
@@ -30,7 +31,7 @@ reserved@0d200000 {
                        no-map;
                };
 
-               adsp@0dc00000 {
+               adsp_region: adsp@0dc00000 {
                        reg = <0x0dc00000 0x1900000>;
                        no-map;
                };
@@ -59,11 +60,6 @@ rmtfs@0fd80000 {
                        reg = <0x0fd80000 0x180000>;
                        no-map;
                };
-
-               unused@0ff00000 {
-                       reg = <0x0ff00000 0x10100000>;
-                       no-map;
-               };
        };
 
        cpus {
@@ -242,6 +238,24 @@ timer {
                clock-frequency = <19200000>;
        };
 
+       adsp-pil {
+               compatible = "qcom,msm8974-adsp-pil";
+
+               interrupts-extended = <&intc 0 162 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";
+
+               cx-supply = <&pm8841_s2>;
+
+               memory-region = <&adsp_region>;
+
+               qcom,smem-states = <&adsp_smp2p_out 0>;
+               qcom,smem-state-names = "stop";
+       };
+
        smem {
                compatible = "qcom,smem";
 
@@ -251,6 +265,31 @@ smem {
                hwlocks = <&tcsr_mutex 3>;
        };
 
+       smp2p-adsp {
+               compatible = "qcom,smp2p";
+               qcom,smem = <443>, <429>;
+
+               interrupt-parent = <&intc>;
+               interrupts = <0 158 IRQ_TYPE_EDGE_RISING>;
+
+               qcom,ipc = <&apcs 8 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-modem {
                compatible = "qcom,smp2p";
                qcom,smem = <435>, <428>;
@@ -655,11 +694,56 @@ blsp2_dma: dma-controller@f9944000 {
                        #dma-cells = <1>;
                        qcom,ee = <0>;
                };
+
+               usb1_phy: usb-phy@f9a55000 {
+                       compatible = "qcom,usb-otg-snps";
+
+                       reg = <0xf9a55000 0x400>;
+                       interrupts-extended = <&intc 0 134 0>, <&intc 0 140 0>,
+                               <&spmi_bus 0 0x9 0 0>;
+                       interrupt-names = "core_irq", "async_irq", "pmic_id_irq";
+
+                       vddcx-supply = <&pm8841_s2>;
+                       v3p3-supply = <&pm8941_l24>;
+                       v1p8-supply = <&pm8941_l6>;
+
+                       dr_mode = "otg";
+                       qcom,phy-init-sequence = <0x63 0x81 0xfffffff>;
+                       qcom,otg-control = <1>;
+                       qcom,phy-num = <0>;
+
+                       resets = <&gcc GCC_USB2A_PHY_BCR>, <&gcc GCC_USB_HS_BCR>;
+                       reset-names = "phy", "link";
+
+                       clocks = <&gcc GCC_XO_CLK>, <&gcc GCC_USB_HS_SYSTEM_CLK>,
+                               <&gcc GCC_USB_HS_AHB_CLK>;
+                       clock-names = "phy", "core", "iface";
+
+                       status = "disabled";
+               };
+
+               usb@f9a55000 {
+                       compatible = "qcom,ci-hdrc";
+                       reg = <0xf9a55000 0x400>;
+                       dr_mode = "otg";
+                       interrupts = <0 134 0>, <0 140 0>;
+                       interrupt-names = "core_irq", "async_irq";
+                       usb-phy = <&usb1_phy>;
+
+                       status = "disabled";
+               };
        };
 
        smd {
                compatible = "qcom,smd";
 
+               adsp {
+                       interrupts = <0 156 IRQ_TYPE_EDGE_RISING>;
+
+                       qcom,ipc = <&apcs 8 8>;
+                       qcom,smd-edge = <1>;
+               };
+
                modem {
                        interrupts = <0 25 IRQ_TYPE_EDGE_RISING>;
 
index dd4418195ca68fa64c9d6e234d305d537118e71a..02b59c5b3c53a6d25a42bf508a1ca631b458f232 100644 (file)
@@ -61,6 +61,14 @@ &sdhi1 {
        status = "okay";
 };
 
+&ostm0 {
+       status = "okay";
+};
+
+&ostm1 {
+       status = "okay";
+};
+
 &scif2 {
        status = "okay";
 };
index 3dd427d68c83901b390954755cce213d3c56e974..b8aa256bd51533ba4ba7484aa02d26738c040535 100644 (file)
@@ -108,6 +108,15 @@ R7S72100_CLK_SCIF4 R7S72100_CLK_SCIF5 R7S72100_CLK_SCIF6 R7S72100_CLK_SCIF7
                        clock-output-names = "scif0", "scif1", "scif2", "scif3", "scif4", "scif5", "scif6", "scif7";
                };
 
+               mstp5_clks: mstp5_clks@fcfe0428 {
+                       #clock-cells = <1>;
+                       compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
+                       reg = <0xfcfe0428 4>;
+                       clocks = <&p0_clk>, <&p0_clk>;
+                       clock-indices = <R7S72100_CLK_OSTM0 R7S72100_CLK_OSTM1>;
+                       clock-output-names = "ostm0", "ostm1";
+               };
+
                mstp7_clks: mstp7_clks@fcfe0430 {
                        #clock-cells = <1>;
                        compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
@@ -466,6 +475,7 @@ mmcif: mmc@e804c800 {
                              GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH
                              GIC_SPI 267 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp8_clks R7S72100_CLK_MMCIF>;
+               power-domains = <&cpg_clocks>;
                reg-io-width = <4>;
                bus-width = <8>;
                status = "disabled";
@@ -496,4 +506,22 @@ GIC_SPI 274 IRQ_TYPE_LEVEL_HIGH
                cap-sdio-irq;
                status = "disabled";
        };
+
+       ostm0: timer@fcfec000 {
+               compatible = "renesas,r7s72100-ostm", "renesas,ostm";
+               reg = <0xfcfec000 0x30>;
+               interrupts = <GIC_SPI 102 IRQ_TYPE_EDGE_RISING>;
+               clocks = <&mstp5_clks R7S72100_CLK_OSTM0>;
+               power-domains = <&cpg_clocks>;
+               status = "disabled";
+       };
+
+       ostm1: timer@fcfec400 {
+               compatible = "renesas,r7s72100-ostm", "renesas,ostm";
+               reg = <0xfcfec400 0x30>;
+               interrupts = <GIC_SPI 103 IRQ_TYPE_EDGE_RISING>;
+               clocks = <&mstp5_clks R7S72100_CLK_OSTM1>;
+               power-domains = <&cpg_clocks>;
+               status = "disabled";
+       };
 };
index 53183ffe04c11c1176ec4bd1c6b099aea20aec92..00eb9a7114dc2621b3bff2a94b1e3e2a4b4c0e6e 100644 (file)
@@ -440,7 +440,7 @@ sdhi2: sd@ee140000 {
        };
 
        mmcif0: mmc@ee200000 {
-               compatible = "renesas,sh-mmcif";
+               compatible = "renesas,mmcif-r8a73a4", "renesas,sh-mmcif";
                reg = <0 0xee200000 0 0x80>;
                interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A73A4_CLK_MMCIF0>;
@@ -450,7 +450,7 @@ mmcif0: mmc@ee200000 {
        };
 
        mmcif1: mmc@ee220000 {
-               compatible = "renesas,sh-mmcif";
+               compatible = "renesas,mmcif-r8a73a4", "renesas,sh-mmcif";
                reg = <0 0xee220000 0 0x80>;
                interrupts = <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A73A4_CLK_MMCIF1>;
@@ -465,7 +465,7 @@ gic: interrupt-controller@f1001000 {
                #address-cells = <0>;
                interrupt-controller;
                reg = <0 0xf1001000 0 0x1000>,
-                       <0 0xf1002000 0 0x1000>,
+                       <0 0xf1002000 0 0x2000>,
                        <0 0xf1004000 0 0x2000>,
                        <0 0xf1006000 0 0x2000>;
                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
index 216cb1f37f87de9a89462b34a4d8946e74943203..d8393b97768bf8e9a6f53fdc44fe2211b64e3705 100644 (file)
@@ -55,11 +55,14 @@ gic: interrupt-controller@f1001000 {
                        #address-cells = <0>;
                        interrupt-controller;
                        reg = <0 0xf1001000 0 0x1000>,
-                             <0 0xf1002000 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 R8A7743_PD_ALWAYS_ON>;
                };
 
                irqc: interrupt-controller@e61c0000 {
@@ -102,10 +105,9 @@ cpg: clock-controller@e6150000 {
                        #power-domain-cells = <0>;
                };
 
-               sysc: system-controller@e6180000 {
-                       compatible = "renesas,r8a7743-sysc";
-                       reg = <0 0xe6180000 0 0x200>;
-                       #power-domain-cells = <1>;
+               prr: chipid@ff000044 {
+                       compatible = "renesas,prr";
+                       reg = <0 0xff000044 0 4>;
                };
 
                rst: reset-controller@e6160000 {
@@ -113,6 +115,12 @@ rst: reset-controller@e6160000 {
                        reg = <0 0xe6160000 0 0x100>;
                };
 
+               sysc: system-controller@e6180000 {
+                       compatible = "renesas,r8a7743-sysc";
+                       reg = <0 0xe6180000 0 0x200>;
+                       #power-domain-cells = <1>;
+               };
+
                dmac0: dma-controller@e6700000 {
                        compatible = "renesas,dmac-r8a7743",
                                     "renesas,rcar-dmac";
index 0b2e2f37150fdc6802311311da05cd482e8aae13..1f65ff68a469d9f35cb419726bc67bd4254ab9dd 100644 (file)
@@ -55,11 +55,14 @@ gic: interrupt-controller@f1001000 {
                        #address-cells = <0>;
                        interrupt-controller;
                        reg = <0 0xf1001000 0 0x1000>,
-                             <0 0xf1002000 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 R8A7745_PD_ALWAYS_ON>;
                };
 
                irqc: interrupt-controller@e61c0000 {
@@ -102,10 +105,9 @@ cpg: clock-controller@e6150000 {
                        #power-domain-cells = <0>;
                };
 
-               sysc: system-controller@e6180000 {
-                       compatible = "renesas,r8a7745-sysc";
-                       reg = <0 0xe6180000 0 0x200>;
-                       #power-domain-cells = <1>;
+               prr: chipid@ff000044 {
+                       compatible = "renesas,prr";
+                       reg = <0 0xff000044 0 4>;
                };
 
                rst: reset-controller@e6160000 {
@@ -113,6 +115,12 @@ rst: reset-controller@e6160000 {
                        reg = <0 0xe6160000 0 0x100>;
                };
 
+               sysc: system-controller@e6180000 {
+                       compatible = "renesas,r8a7745-sysc";
+                       reg = <0 0xe6180000 0 0x200>;
+                       #power-domain-cells = <1>;
+               };
+
                dmac0: dma-controller@e6700000 {
                        compatible = "renesas,dmac-r8a7745",
                                     "renesas,rcar-dmac";
index d0db998effc8e2d8e4dde10e4c28794f20560903..1e93c94a9eace170c37387c8734e0087d0d9a0be 100644 (file)
@@ -150,7 +150,7 @@ pfc: pfc@fffc0000 {
        i2c0: i2c@ffc70000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7778";
+               compatible = "renesas,i2c-r8a7778", "renesas,rcar-gen1-i2c";
                reg = <0xffc70000 0x1000>;
                interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp0_clks R8A7778_CLK_I2C0>;
@@ -161,7 +161,7 @@ i2c0: i2c@ffc70000 {
        i2c1: i2c@ffc71000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7778";
+               compatible = "renesas,i2c-r8a7778", "renesas,rcar-gen1-i2c";
                reg = <0xffc71000 0x1000>;
                interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp0_clks R8A7778_CLK_I2C1>;
@@ -172,7 +172,7 @@ i2c1: i2c@ffc71000 {
        i2c2: i2c@ffc72000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7778";
+               compatible = "renesas,i2c-r8a7778", "renesas,rcar-gen1-i2c";
                reg = <0xffc72000 0x1000>;
                interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp0_clks R8A7778_CLK_I2C2>;
@@ -183,7 +183,7 @@ i2c2: i2c@ffc72000 {
        i2c3: i2c@ffc73000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7778";
+               compatible = "renesas,i2c-r8a7778", "renesas,rcar-gen1-i2c";
                reg = <0xffc73000 0x1000>;
                interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp0_clks R8A7778_CLK_I2C3>;
@@ -369,7 +369,7 @@ scif5: serial@ffe45000 {
        };
 
        mmcif: mmc@ffe4e000 {
-               compatible = "renesas,sh-mmcif";
+               compatible = "renesas,mmcif-r8a7778", "renesas,sh-mmcif";
                reg = <0xffe4e000 0x100>;
                interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A7778_CLK_MMC>;
index 676151b70185d1a58488342774e8db956dd33f9f..89c5b24a3d03f0492a432532de68f0bc31e87cb5 100644 (file)
@@ -216,6 +216,10 @@ hspi0_pins: hspi0 {
        };
 };
 
+&sata {
+       status = "okay";
+};
+
 &scif2 {
        pinctrl-0 = <&scif2_pins>;
        pinctrl-names = "default";
index 55a7c1e37c57809528b29fb49a4e3f1f1a458152..ae2d9a9c65af43c047f554cd646d99c714cef5be 100644 (file)
@@ -173,7 +173,7 @@ GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH
        i2c0: i2c@ffc70000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7779";
+               compatible = "renesas,i2c-r8a7779", "renesas,rcar-gen1-i2c";
                reg = <0xffc70000 0x1000>;
                interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp0_clks R8A7779_CLK_I2C0>;
@@ -184,7 +184,7 @@ i2c0: i2c@ffc70000 {
        i2c1: i2c@ffc71000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7779";
+               compatible = "renesas,i2c-r8a7779", "renesas,rcar-gen1-i2c";
                reg = <0xffc71000 0x1000>;
                interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp0_clks R8A7779_CLK_I2C1>;
@@ -195,7 +195,7 @@ i2c1: i2c@ffc71000 {
        i2c2: i2c@ffc72000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7779";
+               compatible = "renesas,i2c-r8a7779", "renesas,rcar-gen1-i2c";
                reg = <0xffc72000 0x1000>;
                interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp0_clks R8A7779_CLK_I2C2>;
@@ -206,7 +206,7 @@ i2c2: i2c@ffc72000 {
        i2c3: i2c@ffc73000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7779";
+               compatible = "renesas,i2c-r8a7779", "renesas,rcar-gen1-i2c";
                reg = <0xffc73000 0x1000>;
                interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp0_clks R8A7779_CLK_I2C3>;
@@ -347,6 +347,7 @@ sata: sata@fc600000 {
                interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp1_clks R8A7779_CLK_SATA>;
                power-domains = <&sysc R8A7779_PD_ALWAYS_ON>;
+               status = "disabled";
        };
 
        sdhi0: sd@ffe4c000 {
index 0c8900d4b8242ac93c24f120692ddbfd05aae20a..6d10450de6d7b97fcd287ba965cd3f331e66dc85 100644 (file)
@@ -183,7 +183,7 @@ gic: interrupt-controller@f1001000 {
                #address-cells = <0>;
                interrupt-controller;
                reg = <0 0xf1001000 0 0x1000>,
-                       <0 0xf1002000 0 0x1000>,
+                       <0 0xf1002000 0 0x2000>,
                        <0 0xf1004000 0 0x2000>,
                        <0 0xf1006000 0 0x2000>;
                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
@@ -480,7 +480,7 @@ usb_dmac1: dma-controller@e65b0000 {
        i2c0: i2c@e6508000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7790";
+               compatible = "renesas,i2c-r8a7790", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6508000 0 0x40>;
                interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7790_CLK_I2C0>;
@@ -492,7 +492,7 @@ i2c0: i2c@e6508000 {
        i2c1: i2c@e6518000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7790";
+               compatible = "renesas,i2c-r8a7790", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6518000 0 0x40>;
                interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7790_CLK_I2C1>;
@@ -504,7 +504,7 @@ i2c1: i2c@e6518000 {
        i2c2: i2c@e6530000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7790";
+               compatible = "renesas,i2c-r8a7790", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6530000 0 0x40>;
                interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7790_CLK_I2C2>;
@@ -516,7 +516,7 @@ i2c2: i2c@e6530000 {
        i2c3: i2c@e6540000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7790";
+               compatible = "renesas,i2c-r8a7790", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6540000 0 0x40>;
                interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7790_CLK_I2C3>;
@@ -528,7 +528,8 @@ i2c3: i2c@e6540000 {
        iic0: i2c@e6500000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,iic-r8a7790", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7790", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe6500000 0 0x425>;
                interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A7790_CLK_IIC0>;
@@ -542,7 +543,8 @@ iic0: i2c@e6500000 {
        iic1: i2c@e6510000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,iic-r8a7790", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7790", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe6510000 0 0x425>;
                interrupts = <GIC_SPI 175 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A7790_CLK_IIC1>;
@@ -556,7 +558,8 @@ iic1: i2c@e6510000 {
        iic2: i2c@e6520000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,iic-r8a7790", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7790", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe6520000 0 0x425>;
                interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A7790_CLK_IIC2>;
@@ -570,7 +573,8 @@ iic2: i2c@e6520000 {
        iic3: i2c@e60b0000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,iic-r8a7790", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7790", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe60b0000 0 0x425>;
                interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7790_CLK_IICDVFS>;
@@ -883,7 +887,8 @@ hsusb: usb@e6590000 {
        };
 
        usbphy: usb-phy@e6590100 {
-               compatible = "renesas,usb-phy-r8a7790";
+               compatible = "renesas,usb-phy-r8a7790",
+                            "renesas,rcar-gen2-usb-phy";
                reg = <0 0xe6590100 0 0x100>;
                #address-cells = <1>;
                #size-cells = <0>;
@@ -1503,7 +1508,8 @@ qspi: spi@e6b10000 {
        };
 
        msiof0: spi@e6e20000 {
-               compatible = "renesas,msiof-r8a7790";
+               compatible = "renesas,msiof-r8a7790",
+                            "renesas,rcar-gen2-msiof";
                reg = <0 0xe6e20000 0 0x0064>;
                interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp0_clks R8A7790_CLK_MSIOF0>;
@@ -1517,7 +1523,8 @@ msiof0: spi@e6e20000 {
        };
 
        msiof1: spi@e6e10000 {
-               compatible = "renesas,msiof-r8a7790";
+               compatible = "renesas,msiof-r8a7790",
+                            "renesas,rcar-gen2-msiof";
                reg = <0 0xe6e10000 0 0x0064>;
                interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp2_clks R8A7790_CLK_MSIOF1>;
@@ -1531,7 +1538,8 @@ msiof1: spi@e6e10000 {
        };
 
        msiof2: spi@e6e00000 {
-               compatible = "renesas,msiof-r8a7790";
+               compatible = "renesas,msiof-r8a7790",
+                            "renesas,rcar-gen2-msiof";
                reg = <0 0xe6e00000 0 0x0064>;
                interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp2_clks R8A7790_CLK_MSIOF2>;
@@ -1545,7 +1553,8 @@ msiof2: spi@e6e00000 {
        };
 
        msiof3: spi@e6c90000 {
-               compatible = "renesas,msiof-r8a7790";
+               compatible = "renesas,msiof-r8a7790",
+                            "renesas,rcar-gen2-msiof";
                reg = <0 0xe6c90000 0 0x0064>;
                interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp2_clks R8A7790_CLK_MSIOF3>;
index 87214668d70f12ff9fff7ee7ba5c6861fbd4ad48..9f9e48511836ddc6c79951d327d10dfc26da7a71 100644 (file)
@@ -114,7 +114,7 @@ gic: interrupt-controller@f1001000 {
                #address-cells = <0>;
                interrupt-controller;
                reg = <0 0xf1001000 0 0x1000>,
-                       <0 0xf1002000 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)>;
@@ -444,7 +444,7 @@ usb_dmac1: dma-controller@e65b0000 {
        i2c0: i2c@e6508000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7791";
+               compatible = "renesas,i2c-r8a7791", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6508000 0 0x40>;
                interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7791_CLK_I2C0>;
@@ -456,7 +456,7 @@ i2c0: i2c@e6508000 {
        i2c1: i2c@e6518000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7791";
+               compatible = "renesas,i2c-r8a7791", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6518000 0 0x40>;
                interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7791_CLK_I2C1>;
@@ -468,7 +468,7 @@ i2c1: i2c@e6518000 {
        i2c2: i2c@e6530000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7791";
+               compatible = "renesas,i2c-r8a7791", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6530000 0 0x40>;
                interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7791_CLK_I2C2>;
@@ -480,7 +480,7 @@ i2c2: i2c@e6530000 {
        i2c3: i2c@e6540000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7791";
+               compatible = "renesas,i2c-r8a7791", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6540000 0 0x40>;
                interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7791_CLK_I2C3>;
@@ -492,7 +492,7 @@ i2c3: i2c@e6540000 {
        i2c4: i2c@e6520000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7791";
+               compatible = "renesas,i2c-r8a7791", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6520000 0 0x40>;
                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7791_CLK_I2C4>;
@@ -505,7 +505,7 @@ i2c5: i2c@e6528000 {
                /* doesn't need pinmux */
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7791";
+               compatible = "renesas,i2c-r8a7791", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6528000 0 0x40>;
                interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7791_CLK_I2C5>;
@@ -518,7 +518,8 @@ i2c6: i2c@e60b0000 {
                /* doesn't need pinmux */
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,iic-r8a7791", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7791", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe60b0000 0 0x425>;
                interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7791_CLK_IICDVFS>;
@@ -532,7 +533,8 @@ i2c6: i2c@e60b0000 {
        i2c7: i2c@e6500000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,iic-r8a7791", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7791", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe6500000 0 0x425>;
                interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A7791_CLK_IIC0>;
@@ -546,7 +548,8 @@ i2c7: i2c@e6500000 {
        i2c8: i2c@e6510000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,iic-r8a7791", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7791", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe6510000 0 0x425>;
                interrupts = <GIC_SPI 175 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A7791_CLK_IIC1>;
@@ -934,7 +937,8 @@ hsusb: usb@e6590000 {
        };
 
        usbphy: usb-phy@e6590100 {
-               compatible = "renesas,usb-phy-r8a7791";
+               compatible = "renesas,usb-phy-r8a7791",
+                            "renesas,rcar-gen2-usb-phy";
                reg = <0 0xe6590100 0 0x100>;
                #address-cells = <1>;
                #size-cells = <0>;
@@ -1517,7 +1521,8 @@ qspi: spi@e6b10000 {
        };
 
        msiof0: spi@e6e20000 {
-               compatible = "renesas,msiof-r8a7791";
+               compatible = "renesas,msiof-r8a7791",
+                            "renesas,rcar-gen2-msiof";
                reg = <0 0xe6e20000 0 0x0064>;
                interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp0_clks R8A7791_CLK_MSIOF0>;
@@ -1531,7 +1536,8 @@ msiof0: spi@e6e20000 {
        };
 
        msiof1: spi@e6e10000 {
-               compatible = "renesas,msiof-r8a7791";
+               compatible = "renesas,msiof-r8a7791",
+                            "renesas,rcar-gen2-msiof";
                reg = <0 0xe6e10000 0 0x0064>;
                interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp2_clks R8A7791_CLK_MSIOF1>;
@@ -1545,7 +1551,8 @@ msiof1: spi@e6e10000 {
        };
 
        msiof2: spi@e6e00000 {
-               compatible = "renesas,msiof-r8a7791";
+               compatible = "renesas,msiof-r8a7791",
+                            "renesas,rcar-gen2-msiof";
                reg = <0 0xe6e00000 0 0x0064>;
                interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp2_clks R8A7791_CLK_MSIOF2>;
index 6ced3c1ec3770c70c53d6d0e0cacf43788fb7e23..8ecfda7a004ecb322b63e1fa0c8b3d1aa6851ca9 100644 (file)
@@ -88,7 +88,7 @@ gic: interrupt-controller@f1001000 {
                        #interrupt-cells = <3>;
                        interrupt-controller;
                        reg = <0 0xf1001000 0 0x1000>,
-                             <0 0xf1002000 0 0x1000>,
+                             <0 0xf1002000 0 0x2000>,
                              <0 0xf1004000 0 0x2000>,
                              <0 0xf1006000 0 0x2000>;
                        interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(2) |
@@ -498,7 +498,8 @@ avb: ethernet@e6800000 {
 
                /* I2C doesn't need pinmux */
                i2c0: i2c@e6508000 {
-                       compatible = "renesas,i2c-r8a7792";
+                       compatible = "renesas,i2c-r8a7792",
+                                    "renesas,rcar-gen2-i2c";
                        reg = <0 0xe6508000 0 0x40>;
                        interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&mstp9_clks R8A7792_CLK_I2C0>;
@@ -510,7 +511,8 @@ i2c0: i2c@e6508000 {
                };
 
                i2c1: i2c@e6518000 {
-                       compatible = "renesas,i2c-r8a7792";
+                       compatible = "renesas,i2c-r8a7792",
+                                    "renesas,rcar-gen2-i2c";
                        reg = <0 0xe6518000 0 0x40>;
                        interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&mstp9_clks R8A7792_CLK_I2C1>;
@@ -522,7 +524,8 @@ i2c1: i2c@e6518000 {
                };
 
                i2c2: i2c@e6530000 {
-                       compatible = "renesas,i2c-r8a7792";
+                       compatible = "renesas,i2c-r8a7792",
+                                    "renesas,rcar-gen2-i2c";
                        reg = <0 0xe6530000 0 0x40>;
                        interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&mstp9_clks R8A7792_CLK_I2C2>;
@@ -534,7 +537,8 @@ i2c2: i2c@e6530000 {
                };
 
                i2c3: i2c@e6540000 {
-                       compatible = "renesas,i2c-r8a7792";
+                       compatible = "renesas,i2c-r8a7792",
+                                    "renesas,rcar-gen2-i2c";
                        reg = <0 0xe6540000 0 0x40>;
                        interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&mstp9_clks R8A7792_CLK_I2C3>;
@@ -546,7 +550,8 @@ i2c3: i2c@e6540000 {
                };
 
                i2c4: i2c@e6520000 {
-                       compatible = "renesas,i2c-r8a7792";
+                       compatible = "renesas,i2c-r8a7792",
+                                    "renesas,rcar-gen2-i2c";
                        reg = <0 0xe6520000 0 0x40>;
                        interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&mstp9_clks R8A7792_CLK_I2C4>;
@@ -558,7 +563,8 @@ i2c4: i2c@e6520000 {
                };
 
                i2c5: i2c@e6528000 {
-                       compatible = "renesas,i2c-r8a7792";
+                       compatible = "renesas,i2c-r8a7792",
+                                    "renesas,rcar-gen2-i2c";
                        reg = <0 0xe6528000 0 0x40>;
                        interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&mstp9_clks R8A7792_CLK_I2C5>;
@@ -585,7 +591,8 @@ qspi: spi@e6b10000 {
                };
 
                msiof0: spi@e6e20000 {
-                       compatible = "renesas,msiof-r8a7792";
+                       compatible = "renesas,msiof-r8a7792",
+                                    "renesas,rcar-gen2-msiof";
                        reg = <0 0xe6e20000 0 0x0064>;
                        interrupts = <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&mstp0_clks R8A7792_CLK_MSIOF0>;
@@ -599,7 +606,8 @@ msiof0: spi@e6e20000 {
                };
 
                msiof1: spi@e6e10000 {
-                       compatible = "renesas,msiof-r8a7792";
+                       compatible = "renesas,msiof-r8a7792",
+                                    "renesas,rcar-gen2-msiof";
                        reg = <0 0xe6e10000 0 0x0064>;
                        interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&mstp2_clks R8A7792_CLK_MSIOF1>;
index dc311eba4444393c0a32a52293629f7c9aee9d79..92fff07c5e2bfe13824f6637351040145d251c84 100644 (file)
@@ -538,6 +538,27 @@ eeprom@50 {
        };
 };
 
+&i2c6 {
+       status = "okay";
+       clock-frequency = <100000>;
+
+       pmic@58 {
+               compatible = "dlg,da9063";
+               reg = <0x58>;
+               interrupt-parent = <&irqc0>;
+               interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
+               interrupt-controller;
+
+               rtc {
+                       compatible = "dlg,da9063-rtc";
+               };
+
+               wdt {
+                       compatible = "dlg,da9063-watchdog";
+               };
+       };
+};
+
 &rcar_sound {
        pinctrl-0 = <&sound_pins &sound_clk_pins>;
        pinctrl-names = "default";
index 2fb527ca0b15edaa89782f636a9ed8155071bc50..48ce21c5e8db3c52990026226d85852cfec1e1a6 100644 (file)
@@ -105,7 +105,7 @@ gic: interrupt-controller@f1001000 {
                #address-cells = <0>;
                interrupt-controller;
                reg = <0 0xf1001000 0 0x1000>,
-                       <0 0xf1002000 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)>;
@@ -411,7 +411,7 @@ GIC_SPI 344 IRQ_TYPE_LEVEL_HIGH
        i2c0: i2c@e6508000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7793";
+               compatible = "renesas,i2c-r8a7793", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6508000 0 0x40>;
                interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7793_CLK_I2C0>;
@@ -423,7 +423,7 @@ i2c0: i2c@e6508000 {
        i2c1: i2c@e6518000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7793";
+               compatible = "renesas,i2c-r8a7793", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6518000 0 0x40>;
                interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7793_CLK_I2C1>;
@@ -435,7 +435,7 @@ i2c1: i2c@e6518000 {
        i2c2: i2c@e6530000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7793";
+               compatible = "renesas,i2c-r8a7793", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6530000 0 0x40>;
                interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7793_CLK_I2C2>;
@@ -447,7 +447,7 @@ i2c2: i2c@e6530000 {
        i2c3: i2c@e6540000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7793";
+               compatible = "renesas,i2c-r8a7793", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6540000 0 0x40>;
                interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7793_CLK_I2C3>;
@@ -459,7 +459,7 @@ i2c3: i2c@e6540000 {
        i2c4: i2c@e6520000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7793";
+               compatible = "renesas,i2c-r8a7793", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6520000 0 0x40>;
                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7793_CLK_I2C4>;
@@ -472,7 +472,7 @@ i2c5: i2c@e6528000 {
                /* doesn't need pinmux */
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,i2c-r8a7793";
+               compatible = "renesas,i2c-r8a7793", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6528000 0 0x40>;
                interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7793_CLK_I2C5>;
@@ -485,7 +485,8 @@ i2c6: i2c@e60b0000 {
                /* doesn't need pinmux */
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,iic-r8a7793", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7793", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe60b0000 0 0x425>;
                interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7793_CLK_IICDVFS>;
@@ -499,7 +500,8 @@ i2c6: i2c@e60b0000 {
        i2c7: i2c@e6500000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,iic-r8a7793", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7793", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe6500000 0 0x425>;
                interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A7793_CLK_IIC0>;
@@ -513,7 +515,8 @@ i2c7: i2c@e6500000 {
        i2c8: i2c@e6510000 {
                #address-cells = <1>;
                #size-cells = <0>;
-               compatible = "renesas,iic-r8a7793", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7793", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe6510000 0 0x425>;
                interrupts = <GIC_SPI 175 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A7793_CLK_IIC1>;
index fb576dba748cd97c5e7c253386bd0675ed6852ad..319c1069b7eeb722a79dd2efff221e7627907901 100644 (file)
@@ -71,7 +71,7 @@ gic: interrupt-controller@f1001000 {
                #address-cells = <0>;
                interrupt-controller;
                reg = <0 0xf1001000 0 0x1000>,
-                       <0 0xf1002000 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)>;
@@ -611,7 +611,7 @@ avb: ethernet@e6800000 {
 
        /* The memory map in the User's Manual maps the cores to bus numbers */
        i2c0: i2c@e6508000 {
-               compatible = "renesas,i2c-r8a7794";
+               compatible = "renesas,i2c-r8a7794", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6508000 0 0x40>;
                interrupts = <GIC_SPI 287 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7794_CLK_I2C0>;
@@ -623,7 +623,7 @@ i2c0: i2c@e6508000 {
        };
 
        i2c1: i2c@e6518000 {
-               compatible = "renesas,i2c-r8a7794";
+               compatible = "renesas,i2c-r8a7794", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6518000 0 0x40>;
                interrupts = <GIC_SPI 288 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7794_CLK_I2C1>;
@@ -635,7 +635,7 @@ i2c1: i2c@e6518000 {
        };
 
        i2c2: i2c@e6530000 {
-               compatible = "renesas,i2c-r8a7794";
+               compatible = "renesas,i2c-r8a7794", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6530000 0 0x40>;
                interrupts = <GIC_SPI 286 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7794_CLK_I2C2>;
@@ -647,7 +647,7 @@ i2c2: i2c@e6530000 {
        };
 
        i2c3: i2c@e6540000 {
-               compatible = "renesas,i2c-r8a7794";
+               compatible = "renesas,i2c-r8a7794", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6540000 0 0x40>;
                interrupts = <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7794_CLK_I2C3>;
@@ -659,7 +659,7 @@ i2c3: i2c@e6540000 {
        };
 
        i2c4: i2c@e6520000 {
-               compatible = "renesas,i2c-r8a7794";
+               compatible = "renesas,i2c-r8a7794", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6520000 0 0x40>;
                interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7794_CLK_I2C4>;
@@ -671,7 +671,7 @@ i2c4: i2c@e6520000 {
        };
 
        i2c5: i2c@e6528000 {
-               compatible = "renesas,i2c-r8a7794";
+               compatible = "renesas,i2c-r8a7794", "renesas,rcar-gen2-i2c";
                reg = <0 0xe6528000 0 0x40>;
                interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp9_clks R8A7794_CLK_I2C5>;
@@ -683,7 +683,8 @@ i2c5: i2c@e6528000 {
        };
 
        i2c6: i2c@e6500000 {
-               compatible = "renesas,iic-r8a7794", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7794", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe6500000 0 0x425>;
                interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A7794_CLK_IIC0>;
@@ -697,7 +698,8 @@ i2c6: i2c@e6500000 {
        };
 
        i2c7: i2c@e6510000 {
-               compatible = "renesas,iic-r8a7794", "renesas,rmobile-iic";
+               compatible = "renesas,iic-r8a7794", "renesas,rcar-gen2-iic",
+                            "renesas,rmobile-iic";
                reg = <0 0xe6510000 0 0x425>;
                interrupts = <GIC_SPI 175 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&mstp3_clks R8A7794_CLK_IIC1>;
@@ -878,7 +880,8 @@ hsusb: usb@e6590000 {
        };
 
        usbphy: usb-phy@e6590100 {
-               compatible = "renesas,usb-phy-r8a7794";
+               compatible = "renesas,usb-phy-r8a7794",
+                            "renesas,rcar-gen2-usb-phy";
                reg = <0 0xe6590100 0 0x100>;
                #address-cells = <1>;
                #size-cells = <0>;
index d7700235e0f5a0b16856116398528d1b897cfcf5..d6194bff7afe6e4c85f299918e99f7320a91adf7 100644 (file)
@@ -215,7 +215,7 @@ gic: interrupt-controller@32010000 {
                #address-cells = <0>;
 
                reg = <0x32011000 0x1000>,
-                     <0x32012000 0x1000>,
+                     <0x32012000 0x2000>,
                      <0x32014000 0x2000>,
                      <0x32016000 0x2000>;
                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
index 2f5f15524fbaec1d63193638948185405cc0ca05..c0953410121ba4c2494a52dfd3094371e960af21 100644 (file)
@@ -56,7 +56,7 @@ &emac {
        pinctrl-names = "default";
        pinctrl-0 = <&emac_xfer>, <&emac_mdio>;
        phy = <&phy0>;
-       phy-reset-gpios = <&gpio2 22 GPIO_ACTIVE_LOW>; /* PHY_RST */
+       phy-reset-gpios = <&gpio2 RK_PC6 GPIO_ACTIVE_LOW>; /* PHY_RST */
        phy-reset-duration = <10>; /* millisecond */
 
        status = "okay";
index 3de958ec29c0e618b019917a2e45b7235d4d730c..5726135b7f8a89e1ff0620205c667baaef7f5ea7 100644 (file)
@@ -55,7 +55,7 @@ leds: gpio-leds {
                compatible = "gpio-leds";
 
                work {
-                       gpios = <&gpio2 30 GPIO_ACTIVE_HIGH>;
+                       gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_HIGH>;
                        label = "kylin:red:led";
                        pinctrl-names = "default";
                        pinctrl-0 = <&led_ctl>;
@@ -74,9 +74,9 @@ sdio_pwrseq: sdio-pwrseq {
                 * - SDIO_RESET_L_WL_RST
                 * - SDIO_RESET_L_BT_EN
                 */
-               reset-gpios = <&gpio0 26 GPIO_ACTIVE_LOW>, /* WL_REG_ON */
-                             <&gpio0 27 GPIO_ACTIVE_LOW>, /* WL_RST */
-                             <&gpio2  GPIO_ACTIVE_LOW>; /* BT_EN */
+               reset-gpios = <&gpio0 RK_PD2 GPIO_ACTIVE_LOW>, /* WL_REG_ON */
+                             <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>, /* WL_RST */
+                             <&gpio2 RK_PB1 GPIO_ACTIVE_LOW>; /* BT_EN */
        };
 
        sound {
@@ -121,7 +121,7 @@ &emac {
        pinctrl-names = "default";
        pinctrl-0 = <&emac_xfer>, <&emac_mdio>;
        phy = <&phy0>;
-       phy-reset-gpios = <&gpio2 22 GPIO_ACTIVE_LOW>; /* PHY_RST */
+       phy-reset-gpios = <&gpio2 RK_PC6 GPIO_ACTIVE_LOW>; /* PHY_RST */
        phy-reset-duration = <10>; /* millisecond */
 
        status = "okay";
@@ -148,7 +148,7 @@ rk808: pmic@1b {
                compatible = "rockchip,rk808";
                reg = <0x1b>;
                interrupt-parent = <&gpio2>;
-               interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PA2 IRQ_TYPE_LEVEL_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&pmic_int &global_pwroff>;
                rockchip,system-power-controller;
index 4ed49a243e5c73304a87a9df6965f6e7ea7f85f7..ff9b90bfaefde4a1ac69b4bea41c8092f67ada52 100644 (file)
@@ -189,7 +189,7 @@ gic: interrupt-controller@10139000 {
                #address-cells = <0>;
 
                reg = <0x10139000 0x1000>,
-                     <0x1013a000 0x1000>,
+                     <0x1013a000 0x2000>,
                      <0x1013c000 0x2000>,
                      <0x1013e000 0x2000>;
                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
index c0d8b5446ba78a529931f87d47e438379c8b3271..e1f5198723b22de9dc2cb47a9b46a1a72f11a134 100644 (file)
@@ -71,7 +71,7 @@ vcc_sd0: fixed-regulator {
                regulator-name = "sdmmc-supply";
                regulator-min-microvolt = <3000000>;
                regulator-max-microvolt = <3000000>;
-               gpio = <&gpio3 7 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio3 RK_PA7 GPIO_ACTIVE_LOW>;
                startup-delay-us = <100000>;
                vin-supply = <&vcc_io>;
        };
@@ -81,7 +81,7 @@ gpio-keys {
                autorepeat;
 
                power {
-                       gpios = <&gpio6 2 GPIO_ACTIVE_LOW>; /* GPIO6_A2 */
+                       gpios = <&gpio6 RK_PA2 GPIO_ACTIVE_LOW>; /* GPIO6_A2 */
                        linux,code = <KEY_POWER>;
                        label = "GPIO Key Power";
                        linux,input-type = <1>;
@@ -89,7 +89,7 @@ power {
                        debounce-interval = <100>;
                };
                volume-down {
-                       gpios = <&gpio4 21 GPIO_ACTIVE_LOW>; /* GPIO4_C5 */
+                       gpios = <&gpio4 RK_PC5 GPIO_ACTIVE_LOW>; /* GPIO4_C5 */
                        linux,code = <KEY_VOLUMEDOWN>;
                        label = "GPIO Key Vol-";
                        linux,input-type = <1>;
@@ -111,7 +111,7 @@ tps: tps@2d {
                reg = <0x2d>;
 
                interrupt-parent = <&gpio6>;
-               interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PA6 IRQ_TYPE_LEVEL_LOW>;
 
                vcc5-supply = <&vcc_io>;
                vcc6-supply = <&vcc_io>;
index 0a54c4beff8d94d2ae1fc65c170104791f472015..c6d92c25df42d5a673e991df58f86f566df73679 100644 (file)
@@ -69,7 +69,7 @@ vcc_sd0: sdmmc-regulator {
                regulator-name = "sdmmc-supply";
                regulator-min-microvolt = <3000000>;
                regulator-max-microvolt = <3000000>;
-               gpio = <&gpio3 7 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio3 RK_PA7 GPIO_ACTIVE_LOW>;
                startup-delay-us = <100000>;
                vin-supply = <&vcc_io>;
        };
@@ -91,7 +91,7 @@ tps: tps@2d {
                reg = <0x2d>;
 
                interrupt-parent = <&gpio6>;
-               interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
 
                vcc1-supply = <&vsys>;
                vcc2-supply = <&vsys>;
@@ -186,7 +186,7 @@ &emac {
        phy0: ethernet-phy@0 {
                reg = <0>;
                interrupt-parent = <&gpio1>;
-               interrupts = <26 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PD2 IRQ_TYPE_LEVEL_LOW>;
        };
 };
 
index 658eb7ddeaf5fe1fe9515cd016f11714fbb055b0..7ca1cf5241e036c9a5b56f8b6988bef1fd043c0a 100644 (file)
@@ -61,7 +61,7 @@ gpio-leds {
 
                blue {
                        label = "mk808:blue:power";
-                       gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>;
+                       gpios = <&gpio0 RK_PA3 GPIO_ACTIVE_HIGH>;
                        default-state = "off";
                        linux,default-trigger = "default-on";
                };
@@ -77,7 +77,7 @@ vcc_io: vcc-io {
        vcc_host: usb-host-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 6 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
                pinctrl-0 = <&host_drv>;
                pinctrl-names = "default";
                regulator-always-on;
@@ -91,7 +91,7 @@ vcc_host: usb-host-regulator {
        vcc_otg: usb-otg-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 5 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>;
                pinctrl-0 = <&otg_drv>;
                pinctrl-names = "default";
                regulator-always-on;
@@ -104,7 +104,7 @@ vcc_otg: usb-otg-regulator {
 
        vcc_sd: sdmmc-regulator {
                compatible = "regulator-fixed";
-               gpio = <&gpio3 7 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio3 RK_PA7 GPIO_ACTIVE_LOW>;
                pinctrl-0 = <&sdmmc_pwr>;
                pinctrl-names = "default";
                regulator-name = "vcc_sd";
@@ -117,7 +117,7 @@ vcc_sd: sdmmc-regulator {
        vcc_wifi: sdio-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio3 24 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio3 RK_PD0 GPIO_ACTIVE_HIGH>;
                pinctrl-0 = <&wifi_pwr>;
                pinctrl-names = "default";
                regulator-name = "vcc_wifi";
index 82465b6444435ad7ce8f9800066e8a353d165e91..8907deaab18e30038fc094607bfcc1b6faf1044f 100644 (file)
@@ -55,7 +55,7 @@ memory@60000000 {
 
        ir: ir-receiver {
                compatible = "gpio-ir-receiver";
-               gpios = <&gpio6 1 GPIO_ACTIVE_LOW>;
+               gpios = <&gpio6 RK_PA1 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&ir_int>;
        };
@@ -65,7 +65,7 @@ keys: gpio-keys {
 
                power {
                        wakeup-source;
-                       gpios = <&gpio6 2 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio6 RK_PA2 GPIO_ACTIVE_LOW>;
                        label = "GPIO Power";
                        linux,code = <KEY_POWER>;
                        pinctrl-names = "default";
@@ -115,7 +115,7 @@ vcc_emmc: emmc-regulator {
        vcc_sata: sata-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio4 22 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&sata_pwr>;
                regulator-name = "usb_5v";
@@ -127,7 +127,7 @@ vcc_sata: sata-regulator {
 
        vcc_sd: sdmmc-regulator {
                compatible = "regulator-fixed";
-               gpio = <&gpio3 7 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio3 RK_PA7 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&sdmmc_pwr>;
                regulator-name = "vcc_sd";
@@ -140,7 +140,7 @@ vcc_sd: sdmmc-regulator {
        vcc_host: usb-host-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 6 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&host_drv>;
                regulator-name = "host-pwr";
@@ -153,7 +153,7 @@ vcc_host: usb-host-regulator {
        vcc_otg: usb-otg-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 5 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&otg_drv>;
                regulator-name = "vcc_otg";
@@ -201,7 +201,7 @@ ak8963: ak8963@0d {
                compatible = "asahi-kasei,ak8975";
                reg = <0x0d>;
                interrupt-parent = <&gpio4>;
-               interrupts = <17 IRQ_TYPE_EDGE_RISING>;
+               interrupts = <RK_PC1 IRQ_TYPE_EDGE_RISING>;
                pinctrl-names = "default";
                pinctrl-0 = <&comp_int>;
        };
@@ -210,7 +210,7 @@ mma8452: mma8452@1d {
                compatible = "fsl,mma8452";
                reg = <0x1d>;
                interrupt-parent = <&gpio4>;
-               interrupts = <16 IRQ_TYPE_EDGE_RISING>;
+               interrupts = <RK_PC0 IRQ_TYPE_EDGE_RISING>;
                pinctrl-names = "default";
                pinctrl-0 = <&gsensor_int>;
        };
@@ -223,7 +223,7 @@ &i2c1 {
        tps: tps@2d {
                reg = <0x2d>;
                interrupt-parent = <&gpio6>;
-               interrupts = <4 IRQ_TYPE_EDGE_RISING>;
+               interrupts = <RK_PA4 IRQ_TYPE_EDGE_RISING>;
                pinctrl-names = "default";
                pinctrl-0 = <&pmic_int>, <&pwr_hold>;
 
index e498c362b9e708daa96460bc7b5147bb21808c9c..f50481fd8e5cdc5de9e05a035fb75d2b2bd8bbaf 100644 (file)
@@ -687,6 +687,7 @@ &spi1 {
 };
 
 &uart0 {
+       compatible = "rockchip,rk3066-uart", "snps,dw-apb-uart";
        dmas = <&dmac1_s 0>, <&dmac1_s 1>;
        dma-names = "tx", "rx";
        pinctrl-names = "default";
@@ -694,6 +695,7 @@ &uart0 {
 };
 
 &uart1 {
+       compatible = "rockchip,rk3066-uart", "snps,dw-apb-uart";
        dmas = <&dmac1_s 2>, <&dmac1_s 3>;
        dma-names = "tx", "rx";
        pinctrl-names = "default";
@@ -701,6 +703,7 @@ &uart1 {
 };
 
 &uart2 {
+       compatible = "rockchip,rk3066-uart", "snps,dw-apb-uart";
        dmas = <&dmac2 6>, <&dmac2 7>;
        dma-names = "tx", "rx";
        pinctrl-names = "default";
@@ -708,6 +711,7 @@ &uart2 {
 };
 
 &uart3 {
+       compatible = "rockchip,rk3066-uart", "snps,dw-apb-uart";
        dmas = <&dmac2 8>, <&dmac2 9>;
        dma-names = "tx", "rx";
        pinctrl-names = "default";
index df727bafd6dcd438c346f5a062641538fcaa7760..5b2a0b6885cd0790d663ab3ba2d87927b9b32742 100644 (file)
@@ -62,7 +62,7 @@ gpio-keys {
                autorepeat;
 
                power {
-                       gpios = <&gpio0 4 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
                        linux,code = <KEY_POWER>;
                        label = "GPIO Key Power";
                        linux,input-type = <1>;
@@ -102,7 +102,7 @@ accelerometer@18 {
                compatible = "bosch,bma250";
                reg = <0x18>;
                interrupt-parent = <&gpio0>;
-               interrupts = <15 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PB7 IRQ_TYPE_LEVEL_LOW>;
        };
 };
 
@@ -114,7 +114,7 @@ rk808: pmic@1c {
                compatible = "rockchip,rk818";
                reg = <0x1c>;
                interrupt-parent = <&gpio0>;
-               interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PB3 IRQ_TYPE_LEVEL_LOW>;
                rockchip,system-power-controller;
                wakeup-source;
                #clock-cells = <1>;
@@ -247,8 +247,8 @@ gsl1680: touchscreen@40 {
                compatible = "silead,gsl1680";
                reg = <0x40>;
                interrupt-parent = <&gpio1>;
-               interrupts = <15 IRQ_TYPE_EDGE_FALLING>;
-               power-gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>;
+               interrupts = <RK_PB7 IRQ_TYPE_EDGE_FALLING>;
+               power-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
                touchscreen-size-x = <800>;
                touchscreen-size-y = <1280>;
                silead,max-fingers = <5>;
index 5e8a235ed02da9bea38d8f345a503cf336a4bdbc..ca0a1c4bc15cdd3fea84d305eba5cf219969a00f 100644 (file)
@@ -58,7 +58,7 @@ gpio-keys {
                autorepeat;
 
                power {
-                       gpios = <&gpio0 4 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
                        linux,code = <KEY_POWER>;
                        label = "GPIO Key Power";
                        linux,input-type = <1>;
@@ -72,19 +72,19 @@ gpio-leds {
 
                green {
                        label = "rock:green:user1";
-                       gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio0 RK_PB4 GPIO_ACTIVE_LOW>;
                        default-state = "off";
                };
 
                blue {
                        label = "rock:blue:user2";
-                       gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>;
                        default-state = "off";
                };
 
                sleep {
                        label = "rock:red:power";
-                       gpios = <&gpio0 15 0>;
+                       gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;
                        default-state = "off";
                };
        };
@@ -106,7 +106,7 @@ spdif_out: spdif-out {
 
        ir_recv: gpio-ir-receiver {
                compatible = "gpio-ir-receiver";
-               gpios = <&gpio0 10 1>;
+               gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&ir_recv_pin>;
        };
@@ -114,7 +114,7 @@ ir_recv: gpio-ir-receiver {
        vcc_otg: usb-otg-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio2 31 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio2 RK_PD7 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&otg_vbus_drv>;
                regulator-name = "otg-vbus";
@@ -129,7 +129,7 @@ vcc_sd0: sdmmc-regulator {
                regulator-name = "sdmmc-supply";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
-               gpio = <&gpio3 1 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>;
                startup-delay-us = <100000>;
                vin-supply = <&vcc_io>;
        };
@@ -137,7 +137,7 @@ vcc_sd0: sdmmc-regulator {
        vcc_host: usb-host-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 3 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PA3 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&host_vbus_drv>;
                regulator-name = "host-pwr";
@@ -168,7 +168,7 @@ &emac {
        phy0: ethernet-phy@0 {
                reg = <0>;
                interrupt-parent = <&gpio3>;
-               interrupts = <26 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PD2 IRQ_TYPE_LEVEL_LOW>;
        };
 };
 
@@ -184,7 +184,7 @@ rtc@51 {
                compatible = "haoyu,hym8563";
                reg = <0x51>;
                interrupt-parent = <&gpio0>;
-               interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
+               interrupts = <RK_PB5 IRQ_TYPE_EDGE_FALLING>;
                pinctrl-names = "default";
                pinctrl-0 = <&rtc_int>;
                #clock-cells = <0>;
index 869e189331ec4624c1ba45a4c6a53ce58504dd69..cf91254d0a432aa39e73b16b0339a772a35277f5 100644 (file)
@@ -599,21 +599,25 @@ &spi1 {
 };
 
 &uart0 {
+       compatible = "rockchip,rk3188-uart", "snps,dw-apb-uart";
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_xfer>;
 };
 
 &uart1 {
+       compatible = "rockchip,rk3188-uart", "snps,dw-apb-uart";
        pinctrl-names = "default";
        pinctrl-0 = <&uart1_xfer>;
 };
 
 &uart2 {
+       compatible = "rockchip,rk3188-uart", "snps,dw-apb-uart";
        pinctrl-names = "default";
        pinctrl-0 = <&uart2_xfer>;
 };
 
 &uart3 {
+       compatible = "rockchip,rk3188-uart", "snps,dw-apb-uart";
        pinctrl-names = "default";
        pinctrl-0 = <&uart3_xfer>;
 };
index dcdd0cee619ea51e715353107f19ec617e96406c..275092a950efa50afb60861ae422d92de0354b38 100644 (file)
@@ -77,7 +77,7 @@ &gmac {
        phy-mode = "rgmii";
        pinctrl-names = "default";
        pinctrl-0 = <&rgmii_pins>;
-       snps,reset-gpio = <&gpio2 24 GPIO_ACTIVE_LOW>;
+       snps,reset-gpio = <&gpio2 RK_PD0 GPIO_ACTIVE_LOW>;
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 1000000>;
        tx_delay = <0x30>;
index 9d3aee5abc1585fa7cf7b88c45842aa1147abab9..9dff8221112c24287133c5af851a46dae1f36277 100644 (file)
@@ -443,7 +443,7 @@ gic: interrupt-controller@32010000 {
                #address-cells = <0>;
 
                reg = <0x32011000 0x1000>,
-                     <0x32012000 0x1000>,
+                     <0x32012000 0x2000>,
                      <0x32014000 0x2000>,
                      <0x32016000 0x2000>;
                interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
index 041dd5d2d18cbbecb8c0b093041bd0da595ed57a..b9418d170502915e81d74f59ec1b15dc39d41996 100644 (file)
@@ -47,7 +47,7 @@ / {
        vcc_lcd: vcc-lcd {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio7 3 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio7 RK_PA3 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&lcd_en>;
                regulator-name = "vcc_lcd";
@@ -57,7 +57,7 @@ vcc_lcd: vcc-lcd {
        vcc_wl: vcc-wl {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio7 9 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio7 RK_PB1 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&wifi_pwr>;
                regulator-name = "vcc_wl";
@@ -96,7 +96,7 @@ hym8563@51 {
                reg = <0x51>;
 
                interrupt-parent = <&gpio0>;
-               interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
+               interrupts = <RK_PA4 IRQ_TYPE_EDGE_FALLING>;
 
                pinctrl-names = "default";
                pinctrl-0 = <&pmic_int>;
index 44ebc6e59b3a2138af2252722d299f0f2c2c5f63..56c266df01c1016db18ff3a404723e59abc5dbfc 100644 (file)
@@ -52,7 +52,7 @@ rk808: pmic@1b {
                compatible = "rockchip,rk808";
                reg = <0x1b>;
                interrupt-parent = <&gpio0>;
-               interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&pmic_int &global_pwroff>;
                rockchip,system-power-controller;
index bf7ccfad3260f2615b1a9af472aaad273b074297..0dec94c3583b4523d44defc903821beaa810116f 100644 (file)
@@ -84,7 +84,7 @@ backlight: backlight {
                        240 241 242 243 244 245 246 247
                        248 249 250 251 252 253 254 255>;
                default-brightness-level = <128>;
-               enable-gpios = <&gpio7 2 GPIO_ACTIVE_HIGH>;
+               enable-gpios = <&gpio7 RK_PA2 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&bl_en>;
                pwms = <&pwm0 0 1000000 PWM_POLARITY_INVERTED>;
@@ -100,7 +100,7 @@ ext_gmac: external-gmac-clock {
        panel: panel {
                compatible ="lg,lp079qx1-sp0v", "simple-panel";
                backlight = <&backlight>;
-               enable-gpios = <&gpio7 4 GPIO_ACTIVE_HIGH>;
+               enable-gpios = <&gpio7 RK_PA4 GPIO_ACTIVE_HIGH>;
                pinctrl-0 = <&lcd_cs>;
 
                ports {
@@ -120,7 +120,7 @@ gpio-keys {
                pinctrl-0 = <&pwrbtn>;
 
                power {
-                       gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
                        linux,code = <KEY_POWER>;
                        label = "GPIO Key Power";
                        linux,input-type = <1>;
@@ -133,7 +133,7 @@ power {
        vcc_host: vcc-host-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 14 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&host_vbus_drv>;
                regulator-name = "vcc_host";
@@ -144,7 +144,7 @@ vcc_host: vcc-host-regulator {
        vcc_phy: vcc-phy-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 6 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&eth_phy_pwr>;
                regulator-name = "vcc_phy";
@@ -170,7 +170,7 @@ vcc_sys: vsys-regulator {
         */
        vcc_sd: sdmmc-regulator {
                compatible = "regulator-fixed";
-               gpio = <&gpio7 11 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio7 RK_PB3 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&sdmmc_pwr>;
                regulator-name = "vcc_sd";
@@ -236,7 +236,7 @@ &gmac {
        phy-supply = <&vcc_phy>;
        phy-mode = "rgmii";
        clock_in_out = "input";
-       snps,reset-gpio = <&gpio4 7 0>;
+       snps,reset-gpio = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 1000000>;
        assigned-clocks = <&cru SCLK_MAC>;
index 805c0d26770b0c6ddeb0401f95d67bfb7aea6e2c..61d1c1028317818e1e8b59ac2007f1197a00f8c4 100644 (file)
@@ -93,7 +93,7 @@ &gmac {
        phy-mode = "rgmii";
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 1000000>;
-       snps,reset-gpio = <&gpio4 8 GPIO_ACTIVE_LOW>;
+       snps,reset-gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_LOW>;
        tx_delay = <0x30>;
        rx_delay = <0x10>;
        status = "okay";
@@ -111,7 +111,7 @@ rk808: pmic@1b {
                compatible = "rockchip,rk808";
                reg = <0x1b>;
                interrupt-parent = <&gpio0>;
-               interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
                #clock-cells = <1>;
                clock-output-names = "xin32k", "rk808-clkout2";
                pinctrl-names = "default";
@@ -345,7 +345,7 @@ &uart2 {
 &usbphy {
        pinctrl-names = "default";
        pinctrl-0 = <&host_drv>;
-       vbus_drv-gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>;
+       vbus_drv-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
        status = "okay";
 };
 
index 75d77e38e0d650d75c26b3c73176b842dc8a10f3..0195d972166052e0a3a493299b69aa34c6cab404 100644 (file)
@@ -49,7 +49,7 @@ / {
 };
 
 &ir {
-       gpios = <&gpio7 5 GPIO_ACTIVE_LOW>;
+       gpios = <&gpio7 RK_PA5 GPIO_ACTIVE_LOW>;
 };
 
 &pinctrl {
index d242588bae0d73c94824a5fea10ccc15751a35dc..813496618d08ecaad55b250e40cf472efd10b84c 100644 (file)
@@ -96,7 +96,7 @@ &gmac {
        phy-mode = "rgmii";
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 1000000>;
-       snps,reset-gpio = <&gpio4 8 GPIO_ACTIVE_LOW>;
+       snps,reset-gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_LOW>;
        tx_delay = <0x30>;
        rx_delay = <0x10>;
        status = "ok";
index 751bee81128efdd0b0cdbd12d53c34547209d885..d0b3204a47999022bb12dc661644dcbfbbfe7b23 100644 (file)
@@ -53,7 +53,7 @@ gpio-keys {
 
                power {
                        wakeup-source;
-                       gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
                        label = "GPIO Power";
                        linux,code = <KEY_POWER>;
                        pinctrl-names = "default";
@@ -63,14 +63,14 @@ power {
 
        ir-receiver {
                compatible = "gpio-ir-receiver";
-               gpios = <&gpio7 0 GPIO_ACTIVE_LOW>;
+               gpios = <&gpio7 RK_PA0 GPIO_ACTIVE_LOW>;
        };
 
        leds {
                compatible = "gpio-leds";
 
                power {
-                       gpios = <&gpio8 2 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio8 RK_PA2 GPIO_ACTIVE_LOW>;
                        label = "firefly:blue:power";
                        pinctrl-names = "default";
                        pinctrl-0 = <&power_led>;
@@ -78,7 +78,7 @@ power {
                };
 
                work {
-                       gpios = <&gpio8 1 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio8 RK_PA1 GPIO_ACTIVE_LOW>;
                        label = "firefly:blue:user";
                        linux,default-trigger = "rc-feedback";
                        pinctrl-names = "default";
@@ -92,7 +92,7 @@ sdio_pwrseq: sdio-pwrseq {
                clock-names = "ext_clock";
                pinctrl-names = "default";
                pinctrl-0 = <&wifi_enable>;
-               reset-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
+               reset-gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>;
        };
 
        sound {
@@ -112,7 +112,7 @@ spdif_out: spdif-out {
        vcc_host_5v: usb-host-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 14 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&host_vbus_drv>;
                regulator-name = "vcc_host_5v";
@@ -133,7 +133,7 @@ vcc_5v: vcc_sys: vsys-regulator {
 
        vcc_sd: sdmmc-regulator {
                compatible = "regulator-fixed";
-               gpio = <&gpio7 11 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio7 RK_PB3 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&sdmmc_pwr>;
                regulator-name = "vcc_sd";
@@ -146,7 +146,7 @@ vcc_sd: sdmmc-regulator {
        vcc_otg_5v: usb-otg-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&otg_vbus_drv>;
                regulator-name = "vcc_otg_5v";
@@ -159,7 +159,7 @@ vcc_otg_5v: usb-otg-regulator {
        dovdd_1v8: dovdd-1v8-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&dvp_pwr>;
                regulator-name = "dovdd_1v8";
@@ -171,7 +171,7 @@ dovdd_1v8: dovdd-1v8-regulator {
        vcc28_dvp: vcc28-dvp-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&dvp_pwr>;
                regulator-name = "vcc28_dvp";
@@ -183,7 +183,7 @@ vcc28_dvp: vcc28-dvp-regulator {
        af_28: af_28-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&dvp_pwr>;
                regulator-name = "af_28";
@@ -195,7 +195,7 @@ af_28: af_28-regulator {
        dvdd_1v2: af_28-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio7 12 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio7 RK_PB4 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&cif_pwr>;
                regulator-name = "dvdd_1v2";
@@ -221,7 +221,7 @@ hym8563: hym8563@51 {
                clock-frequency = <32768>;
                clock-output-names = "xin32k";
                interrupt-parent = <&gpio7>;
-               interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
+               interrupts = <RK_PA4 IRQ_TYPE_EDGE_FALLING>;
                pinctrl-names = "default";
                pinctrl-0 = <&rtc_int>;
        };
index c07fe92dc69fda7f713a23fadecd41d4074cca89..14271be72f302731581035ab54eb2fe67f9314ce 100644 (file)
@@ -49,7 +49,7 @@ / {
 };
 
 &ir {
-       gpios = <&gpio7 0 GPIO_ACTIVE_LOW>;
+       gpios = <&gpio7 RK_PA0 GPIO_ACTIVE_LOW>;
 };
 
 &pinctrl {
index 44935af1fb0ef0067c03f6b028b89d2930d0ffd9..10793ac185992d95dbb8b3d0d6f36bf8d39ecfe9 100644 (file)
@@ -75,7 +75,7 @@ keys: gpio-keys {
 
                power {
                        wakeup-source;
-                       gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
                        label = "GPIO Power";
                        linux,code = <KEY_POWER>;
                        pinctrl-names = "default";
@@ -87,7 +87,7 @@ leds {
                compatible = "gpio-leds";
 
                work {
-                       gpios = <&gpio8 1 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio8 RK_PA1 GPIO_ACTIVE_LOW>;
                        label = "firefly:blue:user";
                        linux,default-trigger = "rc-feedback";
                        pinctrl-names = "default";
@@ -95,7 +95,7 @@ work {
                };
 
                power {
-                       gpios = <&gpio8 2 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio8 RK_PA2 GPIO_ACTIVE_LOW>;
                        label = "firefly:green:power";
                        linux,default-trigger = "default-on";
                        pinctrl-names = "default";
@@ -114,7 +114,7 @@ vbat_wl: vcc_sys: vsys-regulator {
 
        vcc_sd: sdmmc-regulator {
                compatible = "regulator-fixed";
-               gpio = <&gpio7 11 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio7 RK_PB3 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&sdmmc_pwr>;
                regulator-name = "vcc_sd";
@@ -145,7 +145,7 @@ vcc_5v: usb-regulator {
        vcc_host_5v: usb-host-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 14 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&host_vbus_drv>;
                regulator-name = "vcc_host_5v";
@@ -158,7 +158,7 @@ vcc_host_5v: usb-host-regulator {
        vcc_otg_5v: usb-otg-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&otg_vbus_drv>;
                regulator-name = "vcc_otg_5v";
@@ -175,7 +175,7 @@ vcc_otg_5v: usb-otg-regulator {
        vcc28_dvp: vcc28-dvp-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&dvp_pwr>;
                regulator-name = "vcc28_dvp";
@@ -213,7 +213,7 @@ &gmac {
        phy-mode = "rgmii";
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 1000000>;
-       snps,reset-gpio = <&gpio4 8 GPIO_ACTIVE_LOW>;
+       snps,reset-gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_LOW>;
        tx_delay = <0x30>;
        rx_delay = <0x10>;
        status = "ok";
@@ -260,7 +260,7 @@ hym8563: hym8563@51 {
                clock-frequency = <32768>;
                clock-output-names = "xin32k";
                interrupt-parent = <&gpio7>;
-               interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
+               interrupts = <RK_PA4 IRQ_TYPE_EDGE_FALLING>;
                pinctrl-names = "default";
                pinctrl-0 = <&rtc_int>;
        };
index 441d450fd15115050b3af5c48bae983d0ee49545..21326f3e8564ab141a8f4a9d0534bd51a3ef3b58 100644 (file)
@@ -68,7 +68,7 @@ leds {
                compatible = "gpio-leds";
 
                work {
-                       gpios = <&gpio7 4 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio7 RK_PA4 GPIO_ACTIVE_LOW>;
                        label = "miqi:green:user";
                        linux,default-trigger = "default-on";
                        pinctrl-names = "default";
@@ -87,7 +87,7 @@ vcc_flash: flash-regulator {
        vcc_host: usb-host-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 14 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&host_vbus_drv>;
                regulator-name = "vcc_host";
@@ -99,7 +99,7 @@ vcc_host: usb-host-regulator {
 
        vcc_sd: sdmmc-regulator {
                compatible = "regulator-fixed";
-               gpio = <&gpio7 11 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio7 RK_PB3 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&sdmmc_pwr>;
                regulator-name = "vcc_sd";
@@ -146,7 +146,7 @@ &gmac {
        phy-mode = "rgmii";
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 1000000>;
-       snps,reset-gpio = <&gpio4 8 GPIO_ACTIVE_LOW>;
+       snps,reset-gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_LOW>;
        tx_delay = <0x30>;
        rx_delay = <0x10>;
        status = "ok";
index bc6d10054f6a37f5212f725de4de23a34d9e8e26..aa1f9ecff23109b7671e81d0afd62f217a563b18 100644 (file)
@@ -180,7 +180,7 @@ &gmac {
        phy-supply = <&vcc_lan>;
        phy-mode = "rgmii";
        clock_in_out = "input";
-       snps,reset-gpio = <&gpio4 RK_PB0 0>;
+       snps,reset-gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>;
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 1000000>;
        assigned-clocks = <&cru SCLK_MAC>;
@@ -205,7 +205,7 @@ rk808: pmic@1b {
                compatible = "rockchip,rk808";
                reg = <0x1b>;
                interrupt-parent = <&gpio0>;
-               interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&pmic_int &global_pwroff>;
                rockchip,system-power-controller;
@@ -390,7 +390,7 @@ ak8963: ak8963@0d {
                compatible = "asahi-kasei,ak8975";
                reg = <0x0d>;
                interrupt-parent = <&gpio8>;
-               interrupts = <1 IRQ_TYPE_EDGE_RISING>;
+               interrupts = <RK_PA1 IRQ_TYPE_EDGE_RISING>;
                pinctrl-names = "default";
                pinctrl-0 = <&comp_int>;
                vdd-supply = <&vcc_io>;
@@ -409,7 +409,7 @@ mma8452: mma8452@1d {
                compatible = "fsl,mma8452";
                reg = <0x1d>;
                interrupt-parent = <&gpio8>;
-               interrupts = <0 IRQ_TYPE_EDGE_RISING>;
+               interrupts = <RK_PA0 IRQ_TYPE_EDGE_RISING>;
                pinctrl-names = "default";
                pinctrl-0 = <&gsensor_int>;
        };
index 04faa72dbd95f4936cd77cdc279b5039716a1806..1145b62edde7fb8ddf3aee9b1674dad07afb1568 100644 (file)
@@ -68,7 +68,7 @@ gpio-keys {
                pinctrl-0 = <&pwrbtn>;
 
                power {
-                       gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
                        linux,code = <KEY_POWER>;
                        label = "GPIO Key Power";
                        linux,input-type = <1>;
@@ -79,7 +79,7 @@ power {
 
        ir: ir-receiver {
                compatible = "gpio-ir-receiver";
-               gpios = <&gpio7 0 GPIO_ACTIVE_LOW>;
+               gpios = <&gpio7 RK_PA0 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&ir_int>;
        };
@@ -87,7 +87,7 @@ ir: ir-receiver {
        vcc_host: vcc-host-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 14 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&host_vbus_drv>;
                regulator-name = "vcc_host";
@@ -98,7 +98,7 @@ vcc_host: vcc-host-regulator {
        vcc_otg: vcc-otg-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&otg_vbus_drv>;
                regulator-name = "vcc_otg";
@@ -111,7 +111,7 @@ vcc_sdmmc: sdmmc-regulator {
                regulator-name = "sdmmc-supply";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
-               gpio = <&gpio7 11 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio7 RK_PB3 GPIO_ACTIVE_LOW>;
                startup-delay-us = <100000>;
                vin-supply = <&vcc_io>;
        };
@@ -134,7 +134,7 @@ &gmac {
        phy-supply = <&vcc_lan>;
        phy-mode = "rgmii";
        clock_in_out = "input";
-       snps,reset-gpio = <&gpio4 7 0>;
+       snps,reset-gpio = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 1000000>;
        assigned-clocks = <&cru SCLK_MAC>;
@@ -187,7 +187,7 @@ rtc@51 {
                #clock-cells = <0>;
                clock-output-names = "xin32k";
                interrupt-parent = <&gpio0>;
-               interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
+               interrupts = <RK_PA4 IRQ_TYPE_EDGE_FALLING>;
                pinctrl-names = "default";
                pinctrl-0 = <&pmic_int>;
        };
index b25ba806d5eec46fd3f92438c9030e22053bfcad..1c0bbc9b928b1e11b779e2c721967c8ec847bd9b 100644 (file)
@@ -51,7 +51,7 @@ emmc_pwrseq: emmc-pwrseq {
                compatible = "mmc-pwrseq-emmc";
                pinctrl-0 = <&emmc_reset>;
                pinctrl-names = "default";
-               reset-gpios = <&gpio3 9 GPIO_ACTIVE_LOW>;
+               reset-gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>;
        };
 
        ext_gmac: external-gmac-clock {
@@ -106,7 +106,7 @@ &gmac {
        phy-supply = <&vccio_pmu>;
        pinctrl-names = "default";
        pinctrl-0 = <&rgmii_pins &phy_rst>;
-       snps,reset-gpio = <&gpio4 8 GPIO_ACTIVE_LOW>;
+       snps,reset-gpio = <&gpio4 RK_PB0 GPIO_ACTIVE_LOW>;
        snps,reset-active-low;
        snps,reset-delays-us = <0 10000 30000>;
        rx_delay = <0x10>;
index dd3ad2e93a6d538dcd29c5dbc17ca2feb8d82d5d..96a2e745bb9322a33af765265e4f5554f9d22d2b 100644 (file)
@@ -53,13 +53,13 @@ gpio-leds {
                compatible = "gpio-leds";
 
                heartbeat {
-                       gpios = <&gpio7 15 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio7 RK_PB7 GPIO_ACTIVE_LOW>;
                        label = "rock2:green:state1";
                        linux,default-trigger = "heartbeat";
                };
 
                mmc {
-                       gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio0 RK_PB3 GPIO_ACTIVE_LOW>;
                        label = "rock2:blue:state2";
                        linux,default-trigger = "mmc0";
                };
@@ -67,7 +67,7 @@ mmc {
 
        ir: ir-receiver {
                compatible = "gpio-ir-receiver";
-               gpios = <&gpio8 1 GPIO_ACTIVE_LOW>;
+               gpios = <&gpio8 RK_PA1 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&ir_int>;
        };
@@ -92,13 +92,13 @@ sdio_pwrseq: sdio-pwrseq {
                clock-names = "ext_clock";
                pinctrl-names = "default";
                pinctrl-0 = <&wifi_enable>;
-               reset-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
+               reset-gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>;
        };
 
        vcc_usb_host: vcc-host-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 14 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&host_vbus_drv>;
                /* Always on as the rockchip usb phy doesn't have a vbus-supply
@@ -110,7 +110,7 @@ vcc_usb_host: vcc-host-regulator {
 
        vcc_sd: sdmmc-regulator {
                compatible = "regulator-fixed";
-               gpio = <&gpio7 11 GPIO_ACTIVE_LOW>;
+               gpio = <&gpio7 RK_PB3 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&sdmmc_pwr>;
                regulator-name = "vcc_sd";
@@ -166,7 +166,7 @@ hym8563: hym8563@51 {
                clock-frequency = <32768>;
                clock-output-names = "xin32k";
                interrupt-parent = <&gpio0>;
-               interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
+               interrupts = <RK_PA4 IRQ_TYPE_EDGE_FALLING>;
                pinctrl-names = "default";
                pinctrl-0 = <&pmic_int>;
 
index 6d105914a4f35c7a4c50524b1728814488432362..280aceae25d5021afc15a8c2d905803026b6145c 100644 (file)
@@ -17,8 +17,8 @@ sound {
                rockchip,model = "VEYRON-I2S";
                rockchip,i2s-controller = <&i2s>;
                rockchip,audio-codec = <&max98090>;
-               rockchip,hp-det-gpios = <&gpio6 5 GPIO_ACTIVE_HIGH>;
-               rockchip,mic-det-gpios = <&gpio6 11 GPIO_ACTIVE_LOW>;
+               rockchip,hp-det-gpios = <&gpio6 RK_PA5 GPIO_ACTIVE_HIGH>;
+               rockchip,mic-det-gpios = <&gpio6 RK_PB3 GPIO_ACTIVE_LOW>;
                rockchip,headset-codec = <&headsetcodec>;
        };
 };
@@ -28,7 +28,7 @@ max98090: max98090@10 {
                compatible = "maxim,max98090";
                reg = <0x10>;
                interrupt-parent = <&gpio6>;
-               interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
+               interrupts = <RK_PA7 IRQ_TYPE_EDGE_FALLING>;
                clock-names = "mclk";
                clocks = <&cru SCLK_I2S0_OUT>;
                pinctrl-names = "default";
@@ -41,7 +41,7 @@ headsetcodec: ts3a227e@3b {
                compatible = "ti,ts3a227e";
                reg = <0x3b>;
                interrupt-parent = <&gpio0>;
-               interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&ts3a227e_int_l>;
                ti,micbias = <7>;               /* MICBIAS = 2.8V */
index cf5311d2617c2c81a7dbe3d5d5b74b97820f20da..ed4255294ad4e191c2261e107169183b4b0b319b 100644 (file)
@@ -67,7 +67,7 @@ vcc33_io: vcc33_io {
        vcc5_host2: vcc5-host2-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&usb2_pwr_en>;
                regulator-name = "vcc5_host2";
@@ -103,8 +103,8 @@ usb2_pwr_en: usb2-pwr-en {
 &rk808 {
        pinctrl-names = "default";
        pinctrl-0 = <&pmic_int_l &dvs_1 &dvs_2>;
-       dvs-gpios = <&gpio7 11 GPIO_ACTIVE_HIGH>,
-                   <&gpio7 15 GPIO_ACTIVE_HIGH>;
+       dvs-gpios = <&gpio7 RK_PB3 GPIO_ACTIVE_HIGH>,
+                   <&gpio7 RK_PB7 GPIO_ACTIVE_HIGH>;
 
        /delete-property/ vcc6-supply;
 
@@ -133,7 +133,7 @@ vcc18_hdmi: SWITCH_REG2 {
 
 &vcc50_hdmi {
        enable-active-high;
-       gpio = <&gpio7 2 GPIO_ACTIVE_HIGH>;
+       gpio = <&gpio7 RK_PA2 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&vcc50_hdmi_en>;
 };
index ce1f87980bcb96ed3e0f6ff2a2c0fe1edda9176c..d752a315f884185606bbe552056eba15a54cb051 100644 (file)
@@ -91,7 +91,7 @@ backlight: backlight {
                        240 241 242 243 244 245 246 247
                        248 249 250 251 252 253 254 255>;
                default-brightness-level = <128>;
-               enable-gpios = <&gpio7 2 GPIO_ACTIVE_HIGH>;
+               enable-gpios = <&gpio7 RK_PA2 GPIO_ACTIVE_HIGH>;
                backlight-boot-off;
                pinctrl-names = "default";
                pinctrl-0 = <&bl_en>;
@@ -102,7 +102,7 @@ backlight: backlight {
        gpio-charger {
                compatible = "gpio-charger";
                charger-type = "mains";
-               gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>;
+               gpios = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&ac_present_ap>;
        };
@@ -142,7 +142,7 @@ vcc_5v: vcc-5v {
        vcc5_host1: vcc5-host1-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&host1_pwr_en>;
                regulator-name = "vcc5_host1";
@@ -154,7 +154,7 @@ vcc5_host1: vcc5-host1-regulator {
        vcc5v_otg: vcc5v-otg-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio0 RK_PB4 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&usbotg_pwren_h>;
                regulator-name = "vcc5_host2";
@@ -190,7 +190,7 @@ &gpio_keys {
        pinctrl-0 = <&pwr_key_l &ap_lid_int_l>;
        lid {
                label = "Lid";
-               gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
+               gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_LOW>;
                wakeup-source;
                linux,code = <0>; /* SW_LID */
                linux,input-type = <5>; /* EV_SW */
@@ -228,7 +228,7 @@ cros_ec: ec@0 {
                reg = <0>;
                google,cros-ec-spi-pre-delay = <30>;
                interrupt-parent = <&gpio7>;
-               interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PA7 IRQ_TYPE_LEVEL_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&ec_int>;
                spi-max-frequency = <3000000>;
@@ -247,7 +247,7 @@ trackpad@15 {
                compatible = "elan,ekth3000";
                reg = <0x15>;
                interrupt-parent = <&gpio7>;
-               interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
+               interrupts = <RK_PA3 IRQ_TYPE_EDGE_FALLING>;
                pinctrl-names = "default";
                pinctrl-0 = <&trackpad_int>;
                vcc-supply = <&vcc33_io>;
index 3748abf562b1b2ba75137879a260d700504b1678..d33f5763c39c6abcf95ebd8a7ba38c7ef9b871dc 100644 (file)
@@ -57,7 +57,7 @@ / {
        panel_regulator: panel-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio7 14 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio7 RK_PB6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&lcd_enable_h>;
                regulator-name = "panel_regulator";
@@ -68,7 +68,7 @@ panel_regulator: panel-regulator {
        vcc18_lcd: vcc18-lcd {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio2 13 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&avdd_1v8_disp_en>;
                regulator-name = "vcc18_lcd";
@@ -80,7 +80,7 @@ vcc18_lcd: vcc18-lcd {
        backlight_regulator: backlight-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&bl_pwr_en>;
                regulator-name = "backlight_regulator";
@@ -134,8 +134,8 @@ &panel {
 &rk808 {
        pinctrl-names = "default";
        pinctrl-0 = <&pmic_int_l &dvs_1 &dvs_2>;
-       dvs-gpios = <&gpio7 12 GPIO_ACTIVE_HIGH>,
-                   <&gpio7 15 GPIO_ACTIVE_HIGH>;
+       dvs-gpios = <&gpio7 RK_PB4 GPIO_ACTIVE_HIGH>,
+                   <&gpio7 RK_PB7 GPIO_ACTIVE_HIGH>;
 
        regulators {
                mic_vcc: LDO_REG2 {
@@ -160,14 +160,14 @@ &sdmmc {
 
 &vcc_5v {
        enable-active-high;
-       gpio = <&gpio7 21 GPIO_ACTIVE_HIGH>;
+       gpio = <&gpio7 RK_PC5 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&drv_5v>;
 };
 
 &vcc50_hdmi {
        enable-active-high;
-       gpio = <&gpio5 19 GPIO_ACTIVE_HIGH>;
+       gpio = <&gpio5 RK_PC3 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&vcc50_hdmi_en>;
 };
index f6b2eaaebb9ab90bcca8fc8d46d3800830a4cd32..cdea751f2a8cb6f10ac67425808151008beaf70e 100644 (file)
@@ -56,7 +56,7 @@ / {
        panel_regulator: panel-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio7 14 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio7 RK_PB6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&lcd_enable_h>;
                regulator-name = "panel_regulator";
@@ -67,7 +67,7 @@ panel_regulator: panel-regulator {
        vcc18_lcd: vcc18-lcd {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio2 13 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&avdd_1v8_disp_en>;
                regulator-name = "vcc18_lcd";
@@ -79,7 +79,7 @@ vcc18_lcd: vcc18-lcd {
        backlight_regulator: backlight-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&bl_pwr_en>;
                regulator-name = "backlight_regulator";
@@ -123,14 +123,14 @@ &sdmmc {
 
 &vcc_5v {
        enable-active-high;
-       gpio = <&gpio7 21 GPIO_ACTIVE_HIGH>;
+       gpio = <&gpio7 RK_PC5 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&drv_5v>;
 };
 
 &vcc50_hdmi {
        enable-active-high;
-       gpio = <&gpio5 19 GPIO_ACTIVE_HIGH>;
+       gpio = <&gpio5 RK_PC3 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&vcc50_hdmi_en>;
 };
@@ -197,7 +197,7 @@ trackpad@15 {
        trackpad@2c {
                compatible = "hid-over-i2c";
                interrupt-parent = <&gpio7>;
-               interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
+               interrupts = <RK_PA3 IRQ_TYPE_EDGE_FALLING>;
                reg = <0x2c>;
                hid-descr-addr = <0x0020>;
                vcc-supply = <&vcc33_io>;
index f36f6f45922578d4d717d494a0742ca7fa58ea60..f0994f0e577454ceef15f371841ee145506f62eb 100644 (file)
@@ -182,8 +182,8 @@ &i2s {
 &rk808 {
        pinctrl-names = "default";
        pinctrl-0 = <&pmic_int_l &dvs_1 &dvs_2>;
-       dvs-gpios = <&gpio7 12 GPIO_ACTIVE_HIGH>,
-                   <&gpio7 15 GPIO_ACTIVE_HIGH>;
+       dvs-gpios = <&gpio7 RK_PB4 GPIO_ACTIVE_HIGH>,
+                   <&gpio7 RK_PB7 GPIO_ACTIVE_HIGH>;
 
        /delete-property/ vcc6-supply;
        /delete-property/ vcc12-supply;
@@ -244,7 +244,7 @@ &usb_host1 {
 
 &vcc50_hdmi {
        enable-active-high;
-       gpio = <&gpio7 11 GPIO_ACTIVE_HIGH>;
+       gpio = <&gpio7 RK_PB3 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&power_hdmi_on>;
 };
index f72d616d1bf8dbd1739472f9e5f04656883eecdd..544de6027aaa0fcb9f4f11a94b9367534f77afab 100644 (file)
@@ -55,7 +55,7 @@ / {
        backlight_regulator: backlight-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&bl_pwr_en>;
                regulator-name = "backlight_regulator";
@@ -66,7 +66,7 @@ backlight_regulator: backlight-regulator {
        panel_regulator: panel-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio7 14 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio7 RK_PB6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&lcd_enable_h>;
                regulator-name = "panel_regulator";
@@ -77,7 +77,7 @@ panel_regulator: panel-regulator {
        vcc18_lcd: vcc18-lcd {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio2 13 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&avdd_1v8_disp_en>;
                regulator-name = "vcc18_lcd";
@@ -134,14 +134,14 @@ &gpio_keys {
 
        volum_down {
                label = "Volum_down";
-               gpios = <&gpio5 11 GPIO_ACTIVE_LOW>;
+               gpios = <&gpio5 RK_PB3 GPIO_ACTIVE_LOW>;
                linux,code = <KEY_VOLUMEDOWN>;
                debounce-interval = <100>;
        };
 
        volum_up {
                label = "Volum_up";
-               gpios = <&gpio5 10 GPIO_ACTIVE_LOW>;
+               gpios = <&gpio5 RK_PB2 GPIO_ACTIVE_LOW>;
                linux,code = <KEY_VOLUMEUP>;
                debounce-interval = <100>;
        };
@@ -165,10 +165,10 @@ touchscreen@10 {
                compatible = "elan,ekth3500";
                reg = <0x10>;
                interrupt-parent = <&gpio2>;
-               interrupts = <14 IRQ_TYPE_EDGE_FALLING>;
+               interrupts = <RK_PB6 IRQ_TYPE_EDGE_FALLING>;
                pinctrl-names = "default";
                pinctrl-0 = <&touch_int &touch_rst>;
-               reset-gpios = <&gpio2 15 GPIO_ACTIVE_LOW>;
+               reset-gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_LOW>;
                vcc33-supply = <&vcc33_touch>;
                vccio-supply = <&vcc33_touch>;
        };
@@ -211,14 +211,14 @@ &sdmmc {
 
 &vcc_5v {
        enable-active-high;
-       gpio = <&gpio7 21 GPIO_ACTIVE_HIGH>;
+       gpio = <&gpio7 RK_PC5 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&drv_5v>;
 };
 
 &vcc50_hdmi {
        enable-active-high;
-       gpio = <&gpio5 19 GPIO_ACTIVE_HIGH>;
+       gpio = <&gpio5 RK_PC3 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&vcc50_hdmi_en>;
 };
index d44351ec2333193491a229d717b3cc6776936ca9..995cff42fa43a2fb19fab79a68dcdec0473f7b3d 100644 (file)
@@ -76,7 +76,7 @@ &gpio_keys {
        pinctrl-0 = <&pwr_key_h &ap_lid_int_l>;
 
        power {
-               gpios = <&gpio0 5 GPIO_ACTIVE_HIGH>;
+               gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>;
        };
 };
 
@@ -126,7 +126,7 @@ &sdmmc {
        pinctrl-names = "default";
        pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd_disabled &sdmmc_cd_gpio
                     &sdmmc_wp_gpio &sdmmc_bus4>;
-       wp-gpios = <&gpio7 10 GPIO_ACTIVE_HIGH>;
+       wp-gpios = <&gpio7 RK_PB2 GPIO_ACTIVE_HIGH>;
 };
 
 &tsadc {
index fec076eb7aef8f766c939e8b91dca6ef72595bb3..aef07101e9abaa549cc6e2fa3c311c4f5dbd47b2 100644 (file)
@@ -115,7 +115,7 @@ &sdmmc {
        cap-mmc-highspeed;
        cap-sd-highspeed;
        card-detect-delay = <200>;
-       cd-gpios = <&gpio7 5 GPIO_ACTIVE_LOW>;
+       cd-gpios = <&gpio7 RK_PA5 GPIO_ACTIVE_LOW>;
        rockchip,default-sample-phase = <90>;
        num-slots = <1>;
        sd-uhs-sdr12;
index a0d033f6fe5268fb4d087691c5c99cafba8d176b..cc0b78cefe34651843e8a9bc9cc388014137e375 100644 (file)
@@ -57,7 +57,7 @@ / {
        panel_regulator: panel-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio7 14 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio7 RK_PB6 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&lcd_enable_h>;
                regulator-name = "panel_regulator";
@@ -68,7 +68,7 @@ panel_regulator: panel-regulator {
        vcc18_lcd: vcc18-lcd {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio2 13 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&avdd_1v8_disp_en>;
                regulator-name = "vcc18_lcd";
@@ -80,7 +80,7 @@ vcc18_lcd: vcc18-lcd {
        backlight_regulator: backlight-regulator {
                compatible = "regulator-fixed";
                enable-active-high;
-               gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>;
+               gpio = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&bl_pwr_en>;
                regulator-name = "backlight_regulator";
@@ -126,14 +126,14 @@ &sdmmc {
 
 &vcc_5v {
        enable-active-high;
-       gpio = <&gpio7 21 GPIO_ACTIVE_HIGH>;
+       gpio = <&gpio7 RK_PC5 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&drv_5v>;
 };
 
 &vcc50_hdmi {
        enable-active-high;
-       gpio = <&gpio5 19 GPIO_ACTIVE_HIGH>;
+       gpio = <&gpio5 RK_PC3 GPIO_ACTIVE_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&vcc50_hdmi_en>;
 };
index 2251d28e9d2a4fe949d8dcc2b8e775881e73daef..5d1eb0a2582755b274743bc7fefe556a170eb36b 100644 (file)
@@ -61,7 +61,7 @@ gpio_keys: gpio-keys {
                pinctrl-0 = <&pwr_key_l>;
                power {
                        label = "Power";
-                       gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
                        linux,code = <KEY_POWER>;
                        debounce-interval = <100>;
                        wakeup-source;
@@ -70,7 +70,7 @@ power {
 
        gpio-restart {
                compatible = "gpio-restart";
-               gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+               gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>;
                pinctrl-names = "default";
                pinctrl-0 = <&ap_warm_reset_h>;
                priority = <200>;
@@ -80,7 +80,7 @@ emmc_pwrseq: emmc-pwrseq {
                compatible = "mmc-pwrseq-emmc";
                pinctrl-0 = <&emmc_reset>;
                pinctrl-names = "default";
-               reset-gpios = <&gpio2 9 GPIO_ACTIVE_HIGH>;
+               reset-gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>;
        };
 
        sdio_pwrseq: sdio-pwrseq {
@@ -96,7 +96,7 @@ sdio_pwrseq: sdio-pwrseq {
                 * - SDIO_RESET_L_WL_REG_ON
                 * - PDN (power down when low)
                 */
-               reset-gpios = <&gpio4 28 GPIO_ACTIVE_LOW>;
+               reset-gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>;
        };
 
        vcc_5v: vcc-5v {
@@ -178,7 +178,7 @@ rk808: pmic@1b {
                reg = <0x1b>;
                clock-output-names = "xin32k", "wifibt_32kin";
                interrupt-parent = <&gpio0>;
-               interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
+               interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&pmic_int_l>;
                rockchip,system-power-controller;
index 4fad13368a7bec2e7836fde4435b72e643135a15..df8a0dbe9d910aa44174bcfb4400aa445859a72e 100644 (file)
@@ -762,6 +762,15 @@ pd_vio@RK3288_PD_VIO {
                                         <&cru SCLK_ISP_JPE>,
                                         <&cru SCLK_ISP>,
                                         <&cru SCLK_RGA>;
+                               pm_qos = <&qos_vio0_iep>,
+                                        <&qos_vio1_vop>,
+                                        <&qos_vio1_isp_w0>,
+                                        <&qos_vio1_isp_w1>,
+                                        <&qos_vio0_vop>,
+                                        <&qos_vio0_vip>,
+                                        <&qos_vio2_rga_r>,
+                                        <&qos_vio2_rga_w>,
+                                        <&qos_vio1_isp_r>;
                        };
 
                        /*
@@ -773,6 +782,8 @@ pd_hevc@RK3288_PD_HEVC {
                                clocks = <&cru ACLK_HEVC>,
                                         <&cru SCLK_HEVC_CABAC>,
                                         <&cru SCLK_HEVC_CORE>;
+                               pm_qos = <&qos_hevc_r>,
+                                        <&qos_hevc_w>;
                        };
 
                        /*
@@ -784,6 +795,7 @@ pd_video@RK3288_PD_VIDEO {
                                reg = <RK3288_PD_VIDEO>;
                                clocks = <&cru ACLK_VCODEC>,
                                         <&cru HCLK_VCODEC>;
+                               pm_qos = <&qos_video>;
                        };
 
                        /*
@@ -793,6 +805,8 @@ pd_video@RK3288_PD_VIDEO {
                        pd_gpu@RK3288_PD_GPU {
                                reg = <RK3288_PD_GPU>;
                                clocks = <&cru ACLK_GPU>;
+                               pm_qos = <&qos_gpu_r>,
+                                        <&qos_gpu_w>;
                        };
                };
 
@@ -1103,6 +1117,76 @@ hdmi_in_vopl: endpoint@1 {
                };
        };
 
+       qos_gpu_r: qos@ffaa0000 {
+               compatible = "syscon";
+               reg = <0xffaa0000 0x20>;
+       };
+
+       qos_gpu_w: qos@ffaa0080 {
+               compatible = "syscon";
+               reg = <0xffaa0080 0x20>;
+       };
+
+       qos_vio1_vop: qos@ffad0000 {
+               compatible = "syscon";
+               reg = <0xffad0000 0x20>;
+       };
+
+       qos_vio1_isp_w0: qos@ffad0100 {
+               compatible = "syscon";
+               reg = <0xffad0100 0x20>;
+       };
+
+       qos_vio1_isp_w1: qos@ffad0180 {
+               compatible = "syscon";
+               reg = <0xffad0180 0x20>;
+       };
+
+       qos_vio0_vop: qos@ffad0400 {
+               compatible = "syscon";
+               reg = <0xffad0400 0x20>;
+       };
+
+       qos_vio0_vip: qos@ffad0480 {
+               compatible = "syscon";
+               reg = <0xffad0480 0x20>;
+       };
+
+       qos_vio0_iep: qos@ffad0500 {
+               compatible = "syscon";
+               reg = <0xffad0500 0x20>;
+       };
+
+       qos_vio2_rga_r: qos@ffad0800 {
+               compatible = "syscon";
+               reg = <0xffad0800 0x20>;
+       };
+
+       qos_vio2_rga_w: qos@ffad0880 {
+               compatible = "syscon";
+               reg = <0xffad0880 0x20>;
+       };
+
+       qos_vio1_isp_r: qos@ffad0900 {
+               compatible = "syscon";
+               reg = <0xffad0900 0x20>;
+       };
+
+       qos_video: qos@ffae0000 {
+               compatible = "syscon";
+               reg = <0xffae0000 0x20>;
+       };
+
+       qos_hevc_r: qos@ffaf0000 {
+               compatible = "syscon";
+               reg = <0xffaf0000 0x20>;
+       };
+
+       qos_hevc_w: qos@ffaf0080 {
+               compatible = "syscon";
+               reg = <0xffaf0080 0x20>;
+       };
+
        gic: interrupt-controller@ffc01000 {
                compatible = "arm,gic-400";
                interrupt-controller;
@@ -1110,7 +1194,7 @@ gic: interrupt-controller@ffc01000 {
                #address-cells = <0>;
 
                reg = <0xffc01000 0x1000>,
-                     <0xffc02000 0x1000>,
+                     <0xffc02000 0x2000>,
                      <0xffc04000 0x2000>,
                      <0xffc06000 0x2000>;
                interrupts = <GIC_PPI 9 0xf04>;
index ceb9783ff7e1fc2a16e8d4052c3606091d5b802e..22332be7214032fd3ba710def036168f3f9c2b3c 100644 (file)
@@ -395,6 +395,16 @@ dma0: dma-controller@f0010000 {
                                clock-names = "dma_clk";
                        };
 
+                       /* Place dma1 here despite its address */
+                       dma1: dma-controller@f0004000 {
+                               compatible = "atmel,sama5d4-dma";
+                               reg = <0xf0004000 0x1000>;
+                               interrupts = <7 IRQ_TYPE_LEVEL_HIGH 0>;
+                               #dma-cells = <1>;
+                               clocks = <&dma1_clk>;
+                               clock-names = "dma_clk";
+                       };
+
                        pmc: pmc@f0014000 {
                                compatible = "atmel,sama5d2-pmc", "syscon";
                                reg = <0xf0014000 0x160>;
@@ -931,6 +941,22 @@ AT91_XDMAC_DT_PERID(6))>,
                                status = "disabled";
                        };
 
+                       ssc0: ssc@f8004000 {
+                               compatible = "atmel,at91sam9g45-ssc";
+                               reg = <0xf8004000 0x4000>;
+                               interrupts = <43 IRQ_TYPE_LEVEL_HIGH 4>;
+                               dmas = <&dma0
+                                       (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1) |
+                                       AT91_XDMAC_DT_PERID(21))>,
+                                      <&dma0
+                                       (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1) |
+                                       AT91_XDMAC_DT_PERID(22))>;
+                               dma-names = "tx", "rx";
+                               clocks = <&ssc0_clk>;
+                               clock-names = "pclk";
+                               status = "disabled";
+                       };
+
                        macb0: ethernet@f8008000 {
                                compatible = "atmel,sama5d2-gem";
                                reg = <0xf8008000 0x1000>;
@@ -1141,10 +1167,10 @@ uart3: serial@fc008000 {
                                compatible = "atmel,at91sam9260-usart";
                                reg = <0xfc008000 0x100>;
                                interrupts = <27 IRQ_TYPE_LEVEL_HIGH 7>;
-                               dmas = <&dma0
+                               dmas = <&dma1
                                        (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1) |
                                         AT91_XDMAC_DT_PERID(41))>,
-                                      <&dma0
+                                      <&dma1
                                        (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1) |
                                         AT91_XDMAC_DT_PERID(42))>;
                                dma-names = "tx", "rx";
diff --git a/arch/arm/boot/dts/sama5d36ek_cmp.dts b/arch/arm/boot/dts/sama5d36ek_cmp.dts
new file mode 100644 (file)
index 0000000..b632143
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * sama5d36ek_cmp.dts - Device Tree file for SAMA5D36-EK CMP board
+ *
+ *  Copyright (C) 2016 Atmel,
+ *
+ * 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 "sama5d36.dtsi"
+#include "sama5d3xmb_cmp.dtsi"
+
+/ {
+       model = "Atmel SAMA5D36EK-CMP";
+       compatible = "atmel,sama5d36ek-cmp", "atmel,sama5d3xmb-cmp", "atmel,sama5d3xcm-cmp", "atmel,sama5d36", "atmel,sama5d3", "atmel,sama5";
+
+       ahb {
+               apb {
+                       spi0: spi@f0004000 {
+                               status = "okay";
+                       };
+
+                       ssc0: ssc@f0008000 {
+                               status = "okay";
+                       };
+
+                       can0: can@f000c000 {
+                               status = "okay";
+                       };
+
+                       i2c0: i2c@f0014000 {
+                               status = "okay";
+                       };
+
+                       i2c1: i2c@f0018000 {
+                               status = "okay";
+                       };
+
+                       macb0: ethernet@f0028000 {
+                               status = "okay";
+                       };
+
+                       macb1: ethernet@f802c000 {
+                               status = "okay";
+                       };
+               };
+       };
+
+       sound {
+               status = "okay";
+       };
+};
index 2511d748867bdd17fc3e08140b69ba5f61b594d7..186377d41c917515523386827fae06ce19437a2a 100644 (file)
@@ -55,7 +55,7 @@ uart1_clk: uart1_clk {
 
                        uart0: serial@f0024000 {
                                compatible = "atmel,at91sam9260-usart";
-                               reg = <0xf0024000 0x200>;
+                               reg = <0xf0024000 0x100>;
                                interrupts = <16 IRQ_TYPE_LEVEL_HIGH 5>;
                                pinctrl-names = "default";
                                pinctrl-0 = <&pinctrl_uart0>;
@@ -66,7 +66,7 @@ uart0: serial@f0024000 {
 
                        uart1: serial@f8028000 {
                                compatible = "atmel,at91sam9260-usart";
-                               reg = <0xf8028000 0x200>;
+                               reg = <0xf8028000 0x100>;
                                interrupts = <17 IRQ_TYPE_LEVEL_HIGH 5>;
                                pinctrl-names = "default";
                                pinctrl-0 = <&pinctrl_uart1>;
diff --git a/arch/arm/boot/dts/sama5d3xcm_cmp.dtsi b/arch/arm/boot/dts/sama5d3xcm_cmp.dtsi
new file mode 100644 (file)
index 0000000..dc7572b
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * sama5d3xcm_cmp.dtsi - Device Tree Include file for SAMA5D36 CMP CPU Module
+ *
+ *  Copyright (C) 2016 Atmel,
+ *
+ * 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.
+ */
+
+/ {
+       compatible = "atmel,sama5d3xcm-cmp", "atmel,sama5d3", "atmel,sama5";
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory {
+               reg = <0x20000000 0x20000000>;
+       };
+
+       clocks {
+               slow_xtal {
+                       clock-frequency = <32768>;
+               };
+
+               main_xtal {
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       ahb {
+               apb {
+                       spi0: spi@f0004000 {
+                               cs-gpios = <&pioD 13 0>, <0>, <0>, <0>;
+                       };
+
+                       macb0: ethernet@f0028000 {
+                               phy-mode = "rgmii";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               ethernet-phy@1 {
+                                       reg = <0x1>;
+                                       interrupt-parent = <&pioB>;
+                                       interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
+                                       txen-skew-ps = <800>;
+                                       txc-skew-ps = <3000>;
+                                       rxdv-skew-ps = <400>;
+                                       rxc-skew-ps = <3000>;
+                                       rxd0-skew-ps = <400>;
+                                       rxd1-skew-ps = <400>;
+                                       rxd2-skew-ps = <400>;
+                                       rxd3-skew-ps = <400>;
+                               };
+
+                               ethernet-phy@7 {
+                                       reg = <0x7>;
+                                       interrupt-parent = <&pioB>;
+                                       interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
+                                       txen-skew-ps = <800>;
+                                       txc-skew-ps = <3000>;
+                                       rxdv-skew-ps = <400>;
+                                       rxc-skew-ps = <3000>;
+                                       rxd0-skew-ps = <400>;
+                                       rxd1-skew-ps = <400>;
+                                       rxd2-skew-ps = <400>;
+                                       rxd3-skew-ps = <400>;
+                               };
+                       };
+
+                       i2c1: i2c@f0018000 {
+                               pmic: act8865@5b {
+                                       compatible = "active-semi,act8865";
+                                       reg = <0x5b>;
+                                       status = "disabled";
+
+                                       regulators {
+                                               vcc_1v8_reg: DCDC_REG1 {
+                                                       regulator-name = "VCC_1V8";
+                                                       regulator-min-microvolt = <1800000>;
+                                                       regulator-max-microvolt = <1800000>;
+                                                       regulator-always-on;
+                                               };
+
+                                               vcc_1v2_reg: DCDC_REG2 {
+                                                       regulator-name = "VCC_1V2";
+                                                       regulator-min-microvolt = <1100000>;
+                                                       regulator-max-microvolt = <1300000>;
+                                                       regulator-always-on;
+                                               };
+
+                                               vcc_3v3_reg: DCDC_REG3 {
+                                                       regulator-name = "VCC_3V3";
+                                                       regulator-min-microvolt = <3300000>;
+                                                       regulator-max-microvolt = <3300000>;
+                                                       regulator-always-on;
+                                               };
+
+                                               vddana_reg: LDO_REG1 {
+                                                       regulator-name = "VDDANA";
+                                                       regulator-min-microvolt = <3300000>;
+                                                       regulator-max-microvolt = <3300000>;
+                                                       regulator-always-on;
+                                               };
+
+                                               vddfuse_reg: LDO_REG2 {
+                                                       regulator-name = "FUSE_2V5";
+                                                       regulator-min-microvolt = <2500000>;
+                                                       regulator-max-microvolt = <2500000>;
+                                               };
+                                       };
+                               };
+                       };
+               };
+
+               nand0: nand@60000000 {
+                       nand-bus-width = <8>;
+                       nand-ecc-mode = "hw";
+                       atmel,has-pmecc;
+                       atmel,pmecc-cap = <4>;
+                       atmel,pmecc-sector-size = <512>;
+                       nand-on-flash-bbt;
+                       status = "okay";
+
+                       at91bootstrap@0 {
+                               label = "at91bootstrap";
+                               reg = <0x0 0x40000>;
+                       };
+
+                       bootloader@40000 {
+                               label = "bootloader";
+                               reg = <0x40000 0x80000>;
+                       };
+
+                       bootloaderenv@c0000 {
+                               label = "bootloader env";
+                               reg = <0xc0000 0xc0000>;
+                       };
+
+                       dtb@180000 {
+                               label = "device tree";
+                               reg = <0x180000 0x80000>;
+                       };
+
+                       kernel@200000 {
+                               label = "kernel";
+                               reg = <0x200000 0x600000>;
+                       };
+
+                       rootfs@800000 {
+                               label = "rootfs";
+                               reg = <0x800000 0x0f800000>;
+                       };
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               d2 {
+                       label = "d2";
+                       gpios = <&pioE 25 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "heartbeat";
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/sama5d3xmb_cmp.dtsi b/arch/arm/boot/dts/sama5d3xmb_cmp.dtsi
new file mode 100644 (file)
index 0000000..252e0d3
--- /dev/null
@@ -0,0 +1,301 @@
+/*
+ * sama5d3xmb_cmp.dts - Device Tree file for SAMA5D3x CMP mother board
+ *
+ *  Copyright (C) 2016 Atmel,
+ *
+ * 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.
+ */
+#include "sama5d3xcm_cmp.dtsi"
+
+/ {
+       compatible = "atmel,sama5d3xmb-cmp", "atmel,sama5d3xcm-cmp", "atmel,sama5d3", "atmel,sama5";
+
+       ahb {
+               apb {
+                       mmc0: mmc@f0000000 {
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_cd>;
+                               status = "okay";
+                               slot@0 {
+                                       reg = <0>;
+                                       bus-width = <4>;
+                                       cd-gpios = <&pioD 17 GPIO_ACTIVE_HIGH>;
+                               };
+                       };
+
+                       spi0: spi@f0004000 {
+                               dmas = <0>, <0>;        /*  Do not use DMA for spi0 */
+
+                               m25p80@0 {
+                                       compatible = "atmel,at25df321a";
+                                       spi-max-frequency = <50000000>;
+                                       reg = <0>;
+                               };
+                       };
+
+                       ssc0: ssc@f0008000 {
+                               atmel,clk-from-rk-pin;
+                       };
+
+                       /*
+                        * i2c0 conflicts with ISI:
+                        * disable it to allow the use of ISI
+                        * can not enable audio when i2c0 disabled
+                        */
+                       i2c0: i2c@f0014000 {
+                               wm8904: wm8904@1a {
+                                       compatible = "wlf,wm8904";
+                                       reg = <0x1a>;
+                                       clocks = <&pck0>;
+                                       clock-names = "mclk";
+                               };
+                       };
+
+                       i2c1: i2c@f0018000 {
+                               ov2640: camera@0x30 {
+                                       compatible = "ovti,ov2640";
+                                       reg = <0x30>;
+                                       pinctrl-names = "default";
+                                       pinctrl-0 = <&pinctrl_pck1_as_isi_mck &pinctrl_sensor_power &pinctrl_sensor_reset>;
+                                       resetb-gpios = <&pioE 24 GPIO_ACTIVE_LOW>;
+                                       pwdn-gpios = <&pioE 29 GPIO_ACTIVE_HIGH>;
+                                       /* use pck1 for the master clock of ov2640 */
+                                       clocks = <&pck1>;
+                                       clock-names = "xvclk";
+                                       assigned-clocks = <&pck1>;
+                                       assigned-clock-rates = <25000000>;
+
+                                       port {
+                                               ov2640_0: endpoint {
+                                                       remote-endpoint = <&isi_0>;
+                                                       bus-width = <8>;
+                                               };
+                                       };
+                               };
+                       };
+
+                       usart1: serial@f0020000 {
+                               dmas = <0>, <0>;        /*  Do not use DMA for usart1 */
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>;
+                               status = "okay";
+                       };
+
+                       isi: isi@f0034000 {
+                               port {
+                                       isi_0: endpoint {
+                                               remote-endpoint = <&ov2640_0>;
+                                               bus-width = <8>;
+                                               vsync-active = <1>;
+                                               hsync-active = <1>;
+                                       };
+                               };
+                       };
+
+                       mmc1: mmc@f8000000 {
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3 &pinctrl_mmc1_cd>;
+                               status = "okay";
+                               slot@0 {
+                                       reg = <0>;
+                                       bus-width = <4>;
+                                       cd-gpios = <&pioD 18 GPIO_ACTIVE_HIGH>;
+                               };
+                       };
+
+                       adc0: adc@f8018000 {
+                               pinctrl-names = "default", "sleep";
+                               pinctrl-0 = <
+                                       &pinctrl_adc0_adtrg
+                                       &pinctrl_adc0_ad0
+                                       &pinctrl_adc0_ad1
+                                       &pinctrl_adc0_ad2
+                                       &pinctrl_adc0_ad3
+                                       &pinctrl_adc0_ad4
+                                       >;
+                               pinctrl-1 = <
+                                       &pinctrl_adc0_adtrg_sleep
+                                       &pinctrl_adc0_ad0_sleep
+                                       &pinctrl_adc0_ad1_sleep
+                                       &pinctrl_adc0_ad2_sleep
+                                       &pinctrl_adc0_ad3_sleep
+                                       &pinctrl_adc0_ad4_sleep
+                                       >;
+                               status = "okay";
+                       };
+
+                       macb1: ethernet@f802c000 {
+                               phy-mode = "rmii";
+
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               phy0: ethernet-phy@1 {
+                                       /*interrupt-parent = <&pioE>;*/
+                                       /*interrupts = <30 IRQ_TYPE_EDGE_FALLING>;*/
+                                       reg = <1>;
+                               };
+                       };
+
+                       pinctrl@fffff200 {
+                               adc0 {
+                                       pinctrl_adc0_adtrg_sleep: adc0_adtrg_1 {
+                                               atmel,pins =
+                                                       <AT91_PIOD 19 AT91_PERIPH_GPIO (AT91_PINCTRL_OUTPUT | AT91_PINCTRL_OUTPUT_VAL(0))>;
+                                       };
+                                       pinctrl_adc0_ad0_sleep: adc0_ad0_1 {
+                                               atmel,pins =
+                                                       <AT91_PIOD 20 AT91_PERIPH_GPIO (AT91_PINCTRL_OUTPUT | AT91_PINCTRL_OUTPUT_VAL(0))>;
+                                       };
+                                       pinctrl_adc0_ad1_sleep: adc0_ad1_1 {
+                                               atmel,pins =
+                                                       <AT91_PIOD 21 AT91_PERIPH_GPIO (AT91_PINCTRL_OUTPUT | AT91_PINCTRL_OUTPUT_VAL(0))>;
+                                       };
+                                       pinctrl_adc0_ad2_sleep: adc0_ad2_1 {
+                                               atmel,pins =
+                                                       <AT91_PIOD 22 AT91_PERIPH_GPIO (AT91_PINCTRL_OUTPUT | AT91_PINCTRL_OUTPUT_VAL(0))>;
+                                       };
+                                       pinctrl_adc0_ad3_sleep: adc0_ad3_1 {
+                                               atmel,pins =
+                                                       <AT91_PIOD 23 AT91_PERIPH_GPIO (AT91_PINCTRL_OUTPUT | AT91_PINCTRL_OUTPUT_VAL(0))>;
+                                       };
+                                       pinctrl_adc0_ad4_sleep: adc0_ad4_1 {
+                                               atmel,pins =
+                                                       <AT91_PIOD 24 AT91_PERIPH_GPIO (AT91_PINCTRL_OUTPUT | AT91_PINCTRL_OUTPUT_VAL(0))>;
+                                       };
+                               };
+
+                               board {
+                                       pinctrl_gpio_keys: gpio_keys {
+                                               atmel,pins =
+                                                       <AT91_PIOE 27 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;
+                                       };
+
+                                       pinctrl_mmc0_cd: mmc0_cd {
+                                               atmel,pins =
+                                                       <AT91_PIOD 17 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
+                                       };
+
+                                       pinctrl_mmc1_cd: mmc1_cd {
+                                               atmel,pins =
+                                                       <AT91_PIOD 18 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
+                                       };
+
+                                       pinctrl_pck0_as_audio_mck: pck0_as_audio_mck {
+                                               atmel,pins =
+                                                       <AT91_PIOD 30 AT91_PERIPH_B AT91_PINCTRL_NONE>;
+                                       };
+
+                                       pinctrl_pck1_as_isi_mck: pck1_as_isi_mck-0 {
+                                               atmel,pins =
+                                                       <AT91_PIOD 31 AT91_PERIPH_B AT91_PINCTRL_NONE>;
+                                       };
+
+                                       pinctrl_sensor_reset: sensor_reset-0 {
+                                               atmel,pins =
+                                                       <AT91_PIOE 24 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
+                                       };
+
+                                       pinctrl_sensor_power: sensor_power-0 {
+                                               atmel,pins =
+                                                       <AT91_PIOE 29 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
+                                       };
+
+                                       pinctrl_usba_vbus: usba_vbus {
+                                               atmel,pins =
+                                                       <AT91_PIOD 29 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;
+                                       };
+                               };
+                       };
+
+                       dbgu: serial@ffffee00 {
+                               dmas = <0>, <0>;        /*  Do not use DMA for dbgu */
+                               status = "okay";
+                       };
+
+                       watchdog@fffffe40 {
+                               status = "okay";
+                       };
+               };
+
+               usb0: gadget@00500000 {
+                       atmel,vbus-gpio = <&pioD 29 GPIO_ACTIVE_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usba_vbus>;
+                       status = "okay";
+               };
+       };
+
+       sound {
+               compatible = "atmel,asoc-wm8904";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_pck0_as_audio_mck>;
+
+               atmel,model = "wm8904 @ SAMA5D3EK";
+               atmel,audio-routing =
+                       "Headphone Jack", "HPOUTL",
+                       "Headphone Jack", "HPOUTR",
+                       "IN2L", "Line In Jack",
+                       "IN2R", "Line In Jack",
+                       "Mic", "MICBIAS",
+                       "IN1L", "Mic";
+
+               atmel,ssc-controller = <&ssc0>;
+               atmel,audio-codec = <&wm8904>;
+
+               status = "disabled";
+       };
+
+       /* Conflict with LCD pins */
+       gpio_keys {
+               compatible = "gpio-keys";
+               status = "okay";
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_gpio_keys>;
+
+               pb_user1 {
+                       label = "pb_user1";
+                       gpios = <&pioE 27 GPIO_ACTIVE_HIGH>;
+                       linux,code = <0x100>;
+                       wakeup-source;
+               };
+       };
+};
index 4f60c1b7b1370e68c2bf07a6b62668abba0fc9fd..d3889c9d25a94cb3c8e2dcd3f30ac1268b7128a7 100644 (file)
@@ -854,10 +854,10 @@ uart0: serial@f8004000 {
                                compatible = "atmel,at91sam9260-usart";
                                reg = <0xf8004000 0x100>;
                                interrupts = <27 IRQ_TYPE_LEVEL_HIGH 5>;
-                               dmas = <&dma1
+                               dmas = <&dma0
                                        (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
                                        | AT91_XDMAC_DT_PERID(22))>,
-                                      <&dma1
+                                      <&dma0
                                        (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
                                        | AT91_XDMAC_DT_PERID(23))>;
                                dma-names = "tx", "rx";
@@ -938,10 +938,10 @@ i2c1: i2c@f8018000 {
                                compatible = "atmel,sama5d4-i2c";
                                reg = <0xf8018000 0x4000>;
                                interrupts = <33 IRQ_TYPE_LEVEL_HIGH 6>;
-                               dmas = <&dma1
+                               dmas = <&dma0
                                        (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
                                        | AT91_XDMAC_DT_PERID(4))>,
-                                      <&dma1
+                                      <&dma0
                                        (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
                                        | AT91_XDMAC_DT_PERID(5))>;
                                dma-names = "tx", "rx";
@@ -1055,10 +1055,10 @@ uart1: serial@fc004000 {
                                compatible = "atmel,at91sam9260-usart";
                                reg = <0xfc004000 0x100>;
                                interrupts = <28 IRQ_TYPE_LEVEL_HIGH 5>;
-                               dmas = <&dma1
+                               dmas = <&dma0
                                        (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
                                        | AT91_XDMAC_DT_PERID(24))>,
-                                      <&dma1
+                                      <&dma0
                                        (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
                                        | AT91_XDMAC_DT_PERID(25))>;
                                dma-names = "tx", "rx";
@@ -1167,10 +1167,10 @@ spi2: spi@fc01c000 {
                                compatible = "atmel,at91rm9200-spi";
                                reg = <0xfc01c000 0x100>;
                                interrupts = <39 IRQ_TYPE_LEVEL_HIGH 3>;
-                               dmas = <&dma1
+                               dmas = <&dma0
                                        (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
                                        | AT91_XDMAC_DT_PERID(14))>,
-                                      <&dma1
+                                      <&dma0
                                        (AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
                                        | AT91_XDMAC_DT_PERID(15))>;
                                dma-names = "tx", "rx";
index e1267590b57570e5dd211779c1556afb74a2ff95..6b01ab354e8896bdda55c99da8f0ccb47033e621 100644 (file)
@@ -263,7 +263,7 @@ GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH
        };
 
        mmcif: mmc@e6bd0000 {
-               compatible = "renesas,sh-mmcif";
+               compatible = "renesas,mmcif-sh73a0", "renesas,sh-mmcif";
                reg = <0xe6bd0000 0x100>;
                interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH
                              GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
index da689659131fd4aeec864ef4dd606f801ac9acae..2c43c4d85deec3e4308c56b038dc5865d1c23874 100644 (file)
@@ -93,6 +93,14 @@ pdma: pdma@ffe01000 {
                        };
                };
 
+               base_fpga_region {
+                       compatible = "fpga-region";
+                       fpga-mgr = <&fpgamgr0>;
+
+                       #address-cells = <0x1>;
+                       #size-cells = <0x1>;
+               };
+
                can0: can@ffc00000 {
                        compatible = "bosch,d_can";
                        reg = <0xffc00000 0x1000>;
@@ -513,10 +521,24 @@ h2f_user2_clk: h2f_user2_clk {
                                };
                };
 
+               fpga_bridge0: fpga_bridge@ff400000 {
+                       compatible = "altr,socfpga-lwhps2fpga-bridge";
+                       reg = <0xff400000 0x100000>;
+                       resets = <&rst LWHPS2FPGA_RESET>;
+                       clocks = <&l4_main_clk>;
+               };
+
+               fpga_bridge1: fpga_bridge@ff500000 {
+                       compatible = "altr,socfpga-hps2fpga-bridge";
+                       reg = <0xff500000 0x10000>;
+                       resets = <&rst HPS2FPGA_RESET>;
+                       clocks = <&l4_main_clk>;
+               };
+
                fpgamgr0: fpgamgr@ff706000 {
                        compatible = "altr,socfpga-fpga-mgr";
                        reg = <0xff706000 0x1000
-                              0xffb90000 0x1000>;
+                              0xffb90000 0x4>;
                        interrupts = <0 175 4>;
                };
 
@@ -694,6 +716,11 @@ L2: l2-cache@fffef000 {
                        arm,prefetch-offset = <7>;
                };
 
+               l3regs@0xff800000 {
+                       compatible = "altr,l3regs", "syscon";
+                       reg = <0xff800000 0x1000>;
+               };
+
                mmc: dwmmc0@ff704000 {
                        compatible = "altr,socfpga-dw-mshc";
                        reg = <0xff704000 0x1000>;
@@ -751,7 +778,7 @@ scu: snoop-control-unit@fffec000 {
                };
 
                sdr: sdr@ffc25000 {
-                       compatible = "syscon";
+                       compatible = "altr,sdr-ctl", "syscon";
                        reg = <0xffc25000 0x1000>;
                };
 
index 551c636a4f013b9bc96b88c0016acabe2dc93f46..65904db153bec69654d932c5ecf3fd5eff7d1f33 100644 (file)
@@ -83,6 +83,14 @@ pdma: pdma@ffda1000 {
                        };
                };
 
+               base_fpga_region {
+                       #address-cells = <0x1>;
+                       #size-cells = <0x1>;
+
+                       compatible = "fpga-region";
+                       fpga-mgr = <&fpga_mgr>;
+               };
+
                clkmgr@ffd04000 {
                                compatible = "altr,clk-mgr";
                                reg = <0xffd04000 0x1000>;
@@ -512,6 +520,15 @@ portc: gpio-controller@0 {
                        };
                };
 
+               fpga_mgr: fpga-mgr@ffd03000 {
+                       compatible = "altr,socfpga-a10-fpga-mgr";
+                       reg = <0xffd03000 0x100
+                              0xffcfe400 0x20>;
+                       clocks = <&l4_mp_clk>;
+                       resets = <&rst FPGAMGR_RESET>;
+                       reset-names = "fpgamgr";
+               };
+
                i2c0: i2c@ffc02200 {
                        #address-cells = <1>;
                        #size-cells = <0>;
@@ -578,7 +595,7 @@ spi1: spi@ffda5000 {
                };
 
                sdr: sdr@ffc25000 {
-                       compatible = "syscon";
+                       compatible = "altr,sdr-ctl", "syscon";
                        reg = <0xffcfb100 0x80>;
                };
 
@@ -605,6 +622,19 @@ mmc: dwmmc0@ff808000 {
                        status = "disabled";
                };
 
+               nand: nand@ffb90000 {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       compatible = "denali,denali-nand-dt", "altr,socfpga-denali-nand";
+                       reg = <0xffb90000 0x72000>,
+                             <0xffb80000 0x10000>;
+                       reg-names = "nand_data", "denali_reg";
+                       interrupts = <0 99 4>;
+                       dma-mask = <0xffffffff>;
+                       clocks = <&nand_clk>;
+                       status = "disabled";
+               };
+
                ocram: sram@ffe00000 {
                        compatible = "mmio-sram";
                        reg = <0xffe00000 0x40000>;
index eb00ae37f3165a14c923f2d210dc00a52441f5c1..4c99c99d1752a932c198f04b1f700f6f7fe9e2db 100644 (file)
@@ -145,6 +145,11 @@ rtc@68 {
                compatible = "dallas,ds1339";
                reg = <0x68>;
        };
+
+       ltc@5c {
+               compatible = "ltc2977";
+               reg = <0x5c>;
+       };
 };
 
 &uart1 {
@@ -154,3 +159,7 @@ &uart1 {
 &usb0 {
        status = "okay";
 };
+
+&watchdog0 {
+       status = "okay";
+};
diff --git a/arch/arm/boot/dts/socfpga_arria10_socdk_nand.dts b/arch/arm/boot/dts/socfpga_arria10_socdk_nand.dts
new file mode 100644 (file)
index 0000000..d14f9cc
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * 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/;
+#include "socfpga_arria10_socdk.dtsi"
+
+&nand {
+       status = "okay";
+
+       partition@nand-boot {
+               label = "Boot and fpga data";
+               reg = <0x0 0x1C00000>;
+       };
+       partition@nand-rootfs {
+               label = "Root Filesystem - JFFS2";
+               reg = <0x1C00000 0x6400000>;
+       };
+};
index 1907cc60045218663fad56e7def2a8825311f9f1..8c037297296c3c50586b62596842d958fbbd548a 100644 (file)
@@ -42,3 +42,7 @@ sysmgr@ffd08000 {
                };
        };
 };
+
+&watchdog0 {
+       status = "okay";
+};
index f739ead074a2b455255d45f38c4bafe82224c415..8672edf9ba4ebccb6c4b131909bccd6d9d8070bb 100644 (file)
@@ -39,6 +39,29 @@ aliases {
                ethernet0 = &gmac1;
        };
 
+       leds {
+               compatible = "gpio-leds";
+               hps0 {
+                       label = "hps_led0";
+                       gpios = <&porta 0 1>;
+               };
+
+               hps1 {
+                       label = "hps_led1";
+                       gpios = <&portb 11 1>;
+               };
+
+               hps2 {
+                       label = "hps_led2";
+                       gpios = <&porta 17 1>;
+               };
+
+               hps3 {
+                       label = "hps_led3";
+                       gpios = <&porta 18 1>;
+               };
+       };
+
        regulator_3_3v: 3-3-v-regulator {
                compatible = "regulator-fixed";
                regulator-name = "3.3V";
@@ -61,8 +84,28 @@ &gmac1 {
        rxc-skew-ps = <2000>;
 };
 
+&gpio0 {
+       status = "okay";
+};
+
+&gpio1 {
+       status = "okay";
+};
+
+&gpio2 {
+       status = "okay";
+};
+
 &i2c0 {
        status = "okay";
+       clock-frequency = <100000>;
+
+       /*
+        * adjust the falling times to decrease the i2c frequency to 50Khz
+        * because the LCD module does not work at the standard 100Khz
+        */
+       i2c-sda-falling-time-ns = <5000>;
+       i2c-scl-falling-time-ns = <5000>;
 
        eeprom@51 {
                compatible = "atmel,24c32";
index 6306d008f01b756991994267cb2538b7a2c93f94..7ea32c81e72090a4fe4f175d10f1ee40a1b42a90 100644 (file)
@@ -39,6 +39,29 @@ aliases {
                ethernet0 = &gmac1;
        };
 
+       leds {
+               compatible = "gpio-leds";
+               hps0 {
+                       label = "hps_led0";
+                       gpios = <&portb 15 1>;
+               };
+
+               hps1 {
+                       label = "hps_led1";
+                       gpios = <&portb 14 1>;
+               };
+
+               hps2 {
+                       label = "hps_led2";
+                       gpios = <&portb 13 1>;
+               };
+
+               hps3 {
+                       label = "hps_led3";
+                       gpios = <&portb 12 1>;
+               };
+       };
+
        regulator_3_3v: 3-3-v-regulator {
                compatible = "regulator-fixed";
                regulator-name = "3.3V";
@@ -47,6 +70,10 @@ regulator_3_3v: 3-3-v-regulator {
        };
 };
 
+&can0 {
+       status = "okay";
+};
+
 &gmac1 {
        status = "okay";
        phy-mode = "rgmii";
@@ -61,12 +88,28 @@ &gmac1 {
        rxc-skew-ps = <2000>;
 };
 
+&gpio0 {
+       status = "okay";
+};
+
 &gpio1 {
        status = "okay";
 };
 
+&gpio2 {
+       status = "okay";
+};
+
 &i2c0 {
        status = "okay";
+       clock-frequency = <100000>;
+
+       /*
+        * adjust the falling times to decrease the i2c frequency to 50Khz
+        * because the LCD module does not work at the standard 100Khz
+        */
+       i2c-sda-falling-time-ns = <5000>;
+       i2c-scl-falling-time-ns = <5000>;
 
        eeprom@51 {
                compatible = "atmel,24c32";
@@ -120,6 +163,16 @@ partition@qspi-rootfs {
        };
 };
 
+&spi0 {
+       status = "okay";
+
+       spidev@0 {
+               compatible = "rohm,dh2228fv";
+               reg = <0>;
+               spi-max-frequency = <1000000>;
+       };
+};
+
 &usb1 {
        status = "okay";
 };
index d309314f3a364fd138e0be2befe4ff30712dee38..82d8c477129359952b0ae499a2fdefca9393bdf4 100644 (file)
@@ -669,6 +669,8 @@ ab8500_usb {
                                        vddulpivio18-supply = <&ab8500_ldo_intcore_reg>;
                                        v-ape-supply = <&db8500_vape_reg>;
                                        musb_1v8-supply = <&db8500_vsmps2_reg>;
+                                       clocks = <&prcmu_clk PRCMU_SYSCLK>;
+                                       clock-names = "sysclk";
                                };
 
                                ab8500-ponkey {
index 48dc38482633741b8f2af052d31ae0ff9785f7f4..f37f9e10713cc878ce9ee0393aa4b0c6ad239adf 100644 (file)
@@ -19,12 +19,6 @@ memory {
        };
 
        soc {
-               usb_per5@a03e0000 {
-                       pinctrl-names = "default", "sleep";
-                       pinctrl-0 = <&musb_default_mode>;
-                       pinctrl-1 = <&musb_sleep_mode>;
-               };
-
                uart@80120000 {
                        pinctrl-names = "default", "sleep";
                        pinctrl-0 = <&uart0_default_mode>;
@@ -111,6 +105,7 @@ i2c@80110000 {
                        pinctrl-1 = <&i2c3_sleep_mode>;
                };
 
+               /* ST6G3244ME level translator for 1.8/2.9 V */
                vmmci: regulator-gpio {
                        compatible = "regulator-gpio";
 
@@ -120,7 +115,6 @@ vmmci: regulator-gpio {
                        regulator-type = "voltage";
 
                        startup-delay-us = <100>;
-                       enable-active-high;
 
                        states = <1800000 0x1
                                  2900000 0x0>;
@@ -197,6 +191,8 @@ sound {
 
                        stericsson,cpu-dai = <&msp1 &msp3>;
                        stericsson,audio-codec = <&codec>;
+                       clocks = <&prcmu_clk PRCMU_SYSCLK>;
+                       clock-names = "sysclk";
                };
 
                msp0: msp@80123000 {
@@ -225,6 +221,12 @@ ab8500 {
                                ab8500-gpio {
                                };
 
+                               ab8500_usb {
+                                       pinctrl-names = "default", "sleep";
+                                       pinctrl-0 = <&musb_default_mode>;
+                                       pinctrl-1 = <&musb_sleep_mode>;
+                               };
+
                                ab8500-regulators {
                                        ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
                                                regulator-name = "V-DISPLAY";
index ece222d51717c294385fd2edc8960b1ebd6f471b..5882a2606ac3b38d37bb629469955bc949bbd7ce 100644 (file)
@@ -74,6 +74,7 @@ sdi0_per1@80126000 {
                vmmci: regulator-gpio {
                        gpios = <&tc3589x_gpio 18 GPIO_ACTIVE_HIGH>;
                        enable-gpio = <&tc3589x_gpio 17 GPIO_ACTIVE_HIGH>;
+                       enable-active-high;
                };
 
                pinctrl {
index 7187676836beb4c5eede62b9fe9c8fa0ad9f2c8b..bf259bbd1d0a289bbde53868eda758af1abdb499 100644 (file)
@@ -146,6 +146,7 @@ sdi0_per1@80126000 {
                vmmci: regulator-gpio {
                        gpios = <&gpio0 5 GPIO_ACTIVE_HIGH>;
                        enable-gpio = <&gpio5 9 GPIO_ACTIVE_HIGH>;
+                       enable-active-high;
                };
 
                pinctrl {
index 386eee6de2320aa60365095d74378ce11a865f0d..dd5514def6042470aabea1ee29853d6c713c2691 100644 (file)
@@ -159,17 +159,13 @@ gpio@8011e080 {
                                     "", "", "", "", "", "", "", "";
                };
 
-               usb_per5@a03e0000 {
-                       pinctrl-names = "default", "sleep";
-                       pinctrl-0 = <&musb_default_mode>;
-                       pinctrl-1 = <&musb_sleep_mode>;
-               };
-
                sound {
                        compatible = "stericsson,snd-soc-mop500";
 
                        stericsson,cpu-dai = <&msp1 &msp3>;
                        stericsson,audio-codec = <&codec>;
+                       clocks = <&prcmu_clk PRCMU_SYSCLK>;
+                       clock-names = "sysclk";
                };
 
                msp0: msp@80123000 {
@@ -216,11 +212,15 @@ ethernet@0 {
                        };
                };
 
+               /* ST6G3244ME level translator for 1.8/2.9 V */
                vmmci: regulator-gpio {
                        compatible = "regulator-gpio";
 
+                       /* GPIO228 SD_SEL */
                        gpios = <&gpio7 4 GPIO_ACTIVE_HIGH>;
+                       /* GPIO217 MMC_EN */
                        enable-gpio = <&gpio6 25 GPIO_ACTIVE_HIGH>;
+                       enable-active-high;
 
                        regulator-min-microvolt = <1800000>;
                        regulator-max-microvolt = <2900000>;
@@ -228,7 +228,6 @@ vmmci: regulator-gpio {
                        regulator-type = "voltage";
 
                        startup-delay-us = <100>;
-                       enable-active-high;
 
                        states = <1800000 0x1
                                  2900000 0x0>;
@@ -448,6 +447,12 @@ ab8500-gpio {
                                                     "PM_GPIO42"; /* AB8500 GPIO42 */
                                };
 
+                               ab8500_usb {
+                                       pinctrl-names = "default", "sleep";
+                                       pinctrl-0 = <&musb_default_mode>;
+                                       pinctrl-1 = <&musb_sleep_mode>;
+                               };
+
                                ext_regulators: ab8500-ext-regulators {
                                        ab8500_ext1_reg: ab8500_ext1 {
                                                regulator-name = "ab8500-ext-supply1";
@@ -546,6 +551,7 @@ sdi0 {
                                sdi0_default_mode: sdi0_default {
                                        snowball_mux {
                                                function = "mc0";
+                                               /* Add the DAT31 pin even if it is not really used */
                                                groups = "mc0dat31dir_a_1";
                                        };
                                        snowball_cfg1 {
index c8b2944e304ac6dfdfdacbc3d1b63ab12e7ad73f..d771f006e1ed51989c2241fa05bbc86fd84bd38a 100644 (file)
@@ -20,30 +20,15 @@ reserved-memory {
                #size-cells = <1>;
                ranges;
 
-               gp0_reserved: rproc@40000000 {
+               gp0_reserved: rproc@45000000 {
                        compatible = "shared-dma-pool";
-                       reg = <0x40000000 0x01000000>;
+                       reg = <0x45000000 0x00400000>;
                        no-map;
-                       status = "disabled";
                };
 
-               gp1_reserved: rproc@41000000 {
+               delta_reserved: rproc@44000000 {
                        compatible = "shared-dma-pool";
-                       reg = <0x41000000 0x01000000>;
-                       no-map;
-                       status = "disabled";
-               };
-
-               audio_reserved: rproc@42000000 {
-                       compatible = "shared-dma-pool";
-                       reg = <0x42000000 0x01000000>;
-                       no-map;
-                       status = "disabled";
-               };
-
-               dmu_reserved: rproc@43000000 {
-                       compatible = "shared-dma-pool";
-                       reg = <0x43000000 0x01000000>;
+                       reg = <0x44000000 0x01000000>;
                        no-map;
                };
        };
@@ -703,6 +688,7 @@ pwm1: pwm@9510000 {
                        compatible      = "st,sti-pwm";
                        #pwm-cells      = <2>;
                        reg             = <0x9510000 0x68>;
+                       interrupts      = <GIC_SPI 131 IRQ_TYPE_NONE>;
                        pinctrl-names   = "default";
                        pinctrl-0       = <&pinctrl_pwm1_chan0_default
                                        &pinctrl_pwm1_chan1_default
@@ -823,37 +809,22 @@ st231_gp0: remote-processor {
                        clocks          = <&clk_s_c0_flexgen CLK_ST231_GP_0>;
                        clock-frequency = <600000000>;
                        st,syscfg       = <&syscfg_core 0x22c>;
+                       #mbox-cells = <1>;
+                       mbox-names = "vq0_rx", "vq0_tx", "vq1_rx", "vq1_tx";
+                       mboxes = <&mailbox0 0 2>, <&mailbox2 0 1>, <&mailbox0 0 3>, <&mailbox2 0 0>;
                };
 
-
-               st231_gp1: remote-processor {
+               st231_delta: remote-processor {
                        compatible      = "st,st231-rproc";
-                       memory-region   = <&gp1_reserved>;
-                       resets          = <&softreset STIH407_ST231_GP1_SOFTRESET>;
-                       reset-names     = "sw_reset";
-                       clocks          = <&clk_s_c0_flexgen CLK_ST231_GP_1>;
-                       clock-frequency = <600000000>;
-                       st,syscfg       = <&syscfg_core 0x220>;
-               };
-
-               st231_audio: remote-processor {
-                       compatible      = "st,st231-rproc";
-                       memory-region   = <&audio_reserved>;
-                       resets          = <&softreset STIH407_ST231_AUD_SOFTRESET>;
-                       reset-names     = "sw_reset";
-                       clocks          = <&clk_s_c0_flexgen CLK_ST231_AUD_0>;
-                       clock-frequency = <600000000>;
-                       st,syscfg       = <&syscfg_core 0x228>;
-               };
-
-               st231_dmu: remote-processor {
-                       compatible      = "st,st231-rproc";
-                       memory-region   = <&dmu_reserved>;
+                       memory-region   = <&delta_reserved>;
                        resets          = <&softreset STIH407_ST231_DMU_SOFTRESET>;
                        reset-names     = "sw_reset";
                        clocks          = <&clk_s_c0_flexgen CLK_ST231_DMU>;
                        clock-frequency = <600000000>;
                        st,syscfg       = <&syscfg_core 0x224>;
+                       #mbox-cells = <1>;
+                       mbox-names = "vq0_rx", "vq0_tx", "vq1_rx", "vq1_tx";
+                       mboxes = <&mailbox0 0 0>, <&mailbox3 0 1>, <&mailbox0 0 1>, <&mailbox3 0 0>;
                };
 
                /* fdma audio */
@@ -889,6 +860,8 @@ fdma1: dma-controller@8e40000 {
                        interrupts = <GIC_SPI 7 IRQ_TYPE_NONE>;
                        dma-channels = <16>;
                        #dma-cells = <3>;
+
+                       status = "disabled";
                };
 
                /* fdma free running */
@@ -906,6 +879,8 @@ fdma2: dma-controller@8e60000 {
                                <&clk_s_c0_flexgen CLK_EXT2F_A9>,
                                <&clk_s_c0_flexgen CLK_TX_ICN_DISP_0>,
                                <&clk_s_c0_flexgen CLK_EXT2F_A9>;
+
+                       status = "disabled";
                };
 
                sti_sasg_codec: sti-sasg-codec {
index 118ac284fc4b65f50e2a5479171b90cde498faeb..83313b51915dd45c4a136f7ba1590387ace7e78b 100644 (file)
@@ -60,5 +60,11 @@ ohci1: usb@9a83c00 {
                ehci1: usb@9a83e00 {
                        status = "okay";
                };
+
+               sti-display-subsystem {
+                       sti-hda@8d02000 {
+                               status = "okay";
+                       };
+               };
        };
 };
index 281a12424cf6c1a01b88495059057b19c198a4ab..3c9672c5b09f0a5f904859d34205c49d7134804d 100644 (file)
@@ -131,7 +131,7 @@ sti-display-subsystem {
                                                 <&clk_s_d2_quadfs 0>;
 
                        assigned-clock-rates = <297000000>,
-                                              <108000000>,
+                                              <297000000>,
                                               <0>,
                                               <400000000>,
                                               <400000000>;
@@ -221,6 +221,7 @@ sti_hdmi: sti-hdmi@8d04000 {
 
                        sti-hda@8d02000 {
                                compatible = "st,stih407-hda";
+                               status = "disabled";
                                reg = <0x8d02000 0x400>, <0x92b0120 0x4>;
                                reg-names = "hda-reg", "video-dacs-ctrl";
                                clock-names = "pix",
@@ -232,6 +233,17 @@ sti-hda@8d02000 {
                                         <&clk_s_d2_quadfs 0>,
                                         <&clk_s_d2_quadfs 1>;
                        };
+
+                       sti-hqvdp@9c000000 {
+                               compatible = "st,stih407-hqvdp";
+                               reg = <0x9C00000 0x100000>;
+                               clock-names = "hqvdp", "pix_main";
+                               clocks = <&clk_s_c0_flexgen CLK_MAIN_DISP>,
+                                        <&clk_s_d2_flexgen CLK_PIX_MAIN_DISP>;
+                               reset-names = "hqvdp";
+                               resets = <&softreset STIH407_HDQVDP_SOFTRESET>;
+                               st,vtg = <&vtg_main>;
+                       };
                };
 
                bdisp0:bdisp@9f10000 {
@@ -259,5 +271,15 @@ thermal@91a0000 {
                        clocks = <&clk_sysin>;
                        interrupts = <GIC_SPI 205 IRQ_TYPE_EDGE_RISING>;
                };
+
+               delta0 {
+                       compatible = "st,st-delta";
+                       clock-names = "delta",
+                                     "delta-st231",
+                                     "delta-flash-promip";
+                       clocks = <&clk_s_c0_flexgen CLK_VID_DMU>,
+                                <&clk_s_c0_flexgen CLK_ST231_DMU>,
+                                <&clk_s_c0_flexgen CLK_FLASH_PROMIP>;
+               };
        };
 };
index 5436e880e28f14bc6298d36a648c7e8189816cca..3c99466989b1c3643f5ce00fd169a5f51272053e 100644 (file)
@@ -70,6 +70,20 @@ soc {
                dma-ranges = <0xc0000000 0x0 0x10000000>;
        };
 
+       regulators {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               reg_vref: regulator@0 {
+                       compatible = "regulator-fixed";
+                       reg = <0>;
+                       regulator-name = "vref";
+                       regulator-min-microvolt = <3300000>;
+                       regulator-max-microvolt = <3300000>;
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
                green {
@@ -107,15 +121,32 @@ button@1 {
        usbotg_hs_phy: usbphy {
                #phy-cells = <0>;
                compatible = "usb-nop-xceiv";
-               clocks = <&rcc 0 30>;
+               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(OTGHSULPI)>;
                clock-names = "main_clk";
        };
 };
 
+&adc {
+       pinctrl-names = "default";
+       pinctrl-0 = <&adc3_in8_pin>;
+       vref-supply = <&reg_vref>;
+       status = "okay";
+       adc3: adc@200 {
+               st,adc-channels = <8>;
+               status = "okay";
+       };
+};
+
 &clk_hse {
        clock-frequency = <25000000>;
 };
 
+&i2c1 {
+       pinctrl-0 = <&i2c1_pins>;
+       pinctrl-names = "default";
+       status = "okay";
+};
+
 &mac {
        status = "okay";
        pinctrl-0       = <&ethernet_mii>;
@@ -132,6 +163,10 @@ phy1: ethernet-phy@1 {
        };
 };
 
+&rtc {
+       status = "okay";
+};
+
 &usart1 {
        pinctrl-0 = <&usart1_pins_a>;
        pinctrl-names = "default";
index 7d0415e80668946f8df0f89813788a011a340bbf..9222b9f37bc00fefa1d9bb2176192bbb7effbe7e 100644 (file)
@@ -94,6 +94,12 @@ &clk_hse {
        clock-frequency = <8000000>;
 };
 
+&rtc {
+       assigned-clocks = <&rcc 1 CLK_RTC>;
+       assigned-clock-parents = <&rcc 1 CLK_LSI>;
+       status = "okay";
+};
+
 &usart1 {
        pinctrl-0 = <&usart1_pins_a>;
        pinctrl-names = "default";
index e4dae0eda3cdf95ebf65e3ea29cc07f8ed375335..ee0da970e8ad7dd3b776bc834c91e8002a84d682 100644 (file)
@@ -48,6 +48,8 @@
 #include "skeleton.dtsi"
 #include "armv7-m.dtsi"
 #include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
+#include <dt-bindings/clock/stm32fx-clock.h>
+#include <dt-bindings/mfd/stm32f4-rcc.h>
 
 / {
        clocks {
@@ -68,6 +70,12 @@ clk-lsi {
                        compatible = "fixed-clock";
                        clock-frequency = <32000>;
                };
+
+               clk_i2s_ckin: i2s-ckin {
+                       #clock-cells = <0>;
+                       compatible = "fixed-clock";
+                       clock-frequency = <0>;
+               };
        };
 
        soc {
@@ -75,46 +83,227 @@ timer2: timer@40000000 {
                        compatible = "st,stm32-timer";
                        reg = <0x40000000 0x400>;
                        interrupts = <28>;
-                       clocks = <&rcc 0 128>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM2)>;
+                       status = "disabled";
+               };
+
+               timers2: timers@40000000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40000000 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM2)>;
+                       clock-names = "int";
                        status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+
+                       timer@1 {
+                               compatible = "st,stm32-timer-trigger";
+                               reg = <1>;
+                               status = "disabled";
+                       };
                };
 
                timer3: timer@40000400 {
                        compatible = "st,stm32-timer";
                        reg = <0x40000400 0x400>;
                        interrupts = <29>;
-                       clocks = <&rcc 0 129>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM3)>;
+                       status = "disabled";
+               };
+
+               timers3: timers@40000400 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40000400 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM3)>;
+                       clock-names = "int";
                        status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+
+                       timer@2 {
+                               compatible = "st,stm32-timer-trigger";
+                               reg = <2>;
+                               status = "disabled";
+                       };
                };
 
                timer4: timer@40000800 {
                        compatible = "st,stm32-timer";
                        reg = <0x40000800 0x400>;
                        interrupts = <30>;
-                       clocks = <&rcc 0 130>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM4)>;
+                       status = "disabled";
+               };
+
+               timers4: timers@40000800 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40000800 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM4)>;
+                       clock-names = "int";
                        status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+
+                       timer@3 {
+                               compatible = "st,stm32-timer-trigger";
+                               reg = <3>;
+                               status = "disabled";
+                       };
                };
 
                timer5: timer@40000c00 {
                        compatible = "st,stm32-timer";
                        reg = <0x40000c00 0x400>;
                        interrupts = <50>;
-                       clocks = <&rcc 0 131>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM5)>;
+               };
+
+               timers5: timers@40000c00 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40000C00 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM5)>;
+                       clock-names = "int";
+                       status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+
+                       timer@4 {
+                               compatible = "st,stm32-timer-trigger";
+                               reg = <4>;
+                               status = "disabled";
+                       };
                };
 
                timer6: timer@40001000 {
                        compatible = "st,stm32-timer";
                        reg = <0x40001000 0x400>;
                        interrupts = <54>;
-                       clocks = <&rcc 0 132>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM6)>;
                        status = "disabled";
                };
 
+               timers6: timers@40001000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40001000 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM6)>;
+                       clock-names = "int";
+                       status = "disabled";
+
+                       timer@5 {
+                               compatible = "st,stm32-timer-trigger";
+                               reg = <5>;
+                               status = "disabled";
+                       };
+               };
+
                timer7: timer@40001400 {
                        compatible = "st,stm32-timer";
                        reg = <0x40001400 0x400>;
                        interrupts = <55>;
-                       clocks = <&rcc 0 133>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM7)>;
+                       status = "disabled";
+               };
+
+               timers7: timers@40001400 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40001400 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM7)>;
+                       clock-names = "int";
+                       status = "disabled";
+
+                       timer@6 {
+                               compatible = "st,stm32-timer-trigger";
+                               reg = <6>;
+                               status = "disabled";
+                       };
+               };
+
+               timers12: timers@40001800 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40001800 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM12)>;
+                       clock-names = "int";
+                       status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+
+                       timer@11 {
+                               compatible = "st,stm32-timer-trigger";
+                               reg = <11>;
+                               status = "disabled";
+                       };
+               };
+
+               timers13: timers@40001c00 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40001C00 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM13)>;
+                       clock-names = "int";
+                       status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+               };
+
+               timers14: timers@40002000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40002000 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM14)>;
+                       clock-names = "int";
+                       status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+               };
+
+               rtc: rtc@40002800 {
+                       compatible = "st,stm32-rtc";
+                       reg = <0x40002800 0x400>;
+                       clocks = <&rcc 1 CLK_RTC>;
+                       clock-names = "ck_rtc";
+                       assigned-clocks = <&rcc 1 CLK_RTC>;
+                       assigned-clock-parents = <&rcc 1 CLK_LSE>;
+                       interrupt-parent = <&exti>;
+                       interrupts = <17 1>;
+                       interrupt-names = "alarm";
+                       st,syscfg = <&pwrcfg>;
                        status = "disabled";
                };
 
@@ -122,7 +311,7 @@ usart2: serial@40004400 {
                        compatible = "st,stm32-usart", "st,stm32-uart";
                        reg = <0x40004400 0x400>;
                        interrupts = <38>;
-                       clocks =  <&rcc 0 145>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART2)>;
                        status = "disabled";
                };
 
@@ -130,7 +319,7 @@ usart3: serial@40004800 {
                        compatible = "st,stm32-usart", "st,stm32-uart";
                        reg = <0x40004800 0x400>;
                        interrupts = <39>;
-                       clocks = <&rcc 0 146>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART3)>;
                        status = "disabled";
                        dmas = <&dma1 1 4 0x400 0x0>,
                               <&dma1 3 4 0x400 0x0>;
@@ -141,7 +330,7 @@ usart4: serial@40004c00 {
                        compatible = "st,stm32-uart";
                        reg = <0x40004c00 0x400>;
                        interrupts = <52>;
-                       clocks = <&rcc 0 147>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART4)>;
                        status = "disabled";
                };
 
@@ -149,7 +338,19 @@ usart5: serial@40005000 {
                        compatible = "st,stm32-uart";
                        reg = <0x40005000 0x400>;
                        interrupts = <53>;
-                       clocks = <&rcc 0 148>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART5)>;
+                       status = "disabled";
+               };
+
+               i2c1: i2c@40005400 {
+                       compatible = "st,stm32f4-i2c";
+                       reg = <0x40005400 0x400>;
+                       interrupts = <31>,
+                                    <32>;
+                       resets = <&rcc STM32F4_APB1_RESET(I2C1)>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(I2C1)>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
                        status = "disabled";
                };
 
@@ -157,7 +358,7 @@ usart7: serial@40007800 {
                        compatible = "st,stm32-usart", "st,stm32-uart";
                        reg = <0x40007800 0x400>;
                        interrupts = <82>;
-                       clocks = <&rcc 0 158>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART7)>;
                        status = "disabled";
                };
 
@@ -165,15 +366,57 @@ usart8: serial@40007c00 {
                        compatible = "st,stm32-usart", "st,stm32-uart";
                        reg = <0x40007c00 0x400>;
                        interrupts = <83>;
-                       clocks = <&rcc 0 159>;
+                       clocks = <&rcc 0 STM32F4_APB1_CLOCK(UART8)>;
+                       status = "disabled";
+               };
+
+               timers1: timers@40010000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40010000 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM1)>;
+                       clock-names = "int";
+                       status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+
+                       timer@0 {
+                               compatible = "st,stm32-timer-trigger";
+                               reg = <0>;
+                               status = "disabled";
+                       };
+               };
+
+               timers8: timers@40010400 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40010400 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM8)>;
+                       clock-names = "int";
                        status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+
+                       timer@7 {
+                               compatible = "st,stm32-timer-trigger";
+                               reg = <7>;
+                               status = "disabled";
+                       };
                };
 
                usart1: serial@40011000 {
                        compatible = "st,stm32-usart", "st,stm32-uart";
                        reg = <0x40011000 0x400>;
                        interrupts = <37>;
-                       clocks = <&rcc 0 164>;
+                       clocks = <&rcc 0 STM32F4_APB2_CLOCK(USART1)>;
                        status = "disabled";
                        dmas = <&dma2 2 4 0x400 0x0>,
                               <&dma2 7 4 0x400 0x0>;
@@ -184,10 +427,53 @@ usart6: serial@40011400 {
                        compatible = "st,stm32-usart", "st,stm32-uart";
                        reg = <0x40011400 0x400>;
                        interrupts = <71>;
-                       clocks = <&rcc 0 165>;
+                       clocks = <&rcc 0 STM32F4_APB2_CLOCK(USART6)>;
                        status = "disabled";
                };
 
+               adc: adc@40012000 {
+                       compatible = "st,stm32f4-adc-core";
+                       reg = <0x40012000 0x400>;
+                       interrupts = <18>;
+                       clocks = <&rcc 0 STM32F4_APB2_CLOCK(ADC1)>;
+                       clock-names = "adc";
+                       interrupt-controller;
+                       #interrupt-cells = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+
+                       adc1: adc@0 {
+                               compatible = "st,stm32f4-adc";
+                               #io-channel-cells = <1>;
+                               reg = <0x0>;
+                               clocks = <&rcc 0 STM32F4_APB2_CLOCK(ADC1)>;
+                               interrupt-parent = <&adc>;
+                               interrupts = <0>;
+                               status = "disabled";
+                       };
+
+                       adc2: adc@100 {
+                               compatible = "st,stm32f4-adc";
+                               #io-channel-cells = <1>;
+                               reg = <0x100>;
+                               clocks = <&rcc 0 STM32F4_APB2_CLOCK(ADC2)>;
+                               interrupt-parent = <&adc>;
+                               interrupts = <1>;
+                               status = "disabled";
+                       };
+
+                       adc3: adc@200 {
+                               compatible = "st,stm32f4-adc";
+                               #io-channel-cells = <1>;
+                               reg = <0x200>;
+                               clocks = <&rcc 0 STM32F4_APB2_CLOCK(ADC3)>;
+                               interrupt-parent = <&adc>;
+                               interrupts = <2>;
+                               status = "disabled";
+                       };
+               };
+
                syscfg: system-config@40013800 {
                        compatible = "syscon";
                        reg = <0x40013800 0x400>;
@@ -201,6 +487,57 @@ exti: interrupt-controller@40013c00 {
                        interrupts = <1>, <2>, <3>, <6>, <7>, <8>, <9>, <10>, <23>, <40>, <41>, <42>, <62>, <76>;
                };
 
+               timers9: timers@40014000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40014000 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM9)>;
+                       clock-names = "int";
+                       status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+
+                       timer@8 {
+                               compatible = "st,stm32-timer-trigger";
+                               reg = <8>;
+                               status = "disabled";
+                       };
+               };
+
+               timers10: timers@40014400 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40014400 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM10)>;
+                       clock-names = "int";
+                       status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+               };
+
+               timers11: timers@40014800 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "st,stm32-timers";
+                       reg = <0x40014800 0x400>;
+                       clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM11)>;
+                       clock-names = "int";
+                       status = "disabled";
+
+                       pwm {
+                               compatible = "st,stm32-pwm";
+                               status = "disabled";
+                       };
+               };
+
                pwrcfg: power-config@40007000 {
                        compatible = "syscon";
                        reg = <0x40007000 0x400>;
@@ -219,7 +556,7 @@ gpioa: gpio@40020000 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0x0 0x400>;
-                               clocks = <&rcc 0 0>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>;
                                st,bank-name = "GPIOA";
                        };
 
@@ -227,7 +564,7 @@ gpiob: gpio@40020400 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0x400 0x400>;
-                               clocks = <&rcc 0 1>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>;
                                st,bank-name = "GPIOB";
                        };
 
@@ -235,7 +572,7 @@ gpioc: gpio@40020800 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0x800 0x400>;
-                               clocks = <&rcc 0 2>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>;
                                st,bank-name = "GPIOC";
                        };
 
@@ -243,7 +580,7 @@ gpiod: gpio@40020c00 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0xc00 0x400>;
-                               clocks = <&rcc 0 3>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOD)>;
                                st,bank-name = "GPIOD";
                        };
 
@@ -251,7 +588,7 @@ gpioe: gpio@40021000 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0x1000 0x400>;
-                               clocks = <&rcc 0 4>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOE)>;
                                st,bank-name = "GPIOE";
                        };
 
@@ -259,7 +596,7 @@ gpiof: gpio@40021400 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0x1400 0x400>;
-                               clocks = <&rcc 0 5>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOF)>;
                                st,bank-name = "GPIOF";
                        };
 
@@ -267,7 +604,7 @@ gpiog: gpio@40021800 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0x1800 0x400>;
-                               clocks = <&rcc 0 6>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOG)>;
                                st,bank-name = "GPIOG";
                        };
 
@@ -275,7 +612,7 @@ gpioh: gpio@40021c00 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0x1c00 0x400>;
-                               clocks = <&rcc 0 7>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOH)>;
                                st,bank-name = "GPIOH";
                        };
 
@@ -283,7 +620,7 @@ gpioi: gpio@40022000 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0x2000 0x400>;
-                               clocks = <&rcc 0 8>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOI)>;
                                st,bank-name = "GPIOI";
                        };
 
@@ -291,7 +628,7 @@ gpioj: gpio@40022400 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0x2400 0x400>;
-                               clocks = <&rcc 0 9>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOJ)>;
                                st,bank-name = "GPIOJ";
                        };
 
@@ -299,7 +636,7 @@ gpiok: gpio@40022800 {
                                gpio-controller;
                                #gpio-cells = <2>;
                                reg = <0x2800 0x400>;
-                               clocks = <&rcc 0 10>;
+                               clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOK)>;
                                st,bank-name = "GPIOK";
                        };
 
@@ -316,6 +653,19 @@ pins2 {
                                };
                        };
 
+                       usart3_pins_a: usart3@0 {
+                               pins1 {
+                                       pinmux = <STM32F429_PB10_FUNC_USART3_TX>;
+                                       bias-disable;
+                                       drive-push-pull;
+                                       slew-rate = <0>;
+                               };
+                               pins2 {
+                                       pinmux = <STM32F429_PB11_FUNC_USART3_RX>;
+                                       bias-disable;
+                               };
+                       };
+
                        usbotg_hs_pins_a: usbotg_hs@0 {
                                pins {
                                        pinmux = <STM32F429_PH4_FUNC_OTG_HS_ULPI_NXT>,
@@ -355,6 +705,37 @@ pins {
                                        slew-rate = <2>;
                                };
                        };
+
+                       adc3_in8_pin: adc@200 {
+                               pins {
+                                       pinmux = <STM32F429_PF10_FUNC_ANALOG>;
+                               };
+                       };
+
+                       pwm1_pins: pwm@1 {
+                               pins {
+                                       pinmux = <STM32F429_PA8_FUNC_TIM1_CH1>,
+                                                <STM32F429_PB13_FUNC_TIM1_CH1N>,
+                                                <STM32F429_PB12_FUNC_TIM1_BKIN>;
+                               };
+                       };
+
+                       pwm3_pins: pwm@3 {
+                               pins {
+                                       pinmux = <STM32F429_PB4_FUNC_TIM3_CH1>,
+                                                <STM32F429_PB5_FUNC_TIM3_CH2>;
+                               };
+                       };
+
+                       i2c1_pins: i2c1@0 {
+                               pins {
+                                       pinmux = <STM32F429_PB9_FUNC_I2C1_SDA>,
+                                                <STM32F429_PB6_FUNC_I2C1_SCL>;
+                                       bias-disable;
+                                       drive-open-drain;
+                                       slew-rate = <3>;
+                               };
+                       };
                };
 
                rcc: rcc@40023810 {
@@ -362,8 +743,10 @@ rcc: rcc@40023810 {
                        #clock-cells = <2>;
                        compatible = "st,stm32f42xx-rcc", "st,stm32-rcc";
                        reg = <0x40023800 0x400>;
-                       clocks = <&clk_hse>;
+                       clocks = <&clk_hse>, <&clk_i2s_ckin>;
                        st,syscfg = <&pwrcfg>;
+                       assigned-clocks = <&rcc 1 CLK_HSE_RTC>;
+                       assigned-clock-rates = <1000000>;
                };
 
                dma1: dma-controller@40026000 {
@@ -377,7 +760,7 @@ dma1: dma-controller@40026000 {
                                     <16>,
                                     <17>,
                                     <47>;
-                       clocks = <&rcc 0 21>;
+                       clocks = <&rcc 0 STM32F4_AHB1_CLOCK(DMA1)>;
                        #dma-cells = <4>;
                };
 
@@ -392,7 +775,7 @@ dma2: dma-controller@40026400 {
                                     <68>,
                                     <69>,
                                     <70>;
-                       clocks = <&rcc 0 22>;
+                       clocks = <&rcc 0 STM32F4_AHB1_CLOCK(DMA2)>;
                        #dma-cells = <4>;
                        st,mem2mem;
                };
@@ -404,7 +787,9 @@ mac: ethernet@40028000 {
                        interrupts = <61>;
                        interrupt-names = "macirq";
                        clock-names = "stmmaceth", "mac-clk-tx", "mac-clk-rx";
-                       clocks = <&rcc 0 25>, <&rcc 0 26>, <&rcc 0 27>;
+                       clocks = <&rcc 0 STM32F4_AHB1_CLOCK(ETHMAC)>,
+                                       <&rcc 0 STM32F4_AHB1_CLOCK(ETHMACTX)>,
+                                       <&rcc 0 STM32F4_AHB1_CLOCK(ETHMACRX)>;
                        st,syscon = <&syscfg 0x4>;
                        snps,pbl = <8>;
                        snps,mixed-burst;
@@ -415,7 +800,7 @@ usbotg_hs: usb@40040000 {
                        compatible = "snps,dwc2";
                        reg = <0x40040000 0x40000>;
                        interrupts = <77>;
-                       clocks = <&rcc 0 29>;
+                       clocks = <&rcc 0 STM32F4_AHB1_CLOCK(OTGHS)>;
                        clock-names = "otg";
                        status = "disabled";
                };
@@ -424,12 +809,13 @@ rng: rng@50060800 {
                        compatible = "st,stm32-rng";
                        reg = <0x50060800 0x400>;
                        interrupts = <80>;
-                       clocks = <&rcc 0 38>;
+                       clocks = <&rcc 0 STM32F4_AHB2_CLOCK(RNG)>;
+
                };
        };
 };
 
 &systick {
-       clocks = <&rcc 1 0>;
+       clocks = <&rcc 1 SYSTICK>;
        status = "okay";
 };
index 8877c00ce8e8bf8f12f3ff58d6566a07d09a6fb3..0dd56ef574fa23f6fd54a404848e7a6be28db8b9 100644 (file)
@@ -58,7 +58,7 @@ chosen {
        };
 
        memory {
-               reg = <0x00000000 0x800000>;
+               reg = <0x00000000 0x1000000>;
        };
 
        aliases {
@@ -78,6 +78,40 @@ &clk_hse {
        clock-frequency = <8000000>;
 };
 
+&rtc {
+       status = "okay";
+};
+
+&timers1 {
+       status = "okay";
+
+       pwm {
+               pinctrl-0 = <&pwm1_pins>;
+               pinctrl-names = "default";
+               status = "okay";
+       };
+
+       timer@0 {
+               status = "okay";
+       };
+};
+
+&timers3 {
+       status = "okay";
+
+       pwm {
+               pinctrl-0 = <&pwm3_pins>;
+               pinctrl-names = "default";
+               status = "okay";
+       };
+
+       timer@2 {
+               status = "okay";
+       };
+};
+
 &usart3 {
+       pinctrl-0 = <&usart3_pins_a>;
+       pinctrl-names = "default";
        status = "okay";
 };
index 39e368ec34287c5a3246202f930281703f301862..68c6bdb2cf7ccfbd492a83d904fce8eab1d37125 100644 (file)
@@ -186,17 +186,13 @@ &ohci1 {
 
 &pio {
        emac_power_pin_a1000: emac_power_pin@0 {
-               allwinner,pins = "PH15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH15";
+               function = "gpio_out";
        };
 
        led_pins_a1000: led_pins@0 {
-               allwinner,pins = "PH10", "PH20";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH10", "PH20";
+               function = "gpio_out";
        };
 };
 
index 5f98582232d67b36b8194d488f354047f70616e4..942d739a438464bbf4e36b6e13581445bbcbf625 100644 (file)
@@ -127,7 +127,7 @@ &otg_sram {
 
 &pio {
        usb2_vbus_pin_a: usb2_vbus_pin@0 {
-               allwinner,pins = "PH12";
+               pins = "PH12";
        };
 };
 
index 023b03efa5fff7cd978b5820b9b8b5e3f2015052..17f8c5ec011c4415203e7ae7243b23e777f50dd1 100644 (file)
@@ -142,17 +142,15 @@ &otg_sram {
 
 &pio {
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 };
 
index 710e2ef516a8da080e77664d3d523ab5e9209edb..04e040e6233d081ddd6b04fece52a3cc94551014 100644 (file)
@@ -165,17 +165,15 @@ &otg_sram {
 
 &pio {
        led_pins_cubieboard: led_pins@0 {
-               allwinner,pins = "PH20", "PH21";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH20", "PH21";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index 893497e397daca56bf2e2a86630137854743b320..8317fbfeec4a477a6c84099346421096a73479e1 100644 (file)
@@ -178,45 +178,35 @@ &otg_sram {
 
 &pio {
        bl_en_pin_dsrv9703c: bl_en_pin@0 {
-               allwinner,pins = "PH7";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH7";
+               function = "gpio_out";
        };
 
        codec_pa_pin: codec_pa_pin@0 {
-               allwinner,pins = "PH15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH15";
+               function = "gpio_out";
        };
 
        motor_pins: motor_pins@0 {
-               allwinner,pins = "PB3";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB3";
+               function = "gpio_out";
        };
 
        touchscreen_pins: touchscreen_pins@0 {
-               allwinner,pins = "PB13";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB13";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 };
 
index ac64781a0a9cc0f5bf0472157f7120224359254e..9616cdecce930ba80b3827697b969cc3d6694742 100644 (file)
@@ -156,10 +156,8 @@ &mmc0 {
 
 &pio {
        codec_pa_pin: codec_pa_pin@0 {
-               allwinner,pins = "PH15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH15";
+               function = "gpio_out";
        };
 };
 
index 6de83a6187d0b51a296d457778b98af2b6d813fa..a48b4647441710e5e41bef064860f7744a103f3a 100644 (file)
@@ -129,17 +129,13 @@ &pio {
        pinctrl-0 = <&hackberry_hogs>;
 
        hackberry_hogs: hogs@0 {
-               allwinner,pins = "PH19";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH19";
+               function = "gpio_out";
        };
 
        usb2_vbus_pin_hackberry: usb2_vbus_pin@0 {
-               allwinner,pins = "PH12";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH12";
+               function = "gpio_out";
        };
 };
 
index 9103864fef90a129f3f54a187721f8c7cff86673..85dcf81ab64ef0fd67d49881f7efe1b54c0248a4 100644 (file)
@@ -93,17 +93,15 @@ &otg_sram {
 
 &pio {
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 };
 
@@ -123,7 +121,7 @@ &uart0 {
 };
 
 &usb2_vbus_pin_a {
-       allwinner,pins = "PH6";
+       pins = "PH6";
 };
 
 &usb_otg {
index e09053bf5e1ffe0887d7b6dbe1fe08b5788f51c3..f3092703a1a6a6b7e858d9b3a41ecaf63457826e 100644 (file)
@@ -180,31 +180,25 @@ &otg_sram {
 
 &pio {
        bl_en_pin_inet: bl_en_pin@0 {
-               allwinner,pins = "PH7";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH7";
+               function = "gpio_out";
        };
 
        touchscreen_wake_pin: touchscreen_wake_pin@0 {
-               allwinner,pins = "PB13";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB13";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 };
 
index 04b0d2d1ae6c1e2890f28abe0043f3ebcdbd9e95..a1a2bbb3f9d38977befea181a45b4a8400158731 100644 (file)
@@ -161,17 +161,15 @@ &otg_sram {
 
 &pio {
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 };
 
index bba4f9cf9bf5d6c2f51faa05ea0ac90deb48bacc..4ef2a60a8cd49e36265535e36b97371612773f1c 100644 (file)
@@ -320,28 +320,25 @@ &otg_sram {
 
 &pio {
        key_pins_inet9f: key_pins@0 {
-               allwinner,pins = "PA0", "PA1", "PA3", "PA4",
-                                "PA5", "PA6", "PA8", "PA9",
-                                "PA11", "PA12", "PA13",
-                                "PA14", "PA15", "PA16", "PA17",
-                                "PH22", "PH23", "PH24", "PH25", "PH26";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA0", "PA1", "PA3", "PA4",
+                      "PA5", "PA6", "PA8", "PA9",
+                      "PA11", "PA12", "PA13",
+                      "PA14", "PA15", "PA16", "PA17",
+                      "PH22", "PH23", "PH24", "PH25", "PH26";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 };
 
index e28f080b1fd594aab9e82ed4a00454b625f4bc3a..fc4d4d49e2e2e2659acf833a54f0d737a6ee3b97 100644 (file)
@@ -163,17 +163,13 @@ &otg_sram {
 
 &pio {
        emac_power_pin_q5: emac_power_pin@0 {
-               allwinner,pins = "PH19";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH19";
+               function = "gpio_out";
        };
 
        led_pins_q5: led_pins@0 {
-               allwinner,pins = "PH20";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH20";
+               function = "gpio_out";
        };
 };
 
index 8e50723dbe02bae14fed5785547dc229dc061d9e..a2885039d5f1646a0a3c21819ee4aa7ee19e3c46 100644 (file)
@@ -164,17 +164,14 @@ &otg_sram {
 
 &pio {
        led_pins_marsboard: led_pins@0 {
-               allwinner,pins = "PB5", "PB6", "PB7", "PB8";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB5", "PB6", "PB7", "PB8";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index a7dd86d30fa2711ba2533670cff0cc8559377505..af42ebb3a97b20811642fcc265ee53b7ffd8ad26 100644 (file)
@@ -93,7 +93,7 @@ &ir0 {
 
 &ir0_rx_pins_a {
        /* The ir receiver is not always populated */
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &mmc0 {
index ee46ea8548326394b45dd09aa0fc488973b2b54a..9c1afd4277d75b69d3ee73f09aac76404c75979b 100644 (file)
@@ -91,24 +91,18 @@ &otg_sram {
 
 &pio {
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH4";
+               function = "gpio_in";
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH5";
+               function = "gpio_in";
        };
 
        usb2_vbus_pin_mk802: usb2_vbus_pin@0 {
-               allwinner,pins = "PH12";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH12";
+               function = "gpio_out";
        };
 };
 
index b350448c7217c0f959e2efb0ec08f95c615276cb..214a5accfe9302a7025c2acad4c977d402510e06 100644 (file)
@@ -168,31 +168,26 @@ &otg_sram {
 
 &pio {
        ahci_pwr_pin_olinuxinolime: ahci_pwr_pin@1 {
-               allwinner,pins = "PC3";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC3";
+               function = "gpio_out";
        };
 
        led_pins_olinuxinolime: led_pins@0 {
-               allwinner,pins = "PH2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH2";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 };
 
index 39034aa8e1ae8c65fd3a051e5a328fbb7e5abaeb..b0365d63ba70ab7ce46a994890bb6035a134191d 100644 (file)
@@ -170,24 +170,19 @@ &otg_sram {
 
 &pio {
        led_pins_pcduino: led_pins@0 {
-               allwinner,pins = "PH15", "PH16";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH15", "PH16";
+               function = "gpio_out";
        };
 
        key_pins_pcduino: key_pins@0 {
-               allwinner,pins = "PH17", "PH18", "PH19";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH17", "PH18", "PH19";
+               function = "gpio_in";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index de483a1bf36a61a64c29a0c5e553680332a1f786..811d00ee2aded649d4aa92674f7da34b0d61e022 100644 (file)
@@ -57,10 +57,8 @@ / {
 
 &pio {
        usb2_vbus_pin_pcduino2: usb2_vbus_pin@0 {
-               allwinner,pins = "PD2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PD2";
+               function = "gpio_out";
        };
 };
 
index 918f97294b33473a1259fe95844832603001de08..bfa6bbdaab276eaaa03b394c5223eb9471c3ace1 100644 (file)
@@ -164,38 +164,30 @@ &otg_sram {
 
 &pio {
        bl_en_pin_protab: bl_en_pin@0 {
-               allwinner,pins = "PH7";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH7";
+               function = "gpio_out";
        };
 
        codec_pa_pin: codec_pa_pin@0 {
-               allwinner,pins = "PH15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH15";
+               function = "gpio_out";
        };
 
        touchscreen_pins: touchscreen_pins@0 {
-               allwinner,pins = "PA5", "PB13";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PA5", "PB13";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 };
 
index b14a4281058d86f715f717e44f1d7b35e0ed931a..dae838e4dd9ee4f4bceb21eff99e902d2007d9b0 100644 (file)
@@ -975,190 +975,141 @@ pio: pinctrl@01c20800 {
                        #gpio-cells = <3>;
 
                        emac_pins_a: emac0@0 {
-                               allwinner,pins = "PA0", "PA1", "PA2",
-                                               "PA3", "PA4", "PA5", "PA6",
-                                               "PA7", "PA8", "PA9", "PA10",
-                                               "PA11", "PA12", "PA13", "PA14",
-                                               "PA15", "PA16";
-                               allwinner,function = "emac";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PA0", "PA1", "PA2",
+                                      "PA3", "PA4", "PA5", "PA6",
+                                      "PA7", "PA8", "PA9", "PA10",
+                                      "PA11", "PA12", "PA13", "PA14",
+                                      "PA15", "PA16";
+                               function = "emac";
                        };
 
                        i2c0_pins_a: i2c0@0 {
-                               allwinner,pins = "PB0", "PB1";
-                               allwinner,function = "i2c0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB0", "PB1";
+                               function = "i2c0";
                        };
 
                        i2c1_pins_a: i2c1@0 {
-                               allwinner,pins = "PB18", "PB19";
-                               allwinner,function = "i2c1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB18", "PB19";
+                               function = "i2c1";
                        };
 
                        i2c2_pins_a: i2c2@0 {
-                               allwinner,pins = "PB20", "PB21";
-                               allwinner,function = "i2c2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB20", "PB21";
+                               function = "i2c2";
                        };
 
                        ir0_rx_pins_a: ir0@0 {
-                               allwinner,pins = "PB4";
-                               allwinner,function = "ir0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB4";
+                               function = "ir0";
                        };
 
                        ir0_tx_pins_a: ir0@1 {
-                               allwinner,pins = "PB3";
-                               allwinner,function = "ir0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB3";
+                               function = "ir0";
                        };
 
                        ir1_rx_pins_a: ir1@0 {
-                               allwinner,pins = "PB23";
-                               allwinner,function = "ir1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB23";
+                               function = "ir1";
                        };
 
                        ir1_tx_pins_a: ir1@1 {
-                               allwinner,pins = "PB22";
-                               allwinner,function = "ir1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB22";
+                               function = "ir1";
                        };
 
                        mmc0_pins_a: mmc0@0 {
-                               allwinner,pins = "PF0", "PF1", "PF2",
-                                                "PF3", "PF4", "PF5";
-                               allwinner,function = "mmc0";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PF0", "PF1", "PF2",
+                                      "PF3", "PF4", "PF5";
+                               function = "mmc0";
+                               drive-strength = <30>;
                        };
 
                        mmc0_cd_pin_reference_design: mmc0_cd_pin@0 {
-                               allwinner,pins = "PH1";
-                               allwinner,function = "gpio_in";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               pins = "PH1";
+                               function = "gpio_in";
+                               bias-pull-up;
                        };
 
                        ps20_pins_a: ps20@0 {
-                               allwinner,pins = "PI20", "PI21";
-                               allwinner,function = "ps2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI20", "PI21";
+                               function = "ps2";
                        };
 
                        ps21_pins_a: ps21@0 {
-                               allwinner,pins = "PH12", "PH13";
-                               allwinner,function = "ps2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH12", "PH13";
+                               function = "ps2";
                        };
 
                        pwm0_pins_a: pwm0@0 {
-                               allwinner,pins = "PB2";
-                               allwinner,function = "pwm";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB2";
+                               function = "pwm";
                        };
 
                        pwm1_pins_a: pwm1@0 {
-                               allwinner,pins = "PI3";
-                               allwinner,function = "pwm";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI3";
+                               function = "pwm";
                        };
 
                        spdif_tx_pins_a: spdif@0 {
-                               allwinner,pins = "PB13";
-                               allwinner,function = "spdif";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               pins = "PB13";
+                               function = "spdif";
+                               bias-pull-up;
                        };
 
                        spi0_pins_a: spi0@0 {
-                               allwinner,pins = "PI11", "PI12", "PI13";
-                               allwinner,function = "spi0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI11", "PI12", "PI13";
+                               function = "spi0";
                        };
 
                        spi0_cs0_pins_a: spi0_cs0@0 {
-                               allwinner,pins = "PI10";
-                               allwinner,function = "spi0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI10";
+                               function = "spi0";
                        };
 
                        spi1_pins_a: spi1@0 {
-                               allwinner,pins = "PI17", "PI18", "PI19";
-                               allwinner,function = "spi1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI17", "PI18", "PI19";
+                               function = "spi1";
                        };
 
                        spi1_cs0_pins_a: spi1_cs0@0 {
-                               allwinner,pins = "PI16";
-                               allwinner,function = "spi1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI16";
+                               function = "spi1";
                        };
 
                        spi2_pins_a: spi2@0 {
-                               allwinner,pins = "PC20", "PC21", "PC22";
-                               allwinner,function = "spi2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PC20", "PC21", "PC22";
+                               function = "spi2";
                        };
 
                        spi2_pins_b: spi2@1 {
-                               allwinner,pins = "PB15", "PB16", "PB17";
-                               allwinner,function = "spi2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB15", "PB16", "PB17";
+                               function = "spi2";
                        };
 
                        spi2_cs0_pins_a: spi2_cs0@0 {
-                               allwinner,pins = "PC19";
-                               allwinner,function = "spi2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PC19";
+                               function = "spi2";
                        };
 
                        spi2_cs0_pins_b: spi2_cs0@1 {
-                               allwinner,pins = "PB14";
-                               allwinner,function = "spi2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB14";
+                               function = "spi2";
                        };
 
                        uart0_pins_a: uart0@0 {
-                               allwinner,pins = "PB22", "PB23";
-                               allwinner,function = "uart0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB22", "PB23";
+                               function = "uart0";
                        };
 
                        uart0_pins_b: uart0@1 {
-                               allwinner,pins = "PF2", "PF4";
-                               allwinner,function = "uart0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PF2", "PF4";
+                               function = "uart0";
                        };
 
                        uart1_pins_a: uart1@0 {
-                               allwinner,pins = "PA10", "PA11";
-                               allwinner,function = "uart1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PA10", "PA11";
+                               function = "uart1";
                        };
                };
 
index d4ad02182353e5d90c5e33c51d263022a2cbbfe2..a539b72ce093d0150b2b97e7817a6a57b67f7e32 100644 (file)
@@ -109,17 +109,15 @@ &otg_sram {
 
 &pio {
        mmc0_cd_pin_t003: mmc0_cd_pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG1";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        led_pins_t003: led_pins@0 {
-               allwinner,pins = "PB2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB2";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 };
 
@@ -140,11 +138,11 @@ &uart0 {
 };
 
 &usb0_vbus_pin_a {
-       allwinner,pins = "PG13";
+       pins = "PG13";
 };
 
 &usb1_vbus_pin_a {
-       allwinner,pins = "PB10";
+       pins = "PB10";
 };
 
 &usb_otg {
index 2150e15e115a3166fb7e51a201caa55fd6ae4fbb..e1b5e8a446fecd11baac888f800e9e86633f6bff 100644 (file)
@@ -130,31 +130,26 @@ &otg_sram {
 
 &pio {
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PG12";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG12";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        mmc0_cd_pin_t004: mmc0_cd_pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG1";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        mmc1_vcc_en_pin_t004: mmc1_vcc_en_pin@0 {
-               allwinner,pins = "PB18";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB18";
+               function = "gpio_out";
        };
 
        led_pins_t004: led_pins@0 {
-               allwinner,pins = "PB2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB2";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 };
 
@@ -175,7 +170,7 @@ &usb_otg {
 };
 
 &usb1_vbus_pin_a {
-       allwinner,pins = "PG13";
+       pins = "PG13";
 };
 
 &usbphy {
index c84ac005342e463ecb574e9060312f65c9de6ec7..020aa9d6c31daa5c8c2718d0ba2467a10b6e413e 100644 (file)
@@ -116,24 +116,19 @@ &otg_sram {
 
 &pio {
        led_pins_mk802: led_pins@0 {
-               allwinner,pins = "PB2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB2";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_mk802: mmc0_cd_pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG1";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb1_vbus_pin_mk802: usb1_vbus_pin@0 {
-               allwinner,pins = "PB10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB10";
+               function = "gpio_out";
        };
 };
 
index 0684d7930d65960a89e17ce52e2f123dbc6c9ddc..d8245c6314a7e8228e967e6b8014b01468029d45 100644 (file)
@@ -202,38 +202,32 @@ &otg_sram {
 
 &pio {
        mmc0_cd_pin_olinuxino_micro: mmc0_cd_pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG1";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        mmc1_cd_pin_olinuxino_micro: mmc1_cd_pin@0 {
-               allwinner,pins = "PG13";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG13";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        led_pins_olinuxino: led_pins@0 {
-               allwinner,pins = "PE3";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PE3";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 
        usb1_vbus_pin_olinuxino_m: usb1_vbus_pin@0 {
-               allwinner,pins = "PB10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB10";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PG12";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG12";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
@@ -279,7 +273,7 @@ &usb_otg {
 };
 
 &usb0_vbus_pin_a {
-       allwinner,pins = "PG11";
+       pins = "PG11";
 };
 
 &usbphy {
index 3b057983c74a1f5e68a8fe7941fba3419d4fa5b4..51371f9b1cf0699243a7b4c6f446ff745e28b8ad 100644 (file)
@@ -101,24 +101,20 @@ &ohci0 {
 
 &pio {
        mmc0_cd_pin_r7: mmc0_cd_pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG1";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        led_pins_r7: led_pins@0 {
-               allwinner,pins = "PB2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB2";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 
        usb1_vbus_pin_r7: usb1_vbus_pin@0 {
-               allwinner,pins = "PG13";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG13";
+               function = "gpio_out";
        };
 };
 
index b5de75f4c710e0c45c4a57ec2b254f5b805c8725..2b8adda0dedad1d838db4471e2e03c50483d96c4 100644 (file)
@@ -146,24 +146,19 @@ &otg_sram {
 
 &pio {
        led_pins_wobo_i5: led_pins@0 {
-               allwinner,pins = "PB2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB2";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_wobo_i5: mmc0_cd_pin@0 {
-               allwinner,pins = "PB3";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PB3";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        emac_power_pin_wobo: emac_power_pin@0 {
-               allwinner,pins = "PA02";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PA02";
+               function = "gpio_out";
        };
 };
 
@@ -223,7 +218,7 @@ &usb_otg {
 };
 
 &usb1_vbus_pin_a {
-       allwinner,pins = "PG12";
+       pins = "PG12";
 };
 
 &usbphy {
index 7aa8c7aa0153e29bfa1bd6691275c23d87fa8d68..62b3ffe62df2a30cac25687afb207d658fc7e0af 100644 (file)
@@ -200,61 +200,48 @@ &pio {
        compatible = "allwinner,sun5i-a10s-pinctrl";
 
        uart0_pins_a: uart0@0 {
-               allwinner,pins = "PB19", "PB20";
-               allwinner,function = "uart0";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB19", "PB20";
+               function = "uart0";
        };
 
        uart2_pins_a: uart2@0 {
-               allwinner,pins = "PC18", "PC19";
-               allwinner,function = "uart2";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC18", "PC19";
+               function = "uart2";
        };
 
        emac_pins_a: emac0@0 {
-               allwinner,pins = "PA0", "PA1", "PA2",
+               pins = "PA0", "PA1", "PA2",
                                "PA3", "PA4", "PA5", "PA6",
                                "PA7", "PA8", "PA9", "PA10",
                                "PA11", "PA12", "PA13", "PA14",
                                "PA15", "PA16";
-               allwinner,function = "emac";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               function = "emac";
        };
 
        emac_pins_b: emac0@1 {
-               allwinner,pins = "PD6", "PD7", "PD10",
+               pins = "PD6", "PD7", "PD10",
                                "PD11", "PD12", "PD13", "PD14",
                                "PD15", "PD18", "PD19", "PD20",
                                "PD21", "PD22", "PD23", "PD24",
                                "PD25", "PD26", "PD27";
-               allwinner,function = "emac";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               function = "emac";
        };
 
        mmc1_pins_a: mmc1@0 {
-               allwinner,pins = "PG3", "PG4", "PG5",
+               pins = "PG3", "PG4", "PG5",
                                 "PG6", "PG7", "PG8";
-               allwinner,function = "mmc1";
-               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               function = "mmc1";
+               drive-strength = <30>;
        };
 
        spi2_pins_b: spi2@1 {
-               allwinner,pins = "PB12", "PB13", "PB14";
-               allwinner,function = "spi2";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB12", "PB13", "PB14";
+               function = "spi2";
        };
 
        spi2_cs0_pins_b: spi2_cs0@1 {
-               allwinner,pins = "PB11";
-               allwinner,function = "spi2";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB11";
+               function = "spi2";
        };
 };
 
index 6efbba6d40a9101144e6f091bdf4d967c6f16bcd..42435454acefe1e5bf211f0fce6d6f0986a3e9f5 100644 (file)
@@ -137,24 +137,21 @@ &otg_sram {
 
 &pio {
        mmc0_cd_pin_d709: mmc0_cd_pin@0 {
-               allwinner,pins = "PG0";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG0";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PG1";
+               function = "gpio_in";
+               bias-pull-down;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PG2";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG2";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
@@ -212,7 +209,7 @@ &usb_otg {
 };
 
 &usb0_vbus_pin_a {
-       allwinner,pins = "PG12";
+       pins = "PG12";
 };
 
 &usbphy {
index 3724b988064eba83f152669407bd127801a23160..5879a75cf97a3b1982d0c80b5c20b278b9610def 100644 (file)
@@ -136,24 +136,20 @@ &otg_sram {
 
 &pio {
        mmc0_cd_pin_h702: mmc0_cd_pin@0 {
-               allwinner,pins = "PG0";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG0";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PG2";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG2";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG1";
+               function = "gpio_in";
        };
 };
 
@@ -208,7 +204,7 @@ &usb_otg {
 };
 
 &usb0_vbus_pin_a {
-       allwinner,pins = "PG12";
+       pins = "PG12";
 };
 
 &usbphy {
index 081329e2b80b45810e4673c3bbf759fbd455ad36..60e393e287832a1a09dace62e72a20563d3866a9 100644 (file)
@@ -115,45 +115,37 @@ &otg_sram {
 
 &pio {
        mmc0_cd_pin_olinuxinom: mmc0_cd_pin@0 {
-               allwinner,pins = "PG0";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG0";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        led_pins_olinuxinom: led_pins@0 {
-               allwinner,pins = "PG9";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG9";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PG2";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG2";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PG1";
+               function = "gpio_in";
+               bias-pull-down;
        };
 
        usb0_vbus_pin_olinuxinom: usb0_vbus_pin@0 {
-               allwinner,pins = "PG12";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG12";
+               function = "gpio_out";
        };
 
        usb1_vbus_pin_olinuxinom: usb1_vbus_pin@0 {
-               allwinner,pins = "PG11";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG11";
+               function = "gpio_out";
        };
 };
 
index bb7210e0e4a9bb10ce3e36f4b0a8bf5bd16d9f9b..940d47e880561289e1ca71c93e3cbabb22613817 100644 (file)
@@ -206,38 +206,32 @@ &otg_sram {
 
 &pio {
        mmc0_cd_pin_olinuxino: mmc0_cd_pin@0 {
-               allwinner,pins = "PG0";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG0";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        led_pins_olinuxino: led_pins@0 {
-               allwinner,pins = "PG9";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG9";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PG2";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG2";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PG1";
+               function = "gpio_in";
+               bias-pull-down;
        };
 
        usb1_vbus_pin_olinuxino: usb1_vbus_pin@0 {
-               allwinner,pins = "PG11";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG11";
+               function = "gpio_out";
        };
 };
 
@@ -277,7 +271,7 @@ &usb_otg {
 };
 
 &usb0_vbus_pin_a {
-       allwinner,pins = "PG12";
+       pins = "PG12";
 };
 
 &usbphy {
index 3d7ff10a48e9bdd26133c8c1605c24bd5f3246c8..bfdd38d6bfccc6af92e7225d3713ca103243e53f 100644 (file)
@@ -80,7 +80,7 @@ &codec {
 };
 
 &codec_pa_pin {
-       allwinner,pins = "PG3";
+       pins = "PG3";
 };
 
 &mmc2 {
@@ -100,10 +100,9 @@ mmccard: mmccard@0 {
 
 &pio {
        i2c_lcd_pins: i2c_lcd_pin@0 {
-               allwinner,pins = "PG10", "PG12";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG10", "PG12";
+               function = "gpio_out";
+               bias-pull-up;
        };
 };
 
@@ -131,5 +130,5 @@ &uart1 {
 };
 
 &usb0_vbus_pin_a {
-       allwinner,pins = "PB4";
+       pins = "PB4";
 };
index a17ba0243db3920b2ca5f50a8bbf8e40b5222759..4131ab44558bac931a3ccba70e30da9a7f8f069c 100644 (file)
@@ -350,26 +350,20 @@ &pio {
        compatible = "allwinner,sun5i-a13-pinctrl";
 
        lcd_rgb666_pins: lcd_rgb666@0 {
-               allwinner,pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
-                                "PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
-                                "PD18", "PD19", "PD20", "PD21", "PD22", "PD23",
-                                "PD24", "PD25", "PD26", "PD27";
-               allwinner,function = "lcd0";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               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_pins_a: uart1@0 {
-               allwinner,pins = "PE10", "PE11";
-               allwinner,function = "uart1";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PE10", "PE11";
+               function = "uart1";
        };
 
        uart1_pins_b: uart1@1 {
-               allwinner,pins = "PG3", "PG4";
-               allwinner,function = "uart1";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG3", "PG4";
+               function = "uart1";
        };
 };
index 92a2dc6250a571317816fc03a633138ae429cc72..0cf0813d363a8a19a884f03bd01cc0ef16163d40 100644 (file)
@@ -159,17 +159,13 @@ &otg_sram {
 
 &pio {
        usb0_id_pin_chip_pro: usb0-id-pin@0 {
-               allwinner,pins = "PG2";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG2";
+               function = "gpio_in";
        };
 
        wifi_reg_on_pin_chip_pro: wifi-reg-on-pin@0 {
-               allwinner,pins = "PB10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB10";
+               function = "gpio_out";
        };
 };
 
index 030605aa80656bb3fdb1ee1c4d767f92c6ecc736..1a845af4d4db7432164ec2c50025996b1acbf207 100644 (file)
@@ -259,31 +259,23 @@ &otg_sram {
 
 &pio {
        mmc0_cd_pin_gr8_evb: mmc0-cd-pin@0 {
-               allwinner,pins = "PG0";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG0";
+               function = "gpio_in";
        };
 
        usb0_id_pin_gr8_evb: usb0-id-pin@0 {
-               allwinner,pins = "PG2";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG2";
+               function = "gpio_in";
        };
 
        usb0_vbus_det_pin_gr8_evb: usb0-vbus-det-pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG1";
+               function = "gpio_in";
        };
 
        usb1_vbus_pin_gr8_evb: usb1-vbus-pin@0 {
-               allwinner,pins = "PG13";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG13";
+               function = "gpio_out";
        };
 };
 
index ea86d4d58db62df70e7966e511cd6280c31579fc..f83ae3fc632981634c8ba57e9798ad22c2463542 100644 (file)
@@ -764,150 +764,112 @@ pio: pinctrl@01c20800 {
                        #gpio-cells = <3>;
 
                        i2c0_pins_a: i2c0@0 {
-                               allwinner,pins = "PB0", "PB1";
-                               allwinner,function = "i2c0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB0", "PB1";
+                               function = "i2c0";
                        };
 
                        i2c1_pins_a: i2c1@0 {
-                               allwinner,pins = "PB15", "PB16";
-                               allwinner,function = "i2c1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB15", "PB16";
+                               function = "i2c1";
                        };
 
                        i2c2_pins_a: i2c2@0 {
-                               allwinner,pins = "PB17", "PB18";
-                               allwinner,function = "i2c2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB17", "PB18";
+                               function = "i2c2";
                        };
 
                        i2s0_data_pins_a: i2s0-data@0 {
-                               allwinner,pins = "PB6", "PB7", "PB8", "PB9";
-                               allwinner,function = "i2s0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB6", "PB7", "PB8", "PB9";
+                               function = "i2s0";
                        };
 
                        i2s0_mclk_pins_a: i2s0-mclk@0 {
-                               allwinner,pins = "PB5";
-                               allwinner,function = "i2s0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB5";
+                               function = "i2s0";
                        };
 
                        ir0_rx_pins_a: ir0@0 {
-                               allwinner,pins = "PB4";
-                               allwinner,function = "ir0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB4";
+                               function = "ir0";
                        };
 
                        lcd_rgb666_pins: lcd-rgb666@0 {
-                               allwinner,pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
+                               pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
                                                 "PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
                                                 "PD18", "PD19", "PD20", "PD21", "PD22", "PD23",
                                                 "PD24", "PD25", "PD26", "PD27";
-                               allwinner,function = "lcd0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "lcd0";
                        };
 
                        mmc0_pins_a: mmc0@0 {
-                               allwinner,pins = "PF0", "PF1", "PF2", "PF3",
+                               pins = "PF0", "PF1", "PF2", "PF3",
                                                 "PF4", "PF5";
-                               allwinner,function = "mmc0";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "mmc0";
+                               drive-strength = <30>;
                        };
 
                        nand_pins_a: nand-base0@0 {
-                               allwinner,pins = "PC0", "PC1", "PC2",
+                               pins = "PC0", "PC1", "PC2",
                                                "PC5", "PC8", "PC9", "PC10",
                                                "PC11", "PC12", "PC13", "PC14",
                                                "PC15";
-                               allwinner,function = "nand0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "nand0";
                        };
 
                        nand_cs0_pins_a: nand-cs@0 {
-                               allwinner,pins = "PC4";
-                               allwinner,function = "nand0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PC4";
+                               function = "nand0";
                        };
 
                        nand_rb0_pins_a: nand-rb@0 {
-                               allwinner,pins = "PC6";
-                               allwinner,function = "nand0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PC6";
+                               function = "nand0";
                        };
 
                        pwm0_pins_a: pwm0@0 {
-                               allwinner,pins = "PB2";
-                               allwinner,function = "pwm0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB2";
+                               function = "pwm0";
                        };
 
                        pwm1_pins: pwm1 {
-                               allwinner,pins = "PG13";
-                               allwinner,function = "pwm1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG13";
+                               function = "pwm1";
                        };
 
                        spdif_tx_pins_a: spdif@0 {
-                               allwinner,pins = "PB10";
-                               allwinner,function = "spdif";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               pins = "PB10";
+                               function = "spdif";
+                               bias-pull-up;
                        };
 
                        uart1_pins_a: uart1@1 {
-                               allwinner,pins = "PG3", "PG4";
-                               allwinner,function = "uart1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG3", "PG4";
+                               function = "uart1";
                        };
 
                        uart1_cts_rts_pins_a: uart1-cts-rts@0 {
-                               allwinner,pins = "PG5", "PG6";
-                               allwinner,function = "uart1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG5", "PG6";
+                               function = "uart1";
                        };
 
                        uart2_pins_a: uart2@1 {
-                               allwinner,pins = "PD2", "PD3";
-                               allwinner,function = "uart2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PD2", "PD3";
+                               function = "uart2";
                        };
 
                        uart2_cts_rts_pins_a: uart2-cts-rts@0 {
-                               allwinner,pins = "PD4", "PD5";
-                               allwinner,function = "uart2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PD4", "PD5";
+                               function = "uart2";
                        };
 
                        uart3_pins_a: uart3@1 {
-                               allwinner,pins = "PG9", "PG10";
-                               allwinner,function = "uart3";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG9", "PG10";
+                               function = "uart3";
                        };
 
                        uart3_cts_rts_pins_a: uart3-cts-rts@0 {
-                               allwinner,pins = "PG11", "PG12";
-                               allwinner,function = "uart3";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG11", "PG12";
+                               function = "uart3";
                        };
                };
 
index c6da5ad3715281c7a1f56bc5c2c5b2e2e86667e5..e86fa46fdd4553c4afb41a8ef66cd803734457b4 100644 (file)
@@ -154,7 +154,7 @@ xio: gpio@38 {
 };
 
 &mmc0_pins_a {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &mmc0 {
@@ -177,31 +177,24 @@ &otg_sram {
 
 &pio {
        chip_vbus_pin: chip_vbus_pin@0 {
-               allwinner,pins = "PB10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB10";
+               function = "gpio_out";
        };
 
        chip_wifi_reg_on_pin: chip_wifi_reg_on_pin@0 {
-               allwinner,pins = "PC19";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC19";
+               function = "gpio_out";
        };
 
        chip_id_det_pin: chip_id_det_pin@0 {
-               allwinner,pins = "PG2";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG2";
+               function = "gpio_in";
        };
 
        chip_w1_pin: chip_w1_pin@0 {
-               allwinner,pins = "PD2";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PD2";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index 82f87cdcd1649ea56cf8327769b5e3398f827fd3..8a4d2277826f03fccdb52b4e1cf4ecbd5f511fa0 100644 (file)
@@ -130,17 +130,14 @@ &otg_sram {
 
 &pio {
        codec_pa_pin: codec_pa_pin@0 {
-               allwinner,pins = "PG10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG10";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin: mmc0_cd_pin@0 {
-               allwinner,pins = "PG0";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG0";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        ts_power_pin: ts_power_pin {
@@ -151,24 +148,20 @@ ts_power_pin: ts_power_pin {
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PG1";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PG1";
+               function = "gpio_in";
+               bias-pull-down;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PG2";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PG2";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_pin_a: usb0_vbus_pin@0 {
-               allwinner,pins = "PG12";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG12";
+               function = "gpio_out";
        };
 };
 
index b0fca4ef4dae88550c5a45af41b977e86a8e1247..7ab6b336533ed6c9c0521da9a9b9c0a680701101 100644 (file)
@@ -555,86 +555,67 @@ pio: pinctrl@01c20800 {
                        #gpio-cells = <3>;
 
                        i2c0_pins_a: i2c0@0 {
-                               allwinner,pins = "PB0", "PB1";
-                               allwinner,function = "i2c0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB0", "PB1";
+                               function = "i2c0";
                        };
 
                        i2c1_pins_a: i2c1@0 {
-                               allwinner,pins = "PB15", "PB16";
-                               allwinner,function = "i2c1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB15", "PB16";
+                               function = "i2c1";
                        };
 
                        i2c2_pins_a: i2c2@0 {
-                               allwinner,pins = "PB17", "PB18";
-                               allwinner,function = "i2c2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB17", "PB18";
+                               function = "i2c2";
                        };
 
                        lcd_rgb565_pins: lcd_rgb565@0 {
-                               allwinner,pins = "PD3", "PD4", "PD5", "PD6", "PD7",
+                               pins = "PD3", "PD4", "PD5", "PD6", "PD7",
                                                 "PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
                                                 "PD19", "PD20", "PD21", "PD22", "PD23",
                                                 "PD24", "PD25", "PD26", "PD27";
-                               allwinner,function = "lcd0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "lcd0";
                        };
 
                        mmc0_pins_a: mmc0@0 {
-                               allwinner,pins = "PF0", "PF1", "PF2", "PF3",
-                                                "PF4", "PF5";
-                               allwinner,function = "mmc0";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PF0", "PF1", "PF2", "PF3",
+                                      "PF4", "PF5";
+                               function = "mmc0";
+                               drive-strength = <30>;
                        };
 
                        mmc2_pins_a: mmc2@0 {
-                               allwinner,pins = "PC6", "PC7", "PC8", "PC9",
-                                       "PC10", "PC11", "PC12", "PC13",
-                                       "PC14", "PC15";
-                               allwinner,function = "mmc2";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               pins = "PC6", "PC7", "PC8", "PC9",
+                                      "PC10", "PC11", "PC12", "PC13",
+                                      "PC14", "PC15";
+                               function = "mmc2";
+                               drive-strength = <30>;
+                               bias-pull-up;
                        };
 
                        spi2_pins_a: spi2@0 {
-                               allwinner,pins = "PE1", "PE2", "PE3";
-                               allwinner,function = "spi2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PE1", "PE2", "PE3";
+                               function = "spi2";
                        };
 
                        spi2_cs0_pins_a: spi2-cs0@0 {
-                               allwinner,pins = "PE0";
-                               allwinner,function = "spi2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PE0";
+                               function = "spi2";
                        };
 
                        uart3_pins_a: uart3@0 {
-                               allwinner,pins = "PG9", "PG10";
-                               allwinner,function = "uart3";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG9", "PG10";
+                               function = "uart3";
                        };
 
                        uart3_pins_cts_rts_a: uart3-cts-rts@0 {
-                               allwinner,pins = "PG11", "PG12";
-                               allwinner,function = "uart3";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG11", "PG12";
+                               function = "uart3";
                        };
 
                        pwm0_pins: pwm0 {
-                               allwinner,pins = "PB2";
-                               allwinner,function = "pwm";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB2";
+                               function = "pwm";
                        };
                };
 
index 2f8cfab771e234487edcebd23c22b0aa24bac1fd..effbdc766938590cae987afbf3ef638d60532ca1 100644 (file)
@@ -68,10 +68,8 @@ &ehci0 {
 
 &pio {
        usb1_vbus_pin_a: usb1_vbus_pin@0 {
-               allwinner,pins = "PH27";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH27";
+               function = "gpio_out";
        };
 };
 
index f9cf36888d93a6f3673d563dbc6f8cb25ad882df..f5ececd45bc0333bbbede4bd7acd40673a25d8ea 100644 (file)
@@ -124,29 +124,25 @@ &mmc0 {
 };
 
 &mmc0_pins_a {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &pio {
        mmc0_cd_pin_colombus: mmc0_cd_pin@0 {
-               allwinner,pins = "PA8";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA8";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb2_vbus_pin_colombus: usb2_vbus_pin@0 {
-               allwinner,pins = "PH24";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH24";
+               function = "gpio_out";
        };
 
        i2c_lcd_pins: i2c_lcd_pin@0 {
-               allwinner,pins = "PA23", "PA24";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA23", "PA24";
+               function = "gpio_out";
+               bias-pull-up;
        };
 };
 
index 735914f6ae446a4766f484ab888826efc99eefb1..b168d6df2b30fea0e32b48d13204dbd0e19aa579 100644 (file)
@@ -201,7 +201,7 @@ &mmc0 {
 
 &mmc0_pins_a {
        /* external pull-ups missing for some pins */
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &mmc1 {
@@ -220,24 +220,19 @@ &ohci0 {
 
 &pio {
        gmac_phy_reset_pin_hummingbird: gmac_phy_reset_pin@0 {
-               allwinner,pins = "PA21";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PA21";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_hummingbird: mmc0_cd_pin@0 {
-               allwinner,pins = "PA8";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA8";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        wifi_reset_pin_hummingbird: wifi_reset_pin@0 {
-               allwinner,pins = "PG10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG10";
+               function = "gpio_out";
        };
 };
 
@@ -333,7 +328,7 @@ &uart0 {
 
 &usb1_vbus_pin_a {
        /* different pin from sunxi-common-regulators */
-       allwinner,pins = "PH24";
+       pins = "PH24";
 };
 
 &usbphy {
index e9185dad67ee607f4b8b61287b042d22d9ae01c4..f3468a14596e3d9aed1c2e217ef5bd33a8cc8d40 100644 (file)
@@ -109,24 +109,19 @@ &mmc0 {
 
 &pio {
        led_pins_i7: led_pins@0 {
-               allwinner,pins = "PH13";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH13";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_i7: mmc0_cd_pin@0 {
-               allwinner,pins = "PH22";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH22";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb1_vbus_pin_i7: usb1_vbus_pin@0 {
-               allwinner,pins = "PC27";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC27";
+               function = "gpio_out";
        };
 };
 
index 29016a13a2c1e7b25438951f836add9d2f818b87..8af5b667a46d01d9c4efabe3bdc846fdcd22ca84 100644 (file)
@@ -128,24 +128,19 @@ axp22x: pmic@68 {
 
 &pio {
        led_pins_m9: led_pins@0 {
-               allwinner,pins = "PH13";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH13";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_m9: mmc0_cd_pin@0 {
-               allwinner,pins = "PH22";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH22";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb1_vbus_pin_m9: usb1_vbus_pin@0 {
-               allwinner,pins = "PC27";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC27";
+               function = "gpio_out";
        };
 };
 
index 5faeae429e2aa15eb667d6d723fc6be5520b8f54..bf0f5831126f15710348e0dd00012295dbf43d36 100644 (file)
@@ -128,24 +128,19 @@ axp22x: pmic@68 {
 
 &pio {
        led_pins_m9: led_pins@0 {
-               allwinner,pins = "PH13";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH13";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_m9: mmc0_cd_pin@0 {
-               allwinner,pins = "PH22";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH22";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb1_vbus_pin_m9: usb1_vbus_pin@0 {
-               allwinner,pins = "PC27";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC27";
+               function = "gpio_out";
        };
 };
 
index 2b26175d55d1b7e3cc27611eb5883f4bc913d575..53e940738c7f67d04879defa05a8396588c8bc96 100644 (file)
@@ -479,130 +479,112 @@ pio: pinctrl@01c20800 {
                        #gpio-cells = <3>;
 
                        gmac_pins_gmii_a: gmac_gmii@0 {
-                               allwinner,pins = "PA0", "PA1", "PA2", "PA3",
+                               pins = "PA0", "PA1", "PA2", "PA3",
                                                "PA4", "PA5", "PA6", "PA7",
                                                "PA8", "PA9", "PA10", "PA11",
                                                "PA12", "PA13", "PA14", "PA15",
                                                "PA16", "PA17", "PA18", "PA19",
                                                "PA20", "PA21", "PA22", "PA23",
                                                "PA24", "PA25", "PA26", "PA27";
-                               allwinner,function = "gmac";
+                               function = "gmac";
                                /*
                                 * data lines in GMII mode run at 125MHz and
                                 * might need a higher signal drive strength
                                 */
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               drive-strength = <30>;
                        };
 
                        gmac_pins_mii_a: gmac_mii@0 {
-                               allwinner,pins = "PA0", "PA1", "PA2", "PA3",
+                               pins = "PA0", "PA1", "PA2", "PA3",
                                                "PA8", "PA9", "PA11",
                                                "PA12", "PA13", "PA14", "PA19",
                                                "PA20", "PA21", "PA22", "PA23",
                                                "PA24", "PA26", "PA27";
-                               allwinner,function = "gmac";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "gmac";
                        };
 
                        gmac_pins_rgmii_a: gmac_rgmii@0 {
-                               allwinner,pins = "PA0", "PA1", "PA2", "PA3",
+                               pins = "PA0", "PA1", "PA2", "PA3",
                                                "PA9", "PA10", "PA11",
                                                "PA12", "PA13", "PA14", "PA19",
                                                "PA20", "PA25", "PA26", "PA27";
-                               allwinner,function = "gmac";
+                               function = "gmac";
                                /*
                                 * data lines in RGMII mode use DDR mode
                                 * and need a higher signal drive strength
                                 */
-                               allwinner,drive = <SUN4I_PINCTRL_40_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               drive-strength = <40>;
                        };
 
                        i2c0_pins_a: i2c0@0 {
-                               allwinner,pins = "PH14", "PH15";
-                               allwinner,function = "i2c0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH14", "PH15";
+                               function = "i2c0";
                        };
 
                        i2c1_pins_a: i2c1@0 {
-                               allwinner,pins = "PH16", "PH17";
-                               allwinner,function = "i2c1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH16", "PH17";
+                               function = "i2c1";
                        };
 
                        i2c2_pins_a: i2c2@0 {
-                               allwinner,pins = "PH18", "PH19";
-                               allwinner,function = "i2c2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH18", "PH19";
+                               function = "i2c2";
                        };
 
                        lcd0_rgb888_pins: lcd0_rgb888 {
-                               allwinner,pins = "PD0", "PD1", "PD2", "PD3",
+                               pins = "PD0", "PD1", "PD2", "PD3",
                                                 "PD4", "PD5", "PD6", "PD7",
                                                 "PD8", "PD9", "PD10", "PD11",
                                                 "PD12", "PD13", "PD14", "PD15",
                                                 "PD16", "PD17", "PD18", "PD19",
                                                 "PD20", "PD21", "PD22", "PD23",
                                                 "PD24", "PD25", "PD26", "PD27";
-                               allwinner,function = "lcd0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "lcd0";
                        };
 
                        mmc0_pins_a: mmc0@0 {
-                               allwinner,pins = "PF0", "PF1", "PF2",
+                               pins = "PF0", "PF1", "PF2",
                                                 "PF3", "PF4", "PF5";
-                               allwinner,function = "mmc0";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "mmc0";
+                               drive-strength = <30>;
                        };
 
                        mmc1_pins_a: mmc1@0 {
-                               allwinner,pins = "PG0", "PG1", "PG2", "PG3",
+                               pins = "PG0", "PG1", "PG2", "PG3",
                                                 "PG4", "PG5";
-                               allwinner,function = "mmc1";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "mmc1";
+                               drive-strength = <30>;
                        };
 
                        mmc2_pins_a: mmc2@0 {
-                               allwinner,pins = "PC6", "PC7", "PC8", "PC9",
+                               pins = "PC6", "PC7", "PC8", "PC9",
                                                 "PC10", "PC11";
-                               allwinner,function = "mmc2";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               function = "mmc2";
+                               drive-strength = <30>;
+                               bias-pull-up;
                        };
 
                        mmc2_8bit_emmc_pins: mmc2@1 {
-                               allwinner,pins = "PC6", "PC7", "PC8", "PC9",
+                               pins = "PC6", "PC7", "PC8", "PC9",
                                                 "PC10", "PC11", "PC12",
                                                 "PC13", "PC14", "PC15",
                                                 "PC24";
-                               allwinner,function = "mmc2";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "mmc2";
+                               drive-strength = <30>;
                        };
 
                        mmc3_8bit_emmc_pins: mmc3@1 {
-                               allwinner,pins = "PC6", "PC7", "PC8", "PC9",
+                               pins = "PC6", "PC7", "PC8", "PC9",
                                                 "PC10", "PC11", "PC12",
                                                 "PC13", "PC14", "PC15",
                                                 "PC24";
-                               allwinner,function = "mmc3";
-                               allwinner,drive = <SUN4I_PINCTRL_40_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "mmc3";
+                               drive-strength = <40>;
                        };
 
                        uart0_pins_a: uart0@0 {
-                               allwinner,pins = "PH20", "PH21";
-                               allwinner,function = "uart0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH20", "PH21";
+                               function = "uart0";
                        };
                };
 
@@ -861,7 +843,7 @@ spi3: spi@01c6b000 {
                gic: interrupt-controller@01c81000 {
                        compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
                        reg = <0x01c81000 0x1000>,
-                             <0x01c82000 0x1000>,
+                             <0x01c82000 0x2000>,
                              <0x01c84000 0x2000>,
                              <0x01c86000 0x2000>;
                        interrupt-controller;
@@ -1075,17 +1057,13 @@ r_pio: pinctrl@01f02c00 {
                        #gpio-cells = <3>;
 
                        ir_pins_a: ir@0 {
-                               allwinner,pins = "PL4";
-                               allwinner,function = "s_ir";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PL4";
+                               function = "s_ir";
                        };
 
                        p2wi_pins: p2wi {
-                               allwinner,pins = "PL0", "PL1";
-                               allwinner,function = "s_p2wi";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PL0", "PL1";
+                               function = "s_p2wi";
                        };
                };
 
index 73c133f5e79cdf9540174002656421c96dc68b62..2238eda318f60f060d7c82ad290d3a1271ce1358 100644 (file)
@@ -134,24 +134,20 @@ &mmc0 {
 
 &pio {
        gt911_int_primo81: gt911_int_pin@0 {
-               allwinner,pins = "PA3";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PA3";
+               function = "gpio_in";
        };
 
        mma8452_int_primo81: mma8452_int_pin@0 {
-               allwinner,pins = "PA9";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA9";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        mmc0_cd_pin_primo81: mmc0_cd_pin@0 {
-               allwinner,pins = "PA8";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA8";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index c35ec112f5a094e63468b675703fb6ee8c4c77b6..8743aeed127521a0e6e7a5cdd909591cca5ac09f 100644 (file)
@@ -136,17 +136,14 @@ &ohci1 {
 
 &pio {
        led_pin_sina31s: led_pin@0 {
-               allwinner,pins = "PH13";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH13";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_sina31s: mmc0_cd_pin@0 {
-               allwinner,pins = "PA4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index db7fa13f5425e46981102d2c6e247535b082be0e..3bd862bf82a968caebd44f512ae0e0a76866fcea 100644 (file)
@@ -122,7 +122,7 @@ &mmc0 {
 };
 
 &mmc0_pins_a {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &mmc2 {
@@ -144,7 +144,7 @@ brcmf: bcrmf@1 {
 };
 
 &mmc2_pins_a {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &ohci0 {
@@ -153,33 +153,26 @@ &ohci0 {
 
 &pio {
        gmac_phy_reset_pin_bpi_m2: gmac_phy_reset_pin@0 {
-               allwinner,pins = "PA21";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PA21";
+               function = "gpio_out";
        };
 
        led_pins_bpi_m2: led_pins@0 {
-               allwinner,pins = "PG5", "PG10", "PG11";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG5", "PG10", "PG11";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_bpi_m2: mmc0_cd_pin@0 {
-               allwinner,pins = "PA4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
 &r_pio {
        mmc2_pwrseq_pin_bpi_m2: mmc2_pwrseq_pin@0 {
-               allwinner,pins = "PL8";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL8";
+               function = "gpio_out";
        };
 };
 
index d6ad6196a768bce9a28d1c7fcb149da32f21d5df..154ebf5082ed3543a3d48c48da866dbe71a65034 100644 (file)
@@ -92,10 +92,9 @@ &ohci1 {
 
 &pio {
        mmc0_cd_pin_bs1078v2: mmc0_cd_pin@0 {
-               allwinner,pins = "PA8";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA8";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
@@ -110,7 +109,7 @@ &mmc0 {
 };
 
 &mmc0_pins_a {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &p2wi {
index 0c434304e040f1745722cea0e299c9e0794fef3f..edaba5f904fd8eccaf518dc9389d183d16c62c56 100644 (file)
@@ -77,17 +77,15 @@ &mmc0 {
 
 &pio {
        mmc0_cd_pin_e708_q1: mmc0_cd_pin@0 {
-               allwinner,pins = "PA8";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA8";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PA15";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PA15";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index 532f1a1605600d678b3850b401aa9f81a4ad24ab..08e776ae095a36ada2aea0a6c62738f72acf4a51 100644 (file)
@@ -183,7 +183,7 @@ brcmf: bcrmf@1 {
 
 &mmc3_pins_a {
        /* AP6210 requires pull-up */
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &ohci0 {
@@ -200,31 +200,24 @@ &otg_sram {
 
 &pio {
        gmac_power_pin_bpi_m1p: gmac_power_pin@0 {
-               allwinner,pins = "PH23";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH23";
+               function = "gpio_out";
        };
 
        led_pins_bpi_m1p: led_pins@0 {
-               allwinner,pins = "PH24", "PH25";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH24", "PH25";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_bpi_m1p: mmc0_cd_pin@0 {
-               allwinner,pins = "PH10";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH10";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        mmc3_pwrseq_pin_bpi_m1p: mmc3_pwrseq_pin@0 {
-               allwinner,pins = "PH22";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH22";
+               function = "gpio_out";
        };
 };
 
index 67c8a7644b99623838b08e142bf2c236f0db5c9e..91f2e5f9efcbe30219fafc4bca99cdebb9386d41 100644 (file)
@@ -179,31 +179,25 @@ &otg_sram {
 
 &pio {
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        mmc0_cd_pin_bananapi: mmc0_cd_pin@0 {
-               allwinner,pins = "PH10";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH10";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        gmac_power_pin_bananapi: gmac_power_pin@0 {
-               allwinner,pins = "PH23";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH23";
+               function = "gpio_out";
        };
 
        led_pins_bananapi: led_pins@0 {
-               allwinner,pins = "PH24";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH24";
+               function = "gpio_out";
        };
 };
 
index 18fcc87f462132366e1a3978118fb1800f9a46fc..19d63d4049de68983d08973f6f5dfc4128d82ffc 100644 (file)
@@ -182,45 +182,34 @@ &ohci1 {
 
 &pio {
        gmac_power_pin_bananapro: gmac_power_pin@0 {
-               allwinner,pins = "PH23";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH23";
+               function = "gpio_out";
        };
 
        led_pins_bananapro: led_pins@0 {
-               allwinner,pins = "PH24", "PG2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH24", "PG2";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_bananapro: mmc0_cd_pin@0 {
-               allwinner,pins = "PH10";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH10";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb1_vbus_pin_bananapro: usb1_vbus_pin@0 {
-               allwinner,pins = "PH0";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH0";
+               function = "gpio_out";
        };
 
        usb2_vbus_pin_bananapro: usb2_vbus_pin@0 {
-               allwinner,pins = "PH1";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH1";
+               function = "gpio_out";
        };
 
        vmmc3_pin_bananapro: vmmc3_pin@0 {
-               allwinner,pins = "PH22";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH22";
+               function = "gpio_out";
        };
 };
 
index 1fa832d7b469829636c18ca22c60a06a56ddfd06..4dc1e10f88c47ba5769757933f22e5d363f6db65 100644 (file)
@@ -160,17 +160,14 @@ &otg_sram {
 
 &pio {
        led_pins_cubieboard2: led_pins@0 {
-               allwinner,pins = "PH20", "PH21";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH20", "PH21";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index 83f39b0362cb278233a8e1e9464eb42b6464886d..f019aa3fe96d86031000c4cf6ddaa03656669594 100644 (file)
@@ -207,7 +207,7 @@ brcmf: bcrmf@1 {
 
 &mmc3_pins_a {
        /* AP6210 requires pull-up */
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &ohci0 {
@@ -224,45 +224,33 @@ &otg_sram {
 
 &pio {
        ahci_pwr_pin_cubietruck: ahci_pwr_pin@1 {
-               allwinner,pins = "PH12";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH12";
+               function = "gpio_out";
        };
 
        led_pins_cubietruck: led_pins@0 {
-               allwinner,pins = "PH7", "PH11", "PH20", "PH21";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH7", "PH11", "PH20", "PH21";
+               function = "gpio_out";
        };
 
        mmc3_pwrseq_pin_cubietruck: mmc3_pwrseq_pin@0 {
-               allwinner,pins = "PH9";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH9";
+               function = "gpio_out";
        };
 
        usb0_vbus_pin_a: usb0_vbus_pin@0 {
-               allwinner,pins = "PH17";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH17";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH19";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH19";
+               function = "gpio_in";
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH22";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH22";
+               function = "gpio_in";
        };
 };
 
index 37f4a54974526f2c484fcf23e2c6432aabd467df..e921ba42f1703c11f2c1182d0ae67b6e793ea550 100644 (file)
@@ -188,31 +188,23 @@ &ohci1 {
 
 &pio {
        ahci_pwr_pin_a20_hummingbird: ahci_pwr_pin@0 {
-               allwinner,pins = "PH15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH15";
+               function = "gpio_out";
        };
 
        usb1_vbus_pin_a20_hummingbird: usb1_vbus_pin@0 {
-               allwinner,pins = "PH2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH2";
+               function = "gpio_out";
        };
 
        mmc3_vdd_pin_a20_hummingbird: mmc3_vdd_pin@0 {
-               allwinner,pins = "PH9";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH9";
+               function = "gpio_out";
        };
 
        gmac_vdd_pin_a20_hummingbird: gmac_vdd_pin@0 {
-               allwinner,pins = "PH16";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH16";
+               function = "gpio_out";
        };
 };
 
index 1e6bd360dac0eaae2c7a651e35000ba6924e72fa..385fd8232ae00b83f1b9e14073a3a144cc9b0b66 100644 (file)
@@ -185,7 +185,7 @@ brcmf: bcrmf@1 {
 
 &mmc3_pins_a {
        /* AP6210 / AP6330 requires pull-up */
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &ohci0 {
@@ -198,31 +198,23 @@ &ohci1 {
 
 &pio {
        vmmc3_pin_i12_tvbox: vmmc3_pin@0 {
-               allwinner,pins = "PH2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH2";
+               function = "gpio_out";
        };
 
        vmmc3_io_pin_i12_tvbox: vmmc3_io_pin@0 {
-               allwinner,pins = "PH12";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH12";
+               function = "gpio_out";
        };
 
        gmac_power_pin_i12_tvbox: gmac_power_pin@0 {
-               allwinner,pins = "PH21";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH21";
+               function = "gpio_out";
        };
 
        led_pins_i12_tvbox: led_pins@0 {
-               allwinner,pins = "PH9", "PH20";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH9", "PH20";
+               function = "gpio_out";
        };
 };
 
index 10d48cbf81ff2cce0c817b1560224661bb4c5bb7..d52222c82cb8f3cfb06f7081eced17fc432b3595 100644 (file)
@@ -131,10 +131,9 @@ &mmc0 {
 
 &pio {
        led_pins_itead_core: led_pins@0 {
-               allwinner,pins = "PH20","PH21";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH20","PH21";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 };
 
index 73c05dab0a693e8331093babdd30f94b5ff3bae9..72ec0d5ae052cda33bc05a0086cd7e34a684184c 100644 (file)
@@ -87,7 +87,7 @@ reg_gmac_3v3: gmac-3v3 {
 };
 
 &ahci_pwr_pin_a {
-       allwinner,pins = "PB3";
+       pins = "PB3";
 };
 
 &ahci {
@@ -222,31 +222,25 @@ &otg_sram {
 
 &pio {
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        mmc0_cd_pin_lamobo_r1: mmc0_cd_pin@0 {
-               allwinner,pins = "PH10";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH10";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        gmac_power_pin_lamobo_r1: gmac_power_pin@0 {
-               allwinner,pins = "PH23";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH23";
+               function = "gpio_out";
        };
 
        led_pins_lamobo_r1: led_pins@0 {
-               allwinner,pins = "PH24";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH24";
+               function = "gpio_out";
        };
 };
 
@@ -327,7 +321,7 @@ &usb_power_supply {
 };
 
 &usb2_vbus_pin_a {
-       allwinner,pins = "PH12";
+       pins = "PH12";
 };
 
 &usbphy {
index 8d9ea48dd98c43edaa8e8666f8ecaf277b1bfcb2..0e074bd0e8c924e6164b92c91c1c6d49bcda7268 100644 (file)
@@ -145,10 +145,8 @@ &ohci1 {
 
 &pio {
        led_pins_m3: led_pins@0 {
-               allwinner,pins = "PH20";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH20";
+               function = "gpio_out";
        };
 };
 
index 90ff4a2670259fb8ec18b2980c913a36b2ed67ac..97d7a8b65a0313b1167f13aaa45199be4ec388f3 100644 (file)
@@ -132,17 +132,13 @@ &otg_sram {
 
 &pio {
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH4";
+               function = "gpio_in";
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH5";
+               function = "gpio_in";
        };
 };
 
index 134e0c1b129de35f1fa3626d2997fa70a5ad7316..7af9541421326b6f0634b80de6ce44f023cdceaa 100644 (file)
@@ -208,38 +208,30 @@ &otg_sram {
 
 &pio {
        ahci_pwr_pin_olimex_som_evb: ahci_pwr_pin@1 {
-               allwinner,pins = "PC3";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC3";
+               function = "gpio_out";
        };
 
        led_pins_olimex_som_evb: led_pins@0 {
-               allwinner,pins = "PH2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH2";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 
        mmc3_cd_pin_olimex_som_evb: mmc3_cd_pin@0 {
-               allwinner,pins = "PH0";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH0";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH4";
+               function = "gpio_in";
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH5";
+               function = "gpio_in";
        };
 };
 
index 35ad7006c53ce7ea88d514977ce891aa2be5a92c..1297432c28021701cafe96b3080cc61505eec413 100644 (file)
@@ -153,31 +153,26 @@ &otg_sram {
 
 &pio {
        ahci_pwr_pin_olinuxinolime: ahci_pwr_pin@1 {
-               allwinner,pins = "PC3";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC3";
+               function = "gpio_out";
        };
 
        led_pins_olinuxinolime: led_pins@0 {
-               allwinner,pins = "PH2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH2";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 };
 
index 5ea4915f6d75b93eb06c974ab1b6abd009f7f769..6efd915b00eedeeed8482e9d3c3411117b021d6c 100644 (file)
@@ -57,10 +57,8 @@ mmc2_pwrseq: pwrseq {
 
 &pio {
        mmc2_pins_nrst: mmc2@0 {
-               allwinner,pins = "PC16";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC16";
+               function = "gpio_out";
        };
 };
 
index d5c796c8d16f272ac6925438f95b6ec9616a50ee..b421d5170e0aa512ea6a71f3cfb82274dcd21c82 100644 (file)
@@ -202,38 +202,31 @@ &otg_sram {
 
 &pio {
        ahci_pwr_pin_olinuxinolime: ahci_pwr_pin@1 {
-               allwinner,pins = "PC3";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC3";
+               function = "gpio_out";
        };
 
        led_pins_olinuxinolime: led_pins@0 {
-               allwinner,pins = "PH2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH2";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 
        usb0_vbus_pin_lime2: usb0_vbus_pin@0 {
-               allwinner,pins = "PC17";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PC17";
+               function = "gpio_out";
        };
 };
 
index 7e3006f6a775acbad79841fd74084c3aac0ce01a..223fbd9f7c62db31d1f0e72c56664df0159b54f0 100644 (file)
@@ -227,31 +227,27 @@ &otg_sram {
 
 &pio {
        mmc3_cd_pin_olinuxinom: mmc3_cd_pin@0 {
-               allwinner,pins = "PH11";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH11";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        led_pins_olinuxino: led_pins@0 {
-               allwinner,pins = "PH2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH2";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_DOWN>;
+               pins = "PH5";
+               function = "gpio_in";
+               bias-pull-down;
        };
 };
 
index 2be04c438b1e144a4616376fa41901b1baf4de33..a7426574922781b4801569ad784206ca5ba1e64b 100644 (file)
@@ -166,52 +166,41 @@ &otg_sram {
 
 &pio {
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        mmc0_cd_pin_orangepi: mmc0_cd_pin@0 {
-               allwinner,pins = "PH10";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH10";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        mmc3_cd_pin_orangepi: mmc3_cd_pin@0 {
-               allwinner,pins = "PH11";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH11";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb2_vbus_pin_bananapro: usb2_vbus_pin@0 {
-               allwinner,pins = "PH22";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH22";
+               function = "gpio_out";
        };
 
        gmac_power_pin_orangepi: gmac_power_pin@0 {
-               allwinner,pins = "PH23";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH23";
+               function = "gpio_out";
        };
 
        led_pins_orangepi: led_pins@0 {
-               allwinner,pins = "PH24", "PH25";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH24", "PH25";
+               function = "gpio_out";
        };
 
        usb1_vbus_pin_bananapro: usb1_vbus_pin@0 {
-               allwinner,pins = "PH26";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH26";
+               function = "gpio_out";
        };
 };
 
index 71125bf6457513db6b2b606cc856572035d3f091..3de980c8f8ff9ab4ebfb8484875d634f7bc72204 100644 (file)
@@ -147,45 +147,35 @@ &otg_sram {
 
 &pio {
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        mmc0_cd_pin_orangepi: mmc0_cd_pin@0 {
-               allwinner,pins = "PH10";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH10";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb2_vbus_pin_bananapro: usb2_vbus_pin@0 {
-               allwinner,pins = "PH22";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH22";
+               function = "gpio_out";
        };
 
        gmac_power_pin_orangepi: gmac_power_pin@0 {
-               allwinner,pins = "PH23";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH23";
+               function = "gpio_out";
        };
 
        led_pins_orangepi: led_pins@0 {
-               allwinner,pins = "PH24";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH24";
+               function = "gpio_out";
        };
 
        usb1_vbus_pin_bananapro: usb1_vbus_pin@0 {
-               allwinner,pins = "PH26";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH26";
+               function = "gpio_out";
        };
 };
 
index ddac7328b852c1593fd269eca8c74ba8505a17fb..f47a5c46bc20a4a8ca7b3a8b6d282b4f67769eb9 100644 (file)
@@ -152,31 +152,24 @@ &otg_sram {
 
 &pio {
        ahci_pwr_pin_pcduino3_nano: ahci_pwr_pin@0 {
-               allwinner,pins = "PH2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH2";
+               function = "gpio_out";
        };
 
        led_pins_pcduino3_nano: led_pins@0 {
-               allwinner,pins = "PH16", "PH15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH16", "PH15";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb1_vbus_pin_pcduino3_nano: usb1_vbus_pin@0 {
-               allwinner,pins = "PD2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PD2";
+               function = "gpio_out";
        };
 };
 
index 1a8b39be1d61d83e0666623bb5ba839cfd1c798c..4599f98a3aeee60c89f291fcf517a09042644d3f 100644 (file)
@@ -108,7 +108,7 @@ &ahci {
 };
 
 &ahci_pwr_pin_a {
-       allwinner,pins = "PH2";
+       pins = "PH2";
 };
 
 &codec {
@@ -183,24 +183,19 @@ &otg_sram {
 
 &pio {
        led_pins_pcduino3: led_pins@0 {
-               allwinner,pins = "PH15", "PH16";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH15", "PH16";
+               function = "gpio_out";
        };
 
        key_pins_pcduino3: key_pins@0 {
-               allwinner,pins = "PH17", "PH18", "PH19";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH17", "PH18", "PH19";
+               function = "gpio_in";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index 2f6b21adddd9b963f6b2ec84f2ae1dc289009830..e19f171777551b06b4511ccd3409a32543add7da 100644 (file)
@@ -173,31 +173,24 @@ &otg_sram {
 
 &pio {
        bl_enable_pin: bl_enable_pin@0 {
-               allwinner,pins = "PH7";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH7";
+               function = "gpio_out";
        };
 
        codec_pa_pin: codec_pa_pin@0 {
-               allwinner,pins = "PH15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH15";
+               function = "gpio_out";
        };
 
        ts_reset_pin: ts_reset_pin@0 {
-               allwinner,pins = "PB13";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB13";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index dc31d476ef813985b306242bad50a9daad413506..c3078d4f10930a80b26f483a7b984e44261465f8 100644 (file)
@@ -160,17 +160,14 @@ &otg_sram {
 
 &pio {
        vmmc3_pin_ap6xxx_wl_regon: vmmc3_pin@0 {
-               allwinner,pins = "PH9";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH9";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index f7db067b0de0fb03206890323cd0d6223eb2b771..8e970c40f236d167cee65deed64d4cf46f310200 100644 (file)
@@ -1093,302 +1093,229 @@ pio: pinctrl@01c20800 {
                        #gpio-cells = <3>;
 
                        clk_out_a_pins_a: clk_out_a@0 {
-                               allwinner,pins = "PI12";
-                               allwinner,function = "clk_out_a";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI12";
+                               function = "clk_out_a";
                        };
 
                        clk_out_b_pins_a: clk_out_b@0 {
-                               allwinner,pins = "PI13";
-                               allwinner,function = "clk_out_b";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI13";
+                               function = "clk_out_b";
                        };
 
                        emac_pins_a: emac0@0 {
-                               allwinner,pins = "PA0", "PA1", "PA2",
-                                               "PA3", "PA4", "PA5", "PA6",
-                                               "PA7", "PA8", "PA9", "PA10",
-                                               "PA11", "PA12", "PA13", "PA14",
-                                               "PA15", "PA16";
-                               allwinner,function = "emac";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PA0", "PA1", "PA2",
+                                      "PA3", "PA4", "PA5", "PA6",
+                                      "PA7", "PA8", "PA9", "PA10",
+                                      "PA11", "PA12", "PA13", "PA14",
+                                      "PA15", "PA16";
+                               function = "emac";
                        };
 
                        gmac_pins_mii_a: gmac_mii@0 {
-                               allwinner,pins = "PA0", "PA1", "PA2",
-                                               "PA3", "PA4", "PA5", "PA6",
-                                               "PA7", "PA8", "PA9", "PA10",
-                                               "PA11", "PA12", "PA13", "PA14",
-                                               "PA15", "PA16";
-                               allwinner,function = "gmac";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PA0", "PA1", "PA2",
+                                      "PA3", "PA4", "PA5", "PA6",
+                                      "PA7", "PA8", "PA9", "PA10",
+                                      "PA11", "PA12", "PA13", "PA14",
+                                      "PA15", "PA16";
+                               function = "gmac";
                        };
 
                        gmac_pins_rgmii_a: gmac_rgmii@0 {
-                               allwinner,pins = "PA0", "PA1", "PA2",
-                                               "PA3", "PA4", "PA5", "PA6",
-                                               "PA7", "PA8", "PA10",
-                                               "PA11", "PA12", "PA13",
-                                               "PA15", "PA16";
-                               allwinner,function = "gmac";
+                               pins = "PA0", "PA1", "PA2",
+                                      "PA3", "PA4", "PA5", "PA6",
+                                       "PA7", "PA8", "PA10",
+                                      "PA11", "PA12", "PA13",
+                                      "PA15", "PA16";
+                               function = "gmac";
                                /*
                                 * data lines in RGMII mode use DDR mode
                                 * and need a higher signal drive strength
                                 */
-                               allwinner,drive = <SUN4I_PINCTRL_40_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               drive-strength = <40>;
                        };
 
                        i2c0_pins_a: i2c0@0 {
-                               allwinner,pins = "PB0", "PB1";
-                               allwinner,function = "i2c0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB0", "PB1";
+                               function = "i2c0";
                        };
 
                        i2c1_pins_a: i2c1@0 {
-                               allwinner,pins = "PB18", "PB19";
-                               allwinner,function = "i2c1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB18", "PB19";
+                               function = "i2c1";
                        };
 
                        i2c2_pins_a: i2c2@0 {
-                               allwinner,pins = "PB20", "PB21";
-                               allwinner,function = "i2c2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB20", "PB21";
+                               function = "i2c2";
                        };
 
                        i2c3_pins_a: i2c3@0 {
-                               allwinner,pins = "PI0", "PI1";
-                               allwinner,function = "i2c3";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI0", "PI1";
+                               function = "i2c3";
                        };
 
                        ir0_rx_pins_a: ir0@0 {
-                                   allwinner,pins = "PB4";
-                                   allwinner,function = "ir0";
-                                   allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                                   allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB4";
+                               function = "ir0";
                        };
 
                        ir0_tx_pins_a: ir0@1 {
-                                   allwinner,pins = "PB3";
-                                   allwinner,function = "ir0";
-                                   allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                                   allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB3";
+                               function = "ir0";
                        };
 
                        ir1_rx_pins_a: ir1@0 {
-                                   allwinner,pins = "PB23";
-                                   allwinner,function = "ir1";
-                                   allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                                   allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB23";
+                               function = "ir1";
                        };
 
                        ir1_tx_pins_a: ir1@1 {
-                                   allwinner,pins = "PB22";
-                                   allwinner,function = "ir1";
-                                   allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                                   allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB22";
+                               function = "ir1";
                        };
 
                        mmc0_pins_a: mmc0@0 {
-                               allwinner,pins = "PF0", "PF1", "PF2",
-                                                "PF3", "PF4", "PF5";
-                               allwinner,function = "mmc0";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PF0", "PF1", "PF2",
+                                      "PF3", "PF4", "PF5";
+                               function = "mmc0";
+                               drive-strength = <30>;
                        };
 
                        mmc0_cd_pin_reference_design: mmc0_cd_pin@0 {
-                               allwinner,pins = "PH1";
-                               allwinner,function = "gpio_in";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               pins = "PH1";
+                               function = "gpio_in";
+                               bias-pull-up;
                        };
 
                        mmc2_pins_a: mmc2@0 {
-                               allwinner,pins = "PC6", "PC7", "PC8",
-                                                "PC9", "PC10", "PC11";
-                               allwinner,function = "mmc2";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               pins = "PC6", "PC7", "PC8",
+                                      "PC9", "PC10", "PC11";
+                               function = "mmc2";
+                               drive-strength = <30>;
+                               bias-pull-up;
                        };
 
                        mmc3_pins_a: mmc3@0 {
-                               allwinner,pins = "PI4", "PI5", "PI6",
-                                                "PI7", "PI8", "PI9";
-                               allwinner,function = "mmc3";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI4", "PI5", "PI6",
+                                      "PI7", "PI8", "PI9";
+                               function = "mmc3";
+                               drive-strength = <30>;
                        };
 
                        ps20_pins_a: ps20@0 {
-                               allwinner,pins = "PI20", "PI21";
-                               allwinner,function = "ps2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI20", "PI21";
+                               function = "ps2";
                        };
 
                        ps21_pins_a: ps21@0 {
-                               allwinner,pins = "PH12", "PH13";
-                               allwinner,function = "ps2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH12", "PH13";
+                               function = "ps2";
                        };
 
                        pwm0_pins_a: pwm0@0 {
-                               allwinner,pins = "PB2";
-                               allwinner,function = "pwm";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB2";
+                               function = "pwm";
                        };
 
                        pwm1_pins_a: pwm1@0 {
-                               allwinner,pins = "PI3";
-                               allwinner,function = "pwm";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI3";
+                               function = "pwm";
                        };
 
                        spdif_tx_pins_a: spdif@0 {
-                               allwinner,pins = "PB13";
-                               allwinner,function = "spdif";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               pins = "PB13";
+                               function = "spdif";
+                               bias-pull-up;
                        };
 
                        spi0_pins_a: spi0@0 {
-                               allwinner,pins = "PI11", "PI12", "PI13";
-                               allwinner,function = "spi0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI11", "PI12", "PI13";
+                               function = "spi0";
                        };
 
                        spi0_cs0_pins_a: spi0_cs0@0 {
-                               allwinner,pins = "PI10";
-                               allwinner,function = "spi0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI10";
+                               function = "spi0";
                        };
 
                        spi0_cs1_pins_a: spi0_cs1@0 {
-                               allwinner,pins = "PI14";
-                               allwinner,function = "spi0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI14";
+                               function = "spi0";
                        };
 
                        spi1_pins_a: spi1@0 {
-                               allwinner,pins = "PI17", "PI18", "PI19";
-                               allwinner,function = "spi1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI17", "PI18", "PI19";
+                               function = "spi1";
                        };
 
                        spi1_cs0_pins_a: spi1_cs0@0 {
-                               allwinner,pins = "PI16";
-                               allwinner,function = "spi1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI16";
+                               function = "spi1";
                        };
 
                        spi2_pins_a: spi2@0 {
-                               allwinner,pins = "PC20", "PC21", "PC22";
-                               allwinner,function = "spi2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PC20", "PC21", "PC22";
+                               function = "spi2";
                        };
 
                        spi2_pins_b: spi2@1 {
-                               allwinner,pins = "PB15", "PB16", "PB17";
-                               allwinner,function = "spi2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB15", "PB16", "PB17";
+                               function = "spi2";
                        };
 
                        spi2_cs0_pins_a: spi2_cs0@0 {
-                               allwinner,pins = "PC19";
-                               allwinner,function = "spi2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PC19";
+                               function = "spi2";
                        };
 
                        spi2_cs0_pins_b: spi2_cs0@1 {
-                               allwinner,pins = "PB14";
-                               allwinner,function = "spi2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB14";
+                               function = "spi2";
                        };
 
                        uart0_pins_a: uart0@0 {
-                               allwinner,pins = "PB22", "PB23";
-                               allwinner,function = "uart0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB22", "PB23";
+                               function = "uart0";
                        };
 
                        uart2_pins_a: uart2@0 {
-                               allwinner,pins = "PI16", "PI17", "PI18", "PI19";
-                               allwinner,function = "uart2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI16", "PI17", "PI18", "PI19";
+                               function = "uart2";
                        };
 
                        uart3_pins_a: uart3@0 {
-                               allwinner,pins = "PG6", "PG7", "PG8", "PG9";
-                               allwinner,function = "uart3";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG6", "PG7", "PG8", "PG9";
+                               function = "uart3";
                        };
 
                        uart3_pins_b: uart3@1 {
-                               allwinner,pins = "PH0", "PH1";
-                               allwinner,function = "uart3";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH0", "PH1";
+                               function = "uart3";
                        };
 
                        uart4_pins_a: uart4@0 {
-                               allwinner,pins = "PG10", "PG11";
-                               allwinner,function = "uart4";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG10", "PG11";
+                               function = "uart4";
                        };
 
                        uart4_pins_b: uart4@1 {
-                               allwinner,pins = "PH4", "PH5";
-                               allwinner,function = "uart4";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH4", "PH5";
+                               function = "uart4";
                        };
 
                        uart5_pins_a: uart5@0 {
-                               allwinner,pins = "PI10", "PI11";
-                               allwinner,function = "uart5";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI10", "PI11";
+                               function = "uart5";
                        };
 
                        uart6_pins_a: uart6@0 {
-                               allwinner,pins = "PI12", "PI13";
-                               allwinner,function = "uart6";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI12", "PI13";
+                               function = "uart6";
                        };
 
                        uart7_pins_a: uart7@0 {
-                               allwinner,pins = "PI20", "PI21";
-                               allwinner,function = "uart7";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PI20", "PI21";
+                               function = "uart7";
                        };
                };
 
@@ -1686,9 +1613,9 @@ hstimer@01c60000 {
                };
 
                gic: interrupt-controller@01c81000 {
-                       compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
+                       compatible = "arm,gic-400", "arm,cortex-a7-gic", "arm,cortex-a15-gic";
                        reg = <0x01c81000 0x1000>,
-                             <0x01c82000 0x1000>,
+                             <0x01c82000 0x2000>,
                              <0x01c84000 0x2000>,
                              <0x01c86000 0x2000>;
                        interrupt-controller;
index e4991a78ad73526383664c7f732a2d5d8f16482d..58055c39901f2a91409197d8ca593477e78952a1 100644 (file)
@@ -274,88 +274,69 @@ pio: pinctrl@01c20800 {
                        #gpio-cells = <3>;
 
                        uart0_pins_a: uart0@0 {
-                               allwinner,pins = "PF2", "PF4";
-                               allwinner,function = "uart0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PF2", "PF4";
+                               function = "uart0";
                        };
 
                        uart1_pins_a: uart1@0 {
-                               allwinner,pins = "PG6", "PG7";
-                               allwinner,function = "uart1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG6", "PG7";
+                               function = "uart1";
                        };
 
                        uart1_pins_cts_rts_a: uart1-cts-rts@0 {
-                               allwinner,pins = "PG8", "PG9";
-                               allwinner,function = "uart1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG8", "PG9";
+                               function = "uart1";
                        };
 
                        mmc0_pins_a: mmc0@0 {
-                               allwinner,pins = "PF0", "PF1", "PF2",
-                                                "PF3", "PF4", "PF5";
-                               allwinner,function = "mmc0";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PF0", "PF1", "PF2",
+                                      "PF3", "PF4", "PF5";
+                               function = "mmc0";
+                               drive-strength = <30>;
                        };
 
                        mmc1_pins_a: mmc1@0 {
-                               allwinner,pins = "PG0", "PG1", "PG2",
-                                                "PG3", "PG4", "PG5";
-                               allwinner,function = "mmc1";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG0", "PG1", "PG2",
+                                      "PG3", "PG4", "PG5";
+                               function = "mmc1";
+                               drive-strength = <30>;
                        };
 
                        mmc2_8bit_pins: mmc2_8bit {
-                               allwinner,pins = "PC5", "PC6", "PC8",
-                                                "PC9", "PC10", "PC11",
-                                                "PC12", "PC13", "PC14",
-                                                "PC15", "PC16";
-                               allwinner,function = "mmc2";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PC5", "PC6", "PC8",
+                                      "PC9", "PC10", "PC11",
+                                      "PC12", "PC13", "PC14",
+                                      "PC15", "PC16";
+                               function = "mmc2";
+                               drive-strength = <30>;
                        };
 
                        pwm0_pins: pwm0 {
-                               allwinner,pins = "PH0";
-                               allwinner,function = "pwm0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH0";
+                               function = "pwm0";
                        };
 
                        i2c0_pins_a: i2c0@0 {
-                               allwinner,pins = "PH2", "PH3";
-                               allwinner,function = "i2c0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH2", "PH3";
+                               function = "i2c0";
                        };
 
                        i2c1_pins_a: i2c1@0 {
-                               allwinner,pins = "PH4", "PH5";
-                               allwinner,function = "i2c1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH4", "PH5";
+                               function = "i2c1";
                        };
 
                        i2c2_pins_a: i2c2@0 {
-                               allwinner,pins = "PE12", "PE13";
-                               allwinner,function = "i2c2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PE12", "PE13";
+                               function = "i2c2";
                        };
 
                        lcd_rgb666_pins: lcd-rgb666@0 {
-                               allwinner,pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
-                                                "PD10", "PD11", "PD12", "PD13", "PD14", "PD15",
-                                                "PD18", "PD19", "PD20", "PD21", "PD22", "PD23",
-                                                "PD24", "PD25", "PD26", "PD27";
-                               allwinner,function = "lcd0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               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";
                        };
                };
 
@@ -489,7 +470,7 @@ i2c2: i2c@01c2b400 {
                gic: interrupt-controller@01c81000 {
                        compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
                        reg = <0x01c81000 0x1000>,
-                             <0x01c82000 0x1000>,
+                             <0x01c82000 0x2000>,
                              <0x01c84000 0x2000>,
                              <0x01c86000 0x2000>;
                        interrupt-controller;
@@ -587,17 +568,15 @@ r_pio: pinctrl@01f02c00 {
                        #gpio-cells = <3>;
 
                        r_rsb_pins: r_rsb {
-                               allwinner,pins = "PL0", "PL1";
-                               allwinner,function = "s_rsb";
-                               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               pins = "PL0", "PL1";
+                               function = "s_rsb";
+                               drive-strength = <20>;
+                               bias-pull-up;
                        };
 
                        r_uart_pins_a: r_uart@0 {
-                               allwinner,pins = "PL2", "PL3";
-                               allwinner,function = "s_uart";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PL2", "PL3";
+                               function = "s_uart";
                        };
                };
 
index 610786e635fa7268988528513c5b6db1e194b07b..c21f5b1b255e27d33b932988ec426bf9032e57f7 100644 (file)
@@ -115,10 +115,9 @@ &mmc0 {
 
 &pio {
        mmc0_cd_pin_evb: mmc0_cd_pin@0 {
-               allwinner,pins = "PB4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PB4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index 21bb291b9568e35752b7f9c806faa0e138e2a3c7..649e31339662832c4fa64bbfe18cd07bc1aef61b 100644 (file)
@@ -86,15 +86,13 @@ esp8089: sdio_wifi@1 {
 };
 
 &mmc1_pins_a {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &r_pio {
        wifi_pwrseq_pin_mid2407: wifi_pwrseq_pin@0 {
-               allwinner,pins = "PL6";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL6";
+               function = "gpio_out";
        };
 };
 
index 9955f85f9147c843b1f130676f3ec352b9186cc2..6b3bcae089f2e5905bc8f328b45e04125dcf92c5 100644 (file)
@@ -79,15 +79,13 @@ esp8089: sdio_wifi@1 {
 };
 
 &mmc1_pins_a {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &r_pio {
        wifi_pwrseq_pin_mid2809: wifi_pwrseq_pin@0 {
-               allwinner,pins = "PL6";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL6";
+               function = "gpio_out";
        };
 };
 
index fb4665576dfffc8169bb0c7afcd9e1c22c146378..3e05959104f175768ec6d2ecb04b4ff973eddf5b 100644 (file)
@@ -71,7 +71,7 @@ home {
 };
 
 &mmc1_pins_a {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &mmc1 {
@@ -89,10 +89,9 @@ rtl8723bs: sdio_wifi@1 {
 
 &r_pio {
        led_pin_d978: led_pin_d978@0 {
-               allwinner,pins = "PL5";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL5";
+               function = "gpio_out";
+               drive-strength = <20>;
        };
 };
 
index 9ea637e82b2d8c780ec2a848ab3d99f3fbff7964..231d115d19971929355a1594de1895bda2c54b3d 100644 (file)
@@ -92,24 +92,18 @@ &ohci0 {
 
 &pio {
        led_pin_olinuxino: led_pins@0 {
-               allwinner,pins = "PB7";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB7";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_olinuxino: mmc0_cd_pin@0 {
-               allwinner,pins = "PB4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB4";
+               function = "gpio_in";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PB3";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB3";
+               function = "gpio_in";
        };
 };
 
index 71bb9418c5f9734c502db2408ac3d8d95fad8381..370ee82882debfae8bc3c7fc62fc0c198c4b4fb0 100644 (file)
@@ -115,9 +115,9 @@ &mmc2 {
 
 &mmc2_8bit_pins {
        /* Increase drive strength for DDR modes */
-       allwinner,drive = <SUN4I_PINCTRL_40_MA>;
+       drive-strength = <40>;
        /* eMMC is missing pull-ups */
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &ohci0 {
@@ -126,10 +126,9 @@ &ohci0 {
 
 &pio {
        mmc0_cd_pin_sina33: mmc0_cd_pin@0 {
-               allwinner,pins = "PB4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PB4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index fd1e1cddd4a8fb95cfd87b44edd41d5b62c24448..63d5181ffff825669330802c18c31cc6c9f3786e 100644 (file)
@@ -238,10 +238,8 @@ &pio {
                     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
 
        uart0_pins_b: uart0@1 {
-               allwinner,pins = "PB0", "PB1";
-               allwinner,function = "uart0";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB0", "PB1";
+               function = "uart0";
        };
 
 };
index d3473f81b12f7182c953fc02abd29b26f800cc5b..efbafd2a73292b48c69fcad2f29b07bc46362286 100644 (file)
@@ -167,25 +167,20 @@ pio: pinctrl@01c20800 {
                        #gpio-cells = <3>;
 
                        mmc0_pins_a: mmc0@0 {
-                               allwinner,pins = "PF0", "PF1", "PF2",
-                                                "PF3", "PF4", "PF5";
-                               allwinner,function = "mmc0";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PF0", "PF1", "PF2",
+                                      "PF3", "PF4", "PF5";
+                               function = "mmc0";
+                               drive-strength = <30>;
                        };
 
                        uart0_pins_a: uart0@0 {
-                               allwinner,pins = "PF2", "PF4";
-                               allwinner,function = "uart0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PF2", "PF4";
+                               function = "uart0";
                        };
 
                        uart0_pins_b: uart0@1 {
-                               allwinner,pins = "PB9", "PB10";
-                               allwinner,function = "uart0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PB9", "PB10";
+                               function = "uart0";
                        };
                };
 
@@ -217,7 +212,7 @@ uart0: serial@01c28000 {
                gic: interrupt-controller@01c81000 {
                        compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
                        reg = <0x01c81000 0x1000>,
-                             <0x01c82000 0x1000>,
+                             <0x01c82000 0x2000>,
                              <0x01c84000 0x2000>,
                              <0x01c86000 0x2000>;
                        interrupt-controller;
index 06fddaae8eddf64d09953bec26244e1a736cb780..c0c49dd4d3b268d88f6347a9ff0104d22bfd6093 100644 (file)
@@ -156,24 +156,18 @@ &ohci2 {
 
 &r_pio {
        pwr_led_bpi_m2p: led_pins@0 {
-               allwinner,pins = "PL10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL10";
+               function = "gpio_out";
        };
 
        sw_r_bpi_m2p: key_pins@0 {
-               allwinner,pins = "PL3";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL3";
+               function = "gpio_in";
        };
 
        wifi_en_bpi_m2p: wifi_en_pin {
-               allwinner,pins = "PL7";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL7";
+               function = "gpio_out";
        };
 };
 
index 8038aa29a5a7d45b94612f6fa382980eb27d8c74..2216e68d1838b2615717f866314d717de161761f 100644 (file)
@@ -110,26 +110,20 @@ &ohci3 {
 
 &pio {
        leds_npi: led_pins@0 {
-               allwinner,pins = "PA10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PA10";
+               function = "gpio_out";
        };
 };
 
 &r_pio {
        leds_r_npi: led_pins@0 {
-               allwinner,pins = "PL10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL10";
+               function = "gpio_out";
        };
 
        sw_r_npi: key_pins@0 {
-               allwinner,pins = "PL3";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL3";
+               function = "gpio_in";
        };
 };
 
index e5bcaba3e87fe5fe87c0b336b3b64cf915a30091..047e9e1c609326b5a7338c1d50afe5ef35017a54 100644 (file)
@@ -145,33 +145,25 @@ rtl8189: sdio_wifi@1 {
 
 &pio {
        leds_opc: led_pins@0 {
-               allwinner,pins = "PA15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PA15";
+               function = "gpio_out";
        };
 };
 
 &r_pio {
        leds_r_opc: led_pins@0 {
-               allwinner,pins = "PL10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL10";
+               function = "gpio_out";
        };
 
        sw_r_opc: key_pins@0 {
-               allwinner,pins = "PL3", "PL4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL3", "PL4";
+               function = "gpio_in";
        };
 
        wifi_pwrseq_pin_orangepi: wifi_pwrseq_pin@0 {
-               allwinner,pins = "PL7";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL7";
+               function = "gpio_out";
        };
 };
 
@@ -205,7 +197,7 @@ &uart3 {
 };
 
 &usb1_vbus_pin_a {
-       allwinner,pins = "PG13";
+       pins = "PG13";
 };
 
 &usbphy {
index 1550fee1ec68044d7f6391f163490a3ed7378b75..22b99b407019b3bb09f8dc1fd623849728fa47f1 100644 (file)
@@ -143,26 +143,20 @@ &ohci2 {
 
 &pio {
        leds_opc: led_pins@0 {
-               allwinner,pins = "PA15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PA15";
+               function = "gpio_out";
        };
 };
 
 &r_pio {
        leds_r_opc: led_pins@0 {
-               allwinner,pins = "PL10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL10";
+               function = "gpio_out";
        };
 
        sw_r_opc: key_pins@0 {
-               allwinner,pins = "PL3";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL3";
+               function = "gpio_in";
        };
 };
 
index 5c9b5bfa5c216a955d76ecbc1405f43c4a9acd53..34da853ee0372b6b284b72c371eb25c4a2ecb28e 100644 (file)
@@ -110,26 +110,20 @@ &ohci1 {
 
 &pio {
        leds_opc: led_pins@0 {
-               allwinner,pins = "PA15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PA15";
+               function = "gpio_out";
        };
 };
 
 &r_pio {
        leds_r_opc: led_pins@0 {
-               allwinner,pins = "PL10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL10";
+               function = "gpio_out";
        };
 
        sw_r_opc: key_pins@0 {
-               allwinner,pins = "PL3";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL3";
+               function = "gpio_in";
        };
 };
 
index 851fd2c2cc8cc3d671163af5a41bd37590159a8f..8b93f5c781a70b565ed0012d2c29b35f04987dcd 100644 (file)
@@ -82,7 +82,7 @@ &mmc2 {
 
 &mmc2_8bit_pins {
        /* Increase drive strength for DDR modes */
-       allwinner,drive = <SUN4I_PINCTRL_40_MA>;
+       drive-strength = <40>;
        /* eMMC is missing pull-ups */
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
index 3ec971285aa3f0c3eb595227c5e11f7fddceaf23..98b85be61e17d68b43e24c66bf851aaa2999f254 100644 (file)
@@ -132,26 +132,20 @@ &ohci3 {
 
 &pio {
        leds_opc: led_pins@0 {
-               allwinner,pins = "PA15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PA15";
+               function = "gpio_out";
        };
 };
 
 &r_pio {
        leds_r_opc: led_pins@0 {
-               allwinner,pins = "PL10";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL10";
+               function = "gpio_out";
        };
 
        sw_r_opc: key_pins@0 {
-               allwinner,pins = "PL3";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL3";
+               function = "gpio_in";
        };
 };
 
index bb585918cf544b53f648a673df2866ef7474b575..8c40ab7bfa72145f74213980818705fde45a1e4b 100644 (file)
@@ -76,17 +76,15 @@ &mmc2 {
 
 &mmc2_8bit_pins {
        /* Increase drive strength for DDR modes */
-       allwinner,drive = <SUN4I_PINCTRL_40_MA>;
+       drive-strength = <40>;
        /* eMMC is missing pull-ups */
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &pio {
        usb3_vbus_pin_a: usb3_vbus_pin@0 {
-               allwinner,pins = "PG11";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PG11";
+               function = "gpio_out";
        };
 };
 
index 6c14a6f72820828e39d4c656f4567dc7362346fd..4e97378e1b281818b85d308b69f20dfc44e4cab9 100644 (file)
@@ -329,106 +329,82 @@ pio: pinctrl@01c20800 {
                        #interrupt-cells = <3>;
 
                        i2c0_pins: i2c0 {
-                               allwinner,pins = "PA11", "PA12";
-                               allwinner,function = "i2c0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PA11", "PA12";
+                               function = "i2c0";
                        };
 
                        i2c1_pins: i2c1 {
-                               allwinner,pins = "PA18", "PA19";
-                               allwinner,function = "i2c1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PA18", "PA19";
+                               function = "i2c1";
                        };
 
                        i2c2_pins: i2c2 {
-                               allwinner,pins = "PE12", "PE13";
-                               allwinner,function = "i2c2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PE12", "PE13";
+                               function = "i2c2";
                        };
 
                        mmc0_pins_a: mmc0@0 {
-                               allwinner,pins = "PF0", "PF1", "PF2", "PF3",
-                                                "PF4", "PF5";
-                               allwinner,function = "mmc0";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PF0", "PF1", "PF2", "PF3",
+                                      "PF4", "PF5";
+                               function = "mmc0";
+                               drive-strength = <30>;
                        };
 
                        mmc0_cd_pin: mmc0_cd_pin@0 {
-                               allwinner,pins = "PF6";
-                               allwinner,function = "gpio_in";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               pins = "PF6";
+                               function = "gpio_in";
+                               bias-pull-up;
                        };
 
                        mmc1_pins_a: mmc1@0 {
-                               allwinner,pins = "PG0", "PG1", "PG2", "PG3",
-                                                "PG4", "PG5";
-                               allwinner,function = "mmc1";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG0", "PG1", "PG2", "PG3",
+                                      "PG4", "PG5";
+                               function = "mmc1";
+                               drive-strength = <30>;
                        };
 
                        mmc2_8bit_pins: mmc2_8bit {
-                               allwinner,pins = "PC5", "PC6", "PC8",
-                                                "PC9", "PC10", "PC11",
-                                                "PC12", "PC13", "PC14",
-                                                "PC15", "PC16";
-                               allwinner,function = "mmc2";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PC5", "PC6", "PC8",
+                                      "PC9", "PC10", "PC11",
+                                      "PC12", "PC13", "PC14",
+                                      "PC15", "PC16";
+                               function = "mmc2";
+                               drive-strength = <30>;
                        };
 
                        spi0_pins: spi0 {
-                               allwinner,pins = "PC0", "PC1", "PC2", "PC3";
-                               allwinner,function = "spi0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PC0", "PC1", "PC2", "PC3";
+                               function = "spi0";
                        };
 
                        spi1_pins: spi1 {
-                               allwinner,pins = "PA15", "PA16", "PA14", "PA13";
-                               allwinner,function = "spi1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PA15", "PA16", "PA14", "PA13";
+                               function = "spi1";
                        };
 
                        uart0_pins_a: uart0@0 {
-                               allwinner,pins = "PA4", "PA5";
-                               allwinner,function = "uart0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PA4", "PA5";
+                               function = "uart0";
                        };
 
                        uart1_pins: uart1 {
-                               allwinner,pins = "PG6", "PG7";
-                               allwinner,function = "uart1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG6", "PG7";
+                               function = "uart1";
                        };
 
                        uart1_rts_cts_pins: uart1_rts_cts {
-                               allwinner,pins = "PG8", "PG9";
-                               allwinner,function = "uart1";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG8", "PG9";
+                               function = "uart1";
                        };
 
                        uart2_pins: uart2 {
-                               allwinner,pins = "PA0", "PA1";
-                               allwinner,function = "uart2";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PA0", "PA1";
+                               function = "uart2";
                        };
 
                        uart3_pins: uart3 {
-                               allwinner,pins = "PA13", "PA14";
-                               allwinner,function = "uart3";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PA13", "PA14";
+                               function = "uart3";
                        };
                };
 
@@ -580,7 +556,7 @@ i2c2: i2c@01c2b400 {
                gic: interrupt-controller@01c81000 {
                        compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
                        reg = <0x01c81000 0x1000>,
-                             <0x01c82000 0x1000>,
+                             <0x01c82000 0x2000>,
                              <0x01c84000 0x2000>,
                              <0x01c86000 0x2000>;
                        interrupt-controller;
@@ -624,10 +600,8 @@ r_pio: pinctrl@01f02c00 {
                        #interrupt-cells = <3>;
 
                        ir_pins_a: ir@0 {
-                               allwinner,pins = "PL11";
-                               allwinner,function = "s_cir_rx";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PL11";
+                               function = "s_cir_rx";
                        };
                };
        };
index 29f837a47771d40da22e37183c6af17349b05a61..c676940a96dadd695aa20fdadfc15f9f0409ae23 100644 (file)
@@ -83,15 +83,14 @@ sdio_wifi: sdio_wifi@1 {
 };
 
 &mmc1_pins_a {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &r_pio {
        wifi_pwrseq_pin_q8: wifi_pwrseq_pin@0 {
-               allwinner,pins = "PL6", "PL7", "PL11";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PL6", "PL7", "PL11";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index 47553e522982b28e5f004d528f550af08f9232b3..6e42adbde60b727ac7c35e0aa7665e9d53a8dc3e 100644 (file)
@@ -149,8 +149,8 @@ &mmc2 {
 };
 
 &mmc2_8bit_pins {
-       allwinner,drive = <SUN4I_PINCTRL_40_MA>;
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       drive-strength = <40>;
+       bias-pull-up;
 };
 
 &ohci0 {
@@ -159,40 +159,32 @@ &ohci0 {
 
 &pio {
        mmc0_cd_pin_parrot: mmc0_cd_pin@0 {
-               allwinner,pins = "PD14";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PD14";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        led_pins_parrot: led_pins@0 {
-               allwinner,pins = "PE16", "PE17";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PE16", "PE17";
+               function = "gpio_out";
        };
 
        usb0_id_det: usb0_id_detect_pin@0 {
-               allwinner,pins = "PD10";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PD10";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb1_vbus_pin_parrot: usb1_vbus_pin@0 {
-               allwinner,pins = "PD12";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PD12";
+               function = "gpio_out";
        };
 };
 
 &r_pio {
        wifi_reset_pin_parrot: wifi_reset_pin@0 {
-               allwinner,pins = "PL6";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL6";
+               function = "gpio_out";
        };
 };
 
index 69bc0cd26ca7529f57ca4075f1d2ed2f68d9ef8e..1493516e01d96e85241ee8a64253d50430f0586e 100644 (file)
@@ -94,31 +94,25 @@ &mmc0 {
 
 &pio {
        bl_en_pin: bl_en_pin@0 {
-               allwinner,pins = "PH6";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH6";
+               function = "gpio_in";
        };
 
        mmc0_cd_pin: mmc0_cd_pin@0 {
-               allwinner,pins = "PB4";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PB4";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        ts_power_pin: ts_power_pin@0 {
-               allwinner,pins = "PH1";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH1";
+               function = "gpio_out";
        };
 
        usb0_id_detect_pin: usb0_id_detect_pin@0 {
-               allwinner,pins = "PH8";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH8";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
index 67b02fe7f11ce737849a0c2e2586efec73b2b4df..9112a200fd5e5d79d8f44104099b0fdfee6530d6 100644 (file)
@@ -108,7 +108,7 @@ &mmc1 {
 };
 
 &mmc1_pins {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &mmc2 {
@@ -123,7 +123,7 @@ &mmc2 {
 
 &mmc2_8bit_pins {
        /* Increase drive strength for DDR modes */
-       allwinner,drive = <SUN4I_PINCTRL_40_MA>;
+       drive-strength = <40>;
 };
 
 &osc32k {
@@ -133,17 +133,14 @@ &osc32k {
 
 &pio {
        led_pins_cubieboard4: led-pins@0 {
-               allwinner,pins = "PH6", "PH17";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH6", "PH17";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_cubieboard4: mmc0_cd_pin@0 {
-               allwinner,pins = "PH18";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH18";
+               function = "gpio_in";
+               bias-pull-up;
        };
 };
 
@@ -153,10 +150,8 @@ &r_ir {
 
 &r_pio {
        wifi_en_pin_cubieboard4: wifi_en_pin@0 {
-               allwinner,pins = "PL2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL2";
+               function = "gpio_out";
        };
 };
 
index 7e036b2be76218680bf9efe15714f19b214749ef..0fc3a87f5576146dd21cfae48d4e92f6a1fa3831 100644 (file)
@@ -150,7 +150,7 @@ &mmc1 {
 };
 
 &mmc1_pins {
-       allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+       bias-pull-up;
 };
 
 &mmc2 {
@@ -165,7 +165,7 @@ &mmc2 {
 
 &mmc2_8bit_pins {
        /* Increase drive strength for DDR modes */
-       allwinner,drive = <SUN4I_PINCTRL_40_MA>;
+       drive-strength = <40>;
 };
 
 &ohci0 {
@@ -183,31 +183,24 @@ &osc32k {
 
 &pio {
        led_pins_optimus: led-pins@0 {
-               allwinner,pins = "PH0", "PH1";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH0", "PH1";
+               function = "gpio_out";
        };
 
        mmc0_cd_pin_optimus: mmc0_cd_pin@0 {
-               allwinner,pins = "PH18";
-               allwinner,function = "gpio_in";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+               pins = "PH18";
+               function = "gpio_in";
+               bias-pull-up;
        };
 
        usb1_vbus_pin_optimus: usb1_vbus_pin@1 {
-               allwinner,pins = "PH4";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH4";
+               function = "gpio_out";
        };
 
        usb3_vbus_pin_optimus: usb3_vbus_pin@1 {
-               allwinner,pins = "PH5";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH5";
+               function = "gpio_out";
        };
 };
 
@@ -217,17 +210,13 @@ &r_ir {
 
 &r_pio {
        led_r_pins_optimus: led-pins@1 {
-               allwinner,pins = "PM15";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PM15";
+               function = "gpio_out";
        };
 
        wifi_en_pin_optimus: wifi_en_pin@0 {
-               allwinner,pins = "PL2";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PL2";
+               function = "gpio_out";
        };
 };
 
index 979ad1aacfb1fc9c830710a29eca32ce29ce3405..ac695fb57a43edd45b4b610df9cf4019c76e0665 100644 (file)
@@ -613,7 +613,7 @@ mmc_config_clk: clk@01c13000 {
                gic: interrupt-controller@01c41000 {
                        compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
                        reg = <0x01c41000 0x1000>,
-                             <0x01c42000 0x1000>,
+                             <0x01c42000 0x2000>,
                              <0x01c44000 0x2000>,
                              <0x01c46000 0x2000>;
                        interrupt-controller;
@@ -687,50 +687,41 @@ pio: pinctrl@06000800 {
                        #gpio-cells = <3>;
 
                        i2c3_pins_a: i2c3@0 {
-                               allwinner,pins = "PG10", "PG11";
-                               allwinner,function = "i2c3";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG10", "PG11";
+                               function = "i2c3";
                        };
 
                        mmc0_pins: mmc0 {
-                               allwinner,pins = "PF0", "PF1" ,"PF2", "PF3",
-                                                "PF4", "PF5";
-                               allwinner,function = "mmc0";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PF0", "PF1" ,"PF2", "PF3",
+                                      "PF4", "PF5";
+                               function = "mmc0";
+                               drive-strength = <30>;
                        };
 
                        mmc1_pins: mmc1 {
-                               allwinner,pins = "PG0", "PG1" ,"PG2", "PG3",
+                               pins = "PG0", "PG1" ,"PG2", "PG3",
                                                 "PG4", "PG5";
-                               allwinner,function = "mmc1";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               function = "mmc1";
+                               drive-strength = <30>;
                        };
 
                        mmc2_8bit_pins: mmc2_8bit {
-                               allwinner,pins = "PC6", "PC7", "PC8", "PC9",
-                                                "PC10", "PC11", "PC12",
-                                                "PC13", "PC14", "PC15",
-                                                "PC16";
-                               allwinner,function = "mmc2";
-                               allwinner,drive = <SUN4I_PINCTRL_30_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PC6", "PC7", "PC8", "PC9",
+                                      "PC10", "PC11", "PC12",
+                                      "PC13", "PC14", "PC15",
+                                      "PC16";
+                               function = "mmc2";
+                               drive-strength = <30>;
                        };
 
                        uart0_pins_a: uart0@0 {
-                               allwinner,pins = "PH12", "PH13";
-                               allwinner,function = "uart0";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PH12", "PH13";
+                               function = "uart0";
                        };
 
                        uart4_pins_a: uart4@0 {
-                               allwinner,pins = "PG12", "PG13", "PG14", "PG15";
-                               allwinner,function = "uart4";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PG12", "PG13", "PG14", "PG15";
+                               function = "uart4";
                        };
                };
 
@@ -912,17 +903,15 @@ r_pio: pinctrl@08002c00 {
                        #gpio-cells = <3>;
 
                        r_ir_pins: r_ir {
-                               allwinner,pins = "PL6";
-                               allwinner,function = "s_cir_rx";
-                               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+                               pins = "PL6";
+                               function = "s_cir_rx";
                        };
 
                        r_rsb_pins: r_rsb {
-                               allwinner,pins = "PN0", "PN1";
-                               allwinner,function = "s_rsb";
-                               allwinner,drive = <SUN4I_PINCTRL_20_MA>;
-                               allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
+                               pins = "PN0", "PN1";
+                               function = "s_rsb";
+                               drive-strength = <20>;
+                               bias-pull-up;
                        };
                };
 
index f1953b0c505939e78fe6d43837d8e4c12c48eb1b..17c09fed9e84d2b38490c7627b4ef938b135ddc6 100644 (file)
 
 &pio {
        ahci_pwr_pin_a: ahci_pwr_pin@0 {
-               allwinner,pins = "PB8";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB8";
+               function = "gpio_out";
        };
 
        usb0_vbus_pin_a: usb0_vbus_pin@0 {
-               allwinner,pins = "PB9";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PB9";
+               function = "gpio_out";
        };
 
        usb1_vbus_pin_a: usb1_vbus_pin@0 {
-               allwinner,pins = "PH6";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH6";
+               function = "gpio_out";
        };
 
        usb2_vbus_pin_a: usb2_vbus_pin@0 {
-               allwinner,pins = "PH3";
-               allwinner,function = "gpio_out";
-               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
-               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
+               pins = "PH3";
+               function = "gpio_out";
        };
 };
 
index dd7eb5f624d9a04ae3366c655daab00b06d14df6..0c8cad4d6ee62c3383857679020efcbf1484a0e1 100644 (file)
@@ -97,6 +97,52 @@ watchdog@1fd00 {
                        clocks = <&xtal>;
                };
 
+               mmc0: mmc@21000 {
+                       compatible = "arasan,sdhci-8.9a";
+                       reg = <0x21000 0x200>;
+                       clock-names = "clk_xin", "clk_ahb";
+                       clocks = <&clkgen SDIO_CLK>, <&clkgen SYS_CLK>;
+                       interrupts = <60 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               mmc1: mmc@21200 {
+                       compatible = "arasan,sdhci-8.9a";
+                       reg = <0x21200 0x200>;
+                       clock-names = "clk_xin", "clk_ahb";
+                       clocks = <&clkgen SDIO_CLK>, <&clkgen SYS_CLK>;
+                       interrupts = <8 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               usb0: usb@21400 {
+                       compatible = "chipidea,usb2";
+                       reg = <0x21400 0x200>;
+                       interrupts = <40 IRQ_TYPE_LEVEL_HIGH>;
+                       phys = <&usb0_phy>;
+                       phy-names = "usb-phy";
+               };
+
+               usb0_phy: phy@21700 {
+                       compatible = "sigma,smp8642-usb-phy";
+                       reg = <0x21700 0x100>;
+                       #phy-cells = <0>;
+                       clocks = <&clkgen USB_CLK>;
+               };
+
+               usb1: usb@25400 {
+                       compatible = "chipidea,usb2";
+                       reg = <0x25400 0x200>;
+                       interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
+                       phys = <&usb1_phy>;
+                       phy-names = "usb-phy";
+               };
+
+               usb1_phy: phy@25700 {
+                       compatible = "sigma,smp8642-usb-phy";
+                       reg = <0x25700 0x100>;
+                       #phy-cells = <0>;
+                       clocks = <&clkgen USB_CLK>;
+               };
+
                eth0: ethernet@26000 {
                        compatible = "sigma,smp8734-ethernet";
                        reg = <0x26000 0x800>;
index 4cab64cb581e9d09dc9771cd5226adc63eeca76a..86d8df98802fdf66a651adb04de5c4be49af3fcc 100644 (file)
@@ -8,6 +8,7 @@ / {
 
        aliases {
                serial = &uart;
+               eth0 = &eth0;
        };
 
        memory@80000000 {
@@ -34,3 +35,7 @@ eth0_phy: ethernet-phy@4 {
                reg = <4>;
        };
 };
+
+&mmc1 {
+       non-removable; /* eMMC */
+};
index 653044a44f0dd9f1a2b1048eacb82769275cb9bf..5b860ad5cbeef74a00e5a4d19a5dc6e0691da816 100644 (file)
@@ -187,14 +187,8 @@ sdhci@700b0000 {
        /* Apalis SD1 */
        sdhci@700b0400 {
                status = "okay";
-               /*
-                * Don't use SD1_CD# aka SDMMC3_CLK_LB_OUT for now as it
-                * features some magic properties even though the external
-                * loopback is disabled and the internal loopback used as per
-                * SDMMC_VENDOR_MISC_CNTRL_0 register's SDMMC_SPARE1 bits being
-                * set to 0xfffd according to the TRM!
-                * cd-gpios = <&gpio TEGRA_GPIO(EE, 4) GPIO_ACTIVE_LOW>;
-                */
+               /* SD1_CD# */
+               cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>;
                bus-width = <4>;
                vqmmc-supply = <&vddio_sdmmc3>;
        };
index 0819721dda590486964bb8cca9d7ef05e03440c2..f9e623bdd5c3776cecea9def5e799fec706ccbea 100644 (file)
@@ -44,7 +44,7 @@
 
 /*
  * Toradex Apalis TK1 Module Device Tree
- * Compatible for Revisions 2GB: V1.0A
+ * Compatible for Revisions 2GB: V1.0A, V1.0B, V1.1A
  */
 / {
        model = "Toradex Apalis TK1";
@@ -257,7 +257,7 @@ pex_l1_clkreq_n_pdd6 {
                        };
                        dp_hpd_pff0 {
                                nvidia,pins = "dp_hpd_pff0";
-                               nvidia,function = "rsvd2";
+                               nvidia,function = "dp";
                                nvidia,pull = <TEGRA_PIN_PULL_NONE>;
                                nvidia,tristate = <TEGRA_PIN_DISABLE>;
                                nvidia,enable-input = <TEGRA_PIN_ENABLE>;
@@ -416,18 +416,10 @@ clk2_req_pcc5 { /* D4 GPIO */
                                nvidia,tristate = <TEGRA_PIN_DISABLE>;
                                nvidia,enable-input = <TEGRA_PIN_ENABLE>;
                        };
-                       /*
-                        * Don't use MMC1_D6 aka SDMMC3_CLK_LB_IN for now as it
-                        * features some magic properties even though the
-                        * external loopback is disabled and the internal
-                        * loopback used as per SDMMC_VENDOR_MISC_CNTRL_0
-                        * register's SDMMC_SPARE1 bits being set to 0xfffd
-                        * according to the TRM!
-                        */
                        sdmmc3_clk_lb_in_pee5 { /* D6 GPIO */
                                nvidia,pins = "sdmmc3_clk_lb_in_pee5";
-                               nvidia,function = "sdmmc3";
-                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
+                               nvidia,function = "rsvd2";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
                                nvidia,tristate = <TEGRA_PIN_DISABLE>;
                                nvidia,enable-input = <TEGRA_PIN_ENABLE>;
                        };
@@ -522,20 +514,12 @@ sdmmc3_dat0_pb7 {
                                nvidia,tristate = <TEGRA_PIN_DISABLE>;
                                nvidia,enable-input = <TEGRA_PIN_ENABLE>;
                        };
-                       /*
-                        * Don't use SD1_CD# aka SDMMC3_CLK_LB_OUT for now as it
-                        * features some magic properties even though the
-                        * external loopback is disabled and the internal
-                        * loopback used as per SDMMC_VENDOR_MISC_CNTRL_0
-                        * register's SDMMC_SPARE1 bits being set to 0xfffd
-                        * according to the TRM!
-                        */
-                       sdmmc3_clk_lb_out_pee4 { /* CD# GPIO */
-                               nvidia,pins = "sdmmc3_clk_lb_out_pee4";
-                               nvidia,function = "rsvd2";
-                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                       sdmmc3_cd_n_pv2 { /* CD# GPIO */
+                               nvidia,pins = "sdmmc3_cd_n_pv2";
+                               nvidia,function = "rsvd3";
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
                                nvidia,tristate = <TEGRA_PIN_ENABLE>;
-                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
                        };
 
                        /* Apalis SPDIF */
@@ -1153,11 +1137,11 @@ kb_row2_pr2 {
                                nvidia,enable-input = <TEGRA_PIN_DISABLE>;
                        };
 
-                       /* GPIO_PI6 aka TEMP_ALERT_L */
+                       /* GPIO_PI6 aka TMP451 ALERT#/THERM2# */
                        pi6 {
                                nvidia,pins = "pi6";
                                nvidia,function = "rsvd1";
-                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,pull = <TEGRA_PIN_PULL_UP>;
                                nvidia,tristate = <TEGRA_PIN_ENABLE>;
                                nvidia,enable-input = <TEGRA_PIN_ENABLE>;
                        };
@@ -1514,13 +1498,6 @@ pv1 { /* NC */
                                nvidia,tristate = <TEGRA_PIN_ENABLE>;
                                nvidia,enable-input = <TEGRA_PIN_DISABLE>;
                        };
-                       sdmmc3_cd_n_pv2 { /* NC */
-                               nvidia,pins = "sdmmc3_cd_n_pv2";
-                               nvidia,function = "rsvd3";
-                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
-                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
-                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
-                       };
                        gpio_x1_aud_px1 { /* NC */
                                nvidia,pins = "gpio_x1_aud_px1";
                                nvidia,function = "rsvd2";
@@ -1570,6 +1547,22 @@ dap_mclk1_req_pee2 { /* NC */
                                nvidia,tristate = <TEGRA_PIN_ENABLE>;
                                nvidia,enable-input = <TEGRA_PIN_DISABLE>;
                        };
+                       /*
+                        * Leave SDMMC3_CLK_LB_OUT muxed as SDMMC3 with output
+                        * driver enabled aka not tristated and input driver
+                        * enabled as well as it features some magic properties
+                        * even though the external loopback is disabled and the
+                        * internal loopback used as per
+                        * SDMMC_VENDOR_MISC_CNTRL_0 register's SDMMC_SPARE1
+                        * bits being set to 0xfffd according to the TRM!
+                        */
+                       sdmmc3_clk_lb_out_pee4 { /* NC */
+                               nvidia,pins = "sdmmc3_clk_lb_out_pee4";
+                               nvidia,function = "sdmmc3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                       };
                };
        };
 
index 67d7cfb32541d54da5930bbb46cdb9a0d3567dd4..12eb7809d9ab93f0a7778f329db5fceca8bf06d2 100644 (file)
@@ -6,7 +6,11 @@
 
 / {
        model = "Acer Chromebook 13 CB5-311";
-       compatible = "google,nyan-big", "nvidia,tegra124";
+       compatible = "google,nyan-big-rev7", "google,nyan-big-rev6",
+                    "google,nyan-big-rev5", "google,nyan-big-rev4",
+                    "google,nyan-big-rev3", "google,nyan-big-rev2",
+                    "google,nyan-big-rev1", "google,nyan-big-rev0",
+                    "google,nyan-big", "google,nyan", "nvidia,tegra124";
 
        panel: panel {
                compatible = "auo,b133xtn01";
@@ -1098,19 +1102,19 @@ pbb0 {
                        };
                        cam_i2c_scl_pbb1 {
                                nvidia,pins = "cam_i2c_scl_pbb1";
-                               nvidia,function = "rsvd3";
-                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
-                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
-                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
-                               nvidia,open-drain = <TEGRA_PIN_DISABLE>;
+                               nvidia,function = "i2c3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                               nvidia,open-drain = <TEGRA_PIN_ENABLE>;
                        };
                        cam_i2c_sda_pbb2 {
                                nvidia,pins = "cam_i2c_sda_pbb2";
-                               nvidia,function = "rsvd3";
-                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
-                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
-                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
-                               nvidia,open-drain = <TEGRA_PIN_DISABLE>;
+                               nvidia,function = "i2c3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                               nvidia,open-drain = <TEGRA_PIN_ENABLE>;
                        };
                        pbb3 {
                                nvidia,pins = "pbb3";
index c9582361c26e499bd83f84e861d059f94552a552..1078a73d5092560a132e7781e57fa92d8dabe27c 100644 (file)
@@ -6,7 +6,13 @@
 
 / {
        model = "HP Chromebook 14";
-       compatible = "google,nyan-blaze", "google,nyan", "nvidia,tegra124";
+       compatible = "google,nyan-blaze-rev10", "google,nyan-blaze-rev9",
+                    "google,nyan-blaze-rev8", "google,nyan-blaze-rev7",
+                    "google,nyan-blaze-rev6", "google,nyan-blaze-rev5",
+                    "google,nyan-blaze-rev4", "google,nyan-blaze-rev3",
+                    "google,nyan-blaze-rev2", "google,nyan-blaze-rev1",
+                    "google,nyan-blaze-rev0", "google,nyan-blaze",
+                    "google,nyan", "nvidia,tegra124";
 
        panel: panel {
                compatible = "samsung,ltn140at29-301";
@@ -1094,19 +1100,19 @@ pbb0 {
                        };
                        cam_i2c_scl_pbb1 {
                                nvidia,pins = "cam_i2c_scl_pbb1";
-                               nvidia,function = "rsvd3";
-                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
-                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
-                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
-                               nvidia,open-drain = <TEGRA_PIN_DISABLE>;
+                               nvidia,function = "i2c3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                               nvidia,open-drain = <TEGRA_PIN_ENABLE>;
                        };
                        cam_i2c_sda_pbb2 {
                                nvidia,pins = "cam_i2c_sda_pbb2";
-                               nvidia,function = "rsvd3";
-                               nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
-                               nvidia,tristate = <TEGRA_PIN_ENABLE>;
-                               nvidia,enable-input = <TEGRA_PIN_DISABLE>;
-                               nvidia,open-drain = <TEGRA_PIN_DISABLE>;
+                               nvidia,function = "i2c3";
+                               nvidia,pull = <TEGRA_PIN_PULL_NONE>;
+                               nvidia,tristate = <TEGRA_PIN_DISABLE>;
+                               nvidia,enable-input = <TEGRA_PIN_ENABLE>;
+                               nvidia,open-drain = <TEGRA_PIN_ENABLE>;
                        };
                        pbb3 {
                                nvidia,pins = "pbb3";
index eabfa655a3cda894fa5758014c7beea13b4c3ae1..5cf987b5401eb6f45601ea37a3c3c591fd67a486 100644 (file)
@@ -65,7 +65,7 @@ acodec: audio-codec@10 {
                        compatible = "maxim,max98090";
                        reg = <0x10>;
                        interrupt-parent = <&gpio>;
-                       interrupts = <TEGRA_GPIO(H, 4) GPIO_ACTIVE_HIGH>;
+                       interrupts = <TEGRA_GPIO(H, 4) IRQ_TYPE_EDGE_FALLING>;
                };
 
                temperature-sensor@4c {
@@ -331,10 +331,11 @@ charger: bq24735@9 {
                                        reg = <0x9>;
                                        interrupt-parent = <&gpio>;
                                        interrupts = <TEGRA_GPIO(J, 0)
-                                                       GPIO_ACTIVE_HIGH>;
+                                                       IRQ_TYPE_EDGE_BOTH>;
                                        ti,ac-detect-gpios = <&gpio
                                                        TEGRA_GPIO(J, 0)
                                                        GPIO_ACTIVE_HIGH>;
+                                       ti,external-control;
                                };
 
                                battery: sbs-battery@b {
index 4e361a8c167e35ce24673317690a1370697b164d..b4bfa5586c233a48b3aeba14b53c3187e245b753 100644 (file)
@@ -569,6 +569,7 @@ vdd_pnl_reg: regulator@1 {
                        regulator-name = "+3VS,vdd_pnl";
                        regulator-min-microvolt = <3300000>;
                        regulator-max-microvolt = <3300000>;
+                       regulator-boot-on;
                        gpio = <&gpio TEGRA_GPIO(A, 4) GPIO_ACTIVE_HIGH>;
                        enable-active-high;
                };
index 381747f114a92300938ec1a060a50e7fcafcee88..87b07fbadbbedd209491c3972bdebe4e519a53e4 100644 (file)
@@ -366,6 +366,7 @@ usb-phy@c5008000 {
 
        sdhci@c8000000 {
                status = "okay";
+               broken-cd;
                bus-width = <4>;
        };
 
index 10a711041b4a189b59a38bacf057764505c06523..8ee79da9af7c33f6834b2b4542dea20b1ecc2e31 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * Device Tree Source for UniPhier SoCs default pinctrl settings
  *
- * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
+ * Copyright (C) 2015-2017 Socionext Inc.
+ *   Author: Masahiro Yamada <yamada.masahiro@socionext.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
  */
 
 &pinctrl {
+       pinctrl_emmc: emmc_grp {
+               groups = "emmc";
+               function = "emmc";
+       };
+
        pinctrl_i2c0: i2c0_grp {
                groups = "i2c0";
                function = "i2c0";
@@ -78,6 +84,16 @@ pinctrl_nand2cs: nand2cs_grp {
                function = "nand";
        };
 
+       pinctrl_sd: sd_grp {
+               groups = "sd";
+               function = "sd";
+       };
+
+       pinctrl_sd1: sd1_grp {
+               groups = "sd1";
+               function = "sd1";
+       };
+
        pinctrl_system_bus: system_bus_grp {
                groups = "system_bus", "system_bus_cs1";
                function = "system_bus";
index 102838fcc5880ca0f4fbb90a23098191004d9386..15f4fd3f469561caa7fba30fed8c6a10c18c6668 100644 (file)
@@ -81,7 +81,7 @@ gic: interrupt-controller@2c001000 {
                #address-cells = <0>;
                interrupt-controller;
                reg = <0 0x2c001000 0 0x1000>,
-                     <0 0x2c002000 0 0x1000>,
+                     <0 0x2c002000 0 0x2000>,
                      <0 0x2c004000 0 0x2000>,
                      <0 0x2c006000 0 0x2000>;
                interrupts = <1 9 0xf04>;
index 45d08cc37b0134c71b11bb580fb574386b46c47b..bd107c5a02267f33a02e31e0e5fd116672684d73 100644 (file)
@@ -131,7 +131,7 @@ gic: interrupt-controller@2c001000 {
                #address-cells = <0>;
                interrupt-controller;
                reg = <0 0x2c001000 0 0x1000>,
-                     <0 0x2c002000 0 0x1000>,
+                     <0 0x2c002000 0 0x2000>,
                      <0 0x2c004000 0 0x2000>,
                      <0 0x2c006000 0 0x2000>;
                interrupts = <1 9 0xf04>;
index 1e0b823f7e8f248467f6be9725faed4486f9ab70..091b738041a0bcc6fdee962b8202b891704fe621 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 21bfef957b68bf2f6643c79be43d18ba2b352ac3..b6a1eeeb2bb46eb54c755d8201519efd12ffd625 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index b3aeab58f718d282558050334430b8d2f335ff34..076998968fb56445c5add1b62417016248689924 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 1a8a0efa19a64cfae4b7ddf398e959dc8f00ec94..515c4d2f28b0d9a0d88577831a887226b43de164 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index d7fdb2a7d97b696458a0ccc892d727fcc2d0f236..3d9896171bfcea0f3d005cdc73e497a2d6a8d97a 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index dbca4f86fdbb93bd2a9fabe0c5b090535f4369cc..ef9b4d6209f6ed7d8d6f2178aca2c9144cd93b8d 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 9ec9e337f5a8ee68e45ef1856d89aa3ee399d7c0..395812c529330e2af95d8aaed060fc8db4e39b95 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index cdc1007325144195567fad08df9153ca21f2349c..53e3b8b250c6baa9ad81aaff3cfc6bb3cd67d10e 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 7ea617e47fe41123193bc10a9cb331d9687e015a..7940408838df6c10e086e1246b8ee944bd42fef9 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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 "vf610.dtsi"
+#include "vf610-zii-dev.dtsi"
 
 / {
        model = "ZII VF610 Development Board, Rev B";
        compatible = "zii,vf610dev-b", "zii,vf610dev", "fsl,vf610";
 
-       chosen {
-               stdout-path = "serial0:115200n8";
-       };
-
-       memory {
-               reg = <0x80000000 0x20000000>;
-       };
-
-       gpio-leds {
-               compatible = "gpio-leds";
-               pinctrl-0 = <&pinctrl_leds_debug>;
-               pinctrl-names = "default";
-
-               debug {
-                       label = "zii:green:debug1";
-                       gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>;
-                       linux,default-trigger = "heartbeat";
-               };
-       };
-
        mdio-mux {
                compatible = "mdio-mux-gpio";
                pinctrl-0 = <&pinctrl_mdio_mux>;
@@ -86,7 +66,7 @@ mdio_mux_1: mdio@1 {
                        #address-cells = <1>;
                        #size-cells = <0>;
 
-                       switch0: switch0@0 {
+                       switch0: switch@0 {
                                compatible = "marvell,mv88e6085";
                                pinctrl-0 = <&pinctrl_gpio_switch0>;
                                pinctrl-names = "default";
@@ -102,6 +82,7 @@ switch0: switch0@0 {
                                ports {
                                        #address-cells = <1>;
                                        #size-cells = <0>;
+
                                        port@0 {
                                                reg = <0>;
                                                label = "lan0";
@@ -136,6 +117,7 @@ port@6 {
                                                reg = <6>;
                                                label = "cpu";
                                                ethernet = <&fec1>;
+
                                                fixed-link {
                                                        speed = <100>;
                                                        full-duplex;
@@ -153,7 +135,8 @@ switch0phy0: switch0phy0@0 {
                                        switch0phy1: switch1phy0@1 {
                                                reg = <1>;
                                                interrupt-parent = <&switch0>;
-                                               interrupts = <1 IRQ_TYPE_LEVEL_HIGH>;                                   };
+                                               interrupts = <1 IRQ_TYPE_LEVEL_HIGH>;
+                                       };
                                        switch0phy2: switch1phy0@2 {
                                                reg = <2>;
                                                interrupt-parent = <&switch0>;
@@ -168,7 +151,7 @@ mdio_mux_2: mdio@2 {
                        #address-cells = <1>;
                        #size-cells = <0>;
 
-                       switch1: switch1@0 {
+                       switch1: switch@0 {
                                compatible = "marvell,mv88e6085";
                                pinctrl-0 = <&pinctrl_gpio_switch1>;
                                pinctrl-names = "default";
@@ -184,6 +167,7 @@ switch1: switch1@0 {
                                ports {
                                        #address-cells = <1>;
                                        #size-cells = <0>;
+
                                        port@0 {
                                                reg = <0>;
                                                label = "lan3";
@@ -207,6 +191,7 @@ switch1port5: port@5 {
                                                label = "dsa";
                                                link = <&switch2port9>;
                                                phy-mode = "rgmii-txid";
+
                                                fixed-link {
                                                        speed = <1000>;
                                                        full-duplex;
@@ -227,16 +212,19 @@ fixed-link {
                                mdio {
                                        #address-cells = <1>;
                                        #size-cells = <0>;
+
                                        switch1phy0: switch1phy0@0 {
                                                reg = <0>;
                                                interrupt-parent = <&switch1>;
                                                interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;
                                        };
+
                                        switch1phy1: switch1phy0@1 {
                                                reg = <1>;
                                                interrupt-parent = <&switch1>;
                                                interrupts = <1 IRQ_TYPE_LEVEL_HIGH>;
                                        };
+
                                        switch1phy2: switch1phy0@2 {
                                                reg = <2>;
                                                interrupt-parent = <&switch1>;
@@ -261,6 +249,7 @@ switch2: switch2@0 {
                                ports {
                                        #address-cells = <1>;
                                        #size-cells = <0>;
+
                                        port@0 {
                                                reg = <0>;
                                                label = "lan6";
@@ -279,6 +268,7 @@ port@2 {
                                        port@3 {
                                                reg = <3>;
                                                label = "optical3";
+
                                                fixed-link {
                                                        speed = <1000>;
                                                        full-duplex;
@@ -290,6 +280,7 @@ fixed-link {
                                        port@4 {
                                                reg = <4>;
                                                label = "optical4";
+
                                                fixed-link {
                                                        speed = <1000>;
                                                        full-duplex;
@@ -304,6 +295,7 @@ switch2port9: port@9 {
                                                phy-mode = "rgmii-txid";
                                                link = <&switch1port5
                                                        &switch0port5>;
+
                                                fixed-link {
                                                        speed = <1000>;
                                                        full-duplex;
@@ -320,25 +312,6 @@ mdio_mux_8: mdio@8 {
                };
        };
 
-       reg_vcc_3v3_mcu: regulator-vcc-3v3-mcu {
-               compatible = "regulator-fixed";
-               regulator-name = "vcc_3v3_mcu";
-               regulator-min-microvolt = <3300000>;
-               regulator-max-microvolt = <3300000>;
-       };
-
-       usb0_vbus: regulator-usb0-vbus {
-               compatible = "regulator-fixed";
-               pinctrl-0 = <&pinctrl_usb_vbus>;
-               regulator-name = "usb_vbus";
-               regulator-min-microvolt = <5000000>;
-               regulator-max-microvolt = <5000000>;
-               enable-active-high;
-               regulator-always-on;
-               regulator-boot-on;
-               gpio = <&gpio0 6 0>;
-       };
-
        spi0 {
                compatible = "spi-gpio";
                pinctrl-0 = <&pinctrl_gpio_spi0>;
@@ -375,49 +348,6 @@ at93c46d@1 {
        };
 };
 
-&adc0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_adc0_ad5>;
-       vref-supply = <&reg_vcc_3v3_mcu>;
-       status = "okay";
-};
-
-&edma0 {
-       status = "okay";
-};
-
-&esdhc1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_esdhc1>;
-       bus-width = <4>;
-       status = "okay";
-};
-
-&fec0 {
-       phy-mode = "rmii";
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_fec0>;
-       status = "okay";
-};
-
-&fec1 {
-       phy-mode = "rmii";
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_fec1>;
-       status = "okay";
-
-       fixed-link {
-                  speed = <100>;
-                  full-duplex;
-       };
-
-       mdio1: mdio {
-               #address-cells = <1>;
-               #size-cells = <0>;
-               status = "okay";
-       };
-};
-
 &i2c0 {
        clock-frequency = <100000>;
        pinctrl-names = "default";
@@ -442,33 +372,6 @@ gpio6: pca9554@22 {
                interrupt-parent = <&gpio2>;
                interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
        };
-
-       lm75@48 {
-               compatible = "national,lm75";
-               reg = <0x48>;
-       };
-
-       at24c04@50 {
-               compatible = "atmel,24c04";
-               reg = <0x50>;
-       };
-
-       at24c04@52 {
-               compatible = "atmel,24c04";
-               reg = <0x52>;
-       };
-
-       ds1682@6b {
-               compatible = "dallas,ds1682";
-               reg = <0x6b>;
-       };
-};
-
-&i2c1 {
-       clock-frequency = <100000>;
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_i2c1>;
-       status = "okay";
 };
 
 &i2c2 {
@@ -538,120 +441,8 @@ i2c@4 {
        };
 };
 
-&uart0 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_uart0>;
-       status = "okay";
-};
-
-&uart1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_uart1>;
-       status = "okay";
-};
-
-&uart2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_uart2>;
-       status = "okay";
-};
-
-&usbdev0 {
-       disable-over-current;
-       vbus-supply = <&usb0_vbus>;
-       dr_mode = "host";
-       status = "okay";
-};
-
-&usbh1 {
-       disable-over-current;
-       status = "okay";
-};
-
-&usbmisc0 {
-       status = "okay";
-};
-
-&usbmisc1 {
-       status = "okay";
-};
-
-&usbphy0 {
-       status = "okay";
-};
-
-&usbphy1 {
-       status = "okay";
-};
 
 &iomuxc {
-       pinctrl_adc0_ad5: adc0ad5grp {
-               fsl,pins = <
-                       VF610_PAD_PTC30__ADC0_SE5       0x00a1
-               >;
-       };
-
-       pinctrl_dspi0: dspi0grp {
-               fsl,pins = <
-                       VF610_PAD_PTB18__DSPI0_CS1      0x1182
-                       VF610_PAD_PTB19__DSPI0_CS0      0x1182
-                       VF610_PAD_PTB20__DSPI0_SIN      0x1181
-                       VF610_PAD_PTB21__DSPI0_SOUT     0x1182
-                       VF610_PAD_PTB22__DSPI0_SCK      0x1182
-               >;
-       };
-
-       pinctrl_dspi2: dspi2grp {
-               fsl,pins = <
-                       VF610_PAD_PTD31__DSPI2_CS1      0x1182
-                       VF610_PAD_PTD30__DSPI2_CS0      0x1182
-                       VF610_PAD_PTD29__DSPI2_SIN      0x1181
-                       VF610_PAD_PTD28__DSPI2_SOUT     0x1182
-                       VF610_PAD_PTD27__DSPI2_SCK      0x1182
-               >;
-       };
-
-       pinctrl_esdhc1: esdhc1grp {
-               fsl,pins = <
-                       VF610_PAD_PTA24__ESDHC1_CLK     0x31ef
-                       VF610_PAD_PTA25__ESDHC1_CMD     0x31ef
-                       VF610_PAD_PTA26__ESDHC1_DAT0    0x31ef
-                       VF610_PAD_PTA27__ESDHC1_DAT1    0x31ef
-                       VF610_PAD_PTA28__ESDHC1_DATA2   0x31ef
-                       VF610_PAD_PTA29__ESDHC1_DAT3    0x31ef
-                       VF610_PAD_PTA7__GPIO_134        0x219d
-               >;
-       };
-
-       pinctrl_fec0: fec0grp {
-               fsl,pins = <
-                       VF610_PAD_PTC0__ENET_RMII0_MDC  0x30d2
-                       VF610_PAD_PTC1__ENET_RMII0_MDIO 0x30d3
-                       VF610_PAD_PTC2__ENET_RMII0_CRS  0x30d1
-                       VF610_PAD_PTC3__ENET_RMII0_RXD1 0x30d1
-                       VF610_PAD_PTC4__ENET_RMII0_RXD0 0x30d1
-                       VF610_PAD_PTC5__ENET_RMII0_RXER 0x30d1
-                       VF610_PAD_PTC6__ENET_RMII0_TXD1 0x30d2
-                       VF610_PAD_PTC7__ENET_RMII0_TXD0 0x30d2
-                       VF610_PAD_PTC8__ENET_RMII0_TXEN 0x30d2
-               >;
-       };
-
-       pinctrl_fec1: fec1grp {
-               fsl,pins = <
-                       VF610_PAD_PTA6__RMII_CLKIN              0x30d1
-                       VF610_PAD_PTC9__ENET_RMII1_MDC          0x30d2
-                       VF610_PAD_PTC10__ENET_RMII1_MDIO        0x30d3
-                       VF610_PAD_PTC11__ENET_RMII1_CRS         0x30d1
-                       VF610_PAD_PTC12__ENET_RMII1_RXD1        0x30d1
-                       VF610_PAD_PTC13__ENET_RMII1_RXD0        0x30d1
-                       VF610_PAD_PTC14__ENET_RMII1_RXER        0x30d1
-                       VF610_PAD_PTC15__ENET_RMII1_TXD1        0x30d2
-                       VF610_PAD_PTC16__ENET_RMII1_TXD0        0x30d2
-                       VF610_PAD_PTC17__ENET_RMII1_TXEN        0x30d2
-               >;
-       };
-
        pinctrl_gpio_e6185_eeprom_sel: pinctrl-gpio-e6185-eeprom-spi0 {
                fsl,pins = <
                        VF610_PAD_PTE27__GPIO_132       0x33e2
@@ -680,39 +471,6 @@ VF610_PAD_PTB4__GPIO_26            0x219d
                >;
        };
 
-       pinctrl_i2c_mux_reset: pinctrl-i2c-mux-reset {
-               fsl,pins = <
-                        VF610_PAD_PTE14__GPIO_119      0x31c2
-                        >;
-       };
-
-       pinctrl_i2c0: i2c0grp {
-               fsl,pins = <
-                       VF610_PAD_PTB14__I2C0_SCL       0x37ff
-                       VF610_PAD_PTB15__I2C0_SDA       0x37ff
-               >;
-       };
-
-       pinctrl_i2c1: i2c1grp {
-               fsl,pins = <
-                       VF610_PAD_PTB16__I2C1_SCL       0x37ff
-                       VF610_PAD_PTB17__I2C1_SDA       0x37ff
-               >;
-       };
-
-       pinctrl_i2c2: i2c2grp {
-               fsl,pins = <
-                       VF610_PAD_PTA22__I2C2_SCL       0x37ff
-                       VF610_PAD_PTA23__I2C2_SDA       0x37ff
-               >;
-       };
-
-       pinctrl_leds_debug: pinctrl-leds-debug {
-               fsl,pins = <
-                        VF610_PAD_PTD20__GPIO_74       0x31c2
-                        >;
-       };
-
        pinctrl_mdio_mux: pinctrl-mdio-mux {
                fsl,pins = <
                        VF610_PAD_PTA18__GPIO_8         0x31c2
@@ -727,57 +485,4 @@ pinctrl_pca9554_22: pinctrl-pca95540-22 {
                        VF610_PAD_PTB28__GPIO_98        0x219d
                >;
        };
-
-       pinctrl_pwm0: pwm0grp {
-               fsl,pins = <
-                       VF610_PAD_PTB0__FTM0_CH0        0x1582
-                       VF610_PAD_PTB1__FTM0_CH1        0x1582
-                       VF610_PAD_PTB2__FTM0_CH2        0x1582
-                       VF610_PAD_PTB3__FTM0_CH3        0x1582
-               >;
-       };
-
-       pinctrl_qspi0: qspi0grp {
-               fsl,pins = <
-                       VF610_PAD_PTD7__QSPI0_B_QSCK    0x31c3
-                       VF610_PAD_PTD8__QSPI0_B_CS0     0x31ff
-                       VF610_PAD_PTD9__QSPI0_B_DATA3   0x31c3
-                       VF610_PAD_PTD10__QSPI0_B_DATA2  0x31c3
-                       VF610_PAD_PTD11__QSPI0_B_DATA1  0x31c3
-                       VF610_PAD_PTD12__QSPI0_B_DATA0  0x31c3
-               >;
-       };
-
-       pinctrl_uart0: uart0grp {
-               fsl,pins = <
-                       VF610_PAD_PTB10__UART0_TX       0x21a2
-                       VF610_PAD_PTB11__UART0_RX       0x21a1
-               >;
-       };
-
-       pinctrl_uart1: uart1grp {
-               fsl,pins = <
-                       VF610_PAD_PTB23__UART1_TX       0x21a2
-                       VF610_PAD_PTB24__UART1_RX       0x21a1
-               >;
-       };
-
-       pinctrl_uart2: uart2grp {
-               fsl,pins = <
-                       VF610_PAD_PTD0__UART2_TX        0x21a2
-                       VF610_PAD_PTD1__UART2_RX        0x21a1
-               >;
-       };
-
-       pinctrl_usb_vbus: pinctrl-usb-vbus {
-               fsl,pins = <
-                       VF610_PAD_PTA16__GPIO_6 0x31c2
-               >;
-       };
-
-       pinctrl_usb0_host: usb0-host-grp {
-               fsl,pins = <
-                       VF610_PAD_PTD6__GPIO_85         0x0062
-               >;
-       };
 };
diff --git a/arch/arm/boot/dts/vf610-zii-dev-rev-c.dts b/arch/arm/boot/dts/vf610-zii-dev-rev-c.dts
new file mode 100644 (file)
index 0000000..6a45bd2
--- /dev/null
@@ -0,0 +1,416 @@
+/*
+ * Copyright (C) 2015, 2016 Zodiac Inflight Innovations
+ *
+ * Based on an original 'vf610-twr.dts' which is Copyright 2015,
+ * Freescale Semiconductor, Inc.
+ *
+ * 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
+ *     version 2 as published by the Free Software Foundation.
+ *
+ *     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 , 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 "vf610-zii-dev.dtsi"
+
+/ {
+       model = "ZII VF610 Development Board, Rev C";
+       compatible = "zii,vf610dev-c", "zii,vf610dev", "fsl,vf610";
+
+       mdio-mux {
+               compatible = "mdio-mux-gpio";
+               pinctrl-0 = <&pinctrl_mdio_mux>;
+               pinctrl-names = "default";
+               gpios = <&gpio0 8  GPIO_ACTIVE_HIGH
+                        &gpio0 9  GPIO_ACTIVE_HIGH
+                        &gpio0 25 GPIO_ACTIVE_HIGH>;
+               mdio-parent-bus = <&mdio1>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               mdio_mux_1: mdio@1 {
+                       reg = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       switch0: switch@0 {
+                               compatible = "marvell,mv88e6190";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               reg = <0>;
+                               dsa,member = <0 0>;
+                               eeprom-length = <512>;
+
+                               ports {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       port@0 {
+                                               reg = <0>;
+                                               label = "cpu";
+                                               ethernet = <&fec1>;
+
+                                               fixed-link {
+                                                       speed = <100>;
+                                                       full-duplex;
+                                               };
+                                       };
+
+                                       port@1 {
+                                               reg = <1>;
+                                               label = "lan1";
+                                       };
+
+                                       port@2 {
+                                               reg = <2>;
+                                               label = "lan2";
+                                       };
+
+                                       port@3 {
+                                               reg = <3>;
+                                               label = "lan3";
+                                       };
+
+                                       port@4 {
+                                               reg = <4>;
+                                               label = "lan4";
+                                       };
+
+                                       switch0port10: port@10 {
+                                               reg = <10>;
+                                               label = "dsa";
+                                               phy-mode = "xgmii";
+                                               link = <&switch1port10>;
+                                       };
+                               };
+                       };
+               };
+
+               mdio_mux_2: mdio@2 {
+                       reg = <2>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       switch1: switch@0 {
+                               compatible = "marvell,mv88e6190";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               reg = <0>;
+                               dsa,member = <0 1>;
+                               eeprom-length = <512>;
+
+                               ports {
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+
+                                       port@1 {
+                                               reg = <1>;
+                                               label = "lan5";
+                                       };
+
+                                       port@2 {
+                                               reg = <2>;
+                                               label = "lan6";
+                                       };
+
+                                       port@3 {
+                                               reg = <3>;
+                                               label = "lan7";
+                                       };
+
+                                       port@4 {
+                                               reg = <4>;
+                                               label = "lan8";
+                                       };
+
+
+                                       switch1port10: port@10 {
+                                               reg = <10>;
+                                               label = "dsa";
+                                               phy-mode = "xgmii";
+                                               link = <&switch0port10>;
+                                       };
+                               };
+                       };
+               };
+
+               mdio_mux_4: mdio@4 {
+                       reg = <4>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+       };
+};
+
+&dspi0 {
+       bus-num = <0>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_dspi0>;
+       status = "okay";
+       spi-num-chipselects = <2>;
+
+       m25p128@0 {
+               compatible = "m25p128", "jedec,spi-nor";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               reg = <0>;
+               spi-max-frequency = <1000000>;
+       };
+
+       atzb-rf-233@1 {
+               compatible = "atmel,at86rf233";
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctr_atzb_rf_233>;
+
+               spi-max-frequency = <7500000>;
+               reg = <1>;
+               interrupts = <4 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-parent = <&gpio3>;
+               xtal-trim = /bits/ 8 <0x06>;
+
+               sleep-gpio = <&gpio0 24 GPIO_ACTIVE_HIGH>;
+               reset-gpio = <&gpio6 10 GPIO_ACTIVE_HIGH>;
+
+               fsl,spi-cs-sck-delay = <180>;
+               fsl,spi-sck-cs-delay = <250>;
+       };
+};
+
+&i2c0 {
+       /*
+        * U712
+        *
+        * Exposed signals:
+        *    P1 - WE2_CMD
+        *    P2 - WE2_CLK
+        */
+       gpio5: pca9557@18 {
+               compatible = "nxp,pca9557";
+               reg = <0x18>;
+               gpio-controller;
+               #gpio-cells = <2>;
+       };
+
+       /*
+        * U121
+        *
+        * Exposed signals:
+        *    I/O0  - ENET_SWR_EN
+        *    I/O1  - ESW1_RESETn
+        *    I/O2  - ARINC_RESET
+        *    I/O3  - DD1_IO_RESET
+        *    I/O4  - ESW2_RESETn
+        *    I/O5  - ESW3_RESETn
+        *    I/O6  - ESW4_RESETn
+        *    I/O8  - TP909
+        *    I/O9  - FEM_SEL
+        *    I/O10 - WIFI_RESETn
+        *    I/O11 - PHY_RSTn
+        *    I/O12 - OPT1_SD
+        *    I/O13 - OPT2_SD
+        *    I/O14 - OPT1_TX_DIS
+        *    I/O15 - OPT2_TX_DIS
+        */
+       gpio6: sx1503@20 {
+               compatible = "semtech,sx1503q";
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_sx1503_20>;
+               #gpio-cells = <2>;
+               #interrupt-cells = <2>;
+               reg = <0x20>;
+               interrupt-parent = <&gpio0>;
+               interrupts = <23 IRQ_TYPE_EDGE_FALLING>;
+               gpio-controller;
+               interrupt-controller;
+
+               enet_swr_en {
+                       gpio-hog;
+                       gpios = <0 GPIO_ACTIVE_HIGH>;
+                       output-high;
+                       line-name = "enet-swr-en";
+               };
+       };
+
+       /*
+        * U715
+        *
+        * Exposed signals:
+        *     IO0 - WE1_CLK
+        *     IO1 - WE1_CMD
+        */
+       gpio7: pca9554@22 {
+               compatible = "nxp,pca9554";
+               reg = <0x22>;
+               gpio-controller;
+               #gpio-cells = <2>;
+
+       };
+};
+
+&i2c1 {
+       at24mac602@00 {
+               compatible = "atmel,24c02";
+               reg = <0x50>;
+               read-only;
+       };
+};
+
+&i2c2 {
+       tca9548@70 {
+               compatible = "nxp,pca9548";
+               pinctrl-0 = <&pinctrl_i2c_mux_reset>;
+               pinctrl-names = "default";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0x70>;
+               reset-gpios = <&gpio3 23 GPIO_ACTIVE_LOW>;
+
+               i2c@0 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0>;
+               };
+
+               i2c@1 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <1>;
+
+                       sfp2: at24c04@50 {
+                               compatible = "atmel,24c02";
+                               reg = <0x50>;
+                       };
+               };
+
+               i2c@2 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <2>;
+
+                       sfp3: at24c04@50 {
+                               compatible = "atmel,24c02";
+                               reg = <0x50>;
+                       };
+               };
+
+               i2c@3 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <3>;
+               };
+       };
+};
+
+&uart3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart3>;
+       status = "okay";
+};
+
+&gpio0 {
+       eth0_intrp {
+               gpio-hog;
+               gpios = <23 GPIO_ACTIVE_HIGH>;
+               input;
+               line-name = "sx1503-irq";
+       };
+};
+
+&gpio3 {
+       eth0_intrp {
+               gpio-hog;
+               gpios = <2 GPIO_ACTIVE_HIGH>;
+               input;
+               line-name = "eth0-intrp";
+       };
+};
+
+&fec0 {
+       mdio {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               status = "okay";
+
+               ethernet-phy@0 {
+                       compatible = "ethernet-phy-ieee802.3-c22";
+
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_fec0_phy_int>;
+
+                       interrupt-parent = <&gpio3>;
+                       interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
+                       reg = <0>;
+               };
+       };
+};
+
+&iomuxc {
+       pinctr_atzb_rf_233: pinctrl-atzb-rf-233 {
+               fsl,pins = <
+                       VF610_PAD_PTB2__GPIO_24         0x31c2
+                       VF610_PAD_PTE27__GPIO_132       0x33e2
+               >;
+       };
+
+
+       pinctrl_sx1503_20: pinctrl-sx1503-20 {
+               fsl,pins = <
+                       VF610_PAD_PTB1__GPIO_23         0x219d
+               >;
+       };
+
+       pinctrl_uart3: uart3grp {
+               fsl,pins = <
+                       VF610_PAD_PTA20__UART3_TX       0x21a2
+                       VF610_PAD_PTA21__UART3_RX       0x21a1
+               >;
+       };
+
+       pinctrl_mdio_mux: pinctrl-mdio-mux {
+               fsl,pins = <
+                       VF610_PAD_PTA18__GPIO_8         0x31c2
+                       VF610_PAD_PTA19__GPIO_9         0x31c2
+                       VF610_PAD_PTB3__GPIO_25         0x31c2
+               >;
+       };
+
+       pinctrl_fec0_phy_int: pinctrl-fec0-phy-int {
+               fsl,pins = <
+                       VF610_PAD_PTB28__GPIO_98        0x219d
+               >;
+       };
+};
diff --git a/arch/arm/boot/dts/vf610-zii-dev.dtsi b/arch/arm/boot/dts/vf610-zii-dev.dtsi
new file mode 100644 (file)
index 0000000..ca9e1bc
--- /dev/null
@@ -0,0 +1,383 @@
+/*
+ * Copyright (C) 2015, 2016 Zodiac Inflight Innovations
+ *
+ * Based on an original 'vf610-twr.dts' which is Copyright 2015,
+ * Freescale Semiconductor, Inc.
+ *
+ * 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
+ *     version 2 as published by the Free Software Foundation.
+ *
+ *     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 , WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "vf610.dtsi"
+
+/ {
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory {
+               reg = <0x80000000 0x20000000>;
+       };
+
+       gpio-leds {
+               compatible = "gpio-leds";
+               pinctrl-0 = <&pinctrl_leds_debug>;
+               pinctrl-names = "default";
+
+               debug {
+                       label = "zii:green:debug1";
+                       gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "heartbeat";
+               };
+       };
+
+       reg_vcc_3v3_mcu: regulator-vcc-3v3-mcu {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc_3v3_mcu";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       usb0_vbus: regulator-usb0-vbus {
+               compatible = "regulator-fixed";
+               pinctrl-0 = <&pinctrl_usb_vbus>;
+               regulator-name = "usb_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               enable-active-high;
+               regulator-always-on;
+               regulator-boot-on;
+               gpio = <&gpio0 6 0>;
+       };
+};
+
+&adc0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_adc0_ad5>;
+       vref-supply = <&reg_vcc_3v3_mcu>;
+       status = "okay";
+};
+
+&edma0 {
+       status = "okay";
+};
+
+&esdhc1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_esdhc1>;
+       bus-width = <4>;
+       status = "okay";
+};
+
+&fec0 {
+       phy-mode = "rmii";
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_fec0>;
+       status = "okay";
+};
+
+&fec1 {
+       phy-mode = "rmii";
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_fec1>;
+       status = "okay";
+
+       fixed-link {
+                  speed = <100>;
+                  full-duplex;
+       };
+
+       mdio1: mdio {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               status = "okay";
+       };
+};
+
+&i2c0 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default", "gpio";
+       pinctrl-0 = <&pinctrl_i2c0>;
+       pinctrl-1 = <&pinctrl_i2c0_gpio>;
+       scl-gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
+       sda-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
+       status = "okay";
+
+       lm75@48 {
+               compatible = "national,lm75";
+               reg = <0x48>;
+       };
+
+       at24c04@50 {
+               compatible = "atmel,24c04";
+               reg = <0x50>;
+       };
+
+       at24c04@52 {
+               compatible = "atmel,24c04";
+               reg = <0x52>;
+       };
+
+       ds1682@6b {
+               compatible = "dallas,ds1682";
+               reg = <0x6b>;
+       };
+};
+
+&i2c1 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c1>;
+       status = "okay";
+};
+
+&i2c2 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c2>;
+       status = "okay";
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart0>;
+       status = "okay";
+};
+
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart1>;
+       status = "okay";
+};
+
+&uart2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart2>;
+       status = "okay";
+};
+
+&usbdev0 {
+       disable-over-current;
+       vbus-supply = <&usb0_vbus>;
+       dr_mode = "host";
+       status = "okay";
+};
+
+&usbh1 {
+       disable-over-current;
+       status = "okay";
+};
+
+&usbmisc0 {
+       status = "okay";
+};
+
+&usbmisc1 {
+       status = "okay";
+};
+
+&usbphy0 {
+       status = "okay";
+};
+
+&usbphy1 {
+       status = "okay";
+};
+
+&iomuxc {
+       pinctrl_adc0_ad5: adc0ad5grp {
+               fsl,pins = <
+                       VF610_PAD_PTC30__ADC0_SE5       0x00a1
+               >;
+       };
+
+       pinctrl_dspi0: dspi0grp {
+               fsl,pins = <
+                       VF610_PAD_PTB18__DSPI0_CS1      0x1182
+                       VF610_PAD_PTB19__DSPI0_CS0      0x1182
+                       VF610_PAD_PTB20__DSPI0_SIN      0x1181
+                       VF610_PAD_PTB21__DSPI0_SOUT     0x1182
+                       VF610_PAD_PTB22__DSPI0_SCK      0x1182
+               >;
+       };
+
+       pinctrl_dspi2: dspi2grp {
+               fsl,pins = <
+                       VF610_PAD_PTD31__DSPI2_CS1      0x1182
+                       VF610_PAD_PTD30__DSPI2_CS0      0x1182
+                       VF610_PAD_PTD29__DSPI2_SIN      0x1181
+                       VF610_PAD_PTD28__DSPI2_SOUT     0x1182
+                       VF610_PAD_PTD27__DSPI2_SCK      0x1182
+               >;
+       };
+
+       pinctrl_esdhc1: esdhc1grp {
+               fsl,pins = <
+                       VF610_PAD_PTA24__ESDHC1_CLK     0x31ef
+                       VF610_PAD_PTA25__ESDHC1_CMD     0x31ef
+                       VF610_PAD_PTA26__ESDHC1_DAT0    0x31ef
+                       VF610_PAD_PTA27__ESDHC1_DAT1    0x31ef
+                       VF610_PAD_PTA28__ESDHC1_DATA2   0x31ef
+                       VF610_PAD_PTA29__ESDHC1_DAT3    0x31ef
+                       VF610_PAD_PTA7__GPIO_134        0x219d
+               >;
+       };
+
+       pinctrl_fec0: fec0grp {
+               fsl,pins = <
+                       VF610_PAD_PTC0__ENET_RMII0_MDC  0x30d2
+                       VF610_PAD_PTC1__ENET_RMII0_MDIO 0x30d3
+                       VF610_PAD_PTC2__ENET_RMII0_CRS  0x30d1
+                       VF610_PAD_PTC3__ENET_RMII0_RXD1 0x30d1
+                       VF610_PAD_PTC4__ENET_RMII0_RXD0 0x30d1
+                       VF610_PAD_PTC5__ENET_RMII0_RXER 0x30d1
+                       VF610_PAD_PTC6__ENET_RMII0_TXD1 0x30d2
+                       VF610_PAD_PTC7__ENET_RMII0_TXD0 0x30d2
+                       VF610_PAD_PTC8__ENET_RMII0_TXEN 0x30d2
+               >;
+       };
+
+       pinctrl_fec1: fec1grp {
+               fsl,pins = <
+                       VF610_PAD_PTA6__RMII_CLKIN              0x30d1
+                       VF610_PAD_PTC9__ENET_RMII1_MDC          0x30d2
+                       VF610_PAD_PTC10__ENET_RMII1_MDIO        0x30d3
+                       VF610_PAD_PTC11__ENET_RMII1_CRS         0x30d1
+                       VF610_PAD_PTC12__ENET_RMII1_RXD1        0x30d1
+                       VF610_PAD_PTC13__ENET_RMII1_RXD0        0x30d1
+                       VF610_PAD_PTC14__ENET_RMII1_RXER        0x30d1
+                       VF610_PAD_PTC15__ENET_RMII1_TXD1        0x30d2
+                       VF610_PAD_PTC16__ENET_RMII1_TXD0        0x30d2
+                       VF610_PAD_PTC17__ENET_RMII1_TXEN        0x30d2
+               >;
+       };
+
+       pinctrl_gpio_spi0: pinctrl-gpio-spi0 {
+               fsl,pins = <
+                       VF610_PAD_PTB22__GPIO_44        0x33e2
+                       VF610_PAD_PTB21__GPIO_43        0x33e2
+                       VF610_PAD_PTB20__GPIO_42        0x33e1
+                       VF610_PAD_PTB19__GPIO_41        0x33e2
+                       VF610_PAD_PTB18__GPIO_40        0x33e2
+               >;
+       };
+
+       pinctrl_i2c_mux_reset: pinctrl-i2c-mux-reset {
+               fsl,pins = <
+                        VF610_PAD_PTE14__GPIO_119      0x31c2
+                        >;
+       };
+
+       pinctrl_i2c0: i2c0grp {
+               fsl,pins = <
+                       VF610_PAD_PTB14__I2C0_SCL       0x37ff
+                       VF610_PAD_PTB15__I2C0_SDA       0x37ff
+               >;
+       };
+
+       pinctrl_i2c0_gpio: i2c0grp-gpio {
+               fsl,pins = <
+                       VF610_PAD_PTB14__GPIO_36        0x31c2
+                       VF610_PAD_PTB15__GPIO_37        0x31c2
+               >;
+       };
+
+
+       pinctrl_i2c1: i2c1grp {
+               fsl,pins = <
+                       VF610_PAD_PTB16__I2C1_SCL       0x37ff
+                       VF610_PAD_PTB17__I2C1_SDA       0x37ff
+               >;
+       };
+
+       pinctrl_i2c2: i2c2grp {
+               fsl,pins = <
+                       VF610_PAD_PTA22__I2C2_SCL       0x37ff
+                       VF610_PAD_PTA23__I2C2_SDA       0x37ff
+               >;
+       };
+
+       pinctrl_leds_debug: pinctrl-leds-debug {
+               fsl,pins = <
+                        VF610_PAD_PTD20__GPIO_74       0x31c2
+                        >;
+       };
+
+       pinctrl_qspi0: qspi0grp {
+               fsl,pins = <
+                       VF610_PAD_PTD7__QSPI0_B_QSCK    0x31c3
+                       VF610_PAD_PTD8__QSPI0_B_CS0     0x31ff
+                       VF610_PAD_PTD9__QSPI0_B_DATA3   0x31c3
+                       VF610_PAD_PTD10__QSPI0_B_DATA2  0x31c3
+                       VF610_PAD_PTD11__QSPI0_B_DATA1  0x31c3
+                       VF610_PAD_PTD12__QSPI0_B_DATA0  0x31c3
+               >;
+       };
+
+       pinctrl_uart0: uart0grp {
+               fsl,pins = <
+                       VF610_PAD_PTB10__UART0_TX       0x21a2
+                       VF610_PAD_PTB11__UART0_RX       0x21a1
+               >;
+       };
+
+       pinctrl_uart1: uart1grp {
+               fsl,pins = <
+                       VF610_PAD_PTB23__UART1_TX       0x21a2
+                       VF610_PAD_PTB24__UART1_RX       0x21a1
+               >;
+       };
+
+       pinctrl_uart2: uart2grp {
+               fsl,pins = <
+                       VF610_PAD_PTD0__UART2_TX        0x21a2
+                       VF610_PAD_PTD1__UART2_RX        0x21a1
+               >;
+       };
+
+       pinctrl_usb_vbus: pinctrl-usb-vbus {
+               fsl,pins = <
+                       VF610_PAD_PTA16__GPIO_6 0x31c2
+               >;
+       };
+
+       pinctrl_usb0_host: usb0-host-grp {
+               fsl,pins = <
+                       VF610_PAD_PTD6__GPIO_85         0x0062
+               >;
+       };
+};
index 0cfc060f94d7da2c6a1f8bc453a700e7255b5c4a..80fef182c672e8a6ad50dc6b112c99e78aa39cb2 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 2931a80caccb617542d6f2dcbd105a1528058d44..7198e8cceb0ddc0e968be857570c01654ffb62e3 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 8944a2d2054c7e2075e66fc848ef54683ee7fecd..f7474c11aabd010fdef8158b9fa60b5a8eb79212 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index 9f2c731839f2de0b2ca5f7aa20622f89f2cc70d0..1474bd34d0f1b68334d8c3c360e5fe7a8f55ec50 100644 (file)
  *     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
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index e9d28474c26a0d5227ba46312ab73399fc8f3a7d..5d654b5b4ce647786278e3cdd4711560c9464d49 100644 (file)
  *     modify it under the terms of the GNU General Public License
  *     version 2 as published by the Free Software Foundation.
  *
- *     This file is distributed in the hope that it will be useful
+ *     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
+ * 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
+ *     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
  *     The above copyright notice and this permission notice shall be
  *     included in all copies or substantial portions of the Software.
  *
- *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
+ *     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
+ *     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.
index df42c93a93d69e88db6e8e621271a59e36025c5f..f5dce9b4e617df833cd210bac2fe65ac4a93b788 100644 (file)
@@ -31,10 +31,10 @@ static LIST_HEAD(clocks);
 static DEFINE_MUTEX(clocks_mutex);
 static DEFINE_SPINLOCK(clockfw_lock);
 
-static void __clk_enable(struct clk *clk)
+void davinci_clk_enable(struct clk *clk)
 {
        if (clk->parent)
-               __clk_enable(clk->parent);
+               davinci_clk_enable(clk->parent);
        if (clk->usecount++ == 0) {
                if (clk->flags & CLK_PSC)
                        davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc,
@@ -44,7 +44,7 @@ static void __clk_enable(struct clk *clk)
        }
 }
 
-static void __clk_disable(struct clk *clk)
+void davinci_clk_disable(struct clk *clk)
 {
        if (WARN_ON(clk->usecount == 0))
                return;
@@ -56,7 +56,7 @@ static void __clk_disable(struct clk *clk)
                        clk->clk_disable(clk);
        }
        if (clk->parent)
-               __clk_disable(clk->parent);
+               davinci_clk_disable(clk->parent);
 }
 
 int davinci_clk_reset(struct clk *clk, bool reset)
@@ -103,7 +103,7 @@ int clk_enable(struct clk *clk)
                return -EINVAL;
 
        spin_lock_irqsave(&clockfw_lock, flags);
-       __clk_enable(clk);
+       davinci_clk_enable(clk);
        spin_unlock_irqrestore(&clockfw_lock, flags);
 
        return 0;
@@ -118,7 +118,7 @@ void clk_disable(struct clk *clk)
                return;
 
        spin_lock_irqsave(&clockfw_lock, flags);
-       __clk_disable(clk);
+       davinci_clk_disable(clk);
        spin_unlock_irqrestore(&clockfw_lock, flags);
 }
 EXPORT_SYMBOL(clk_disable);
index e2a5437a1aee3c017f4f353410e0f0e314a96274..fa2b83752e030a494ae3f02a09db118e463488cd 100644 (file)
@@ -132,6 +132,8 @@ int davinci_set_sysclk_rate(struct clk *clk, unsigned long rate);
 int davinci_set_refclk_rate(unsigned long rate);
 int davinci_simple_set_rate(struct clk *clk, unsigned long rate);
 int davinci_clk_reset(struct clk *clk, bool reset);
+void davinci_clk_enable(struct clk *clk);
+void davinci_clk_disable(struct clk *clk);
 
 extern struct platform_device davinci_wdt_device;
 extern void davinci_watchdog_reset(struct platform_device *);
index e770c97ea45c28bfc77232bb1873f976dcfc271c..1d873d15b545c26a97eefdf15d92d437ff2e1701 100644 (file)
@@ -319,6 +319,16 @@ static struct clk emac_clk = {
        .gpsc           = 1,
 };
 
+/*
+ * In order to avoid adding the emac_clk to the clock lookup table twice (and
+ * screwing up the linked list in the process) create a separate clock for
+ * mdio inheriting the rate from emac_clk.
+ */
+static struct clk mdio_clk = {
+       .name           = "mdio",
+       .parent         = &emac_clk,
+};
+
 static struct clk mcasp_clk = {
        .name           = "mcasp",
        .parent         = &async3_clk,
@@ -367,6 +377,16 @@ static struct clk aemif_clk = {
        .flags          = ALWAYS_ENABLED,
 };
 
+/*
+ * In order to avoid adding the aemif_clk to the clock lookup table twice (and
+ * screwing up the linked list in the process) create a separate clock for
+ * nand inheriting the rate from aemif_clk.
+ */
+static struct clk aemif_nand_clk = {
+       .name           = "nand",
+       .parent         = &aemif_clk,
+};
+
 static struct clk usb11_clk = {
        .name           = "usb11",
        .parent         = &pll0_sysclk4,
@@ -529,7 +549,7 @@ static struct clk_lookup da850_clks[] = {
        CLK(NULL,               "arm",          &arm_clk),
        CLK(NULL,               "rmii",         &rmii_clk),
        CLK("davinci_emac.1",   NULL,           &emac_clk),
-       CLK("davinci_mdio.0",   "fck",          &emac_clk),
+       CLK("davinci_mdio.0",   "fck",          &mdio_clk),
        CLK("davinci-mcasp.0",  NULL,           &mcasp_clk),
        CLK("davinci-mcbsp.0",  NULL,           &mcbsp0_clk),
        CLK("davinci-mcbsp.1",  NULL,           &mcbsp1_clk),
@@ -537,7 +557,15 @@ static struct clk_lookup da850_clks[] = {
        CLK("da830-mmc.0",      NULL,           &mmcsd0_clk),
        CLK("da830-mmc.1",      NULL,           &mmcsd1_clk),
        CLK("ti-aemif",         NULL,           &aemif_clk),
-       CLK(NULL,               "aemif",        &aemif_clk),
+       /*
+        * The only user of this clock is davinci_nand and it get's it through
+        * con_id. The nand node itself is created from within the aemif
+        * driver to guarantee that it's probed after the aemif timing
+        * parameters are configured. of_dev_auxdata is not accessible from
+        * the aemif driver and can't be passed to of_platform_populate(). For
+        * that reason we're leaving the dev_id here as NULL.
+        */
+       CLK(NULL,               "aemif",        &aemif_nand_clk),
        CLK("ohci-da8xx",       "usb11",        &usb11_clk),
        CLK("musb-da8xx",       "usb20",        &usb20_clk),
        CLK("spi_davinci.0",    NULL,           &spi0_clk),
index c6feecf7ae242f36ce02ff1c2c43a8c4ad6807d1..9a6af0bd5dc340690bbe794b972b0aeb529faeff 100644 (file)
@@ -22,6 +22,8 @@
 #define DA8XX_USB0_BASE                0x01e00000
 #define DA8XX_USB1_BASE                0x01e25000
 
+static struct clk *usb20_clk;
+
 static struct platform_device da8xx_usb_phy = {
        .name           = "da8xx-usb-phy",
        .id             = -1,
@@ -158,26 +160,13 @@ int __init da8xx_register_usb_refclkin(int rate)
 
 static void usb20_phy_clk_enable(struct clk *clk)
 {
-       struct clk *usb20_clk;
-       int err;
        u32 val;
        u32 timeout = 500000; /* 500 msec */
 
        val = readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG));
 
-       usb20_clk = clk_get(&da8xx_usb20_dev.dev, "usb20");
-       if (IS_ERR(usb20_clk)) {
-               pr_err("could not get usb20 clk: %ld\n", PTR_ERR(usb20_clk));
-               return;
-       }
-
        /* The USB 2.O PLL requires that the USB 2.O PSC is enabled as well. */
-       err = clk_prepare_enable(usb20_clk);
-       if (err) {
-               pr_err("failed to enable usb20 clk: %d\n", err);
-               clk_put(usb20_clk);
-               return;
-       }
+       davinci_clk_enable(usb20_clk);
 
        /*
         * Turn on the USB 2.0 PHY, but just the PLL, and not OTG. The USB 1.1
@@ -197,8 +186,7 @@ static void usb20_phy_clk_enable(struct clk *clk)
 
        pr_err("Timeout waiting for USB 2.0 PHY clock good\n");
 done:
-       clk_disable_unprepare(usb20_clk);
-       clk_put(usb20_clk);
+       davinci_clk_disable(usb20_clk);
 }
 
 static void usb20_phy_clk_disable(struct clk *clk)
@@ -285,11 +273,19 @@ static struct clk_lookup usb20_phy_clk_lookup =
 int __init da8xx_register_usb20_phy_clk(bool use_usb_refclkin)
 {
        struct clk *parent;
-       int ret = 0;
+       int ret;
+
+       usb20_clk = clk_get(&da8xx_usb20_dev.dev, "usb20");
+       ret = PTR_ERR_OR_ZERO(usb20_clk);
+       if (ret)
+               return ret;
 
        parent = clk_get(NULL, use_usb_refclkin ? "usb_refclkin" : "pll0_aux");
-       if (IS_ERR(parent))
-               return PTR_ERR(parent);
+       ret = PTR_ERR_OR_ZERO(parent);
+       if (ret) {
+               clk_put(usb20_clk);
+               return ret;
+       }
 
        usb20_phy_clk.parent = parent;
        ret = clk_register(&usb20_phy_clk);
index 98ffe1e62ad5d6debe7c087743d728d5730c26d3..a5d68411a037994cfcf7f3c2b62c0afb5d91617f 100644 (file)
@@ -385,36 +385,6 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
        return pen_release != -1 ? ret : 0;
 }
 
-/*
- * Initialise the CPU possible map early - this describes the CPUs
- * which may be present or become present in the system.
- */
-
-static void __init exynos_smp_init_cpus(void)
-{
-       void __iomem *scu_base = scu_base_addr();
-       unsigned int i, ncores;
-
-       if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9)
-               ncores = scu_base ? scu_get_core_count(scu_base) : 1;
-       else
-               /*
-                * CPU Nodes are passed thru DT and set_cpu_possible
-                * is set by "arm_dt_init_cpu_maps".
-                */
-               return;
-
-       /* sanity check */
-       if (ncores > nr_cpu_ids) {
-               pr_warn("SMP: %u cores greater than maximum (%u), clipping\n",
-                       ncores, nr_cpu_ids);
-               ncores = nr_cpu_ids;
-       }
-
-       for (i = 0; i < ncores; i++)
-               set_cpu_possible(i, true);
-}
-
 static void __init exynos_smp_prepare_cpus(unsigned int max_cpus)
 {
        int i;
@@ -479,7 +449,6 @@ static void exynos_cpu_die(unsigned int cpu)
 #endif /* CONFIG_HOTPLUG_CPU */
 
 const struct smp_operations exynos_smp_ops __initconst = {
-       .smp_init_cpus          = exynos_smp_init_cpus,
        .smp_prepare_cpus       = exynos_smp_prepare_cpus,
        .smp_secondary_init     = exynos_secondary_init,
        .smp_boot_secondary     = exynos_boot_secondary,
index de5ab8d88549de87ea88fc92c2bf4eda7a022e38..3a8406e45b65dceedf0abdb02f59b4b30bf394a8 100644 (file)
@@ -37,7 +37,6 @@ static const char * const imx1_dt_board_compat[] __initconst = {
 };
 
 DT_MACHINE_START(IMX1_DT, "Freescale i.MX1 (Device Tree Support)")
-       .map_io         = debug_ll_io_init,
        .init_early     = imx1_init_early,
        .init_irq       = imx1_init_irq,
        .dt_compat      = imx1_dt_board_compat,
index 469894082fea00c9605ea4dc370d69b18f5b40d3..093458b62c8dadbcc3c7cc1c3b66d84e59af3d8d 100644 (file)
@@ -7,7 +7,7 @@ ccflags-y := -I$(srctree)/$(src)/include \
 
 # Common support
 obj-y := id.o io.o control.o devices.o fb.o timer.o pm.o \
-        common.o gpio.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o \
+        common.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o \
         omap_device.o omap-headsmp.o sram.o drm.o
 
 hwmod-common                           = omap_hwmod.o omap_hwmod_reset.o \
index 36d9943205ca4bb7bff163656f7760129c620e3c..dc9e34e670a26f280bdfe7947fa8709ee750465f 100644 (file)
@@ -304,7 +304,7 @@ DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)")
        .init_late      = am43xx_init_late,
        .init_irq       = omap_gic_of_init,
        .init_machine   = omap_generic_init,
-       .init_time      = omap4_local_timer_init,
+       .init_time      = omap3_gptimer_timer_init,
        .dt_compat      = am43_boards_compat,
        .restart        = omap44xx_restart,
 MACHINE_END
diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c
deleted file mode 100644 (file)
index 7a57714..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * OMAP2+ specific gpio initialization
- *
- * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
- *
- * Author:
- *     Charulatha V <charu@ti.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation version 2.
- *
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- * kind, whether express or implied; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#include <linux/gpio.h>
-#include <linux/err.h>
-#include <linux/slab.h>
-#include <linux/interrupt.h>
-#include <linux/of.h>
-#include <linux/platform_data/gpio-omap.h>
-
-#include "soc.h"
-#include "omap_hwmod.h"
-#include "omap_device.h"
-#include "omap-pm.h"
-
-#include "powerdomain.h"
-
-static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
-{
-       struct platform_device *pdev;
-       struct omap_gpio_platform_data *pdata;
-       struct omap_gpio_dev_attr *dev_attr;
-       char *name = "omap_gpio";
-       int id;
-       struct powerdomain *pwrdm;
-
-       /*
-        * extract the device id from name field available in the
-        * hwmod database and use the same for constructing ids for
-        * gpio devices.
-        * CAUTION: Make sure the name in the hwmod database does
-        * not change. If changed, make corresponding change here
-        * or make use of static variable mechanism to handle this.
-        */
-       sscanf(oh->name, "gpio%d", &id);
-
-       pdata = kzalloc(sizeof(struct omap_gpio_platform_data), GFP_KERNEL);
-       if (!pdata) {
-               pr_err("gpio%d: Memory allocation failed\n", id);
-               return -ENOMEM;
-       }
-
-       dev_attr = (struct omap_gpio_dev_attr *)oh->dev_attr;
-       pdata->bank_width = dev_attr->bank_width;
-       pdata->dbck_flag = dev_attr->dbck_flag;
-       pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count;
-       pdata->regs = kzalloc(sizeof(struct omap_gpio_reg_offs), GFP_KERNEL);
-       if (!pdata->regs) {
-               pr_err("gpio%d: Memory allocation failed\n", id);
-               kfree(pdata);
-               return -ENOMEM;
-       }
-
-       switch (oh->class->rev) {
-       case 0:
-               if (id == 1)
-                       /* non-wakeup GPIO pins for OMAP2 Bank1 */
-                       pdata->non_wakeup_gpios = 0xe203ffc0;
-               else if (id == 2)
-                       /* non-wakeup GPIO pins for OMAP2 Bank2 */
-                       pdata->non_wakeup_gpios = 0x08700040;
-               /* fall through */
-
-       case 1:
-               pdata->regs->revision = OMAP24XX_GPIO_REVISION;
-               pdata->regs->direction = OMAP24XX_GPIO_OE;
-               pdata->regs->datain = OMAP24XX_GPIO_DATAIN;
-               pdata->regs->dataout = OMAP24XX_GPIO_DATAOUT;
-               pdata->regs->set_dataout = OMAP24XX_GPIO_SETDATAOUT;
-               pdata->regs->clr_dataout = OMAP24XX_GPIO_CLEARDATAOUT;
-               pdata->regs->irqstatus = OMAP24XX_GPIO_IRQSTATUS1;
-               pdata->regs->irqstatus2 = OMAP24XX_GPIO_IRQSTATUS2;
-               pdata->regs->irqenable = OMAP24XX_GPIO_IRQENABLE1;
-               pdata->regs->irqenable2 = OMAP24XX_GPIO_IRQENABLE2;
-               pdata->regs->set_irqenable = OMAP24XX_GPIO_SETIRQENABLE1;
-               pdata->regs->clr_irqenable = OMAP24XX_GPIO_CLEARIRQENABLE1;
-               pdata->regs->debounce = OMAP24XX_GPIO_DEBOUNCE_VAL;
-               pdata->regs->debounce_en = OMAP24XX_GPIO_DEBOUNCE_EN;
-               pdata->regs->ctrl = OMAP24XX_GPIO_CTRL;
-               pdata->regs->wkup_en = OMAP24XX_GPIO_WAKE_EN;
-               pdata->regs->leveldetect0 = OMAP24XX_GPIO_LEVELDETECT0;
-               pdata->regs->leveldetect1 = OMAP24XX_GPIO_LEVELDETECT1;
-               pdata->regs->risingdetect = OMAP24XX_GPIO_RISINGDETECT;
-               pdata->regs->fallingdetect = OMAP24XX_GPIO_FALLINGDETECT;
-               break;
-       case 2:
-               pdata->regs->revision = OMAP4_GPIO_REVISION;
-               pdata->regs->direction = OMAP4_GPIO_OE;
-               pdata->regs->datain = OMAP4_GPIO_DATAIN;
-               pdata->regs->dataout = OMAP4_GPIO_DATAOUT;
-               pdata->regs->set_dataout = OMAP4_GPIO_SETDATAOUT;
-               pdata->regs->clr_dataout = OMAP4_GPIO_CLEARDATAOUT;
-               pdata->regs->irqstatus_raw0 = OMAP4_GPIO_IRQSTATUSRAW0;
-               pdata->regs->irqstatus_raw1 = OMAP4_GPIO_IRQSTATUSRAW1;
-               pdata->regs->irqstatus = OMAP4_GPIO_IRQSTATUS0;
-               pdata->regs->irqstatus2 = OMAP4_GPIO_IRQSTATUS1;
-               pdata->regs->irqenable = OMAP4_GPIO_IRQSTATUSSET0;
-               pdata->regs->irqenable2 = OMAP4_GPIO_IRQSTATUSSET1;
-               pdata->regs->set_irqenable = OMAP4_GPIO_IRQSTATUSSET0;
-               pdata->regs->clr_irqenable = OMAP4_GPIO_IRQSTATUSCLR0;
-               pdata->regs->debounce = OMAP4_GPIO_DEBOUNCINGTIME;
-               pdata->regs->debounce_en = OMAP4_GPIO_DEBOUNCENABLE;
-               pdata->regs->ctrl = OMAP4_GPIO_CTRL;
-               pdata->regs->wkup_en = OMAP4_GPIO_IRQWAKEN0;
-               pdata->regs->leveldetect0 = OMAP4_GPIO_LEVELDETECT0;
-               pdata->regs->leveldetect1 = OMAP4_GPIO_LEVELDETECT1;
-               pdata->regs->risingdetect = OMAP4_GPIO_RISINGDETECT;
-               pdata->regs->fallingdetect = OMAP4_GPIO_FALLINGDETECT;
-               break;
-       default:
-               WARN(1, "Invalid gpio bank_type\n");
-               kfree(pdata->regs);
-               kfree(pdata);
-               return -EINVAL;
-       }
-
-       pwrdm = omap_hwmod_get_pwrdm(oh);
-       pdata->loses_context = pwrdm_can_ever_lose_context(pwrdm);
-
-       pdev = omap_device_build(name, id - 1, oh, pdata, sizeof(*pdata));
-       kfree(pdata);
-
-       if (IS_ERR(pdev)) {
-               WARN(1, "Can't build omap_device for %s:%s.\n",
-                                       name, oh->name);
-               return PTR_ERR(pdev);
-       }
-
-       return 0;
-}
-
-/*
- * gpio_init needs to be done before
- * machine_init functions access gpio APIs.
- * Hence gpio_init is a omap_postcore_initcall.
- */
-static int __init omap2_gpio_init(void)
-{
-       /* If dtb is there, the devices will be created dynamically */
-       if (of_have_populated_dt())
-               return -ENODEV;
-
-       return omap_hwmod_for_each_by_class("gpio", omap2_gpio_dev_init, NULL);
-}
-omap_postcore_initcall(omap2_gpio_init);
index 759e1d45ba25c3977af1d7048bec577062a51b66..e8b988714a09f842c01b5ea8a22d09c31ba20f1d 100644 (file)
@@ -741,14 +741,14 @@ static int _init_main_clk(struct omap_hwmod *oh)
        int ret = 0;
        char name[MOD_CLK_MAX_NAME_LEN];
        struct clk *clk;
+       static const char modck[] = "_mod_ck";
 
-       /* +7 magic comes from '_mod_ck' suffix */
-       if (strlen(oh->name) + 7 > MOD_CLK_MAX_NAME_LEN)
+       if (strlen(oh->name) >= MOD_CLK_MAX_NAME_LEN - strlen(modck))
                pr_warn("%s: warning: cropping name for %s\n", __func__,
                        oh->name);
 
-       strncpy(name, oh->name, MOD_CLK_MAX_NAME_LEN - 7);
-       strcat(name, "_mod_ck");
+       strlcpy(name, oh->name, MOD_CLK_MAX_NAME_LEN - strlen(modck));
+       strlcat(name, modck, MOD_CLK_MAX_NAME_LEN);
 
        clk = clk_get(NULL, name);
        if (!IS_ERR(clk)) {
index cdfbb44ceb0c4f3059bc6568e2e765304f7e374a..f22e9cb39f4ac16af15020a0990e32dd975a9bd3 100644 (file)
@@ -121,10 +121,6 @@ extern struct omap_hwmod_irq_info omap2_uart3_mpu_irqs[];
 extern struct omap_hwmod_irq_info omap2_dispc_irqs[];
 extern struct omap_hwmod_irq_info omap2_i2c1_mpu_irqs[];
 extern struct omap_hwmod_irq_info omap2_i2c2_mpu_irqs[];
-extern struct omap_hwmod_irq_info omap2_gpio1_irqs[];
-extern struct omap_hwmod_irq_info omap2_gpio2_irqs[];
-extern struct omap_hwmod_irq_info omap2_gpio3_irqs[];
-extern struct omap_hwmod_irq_info omap2_gpio4_irqs[];
 extern struct omap_hwmod_irq_info omap2_dma_system_irqs[];
 extern struct omap_hwmod_irq_info omap2_mcspi1_mpu_irqs[];
 extern struct omap_hwmod_irq_info omap2_mcspi2_mpu_irqs[];
index 5b2f5138d938ac626a1895b71a9a44cd0d757785..2b138b65129a5d609ff2ae02a55181c10154113b 100644 (file)
@@ -295,10 +295,8 @@ int omap_prcm_register_chain_handler(struct omap_prcm_irq_setup *irq_setup)
                GFP_KERNEL);
 
        if (!prcm_irq_chips || !prcm_irq_setup->saved_mask ||
-           !prcm_irq_setup->priority_mask) {
-               pr_err("PRCM: kzalloc failed\n");
+           !prcm_irq_setup->priority_mask)
                goto err;
-       }
 
        memset(mask, 0, sizeof(mask));
 
index 56128da23c3a1531994e37522a05e625764cc6ee..07dd692c47372f8aa145d00cb5532b75774429c5 100644 (file)
@@ -510,18 +510,19 @@ void __init omap3_secure_sync32k_timer_init(void)
 }
 #endif /* CONFIG_ARCH_OMAP3 */
 
-#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX)
+#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) || \
+       defined(CONFIG_SOC_AM43XX)
 void __init omap3_gptimer_timer_init(void)
 {
        __omap_sync32k_timer_init(2, "timer_sys_ck", NULL,
                        1, "timer_sys_ck", "ti,timer-alwon", true);
-
-       clocksource_probe();
+       if (of_have_populated_dt())
+               clocksource_probe();
 }
 #endif
 
 #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) ||         \
-       defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX)
+       defined(CONFIG_SOC_DRA7XX)
 static void __init omap4_sync32k_timer_init(void)
 {
        __omap_sync32k_timer_init(1, "timer_32k_ck", "ti,timer-alwon",
index f6c3f151d0d48c2c62ca056a18fbbe16edc309d9..b59f4f4f256f2bd6785b086c40bbefb0bb68315c 100644 (file)
@@ -345,10 +345,40 @@ static struct s3c24xx_dma_channel s3c2410_dma_channels[DMACH_MAX] = {
        [DMACH_USB_EP4] = { S3C24XX_DMA_APB, true, S3C24XX_DMA_CHANREQ(4, 3), },
 };
 
+static const struct dma_slave_map s3c2410_dma_slave_map[] = {
+       { "s3c2410-sdi", "rx-tx", (void *)DMACH_SDI },
+       { "s3c2410-spi.0", "rx", (void *)DMACH_SPI0_RX },
+       { "s3c2410-spi.0", "tx", (void *)DMACH_SPI0_TX },
+       { "s3c2410-spi.1", "rx", (void *)DMACH_SPI1_RX },
+       { "s3c2410-spi.1", "tx", (void *)DMACH_SPI1_TX },
+       /*
+        * The DMA request source[1] (DMACH_UARTx_SRC2) are
+        * not used in the UART driver.
+        */
+       { "s3c2410-uart.0", "rx", (void *)DMACH_UART0 },
+       { "s3c2410-uart.0", "tx", (void *)DMACH_UART0 },
+       { "s3c2410-uart.1", "rx", (void *)DMACH_UART1 },
+       { "s3c2410-uart.1", "tx", (void *)DMACH_UART1 },
+       { "s3c2410-uart.2", "rx", (void *)DMACH_UART2 },
+       { "s3c2410-uart.2", "tx", (void *)DMACH_UART2 },
+       { "s3c24xx-iis", "rx", (void *)DMACH_I2S_IN },
+       { "s3c24xx-iis", "tx", (void *)DMACH_I2S_OUT },
+       { "s3c-hsudc", "rx0", (void *)DMACH_USB_EP1 },
+       { "s3c-hsudc", "tx0", (void *)DMACH_USB_EP1 },
+       { "s3c-hsudc", "rx1", (void *)DMACH_USB_EP2 },
+       { "s3c-hsudc", "tx1", (void *)DMACH_USB_EP2 },
+       { "s3c-hsudc", "rx2", (void *)DMACH_USB_EP3 },
+       { "s3c-hsudc", "tx2", (void *)DMACH_USB_EP3 },
+       { "s3c-hsudc", "rx3", (void *)DMACH_USB_EP4 },
+       { "s3c-hsudc", "tx3", (void *)DMACH_USB_EP4 }
+};
+
 static struct s3c24xx_dma_platdata s3c2410_dma_platdata = {
        .num_phy_channels = 4,
        .channels = s3c2410_dma_channels,
        .num_channels = DMACH_MAX,
+       .slave_map = s3c2410_dma_slave_map,
+       .slavecnt = ARRAY_SIZE(s3c2410_dma_slave_map),
 };
 
 struct platform_device s3c2410_device_dma = {
@@ -388,10 +418,36 @@ static struct s3c24xx_dma_channel s3c2412_dma_channels[DMACH_MAX] = {
        [DMACH_USB_EP4] = { S3C24XX_DMA_APB, true, 16 },
 };
 
+static const struct dma_slave_map s3c2412_dma_slave_map[] = {
+       { "s3c2412-sdi", "rx-tx", (void *)DMACH_SDI },
+       { "s3c2412-spi.0", "rx", (void *)DMACH_SPI0_RX },
+       { "s3c2412-spi.0", "tx", (void *)DMACH_SPI0_TX },
+       { "s3c2412-spi.1", "rx", (void *)DMACH_SPI1_RX },
+       { "s3c2412-spi.1", "tx", (void *)DMACH_SPI1_TX },
+       { "s3c2440-uart.0", "rx", (void *)DMACH_UART0 },
+       { "s3c2440-uart.0", "tx", (void *)DMACH_UART0 },
+       { "s3c2440-uart.1", "rx", (void *)DMACH_UART1 },
+       { "s3c2440-uart.1", "tx", (void *)DMACH_UART1 },
+       { "s3c2440-uart.2", "rx", (void *)DMACH_UART2 },
+       { "s3c2440-uart.2", "tx", (void *)DMACH_UART2 },
+       { "s3c2412-iis", "rx", (void *)DMACH_I2S_IN },
+       { "s3c2412-iis", "tx", (void *)DMACH_I2S_OUT },
+       { "s3c-hsudc", "rx0", (void *)DMACH_USB_EP1 },
+       { "s3c-hsudc", "tx0", (void *)DMACH_USB_EP1 },
+       { "s3c-hsudc", "rx1", (void *)DMACH_USB_EP2 },
+       { "s3c-hsudc", "tx1", (void *)DMACH_USB_EP2 },
+       { "s3c-hsudc", "rx2", (void *)DMACH_USB_EP3 },
+       { "s3c-hsudc", "tx2", (void *)DMACH_USB_EP3 },
+       { "s3c-hsudc", "rx3", (void *)DMACH_USB_EP4 },
+       { "s3c-hsudc", "tx3", (void *)DMACH_USB_EP4 }
+};
+
 static struct s3c24xx_dma_platdata s3c2412_dma_platdata = {
        .num_phy_channels = 4,
        .channels = s3c2412_dma_channels,
        .num_channels = DMACH_MAX,
+       .slave_map = s3c2412_dma_slave_map,
+       .slavecnt = ARRAY_SIZE(s3c2412_dma_slave_map),
 };
 
 struct platform_device s3c2412_device_dma = {
@@ -534,10 +590,30 @@ static struct s3c24xx_dma_channel s3c2443_dma_channels[DMACH_MAX] = {
        [DMACH_MIC_IN] = { S3C24XX_DMA_APB, true, 29 },
 };
 
+static const struct dma_slave_map s3c2443_dma_slave_map[] = {
+       { "s3c2440-sdi", "rx-tx", (void *)DMACH_SDI },
+       { "s3c2443-spi.0", "rx", (void *)DMACH_SPI0_RX },
+       { "s3c2443-spi.0", "tx", (void *)DMACH_SPI0_TX },
+       { "s3c2443-spi.1", "rx", (void *)DMACH_SPI1_RX },
+       { "s3c2443-spi.1", "tx", (void *)DMACH_SPI1_TX },
+       { "s3c2440-uart.0", "rx", (void *)DMACH_UART0 },
+       { "s3c2440-uart.0", "tx", (void *)DMACH_UART0 },
+       { "s3c2440-uart.1", "rx", (void *)DMACH_UART1 },
+       { "s3c2440-uart.1", "tx", (void *)DMACH_UART1 },
+       { "s3c2440-uart.2", "rx", (void *)DMACH_UART2 },
+       { "s3c2440-uart.2", "tx", (void *)DMACH_UART2 },
+       { "s3c2440-uart.3", "rx", (void *)DMACH_UART3 },
+       { "s3c2440-uart.3", "tx", (void *)DMACH_UART3 },
+       { "s3c24xx-iis", "rx", (void *)DMACH_I2S_IN },
+       { "s3c24xx-iis", "tx", (void *)DMACH_I2S_OUT },
+};
+
 static struct s3c24xx_dma_platdata s3c2443_dma_platdata = {
        .num_phy_channels = 6,
        .channels = s3c2443_dma_channels,
        .num_channels = DMACH_MAX,
+       .slave_map = s3c2443_dma_slave_map,
+       .slavecnt = ARRAY_SIZE(s3c2443_dma_slave_map),
 };
 
 struct platform_device s3c2443_device_dma = {
index fc033c0d2a0f21b443ed0e28ad35d87598870e55..eada0b58ba1c7637d46fffaf7eadaf37380d41e8 100644 (file)
@@ -356,5 +356,21 @@ sd_emmc_c: mmc@74000 {
                                status = "disabled";
                        };
                };
+
+               vpu: vpu@d0100000 {
+                       compatible = "amlogic,meson-gx-vpu";
+                       reg = <0x0 0xd0100000 0x0 0x100000>,
+                             <0x0 0xc883c000 0x0 0x1000>,
+                             <0x0 0xc8838000 0x0 0x1000>;
+                       reg-names = "vpu", "hhi", "dmc";
+                       interrupts = <GIC_SPI 3 IRQ_TYPE_EDGE_RISING>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       /* CVBS VDAC output port */
+                       cvbs_vdac_port: port@0 {
+                               reg = <0>;
+                       };
+               };
        };
 };
index 969682092e0fe040fb1b6de918de99d095fd2c91..4cbd626a9e887b01285c6052fb3590d46bcae176 100644 (file)
@@ -142,6 +142,16 @@ sdio_pwrseq: sdio-pwrseq {
                clocks = <&wifi32k>;
                clock-names = "ext_clock";
        };
+
+       cvbs-connector {
+               compatible = "composite-video-connector";
+
+               port {
+                       cvbs_connector_in: endpoint {
+                               remote-endpoint = <&cvbs_vdac_out>;
+                       };
+               };
+       };
 };
 
 &uart_AO {
@@ -229,3 +239,9 @@ &pwm_ef {
        clocks = <&clkc CLKID_FCLK_DIV4>;
        clock-names = "clkin0";
 };
+
+&cvbs_vdac_port {
+       cvbs_vdac_out: endpoint {
+               remote-endpoint = <&cvbs_connector_in>;
+       };
+};
index 203be28978d5ede48d7050356f14a2ad19423a7e..4a96e0f6f9265b858287c039714e652062134c9e 100644 (file)
@@ -125,6 +125,16 @@ sdio_pwrseq: sdio-pwrseq {
                clocks = <&wifi32k>;
                clock-names = "ext_clock";
        };
+
+       cvbs-connector {
+               compatible = "composite-video-connector";
+
+               port {
+                       cvbs_connector_in: endpoint {
+                               remote-endpoint = <&cvbs_vdac_out>;
+                       };
+               };
+       };
 };
 
 /* This UART is brought out to the DB9 connector */
@@ -234,3 +244,9 @@ &pwm_ef {
        clocks = <&clkc CLKID_FCLK_DIV4>;
        clock-names = "clkin0";
 };
+
+&cvbs_vdac_port {
+       cvbs_vdac_out: endpoint {
+               remote-endpoint = <&cvbs_connector_in>;
+       };
+};
index 51edd5b5c4604518bf8e329c11d123c2aa706af6..596240c38a9cdd7720077a8f97a5c0111366e550 100644 (file)
@@ -506,3 +506,7 @@ &sd_emmc_c {
                 <&clkc CLKID_FCLK_DIV2>;
        clock-names = "core", "clkin0", "clkin1";
 };
+
+&vpu {
+       compatible = "amlogic,meson-gxbb-vpu", "amlogic,meson-gx-vpu";
+};
index e99101ae966438414c055f54c635c8b0878a528e..cea4a3eded9b805983e0af414cfd6d901ad5a703 100644 (file)
@@ -117,6 +117,16 @@ sdio_pwrseq: sdio-pwrseq {
                clocks = <&wifi32k>;
                clock-names = "ext_clock";
        };
+
+       cvbs-connector {
+               compatible = "composite-video-connector";
+
+               port {
+                       cvbs_connector_in: endpoint {
+                               remote-endpoint = <&cvbs_vdac_out>;
+                       };
+               };
+       };
 };
 
 &uart_AO {
@@ -203,3 +213,9 @@ &pwm_ef {
        clocks = <&clkc CLKID_FCLK_DIV4>;
        clock-names = "clkin0";
 };
+
+&cvbs_vdac_port {
+       cvbs_vdac_out: endpoint {
+               remote-endpoint = <&cvbs_connector_in>;
+       };
+};
index 9f89b99c4806776d1a009c9e02f02e3584e8c294..69216246275dfa05e852e513337eea1cb8d53e55 100644 (file)
@@ -43,7 +43,7 @@
 
 #include "meson-gx.dtsi"
 #include <dt-bindings/clock/gxbb-clkc.h>
-#include <dt-bindings/gpio/meson-gxbb-gpio.h>
+#include <dt-bindings/gpio/meson-gxl-gpio.h>
 
 / {
        compatible = "amlogic,meson-gxl";
@@ -299,3 +299,7 @@ &sd_emmc_c {
                 <&clkc CLKID_FCLK_DIV2>;
        clock-names = "core", "clkin0", "clkin1";
 };
+
+&vpu {
+       compatible = "amlogic,meson-gxl-vpu", "amlogic,meson-gx-vpu";
+};
index f859d75db8bd936845663084ffbfd7309148a9f4..5a337d339df1d58b984ab575ba88b07a03a067c2 100644 (file)
@@ -90,6 +90,16 @@ emmc_pwrseq: emmc-pwrseq {
                compatible = "mmc-pwrseq-emmc";
                reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
        };
+
+       cvbs-connector {
+               compatible = "composite-video-connector";
+
+               port {
+                       cvbs_connector_in: endpoint {
+                               remote-endpoint = <&cvbs_vdac_out>;
+                       };
+               };
+       };
 };
 
 /* This UART is brought out to the DB9 connector */
@@ -167,3 +177,9 @@ external_phy: ethernet-phy@0 {
                max-speed = <1000>;
        };
 };
+
+&cvbs_vdac_port {
+       cvbs_vdac_out: endpoint {
+               remote-endpoint = <&cvbs_connector_in>;
+       };
+};
index c1974bbbddead8d3b955e105ec018701fca3ffd7..eb2f0c3e5e538e4bebf211512bccd4a8eaab02b5 100644 (file)
@@ -112,3 +112,7 @@ cpu7: cpu@103 {
                };
        };
 };
+
+&vpu {
+       compatible = "amlogic,meson-gxm-vpu", "amlogic,meson-gx-vpu";
+};
index a852e28a40e17761b5b393b21d9798eb9a80cd8b..a83ed2c6bbf79afd64c24577ca2530e7da6f0b87 100644 (file)
@@ -81,7 +81,7 @@ gic: interrupt-controller@2c001000 {
                #address-cells = <0>;
                interrupt-controller;
                reg = <0x0 0x2c001000 0 0x1000>,
-                     <0x0 0x2c002000 0 0x1000>,
+                     <0x0 0x2c002000 0 0x2000>,
                      <0x0 0x2c004000 0 0x2000>,
                      <0x0 0x2c006000 0 0x2000>;
                interrupts = <1 9 0xf04>;
index 9d1d7ad9b075a314d5777260622d66487c82cf45..29ed6b61c737a7827eb8caae01ef335fdbd222b1 100644 (file)
@@ -64,6 +64,16 @@ smem_mem: smem-mem@86000000 {
                        reg = <0x0 0x86000000 0x0 0x200000>;
                        no-map;
                };
+
+               memory@85800000 {
+                       reg = <0x0 0x85800000 0x0 0x800000>;
+                       no-map;
+               };
+
+               memory@86200000 {
+                       reg = <0x0 0x86200000 0x0 0x2600000>;
+                       no-map;
+               };
        };
 
        cpus {
index 6ffb0517421a92f40d43ffa37682bfd825efca25..dbea2c3d8f0c229f05573f94b9318837a8c11300 100644 (file)
@@ -169,7 +169,7 @@ sdhi0_pins: sd0 {
                power-source = <3300>;
        };
 
-       sdhi0_pins_uhs: sd0 {
+       sdhi0_pins_uhs: sd0_uhs {
                groups = "sdhi0_data4", "sdhi0_ctrl";
                function = "sdhi0";
                power-source = <1800>;
index 869dded0f09f810f8b05005eed0e3d1d86287b93..33b744d547392d6464d34d5ca91d1296454ad784 100644 (file)
@@ -331,6 +331,7 @@ CONFIG_DRM_VC4=m
 CONFIG_DRM_PANEL_SIMPLE=m
 CONFIG_DRM_I2C_ADV7511=m
 CONFIG_DRM_HISI_KIRIN=m
+CONFIG_DRM_MESON=m
 CONFIG_FB=y
 CONFIG_FB_ARMCLCD=y
 CONFIG_BACKLIGHT_GENERIC=m
diff --git a/arch/arm64/include/asm/asm-uaccess.h b/arch/arm64/include/asm/asm-uaccess.h
new file mode 100644 (file)
index 0000000..df411f3
--- /dev/null
@@ -0,0 +1,65 @@
+#ifndef __ASM_ASM_UACCESS_H
+#define __ASM_ASM_UACCESS_H
+
+#include <asm/alternative.h>
+#include <asm/kernel-pgtable.h>
+#include <asm/sysreg.h>
+#include <asm/assembler.h>
+
+/*
+ * User access enabling/disabling macros.
+ */
+#ifdef CONFIG_ARM64_SW_TTBR0_PAN
+       .macro  __uaccess_ttbr0_disable, tmp1
+       mrs     \tmp1, ttbr1_el1                // swapper_pg_dir
+       add     \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir
+       msr     ttbr0_el1, \tmp1                // set reserved TTBR0_EL1
+       isb
+       .endm
+
+       .macro  __uaccess_ttbr0_enable, tmp1
+       get_thread_info \tmp1
+       ldr     \tmp1, [\tmp1, #TSK_TI_TTBR0]   // load saved TTBR0_EL1
+       msr     ttbr0_el1, \tmp1                // set the non-PAN TTBR0_EL1
+       isb
+       .endm
+
+       .macro  uaccess_ttbr0_disable, tmp1
+alternative_if_not ARM64_HAS_PAN
+       __uaccess_ttbr0_disable \tmp1
+alternative_else_nop_endif
+       .endm
+
+       .macro  uaccess_ttbr0_enable, tmp1, tmp2
+alternative_if_not ARM64_HAS_PAN
+       save_and_disable_irq \tmp2              // avoid preemption
+       __uaccess_ttbr0_enable \tmp1
+       restore_irq \tmp2
+alternative_else_nop_endif
+       .endm
+#else
+       .macro  uaccess_ttbr0_disable, tmp1
+       .endm
+
+       .macro  uaccess_ttbr0_enable, tmp1, tmp2
+       .endm
+#endif
+
+/*
+ * These macros are no-ops when UAO is present.
+ */
+       .macro  uaccess_disable_not_uao, tmp1
+       uaccess_ttbr0_disable \tmp1
+alternative_if ARM64_ALT_PAN_NOT_UAO
+       SET_PSTATE_PAN(1)
+alternative_else_nop_endif
+       .endm
+
+       .macro  uaccess_enable_not_uao, tmp1, tmp2
+       uaccess_ttbr0_enable \tmp1, \tmp2
+alternative_if ARM64_ALT_PAN_NOT_UAO
+       SET_PSTATE_PAN(0)
+alternative_else_nop_endif
+       .endm
+
+#endif
index f2bcbe2d98895ea35b95b8a1e518d808738284b4..86c404171305abd290a6a85d7a5edd69c55ecd02 100644 (file)
@@ -9,9 +9,17 @@
 
 struct task_struct;
 
+/*
+ * We don't use read_sysreg() as we want the compiler to cache the value where
+ * possible.
+ */
 static __always_inline struct task_struct *get_current(void)
 {
-       return (struct task_struct *)read_sysreg(sp_el0);
+       unsigned long sp_el0;
+
+       asm ("mrs %0, sp_el0" : "=r" (sp_el0));
+
+       return (struct task_struct *)sp_el0;
 }
 
 #define current get_current()
index d26750ca6e066b9f0f267025512b3e2bdef13744..46da3ea638bbdfc858161f3e00ac560562692359 100644 (file)
@@ -22,8 +22,6 @@
 #include <asm/kernel-pgtable.h>
 #include <asm/sysreg.h>
 
-#ifndef __ASSEMBLY__
-
 /*
  * User space memory access functions
  */
@@ -424,66 +422,4 @@ extern long strncpy_from_user(char *dest, const char __user *src, long count);
 extern __must_check long strlen_user(const char __user *str);
 extern __must_check long strnlen_user(const char __user *str, long n);
 
-#else  /* __ASSEMBLY__ */
-
-#include <asm/assembler.h>
-
-/*
- * User access enabling/disabling macros.
- */
-#ifdef CONFIG_ARM64_SW_TTBR0_PAN
-       .macro  __uaccess_ttbr0_disable, tmp1
-       mrs     \tmp1, ttbr1_el1                // swapper_pg_dir
-       add     \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir
-       msr     ttbr0_el1, \tmp1                // set reserved TTBR0_EL1
-       isb
-       .endm
-
-       .macro  __uaccess_ttbr0_enable, tmp1
-       get_thread_info \tmp1
-       ldr     \tmp1, [\tmp1, #TSK_TI_TTBR0]   // load saved TTBR0_EL1
-       msr     ttbr0_el1, \tmp1                // set the non-PAN TTBR0_EL1
-       isb
-       .endm
-
-       .macro  uaccess_ttbr0_disable, tmp1
-alternative_if_not ARM64_HAS_PAN
-       __uaccess_ttbr0_disable \tmp1
-alternative_else_nop_endif
-       .endm
-
-       .macro  uaccess_ttbr0_enable, tmp1, tmp2
-alternative_if_not ARM64_HAS_PAN
-       save_and_disable_irq \tmp2              // avoid preemption
-       __uaccess_ttbr0_enable \tmp1
-       restore_irq \tmp2
-alternative_else_nop_endif
-       .endm
-#else
-       .macro  uaccess_ttbr0_disable, tmp1
-       .endm
-
-       .macro  uaccess_ttbr0_enable, tmp1, tmp2
-       .endm
-#endif
-
-/*
- * These macros are no-ops when UAO is present.
- */
-       .macro  uaccess_disable_not_uao, tmp1
-       uaccess_ttbr0_disable \tmp1
-alternative_if ARM64_ALT_PAN_NOT_UAO
-       SET_PSTATE_PAN(1)
-alternative_else_nop_endif
-       .endm
-
-       .macro  uaccess_enable_not_uao, tmp1, tmp2
-       uaccess_ttbr0_enable \tmp1, \tmp2
-alternative_if ARM64_ALT_PAN_NOT_UAO
-       SET_PSTATE_PAN(0)
-alternative_else_nop_endif
-       .endm
-
-#endif /* __ASSEMBLY__ */
-
 #endif /* __ASM_UACCESS_H */
index a7504f40d7ee45f7d8a2ac3dcc9bcbff397eb708..923841ffe4a981669be9bea76d09540244550a1f 100644 (file)
@@ -31,7 +31,7 @@
 #include <asm/memory.h>
 #include <asm/ptrace.h>
 #include <asm/thread_info.h>
-#include <linux/uaccess.h>
+#include <asm/asm-uaccess.h>
 #include <asm/unistd.h>
 
 /*
index add4a1334085b1eef342155089bb3d2c4b560621..e88fb99c15616397e6c4bbc0dd9c26e504688d97 100644 (file)
@@ -17,7 +17,7 @@
  */
 #include <linux/linkage.h>
 
-#include <linux/uaccess.h>
+#include <asm/asm-uaccess.h>
 
        .text
 
index fd6cd05593f99ea8bff2e7bdae6168d5639067b0..4b5d826895ff161347dec9dd48710d08bcc49699 100644 (file)
@@ -17,7 +17,7 @@
 #include <linux/linkage.h>
 
 #include <asm/cache.h>
-#include <linux/uaccess.h>
+#include <asm/asm-uaccess.h>
 
 /*
  * Copy from user space to a kernel buffer (alignment handled by the hardware)
index d828540ded6facff4c578c95c75a4163b584184d..47184c3a97da6faa4cce2e31b37f91d95d361ee6 100644 (file)
@@ -19,7 +19,7 @@
 #include <linux/linkage.h>
 
 #include <asm/cache.h>
-#include <linux/uaccess.h>
+#include <asm/asm-uaccess.h>
 
 /*
  * Copy from user space to user space (alignment handled by the hardware)
index 3e6ae2663b8221033eee04a0667b04f43f84db66..351f0766f7a61c54a47427c6a6845521fda6066d 100644 (file)
@@ -17,7 +17,7 @@
 #include <linux/linkage.h>
 
 #include <asm/cache.h>
-#include <linux/uaccess.h>
+#include <asm/asm-uaccess.h>
 
 /*
  * Copy to user space from a kernel buffer (alignment handled by the hardware)
index 17f422a4dc5538a534b885da74e85ea251e25a3a..83c27b6e6dca31007d3b9ae5bc1c48d66456e757 100644 (file)
@@ -23,7 +23,7 @@
 #include <asm/assembler.h>
 #include <asm/cpufeature.h>
 #include <asm/alternative.h>
-#include <linux/uaccess.h>
+#include <asm/asm-uaccess.h>
 
 /*
  *     flush_icache_range(start,end)
index 290a84f3351f706bd026e00364c2d433a4852aed..e04082700bb16c3598333de72b3c64659be63e5e 100644 (file)
@@ -524,7 +524,8 @@ EXPORT_SYMBOL(dummy_dma_ops);
 
 static int __init arm64_dma_init(void)
 {
-       if (swiotlb_force || max_pfn > (arm64_dma_phys_limit >> PAGE_SHIFT))
+       if (swiotlb_force == SWIOTLB_FORCE ||
+           max_pfn > (arm64_dma_phys_limit >> PAGE_SHIFT))
                swiotlb = 1;
 
        return atomic_pool_init();
index a78a5c401806c80ee63818c8d353f3ca44bf58d3..156169c6981ba09ef815308ae847d84ccc02e4f4 100644 (file)
@@ -88,21 +88,21 @@ void show_pte(struct mm_struct *mm, unsigned long addr)
                        break;
 
                pud = pud_offset(pgd, addr);
-               printk(", *pud=%016llx", pud_val(*pud));
+               pr_cont(", *pud=%016llx", pud_val(*pud));
                if (pud_none(*pud) || pud_bad(*pud))
                        break;
 
                pmd = pmd_offset(pud, addr);
-               printk(", *pmd=%016llx", pmd_val(*pmd));
+               pr_cont(", *pmd=%016llx", pmd_val(*pmd));
                if (pmd_none(*pmd) || pmd_bad(*pmd))
                        break;
 
                pte = pte_offset_map(pmd, addr);
-               printk(", *pte=%016llx", pte_val(*pte));
+               pr_cont(", *pte=%016llx", pte_val(*pte));
                pte_unmap(pte);
        } while(0);
 
-       printk("\n");
+       pr_cont("\n");
 }
 
 #ifdef CONFIG_ARM64_HW_AFDBM
index 212c4d1e2f26df7f291270fb461abac912ce7161..716d1226ba6925babc28bc6c14dc175e739c7f57 100644 (file)
@@ -401,7 +401,8 @@ static void __init free_unused_memmap(void)
  */
 void __init mem_init(void)
 {
-       if (swiotlb_force || max_pfn > (arm64_dma_phys_limit >> PAGE_SHIFT))
+       if (swiotlb_force == SWIOTLB_FORCE ||
+           max_pfn > (arm64_dma_phys_limit >> PAGE_SHIFT))
                swiotlb_init(1);
 
        set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
index 47cf3f9d89ffffb13ce020b9197d4ad962892681..947830a459d2ca6ef83fb92a4d168b55ea5c659d 100644 (file)
@@ -49,7 +49,7 @@
 
 #include <linux/linkage.h>
 #include <asm/assembler.h>
-#include <linux/uaccess.h>
+#include <asm/asm-uaccess.h>
 #include <xen/interface/xen.h>
 
 
index 6a02b3a3fa6513a4f517c31c88aa435ddc766f3a..e92fb190e2d628e878b209a14e8c8be551510654 100644 (file)
@@ -521,6 +521,9 @@ void *kvm_mips_build_exit(void *addr)
        uasm_i_and(&p, V0, V0, AT);
        uasm_i_lui(&p, AT, ST0_CU0 >> 16);
        uasm_i_or(&p, V0, V0, AT);
+#ifdef CONFIG_64BIT
+       uasm_i_ori(&p, V0, V0, ST0_SX | ST0_UX);
+#endif
        uasm_i_mtc0(&p, V0, C0_STATUS);
        uasm_i_ehb(&p);
 
@@ -643,7 +646,7 @@ static void *kvm_mips_build_ret_to_guest(void *addr)
 
        /* Setup status register for running guest in UM */
        uasm_i_ori(&p, V1, V1, ST0_EXL | KSU_USER | ST0_IE);
-       UASM_i_LA(&p, AT, ~(ST0_CU0 | ST0_MX));
+       UASM_i_LA(&p, AT, ~(ST0_CU0 | ST0_MX | ST0_SX | ST0_UX));
        uasm_i_and(&p, V1, V1, AT);
        uasm_i_mtc0(&p, V1, C0_STATUS);
        uasm_i_ehb(&p);
index 06a60b19acfb53c2788ba6b9c79de983bb6fe43e..29ec9ab3fd5570737caa7f5c63768177a5caffa7 100644 (file)
@@ -360,8 +360,8 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id)
        dump_handler("kvm_exit", gebase + 0x2000, vcpu->arch.vcpu_run);
 
        /* Invalidate the icache for these ranges */
-       local_flush_icache_range((unsigned long)gebase,
-                               (unsigned long)gebase + ALIGN(size, PAGE_SIZE));
+       flush_icache_range((unsigned long)gebase,
+                          (unsigned long)gebase + ALIGN(size, PAGE_SIZE));
 
        /*
         * Allocate comm page for guest kernel, a TLB will be reserved for
index ef31fc24344e983c67b6f2b9c185a9275d456ed1..552544616b9d93ab6838a998ffb0b6ad9a7f1574 100644 (file)
@@ -44,6 +44,8 @@ SECTIONS
         /* Read-only sections, merged into text segment: */
         . = LOAD_BASE ;
 
+       _text = .;
+
        /* _s_kernel_ro must be page aligned */
        . = ALIGN(PAGE_SIZE);
        _s_kernel_ro = .;
index 7581330ea35be1e15498cf5cef9bbcbd3889aab9..88fe0aad4390b10830ce1bc1be62925d4b2d4bbc 100644 (file)
@@ -49,7 +49,6 @@ struct thread_info {
 #define TIF_POLLING_NRFLAG     3       /* true if poll_idle() is polling TIF_NEED_RESCHED */
 #define TIF_32BIT               4       /* 32 bit binary */
 #define TIF_MEMDIE             5       /* is terminating due to OOM killer */
-#define TIF_RESTORE_SIGMASK    6       /* restore saved signal mask */
 #define TIF_SYSCALL_AUDIT      7       /* syscall auditing active */
 #define TIF_NOTIFY_RESUME      8       /* callback before returning to user */
 #define TIF_SINGLESTEP         9       /* single stepping? */
index da0d9cb63403d4b3b4f9647cf8415dd11db30fd3..1e22f981cd81fb0cf840407210d499cab0319e0e 100644 (file)
@@ -235,9 +235,26 @@ void __init time_init(void)
 
        cr16_hz = 100 * PAGE0->mem_10msec;  /* Hz */
 
-       /* register at clocksource framework */
-       clocksource_register_hz(&clocksource_cr16, cr16_hz);
-
        /* register as sched_clock source */
        sched_clock_register(read_cr16_sched_clock, BITS_PER_LONG, cr16_hz);
 }
+
+static int __init init_cr16_clocksource(void)
+{
+       /*
+        * The cr16 interval timers are not syncronized across CPUs, so mark
+        * them unstable and lower rating on SMP systems.
+        */
+       if (num_online_cpus() > 1) {
+               clocksource_cr16.flags = CLOCK_SOURCE_UNSTABLE;
+               clocksource_cr16.rating = 0;
+       }
+
+       /* register at clocksource framework */
+       clocksource_register_hz(&clocksource_cr16,
+               100 * PAGE0->mem_10msec);
+
+       return 0;
+}
+
+device_initcall(init_cr16_clocksource);
index 8ff9253930af776b5ca7d408f4bd134cdb88c9b0..1a0b4f63f0e90fbb4e4cb58ea6da95d326bcba3c 100644 (file)
@@ -234,7 +234,7 @@ show_signal_msg(struct pt_regs *regs, unsigned long code,
            tsk->comm, code, address);
        print_vma_addr(KERN_CONT " in ", regs->iaoq[0]);
 
-       pr_cont(" trap #%lu: %s%c", code, trap_name(code),
+       pr_cont("\ntrap #%lu: %s%c", code, trap_name(code),
                vma ? ',':'\n');
 
        if (vma)
diff --git a/arch/s390/include/asm/asm-prototypes.h b/arch/s390/include/asm/asm-prototypes.h
new file mode 100644 (file)
index 0000000..2c3413b
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _ASM_S390_PROTOTYPES_H
+
+#include <linux/kvm_host.h>
+#include <linux/ftrace.h>
+#include <asm/fpu/api.h>
+#include <asm-generic/asm-prototypes.h>
+
+#endif /* _ASM_S390_PROTOTYPES_H */
index 6b246aadf311706849341dac2d0eafee293340f1..1b5c5ee9fc1b60878844cd67cb6a6cb12800a563 100644 (file)
@@ -94,7 +94,7 @@ static void update_mt_scaling(void)
  * Update process times based on virtual cpu times stored by entry.S
  * to the lowcore fields user_timer, system_timer & steal_clock.
  */
-static int do_account_vtime(struct task_struct *tsk, int hardirq_offset)
+static int do_account_vtime(struct task_struct *tsk)
 {
        u64 timer, clock, user, system, steal;
        u64 user_scaled, system_scaled;
@@ -138,7 +138,7 @@ static int do_account_vtime(struct task_struct *tsk, int hardirq_offset)
        }
        account_user_time(tsk, user);
        tsk->utimescaled += user_scaled;
-       account_system_time(tsk, hardirq_offset, system);
+       account_system_time(tsk, 0, system);
        tsk->stimescaled += system_scaled;
 
        steal = S390_lowcore.steal_timer;
@@ -152,7 +152,7 @@ static int do_account_vtime(struct task_struct *tsk, int hardirq_offset)
 
 void vtime_task_switch(struct task_struct *prev)
 {
-       do_account_vtime(prev, 0);
+       do_account_vtime(prev);
        prev->thread.user_timer = S390_lowcore.user_timer;
        prev->thread.system_timer = S390_lowcore.system_timer;
        S390_lowcore.user_timer = current->thread.user_timer;
@@ -166,7 +166,7 @@ void vtime_task_switch(struct task_struct *prev)
  */
 void vtime_account_user(struct task_struct *tsk)
 {
-       if (do_account_vtime(tsk, HARDIRQ_OFFSET))
+       if (do_account_vtime(tsk))
                virt_timer_expire();
 }
 
index 68557f52b9619ddfed7681fc43c2d0530c625f0f..854022772c5be4d49d2697bd2b66b454f49c9e6f 100644 (file)
@@ -139,6 +139,19 @@ static __always_inline void __clear_bit(long nr, volatile unsigned long *addr)
        asm volatile("btr %1,%0" : ADDR : "Ir" (nr));
 }
 
+static __always_inline bool clear_bit_unlock_is_negative_byte(long nr, volatile unsigned long *addr)
+{
+       bool negative;
+       asm volatile(LOCK_PREFIX "andb %2,%1\n\t"
+               CC_SET(s)
+               : CC_OUT(s) (negative), ADDR
+               : "ir" ((char) ~(1 << nr)) : "memory");
+       return negative;
+}
+
+// Let everybody know we have it
+#define clear_bit_unlock_is_negative_byte clear_bit_unlock_is_negative_byte
+
 /*
  * __clear_bit_unlock - Clears a bit in memory
  * @nr: Bit to clear
index ffacfdcacb85eafd145228d0e0d3e4765b2177ea..a5fd137417a27278f49f3cf0b60803997176a665 100644 (file)
@@ -1182,6 +1182,9 @@ static int threshold_create_bank(unsigned int cpu, unsigned int bank)
        const char *name = get_name(bank, NULL);
        int err = 0;
 
+       if (!dev)
+               return -ENODEV;
+
        if (is_shared_bank(bank)) {
                nb = node_to_amd_nb(amd_get_nb_id(cpu));
 
index b47edb8f52566e223f89800b5b0465349331985a..410efb2c7b80028ba63367e5ed6d5e27518b0f24 100644 (file)
@@ -68,12 +68,10 @@ static struct dma_map_ops swiotlb_dma_ops = {
  */
 int __init pci_swiotlb_detect_override(void)
 {
-       int use_swiotlb = swiotlb | swiotlb_force;
-
-       if (swiotlb_force)
+       if (swiotlb_force == SWIOTLB_FORCE)
                swiotlb = 1;
 
-       return use_swiotlb;
+       return swiotlb;
 }
 IOMMU_INIT_FINISH(pci_swiotlb_detect_override,
                  pci_xen_swiotlb_detect,
index 24db5fb6f575af27d3b61a67b15ce9996158ed8b..a236decb81e4ffca42525d8a9cd3d5d8c98916a9 100644 (file)
@@ -132,12 +132,6 @@ module_param_named(preemption_timer, enable_preemption_timer, bool, S_IRUGO);
 
 #define VMX_MISC_EMULATED_PREEMPTION_TIMER_RATE 5
 
-#define VMX_VPID_EXTENT_SUPPORTED_MASK         \
-       (VMX_VPID_EXTENT_INDIVIDUAL_ADDR_BIT |  \
-       VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT |    \
-       VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT |    \
-       VMX_VPID_EXTENT_SINGLE_NON_GLOBAL_BIT)
-
 /*
  * Hyper-V requires all of these, so mark them as supported even though
  * they are just treated the same as all-context.
@@ -10473,12 +10467,12 @@ static int nested_vmx_run(struct kvm_vcpu *vcpu, bool launch)
            !nested_guest_cr4_valid(vcpu, vmcs12->guest_cr4)) {
                nested_vmx_entry_failure(vcpu, vmcs12,
                        EXIT_REASON_INVALID_STATE, ENTRY_FAIL_DEFAULT);
-               goto out;
+               return 1;
        }
        if (vmcs12->vmcs_link_pointer != -1ull) {
                nested_vmx_entry_failure(vcpu, vmcs12,
                        EXIT_REASON_INVALID_STATE, ENTRY_FAIL_VMCS_LINK_PTR);
-               goto out;
+               return 1;
        }
 
        /*
@@ -10498,7 +10492,7 @@ static int nested_vmx_run(struct kvm_vcpu *vcpu, bool launch)
                     ia32e != !!(vmcs12->guest_ia32_efer & EFER_LME))) {
                        nested_vmx_entry_failure(vcpu, vmcs12,
                                EXIT_REASON_INVALID_STATE, ENTRY_FAIL_DEFAULT);
-                       goto out;
+                       return 1;
                }
        }
 
@@ -10516,7 +10510,7 @@ static int nested_vmx_run(struct kvm_vcpu *vcpu, bool launch)
                    ia32e != !!(vmcs12->host_ia32_efer & EFER_LME)) {
                        nested_vmx_entry_failure(vcpu, vmcs12,
                                EXIT_REASON_INVALID_STATE, ENTRY_FAIL_DEFAULT);
-                       goto out;
+                       return 1;
                }
        }
 
index 51ccfe08e32ff0570517fda01277dc0085721e94..2f22810a7e0c8e3106c77849a6a3ea78a2b00a0c 100644 (file)
@@ -3070,6 +3070,8 @@ static void kvm_vcpu_ioctl_x86_get_vcpu_events(struct kvm_vcpu *vcpu,
        memset(&events->reserved, 0, sizeof(events->reserved));
 }
 
+static void kvm_set_hflags(struct kvm_vcpu *vcpu, unsigned emul_flags);
+
 static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
                                              struct kvm_vcpu_events *events)
 {
@@ -3106,10 +3108,13 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
                vcpu->arch.apic->sipi_vector = events->sipi_vector;
 
        if (events->flags & KVM_VCPUEVENT_VALID_SMM) {
+               u32 hflags = vcpu->arch.hflags;
                if (events->smi.smm)
-                       vcpu->arch.hflags |= HF_SMM_MASK;
+                       hflags |= HF_SMM_MASK;
                else
-                       vcpu->arch.hflags &= ~HF_SMM_MASK;
+                       hflags &= ~HF_SMM_MASK;
+               kvm_set_hflags(vcpu, hflags);
+
                vcpu->arch.smi_pending = events->smi.pending;
                if (events->smi.smm_inside_nmi)
                        vcpu->arch.hflags |= HF_SMM_INSIDE_NMI_MASK;
index a9fafb5c873897eec1685861180cf4ac5fd826e3..a0b36a9d5df149e6370fb3b6be0d5894bae72bd7 100644 (file)
@@ -48,7 +48,7 @@ int __init pci_xen_swiotlb_detect(void)
         * activate this IOMMU. If running as PV privileged, activate it
         * irregardless.
         */
-       if ((xen_initial_domain() || swiotlb || swiotlb_force))
+       if (xen_initial_domain() || swiotlb || swiotlb_force == SWIOTLB_FORCE)
                xen_swiotlb = 1;
 
        /* If we are running under Xen, we MUST disable the native SWIOTLB.
index 8c394e30e5fe2afcafa32b8e7fee658b5b1c27f3..f3f7b41116f7afcd3a37880d6e814b67cac0f005 100644 (file)
@@ -713,10 +713,9 @@ static void __init xen_reserve_xen_mfnlist(void)
                size = PFN_PHYS(xen_start_info->nr_p2m_frames);
        }
 
-       if (!xen_is_e820_reserved(start, size)) {
-               memblock_reserve(start, size);
+       memblock_reserve(start, size);
+       if (!xen_is_e820_reserved(start, size))
                return;
-       }
 
 #ifdef CONFIG_X86_32
        /*
@@ -727,6 +726,7 @@ static void __init xen_reserve_xen_mfnlist(void)
        BUG();
 #else
        xen_relocate_p2m();
+       memblock_free(start, size);
 #endif
 }
 
index 6e82769f4042c2f57af7976b1b7b4342eea1306d..f0a9c07b4c7a5ef9e96985a89c5c000d62a78cd0 100644 (file)
@@ -544,6 +544,8 @@ static inline bool may_queue(struct rq_wb *rwb, struct rq_wait *rqw,
  * the timer to kick off queuing again.
  */
 static void __wbt_wait(struct rq_wb *rwb, unsigned long rw, spinlock_t *lock)
+       __releases(lock)
+       __acquires(lock)
 {
        struct rq_wait *rqw = get_rq_wait(rwb, current_is_kswapd());
        DEFINE_WAIT(wait);
@@ -558,13 +560,12 @@ static void __wbt_wait(struct rq_wb *rwb, unsigned long rw, spinlock_t *lock)
                if (may_queue(rwb, rqw, &wait, rw))
                        break;
 
-               if (lock)
+               if (lock) {
                        spin_unlock_irq(lock);
-
-               io_schedule();
-
-               if (lock)
+                       io_schedule();
                        spin_lock_irq(lock);
+               } else
+                       io_schedule();
        } while (1);
 
        finish_wait(&rqw->wait, &wait);
@@ -595,7 +596,7 @@ static inline bool wbt_should_throttle(struct rq_wb *rwb, struct bio *bio)
  * in an irq held spinlock, if it holds one when calling this function.
  * If we do sleep, we'll release and re-grab it.
  */
-unsigned int wbt_wait(struct rq_wb *rwb, struct bio *bio, spinlock_t *lock)
+enum wbt_flags wbt_wait(struct rq_wb *rwb, struct bio *bio, spinlock_t *lock)
 {
        unsigned int ret = 0;
 
index f616ad74cce756fb2d0a0657d153483ed05f56d7..44e888b0b041944b44e8aa5d75619e51d7fe52a2 100644 (file)
@@ -1461,16 +1461,25 @@ static int test_acomp(struct crypto_acomp *tfm, struct comp_testvec *ctemplate,
        for (i = 0; i < ctcount; i++) {
                unsigned int dlen = COMP_BUF_SIZE;
                int ilen = ctemplate[i].inlen;
+               void *input_vec;
 
+               input_vec = kmalloc(ilen, GFP_KERNEL);
+               if (!input_vec) {
+                       ret = -ENOMEM;
+                       goto out;
+               }
+
+               memcpy(input_vec, ctemplate[i].input, ilen);
                memset(output, 0, dlen);
                init_completion(&result.completion);
-               sg_init_one(&src, ctemplate[i].input, ilen);
+               sg_init_one(&src, input_vec, ilen);
                sg_init_one(&dst, output, dlen);
 
                req = acomp_request_alloc(tfm);
                if (!req) {
                        pr_err("alg: acomp: request alloc failed for %s\n",
                               algo);
+                       kfree(input_vec);
                        ret = -ENOMEM;
                        goto out;
                }
@@ -1483,6 +1492,7 @@ static int test_acomp(struct crypto_acomp *tfm, struct comp_testvec *ctemplate,
                if (ret) {
                        pr_err("alg: acomp: compression failed on test %d for %s: ret=%d\n",
                               i + 1, algo, -ret);
+                       kfree(input_vec);
                        acomp_request_free(req);
                        goto out;
                }
@@ -1491,6 +1501,7 @@ static int test_acomp(struct crypto_acomp *tfm, struct comp_testvec *ctemplate,
                        pr_err("alg: acomp: Compression test %d failed for %s: output len = %d\n",
                               i + 1, algo, req->dlen);
                        ret = -EINVAL;
+                       kfree(input_vec);
                        acomp_request_free(req);
                        goto out;
                }
@@ -1500,26 +1511,37 @@ static int test_acomp(struct crypto_acomp *tfm, struct comp_testvec *ctemplate,
                               i + 1, algo);
                        hexdump(output, req->dlen);
                        ret = -EINVAL;
+                       kfree(input_vec);
                        acomp_request_free(req);
                        goto out;
                }
 
+               kfree(input_vec);
                acomp_request_free(req);
        }
 
        for (i = 0; i < dtcount; i++) {
                unsigned int dlen = COMP_BUF_SIZE;
                int ilen = dtemplate[i].inlen;
+               void *input_vec;
+
+               input_vec = kmalloc(ilen, GFP_KERNEL);
+               if (!input_vec) {
+                       ret = -ENOMEM;
+                       goto out;
+               }
 
+               memcpy(input_vec, dtemplate[i].input, ilen);
                memset(output, 0, dlen);
                init_completion(&result.completion);
-               sg_init_one(&src, dtemplate[i].input, ilen);
+               sg_init_one(&src, input_vec, ilen);
                sg_init_one(&dst, output, dlen);
 
                req = acomp_request_alloc(tfm);
                if (!req) {
                        pr_err("alg: acomp: request alloc failed for %s\n",
                               algo);
+                       kfree(input_vec);
                        ret = -ENOMEM;
                        goto out;
                }
@@ -1532,6 +1554,7 @@ static int test_acomp(struct crypto_acomp *tfm, struct comp_testvec *ctemplate,
                if (ret) {
                        pr_err("alg: acomp: decompression failed on test %d for %s: ret=%d\n",
                               i + 1, algo, -ret);
+                       kfree(input_vec);
                        acomp_request_free(req);
                        goto out;
                }
@@ -1540,6 +1563,7 @@ static int test_acomp(struct crypto_acomp *tfm, struct comp_testvec *ctemplate,
                        pr_err("alg: acomp: Decompression test %d failed for %s: output len = %d\n",
                               i + 1, algo, req->dlen);
                        ret = -EINVAL;
+                       kfree(input_vec);
                        acomp_request_free(req);
                        goto out;
                }
@@ -1549,10 +1573,12 @@ static int test_acomp(struct crypto_acomp *tfm, struct comp_testvec *ctemplate,
                               i + 1, algo);
                        hexdump(output, req->dlen);
                        ret = -EINVAL;
+                       kfree(input_vec);
                        acomp_request_free(req);
                        goto out;
                }
 
+               kfree(input_vec);
                acomp_request_free(req);
        }
 
index 13caebd679f5b07503941f1023cf468901aeec36..8c4e0a18460a78df600067da69537e6256d6bc1c 100644 (file)
@@ -114,7 +114,7 @@ void __init acpi_watchdog_init(void)
        pdev = platform_device_register_simple("wdat_wdt", PLATFORM_DEVID_NONE,
                                               resources, nresources);
        if (IS_ERR(pdev))
-               pr_err("Failed to create platform device\n");
+               pr_err("Device creation failed: %ld\n", PTR_ERR(pdev));
 
        kfree(resources);
 
index f8d65647ea790dd161b07221b9be2bdead4447d0..fb19e1cdb6415ac8d1913e7017106911dcb7a7dd 100644 (file)
@@ -98,7 +98,15 @@ static int find_child_checks(struct acpi_device *adev, bool check_children)
        if (check_children && list_empty(&adev->children))
                return -ENODEV;
 
-       return sta_present ? FIND_CHILD_MAX_SCORE : FIND_CHILD_MIN_SCORE;
+       /*
+        * If the device has a _HID (or _CID) returning a valid ACPI/PNP
+        * device ID, it is better to make it look less attractive here, so that
+        * the other device with the same _ADR value (that may not have a valid
+        * device ID) can be matched going forward.  [This means a second spec
+        * violation in a row, so whatever we do here is best effort anyway.]
+        */
+       return sta_present && list_empty(&adev->pnp.ids) ?
+                       FIND_CHILD_MAX_SCORE : FIND_CHILD_MIN_SCORE;
 }
 
 struct acpi_device *acpi_find_child_device(struct acpi_device *parent,
@@ -250,7 +258,6 @@ int acpi_bind_one(struct device *dev, struct acpi_device *acpi_dev)
        return 0;
 
  err:
-       acpi_dma_deconfigure(dev);
        ACPI_COMPANION_SET(dev, NULL);
        put_device(dev);
        put_device(&acpi_dev->dev);
index 1b41a2739dac1dcab72aa352e9add209b2313711..0c452265c11110213ddde5c5c4440e52d2a523a5 100644 (file)
@@ -37,6 +37,7 @@ void acpi_amba_init(void);
 static inline void acpi_amba_init(void) {}
 #endif
 int acpi_sysfs_init(void);
+void acpi_gpe_apply_masked_gpes(void);
 void acpi_container_init(void);
 void acpi_memory_hotplug_init(void);
 #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC
index 45dec874ea55b820281457a3ae5de2fe1f12403c..192691880d55c9499e1d77e68058a56d8e5318f3 100644 (file)
@@ -2074,6 +2074,7 @@ int __init acpi_scan_init(void)
                }
        }
 
+       acpi_gpe_apply_masked_gpes();
        acpi_update_all_gpes();
        acpi_ec_ecdt_start();
 
index 703c26e7022cbf186d9a1ed3a60cd25c6fd1c049..cf05ae973381178cc066e1c235c38afb419e1f01 100644 (file)
@@ -708,6 +708,62 @@ static ssize_t counter_set(struct kobject *kobj,
        return result ? result : size;
 }
 
+/*
+ * A Quirk Mechanism for GPE Flooding Prevention:
+ *
+ * Quirks may be needed to prevent GPE flooding on a specific GPE. The
+ * flooding typically cannot be detected and automatically prevented by
+ * ACPI_GPE_DISPATCH_NONE check because there is a _Lxx/_Exx prepared in
+ * the AML tables. This normally indicates a feature gap in Linux, thus
+ * instead of providing endless quirk tables, we provide a boot parameter
+ * for those who want this quirk. For example, if the users want to prevent
+ * the GPE flooding for GPE 00, they need to specify the following boot
+ * parameter:
+ *   acpi_mask_gpe=0x00
+ * The masking status can be modified by the following runtime controlling
+ * interface:
+ *   echo unmask > /sys/firmware/acpi/interrupts/gpe00
+ */
+
+/*
+ * Currently, the GPE flooding prevention only supports to mask the GPEs
+ * numbered from 00 to 7f.
+ */
+#define ACPI_MASKABLE_GPE_MAX  0x80
+
+static u64 __initdata acpi_masked_gpes;
+
+static int __init acpi_gpe_set_masked_gpes(char *val)
+{
+       u8 gpe;
+
+       if (kstrtou8(val, 0, &gpe) || gpe > ACPI_MASKABLE_GPE_MAX)
+               return -EINVAL;
+       acpi_masked_gpes |= ((u64)1<<gpe);
+
+       return 1;
+}
+__setup("acpi_mask_gpe=", acpi_gpe_set_masked_gpes);
+
+void __init acpi_gpe_apply_masked_gpes(void)
+{
+       acpi_handle handle;
+       acpi_status status;
+       u8 gpe;
+
+       for (gpe = 0;
+            gpe < min_t(u8, ACPI_MASKABLE_GPE_MAX, acpi_current_gpe_count);
+            gpe++) {
+               if (acpi_masked_gpes & ((u64)1<<gpe)) {
+                       status = acpi_get_gpe_device(gpe, &handle);
+                       if (ACPI_SUCCESS(status)) {
+                               pr_info("Masking GPE 0x%x.\n", gpe);
+                               (void)acpi_mask_gpe(handle, gpe, TRUE);
+                       }
+               }
+       }
+}
+
 void acpi_irq_stats_init(void)
 {
        acpi_status status;
index a5e1262b964b8f987480152cb5feb0dbc9d81e47..2997026b4dfb00c1daec88f1f18264656a61ffb0 100644 (file)
@@ -626,6 +626,7 @@ static int genpd_runtime_resume(struct device *dev)
 
  out:
        /* Measure resume latency. */
+       time_start = 0;
        if (timed && runtime_pm)
                time_start = ktime_get();
 
index 5eb05dbf59b84d27d79106adeb7405d15de1433a..fc585f370549a336ea12cc5c323dbc77aec69825 100644 (file)
@@ -768,5 +768,5 @@ static void __init stm32f4_rcc_init(struct device_node *np)
        kfree(clks);
        iounmap(base);
 }
-CLK_OF_DECLARE(stm32f42xx_rcc, "st,stm32f42xx-rcc", stm32f4_rcc_init);
-CLK_OF_DECLARE(stm32f46xx_rcc, "st,stm32f469-rcc", stm32f4_rcc_init);
+CLK_OF_DECLARE_DRIVER(stm32f42xx_rcc, "st,stm32f42xx-rcc", stm32f4_rcc_init);
+CLK_OF_DECLARE_DRIVER(stm32f46xx_rcc, "st,stm32f469-rcc", stm32f4_rcc_init);
index 9375777776d994071a476d2e198be933838db685..b533f99550e1b97dd55944a85cbf5d64153309f5 100644 (file)
  * @smstpcr: module stop control register
  * @mstpsr: module stop status register (optional)
  * @lock: protects writes to SMSTPCR
+ * @width_8bit: registers are 8-bit, not 32-bit
  */
 struct mstp_clock_group {
        struct clk_onecell_data data;
        void __iomem *smstpcr;
        void __iomem *mstpsr;
        spinlock_t lock;
+       bool width_8bit;
 };
 
 /**
@@ -59,6 +61,18 @@ struct mstp_clock {
 
 #define to_mstp_clock(_hw) container_of(_hw, struct mstp_clock, hw)
 
+static inline u32 cpg_mstp_read(struct mstp_clock_group *group,
+                               u32 __iomem *reg)
+{
+       return group->width_8bit ? readb(reg) : clk_readl(reg);
+}
+
+static inline void cpg_mstp_write(struct mstp_clock_group *group, u32 val,
+                                 u32 __iomem *reg)
+{
+       group->width_8bit ? writeb(val, reg) : clk_writel(val, reg);
+}
+
 static int cpg_mstp_clock_endisable(struct clk_hw *hw, bool enable)
 {
        struct mstp_clock *clock = to_mstp_clock(hw);
@@ -70,12 +84,12 @@ static int cpg_mstp_clock_endisable(struct clk_hw *hw, bool enable)
 
        spin_lock_irqsave(&group->lock, flags);
 
-       value = clk_readl(group->smstpcr);
+       value = cpg_mstp_read(group, group->smstpcr);
        if (enable)
                value &= ~bitmask;
        else
                value |= bitmask;
-       clk_writel(value, group->smstpcr);
+       cpg_mstp_write(group, value, group->smstpcr);
 
        spin_unlock_irqrestore(&group->lock, flags);
 
@@ -83,7 +97,7 @@ static int cpg_mstp_clock_endisable(struct clk_hw *hw, bool enable)
                return 0;
 
        for (i = 1000; i > 0; --i) {
-               if (!(clk_readl(group->mstpsr) & bitmask))
+               if (!(cpg_mstp_read(group, group->mstpsr) & bitmask))
                        break;
                cpu_relax();
        }
@@ -114,9 +128,9 @@ static int cpg_mstp_clock_is_enabled(struct clk_hw *hw)
        u32 value;
 
        if (group->mstpsr)
-               value = clk_readl(group->mstpsr);
+               value = cpg_mstp_read(group, group->mstpsr);
        else
-               value = clk_readl(group->smstpcr);
+               value = cpg_mstp_read(group, group->smstpcr);
 
        return !(value & BIT(clock->bit_index));
 }
@@ -188,6 +202,9 @@ static void __init cpg_mstp_clocks_init(struct device_node *np)
                return;
        }
 
+       if (of_device_is_compatible(np, "renesas,r7s72100-mstp-clocks"))
+               group->width_8bit = true;
+
        for (i = 0; i < MSTP_MAX_CLOCKS; ++i)
                clks[i] = ERR_PTR(-ENOENT);
 
index bc97b6a4b1cf67a4897a412ff785e1350b4ee0ce..7fcaf26e8f819b7665f6e9bf83c07a1b705b1d65 100644 (file)
@@ -26,6 +26,8 @@ static const struct of_device_id machines[] __initconst = {
        { .compatible = "allwinner,sun8i-a83t", },
        { .compatible = "allwinner,sun8i-h3", },
 
+       { .compatible = "apm,xgene-shadowcat", },
+
        { .compatible = "arm,integrator-ap", },
        { .compatible = "arm,integrator-cp", },
 
index 6acbd4af632e2bdab99f984cd0b311e5f7a32e29..f91c25718d164c9d9339acf671d67937995fe076 100644 (file)
@@ -857,13 +857,13 @@ static struct freq_attr *hwp_cpufreq_attrs[] = {
        NULL,
 };
 
-static void intel_pstate_hwp_set(const struct cpumask *cpumask)
+static void intel_pstate_hwp_set(struct cpufreq_policy *policy)
 {
        int min, hw_min, max, hw_max, cpu, range, adj_range;
        struct perf_limits *perf_limits = limits;
        u64 value, cap;
 
-       for_each_cpu(cpu, cpumask) {
+       for_each_cpu(cpu, policy->cpus) {
                int max_perf_pct, min_perf_pct;
                struct cpudata *cpu_data = all_cpu_data[cpu];
                s16 epp;
@@ -949,7 +949,7 @@ static void intel_pstate_hwp_set(const struct cpumask *cpumask)
 static int intel_pstate_hwp_set_policy(struct cpufreq_policy *policy)
 {
        if (hwp_active)
-               intel_pstate_hwp_set(policy->cpus);
+               intel_pstate_hwp_set(policy);
 
        return 0;
 }
@@ -968,19 +968,28 @@ static int intel_pstate_hwp_save_state(struct cpufreq_policy *policy)
 
 static int intel_pstate_resume(struct cpufreq_policy *policy)
 {
+       int ret;
+
        if (!hwp_active)
                return 0;
 
+       mutex_lock(&intel_pstate_limits_lock);
+
        all_cpu_data[policy->cpu]->epp_policy = 0;
 
-       return intel_pstate_hwp_set_policy(policy);
+       ret = intel_pstate_hwp_set_policy(policy);
+
+       mutex_unlock(&intel_pstate_limits_lock);
+
+       return ret;
 }
 
-static void intel_pstate_hwp_set_online_cpus(void)
+static void intel_pstate_update_policies(void)
 {
-       get_online_cpus();
-       intel_pstate_hwp_set(cpu_online_mask);
-       put_online_cpus();
+       int cpu;
+
+       for_each_possible_cpu(cpu)
+               cpufreq_update_policy(cpu);
 }
 
 /************************** debugfs begin ************************/
@@ -1018,10 +1027,6 @@ static void __init intel_pstate_debug_expose_params(void)
        struct dentry *debugfs_parent;
        int i = 0;
 
-       if (hwp_active ||
-           pstate_funcs.get_target_pstate == get_target_pstate_use_cpu_load)
-               return;
-
        debugfs_parent = debugfs_create_dir("pstate_snb", NULL);
        if (IS_ERR_OR_NULL(debugfs_parent))
                return;
@@ -1105,11 +1110,10 @@ static ssize_t store_no_turbo(struct kobject *a, struct attribute *b,
 
        limits->no_turbo = clamp_t(int, input, 0, 1);
 
-       if (hwp_active)
-               intel_pstate_hwp_set_online_cpus();
-
        mutex_unlock(&intel_pstate_limits_lock);
 
+       intel_pstate_update_policies();
+
        return count;
 }
 
@@ -1134,11 +1138,10 @@ static ssize_t store_max_perf_pct(struct kobject *a, struct attribute *b,
                                   limits->max_perf_pct);
        limits->max_perf = div_ext_fp(limits->max_perf_pct, 100);
 
-       if (hwp_active)
-               intel_pstate_hwp_set_online_cpus();
-
        mutex_unlock(&intel_pstate_limits_lock);
 
+       intel_pstate_update_policies();
+
        return count;
 }
 
@@ -1163,11 +1166,10 @@ static ssize_t store_min_perf_pct(struct kobject *a, struct attribute *b,
                                   limits->min_perf_pct);
        limits->min_perf = div_ext_fp(limits->min_perf_pct, 100);
 
-       if (hwp_active)
-               intel_pstate_hwp_set_online_cpus();
-
        mutex_unlock(&intel_pstate_limits_lock);
 
+       intel_pstate_update_policies();
+
        return count;
 }
 
@@ -2153,8 +2155,12 @@ static int intel_cpufreq_verify_policy(struct cpufreq_policy *policy)
        if (per_cpu_limits)
                perf_limits = cpu->perf_limits;
 
+       mutex_lock(&intel_pstate_limits_lock);
+
        intel_pstate_update_perf_limits(policy, perf_limits);
 
+       mutex_unlock(&intel_pstate_limits_lock);
+
        return 0;
 }
 
@@ -2487,7 +2493,10 @@ static int __init intel_pstate_init(void)
        if (rc)
                goto out;
 
-       intel_pstate_debug_expose_params();
+       if (intel_pstate_driver == &intel_pstate && !hwp_active &&
+           pstate_funcs.get_target_pstate != get_target_pstate_use_cpu_load)
+               intel_pstate_debug_expose_params();
+
        intel_pstate_sysfs_expose_params();
 
        if (hwp_active)
index a768da7138a1cd4a0a79771ad99b2f5436f481c3..b7872f62f67475fdc6889420c38de4f8418ffafd 100644 (file)
@@ -273,7 +273,8 @@ struct mv_cesa_op_ctx {
 #define CESA_TDMA_SRC_IN_SRAM                  BIT(30)
 #define CESA_TDMA_END_OF_REQ                   BIT(29)
 #define CESA_TDMA_BREAK_CHAIN                  BIT(28)
-#define CESA_TDMA_TYPE_MSK                     GENMASK(27, 0)
+#define CESA_TDMA_SET_STATE                    BIT(27)
+#define CESA_TDMA_TYPE_MSK                     GENMASK(26, 0)
 #define CESA_TDMA_DUMMY                                0
 #define CESA_TDMA_DATA                         1
 #define CESA_TDMA_OP                           2
index 317cf029c0cf1beab3f2b5f0ab41cf187626e24b..77c0fb936f4794363f478b7bc0b8d23dd10d880f 100644 (file)
@@ -280,13 +280,32 @@ static void mv_cesa_ahash_std_prepare(struct ahash_request *req)
        sreq->offset = 0;
 }
 
+static void mv_cesa_ahash_dma_step(struct ahash_request *req)
+{
+       struct mv_cesa_ahash_req *creq = ahash_request_ctx(req);
+       struct mv_cesa_req *base = &creq->base;
+
+       /* We must explicitly set the digest state. */
+       if (base->chain.first->flags & CESA_TDMA_SET_STATE) {
+               struct mv_cesa_engine *engine = base->engine;
+               int i;
+
+               /* Set the hash state in the IVDIG regs. */
+               for (i = 0; i < ARRAY_SIZE(creq->state); i++)
+                       writel_relaxed(creq->state[i], engine->regs +
+                                      CESA_IVDIG(i));
+       }
+
+       mv_cesa_dma_step(base);
+}
+
 static void mv_cesa_ahash_step(struct crypto_async_request *req)
 {
        struct ahash_request *ahashreq = ahash_request_cast(req);
        struct mv_cesa_ahash_req *creq = ahash_request_ctx(ahashreq);
 
        if (mv_cesa_req_get_type(&creq->base) == CESA_DMA_REQ)
-               mv_cesa_dma_step(&creq->base);
+               mv_cesa_ahash_dma_step(ahashreq);
        else
                mv_cesa_ahash_std_step(ahashreq);
 }
@@ -584,12 +603,16 @@ static int mv_cesa_ahash_dma_req_init(struct ahash_request *req)
        struct mv_cesa_ahash_dma_iter iter;
        struct mv_cesa_op_ctx *op = NULL;
        unsigned int frag_len;
+       bool set_state = false;
        int ret;
        u32 type;
 
        basereq->chain.first = NULL;
        basereq->chain.last = NULL;
 
+       if (!mv_cesa_mac_op_is_first_frag(&creq->op_tmpl))
+               set_state = true;
+
        if (creq->src_nents) {
                ret = dma_map_sg(cesa_dev->dev, req->src, creq->src_nents,
                                 DMA_TO_DEVICE);
@@ -683,6 +706,15 @@ static int mv_cesa_ahash_dma_req_init(struct ahash_request *req)
        if (type != CESA_TDMA_RESULT)
                basereq->chain.last->flags |= CESA_TDMA_BREAK_CHAIN;
 
+       if (set_state) {
+               /*
+                * Put the CESA_TDMA_SET_STATE flag on the first tdma desc to
+                * let the step logic know that the IVDIG registers should be
+                * explicitly set before launching a TDMA chain.
+                */
+               basereq->chain.first->flags |= CESA_TDMA_SET_STATE;
+       }
+
        return 0;
 
 err_free_tdma:
index 4416b88eca708aff6aadbff76ec04d95f6b40dbb..c76375ff376d39e5dc2e74463a310231b58f4c86 100644 (file)
@@ -109,7 +109,14 @@ void mv_cesa_tdma_chain(struct mv_cesa_engine *engine,
                last->next = dreq->chain.first;
                engine->chain.last = dreq->chain.last;
 
-               if (!(last->flags & CESA_TDMA_BREAK_CHAIN))
+               /*
+                * Break the DMA chain if the CESA_TDMA_BREAK_CHAIN is set on
+                * the last element of the current chain, or if the request
+                * being queued needs the IV regs to be set before lauching
+                * the request.
+                */
+               if (!(last->flags & CESA_TDMA_BREAK_CHAIN) &&
+                   !(dreq->chain.first->flags & CESA_TDMA_SET_STATE))
                        last->next_dma = dreq->chain.first->cur_dma;
        }
 }
index a324801d6a664cd707d70d673611cade4d43bd9d..47206a21bb901f424c4e331c9db6eaedef69d93d 100644 (file)
@@ -593,11 +593,16 @@ struct devfreq *devfreq_add_device(struct device *dev,
        list_add(&devfreq->node, &devfreq_list);
 
        governor = find_devfreq_governor(devfreq->governor_name);
-       if (!IS_ERR(governor))
-               devfreq->governor = governor;
-       if (devfreq->governor)
-               err = devfreq->governor->event_handler(devfreq,
-                                       DEVFREQ_GOV_START, NULL);
+       if (IS_ERR(governor)) {
+               dev_err(dev, "%s: Unable to find governor for the device\n",
+                       __func__);
+               err = PTR_ERR(governor);
+               goto err_init;
+       }
+
+       devfreq->governor = governor;
+       err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START,
+                                               NULL);
        if (err) {
                dev_err(dev, "%s: Unable to start governor for the device\n",
                        __func__);
index a8ed7792ece2f199adaedd588b86375c49da6f17..9af86f46fbec0fc0779e4cf211c16227b804510d 100644 (file)
@@ -497,7 +497,7 @@ static int exynos_bus_probe(struct platform_device *pdev)
        if (IS_ERR(bus->devfreq)) {
                dev_err(dev,
                        "failed to add devfreq dev with passive governor\n");
-               ret = -EPROBE_DEFER;
+               ret = PTR_ERR(bus->devfreq);
                goto err;
        }
 
index 70e13230d8db835ec201590762ea0ac5331f7ca2..9ad0b1934be9a31173ede1ed6c1c3705cc0c1e05 100644 (file)
@@ -721,11 +721,17 @@ static int scpi_sensor_get_value(u16 sensor, u64 *val)
 
        ret = scpi_send_message(CMD_SENSOR_VALUE, &id, sizeof(id),
                                &buf, sizeof(buf));
-       if (!ret)
+       if (ret)
+               return ret;
+
+       if (scpi_info->is_legacy)
+               /* only 32-bits supported, hi_val can be junk */
+               *val = le32_to_cpu(buf.lo_val);
+       else
                *val = (u64)le32_to_cpu(buf.hi_val) << 32 |
                        le32_to_cpu(buf.lo_val);
 
-       return ret;
+       return 0;
 }
 
 static int scpi_device_get_power_state(u16 dev_id)
index 44bdb78f837b4d89f2aaef6e7d0764b8c2783d87..29d58feaf67535d0efc470339de02124ed92cd44 100644 (file)
@@ -270,8 +270,7 @@ static int suspend_test_thread(void *arg)
        struct cpuidle_device *dev;
        struct cpuidle_driver *drv;
        /* No need for an actual callback, we just want to wake up the CPU. */
-       struct timer_list wakeup_timer =
-               TIMER_INITIALIZER(dummy_callback, 0, 0);
+       struct timer_list wakeup_timer;
 
        /* Wait for the main thread to give the start signal. */
        wait_for_completion(&suspend_threads_started);
@@ -287,6 +286,7 @@ static int suspend_test_thread(void *arg)
        pr_info("CPU %d entering suspend cycles, states 1 through %d\n",
                cpu, drv->state_count - 1);
 
+       setup_timer_on_stack(&wakeup_timer, dummy_callback, 0);
        for (i = 0; i < NUM_SUSPEND_CYCLE; ++i) {
                int index;
                /*
index db516382a4d4b2ae375f41cde6cf3f8bfe5b5bb9..711c31c8d8b46c3c51e4f93a741daecf4b28ce31 100644 (file)
@@ -123,6 +123,7 @@ static int emulate_pci_command_write(struct intel_vgpu *vgpu,
        u8 changed = old ^ new;
        int ret;
 
+       memcpy(vgpu_cfg_space(vgpu) + offset, p_data, bytes);
        if (!(changed & PCI_COMMAND_MEMORY))
                return 0;
 
@@ -142,7 +143,6 @@ static int emulate_pci_command_write(struct intel_vgpu *vgpu,
                        return ret;
        }
 
-       memcpy(vgpu_cfg_space(vgpu) + offset, p_data, bytes);
        return 0;
 }
 
@@ -240,7 +240,7 @@ int intel_vgpu_emulate_cfg_write(struct intel_vgpu *vgpu, unsigned int offset,
        if (WARN_ON(bytes > 4))
                return -EINVAL;
 
-       if (WARN_ON(offset + bytes >= INTEL_GVT_MAX_CFG_SPACE_SZ))
+       if (WARN_ON(offset + bytes > INTEL_GVT_MAX_CFG_SPACE_SZ))
                return -EINVAL;
 
        /* First check if it's PCI_COMMAND */
index 7eaaf1c9ed2bf47e935bf0592a4c00658838086d..6c5fdf5b2ce2a9d407839a3a28a7e067a5630d8d 100644 (file)
@@ -1998,6 +1998,8 @@ int intel_vgpu_init_gtt(struct intel_vgpu *vgpu)
        INIT_LIST_HEAD(&gtt->oos_page_list_head);
        INIT_LIST_HEAD(&gtt->post_shadow_list_head);
 
+       intel_vgpu_reset_ggtt(vgpu);
+
        ggtt_mm = intel_vgpu_create_mm(vgpu, INTEL_GVT_MM_GGTT,
                        NULL, 1, 0);
        if (IS_ERR(ggtt_mm)) {
@@ -2206,6 +2208,7 @@ int intel_vgpu_g2v_destroy_ppgtt_mm(struct intel_vgpu *vgpu,
 int intel_gvt_init_gtt(struct intel_gvt *gvt)
 {
        int ret;
+       void *page_addr;
 
        gvt_dbg_core("init gtt\n");
 
@@ -2218,6 +2221,23 @@ int intel_gvt_init_gtt(struct intel_gvt *gvt)
                return -ENODEV;
        }
 
+       gvt->gtt.scratch_ggtt_page =
+               alloc_page(GFP_KERNEL | GFP_ATOMIC | __GFP_ZERO);
+       if (!gvt->gtt.scratch_ggtt_page) {
+               gvt_err("fail to allocate scratch ggtt page\n");
+               return -ENOMEM;
+       }
+
+       page_addr = page_address(gvt->gtt.scratch_ggtt_page);
+
+       gvt->gtt.scratch_ggtt_mfn =
+               intel_gvt_hypervisor_virt_to_mfn(page_addr);
+       if (gvt->gtt.scratch_ggtt_mfn == INTEL_GVT_INVALID_ADDR) {
+               gvt_err("fail to translate scratch ggtt page\n");
+               __free_page(gvt->gtt.scratch_ggtt_page);
+               return -EFAULT;
+       }
+
        if (enable_out_of_sync) {
                ret = setup_spt_oos(gvt);
                if (ret) {
@@ -2239,6 +2259,41 @@ int intel_gvt_init_gtt(struct intel_gvt *gvt)
  */
 void intel_gvt_clean_gtt(struct intel_gvt *gvt)
 {
+       __free_page(gvt->gtt.scratch_ggtt_page);
+
        if (enable_out_of_sync)
                clean_spt_oos(gvt);
 }
+
+/**
+ * intel_vgpu_reset_ggtt - reset the GGTT entry
+ * @vgpu: a vGPU
+ *
+ * This function is called at the vGPU create stage
+ * to reset all the GGTT entries.
+ *
+ */
+void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu)
+{
+       struct intel_gvt *gvt = vgpu->gvt;
+       struct intel_gvt_gtt_pte_ops *ops = vgpu->gvt->gtt.pte_ops;
+       u32 index;
+       u32 offset;
+       u32 num_entries;
+       struct intel_gvt_gtt_entry e;
+
+       memset(&e, 0, sizeof(struct intel_gvt_gtt_entry));
+       e.type = GTT_TYPE_GGTT_PTE;
+       ops->set_pfn(&e, gvt->gtt.scratch_ggtt_mfn);
+       e.val64 |= _PAGE_PRESENT;
+
+       index = vgpu_aperture_gmadr_base(vgpu) >> PAGE_SHIFT;
+       num_entries = vgpu_aperture_sz(vgpu) >> PAGE_SHIFT;
+       for (offset = 0; offset < num_entries; offset++)
+               ops->set_entry(NULL, &e, index + offset, false, 0, vgpu);
+
+       index = vgpu_hidden_gmadr_base(vgpu) >> PAGE_SHIFT;
+       num_entries = vgpu_hidden_sz(vgpu) >> PAGE_SHIFT;
+       for (offset = 0; offset < num_entries; offset++)
+               ops->set_entry(NULL, &e, index + offset, false, 0, vgpu);
+}
index d250013bc37b053f45b3b747668d791fa477de26..b315ab3593ec37f2e73faf564a6d6c9fee9e7c81 100644 (file)
@@ -81,6 +81,9 @@ struct intel_gvt_gtt {
        struct list_head oos_page_use_list_head;
        struct list_head oos_page_free_list_head;
        struct list_head mm_lru_list_head;
+
+       struct page *scratch_ggtt_page;
+       unsigned long scratch_ggtt_mfn;
 };
 
 enum {
@@ -202,6 +205,7 @@ struct intel_vgpu_gtt {
 
 extern int intel_vgpu_init_gtt(struct intel_vgpu *vgpu);
 extern void intel_vgpu_clean_gtt(struct intel_vgpu *vgpu);
+void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu);
 
 extern int intel_gvt_init_gtt(struct intel_gvt *gvt);
 extern void intel_gvt_clean_gtt(struct intel_gvt *gvt);
index ad0e9364ee703a65ce2a33834321bb4a9fce34f1..0af17016f33f24f40d338715e5c78bfac8058e92 100644 (file)
@@ -175,6 +175,7 @@ struct intel_vgpu {
                struct notifier_block group_notifier;
                struct kvm *kvm;
                struct work_struct release_work;
+               atomic_t released;
        } vdev;
 #endif
 };
index 4dd6722a733933224c269825d6f12f53525bf9c7..faaae07ae487277973533bbf907b6eefc2632a48 100644 (file)
@@ -114,12 +114,15 @@ static struct gvt_dma *__gvt_cache_find(struct intel_vgpu *vgpu, gfn_t gfn)
 static kvm_pfn_t gvt_cache_find(struct intel_vgpu *vgpu, gfn_t gfn)
 {
        struct gvt_dma *entry;
+       kvm_pfn_t pfn;
 
        mutex_lock(&vgpu->vdev.cache_lock);
+
        entry = __gvt_cache_find(vgpu, gfn);
-       mutex_unlock(&vgpu->vdev.cache_lock);
+       pfn = (entry == NULL) ? 0 : entry->pfn;
 
-       return entry == NULL ? 0 : entry->pfn;
+       mutex_unlock(&vgpu->vdev.cache_lock);
+       return pfn;
 }
 
 static void gvt_cache_add(struct intel_vgpu *vgpu, gfn_t gfn, kvm_pfn_t pfn)
@@ -166,7 +169,7 @@ static void __gvt_cache_remove_entry(struct intel_vgpu *vgpu,
 
 static void gvt_cache_remove(struct intel_vgpu *vgpu, gfn_t gfn)
 {
-       struct device *dev = &vgpu->vdev.mdev->dev;
+       struct device *dev = mdev_dev(vgpu->vdev.mdev);
        struct gvt_dma *this;
        unsigned long g1;
        int rc;
@@ -195,7 +198,7 @@ static void gvt_cache_destroy(struct intel_vgpu *vgpu)
 {
        struct gvt_dma *dma;
        struct rb_node *node = NULL;
-       struct device *dev = &vgpu->vdev.mdev->dev;
+       struct device *dev = mdev_dev(vgpu->vdev.mdev);
        unsigned long gfn;
 
        mutex_lock(&vgpu->vdev.cache_lock);
@@ -396,7 +399,7 @@ static int intel_vgpu_create(struct kobject *kobj, struct mdev_device *mdev)
        struct device *pdev;
        void *gvt;
 
-       pdev = mdev->parent->dev;
+       pdev = mdev_parent_dev(mdev);
        gvt = kdev_to_i915(pdev)->gvt;
 
        type = intel_gvt_find_vgpu_type(gvt, kobject_name(kobj));
@@ -418,7 +421,7 @@ static int intel_vgpu_create(struct kobject *kobj, struct mdev_device *mdev)
        mdev_set_drvdata(mdev, vgpu);
 
        gvt_dbg_core("intel_vgpu_create succeeded for mdev: %s\n",
-                    dev_name(&mdev->dev));
+                    dev_name(mdev_dev(mdev)));
        return 0;
 }
 
@@ -482,7 +485,7 @@ static int intel_vgpu_open(struct mdev_device *mdev)
        vgpu->vdev.group_notifier.notifier_call = intel_vgpu_group_notifier;
 
        events = VFIO_IOMMU_NOTIFY_DMA_UNMAP;
-       ret = vfio_register_notifier(&mdev->dev, VFIO_IOMMU_NOTIFY, &events,
+       ret = vfio_register_notifier(mdev_dev(mdev), VFIO_IOMMU_NOTIFY, &events,
                                &vgpu->vdev.iommu_notifier);
        if (ret != 0) {
                gvt_err("vfio_register_notifier for iommu failed: %d\n", ret);
@@ -490,17 +493,26 @@ static int intel_vgpu_open(struct mdev_device *mdev)
        }
 
        events = VFIO_GROUP_NOTIFY_SET_KVM;
-       ret = vfio_register_notifier(&mdev->dev, VFIO_GROUP_NOTIFY, &events,
+       ret = vfio_register_notifier(mdev_dev(mdev), VFIO_GROUP_NOTIFY, &events,
                                &vgpu->vdev.group_notifier);
        if (ret != 0) {
                gvt_err("vfio_register_notifier for group failed: %d\n", ret);
                goto undo_iommu;
        }
 
-       return kvmgt_guest_init(mdev);
+       ret = kvmgt_guest_init(mdev);
+       if (ret)
+               goto undo_group;
+
+       atomic_set(&vgpu->vdev.released, 0);
+       return ret;
+
+undo_group:
+       vfio_unregister_notifier(mdev_dev(mdev), VFIO_GROUP_NOTIFY,
+                                       &vgpu->vdev.group_notifier);
 
 undo_iommu:
-       vfio_unregister_notifier(&mdev->dev, VFIO_IOMMU_NOTIFY,
+       vfio_unregister_notifier(mdev_dev(mdev), VFIO_IOMMU_NOTIFY,
                                        &vgpu->vdev.iommu_notifier);
 out:
        return ret;
@@ -509,17 +521,26 @@ static int intel_vgpu_open(struct mdev_device *mdev)
 static void __intel_vgpu_release(struct intel_vgpu *vgpu)
 {
        struct kvmgt_guest_info *info;
+       int ret;
 
        if (!handle_valid(vgpu->handle))
                return;
 
-       vfio_unregister_notifier(&vgpu->vdev.mdev->dev, VFIO_IOMMU_NOTIFY,
+       if (atomic_cmpxchg(&vgpu->vdev.released, 0, 1))
+               return;
+
+       ret = vfio_unregister_notifier(mdev_dev(vgpu->vdev.mdev), VFIO_IOMMU_NOTIFY,
                                        &vgpu->vdev.iommu_notifier);
-       vfio_unregister_notifier(&vgpu->vdev.mdev->dev, VFIO_GROUP_NOTIFY,
+       WARN(ret, "vfio_unregister_notifier for iommu failed: %d\n", ret);
+
+       ret = vfio_unregister_notifier(mdev_dev(vgpu->vdev.mdev), VFIO_GROUP_NOTIFY,
                                        &vgpu->vdev.group_notifier);
+       WARN(ret, "vfio_unregister_notifier for group failed: %d\n", ret);
 
        info = (struct kvmgt_guest_info *)vgpu->handle;
        kvmgt_guest_exit(info);
+
+       vgpu->vdev.kvm = NULL;
        vgpu->handle = 0;
 }
 
@@ -534,6 +555,7 @@ static void intel_vgpu_release_work(struct work_struct *work)
 {
        struct intel_vgpu *vgpu = container_of(work, struct intel_vgpu,
                                        vdev.release_work);
+
        __intel_vgpu_release(vgpu);
 }
 
@@ -1089,7 +1111,7 @@ static long intel_vgpu_ioctl(struct mdev_device *mdev, unsigned int cmd,
        return 0;
 }
 
-static const struct parent_ops intel_vgpu_ops = {
+static const struct mdev_parent_ops intel_vgpu_ops = {
        .supported_type_groups  = intel_vgpu_type_groups,
        .create                 = intel_vgpu_create,
        .remove                 = intel_vgpu_remove,
@@ -1134,6 +1156,10 @@ static int kvmgt_write_protect_add(unsigned long handle, u64 gfn)
 
        idx = srcu_read_lock(&kvm->srcu);
        slot = gfn_to_memslot(kvm, gfn);
+       if (!slot) {
+               srcu_read_unlock(&kvm->srcu, idx);
+               return -EINVAL;
+       }
 
        spin_lock(&kvm->mmu_lock);
 
@@ -1164,6 +1190,10 @@ static int kvmgt_write_protect_remove(unsigned long handle, u64 gfn)
 
        idx = srcu_read_lock(&kvm->srcu);
        slot = gfn_to_memslot(kvm, gfn);
+       if (!slot) {
+               srcu_read_unlock(&kvm->srcu, idx);
+               return -EINVAL;
+       }
 
        spin_lock(&kvm->mmu_lock);
 
@@ -1311,18 +1341,14 @@ static int kvmgt_guest_init(struct mdev_device *mdev)
 
 static bool kvmgt_guest_exit(struct kvmgt_guest_info *info)
 {
-       struct intel_vgpu *vgpu;
-
        if (!info) {
                gvt_err("kvmgt_guest_info invalid\n");
                return false;
        }
 
-       vgpu = info->vgpu;
-
        kvm_page_track_unregister_notifier(info->kvm, &info->track_node);
        kvmgt_protect_table_destroy(info);
-       gvt_cache_destroy(vgpu);
+       gvt_cache_destroy(info->vgpu);
        vfree(info);
 
        return true;
@@ -1372,7 +1398,7 @@ static unsigned long kvmgt_gfn_to_pfn(unsigned long handle, unsigned long gfn)
                return pfn;
 
        pfn = INTEL_GVT_INVALID_ADDR;
-       dev = &info->vgpu->vdev.mdev->dev;
+       dev = mdev_dev(info->vgpu->vdev.mdev);
        rc = vfio_pin_pages(dev, &gfn, 1, IOMMU_READ | IOMMU_WRITE, &pfn);
        if (rc != 1) {
                gvt_err("vfio_pin_pages failed for gfn 0x%lx: %d\n", gfn, rc);
index d2a0fbc896c3cb2ca0734a9371b603fb8669a643..81cd921770c6db7748ad8e880180c3fb6f4c448a 100644 (file)
@@ -65,7 +65,7 @@ static int map_vgpu_opregion(struct intel_vgpu *vgpu, bool map)
        int i, ret;
 
        for (i = 0; i < INTEL_GVT_OPREGION_PAGES; i++) {
-               mfn = intel_gvt_hypervisor_virt_to_mfn(vgpu_opregion(vgpu)
+               mfn = intel_gvt_hypervisor_virt_to_mfn(vgpu_opregion(vgpu)->va
                        + i * PAGE_SIZE);
                if (mfn == INTEL_GVT_INVALID_ADDR) {
                        gvt_err("fail to get MFN from VA\n");
index 4a31b7a891ecaf3e2732c9f2d6ce62fa633419f6..3dd7fc662859a90803b142a8adf7f542f29c5948 100644 (file)
@@ -244,14 +244,16 @@ i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
 
 static void
 __i915_gem_object_release_shmem(struct drm_i915_gem_object *obj,
-                               struct sg_table *pages)
+                               struct sg_table *pages,
+                               bool needs_clflush)
 {
        GEM_BUG_ON(obj->mm.madv == __I915_MADV_PURGED);
 
        if (obj->mm.madv == I915_MADV_DONTNEED)
                obj->mm.dirty = false;
 
-       if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0 &&
+       if (needs_clflush &&
+           (obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0 &&
            !cpu_cache_is_coherent(obj->base.dev, obj->cache_level))
                drm_clflush_sg(pages);
 
@@ -263,7 +265,7 @@ static void
 i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj,
                               struct sg_table *pages)
 {
-       __i915_gem_object_release_shmem(obj, pages);
+       __i915_gem_object_release_shmem(obj, pages, false);
 
        if (obj->mm.dirty) {
                struct address_space *mapping = obj->base.filp->f_mapping;
@@ -2231,7 +2233,7 @@ i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj,
        struct sgt_iter sgt_iter;
        struct page *page;
 
-       __i915_gem_object_release_shmem(obj, pages);
+       __i915_gem_object_release_shmem(obj, pages, true);
 
        i915_gem_gtt_finish_pages(obj, pages);
 
@@ -2304,15 +2306,6 @@ void __i915_gem_object_put_pages(struct drm_i915_gem_object *obj,
        mutex_unlock(&obj->mm.lock);
 }
 
-static unsigned int swiotlb_max_size(void)
-{
-#if IS_ENABLED(CONFIG_SWIOTLB)
-       return rounddown(swiotlb_nr_tbl() << IO_TLB_SHIFT, PAGE_SIZE);
-#else
-       return 0;
-#endif
-}
-
 static void i915_sg_trim(struct sg_table *orig_st)
 {
        struct sg_table new_st;
@@ -2322,7 +2315,7 @@ static void i915_sg_trim(struct sg_table *orig_st)
        if (orig_st->nents == orig_st->orig_nents)
                return;
 
-       if (sg_alloc_table(&new_st, orig_st->nents, GFP_KERNEL))
+       if (sg_alloc_table(&new_st, orig_st->nents, GFP_KERNEL | __GFP_NOWARN))
                return;
 
        new_sg = new_st.sgl;
@@ -2360,7 +2353,7 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
        GEM_BUG_ON(obj->base.read_domains & I915_GEM_GPU_DOMAINS);
        GEM_BUG_ON(obj->base.write_domain & I915_GEM_GPU_DOMAINS);
 
-       max_segment = swiotlb_max_size();
+       max_segment = swiotlb_max_segment();
        if (!max_segment)
                max_segment = rounddown(UINT_MAX, PAGE_SIZE);
 
@@ -2728,6 +2721,7 @@ static void i915_gem_reset_engine(struct intel_engine_cs *engine)
        struct drm_i915_gem_request *request;
        struct i915_gem_context *incomplete_ctx;
        struct intel_timeline *timeline;
+       unsigned long flags;
        bool ring_hung;
 
        if (engine->irq_seqno_barrier)
@@ -2763,13 +2757,20 @@ static void i915_gem_reset_engine(struct intel_engine_cs *engine)
        if (i915_gem_context_is_default(incomplete_ctx))
                return;
 
+       timeline = i915_gem_context_lookup_timeline(incomplete_ctx, engine);
+
+       spin_lock_irqsave(&engine->timeline->lock, flags);
+       spin_lock(&timeline->lock);
+
        list_for_each_entry_continue(request, &engine->timeline->requests, link)
                if (request->ctx == incomplete_ctx)
                        reset_request(request);
 
-       timeline = i915_gem_context_lookup_timeline(incomplete_ctx, engine);
        list_for_each_entry(request, &timeline->requests, link)
                reset_request(request);
+
+       spin_unlock(&timeline->lock);
+       spin_unlock_irqrestore(&engine->timeline->lock, flags);
 }
 
 void i915_gem_reset(struct drm_i915_private *dev_priv)
index e2b077df2da023107c92a818d3c74042dcf73bac..d229f47d1028bb615675f846ecbd46a43ae17197 100644 (file)
@@ -413,6 +413,25 @@ i915_gem_active_set(struct i915_gem_active *active,
        rcu_assign_pointer(active->request, request);
 }
 
+/**
+ * i915_gem_active_set_retire_fn - updates the retirement callback
+ * @active - the active tracker
+ * @fn - the routine called when the request is retired
+ * @mutex - struct_mutex used to guard retirements
+ *
+ * i915_gem_active_set_retire_fn() updates the function pointer that
+ * is called when the final request associated with the @active tracker
+ * is retired.
+ */
+static inline void
+i915_gem_active_set_retire_fn(struct i915_gem_active *active,
+                             i915_gem_retire_fn fn,
+                             struct mutex *mutex)
+{
+       lockdep_assert_held(mutex);
+       active->retire = fn ?: i915_gem_retire_noop;
+}
+
 static inline struct drm_i915_gem_request *
 __i915_gem_active_peek(const struct i915_gem_active *active)
 {
index 6daad86137606d700b6101ee0ffde7a7ee35a1cd..3dc8724df4004842c78bc985606da52a06e449c0 100644 (file)
@@ -16791,7 +16791,6 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
 
        for_each_intel_crtc(dev, crtc) {
                struct intel_crtc_state *crtc_state = crtc->config;
-               int pixclk = 0;
 
                __drm_atomic_helper_crtc_destroy_state(&crtc_state->base);
                memset(crtc_state, 0, sizeof(*crtc_state));
@@ -16803,23 +16802,9 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
                crtc->base.enabled = crtc_state->base.enable;
                crtc->active = crtc_state->base.active;
 
-               if (crtc_state->base.active) {
+               if (crtc_state->base.active)
                        dev_priv->active_crtcs |= 1 << crtc->pipe;
 
-                       if (INTEL_GEN(dev_priv) >= 9 || IS_BROADWELL(dev_priv))
-                               pixclk = ilk_pipe_pixel_rate(crtc_state);
-                       else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
-                               pixclk = crtc_state->base.adjusted_mode.crtc_clock;
-                       else
-                               WARN_ON(dev_priv->display.modeset_calc_cdclk);
-
-                       /* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
-                       if (IS_BROADWELL(dev_priv) && crtc_state->ips_enabled)
-                               pixclk = DIV_ROUND_UP(pixclk * 100, 95);
-               }
-
-               dev_priv->min_pixclk[crtc->pipe] = pixclk;
-
                readout_plane_state(crtc);
 
                DRM_DEBUG_KMS("[CRTC:%d:%s] hw state readout: %s\n",
@@ -16892,6 +16877,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
        }
 
        for_each_intel_crtc(dev, crtc) {
+               int pixclk = 0;
+
                crtc->base.hwmode = crtc->config->base.adjusted_mode;
 
                memset(&crtc->base.mode, 0, sizeof(crtc->base.mode));
@@ -16919,10 +16906,23 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
                         */
                        crtc->base.state->mode.private_flags = I915_MODE_FLAG_INHERITED;
 
+                       if (INTEL_GEN(dev_priv) >= 9 || IS_BROADWELL(dev_priv))
+                               pixclk = ilk_pipe_pixel_rate(crtc->config);
+                       else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
+                               pixclk = crtc->config->base.adjusted_mode.crtc_clock;
+                       else
+                               WARN_ON(dev_priv->display.modeset_calc_cdclk);
+
+                       /* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
+                       if (IS_BROADWELL(dev_priv) && crtc->config->ips_enabled)
+                               pixclk = DIV_ROUND_UP(pixclk * 100, 95);
+
                        drm_calc_timestamping_constants(&crtc->base, &crtc->base.hwmode);
                        update_scanline_offset(crtc);
                }
 
+               dev_priv->min_pixclk[crtc->pipe] = pixclk;
+
                intel_pipe_config_sanity_check(dev_priv, crtc->config);
        }
 }
index d9bc19be855e76b9bab0f1cee082bc170bccff26..0b8e8eb85c19dfe7e2bc4404914c2f578043e4e3 100644 (file)
@@ -355,7 +355,8 @@ intel_dp_init_panel_power_sequencer(struct drm_device *dev,
                                    struct intel_dp *intel_dp);
 static void
 intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
-                                             struct intel_dp *intel_dp);
+                                             struct intel_dp *intel_dp,
+                                             bool force_disable_vdd);
 static void
 intel_dp_pps_init(struct drm_device *dev, struct intel_dp *intel_dp);
 
@@ -516,7 +517,7 @@ vlv_power_sequencer_pipe(struct intel_dp *intel_dp)
 
        /* init power sequencer on this pipe and port */
        intel_dp_init_panel_power_sequencer(dev, intel_dp);
-       intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
+       intel_dp_init_panel_power_sequencer_registers(dev, intel_dp, true);
 
        /*
         * Even vdd force doesn't work until we've made
@@ -553,7 +554,7 @@ bxt_power_sequencer_idx(struct intel_dp *intel_dp)
         * Only the HW needs to be reprogrammed, the SW state is fixed and
         * has been setup during connector init.
         */
-       intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
+       intel_dp_init_panel_power_sequencer_registers(dev, intel_dp, false);
 
        return 0;
 }
@@ -636,7 +637,7 @@ vlv_initial_power_sequencer_setup(struct intel_dp *intel_dp)
                      port_name(port), pipe_name(intel_dp->pps_pipe));
 
        intel_dp_init_panel_power_sequencer(dev, intel_dp);
-       intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
+       intel_dp_init_panel_power_sequencer_registers(dev, intel_dp, false);
 }
 
 void intel_power_sequencer_reset(struct drm_i915_private *dev_priv)
@@ -2912,7 +2913,7 @@ static void vlv_init_panel_power_sequencer(struct intel_dp *intel_dp)
 
        /* init power sequencer on this pipe and port */
        intel_dp_init_panel_power_sequencer(dev, intel_dp);
-       intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
+       intel_dp_init_panel_power_sequencer_registers(dev, intel_dp, true);
 }
 
 static void vlv_pre_enable_dp(struct intel_encoder *encoder,
@@ -5055,7 +5056,8 @@ intel_dp_init_panel_power_sequencer(struct drm_device *dev,
 
 static void
 intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
-                                             struct intel_dp *intel_dp)
+                                             struct intel_dp *intel_dp,
+                                             bool force_disable_vdd)
 {
        struct drm_i915_private *dev_priv = to_i915(dev);
        u32 pp_on, pp_off, pp_div, port_sel = 0;
@@ -5068,6 +5070,31 @@ intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
 
        intel_pps_get_registers(dev_priv, intel_dp, &regs);
 
+       /*
+        * On some VLV machines the BIOS can leave the VDD
+        * enabled even on power seqeuencers which aren't
+        * hooked up to any port. This would mess up the
+        * power domain tracking the first time we pick
+        * one of these power sequencers for use since
+        * edp_panel_vdd_on() would notice that the VDD was
+        * already on and therefore wouldn't grab the power
+        * domain reference. Disable VDD first to avoid this.
+        * This also avoids spuriously turning the VDD on as
+        * soon as the new power seqeuencer gets initialized.
+        */
+       if (force_disable_vdd) {
+               u32 pp = ironlake_get_pp_control(intel_dp);
+
+               WARN(pp & PANEL_POWER_ON, "Panel power already on\n");
+
+               if (pp & EDP_FORCE_VDD)
+                       DRM_DEBUG_KMS("VDD already on, disabling first\n");
+
+               pp &= ~EDP_FORCE_VDD;
+
+               I915_WRITE(regs.pp_ctrl, pp);
+       }
+
        pp_on = (seq->t1_t3 << PANEL_POWER_UP_DELAY_SHIFT) |
                (seq->t8 << PANEL_LIGHT_ON_DELAY_SHIFT);
        pp_off = (seq->t9 << PANEL_LIGHT_OFF_DELAY_SHIFT) |
@@ -5122,7 +5149,7 @@ static void intel_dp_pps_init(struct drm_device *dev,
                vlv_initial_power_sequencer_setup(intel_dp);
        } else {
                intel_dp_init_panel_power_sequencer(dev, intel_dp);
-               intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
+               intel_dp_init_panel_power_sequencer_registers(dev, intel_dp, false);
        }
 }
 
index fd0e4dac7cc16f35ff658466bc107a7296407354..e589e17876dc134b60bbb5958ad1fe856f2f118e 100644 (file)
@@ -216,7 +216,8 @@ static void intel_overlay_submit_request(struct intel_overlay *overlay,
 {
        GEM_BUG_ON(i915_gem_active_peek(&overlay->last_flip,
                                        &overlay->i915->drm.struct_mutex));
-       overlay->last_flip.retire = retire;
+       i915_gem_active_set_retire_fn(&overlay->last_flip, retire,
+                                     &overlay->i915->drm.struct_mutex);
        i915_gem_active_set(&overlay->last_flip, req);
        i915_add_request(req);
 }
@@ -839,8 +840,8 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
        if (ret)
                goto out_unpin;
 
-       i915_gem_track_fb(overlay->vma->obj, new_bo,
-                         INTEL_FRONTBUFFER_OVERLAY(pipe));
+       i915_gem_track_fb(overlay->vma ? overlay->vma->obj : NULL,
+                         vma->obj, INTEL_FRONTBUFFER_OVERLAY(pipe));
 
        overlay->old_vma = overlay->vma;
        overlay->vma = vma;
@@ -1430,6 +1431,8 @@ void intel_setup_overlay(struct drm_i915_private *dev_priv)
        overlay->contrast = 75;
        overlay->saturation = 146;
 
+       init_request_active(&overlay->last_flip, NULL);
+
        regs = intel_overlay_map_regs(overlay);
        if (!regs)
                goto out_unpin_bo;
index d40ed9fdf68d990ce2b138579bc6404a6fae7d99..70b12f89a193dc369273cea5565bf804a78cc50a 100644 (file)
@@ -64,7 +64,8 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad");
 #define QUIRK_SKIP_INPUT_MAPPING       BIT(2)
 #define QUIRK_IS_MULTITOUCH            BIT(3)
 
-#define NOTEBOOK_QUIRKS                        QUIRK_FIX_NOTEBOOK_REPORT
+#define KEYBOARD_QUIRKS                        (QUIRK_FIX_NOTEBOOK_REPORT | \
+                                                QUIRK_NO_INIT_REPORTS)
 #define TOUCHPAD_QUIRKS                        (QUIRK_NO_INIT_REPORTS | \
                                                 QUIRK_SKIP_INPUT_MAPPING | \
                                                 QUIRK_IS_MULTITOUCH)
@@ -170,11 +171,11 @@ static int asus_raw_event(struct hid_device *hdev,
 
 static int asus_input_configured(struct hid_device *hdev, struct hid_input *hi)
 {
+       struct input_dev *input = hi->input;
        struct asus_drvdata *drvdata = hid_get_drvdata(hdev);
 
        if (drvdata->quirks & QUIRK_IS_MULTITOUCH) {
                int ret;
-               struct input_dev *input = hi->input;
 
                input_set_abs_params(input, ABS_MT_POSITION_X, 0, MAX_X, 0, 0);
                input_set_abs_params(input, ABS_MT_POSITION_Y, 0, MAX_Y, 0, 0);
@@ -191,10 +192,10 @@ static int asus_input_configured(struct hid_device *hdev, struct hid_input *hi)
                        hid_err(hdev, "Asus input mt init slots failed: %d\n", ret);
                        return ret;
                }
-
-               drvdata->input = input;
        }
 
+       drvdata->input = input;
+
        return 0;
 }
 
@@ -286,7 +287,11 @@ static int asus_probe(struct hid_device *hdev, const struct hid_device_id *id)
                goto err_stop_hw;
        }
 
-       drvdata->input->name = "Asus TouchPad";
+       if (drvdata->quirks & QUIRK_IS_MULTITOUCH) {
+               drvdata->input->name = "Asus TouchPad";
+       } else {
+               drvdata->input->name = "Asus Keyboard";
+       }
 
        if (drvdata->quirks & QUIRK_IS_MULTITOUCH) {
                ret = asus_start_multitouch(hdev);
@@ -315,7 +320,7 @@ static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc,
 
 static const struct hid_device_id asus_devices[] = {
        { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK,
-                USB_DEVICE_ID_ASUSTEK_NOTEBOOK_KEYBOARD), NOTEBOOK_QUIRKS},
+                USB_DEVICE_ID_ASUSTEK_NOTEBOOK_KEYBOARD), KEYBOARD_QUIRKS},
        { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK,
                         USB_DEVICE_ID_ASUSTEK_TOUCHPAD), TOUCHPAD_QUIRKS },
        { }
index ec277b96eaa1b33461aa7702f38864598b910e59..54bd22dc14110c308744f28f01a7ab4cff79ff95 100644 (file)
 #define USB_VENDOR_ID_DRAGONRISE               0x0079
 #define USB_DEVICE_ID_DRAGONRISE_WIIU          0x1800
 #define USB_DEVICE_ID_DRAGONRISE_PS3           0x1801
+#define USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR    0x1803
 #define USB_DEVICE_ID_DRAGONRISE_GAMECUBE      0x1843
 
 #define USB_VENDOR_ID_DWAV             0x0eef
 #define USB_VENDOR_ID_FLATFROG         0x25b5
 #define USB_DEVICE_ID_MULTITOUCH_3200  0x0002
 
+#define USB_VENDOR_ID_FUTABA            0x0547
+#define USB_DEVICE_ID_LED_DISPLAY       0x7000
+
 #define USB_VENDOR_ID_ESSENTIAL_REALITY        0x0d7f
 #define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100
 
index 5c925228847c8e88653ec5fb00edfc053fa81784..4ef73374a8f9881136cabeda32a67c6a21d53a85 100644 (file)
@@ -212,7 +212,6 @@ int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id,
        __s32 value;
        int ret = 0;
 
-       memset(buffer, 0, buffer_size);
        mutex_lock(&data->mutex);
        report = sensor_hub_report(report_id, hsdev->hdev, HID_FEATURE_REPORT);
        if (!report || (field_index >= report->maxfield)) {
@@ -256,6 +255,8 @@ int sensor_hub_get_feature(struct hid_sensor_hub_device *hsdev, u32 report_id,
        int buffer_index = 0;
        int i;
 
+       memset(buffer, 0, buffer_size);
+
        mutex_lock(&data->mutex);
        report = sensor_hub_report(report_id, hsdev->hdev, HID_FEATURE_REPORT);
        if (!report || (field_index >= report->maxfield) ||
index 7687c0875395d6b351928a156be6f5268cf50cfe..f405b07d03816506215bd19fe3c878393370484a 100644 (file)
@@ -1099,8 +1099,11 @@ struct sony_sc {
        u8 led_delay_on[MAX_LEDS];
        u8 led_delay_off[MAX_LEDS];
        u8 led_count;
+       bool ds4_dongle_connected;
 };
 
+static void sony_set_leds(struct sony_sc *sc);
+
 static inline void sony_schedule_work(struct sony_sc *sc)
 {
        if (!sc->defer_initialization)
@@ -1430,6 +1433,31 @@ static int sony_raw_event(struct hid_device *hdev, struct hid_report *report,
                                return -EILSEQ;
                        }
                }
+
+               /*
+                * In the case of a DS4 USB dongle, bit[2] of byte 31 indicates
+                * if a DS4 is actually connected (indicated by '0').
+                * For non-dongle, this bit is always 0 (connected).
+                */
+               if (sc->hdev->vendor == USB_VENDOR_ID_SONY &&
+                   sc->hdev->product == USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE) {
+                       bool connected = (rd[31] & 0x04) ? false : true;
+
+                       if (!sc->ds4_dongle_connected && connected) {
+                               hid_info(sc->hdev, "DualShock 4 USB dongle: controller connected\n");
+                               sony_set_leds(sc);
+                               sc->ds4_dongle_connected = true;
+                       } else if (sc->ds4_dongle_connected && !connected) {
+                               hid_info(sc->hdev, "DualShock 4 USB dongle: controller disconnected\n");
+                               sc->ds4_dongle_connected = false;
+                               /* Return 0, so hidraw can get the report. */
+                               return 0;
+                       } else if (!sc->ds4_dongle_connected) {
+                               /* Return 0, so hidraw can get the report. */
+                               return 0;
+                       }
+               }
+
                dualshock4_parse_report(sc, rd, size);
        }
 
@@ -2390,6 +2418,12 @@ static int sony_check_add(struct sony_sc *sc)
                }
 
                memcpy(sc->mac_address, &buf[1], sizeof(sc->mac_address));
+
+               snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq),
+                       "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
+                       sc->mac_address[5], sc->mac_address[4],
+                       sc->mac_address[3], sc->mac_address[2],
+                       sc->mac_address[1], sc->mac_address[0]);
        } else if ((sc->quirks & SIXAXIS_CONTROLLER_USB) ||
                        (sc->quirks & NAVIGATION_CONTROLLER_USB)) {
                buf = kmalloc(SIXAXIS_REPORT_0xF2_SIZE, GFP_KERNEL);
@@ -2548,7 +2582,7 @@ static int sony_input_configured(struct hid_device *hdev,
                        hid_err(sc->hdev,
                        "Unable to initialize multi-touch slots: %d\n",
                        ret);
-                       return ret;
+                       goto err_stop;
                }
 
                sony_init_output_report(sc, dualshock4_send_output_report);
index b3e01c82af0512dce7a68e6bde908d7e3afeaba8..e9d6cc7cdfc5c8019422d45914dc0363448bcb12 100644 (file)
@@ -83,11 +83,13 @@ static const struct hid_blacklist {
        { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
        { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
        { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3, HID_QUIRK_MULTI_INPUT },
+       { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR, HID_QUIRK_MULTI_INPUT },
        { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE, HID_QUIRK_MULTI_INPUT },
        { USB_VENDOR_ID_ELAN, HID_ANY_ID, HID_QUIRK_ALWAYS_POLL },
        { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
        { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
        { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
+       { USB_VENDOR_ID_FUTABA, USB_DEVICE_ID_LED_DISPLAY, HID_QUIRK_NO_INIT_REPORTS },
        { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A, HID_QUIRK_ALWAYS_POLL },
        { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A, HID_QUIRK_ALWAYS_POLL },
        { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
index 322ed9272811817324396960e63facf9df80d96c..841f2428e84a3936de0a60ee42700efd70933ed2 100644 (file)
@@ -1036,7 +1036,7 @@ static const u8 lm90_temp_emerg_index[3] = {
 };
 
 static const u8 lm90_min_alarm_bits[3] = { 5, 3, 11 };
-static const u8 lm90_max_alarm_bits[3] = { 0, 4, 12 };
+static const u8 lm90_max_alarm_bits[3] = { 6, 4, 12 };
 static const u8 lm90_crit_alarm_bits[3] = { 0, 1, 9 };
 static const u8 lm90_emergency_alarm_bits[3] = { 15, 13, 14 };
 static const u8 lm90_fault_bits[3] = { 0, 2, 10 };
index f6b6d42385e1148b2ad7f279feb9a43396e66894..784670e2736b4fbbc540382afc1aefe66ccc1e5c 100644 (file)
@@ -353,12 +353,12 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
                                [0] = {
                                        .num = ST_ACCEL_FS_AVL_2G,
                                        .value = 0x00,
-                                       .gain = IIO_G_TO_M_S_2(1024),
+                                       .gain = IIO_G_TO_M_S_2(1000),
                                },
                                [1] = {
                                        .num = ST_ACCEL_FS_AVL_6G,
                                        .value = 0x01,
-                                       .gain = IIO_G_TO_M_S_2(340),
+                                       .gain = IIO_G_TO_M_S_2(3000),
                                },
                        },
                },
@@ -366,6 +366,14 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = {
                        .addr = 0x21,
                        .mask = 0x40,
                },
+               /*
+                * Data Alignment Setting - needs to be set to get
+                * left-justified data like all other sensors.
+                */
+               .das = {
+                       .addr = 0x21,
+                       .mask = 0x01,
+               },
                .drdy_irq = {
                        .addr = 0x21,
                        .mask_int1 = 0x04,
index 38bc319904c4c2998c040e8a05bdcbd3f55e9088..9c8b558ba19ecb035b8f4fe789acee1663184c60 100644 (file)
@@ -561,7 +561,7 @@ config TI_ADS8688
 
 config TI_AM335X_ADC
        tristate "TI's AM335X ADC driver"
-       depends on MFD_TI_AM335X_TSCADC
+       depends on MFD_TI_AM335X_TSCADC && HAS_DMA
        select IIO_BUFFER
        select IIO_KFIFO_BUF
        help
index fe7775bb37402ea73915189d2c4f121b0a74464d..df4045203a0717c40613b2297c9f85a855333f68 100644 (file)
@@ -30,7 +30,9 @@ static int st_sensors_get_buffer_element(struct iio_dev *indio_dev, u8 *buf)
 
        for_each_set_bit(i, indio_dev->active_scan_mask, num_data_channels) {
                const struct iio_chan_spec *channel = &indio_dev->channels[i];
-               unsigned int bytes_to_read = channel->scan_type.realbits >> 3;
+               unsigned int bytes_to_read =
+                       DIV_ROUND_UP(channel->scan_type.realbits +
+                                    channel->scan_type.shift, 8);
                unsigned int storage_bytes =
                        channel->scan_type.storagebits >> 3;
 
index 975a1f19f74760e5e1c17c786e36d9a86ae5a2a6..79c8c7cd70d5c6d74fc2e32cad372f8644233c6b 100644 (file)
@@ -401,6 +401,15 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev,
                        return err;
        }
 
+       /* set DAS */
+       if (sdata->sensor_settings->das.addr) {
+               err = st_sensors_write_data_with_mask(indio_dev,
+                                       sdata->sensor_settings->das.addr,
+                                       sdata->sensor_settings->das.mask, 1);
+               if (err < 0)
+                       return err;
+       }
+
        if (sdata->int_pin_open_drain) {
                dev_info(&indio_dev->dev,
                         "set interrupt line to open drain mode\n");
@@ -483,8 +492,10 @@ static int st_sensors_read_axis_data(struct iio_dev *indio_dev,
        int err;
        u8 *outdata;
        struct st_sensor_data *sdata = iio_priv(indio_dev);
-       unsigned int byte_for_channel = ch->scan_type.realbits >> 3;
+       unsigned int byte_for_channel;
 
+       byte_for_channel = DIV_ROUND_UP(ch->scan_type.realbits +
+                                       ch->scan_type.shift, 8);
        outdata = kmalloc(byte_for_channel, GFP_KERNEL);
        if (!outdata)
                return -ENOMEM;
index 2d2ee353dde7fc7bc976ced92cd969ccd9fade53..a5913e97945eb6b5f26a418a71852fe086e6cd42 100644 (file)
@@ -153,7 +153,7 @@ static int quad8_write_raw(struct iio_dev *indio_dev,
                ior_cfg = val | priv->preset_enable[chan->channel] << 1;
 
                /* Load I/O control configuration */
-               outb(0x40 | ior_cfg, base_offset);
+               outb(0x40 | ior_cfg, base_offset + 1);
 
                return 0;
        case IIO_CHAN_INFO_SCALE:
@@ -233,7 +233,7 @@ static ssize_t quad8_read_set_to_preset_on_index(struct iio_dev *indio_dev,
        const struct quad8_iio *const priv = iio_priv(indio_dev);
 
        return snprintf(buf, PAGE_SIZE, "%u\n",
-               priv->preset_enable[chan->channel]);
+               !priv->preset_enable[chan->channel]);
 }
 
 static ssize_t quad8_write_set_to_preset_on_index(struct iio_dev *indio_dev,
@@ -241,7 +241,7 @@ static ssize_t quad8_write_set_to_preset_on_index(struct iio_dev *indio_dev,
        size_t len)
 {
        struct quad8_iio *const priv = iio_priv(indio_dev);
-       const int base_offset = priv->base + 2 * chan->channel;
+       const int base_offset = priv->base + 2 * chan->channel + 1;
        bool preset_enable;
        int ret;
        unsigned int ior_cfg;
@@ -250,6 +250,9 @@ static ssize_t quad8_write_set_to_preset_on_index(struct iio_dev *indio_dev,
        if (ret)
                return ret;
 
+       /* Preset enable is active low in Input/Output Control register */
+       preset_enable = !preset_enable;
+
        priv->preset_enable[chan->channel] = preset_enable;
 
        ior_cfg = priv->ab_enable[chan->channel] |
@@ -362,7 +365,7 @@ static int quad8_set_synchronous_mode(struct iio_dev *indio_dev,
        priv->synchronous_mode[chan->channel] = synchronous_mode;
 
        /* Load Index Control configuration to Index Control Register */
-       outb(0x40 | idr_cfg, base_offset);
+       outb(0x60 | idr_cfg, base_offset);
 
        return 0;
 }
@@ -444,7 +447,7 @@ static int quad8_set_index_polarity(struct iio_dev *indio_dev,
        priv->index_polarity[chan->channel] = index_polarity;
 
        /* Load Index Control configuration to Index Control Register */
-       outb(0x40 | idr_cfg, base_offset);
+       outb(0x60 | idr_cfg, base_offset);
 
        return 0;
 }
index 5355507f8fa1493c8fc5346e4f51da37f8f4790c..c9e319bff58b314f626797f9dbf36339eb76be04 100644 (file)
 
 #define BMI160_REG_DUMMY               0x7F
 
-#define BMI160_ACCEL_PMU_MIN_USLEEP    3200
-#define BMI160_ACCEL_PMU_MAX_USLEEP    3800
-#define BMI160_GYRO_PMU_MIN_USLEEP     55000
-#define BMI160_GYRO_PMU_MAX_USLEEP     80000
+#define BMI160_ACCEL_PMU_MIN_USLEEP    3800
+#define BMI160_GYRO_PMU_MIN_USLEEP     80000
 #define BMI160_SOFTRESET_USLEEP                1000
 
 #define BMI160_CHANNEL(_type, _axis, _index) {                 \
@@ -151,20 +149,9 @@ static struct bmi160_regs bmi160_regs[] = {
        },
 };
 
-struct bmi160_pmu_time {
-       unsigned long min;
-       unsigned long max;
-};
-
-static struct bmi160_pmu_time bmi160_pmu_time[] = {
-       [BMI160_ACCEL] = {
-               .min = BMI160_ACCEL_PMU_MIN_USLEEP,
-               .max = BMI160_ACCEL_PMU_MAX_USLEEP
-       },
-       [BMI160_GYRO] = {
-               .min = BMI160_GYRO_PMU_MIN_USLEEP,
-               .max = BMI160_GYRO_PMU_MIN_USLEEP,
-       },
+static unsigned long bmi160_pmu_time[] = {
+       [BMI160_ACCEL] = BMI160_ACCEL_PMU_MIN_USLEEP,
+       [BMI160_GYRO] = BMI160_GYRO_PMU_MIN_USLEEP,
 };
 
 struct bmi160_scale {
@@ -289,7 +276,7 @@ int bmi160_set_mode(struct bmi160_data *data, enum bmi160_sensor_type t,
        if (ret < 0)
                return ret;
 
-       usleep_range(bmi160_pmu_time[t].min, bmi160_pmu_time[t].max);
+       usleep_range(bmi160_pmu_time[t], bmi160_pmu_time[t] + 1000);
 
        return 0;
 }
index a144ca3461fc91e2ad853302dcfc2241a9b3e923..81bd8e8da4a69af929760bfe1c12716fe16de972 100644 (file)
@@ -113,7 +113,7 @@ static const char max44000_int_time_avail_str[] =
        "0.100 "
        "0.025 "
        "0.00625 "
-       "0.001625";
+       "0.0015625";
 
 /* Available scales (internal to ulux) with pretty manual alignment: */
 static const int max44000_scale_avail_ulux_array[] = {
index c8413fc120e632bd9a6677c17507f3c454855d16..7031a8dd4d1404d439dafcb90af38b610774cc05 100644 (file)
@@ -1682,9 +1682,19 @@ static int __mlx4_ib_create_flow(struct ib_qp *qp, struct ib_flow_attr *flow_att
                size += ret;
        }
 
+       if (mlx4_is_master(mdev->dev) && flow_type == MLX4_FS_REGULAR &&
+           flow_attr->num_of_specs == 1) {
+               struct _rule_hw *rule_header = (struct _rule_hw *)(ctrl + 1);
+               enum ib_flow_spec_type header_spec =
+                       ((union ib_flow_spec *)(flow_attr + 1))->type;
+
+               if (header_spec == IB_FLOW_SPEC_ETH)
+                       mlx4_handle_eth_header_mcast_prio(ctrl, rule_header);
+       }
+
        ret = mlx4_cmd_imm(mdev->dev, mailbox->dma, reg_id, size >> 2, 0,
                           MLX4_QP_FLOW_STEERING_ATTACH, MLX4_CMD_TIME_CLASS_A,
-                          MLX4_CMD_WRAPPED);
+                          MLX4_CMD_NATIVE);
        if (ret == -ENOMEM)
                pr_err("mcg table is full. Fail to register network rule.\n");
        else if (ret == -ENXIO)
@@ -1701,7 +1711,7 @@ static int __mlx4_ib_destroy_flow(struct mlx4_dev *dev, u64 reg_id)
        int err;
        err = mlx4_cmd(dev, reg_id, 0, 0,
                       MLX4_QP_FLOW_STEERING_DETACH, MLX4_CMD_TIME_CLASS_A,
-                      MLX4_CMD_WRAPPED);
+                      MLX4_CMD_NATIVE);
        if (err)
                pr_err("Fail to detach network rule. registration id = 0x%llx\n",
                       reg_id);
index 019e02707cd5e3c893b3b6602a1847260b3ba401..3ef0f42984f2b1ec716509203988f9ebb70533cb 100644 (file)
@@ -1023,7 +1023,7 @@ static int __iommu_queue_command_sync(struct amd_iommu *iommu,
        next_tail = (tail + sizeof(*cmd)) % CMD_BUFFER_SIZE;
        left      = (head - next_tail) % CMD_BUFFER_SIZE;
 
-       if (left <= 2) {
+       if (left <= 0x20) {
                struct iommu_cmd sync_cmd;
                int ret;
 
index a88576d50740b2dbdbe6e65b2bfe1985f01c81ca..8ccbd7023194ee592fa91dafb67565d1ad9928aa 100644 (file)
@@ -903,8 +903,10 @@ int __init detect_intel_iommu(void)
                x86_init.iommu.iommu_init = intel_iommu_init;
 #endif
 
-       acpi_put_table(dmar_tbl);
-       dmar_tbl = NULL;
+       if (dmar_tbl) {
+               acpi_put_table(dmar_tbl);
+               dmar_tbl = NULL;
+       }
        up_write(&dmar_global_lock);
 
        return ret ? 1 : -ENODEV;
index c66c273dfd8ab1058030433961fcfaaf2046f846..8a185250ae5a5923d8ab9f34d811caa0f5e09b79 100644 (file)
@@ -2037,6 +2037,25 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
        if (context_present(context))
                goto out_unlock;
 
+       /*
+        * For kdump cases, old valid entries may be cached due to the
+        * in-flight DMA and copied pgtable, but there is no unmapping
+        * behaviour for them, thus we need an explicit cache flush for
+        * the newly-mapped device. For kdump, at this point, the device
+        * is supposed to finish reset at its driver probe stage, so no
+        * in-flight DMA will exist, and we don't need to worry anymore
+        * hereafter.
+        */
+       if (context_copied(context)) {
+               u16 did_old = context_domain_id(context);
+
+               if (did_old >= 0 && did_old < cap_ndoms(iommu->cap))
+                       iommu->flush.flush_context(iommu, did_old,
+                                                  (((u16)bus) << 8) | devfn,
+                                                  DMA_CCMD_MASK_NOBIT,
+                                                  DMA_CCMD_DEVICE_INVL);
+       }
+
        pgd = domain->pgd;
 
        context_clear_entry(context);
@@ -5185,6 +5204,25 @@ static void intel_iommu_remove_device(struct device *dev)
 }
 
 #ifdef CONFIG_INTEL_IOMMU_SVM
+#define MAX_NR_PASID_BITS (20)
+static inline unsigned long intel_iommu_get_pts(struct intel_iommu *iommu)
+{
+       /*
+        * Convert ecap_pss to extend context entry pts encoding, also
+        * respect the soft pasid_max value set by the iommu.
+        * - number of PASID bits = ecap_pss + 1
+        * - number of PASID table entries = 2^(pts + 5)
+        * Therefore, pts = ecap_pss - 4
+        * e.g. KBL ecap_pss = 0x13, PASID has 20 bits, pts = 15
+        */
+       if (ecap_pss(iommu->ecap) < 5)
+               return 0;
+
+       /* pasid_max is encoded as actual number of entries not the bits */
+       return find_first_bit((unsigned long *)&iommu->pasid_max,
+                       MAX_NR_PASID_BITS) - 5;
+}
+
 int intel_iommu_enable_pasid(struct intel_iommu *iommu, struct intel_svm_dev *sdev)
 {
        struct device_domain_info *info;
@@ -5217,7 +5255,9 @@ int intel_iommu_enable_pasid(struct intel_iommu *iommu, struct intel_svm_dev *sd
 
        if (!(ctx_lo & CONTEXT_PASIDE)) {
                context[1].hi = (u64)virt_to_phys(iommu->pasid_state_table);
-               context[1].lo = (u64)virt_to_phys(iommu->pasid_table) | ecap_pss(iommu->ecap);
+               context[1].lo = (u64)virt_to_phys(iommu->pasid_table) |
+                       intel_iommu_get_pts(iommu);
+
                wmb();
                /* CONTEXT_TT_MULTI_LEVEL and CONTEXT_TT_DEV_IOTLB are both
                 * extended to permit requests-with-PASID if the PASIDE bit
index 0037153c80a6ad27a7949be67d0f643e52b23edd..2d9c5dd06e423266680294e4d806e2e736d32156 100644 (file)
@@ -450,7 +450,7 @@ bool mei_cldev_enabled(struct mei_cl_device *cldev)
 EXPORT_SYMBOL_GPL(mei_cldev_enabled);
 
 /**
- * mei_cldev_enable_device - enable me client device
+ * mei_cldev_enable - enable me client device
  *     create connection with me client
  *
  * @cldev: me client device
index 391936c1aa041c5bd925d284aa593e65b5ce1065..b0395601c6ae83340f62cd801531632134b85a7a 100644 (file)
@@ -1541,7 +1541,7 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
 
        rets = first_chunk ? mei_cl_tx_flow_ctrl_creds(cl) : 1;
        if (rets < 0)
-               return rets;
+               goto err;
 
        if (rets == 0) {
                cl_dbg(dev, cl, "No flow control credentials: not sending.\n");
@@ -1575,11 +1575,8 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
                        cb->buf.size, cb->buf_idx);
 
        rets = mei_write_message(dev, &mei_hdr, buf->data + cb->buf_idx);
-       if (rets) {
-               cl->status = rets;
-               list_move_tail(&cb->list, &cmpl_list->list);
-               return rets;
-       }
+       if (rets)
+               goto err;
 
        cl->status = 0;
        cl->writing_state = MEI_WRITING;
@@ -1587,14 +1584,21 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
        cb->completed = mei_hdr.msg_complete == 1;
 
        if (first_chunk) {
-               if (mei_cl_tx_flow_ctrl_creds_reduce(cl))
-                       return -EIO;
+               if (mei_cl_tx_flow_ctrl_creds_reduce(cl)) {
+                       rets = -EIO;
+                       goto err;
+               }
        }
 
        if (mei_hdr.msg_complete)
                list_move_tail(&cb->list, &dev->write_waiting_list.list);
 
        return 0;
+
+err:
+       cl->status = rets;
+       list_move_tail(&cb->list, &cmpl_list->list);
+       return rets;
 }
 
 /**
index 25d1eb4933d0b8b28dc53d07344eb6a47a263893..7e8cf213fd813d8530f65c8439a77fd16ffeff9b 100644 (file)
@@ -1012,15 +1012,6 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
                goto out;
        }
 
-       /* Insert TSB and checksum infos */
-       if (priv->tsb_en) {
-               skb = bcm_sysport_insert_tsb(skb, dev);
-               if (!skb) {
-                       ret = NETDEV_TX_OK;
-                       goto out;
-               }
-       }
-
        /* The Ethernet switch we are interfaced with needs packets to be at
         * least 64 bytes (including FCS) otherwise they will be discarded when
         * they enter the switch port logic. When Broadcom tags are enabled, we
@@ -1028,13 +1019,21 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
         * (including FCS and tag) because the length verification is done after
         * the Broadcom tag is stripped off the ingress packet.
         */
-       if (skb_padto(skb, ETH_ZLEN + ENET_BRCM_TAG_LEN)) {
+       if (skb_put_padto(skb, ETH_ZLEN + ENET_BRCM_TAG_LEN)) {
                ret = NETDEV_TX_OK;
                goto out;
        }
 
-       skb_len = skb->len < ETH_ZLEN + ENET_BRCM_TAG_LEN ?
-                       ETH_ZLEN + ENET_BRCM_TAG_LEN : skb->len;
+       /* Insert TSB and checksum infos */
+       if (priv->tsb_en) {
+               skb = bcm_sysport_insert_tsb(skb, dev);
+               if (!skb) {
+                       ret = NETDEV_TX_OK;
+                       goto out;
+               }
+       }
+
+       skb_len = skb->len;
 
        mapping = dma_map_single(kdev, skb->data, skb_len, DMA_TO_DEVICE);
        if (dma_mapping_error(kdev, mapping)) {
index 92be2cd8f817caef709fce5de320663bd44c9dc8..9906fda76087c013da8f1b2ca73a3cf5709480d3 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * macb_pci.c - Cadence GEM PCI wrapper.
+ * Cadence GEM PCI wrapper.
  *
  * Copyright (C) 2016 Cadence Design Systems - http://www.cadence.com
  *
@@ -45,32 +45,27 @@ static int macb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        struct macb_platform_data plat_data;
        struct resource res[2];
 
-       /* sanity check */
-       if (!id)
-               return -EINVAL;
-
        /* enable pci device */
-       err = pci_enable_device(pdev);
+       err = pcim_enable_device(pdev);
        if (err < 0) {
-               dev_err(&pdev->dev, "Enabling PCI device has failed: 0x%04X",
-                       err);
-               return -EACCES;
+               dev_err(&pdev->dev, "Enabling PCI device has failed: %d", err);
+               return err;
        }
 
        pci_set_master(pdev);
 
        /* set up resources */
        memset(res, 0x00, sizeof(struct resource) * ARRAY_SIZE(res));
-       res[0].start = pdev->resource[0].start;
-       res[0].end = pdev->resource[0].end;
+       res[0].start = pci_resource_start(pdev, 0);
+       res[0].end = pci_resource_end(pdev, 0);
        res[0].name = PCI_DRIVER_NAME;
        res[0].flags = IORESOURCE_MEM;
-       res[1].start = pdev->irq;
+       res[1].start = pci_irq_vector(pdev, 0);
        res[1].name = PCI_DRIVER_NAME;
        res[1].flags = IORESOURCE_IRQ;
 
-       dev_info(&pdev->dev, "EMAC physical base addr = 0x%p\n",
-                (void *)(uintptr_t)pci_resource_start(pdev, 0));
+       dev_info(&pdev->dev, "EMAC physical base addr: %pa\n",
+                &res[0].start);
 
        /* set up macb platform data */
        memset(&plat_data, 0, sizeof(plat_data));
@@ -100,7 +95,7 @@ static int macb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        plat_info.num_res = ARRAY_SIZE(res);
        plat_info.data = &plat_data;
        plat_info.size_data = sizeof(plat_data);
-       plat_info.dma_mask = DMA_BIT_MASK(32);
+       plat_info.dma_mask = pdev->dma_mask;
 
        /* register platform device */
        plat_dev = platform_device_register_full(&plat_info);
@@ -120,7 +115,6 @@ static int macb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        clk_unregister(plat_data.pclk);
 
 err_pclk_register:
-       pci_disable_device(pdev);
        return err;
 }
 
@@ -130,7 +124,6 @@ static void macb_remove(struct pci_dev *pdev)
        struct macb_platform_data *plat_data = dev_get_platdata(&plat_dev->dev);
 
        platform_device_unregister(plat_dev);
-       pci_disable_device(pdev);
        clk_unregister(plat_data->pclk);
        clk_unregister(plat_data->hclk);
 }
index bbc8bd16cb971d6e2df3035d20ccd4151791a660..dcbce6cac63e2db7a936a7feea312b25ba3f2421 100644 (file)
@@ -77,7 +77,7 @@ config OCTEON_MGMT_ETHERNET
 config LIQUIDIO_VF
        tristate "Cavium LiquidIO VF support"
        depends on 64BIT && PCI_MSI
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        ---help---
          This driver supports Cavium LiquidIO Intelligent Server Adapter
          based on CN23XX chips.
index 0f0de5b63622d8ebfb98c124d5768e806a3689e8..d04a6c1634452034217e9dc4ab8771bf02899b86 100644 (file)
@@ -133,17 +133,15 @@ cxgb_find_route6(struct cxgb4_lld_info *lldi,
                if (ipv6_addr_type(&fl6.daddr) & IPV6_ADDR_LINKLOCAL)
                        fl6.flowi6_oif = sin6_scope_id;
                dst = ip6_route_output(&init_net, NULL, &fl6);
-               if (!dst)
-                       goto out;
-               if (!cxgb_our_interface(lldi, get_real_dev,
-                                       ip6_dst_idev(dst)->dev) &&
-                   !(ip6_dst_idev(dst)->dev->flags & IFF_LOOPBACK)) {
+               if (dst->error ||
+                   (!cxgb_our_interface(lldi, get_real_dev,
+                                        ip6_dst_idev(dst)->dev) &&
+                    !(ip6_dst_idev(dst)->dev->flags & IFF_LOOPBACK))) {
                        dst_release(dst);
-                       dst = NULL;
+                       return NULL;
                }
        }
 
-out:
        return dst;
 }
 EXPORT_SYMBOL(cxgb_find_route6);
index 7e1633bf5a22ccf1c9c123ba541349b5dfea1064..225e9a4877d7b16e058cfa7c0dac9ccb5434bb5b 100644 (file)
@@ -5155,7 +5155,9 @@ static netdev_features_t be_features_check(struct sk_buff *skb,
            skb->inner_protocol_type != ENCAP_TYPE_ETHER ||
            skb->inner_protocol != htons(ETH_P_TEB) ||
            skb_inner_mac_header(skb) - skb_transport_header(skb) !=
-           sizeof(struct udphdr) + sizeof(struct vxlanhdr))
+               sizeof(struct udphdr) + sizeof(struct vxlanhdr) ||
+           !adapter->vxlan_port ||
+           udp_hdr(skb)->dest != adapter->vxlan_port)
                return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
 
        return features;
index 624ba9058dc46bd369f7be872b040aee1e814696..c9b7ad65e5633bc2a5147706f5c728f4d1cffa3c 100644 (file)
@@ -733,6 +733,7 @@ static int dpaa_eth_cgr_init(struct dpaa_priv *priv)
        priv->cgr_data.cgr.cb = dpaa_eth_cgscn;
 
        /* Enable Congestion State Change Notifications and CS taildrop */
+       memset(&initcgr, 0, sizeof(initcgr));
        initcgr.we_mask = cpu_to_be16(QM_CGR_WE_CSCN_EN | QM_CGR_WE_CS_THRES);
        initcgr.cgr.cscn_en = QM_CGR_EN;
 
@@ -2291,7 +2292,8 @@ static int dpaa_open(struct net_device *net_dev)
        net_dev->phydev = mac_dev->init_phy(net_dev, priv->mac_dev);
        if (!net_dev->phydev) {
                netif_err(priv, ifup, net_dev, "init_phy() failed\n");
-               return -ENODEV;
+               err = -ENODEV;
+               goto phy_init_failed;
        }
 
        for (i = 0; i < ARRAY_SIZE(mac_dev->port); i++) {
@@ -2314,6 +2316,7 @@ static int dpaa_open(struct net_device *net_dev)
        for (i = 0; i < ARRAY_SIZE(mac_dev->port); i++)
                fman_port_disable(mac_dev->port[i]);
 
+phy_init_failed:
        dpaa_eth_napi_disable(priv);
 
        return err;
@@ -2420,6 +2423,7 @@ static int dpaa_ingress_cgr_init(struct dpaa_priv *priv)
        }
 
        /* Enable CS TD, but disable Congestion State Change Notifications. */
+       memset(&initcgr, 0, sizeof(initcgr));
        initcgr.we_mask = cpu_to_be16(QM_CGR_WE_CS_THRES);
        initcgr.cgr.cscn_en = QM_CGR_EN;
        cs_th = DPAA_INGRESS_CS_THRESHOLD;
index cbeea915f02699696072d1da77c724588e5c3b0e..8037426ec50fa4337cd4e0cc40dabb71082fb487 100644 (file)
@@ -900,10 +900,10 @@ static void korina_restart_task(struct work_struct *work)
                                DMA_STAT_DONE | DMA_STAT_HALT | DMA_STAT_ERR,
                                &lp->rx_dma_regs->dmasm);
 
-       korina_free_ring(dev);
-
        napi_disable(&lp->napi);
 
+       korina_free_ring(dev);
+
        if (korina_init(dev) < 0) {
                printk(KERN_ERR "%s: cannot restart device\n", dev->name);
                return;
@@ -1064,12 +1064,12 @@ static int korina_close(struct net_device *dev)
        tmp = tmp | DMA_STAT_DONE | DMA_STAT_HALT | DMA_STAT_ERR;
        writel(tmp, &lp->rx_dma_regs->dmasm);
 
-       korina_free_ring(dev);
-
        napi_disable(&lp->napi);
 
        cancel_work_sync(&lp->restart_task);
 
+       korina_free_ring(dev);
+
        free_irq(lp->rx_irq, dev);
        free_irq(lp->tx_irq, dev);
        free_irq(lp->ovr_irq, dev);
index 015198c14fa8531589f4443cb770989d629f51e6..504461a464c581bf77b5cca127680f2622221cde 100644 (file)
@@ -245,13 +245,9 @@ static u32 freq_to_shift(u16 freq)
 {
        u32 freq_khz = freq * 1000;
        u64 max_val_cycles = freq_khz * 1000 * MLX4_EN_WRAP_AROUND_SEC;
-       u64 tmp_rounded =
-               roundup_pow_of_two(max_val_cycles) > max_val_cycles ?
-               roundup_pow_of_two(max_val_cycles) - 1 : UINT_MAX;
-       u64 max_val_cycles_rounded = is_power_of_2(max_val_cycles + 1) ?
-               max_val_cycles : tmp_rounded;
+       u64 max_val_cycles_rounded = 1ULL << fls64(max_val_cycles - 1);
        /* calculate max possible multiplier in order to fit in 64bit */
-       u64 max_mul = div_u64(0xffffffffffffffffULL, max_val_cycles_rounded);
+       u64 max_mul = div64_u64(ULLONG_MAX, max_val_cycles_rounded);
 
        /* This comes from the reverse of clocksource_khz2mult */
        return ilog2(div_u64(max_mul * freq_khz, 1000000));
index bcd95533905865d38c80f72ac32e34f8a653a839..edbe200ac2fa4a11ad30bb8f08d8f7e3cb910708 100644 (file)
@@ -1638,7 +1638,8 @@ int mlx4_en_start_port(struct net_device *dev)
 
        /* Configure tx cq's and rings */
        for (t = 0 ; t < MLX4_EN_NUM_TX_TYPES; t++) {
-               u8 num_tx_rings_p_up = t == TX ? priv->num_tx_rings_p_up : 1;
+               u8 num_tx_rings_p_up = t == TX ?
+                       priv->num_tx_rings_p_up : priv->tx_ring_num[t];
 
                for (i = 0; i < priv->tx_ring_num[t]; i++) {
                        /* Configure cq */
index 3c37e216bbf324d527a27bee53418f2ecd62e724..eac527e25ec902c2a586e9952272b9e8e599e2c8 100644 (file)
@@ -445,8 +445,14 @@ int mlx4_en_activate_rx_rings(struct mlx4_en_priv *priv)
                ring->cqn = priv->rx_cq[ring_ind]->mcq.cqn;
 
                ring->stride = stride;
-               if (ring->stride <= TXBB_SIZE)
+               if (ring->stride <= TXBB_SIZE) {
+                       /* Stamp first unused send wqe */
+                       __be32 *ptr = (__be32 *)ring->buf;
+                       __be32 stamp = cpu_to_be32(1 << STAMP_SHIFT);
+                       *ptr = stamp;
+                       /* Move pointer to start of rx section */
                        ring->buf += TXBB_SIZE;
+               }
 
                ring->log_stride = ffs(ring->stride) - 1;
                ring->buf_size = ring->size * ring->stride;
index 2a9dd460a95f8149d884af048dc651eaaec4904f..e1f9e7cebf8f7adcf0a095513086b949c246aab6 100644 (file)
@@ -118,8 +118,13 @@ static int mlx4_alloc_icm_coherent(struct device *dev, struct scatterlist *mem,
        if (!buf)
                return -ENOMEM;
 
+       if (offset_in_page(buf)) {
+               dma_free_coherent(dev, PAGE_SIZE << order,
+                                 buf, sg_dma_address(mem));
+               return -ENOMEM;
+       }
+
        sg_set_buf(mem, buf, PAGE_SIZE << order);
-       BUG_ON(mem->offset);
        sg_dma_len(mem) = PAGE_SIZE << order;
        return 0;
 }
index 5e7840a7a33b55e9dc89efa43b349823d5b2e003..bffa6f345f2f40e35ebab8e546237da4fbe6b6a8 100644 (file)
@@ -42,6 +42,7 @@
 #include <linux/io-mapping.h>
 #include <linux/delay.h>
 #include <linux/kmod.h>
+#include <linux/etherdevice.h>
 #include <net/devlink.h>
 
 #include <linux/mlx4/device.h>
@@ -782,6 +783,23 @@ int mlx4_is_slave_active(struct mlx4_dev *dev, int slave)
 }
 EXPORT_SYMBOL(mlx4_is_slave_active);
 
+void mlx4_handle_eth_header_mcast_prio(struct mlx4_net_trans_rule_hw_ctrl *ctrl,
+                                      struct _rule_hw *eth_header)
+{
+       if (is_multicast_ether_addr(eth_header->eth.dst_mac) ||
+           is_broadcast_ether_addr(eth_header->eth.dst_mac)) {
+               struct mlx4_net_trans_rule_hw_eth *eth =
+                       (struct mlx4_net_trans_rule_hw_eth *)eth_header;
+               struct _rule_hw *next_rule = (struct _rule_hw *)(eth + 1);
+               bool last_rule = next_rule->size == 0 && next_rule->id == 0 &&
+                       next_rule->rsvd == 0;
+
+               if (last_rule)
+                       ctrl->prio = cpu_to_be16(MLX4_DOMAIN_NIC);
+       }
+}
+EXPORT_SYMBOL(mlx4_handle_eth_header_mcast_prio);
+
 static void slave_adjust_steering_mode(struct mlx4_dev *dev,
                                       struct mlx4_dev_cap *dev_cap,
                                       struct mlx4_init_hca_param *hca_param)
index c548beaaf9109e376933660dffb39632622dbfc9..56185a0b827df6394a1edba70cf6925683ffb403 100644 (file)
@@ -4164,22 +4164,6 @@ static int validate_eth_header_mac(int slave, struct _rule_hw *eth_header,
        return 0;
 }
 
-static void handle_eth_header_mcast_prio(struct mlx4_net_trans_rule_hw_ctrl *ctrl,
-                                        struct _rule_hw *eth_header)
-{
-       if (is_multicast_ether_addr(eth_header->eth.dst_mac) ||
-           is_broadcast_ether_addr(eth_header->eth.dst_mac)) {
-               struct mlx4_net_trans_rule_hw_eth *eth =
-                       (struct mlx4_net_trans_rule_hw_eth *)eth_header;
-               struct _rule_hw *next_rule = (struct _rule_hw *)(eth + 1);
-               bool last_rule = next_rule->size == 0 && next_rule->id == 0 &&
-                       next_rule->rsvd == 0;
-
-               if (last_rule)
-                       ctrl->prio = cpu_to_be16(MLX4_DOMAIN_NIC);
-       }
-}
-
 /*
  * In case of missing eth header, append eth header with a MAC address
  * assigned to the VF.
@@ -4363,10 +4347,7 @@ int mlx4_QP_FLOW_STEERING_ATTACH_wrapper(struct mlx4_dev *dev, int slave,
        header_id = map_hw_to_sw_id(be16_to_cpu(rule_header->id));
 
        if (header_id == MLX4_NET_TRANS_RULE_ID_ETH)
-               handle_eth_header_mcast_prio(ctrl, rule_header);
-
-       if (slave == dev->caps.function)
-               goto execute;
+               mlx4_handle_eth_header_mcast_prio(ctrl, rule_header);
 
        switch (header_id) {
        case MLX4_NET_TRANS_RULE_ID_ETH:
@@ -4394,7 +4375,6 @@ int mlx4_QP_FLOW_STEERING_ATTACH_wrapper(struct mlx4_dev *dev, int slave,
                goto err_put_qp;
        }
 
-execute:
        err = mlx4_cmd_imm(dev, inbox->dma, &vhcr->out_param,
                           vhcr->in_modifier, 0,
                           MLX4_QP_FLOW_STEERING_ATTACH, MLX4_CMD_TIME_CLASS_A,
@@ -4473,6 +4453,7 @@ int mlx4_QP_FLOW_STEERING_DETACH_wrapper(struct mlx4_dev *dev, int slave,
        struct res_qp *rqp;
        struct res_fs_rule *rrule;
        u64 mirr_reg_id;
+       int qpn;
 
        if (dev->caps.steering_mode !=
            MLX4_STEERING_MODE_DEVICE_MANAGED)
@@ -4489,10 +4470,11 @@ int mlx4_QP_FLOW_STEERING_DETACH_wrapper(struct mlx4_dev *dev, int slave,
        }
        mirr_reg_id = rrule->mirr_rule_id;
        kfree(rrule->mirr_mbox);
+       qpn = rrule->qpn;
 
        /* Release the rule form busy state before removal */
        put_res(dev, slave, vhcr->in_param, RES_FS_RULE);
-       err = get_res(dev, slave, rrule->qpn, RES_QP, &rqp);
+       err = get_res(dev, slave, qpn, RES_QP, &rqp);
        if (err)
                return err;
 
@@ -4517,7 +4499,7 @@ int mlx4_QP_FLOW_STEERING_DETACH_wrapper(struct mlx4_dev *dev, int slave,
        if (!err)
                atomic_dec(&rqp->ref_count);
 out:
-       put_res(dev, slave, rrule->qpn, RES_QP);
+       put_res(dev, slave, qpn, RES_QP);
        return err;
 }
 
index 7f6c225666c18b193f642ba74cb8637e471ab3fc..f0b460f47f2992caad4eec7ea0d655296a46e99c 100644 (file)
@@ -723,6 +723,9 @@ static void mlx5e_ets_init(struct mlx5e_priv *priv)
        int i;
        struct ieee_ets ets;
 
+       if (!MLX5_CAP_GEN(priv->mdev, ets))
+               return;
+
        memset(&ets, 0, sizeof(ets));
        ets.ets_cap = mlx5_max_tc(priv->mdev) + 1;
        for (i = 0; i < ets.ets_cap; i++) {
index 352462af8d51aced0ba2c2a0daa729e7aa05f68f..33a399a8b5d52297379ade73f37e61df266905fa 100644 (file)
@@ -171,7 +171,6 @@ static int mlx5e_get_sset_count(struct net_device *dev, int sset)
                return NUM_SW_COUNTERS +
                       MLX5E_NUM_Q_CNTRS(priv) +
                       NUM_VPORT_COUNTERS + NUM_PPORT_COUNTERS +
-                      NUM_PCIE_COUNTERS +
                       MLX5E_NUM_RQ_STATS(priv) +
                       MLX5E_NUM_SQ_STATS(priv) +
                       MLX5E_NUM_PFC_COUNTERS(priv) +
@@ -219,14 +218,6 @@ static void mlx5e_fill_stats_strings(struct mlx5e_priv *priv, uint8_t *data)
                strcpy(data + (idx++) * ETH_GSTRING_LEN,
                       pport_2819_stats_desc[i].format);
 
-       for (i = 0; i < NUM_PCIE_PERF_COUNTERS; i++)
-               strcpy(data + (idx++) * ETH_GSTRING_LEN,
-                      pcie_perf_stats_desc[i].format);
-
-       for (i = 0; i < NUM_PCIE_TAS_COUNTERS; i++)
-               strcpy(data + (idx++) * ETH_GSTRING_LEN,
-                      pcie_tas_stats_desc[i].format);
-
        for (prio = 0; prio < NUM_PPORT_PRIO; prio++) {
                for (i = 0; i < NUM_PPORT_PER_PRIO_TRAFFIC_COUNTERS; i++)
                        sprintf(data + (idx++) * ETH_GSTRING_LEN,
@@ -339,14 +330,6 @@ static void mlx5e_get_ethtool_stats(struct net_device *dev,
                data[idx++] = MLX5E_READ_CTR64_BE(&priv->stats.pport.RFC_2819_counters,
                                                  pport_2819_stats_desc, i);
 
-       for (i = 0; i < NUM_PCIE_PERF_COUNTERS; i++)
-               data[idx++] = MLX5E_READ_CTR32_BE(&priv->stats.pcie.pcie_perf_counters,
-                                                 pcie_perf_stats_desc, i);
-
-       for (i = 0; i < NUM_PCIE_TAS_COUNTERS; i++)
-               data[idx++] = MLX5E_READ_CTR32_BE(&priv->stats.pcie.pcie_tas_counters,
-                                                 pcie_tas_stats_desc, i);
-
        for (prio = 0; prio < NUM_PPORT_PRIO; prio++) {
                for (i = 0; i < NUM_PPORT_PER_PRIO_TRAFFIC_COUNTERS; i++)
                        data[idx++] = MLX5E_READ_CTR64_BE(&priv->stats.pport.per_prio_counters[prio],
index 3691451c728c0c4731e4fbc7946a8549490edc4d..d088effd7160355849faacead1326f2198d12e8d 100644 (file)
@@ -247,6 +247,7 @@ static int set_flow_attrs(u32 *match_c, u32 *match_v,
        }
        if (fs->flow_type & FLOW_MAC_EXT &&
            !is_zero_ether_addr(fs->m_ext.h_dest)) {
+               mask_spec(fs->m_ext.h_dest, fs->h_ext.h_dest, ETH_ALEN);
                ether_addr_copy(MLX5_ADDR_OF(fte_match_set_lyr_2_4,
                                             outer_headers_c, dmac_47_16),
                                fs->m_ext.h_dest);
index cbfa38fc72c0875d6754595e1335c5d1a5af26ff..1236b27b149386ab61f1c25ab26c84d43d561ab9 100644 (file)
@@ -291,36 +291,12 @@ static void mlx5e_update_q_counter(struct mlx5e_priv *priv)
                                      &qcnt->rx_out_of_buffer);
 }
 
-static void mlx5e_update_pcie_counters(struct mlx5e_priv *priv)
-{
-       struct mlx5e_pcie_stats *pcie_stats = &priv->stats.pcie;
-       struct mlx5_core_dev *mdev = priv->mdev;
-       int sz = MLX5_ST_SZ_BYTES(mpcnt_reg);
-       void *out;
-       u32 *in;
-
-       in = mlx5_vzalloc(sz);
-       if (!in)
-               return;
-
-       out = pcie_stats->pcie_perf_counters;
-       MLX5_SET(mpcnt_reg, in, grp, MLX5_PCIE_PERFORMANCE_COUNTERS_GROUP);
-       mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_MPCNT, 0, 0);
-
-       out = pcie_stats->pcie_tas_counters;
-       MLX5_SET(mpcnt_reg, in, grp, MLX5_PCIE_TIMERS_AND_STATES_COUNTERS_GROUP);
-       mlx5_core_access_reg(mdev, in, sz, out, sz, MLX5_REG_MPCNT, 0, 0);
-
-       kvfree(in);
-}
-
 void mlx5e_update_stats(struct mlx5e_priv *priv)
 {
        mlx5e_update_q_counter(priv);
        mlx5e_update_vport_counters(priv);
        mlx5e_update_pport_counters(priv);
        mlx5e_update_sw_counters(priv);
-       mlx5e_update_pcie_counters(priv);
 }
 
 void mlx5e_update_stats_work(struct work_struct *work)
@@ -3805,14 +3781,7 @@ static void mlx5e_nic_enable(struct mlx5e_priv *priv)
 
        mlx5_lag_add(mdev, netdev);
 
-       if (mlx5e_vxlan_allowed(mdev)) {
-               rtnl_lock();
-               udp_tunnel_get_rx_info(netdev);
-               rtnl_unlock();
-       }
-
        mlx5e_enable_async_events(priv);
-       queue_work(priv->wq, &priv->set_rx_mode_work);
 
        if (MLX5_CAP_GEN(mdev, vport_group_manager)) {
                mlx5_query_nic_vport_mac_address(mdev, 0, rep.hw_id);
@@ -3822,6 +3791,18 @@ static void mlx5e_nic_enable(struct mlx5e_priv *priv)
                rep.netdev = netdev;
                mlx5_eswitch_register_vport_rep(esw, 0, &rep);
        }
+
+       if (netdev->reg_state != NETREG_REGISTERED)
+               return;
+
+       /* Device already registered: sync netdev system state */
+       if (mlx5e_vxlan_allowed(mdev)) {
+               rtnl_lock();
+               udp_tunnel_get_rx_info(netdev);
+               rtnl_unlock();
+       }
+
+       queue_work(priv->wq, &priv->set_rx_mode_work);
 }
 
 static void mlx5e_nic_disable(struct mlx5e_priv *priv)
@@ -3966,10 +3947,6 @@ void mlx5e_detach_netdev(struct mlx5_core_dev *mdev, struct net_device *netdev)
        const struct mlx5e_profile *profile = priv->profile;
 
        set_bit(MLX5E_STATE_DESTROYING, &priv->state);
-       if (profile->disable)
-               profile->disable(priv);
-
-       flush_workqueue(priv->wq);
 
        rtnl_lock();
        if (netif_running(netdev))
@@ -3977,6 +3954,10 @@ void mlx5e_detach_netdev(struct mlx5_core_dev *mdev, struct net_device *netdev)
        netif_device_detach(netdev);
        rtnl_unlock();
 
+       if (profile->disable)
+               profile->disable(priv);
+       flush_workqueue(priv->wq);
+
        mlx5e_destroy_q_counter(priv);
        profile->cleanup_rx(priv);
        mlx5e_close_drop_rq(priv);
index f202f872f57f6ee0c3e4aad428ffafa7be1a71a2..ba5db1dd23a97a7d378ec3ea8e36fa099d0a462a 100644 (file)
@@ -39,7 +39,7 @@
 #define MLX5E_READ_CTR32_CPU(ptr, dsc, i) \
        (*(u32 *)((char *)ptr + dsc[i].offset))
 #define MLX5E_READ_CTR32_BE(ptr, dsc, i) \
-       be32_to_cpu(*(__be32 *)((char *)ptr + dsc[i].offset))
+       be64_to_cpu(*(__be32 *)((char *)ptr + dsc[i].offset))
 
 #define MLX5E_DECLARE_STAT(type, fld) #fld, offsetof(type, fld)
 #define MLX5E_DECLARE_RX_STAT(type, fld) "rx%d_"#fld, offsetof(type, fld)
@@ -276,32 +276,6 @@ static const struct counter_desc pport_per_prio_pfc_stats_desc[] = {
        { "rx_%s_pause_transition", PPORT_PER_PRIO_OFF(rx_pause_transition) },
 };
 
-#define PCIE_PERF_OFF(c) \
-       MLX5_BYTE_OFF(mpcnt_reg, counter_set.pcie_perf_cntrs_grp_data_layout.c)
-#define PCIE_PERF_GET(pcie_stats, c) \
-       MLX5_GET(mpcnt_reg, pcie_stats->pcie_perf_counters, \
-                counter_set.pcie_perf_cntrs_grp_data_layout.c)
-#define PCIE_TAS_OFF(c) \
-       MLX5_BYTE_OFF(mpcnt_reg, counter_set.pcie_tas_cntrs_grp_data_layout.c)
-#define PCIE_TAS_GET(pcie_stats, c) \
-       MLX5_GET(mpcnt_reg, pcie_stats->pcie_tas_counters, \
-                counter_set.pcie_tas_cntrs_grp_data_layout.c)
-
-struct mlx5e_pcie_stats {
-       __be64 pcie_perf_counters[MLX5_ST_SZ_QW(mpcnt_reg)];
-       __be64 pcie_tas_counters[MLX5_ST_SZ_QW(mpcnt_reg)];
-};
-
-static const struct counter_desc pcie_perf_stats_desc[] = {
-       { "rx_pci_signal_integrity", PCIE_PERF_OFF(rx_errors) },
-       { "tx_pci_signal_integrity", PCIE_PERF_OFF(tx_errors) },
-};
-
-static const struct counter_desc pcie_tas_stats_desc[] = {
-       { "tx_pci_transport_nonfatal_msg", PCIE_TAS_OFF(non_fatal_err_msg_sent) },
-       { "tx_pci_transport_fatal_msg", PCIE_TAS_OFF(fatal_err_msg_sent) },
-};
-
 struct mlx5e_rq_stats {
        u64 packets;
        u64 bytes;
@@ -386,8 +360,6 @@ static const struct counter_desc sq_stats_desc[] = {
 #define NUM_PPORT_802_3_COUNTERS       ARRAY_SIZE(pport_802_3_stats_desc)
 #define NUM_PPORT_2863_COUNTERS                ARRAY_SIZE(pport_2863_stats_desc)
 #define NUM_PPORT_2819_COUNTERS                ARRAY_SIZE(pport_2819_stats_desc)
-#define NUM_PCIE_PERF_COUNTERS         ARRAY_SIZE(pcie_perf_stats_desc)
-#define NUM_PCIE_TAS_COUNTERS          ARRAY_SIZE(pcie_tas_stats_desc)
 #define NUM_PPORT_PER_PRIO_TRAFFIC_COUNTERS \
        ARRAY_SIZE(pport_per_prio_traffic_stats_desc)
 #define NUM_PPORT_PER_PRIO_PFC_COUNTERS \
@@ -397,7 +369,6 @@ static const struct counter_desc sq_stats_desc[] = {
                                         NUM_PPORT_2819_COUNTERS  + \
                                         NUM_PPORT_PER_PRIO_TRAFFIC_COUNTERS * \
                                         NUM_PPORT_PRIO)
-#define NUM_PCIE_COUNTERS              (NUM_PCIE_PERF_COUNTERS + NUM_PCIE_TAS_COUNTERS)
 #define NUM_RQ_STATS                   ARRAY_SIZE(rq_stats_desc)
 #define NUM_SQ_STATS                   ARRAY_SIZE(sq_stats_desc)
 
@@ -406,7 +377,6 @@ struct mlx5e_stats {
        struct mlx5e_qcounter_stats qcnt;
        struct mlx5e_vport_stats vport;
        struct mlx5e_pport_stats pport;
-       struct mlx5e_pcie_stats pcie;
        struct rtnl_link_stats64 vf_vport;
 };
 
index d6807c3cc461f001aa01072e395adf2e93095bfd..f14d9c9ba77394b83aea50564afd3c762613467a 100644 (file)
@@ -1860,7 +1860,7 @@ int mlx5_eswitch_set_vport_mac(struct mlx5_eswitch *esw,
 
        if (!ESW_ALLOWED(esw))
                return -EPERM;
-       if (!LEGAL_VPORT(esw, vport))
+       if (!LEGAL_VPORT(esw, vport) || is_multicast_ether_addr(mac))
                return -EINVAL;
 
        mutex_lock(&esw->state_lock);
index 466e161010f759e08ab2253326da4f2a0192aa1d..03293ed1cc22d2716ff5708dc2312b7291cc1899 100644 (file)
@@ -695,6 +695,12 @@ int esw_offloads_init(struct mlx5_eswitch *esw, int nvports)
                if (err)
                        goto err_reps;
        }
+
+       /* disable PF RoCE so missed packets don't go through RoCE steering */
+       mlx5_dev_list_lock();
+       mlx5_remove_dev_by_protocol(esw->dev, MLX5_INTERFACE_PROTOCOL_IB);
+       mlx5_dev_list_unlock();
+
        return 0;
 
 err_reps:
@@ -718,6 +724,11 @@ static int esw_offloads_stop(struct mlx5_eswitch *esw)
 {
        int err, err1, num_vfs = esw->dev->priv.sriov.num_vfs;
 
+       /* enable back PF RoCE */
+       mlx5_dev_list_lock();
+       mlx5_add_dev_by_protocol(esw->dev, MLX5_INTERFACE_PROTOCOL_IB);
+       mlx5_dev_list_unlock();
+
        mlx5_eswitch_disable_sriov(esw);
        err = mlx5_eswitch_enable_sriov(esw, num_vfs, SRIOV_LEGACY);
        if (err) {
index a263d8904a4cf84de718ad9dd4b2d8ddca9a5194..0ac7a2fc916c438bc535b20d45964009747f0b33 100644 (file)
@@ -1263,6 +1263,7 @@ static struct mlx5_flow_handle *add_rule_fg(struct mlx5_flow_group *fg,
        nested_lock_ref_node(&fte->node, FS_MUTEX_CHILD);
        handle = add_rule_fte(fte, fg, dest, dest_num, false);
        if (IS_ERR(handle)) {
+               unlock_ref_node(&fte->node);
                kfree(fte);
                goto unlock_fg;
        }
index 54e5a786f1915deadf3eb181beeef0bf325a178e..6547f22e6b9b919010eada133093654348dff671 100644 (file)
@@ -503,6 +503,13 @@ static int handle_hca_cap(struct mlx5_core_dev *dev)
        MLX5_SET(cmd_hca_cap, set_hca_cap, pkey_table_size,
                 to_fw_pkey_sz(dev, 128));
 
+       /* Check log_max_qp from HCA caps to set in current profile */
+       if (MLX5_CAP_GEN_MAX(dev, log_max_qp) < profile[prof_sel].log_max_qp) {
+               mlx5_core_warn(dev, "log_max_qp value in current profile is %d, changing it to HCA capability limit (%d)\n",
+                              profile[prof_sel].log_max_qp,
+                              MLX5_CAP_GEN_MAX(dev, log_max_qp));
+               profile[prof_sel].log_max_qp = MLX5_CAP_GEN_MAX(dev, log_max_qp);
+       }
        if (prof->mask & MLX5_PROF_MASK_QP_SIZE)
                MLX5_SET(cmd_hca_cap, set_hca_cap, log_max_qp,
                         prof->log_max_qp);
@@ -575,7 +582,6 @@ static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i)
        struct mlx5_priv *priv  = &mdev->priv;
        struct msix_entry *msix = priv->msix_arr;
        int irq                 = msix[i + MLX5_EQ_VEC_COMP_BASE].vector;
-       int numa_node           = priv->numa_node;
        int err;
 
        if (!zalloc_cpumask_var(&priv->irq_info[i].mask, GFP_KERNEL)) {
@@ -583,7 +589,7 @@ static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i)
                return -ENOMEM;
        }
 
-       cpumask_set_cpu(cpumask_local_spread(i, numa_node),
+       cpumask_set_cpu(cpumask_local_spread(i, priv->numa_node),
                        priv->irq_info[i].mask);
 
        err = irq_set_affinity_hint(irq, priv->irq_info[i].mask);
@@ -1189,6 +1195,8 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
 {
        int err = 0;
 
+       mlx5_drain_health_wq(dev);
+
        mutex_lock(&dev->intf_state_mutex);
        if (test_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state)) {
                dev_warn(&dev->pdev->dev, "%s: interface is down, NOP\n",
@@ -1351,10 +1359,9 @@ static pci_ers_result_t mlx5_pci_err_detected(struct pci_dev *pdev,
 
        mlx5_enter_error_state(dev);
        mlx5_unload_one(dev, priv, false);
-       /* In case of kernel call save the pci state and drain health wq */
+       /* In case of kernel call save the pci state */
        if (state) {
                pci_save_state(pdev);
-               mlx5_drain_health_wq(dev);
                mlx5_pci_disable_device(dev);
        }
 
index f9b97f5946f8919aa1d8ff63044c796775cd01cc..44389c90056a0f197a97f5d36478ec597f266004 100644 (file)
@@ -326,6 +326,7 @@ enum cfg_version {
 static const struct pci_device_id rtl8169_pci_tbl[] = {
        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8129), 0, 0, RTL_CFG_0 },
        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8136), 0, 0, RTL_CFG_2 },
+       { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8161), 0, 0, RTL_CFG_1 },
        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8167), 0, 0, RTL_CFG_0 },
        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8168), 0, 0, RTL_CFG_1 },
        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8169), 0, 0, RTL_CFG_0 },
index f341c1bc7001678326985746bd0ce65d1572994a..00fafabab1d08ed505130ceab5306255c9910087 100644 (file)
@@ -819,6 +819,7 @@ static struct sh_eth_cpu_data sh7734_data = {
        .tsu            = 1,
        .hw_crc         = 1,
        .select_mii     = 1,
+       .shift_rd0      = 1,
 };
 
 /* SH7763 */
@@ -1656,7 +1657,7 @@ static irqreturn_t sh_eth_interrupt(int irq, void *netdev)
        else
                goto out;
 
-       if (!likely(mdp->irq_enabled)) {
+       if (unlikely(!mdp->irq_enabled)) {
                sh_eth_write(ndev, 0, EESIPR);
                goto out;
        }
index de2947ccc5ad7d30d9cb7bc68483154cb9d119cd..5eb0e684fd76a3de1f46210f9a9b6118d98041e3 100644 (file)
@@ -1323,7 +1323,8 @@ static int efx_ef10_init_nic(struct efx_nic *efx)
        }
 
        /* don't fail init if RSS setup doesn't work */
-       efx->type->rx_push_rss_config(efx, false, efx->rx_indir_table);
+       rc = efx->type->rx_push_rss_config(efx, false, efx->rx_indir_table);
+       efx->rss_active = (rc == 0);
 
        return 0;
 }
index 87bdc56b4e3a636450e4f39e49b37606332d8268..18ebaea44e8257255c6a910958e4b00466600903 100644 (file)
@@ -975,6 +975,8 @@ efx_ethtool_get_rxnfc(struct net_device *net_dev,
 
        case ETHTOOL_GRXFH: {
                info->data = 0;
+               if (!efx->rss_active) /* No RSS */
+                       return 0;
                switch (info->flow_type) {
                case UDP_V4_FLOW:
                        if (efx->rx_hash_udp_4tuple)
index 1a635ced62d0581634748d4b8bdcb15a2e0da69c..1c62c1a00fca49679cb8a69a1ac1a5564be9868d 100644 (file)
@@ -860,6 +860,7 @@ struct vfdi_status;
  * @rx_hash_key: Toeplitz hash key for RSS
  * @rx_indir_table: Indirection table for RSS
  * @rx_scatter: Scatter mode enabled for receives
+ * @rss_active: RSS enabled on hardware
  * @rx_hash_udp_4tuple: UDP 4-tuple hashing enabled
  * @int_error_count: Number of internal errors seen recently
  * @int_error_expire: Time at which error count will be expired
@@ -998,6 +999,7 @@ struct efx_nic {
        u8 rx_hash_key[40];
        u32 rx_indir_table[128];
        bool rx_scatter;
+       bool rss_active;
        bool rx_hash_udp_4tuple;
 
        unsigned int_error_count;
index a3901bc96586e5eff4f58105032ea2565c083769..4e54e5dc9fcb49bf03667843d47a4a2cf1aa978b 100644 (file)
@@ -403,6 +403,7 @@ static int siena_init_nic(struct efx_nic *efx)
        efx_writeo(efx, &temp, FR_AZ_RX_CFG);
 
        siena_rx_push_rss_config(efx, false, efx->rx_indir_table);
+       efx->rss_active = true;
 
        /* Enable event logging */
        rc = efx_mcdi_log_ctrl(efx, true, false, 0);
index c35597586121e5c3b41f6453711e3ea9920af463..3dc7d279f80513a948d2b855c5a09e16f63d5686 100644 (file)
@@ -60,8 +60,9 @@ struct oxnas_dwmac {
        struct regmap   *regmap;
 };
 
-static int oxnas_dwmac_init(struct oxnas_dwmac *dwmac)
+static int oxnas_dwmac_init(struct platform_device *pdev, void *priv)
 {
+       struct oxnas_dwmac *dwmac = priv;
        unsigned int value;
        int ret;
 
@@ -105,20 +106,20 @@ static int oxnas_dwmac_init(struct oxnas_dwmac *dwmac)
        return 0;
 }
 
+static void oxnas_dwmac_exit(struct platform_device *pdev, void *priv)
+{
+       struct oxnas_dwmac *dwmac = priv;
+
+       clk_disable_unprepare(dwmac->clk);
+}
+
 static int oxnas_dwmac_probe(struct platform_device *pdev)
 {
        struct plat_stmmacenet_data *plat_dat;
        struct stmmac_resources stmmac_res;
-       struct device_node *sysctrl;
        struct oxnas_dwmac *dwmac;
        int ret;
 
-       sysctrl = of_parse_phandle(pdev->dev.of_node, "oxsemi,sys-ctrl", 0);
-       if (!sysctrl) {
-               dev_err(&pdev->dev, "failed to get sys-ctrl node\n");
-               return -EINVAL;
-       }
-
        ret = stmmac_get_platform_resources(pdev, &stmmac_res);
        if (ret)
                return ret;
@@ -128,72 +129,48 @@ static int oxnas_dwmac_probe(struct platform_device *pdev)
                return PTR_ERR(plat_dat);
 
        dwmac = devm_kzalloc(&pdev->dev, sizeof(*dwmac), GFP_KERNEL);
-       if (!dwmac)
-               return -ENOMEM;
+       if (!dwmac) {
+               ret = -ENOMEM;
+               goto err_remove_config_dt;
+       }
 
        dwmac->dev = &pdev->dev;
        plat_dat->bsp_priv = dwmac;
+       plat_dat->init = oxnas_dwmac_init;
+       plat_dat->exit = oxnas_dwmac_exit;
 
-       dwmac->regmap = syscon_node_to_regmap(sysctrl);
+       dwmac->regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
+                                                       "oxsemi,sys-ctrl");
        if (IS_ERR(dwmac->regmap)) {
                dev_err(&pdev->dev, "failed to have sysctrl regmap\n");
-               return PTR_ERR(dwmac->regmap);
+               ret = PTR_ERR(dwmac->regmap);
+               goto err_remove_config_dt;
        }
 
        dwmac->clk = devm_clk_get(&pdev->dev, "gmac");
-       if (IS_ERR(dwmac->clk))
-               return PTR_ERR(dwmac->clk);
+       if (IS_ERR(dwmac->clk)) {
+               ret = PTR_ERR(dwmac->clk);
+               goto err_remove_config_dt;
+       }
 
-       ret = oxnas_dwmac_init(dwmac);
+       ret = oxnas_dwmac_init(pdev, plat_dat->bsp_priv);
        if (ret)
-               return ret;
+               goto err_remove_config_dt;
 
        ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
        if (ret)
-               clk_disable_unprepare(dwmac->clk);
+               goto err_dwmac_exit;
 
-       return ret;
-}
 
-static int oxnas_dwmac_remove(struct platform_device *pdev)
-{
-       struct oxnas_dwmac *dwmac = get_stmmac_bsp_priv(&pdev->dev);
-       int ret = stmmac_dvr_remove(&pdev->dev);
-
-       clk_disable_unprepare(dwmac->clk);
-
-       return ret;
-}
-
-#ifdef CONFIG_PM_SLEEP
-static int oxnas_dwmac_suspend(struct device *dev)
-{
-       struct oxnas_dwmac *dwmac = get_stmmac_bsp_priv(dev);
-       int ret;
-
-       ret = stmmac_suspend(dev);
-       clk_disable_unprepare(dwmac->clk);
-
-       return ret;
-}
-
-static int oxnas_dwmac_resume(struct device *dev)
-{
-       struct oxnas_dwmac *dwmac = get_stmmac_bsp_priv(dev);
-       int ret;
-
-       ret = oxnas_dwmac_init(dwmac);
-       if (ret)
-               return ret;
+       return 0;
 
-       ret = stmmac_resume(dev);
+err_dwmac_exit:
+       oxnas_dwmac_exit(pdev, plat_dat->bsp_priv);
+err_remove_config_dt:
+       stmmac_remove_config_dt(pdev, plat_dat);
 
        return ret;
 }
-#endif /* CONFIG_PM_SLEEP */
-
-static SIMPLE_DEV_PM_OPS(oxnas_dwmac_pm_ops,
-       oxnas_dwmac_suspend, oxnas_dwmac_resume);
 
 static const struct of_device_id oxnas_dwmac_match[] = {
        { .compatible = "oxsemi,ox820-dwmac" },
@@ -203,10 +180,10 @@ MODULE_DEVICE_TABLE(of, oxnas_dwmac_match);
 
 static struct platform_driver oxnas_dwmac_driver = {
        .probe  = oxnas_dwmac_probe,
-       .remove = oxnas_dwmac_remove,
+       .remove = stmmac_pltfr_remove,
        .driver = {
                .name           = "oxnas-dwmac",
-               .pm             = &oxnas_dwmac_pm_ops,
+               .pm             = &stmmac_pltfr_pm_ops,
                .of_match_table = oxnas_dwmac_match,
        },
 };
index bb40382e205deffd9a3312099723b72f84da18a5..39eb7a65bb9f6a6137ffe13c4c2e776720311db1 100644 (file)
@@ -3339,13 +3339,6 @@ int stmmac_dvr_probe(struct device *device,
 
        spin_lock_init(&priv->lock);
 
-       ret = register_netdev(ndev);
-       if (ret) {
-               netdev_err(priv->dev, "%s: ERROR %i registering the device\n",
-                          __func__, ret);
-               goto error_netdev_register;
-       }
-
        /* If a specific clk_csr value is passed from the platform
         * this means that the CSR Clock Range selection cannot be
         * changed at run-time and it is fixed. Viceversa the driver'll try to
@@ -3372,11 +3365,21 @@ int stmmac_dvr_probe(struct device *device,
                }
        }
 
-       return 0;
+       ret = register_netdev(ndev);
+       if (ret) {
+               netdev_err(priv->dev, "%s: ERROR %i registering the device\n",
+                          __func__, ret);
+               goto error_netdev_register;
+       }
+
+       return ret;
 
-error_mdio_register:
-       unregister_netdev(ndev);
 error_netdev_register:
+       if (priv->hw->pcs != STMMAC_PCS_RGMII &&
+           priv->hw->pcs != STMMAC_PCS_TBI &&
+           priv->hw->pcs != STMMAC_PCS_RTBI)
+               stmmac_mdio_unregister(ndev);
+error_mdio_register:
        netif_napi_del(&priv->napi);
 error_hw_init:
        clk_disable_unprepare(priv->pclk);
index fda01f770eff4239cafaf12e940ee23a07ecb43f..b0344c21375292fe3489a4872400be6535785491 100644 (file)
@@ -116,7 +116,7 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg,
        unsigned int mii_address = priv->hw->mii.addr;
        unsigned int mii_data = priv->hw->mii.data;
 
-       u32 value = MII_WRITE | MII_BUSY;
+       u32 value = MII_BUSY;
 
        value |= (phyaddr << priv->hw->mii.addr_shift)
                & priv->hw->mii.addr_mask;
@@ -126,6 +126,8 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg,
                & priv->hw->mii.clk_csr_mask;
        if (priv->plat->has_gmac4)
                value |= MII_GMAC4_WRITE;
+       else
+               value |= MII_WRITE;
 
        /* Wait until any existing MII operation is complete */
        if (stmmac_mdio_busy_wait(priv->ioaddr, mii_address))
index 031093e1c25f55244e6bdfde4ebeb65c0f2f10c1..dbfbb33ac66c2caf05e22d7e4b0bd54629bec635 100644 (file)
@@ -99,6 +99,11 @@ struct ipvl_port {
        int                     count;
 };
 
+struct ipvl_skb_cb {
+       bool tx_pkt;
+};
+#define IPVL_SKB_CB(_skb) ((struct ipvl_skb_cb *)&((_skb)->cb[0]))
+
 static inline struct ipvl_port *ipvlan_port_get_rcu(const struct net_device *d)
 {
        return rcu_dereference(d->rx_handler_data);
index b4e990743e1da0cb3a946f5473d02cce7447bd1a..83ce74acf82d5e08676cb0d796aac1fe1b524071 100644 (file)
@@ -198,7 +198,7 @@ void ipvlan_process_multicast(struct work_struct *work)
        unsigned int mac_hash;
        int ret;
        u8 pkt_type;
-       bool hlocal, dlocal;
+       bool tx_pkt;
 
        __skb_queue_head_init(&list);
 
@@ -207,8 +207,11 @@ void ipvlan_process_multicast(struct work_struct *work)
        spin_unlock_bh(&port->backlog.lock);
 
        while ((skb = __skb_dequeue(&list)) != NULL) {
+               struct net_device *dev = skb->dev;
+               bool consumed = false;
+
                ethh = eth_hdr(skb);
-               hlocal = ether_addr_equal(ethh->h_source, port->dev->dev_addr);
+               tx_pkt = IPVL_SKB_CB(skb)->tx_pkt;
                mac_hash = ipvlan_mac_hash(ethh->h_dest);
 
                if (ether_addr_equal(ethh->h_dest, port->dev->broadcast))
@@ -216,41 +219,45 @@ void ipvlan_process_multicast(struct work_struct *work)
                else
                        pkt_type = PACKET_MULTICAST;
 
-               dlocal = false;
                rcu_read_lock();
                list_for_each_entry_rcu(ipvlan, &port->ipvlans, pnode) {
-                       if (hlocal && (ipvlan->dev == skb->dev)) {
-                               dlocal = true;
+                       if (tx_pkt && (ipvlan->dev == skb->dev))
                                continue;
-                       }
                        if (!test_bit(mac_hash, ipvlan->mac_filters))
                                continue;
-
+                       if (!(ipvlan->dev->flags & IFF_UP))
+                               continue;
                        ret = NET_RX_DROP;
                        len = skb->len + ETH_HLEN;
                        nskb = skb_clone(skb, GFP_ATOMIC);
-                       if (!nskb)
-                               goto acct;
-
-                       nskb->pkt_type = pkt_type;
-                       nskb->dev = ipvlan->dev;
-                       if (hlocal)
-                               ret = dev_forward_skb(ipvlan->dev, nskb);
-                       else
-                               ret = netif_rx(nskb);
-acct:
+                       local_bh_disable();
+                       if (nskb) {
+                               consumed = true;
+                               nskb->pkt_type = pkt_type;
+                               nskb->dev = ipvlan->dev;
+                               if (tx_pkt)
+                                       ret = dev_forward_skb(ipvlan->dev, nskb);
+                               else
+                                       ret = netif_rx(nskb);
+                       }
                        ipvlan_count_rx(ipvlan, len, ret == NET_RX_SUCCESS, true);
+                       local_bh_enable();
                }
                rcu_read_unlock();
 
-               if (dlocal) {
+               if (tx_pkt) {
                        /* If the packet originated here, send it out. */
                        skb->dev = port->dev;
                        skb->pkt_type = pkt_type;
                        dev_queue_xmit(skb);
                } else {
-                       kfree_skb(skb);
+                       if (consumed)
+                               consume_skb(skb);
+                       else
+                               kfree_skb(skb);
                }
+               if (dev)
+                       dev_put(dev);
        }
 }
 
@@ -470,15 +477,24 @@ static int ipvlan_process_outbound(struct sk_buff *skb)
 }
 
 static void ipvlan_multicast_enqueue(struct ipvl_port *port,
-                                    struct sk_buff *skb)
+                                    struct sk_buff *skb, bool tx_pkt)
 {
        if (skb->protocol == htons(ETH_P_PAUSE)) {
                kfree_skb(skb);
                return;
        }
 
+       /* Record that the deferred packet is from TX or RX path. By
+        * looking at mac-addresses on packet will lead to erronus decisions.
+        * (This would be true for a loopback-mode on master device or a
+        * hair-pin mode of the switch.)
+        */
+       IPVL_SKB_CB(skb)->tx_pkt = tx_pkt;
+
        spin_lock(&port->backlog.lock);
        if (skb_queue_len(&port->backlog) < IPVLAN_QBACKLOG_LIMIT) {
+               if (skb->dev)
+                       dev_hold(skb->dev);
                __skb_queue_tail(&port->backlog, skb);
                spin_unlock(&port->backlog.lock);
                schedule_work(&port->wq);
@@ -537,7 +553,7 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev)
 
        } else if (is_multicast_ether_addr(eth->h_dest)) {
                ipvlan_skb_crossing_ns(skb, NULL);
-               ipvlan_multicast_enqueue(ipvlan->port, skb);
+               ipvlan_multicast_enqueue(ipvlan->port, skb, true);
                return NET_XMIT_SUCCESS;
        }
 
@@ -634,7 +650,7 @@ static rx_handler_result_t ipvlan_handle_mode_l2(struct sk_buff **pskb,
                         */
                        if (nskb) {
                                ipvlan_skb_crossing_ns(nskb, NULL);
-                               ipvlan_multicast_enqueue(port, nskb);
+                               ipvlan_multicast_enqueue(port, nskb, false);
                        }
                }
        } else {
index 693ec5b6622233cd3a28c64c11d6abb97585318b..8b0f99300cbc97d8c8b93c3dfa99cd841914c086 100644 (file)
@@ -135,6 +135,7 @@ static int ipvlan_port_create(struct net_device *dev)
 static void ipvlan_port_destroy(struct net_device *dev)
 {
        struct ipvl_port *port = ipvlan_port_get_rtnl(dev);
+       struct sk_buff *skb;
 
        dev->priv_flags &= ~IFF_IPVLAN_MASTER;
        if (port->mode == IPVLAN_MODE_L3S) {
@@ -144,7 +145,11 @@ static void ipvlan_port_destroy(struct net_device *dev)
        }
        netdev_rx_handler_unregister(dev);
        cancel_work_sync(&port->wq);
-       __skb_queue_purge(&port->backlog);
+       while ((skb = __skb_dequeue(&port->backlog)) != NULL) {
+               if (skb->dev)
+                       dev_put(skb->dev);
+               kfree_skb(skb);
+       }
        kfree(port);
 }
 
index 6c646e228833c07b0369c28684f0a6b4aa27cf2c..6e98ede997d3f08d4ac3fa967382b55e4dfc287d 100644 (file)
@@ -1367,6 +1367,7 @@ static struct usb_driver asix_driver = {
        .probe =        usbnet_probe,
        .suspend =      asix_suspend,
        .resume =       asix_resume,
+       .reset_resume = asix_resume,
        .disconnect =   usbnet_disconnect,
        .supports_autosuspend = 1,
        .disable_hub_initiated_lpm = 1,
index 7532646c3b7bedb89c2cbe95e84f09e32e0a8391..23dfb0eac0981704f2770bc3abe9bb32a80e3fc9 100644 (file)
@@ -967,6 +967,7 @@ static struct sk_buff *vrf_ip6_rcv(struct net_device *vrf_dev,
         */
        need_strict = rt6_need_strict(&ipv6_hdr(skb)->daddr);
        if (!ipv6_ndisc_frame(skb) && !need_strict) {
+               vrf_rx_stats(vrf_dev, skb->len);
                skb->dev = vrf_dev;
                skb->skb_iif = vrf_dev->ifindex;
 
@@ -1011,6 +1012,8 @@ static struct sk_buff *vrf_ip_rcv(struct net_device *vrf_dev,
                goto out;
        }
 
+       vrf_rx_stats(vrf_dev, skb->len);
+
        skb_push(skb, skb->mac_len);
        dev_queue_xmit_nit(skb, vrf_dev);
        skb_pull(skb, skb->mac_len);
index b776a0ab106c0d55b1b7cdf14b79d91621d27aa1..9d9b4e0def2a531344c8fd3d78258e1690340350 100644 (file)
@@ -218,7 +218,7 @@ static int slic_ds26522_probe(struct spi_device *spi)
 
        ret = slic_ds26522_init_configure(spi);
        if (ret == 0)
-               pr_info("DS26522 cs%d configurated\n", spi->chip_select);
+               pr_info("DS26522 cs%d configured\n", spi->chip_select);
 
        return ret;
 }
index b40cfb076f02446fda62aea907301e4a62dcc17a..2fc86dc7a8df3e487c8222fa84310e7832c9c0a8 100644 (file)
@@ -1193,8 +1193,8 @@ static void nvme_set_queue_limits(struct nvme_ctrl *ctrl,
                blk_queue_max_hw_sectors(q, ctrl->max_hw_sectors);
                blk_queue_max_segments(q, min_t(u32, max_segments, USHRT_MAX));
        }
-       if (ctrl->stripe_size)
-               blk_queue_chunk_sectors(q, ctrl->stripe_size >> 9);
+       if (ctrl->quirks & NVME_QUIRK_STRIPE_SIZE)
+               blk_queue_chunk_sectors(q, ctrl->max_hw_sectors);
        blk_queue_virt_boundary(q, ctrl->page_size - 1);
        if (ctrl->vwc & NVME_CTRL_VWC_PRESENT)
                vwc = true;
@@ -1250,19 +1250,6 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
        ctrl->max_hw_sectors =
                min_not_zero(ctrl->max_hw_sectors, max_hw_sectors);
 
-       if ((ctrl->quirks & NVME_QUIRK_STRIPE_SIZE) && id->vs[3]) {
-               unsigned int max_hw_sectors;
-
-               ctrl->stripe_size = 1 << (id->vs[3] + page_shift);
-               max_hw_sectors = ctrl->stripe_size >> (page_shift - 9);
-               if (ctrl->max_hw_sectors) {
-                       ctrl->max_hw_sectors = min(max_hw_sectors,
-                                                       ctrl->max_hw_sectors);
-               } else {
-                       ctrl->max_hw_sectors = max_hw_sectors;
-               }
-       }
-
        nvme_set_queue_limits(ctrl, ctrl->admin_q);
        ctrl->sgls = le32_to_cpu(id->sgls);
        ctrl->kas = le16_to_cpu(id->kas);
index 771e2e76187222dfb71616f5665c7b2b22802c74..aa0bc60810a74ff93cf05b294b2a9d4968ecf397 100644 (file)
@@ -1491,19 +1491,20 @@ static int
 nvme_fc_create_hw_io_queues(struct nvme_fc_ctrl *ctrl, u16 qsize)
 {
        struct nvme_fc_queue *queue = &ctrl->queues[1];
-       int i, j, ret;
+       int i, ret;
 
        for (i = 1; i < ctrl->queue_count; i++, queue++) {
                ret = __nvme_fc_create_hw_queue(ctrl, queue, i, qsize);
-               if (ret) {
-                       for (j = i-1; j >= 0; j--)
-                               __nvme_fc_delete_hw_queue(ctrl,
-                                               &ctrl->queues[j], j);
-                       return ret;
-               }
+               if (ret)
+                       goto delete_queues;
        }
 
        return 0;
+
+delete_queues:
+       for (; i >= 0; i--)
+               __nvme_fc_delete_hw_queue(ctrl, &ctrl->queues[i], i);
+       return ret;
 }
 
 static int
@@ -2401,8 +2402,8 @@ __nvme_fc_create_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
        WARN_ON_ONCE(!changed);
 
        dev_info(ctrl->ctrl.device,
-               "NVME-FC{%d}: new ctrl: NQN \"%s\" (%p)\n",
-               ctrl->cnum, ctrl->ctrl.opts->subsysnqn, &ctrl);
+               "NVME-FC{%d}: new ctrl: NQN \"%s\"\n",
+               ctrl->cnum, ctrl->ctrl.opts->subsysnqn);
 
        kref_get(&ctrl->ctrl.kref);
 
index bd5321441d127143b87563e5463d2944aa0c1b0e..6377e14586dc5c837749049cf3dafc7b210a3026 100644 (file)
@@ -135,7 +135,6 @@ struct nvme_ctrl {
 
        u32 page_size;
        u32 max_hw_sectors;
-       u32 stripe_size;
        u16 oncs;
        u16 vid;
        atomic_t abort_limit;
index 3d21a154dce79deceeff77cd16ef5c6bf2a71978..19beeb7b2ac26a5bf0f81bf4e8b995bf29dba195 100644 (file)
@@ -712,15 +712,8 @@ static void __nvme_process_cq(struct nvme_queue *nvmeq, unsigned int *tag)
                req = blk_mq_tag_to_rq(*nvmeq->tags, cqe.command_id);
                nvme_req(req)->result = cqe.result;
                blk_mq_complete_request(req, le16_to_cpu(cqe.status) >> 1);
-
        }
 
-       /* If the controller ignores the cq head doorbell and continuously
-        * writes to the queue, it is theoretically possible to wrap around
-        * the queue twice and mistakenly return IRQ_NONE.  Linux only
-        * requires that 0.1% of your interrupts are handled, so this isn't
-        * a big problem.
-        */
        if (head == nvmeq->cq_head && phase == nvmeq->cq_phase)
                return;
 
@@ -1909,10 +1902,10 @@ static int nvme_dev_map(struct nvme_dev *dev)
        if (!dev->bar)
                goto release;
 
-       return 0;
+       return 0;
   release:
-       pci_release_mem_regions(pdev);
-       return -ENODEV;
+       pci_release_mem_regions(pdev);
+       return -ENODEV;
 }
 
 static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
index b71e95044b43e3e62a5d063047064a46d88a6d9f..a5c09e703bd8636d96c9c0c7d603226e46518f61 100644 (file)
@@ -2160,30 +2160,6 @@ static int nvme_trans_synchronize_cache(struct nvme_ns *ns,
        return nvme_trans_status_code(hdr, nvme_sc);
 }
 
-static int nvme_trans_start_stop(struct nvme_ns *ns, struct sg_io_hdr *hdr,
-                                                       u8 *cmd)
-{
-       u8 immed, no_flush;
-
-       immed = cmd[1] & 0x01;
-       no_flush = cmd[4] & 0x04;
-
-       if (immed != 0) {
-               return nvme_trans_completion(hdr, SAM_STAT_CHECK_CONDITION,
-                                       ILLEGAL_REQUEST, SCSI_ASC_INVALID_CDB,
-                                       SCSI_ASCQ_CAUSE_NOT_REPORTABLE);
-       } else {
-               if (no_flush == 0) {
-                       /* Issue NVME FLUSH command prior to START STOP UNIT */
-                       int res = nvme_trans_synchronize_cache(ns, hdr);
-                       if (res)
-                               return res;
-               }
-
-               return 0;
-       }
-}
-
 static int nvme_trans_format_unit(struct nvme_ns *ns, struct sg_io_hdr *hdr,
                                                        u8 *cmd)
 {
@@ -2439,9 +2415,6 @@ static int nvme_scsi_translate(struct nvme_ns *ns, struct sg_io_hdr *hdr)
        case SECURITY_PROTOCOL_OUT:
                retcode = nvme_trans_security_protocol(ns, hdr, cmd);
                break;
-       case START_STOP:
-               retcode = nvme_trans_start_stop(ns, hdr, cmd);
-               break;
        case SYNCHRONIZE_CACHE:
                retcode = nvme_trans_synchronize_cache(ns, hdr);
                break;
index ec1ad2aa0a4ca941e8fe51db94cc7ffa452c1693..95ae52390478fe62fdb59605ee2c7a6d0583a919 100644 (file)
@@ -382,7 +382,6 @@ static void nvmet_execute_set_features(struct nvmet_req *req)
 {
        struct nvmet_subsys *subsys = req->sq->ctrl->subsys;
        u32 cdw10 = le32_to_cpu(req->cmd->common.cdw10[0]);
-       u64 val;
        u32 val32;
        u16 status = 0;
 
@@ -392,8 +391,7 @@ static void nvmet_execute_set_features(struct nvmet_req *req)
                        (subsys->max_qid - 1) | ((subsys->max_qid - 1) << 16));
                break;
        case NVME_FEAT_KATO:
-               val = le64_to_cpu(req->cmd->prop_set.value);
-               val32 = val & 0xffff;
+               val32 = le32_to_cpu(req->cmd->common.cdw10[1]);
                req->sq->ctrl->kato = DIV_ROUND_UP(val32, 1000);
                nvmet_set_result(req, req->sq->ctrl->kato);
                break;
index bcb8ebeb01c5d26515c8047e4eed765dbdc4da45..4e8e6a22bce162a61eec428e9c435acb26b74046 100644 (file)
@@ -845,7 +845,7 @@ fcloop_create_remote_port(struct device *dev, struct device_attribute *attr,
        rport->lport = nport->lport;
        nport->rport = rport;
 
-       return ret ? ret : count;
+       return count;
 }
 
 
@@ -952,7 +952,7 @@ fcloop_create_target_port(struct device *dev, struct device_attribute *attr,
        tport->lport = nport->lport;
        nport->tport = tport;
 
-       return ret ? ret : count;
+       return count;
 }
 
 
index 965911d9b36a77af3867ff6361169f977e71392b..398ea7f54826b6bef0db0aa35aa2b1bb8493f432 100644 (file)
@@ -981,8 +981,8 @@ static int __nvmem_cell_read(struct nvmem_device *nvmem,
  * @cell: nvmem cell to be read.
  * @len: pointer to length of cell which will be populated on successful read.
  *
- * Return: ERR_PTR() on error or a valid pointer to a char * buffer on success.
- * The buffer should be freed by the consumer with a kfree().
+ * Return: ERR_PTR() on error or a valid pointer to a buffer on success. The
+ * buffer should be freed by the consumer with a kfree().
  */
 void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len)
 {
index ac27b9bac3b9a9abe219e7d60fab8ea946c0abd8..8e7b120696fa91da63a44bc7f4f8422b5d24bc7e 100644 (file)
@@ -71,7 +71,7 @@ static struct nvmem_config imx_ocotp_nvmem_config = {
 
 static const struct of_device_id imx_ocotp_dt_ids[] = {
        { .compatible = "fsl,imx6q-ocotp",  (void *)128 },
-       { .compatible = "fsl,imx6sl-ocotp", (void *)32 },
+       { .compatible = "fsl,imx6sl-ocotp", (void *)64 },
        { .compatible = "fsl,imx6sx-ocotp", (void *)128 },
        { },
 };
index b5305f08b1848bf123f3448fba123a2761e17286..2bdb6c3893281c65d12a3916c037c07acba8480d 100644 (file)
@@ -21,11 +21,11 @@ static int qfprom_reg_read(void *context,
                        unsigned int reg, void *_val, size_t bytes)
 {
        void __iomem *base = context;
-       u32 *val = _val;
-       int i = 0, words = bytes / 4;
+       u8 *val = _val;
+       int i = 0, words = bytes;
 
        while (words--)
-               *val++ = readl(base + reg + (i++ * 4));
+               *val++ = readb(base + reg + i++);
 
        return 0;
 }
@@ -34,11 +34,11 @@ static int qfprom_reg_write(void *context,
                         unsigned int reg, void *_val, size_t bytes)
 {
        void __iomem *base = context;
-       u32 *val = _val;
-       int i = 0, words = bytes / 4;
+       u8 *val = _val;
+       int i = 0, words = bytes;
 
        while (words--)
-               writel(*val++, base + reg + (i++ * 4));
+               writeb(*val++, base + reg + i++);
 
        return 0;
 }
@@ -53,7 +53,7 @@ static int qfprom_remove(struct platform_device *pdev)
 static struct nvmem_config econfig = {
        .name = "qfprom",
        .owner = THIS_MODULE,
-       .stride = 4,
+       .stride = 1,
        .word_size = 1,
        .reg_read = qfprom_reg_read,
        .reg_write = qfprom_reg_write,
index a579126832afde2d758d629f58338af2d9e9378f..620c231a2889ef6879269a80ccbfaa3e4493958f 100644 (file)
@@ -212,7 +212,7 @@ static int meson_pmx_request_gpio(struct pinctrl_dev *pcdev,
 {
        struct meson_pinctrl *pc = pinctrl_dev_get_drvdata(pcdev);
 
-       meson_pmx_disable_other_groups(pc, range->pin_base + offset, -1);
+       meson_pmx_disable_other_groups(pc, offset, -1);
 
        return 0;
 }
index aea310a918210ebc96bcb2739ac3c50d10329f8d..c9a146948192dba19ca5da1587791c25b315d628 100644 (file)
@@ -382,26 +382,21 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type)
 {
        int ret = 0;
        u32 pin_reg;
-       unsigned long flags;
-       bool level_trig;
-       u32 active_level;
+       unsigned long flags, irq_flags;
        struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
        struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
 
        spin_lock_irqsave(&gpio_dev->lock, flags);
        pin_reg = readl(gpio_dev->base + (d->hwirq)*4);
 
-       /*
-        * When level_trig is set EDGE and active_level is set HIGH in BIOS
-        * default settings, ignore incoming settings from client and use
-        * BIOS settings to configure GPIO register.
+       /* Ignore the settings coming from the client and
+        * read the values from the ACPI tables
+        * while setting the trigger type
         */
-       level_trig = !(pin_reg & (LEVEL_TRIGGER << LEVEL_TRIG_OFF));
-       active_level = pin_reg & (ACTIVE_LEVEL_MASK << ACTIVE_LEVEL_OFF);
 
-       if(level_trig &&
-          ((active_level >> ACTIVE_LEVEL_OFF) == ACTIVE_HIGH))
-               type = IRQ_TYPE_EDGE_FALLING;
+       irq_flags = irq_get_trigger_type(d->irq);
+       if (irq_flags != IRQ_TYPE_NONE)
+               type = irq_flags;
 
        switch (type & IRQ_TYPE_SENSE_MASK) {
        case IRQ_TYPE_EDGE_RISING:
index 12f7d1eb65bc71e891f3eb88a750953dbd1ce68b..07409fde02b23f85005c0403ba146fce50cde970 100644 (file)
@@ -56,6 +56,17 @@ static const struct samsung_pin_bank_type bank_type_alive = {
        .reg_offset = { 0x00, 0x04, 0x08, 0x0c, },
 };
 
+/* Exynos5433 has the 4bit widths for PINCFG_TYPE_DRV bitfields. */
+static const struct samsung_pin_bank_type exynos5433_bank_type_off = {
+       .fld_width = { 4, 1, 2, 4, 2, 2, },
+       .reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, },
+};
+
+static const struct samsung_pin_bank_type exynos5433_bank_type_alive = {
+       .fld_width = { 4, 1, 2, 4, },
+       .reg_offset = { 0x00, 0x04, 0x08, 0x0c, },
+};
+
 static void exynos_irq_mask(struct irq_data *irqd)
 {
        struct irq_chip *chip = irq_data_get_irq_chip(irqd);
@@ -1335,82 +1346,82 @@ const struct samsung_pin_ctrl exynos5420_pin_ctrl[] __initconst = {
 
 /* pin banks of exynos5433 pin-controller - ALIVE */
 static const struct samsung_pin_bank_data exynos5433_pin_banks0[] = {
-       EXYNOS_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
-       EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
-       EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
-       EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
-       EXYNOS_PIN_BANK_EINTW_EXT(8, 0x020, "gpf1", 0x1004, 1),
-       EXYNOS_PIN_BANK_EINTW_EXT(4, 0x040, "gpf2", 0x1008, 1),
-       EXYNOS_PIN_BANK_EINTW_EXT(4, 0x060, "gpf3", 0x100c, 1),
-       EXYNOS_PIN_BANK_EINTW_EXT(8, 0x080, "gpf4", 0x1010, 1),
-       EXYNOS_PIN_BANK_EINTW_EXT(8, 0x0a0, "gpf5", 0x1014, 1),
+       EXYNOS5433_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00),
+       EXYNOS5433_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04),
+       EXYNOS5433_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08),
+       EXYNOS5433_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c),
+       EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x020, "gpf1", 0x1004, 1),
+       EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x040, "gpf2", 0x1008, 1),
+       EXYNOS5433_PIN_BANK_EINTW_EXT(4, 0x060, "gpf3", 0x100c, 1),
+       EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x080, "gpf4", 0x1010, 1),
+       EXYNOS5433_PIN_BANK_EINTW_EXT(8, 0x0a0, "gpf5", 0x1014, 1),
 };
 
 /* pin banks of exynos5433 pin-controller - AUD */
 static const struct samsung_pin_bank_data exynos5433_pin_banks1[] = {
-       EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
-       EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
+       EXYNOS5433_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00),
+       EXYNOS5433_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04),
 };
 
 /* pin banks of exynos5433 pin-controller - CPIF */
 static const struct samsung_pin_bank_data exynos5433_pin_banks2[] = {
-       EXYNOS_PIN_BANK_EINTG(2, 0x000, "gpv6", 0x00),
+       EXYNOS5433_PIN_BANK_EINTG(2, 0x000, "gpv6", 0x00),
 };
 
 /* pin banks of exynos5433 pin-controller - eSE */
 static const struct samsung_pin_bank_data exynos5433_pin_banks3[] = {
-       EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj2", 0x00),
+       EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj2", 0x00),
 };
 
 /* pin banks of exynos5433 pin-controller - FINGER */
 static const struct samsung_pin_bank_data exynos5433_pin_banks4[] = {
-       EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpd5", 0x00),
+       EXYNOS5433_PIN_BANK_EINTG(4, 0x000, "gpd5", 0x00),
 };
 
 /* pin banks of exynos5433 pin-controller - FSYS */
 static const struct samsung_pin_bank_data exynos5433_pin_banks5[] = {
-       EXYNOS_PIN_BANK_EINTG(6, 0x000, "gph1", 0x00),
-       EXYNOS_PIN_BANK_EINTG(7, 0x020, "gpr4", 0x04),
-       EXYNOS_PIN_BANK_EINTG(5, 0x040, "gpr0", 0x08),
-       EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpr1", 0x0c),
-       EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpr2", 0x10),
-       EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpr3", 0x14),
+       EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gph1", 0x00),
+       EXYNOS5433_PIN_BANK_EINTG(7, 0x020, "gpr4", 0x04),
+       EXYNOS5433_PIN_BANK_EINTG(5, 0x040, "gpr0", 0x08),
+       EXYNOS5433_PIN_BANK_EINTG(8, 0x060, "gpr1", 0x0c),
+       EXYNOS5433_PIN_BANK_EINTG(2, 0x080, "gpr2", 0x10),
+       EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpr3", 0x14),
 };
 
 /* pin banks of exynos5433 pin-controller - IMEM */
 static const struct samsung_pin_bank_data exynos5433_pin_banks6[] = {
-       EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpf0", 0x00),
+       EXYNOS5433_PIN_BANK_EINTG(8, 0x000, "gpf0", 0x00),
 };
 
 /* pin banks of exynos5433 pin-controller - NFC */
 static const struct samsung_pin_bank_data exynos5433_pin_banks7[] = {
-       EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
+       EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj0", 0x00),
 };
 
 /* pin banks of exynos5433 pin-controller - PERIC */
 static const struct samsung_pin_bank_data exynos5433_pin_banks8[] = {
-       EXYNOS_PIN_BANK_EINTG(6, 0x000, "gpv7", 0x00),
-       EXYNOS_PIN_BANK_EINTG(5, 0x020, "gpb0", 0x04),
-       EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpc0", 0x08),
-       EXYNOS_PIN_BANK_EINTG(2, 0x060, "gpc1", 0x0c),
-       EXYNOS_PIN_BANK_EINTG(6, 0x080, "gpc2", 0x10),
-       EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpc3", 0x14),
-       EXYNOS_PIN_BANK_EINTG(2, 0x0c0, "gpg0", 0x18),
-       EXYNOS_PIN_BANK_EINTG(4, 0x0e0, "gpd0", 0x1c),
-       EXYNOS_PIN_BANK_EINTG(6, 0x100, "gpd1", 0x20),
-       EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpd2", 0x24),
-       EXYNOS_PIN_BANK_EINTG(5, 0x140, "gpd4", 0x28),
-       EXYNOS_PIN_BANK_EINTG(2, 0x160, "gpd8", 0x2c),
-       EXYNOS_PIN_BANK_EINTG(7, 0x180, "gpd6", 0x30),
-       EXYNOS_PIN_BANK_EINTG(3, 0x1a0, "gpd7", 0x34),
-       EXYNOS_PIN_BANK_EINTG(5, 0x1c0, "gpg1", 0x38),
-       EXYNOS_PIN_BANK_EINTG(2, 0x1e0, "gpg2", 0x3c),
-       EXYNOS_PIN_BANK_EINTG(8, 0x200, "gpg3", 0x40),
+       EXYNOS5433_PIN_BANK_EINTG(6, 0x000, "gpv7", 0x00),
+       EXYNOS5433_PIN_BANK_EINTG(5, 0x020, "gpb0", 0x04),
+       EXYNOS5433_PIN_BANK_EINTG(8, 0x040, "gpc0", 0x08),
+       EXYNOS5433_PIN_BANK_EINTG(2, 0x060, "gpc1", 0x0c),
+       EXYNOS5433_PIN_BANK_EINTG(6, 0x080, "gpc2", 0x10),
+       EXYNOS5433_PIN_BANK_EINTG(8, 0x0a0, "gpc3", 0x14),
+       EXYNOS5433_PIN_BANK_EINTG(2, 0x0c0, "gpg0", 0x18),
+       EXYNOS5433_PIN_BANK_EINTG(4, 0x0e0, "gpd0", 0x1c),
+       EXYNOS5433_PIN_BANK_EINTG(6, 0x100, "gpd1", 0x20),
+       EXYNOS5433_PIN_BANK_EINTG(8, 0x120, "gpd2", 0x24),
+       EXYNOS5433_PIN_BANK_EINTG(5, 0x140, "gpd4", 0x28),
+       EXYNOS5433_PIN_BANK_EINTG(2, 0x160, "gpd8", 0x2c),
+       EXYNOS5433_PIN_BANK_EINTG(7, 0x180, "gpd6", 0x30),
+       EXYNOS5433_PIN_BANK_EINTG(3, 0x1a0, "gpd7", 0x34),
+       EXYNOS5433_PIN_BANK_EINTG(5, 0x1c0, "gpg1", 0x38),
+       EXYNOS5433_PIN_BANK_EINTG(2, 0x1e0, "gpg2", 0x3c),
+       EXYNOS5433_PIN_BANK_EINTG(8, 0x200, "gpg3", 0x40),
 };
 
 /* pin banks of exynos5433 pin-controller - TOUCH */
 static const struct samsung_pin_bank_data exynos5433_pin_banks9[] = {
-       EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
+       EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
 };
 
 /*
index 5821525a2c8473fa026b3dc84cd6eb999c243b2a..a473092fb8d2362f11a1a48beb7f545b7c9f25ce 100644 (file)
                .pctl_res_idx   = pctl_idx,             \
        }                                               \
 
+#define EXYNOS5433_PIN_BANK_EINTG(pins, reg, id, offs)         \
+       {                                                       \
+               .type           = &exynos5433_bank_type_off,    \
+               .pctl_offset    = reg,                          \
+               .nr_pins        = pins,                         \
+               .eint_type      = EINT_TYPE_GPIO,               \
+               .eint_offset    = offs,                         \
+               .name           = id                            \
+       }
+
+#define EXYNOS5433_PIN_BANK_EINTW(pins, reg, id, offs)         \
+       {                                                       \
+               .type           = &exynos5433_bank_type_alive,  \
+               .pctl_offset    = reg,                          \
+               .nr_pins        = pins,                         \
+               .eint_type      = EINT_TYPE_WKUP,               \
+               .eint_offset    = offs,                         \
+               .name           = id                            \
+       }
+
+#define EXYNOS5433_PIN_BANK_EINTW_EXT(pins, reg, id, offs, pctl_idx) \
+       {                                                       \
+               .type           = &exynos5433_bank_type_alive,  \
+               .pctl_offset    = reg,                          \
+               .nr_pins        = pins,                         \
+               .eint_type      = EINT_TYPE_WKUP,               \
+               .eint_offset    = offs,                         \
+               .name           = id,                           \
+               .pctl_res_idx   = pctl_idx,                     \
+       }                                                       \
+
 /**
  * struct exynos_weint_data: irq specific data for all the wakeup interrupts
  * generated by the external wakeup interrupt controller.
index 5fe8be089b8b2dc51ced608e0790c7ce05b8dd18..59aa8e302bc3f9ab9dd26b43e6bf53ef812631fd 100644 (file)
@@ -1034,7 +1034,7 @@ config SURFACE_PRO3_BUTTON
 
 config SURFACE_3_BUTTON
        tristate "Power/home/volume buttons driver for Microsoft Surface 3 tablet"
-       depends on ACPI && KEYBOARD_GPIO
+       depends on ACPI && KEYBOARD_GPIO && I2C
        ---help---
          This driver handles the power/home/volume buttons on the Microsoft Surface 3 tablet.
 
index 61f39abf5dc8f24b738a2dafc5117b40a2521fd5..82d67715ce76d9ff0442ecdcdbd2dbb324380203 100644 (file)
@@ -177,43 +177,43 @@ static void acpi_fujitsu_hotkey_notify(struct acpi_device *device, u32 event);
 
 #if IS_ENABLED(CONFIG_LEDS_CLASS)
 static enum led_brightness logolamp_get(struct led_classdev *cdev);
-static void logolamp_set(struct led_classdev *cdev,
+static int logolamp_set(struct led_classdev *cdev,
                               enum led_brightness brightness);
 
 static struct led_classdev logolamp_led = {
  .name = "fujitsu::logolamp",
  .brightness_get = logolamp_get,
- .brightness_set = logolamp_set
+ .brightness_set_blocking = logolamp_set
 };
 
 static enum led_brightness kblamps_get(struct led_classdev *cdev);
-static void kblamps_set(struct led_classdev *cdev,
+static int kblamps_set(struct led_classdev *cdev,
                               enum led_brightness brightness);
 
 static struct led_classdev kblamps_led = {
  .name = "fujitsu::kblamps",
  .brightness_get = kblamps_get,
- .brightness_set = kblamps_set
+ .brightness_set_blocking = kblamps_set
 };
 
 static enum led_brightness radio_led_get(struct led_classdev *cdev);
-static void radio_led_set(struct led_classdev *cdev,
+static int radio_led_set(struct led_classdev *cdev,
                               enum led_brightness brightness);
 
 static struct led_classdev radio_led = {
  .name = "fujitsu::radio_led",
  .brightness_get = radio_led_get,
- .brightness_set = radio_led_set
+ .brightness_set_blocking = radio_led_set
 };
 
 static enum led_brightness eco_led_get(struct led_classdev *cdev);
-static void eco_led_set(struct led_classdev *cdev,
+static int eco_led_set(struct led_classdev *cdev,
                               enum led_brightness brightness);
 
 static struct led_classdev eco_led = {
  .name = "fujitsu::eco_led",
  .brightness_get = eco_led_get,
- .brightness_set = eco_led_set
+ .brightness_set_blocking = eco_led_set
 };
 #endif
 
@@ -267,48 +267,48 @@ static int call_fext_func(int cmd, int arg0, int arg1, int arg2)
 #if IS_ENABLED(CONFIG_LEDS_CLASS)
 /* LED class callbacks */
 
-static void logolamp_set(struct led_classdev *cdev,
+static int logolamp_set(struct led_classdev *cdev,
                               enum led_brightness brightness)
 {
        if (brightness >= LED_FULL) {
                call_fext_func(FUNC_LEDS, 0x1, LOGOLAMP_POWERON, FUNC_LED_ON);
-               call_fext_func(FUNC_LEDS, 0x1, LOGOLAMP_ALWAYS, FUNC_LED_ON);
+               return call_fext_func(FUNC_LEDS, 0x1, LOGOLAMP_ALWAYS, FUNC_LED_ON);
        } else if (brightness >= LED_HALF) {
                call_fext_func(FUNC_LEDS, 0x1, LOGOLAMP_POWERON, FUNC_LED_ON);
-               call_fext_func(FUNC_LEDS, 0x1, LOGOLAMP_ALWAYS, FUNC_LED_OFF);
+               return call_fext_func(FUNC_LEDS, 0x1, LOGOLAMP_ALWAYS, FUNC_LED_OFF);
        } else {
-               call_fext_func(FUNC_LEDS, 0x1, LOGOLAMP_POWERON, FUNC_LED_OFF);
+               return call_fext_func(FUNC_LEDS, 0x1, LOGOLAMP_POWERON, FUNC_LED_OFF);
        }
 }
 
-static void kblamps_set(struct led_classdev *cdev,
+static int kblamps_set(struct led_classdev *cdev,
                               enum led_brightness brightness)
 {
        if (brightness >= LED_FULL)
-               call_fext_func(FUNC_LEDS, 0x1, KEYBOARD_LAMPS, FUNC_LED_ON);
+               return call_fext_func(FUNC_LEDS, 0x1, KEYBOARD_LAMPS, FUNC_LED_ON);
        else
-               call_fext_func(FUNC_LEDS, 0x1, KEYBOARD_LAMPS, FUNC_LED_OFF);
+               return call_fext_func(FUNC_LEDS, 0x1, KEYBOARD_LAMPS, FUNC_LED_OFF);
 }
 
-static void radio_led_set(struct led_classdev *cdev,
+static int radio_led_set(struct led_classdev *cdev,
                                enum led_brightness brightness)
 {
        if (brightness >= LED_FULL)
-               call_fext_func(FUNC_RFKILL, 0x5, RADIO_LED_ON, RADIO_LED_ON);
+               return call_fext_func(FUNC_RFKILL, 0x5, RADIO_LED_ON, RADIO_LED_ON);
        else
-               call_fext_func(FUNC_RFKILL, 0x5, RADIO_LED_ON, 0x0);
+               return call_fext_func(FUNC_RFKILL, 0x5, RADIO_LED_ON, 0x0);
 }
 
-static void eco_led_set(struct led_classdev *cdev,
+static int eco_led_set(struct led_classdev *cdev,
                                enum led_brightness brightness)
 {
        int curr;
 
        curr = call_fext_func(FUNC_LEDS, 0x2, ECO_LED, 0x0);
        if (brightness >= LED_FULL)
-               call_fext_func(FUNC_LEDS, 0x1, ECO_LED, curr | ECO_LED_ON);
+               return call_fext_func(FUNC_LEDS, 0x1, ECO_LED, curr | ECO_LED_ON);
        else
-               call_fext_func(FUNC_LEDS, 0x1, ECO_LED, curr & ~ECO_LED_ON);
+               return call_fext_func(FUNC_LEDS, 0x1, ECO_LED, curr & ~ECO_LED_ON);
 }
 
 static enum led_brightness logolamp_get(struct led_classdev *cdev)
index 8130dfe897451268adcea02c420d3aa61c9809aa..4971aa54756a965ccc99edc63946fee11c13d3e9 100644 (file)
@@ -770,6 +770,7 @@ static int cvm_oct_probe(struct platform_device *pdev)
                        /* Initialize the device private structure. */
                        struct octeon_ethernet *priv = netdev_priv(dev);
 
+                       SET_NETDEV_DEV(dev, &pdev->dev);
                        dev->netdev_ops = &cvm_oct_pow_netdev_ops;
                        priv->imode = CVMX_HELPER_INTERFACE_MODE_DISABLED;
                        priv->port = CVMX_PIP_NUM_INPUT_PORTS;
@@ -816,6 +817,7 @@ static int cvm_oct_probe(struct platform_device *pdev)
                        }
 
                        /* Initialize the device private structure. */
+                       SET_NETDEV_DEV(dev, &pdev->dev);
                        priv = netdev_priv(dev);
                        priv->netdev = dev;
                        priv->of_node = cvm_oct_node_for_port(pip, interface,
index 0aa9e7d697a5df8a8d25194c377498ddce049d87..25dbd8c7aec73345d357c2a75ff0cde26c918217 100644 (file)
@@ -239,6 +239,16 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum,
        if (ifp->desc.bNumEndpoints >= num_ep)
                goto skip_to_next_endpoint_or_interface_descriptor;
 
+       /* Check for duplicate endpoint addresses */
+       for (i = 0; i < ifp->desc.bNumEndpoints; ++i) {
+               if (ifp->endpoint[i].desc.bEndpointAddress ==
+                   d->bEndpointAddress) {
+                       dev_warn(ddev, "config %d interface %d altsetting %d has a duplicate endpoint with address 0x%X, skipping\n",
+                           cfgno, inum, asnum, d->bEndpointAddress);
+                       goto skip_to_next_endpoint_or_interface_descriptor;
+               }
+       }
+
        endpoint = &ifp->endpoint[ifp->desc.bNumEndpoints];
        ++ifp->desc.bNumEndpoints;
 
index 1fa5c0f29c647ab38367c00817518e122cf3b65a..a56c75e09786d5fa1e064a8e56e58e4095e4d716 100644 (file)
@@ -103,8 +103,7 @@ EXPORT_SYMBOL_GPL(ehci_cf_port_reset_rwsem);
 
 static void hub_release(struct kref *kref);
 static int usb_reset_and_verify_device(struct usb_device *udev);
-static void hub_usb3_port_prepare_disable(struct usb_hub *hub,
-                                         struct usb_port *port_dev);
+static int hub_port_disable(struct usb_hub *hub, int port1, int set_state);
 
 static inline char *portspeed(struct usb_hub *hub, int portstatus)
 {
@@ -902,34 +901,6 @@ static int hub_set_port_link_state(struct usb_hub *hub, int port1,
                        USB_PORT_FEAT_LINK_STATE);
 }
 
-/*
- * USB-3 does not have a similar link state as USB-2 that will avoid negotiating
- * a connection with a plugged-in cable but will signal the host when the cable
- * is unplugged. Disable remote wake and set link state to U3 for USB-3 devices
- */
-static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
-{
-       struct usb_port *port_dev = hub->ports[port1 - 1];
-       struct usb_device *hdev = hub->hdev;
-       int ret = 0;
-
-       if (!hub->error) {
-               if (hub_is_superspeed(hub->hdev)) {
-                       hub_usb3_port_prepare_disable(hub, port_dev);
-                       ret = hub_set_port_link_state(hub, port_dev->portnum,
-                                                     USB_SS_PORT_LS_U3);
-               } else {
-                       ret = usb_clear_port_feature(hdev, port1,
-                                       USB_PORT_FEAT_ENABLE);
-               }
-       }
-       if (port_dev->child && set_state)
-               usb_set_device_state(port_dev->child, USB_STATE_NOTATTACHED);
-       if (ret && ret != -ENODEV)
-               dev_err(&port_dev->dev, "cannot disable (err = %d)\n", ret);
-       return ret;
-}
-
 /*
  * Disable a port and mark a logical connect-change event, so that some
  * time later hub_wq will disconnect() any existing usb_device on the port
@@ -4162,6 +4133,34 @@ static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
 
 #endif /* CONFIG_PM */
 
+/*
+ * USB-3 does not have a similar link state as USB-2 that will avoid negotiating
+ * a connection with a plugged-in cable but will signal the host when the cable
+ * is unplugged. Disable remote wake and set link state to U3 for USB-3 devices
+ */
+static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
+{
+       struct usb_port *port_dev = hub->ports[port1 - 1];
+       struct usb_device *hdev = hub->hdev;
+       int ret = 0;
+
+       if (!hub->error) {
+               if (hub_is_superspeed(hub->hdev)) {
+                       hub_usb3_port_prepare_disable(hub, port_dev);
+                       ret = hub_set_port_link_state(hub, port_dev->portnum,
+                                                     USB_SS_PORT_LS_U3);
+               } else {
+                       ret = usb_clear_port_feature(hdev, port1,
+                                       USB_PORT_FEAT_ENABLE);
+               }
+       }
+       if (port_dev->child && set_state)
+               usb_set_device_state(port_dev->child, USB_STATE_NOTATTACHED);
+       if (ret && ret != -ENODEV)
+               dev_err(&port_dev->dev, "cannot disable (err = %d)\n", ret);
+       return ret;
+}
+
 
 /* USB 2.0 spec, 7.1.7.3 / fig 7-29:
  *
index b95930f20d906dfc02d4d6db7dbe954e475d11cc..c55db4aa54d677c77fb2a0c9bcff7d38ac7d1b9e 100644 (file)
@@ -3753,7 +3753,7 @@ static int dwc2_hsotg_ep_enable(struct usb_ep *ep,
                hs_ep->desc_list = dma_alloc_coherent(hsotg->dev,
                        MAX_DMA_DESC_NUM_GENERIC *
                        sizeof(struct dwc2_dma_desc),
-                       &hs_ep->desc_list_dma, GFP_KERNEL);
+                       &hs_ep->desc_list_dma, GFP_ATOMIC);
                if (!hs_ep->desc_list) {
                        ret = -ENOMEM;
                        goto error2;
index a786256535b6a77392018aa93f78f785daf8a1b2..11fe68a4627bd315c8e82dbd3398b2dfde9bde8c 100644 (file)
@@ -247,8 +247,6 @@ MODULE_DEVICE_TABLE(of, dwc2_of_match_table);
 static void dwc2_get_device_property(struct dwc2_hsotg *hsotg,
                                     char *property, u8 size, u64 *value)
 {
-       u8 val8;
-       u16 val16;
        u32 val32;
 
        switch (size) {
@@ -256,17 +254,7 @@ static void dwc2_get_device_property(struct dwc2_hsotg *hsotg,
                *value = device_property_read_bool(hsotg->dev, property);
                break;
        case 1:
-               if (device_property_read_u8(hsotg->dev, property, &val8))
-                       return;
-
-               *value = val8;
-               break;
        case 2:
-               if (device_property_read_u16(hsotg->dev, property, &val16))
-                       return;
-
-               *value = val16;
-               break;
        case 4:
                if (device_property_read_u32(hsotg->dev, property, &val32))
                        return;
@@ -1100,13 +1088,13 @@ static void dwc2_set_gadget_dma(struct dwc2_hsotg *hsotg)
        /* Buffer DMA */
        dwc2_set_param_bool(hsotg, &p->g_dma,
                            false, "gadget-dma",
-                           true, false,
+                           dma_capable, false,
                            dma_capable);
 
        /* DMA Descriptor */
        dwc2_set_param_bool(hsotg, &p->g_dma_desc, false,
                            "gadget-dma-desc",
-                           p->g_dma, false,
+                           !!hw->dma_desc_enable, false,
                            !!hw->dma_desc_enable);
 }
 
@@ -1130,8 +1118,14 @@ static void dwc2_set_parameters(struct dwc2_hsotg *hsotg,
 
                dwc2_set_param_bool(hsotg, &p->host_dma,
                                    false, "host-dma",
-                                   true, false,
+                                   dma_capable, false,
                                    dma_capable);
+               dwc2_set_param_host_rx_fifo_size(hsotg,
+                               params->host_rx_fifo_size);
+               dwc2_set_param_host_nperio_tx_fifo_size(hsotg,
+                               params->host_nperio_tx_fifo_size);
+               dwc2_set_param_host_perio_tx_fifo_size(hsotg,
+                               params->host_perio_tx_fifo_size);
        }
        dwc2_set_param_dma_desc_enable(hsotg, params->dma_desc_enable);
        dwc2_set_param_dma_desc_fs_enable(hsotg, params->dma_desc_fs_enable);
@@ -1140,12 +1134,6 @@ static void dwc2_set_parameters(struct dwc2_hsotg *hsotg,
                        params->host_support_fs_ls_low_power);
        dwc2_set_param_enable_dynamic_fifo(hsotg,
                        params->enable_dynamic_fifo);
-       dwc2_set_param_host_rx_fifo_size(hsotg,
-                       params->host_rx_fifo_size);
-       dwc2_set_param_host_nperio_tx_fifo_size(hsotg,
-                       params->host_nperio_tx_fifo_size);
-       dwc2_set_param_host_perio_tx_fifo_size(hsotg,
-                       params->host_perio_tx_fifo_size);
        dwc2_set_param_max_transfer_size(hsotg,
                        params->max_transfer_size);
        dwc2_set_param_max_packet_count(hsotg,
index de5a8570be04213cd3fd39c774662c9173907e34..14b760209680920e65e92fbbb75a14c3bd4a3b18 100644 (file)
@@ -45,9 +45,7 @@
 #define DWC3_XHCI_RESOURCES_NUM        2
 
 #define DWC3_SCRATCHBUF_SIZE   4096    /* each buffer is assumed to be 4KiB */
-#define DWC3_EVENT_SIZE                4       /* bytes */
-#define DWC3_EVENT_MAX_NUM     64      /* 2 events/endpoint */
-#define DWC3_EVENT_BUFFERS_SIZE        (DWC3_EVENT_SIZE * DWC3_EVENT_MAX_NUM)
+#define DWC3_EVENT_BUFFERS_SIZE        4096
 #define DWC3_EVENT_TYPE_MASK   0xfe
 
 #define DWC3_EVENT_TYPE_DEV    0
 #define DWC3_DCFG_SUPERSPEED_PLUS (5 << 0)  /* DWC_usb31 only */
 #define DWC3_DCFG_SUPERSPEED   (4 << 0)
 #define DWC3_DCFG_HIGHSPEED    (0 << 0)
-#define DWC3_DCFG_FULLSPEED2   (1 << 0)
+#define DWC3_DCFG_FULLSPEED    (1 << 0)
 #define DWC3_DCFG_LOWSPEED     (2 << 0)
-#define DWC3_DCFG_FULLSPEED1   (3 << 0)
 
 #define DWC3_DCFG_NUMP_SHIFT   17
 #define DWC3_DCFG_NUMP(n)      (((n) >> DWC3_DCFG_NUMP_SHIFT) & 0x1f)
 #define DWC3_DSTS_SUPERSPEED_PLUS      (5 << 0) /* DWC_usb31 only */
 #define DWC3_DSTS_SUPERSPEED           (4 << 0)
 #define DWC3_DSTS_HIGHSPEED            (0 << 0)
-#define DWC3_DSTS_FULLSPEED2           (1 << 0)
+#define DWC3_DSTS_FULLSPEED            (1 << 0)
 #define DWC3_DSTS_LOWSPEED             (2 << 0)
-#define DWC3_DSTS_FULLSPEED1           (3 << 0)
 
 /* Device Generic Command Register */
 #define DWC3_DGCMD_SET_LMP             0x01
index 29e80cc9b634aab72f59e73c71667dfef9f86a45..eb1b9cb3f9d1df29bb4c6d8fe2b8d4b3ebf7897b 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/slab.h>
+#include <linux/irq.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/platform_data/dwc3-omap.h>
@@ -510,7 +511,7 @@ static int dwc3_omap_probe(struct platform_device *pdev)
 
        /* check the DMA Status */
        reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG);
-
+       irq_set_status_flags(omap->irq, IRQ_NOAUTOEN);
        ret = devm_request_threaded_irq(dev, omap->irq, dwc3_omap_interrupt,
                                        dwc3_omap_interrupt_thread, IRQF_SHARED,
                                        "dwc3-omap", omap);
@@ -531,7 +532,7 @@ static int dwc3_omap_probe(struct platform_device *pdev)
        }
 
        dwc3_omap_enable_irqs(omap);
-
+       enable_irq(omap->irq);
        return 0;
 
 err2:
@@ -552,6 +553,7 @@ static int dwc3_omap_remove(struct platform_device *pdev)
        extcon_unregister_notifier(omap->edev, EXTCON_USB, &omap->vbus_nb);
        extcon_unregister_notifier(omap->edev, EXTCON_USB_HOST, &omap->id_nb);
        dwc3_omap_disable_irqs(omap);
+       disable_irq(omap->irq);
        of_platform_depopulate(omap->dev);
        pm_runtime_put_sync(&pdev->dev);
        pm_runtime_disable(&pdev->dev);
index 2b73339f286ba109d74e465aa55189bf84463398..cce0a220b6b0437f23102da3fa56f4f7373f9082 100644 (file)
@@ -38,6 +38,7 @@
 #define PCI_DEVICE_ID_INTEL_BXT_M              0x1aaa
 #define PCI_DEVICE_ID_INTEL_APL                        0x5aaa
 #define PCI_DEVICE_ID_INTEL_KBP                        0xa2b0
+#define PCI_DEVICE_ID_INTEL_GLK                        0x31aa
 
 #define PCI_INTEL_BXT_DSM_UUID         "732b85d5-b7a7-4a1b-9ba0-4bbd00ffd511"
 #define PCI_INTEL_BXT_FUNC_PMU_PWR     4
@@ -73,16 +74,6 @@ static int dwc3_pci_quirks(struct dwc3_pci *dwc)
 {
        struct platform_device          *dwc3 = dwc->dwc3;
        struct pci_dev                  *pdev = dwc->pci;
-       int                             ret;
-
-       struct property_entry sysdev_property[] = {
-               PROPERTY_ENTRY_BOOL("linux,sysdev_is_parent"),
-               { },
-       };
-
-       ret = platform_device_add_properties(dwc3, sysdev_property);
-       if (ret)
-               return ret;
 
        if (pdev->vendor == PCI_VENDOR_ID_AMD &&
            pdev->device == PCI_DEVICE_ID_AMD_NL_USB) {
@@ -105,6 +96,7 @@ static int dwc3_pci_quirks(struct dwc3_pci *dwc)
                        PROPERTY_ENTRY_BOOL("snps,disable_scramble_quirk"),
                        PROPERTY_ENTRY_BOOL("snps,dis_u3_susphy_quirk"),
                        PROPERTY_ENTRY_BOOL("snps,dis_u2_susphy_quirk"),
+                       PROPERTY_ENTRY_BOOL("linux,sysdev_is_parent"),
                        { },
                };
 
@@ -115,7 +107,8 @@ static int dwc3_pci_quirks(struct dwc3_pci *dwc)
                int ret;
 
                struct property_entry properties[] = {
-                       PROPERTY_ENTRY_STRING("dr-mode", "peripheral"),
+                       PROPERTY_ENTRY_STRING("dr_mode", "peripheral"),
+                       PROPERTY_ENTRY_BOOL("linux,sysdev_is_parent"),
                        { }
                };
 
@@ -167,6 +160,7 @@ static int dwc3_pci_quirks(struct dwc3_pci *dwc)
                        PROPERTY_ENTRY_BOOL("snps,usb3_lpm_capable"),
                        PROPERTY_ENTRY_BOOL("snps,has-lpm-erratum"),
                        PROPERTY_ENTRY_BOOL("snps,dis_enblslpm_quirk"),
+                       PROPERTY_ENTRY_BOOL("linux,sysdev_is_parent"),
                        { },
                };
 
@@ -274,6 +268,7 @@ static const struct pci_device_id dwc3_pci_id_table[] = {
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BXT_M), },
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_APL), },
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_KBP), },
+       { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_GLK), },
        { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB), },
        {  }    /* Terminating Entry */
 };
index 4878d187c7d4a4b3b3851c29624ff04bb32df020..9bb1f8526f3ed4d5413e008b2ec24b4565f3f619 100644 (file)
@@ -39,18 +39,13 @@ static void __dwc3_ep0_do_control_status(struct dwc3 *dwc, struct dwc3_ep *dep);
 static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
                struct dwc3_ep *dep, struct dwc3_request *req);
 
-static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
-               u32 len, u32 type, bool chain)
+static void dwc3_ep0_prepare_one_trb(struct dwc3 *dwc, u8 epnum,
+               dma_addr_t buf_dma, u32 len, u32 type, bool chain)
 {
-       struct dwc3_gadget_ep_cmd_params params;
        struct dwc3_trb                 *trb;
        struct dwc3_ep                  *dep;
 
-       int                             ret;
-
        dep = dwc->eps[epnum];
-       if (dep->flags & DWC3_EP_BUSY)
-               return 0;
 
        trb = &dwc->ep0_trb[dep->trb_enqueue];
 
@@ -71,15 +66,23 @@ static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
                trb->ctrl |= (DWC3_TRB_CTRL_IOC
                                | DWC3_TRB_CTRL_LST);
 
-       if (chain)
+       trace_dwc3_prepare_trb(dep, trb);
+}
+
+static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum)
+{
+       struct dwc3_gadget_ep_cmd_params params;
+       struct dwc3_ep                  *dep;
+       int                             ret;
+
+       dep = dwc->eps[epnum];
+       if (dep->flags & DWC3_EP_BUSY)
                return 0;
 
        memset(&params, 0, sizeof(params));
        params.param0 = upper_32_bits(dwc->ep0_trb_addr);
        params.param1 = lower_32_bits(dwc->ep0_trb_addr);
 
-       trace_dwc3_prepare_trb(dep, trb);
-
        ret = dwc3_send_gadget_ep_cmd(dep, DWC3_DEPCMD_STARTTRANSFER, &params);
        if (ret < 0)
                return ret;
@@ -280,8 +283,9 @@ void dwc3_ep0_out_start(struct dwc3 *dwc)
 
        complete(&dwc->ep0_in_setup);
 
-       ret = dwc3_ep0_start_trans(dwc, 0, dwc->ctrl_req_addr, 8,
+       dwc3_ep0_prepare_one_trb(dwc, 0, dwc->ctrl_req_addr, 8,
                        DWC3_TRBCTL_CONTROL_SETUP, false);
+       ret = dwc3_ep0_start_trans(dwc, 0);
        WARN_ON(ret < 0);
 }
 
@@ -912,9 +916,9 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc,
 
                        dwc->ep0_next_event = DWC3_EP0_COMPLETE;
 
-                       ret = dwc3_ep0_start_trans(dwc, epnum,
-                                       dwc->ctrl_req_addr, 0,
-                                       DWC3_TRBCTL_CONTROL_DATA, false);
+                       dwc3_ep0_prepare_one_trb(dwc, epnum, dwc->ctrl_req_addr,
+                                       0, DWC3_TRBCTL_CONTROL_DATA, false);
+                       ret = dwc3_ep0_start_trans(dwc, epnum);
                        WARN_ON(ret < 0);
                }
        }
@@ -993,9 +997,10 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
        req->direction = !!dep->number;
 
        if (req->request.length == 0) {
-               ret = dwc3_ep0_start_trans(dwc, dep->number,
+               dwc3_ep0_prepare_one_trb(dwc, dep->number,
                                dwc->ctrl_req_addr, 0,
                                DWC3_TRBCTL_CONTROL_DATA, false);
+               ret = dwc3_ep0_start_trans(dwc, dep->number);
        } else if (!IS_ALIGNED(req->request.length, dep->endpoint.maxpacket)
                        && (dep->number == 0)) {
                u32     transfer_size = 0;
@@ -1011,7 +1016,7 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
                if (req->request.length > DWC3_EP0_BOUNCE_SIZE) {
                        transfer_size = ALIGN(req->request.length - maxpacket,
                                              maxpacket);
-                       ret = dwc3_ep0_start_trans(dwc, dep->number,
+                       dwc3_ep0_prepare_one_trb(dwc, dep->number,
                                                   req->request.dma,
                                                   transfer_size,
                                                   DWC3_TRBCTL_CONTROL_DATA,
@@ -1023,18 +1028,20 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
 
                dwc->ep0_bounced = true;
 
-               ret = dwc3_ep0_start_trans(dwc, dep->number,
+               dwc3_ep0_prepare_one_trb(dwc, dep->number,
                                dwc->ep0_bounce_addr, transfer_size,
                                DWC3_TRBCTL_CONTROL_DATA, false);
+               ret = dwc3_ep0_start_trans(dwc, dep->number);
        } else {
                ret = usb_gadget_map_request_by_dev(dwc->sysdev,
                                &req->request, dep->number);
                if (ret)
                        return;
 
-               ret = dwc3_ep0_start_trans(dwc, dep->number, req->request.dma,
+               dwc3_ep0_prepare_one_trb(dwc, dep->number, req->request.dma,
                                req->request.length, DWC3_TRBCTL_CONTROL_DATA,
                                false);
+               ret = dwc3_ep0_start_trans(dwc, dep->number);
        }
 
        WARN_ON(ret < 0);
@@ -1048,8 +1055,9 @@ static int dwc3_ep0_start_control_status(struct dwc3_ep *dep)
        type = dwc->three_stage_setup ? DWC3_TRBCTL_CONTROL_STATUS3
                : DWC3_TRBCTL_CONTROL_STATUS2;
 
-       return dwc3_ep0_start_trans(dwc, dep->number,
+       dwc3_ep0_prepare_one_trb(dwc, dep->number,
                        dwc->ctrl_req_addr, 0, type, false);
+       return dwc3_ep0_start_trans(dwc, dep->number);
 }
 
 static void __dwc3_ep0_do_control_status(struct dwc3 *dwc, struct dwc3_ep *dep)
index efddaf5d11d12639867ce8cb7c9a24ae2c7333c9..204c754cc647072d4caffbe06a4c1a8b869ca51a 100644 (file)
@@ -180,11 +180,11 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
        if (req->request.status == -EINPROGRESS)
                req->request.status = status;
 
-       if (dwc->ep0_bounced && dep->number == 0)
+       if (dwc->ep0_bounced && dep->number <= 1)
                dwc->ep0_bounced = false;
-       else
-               usb_gadget_unmap_request_by_dev(dwc->sysdev,
-                               &req->request, req->direction);
+
+       usb_gadget_unmap_request_by_dev(dwc->sysdev,
+                       &req->request, req->direction);
 
        trace_dwc3_gadget_giveback(req);
 
@@ -1720,7 +1720,7 @@ static int __dwc3_gadget_start(struct dwc3 *dwc)
                        reg |= DWC3_DCFG_LOWSPEED;
                        break;
                case USB_SPEED_FULL:
-                       reg |= DWC3_DCFG_FULLSPEED1;
+                       reg |= DWC3_DCFG_FULLSPEED;
                        break;
                case USB_SPEED_HIGH:
                        reg |= DWC3_DCFG_HIGHSPEED;
@@ -2232,9 +2232,14 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
 
        dep = dwc->eps[epnum];
 
-       if (!(dep->flags & DWC3_EP_ENABLED) &&
-           !(dep->flags & DWC3_EP_END_TRANSFER_PENDING))
-               return;
+       if (!(dep->flags & DWC3_EP_ENABLED)) {
+               if (!(dep->flags & DWC3_EP_END_TRANSFER_PENDING))
+                       return;
+
+               /* Handle only EPCMDCMPLT when EP disabled */
+               if (event->endpoint_event != DWC3_DEPEVT_EPCMDCMPLT)
+                       return;
+       }
 
        if (epnum == 0 || epnum == 1) {
                dwc3_ep0_interrupt(dwc, event);
@@ -2531,8 +2536,7 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
                dwc->gadget.ep0->maxpacket = 64;
                dwc->gadget.speed = USB_SPEED_HIGH;
                break;
-       case DWC3_DSTS_FULLSPEED2:
-       case DWC3_DSTS_FULLSPEED1:
+       case DWC3_DSTS_FULLSPEED:
                dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(64);
                dwc->gadget.ep0->maxpacket = 64;
                dwc->gadget.speed = USB_SPEED_FULL;
index 41ab61f9b6e0b24be1dd950afdae9f4f3a179d50..002822d98fda207505581ca75cb47373db81fb78 100644 (file)
@@ -1694,9 +1694,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
                value = min(w_length, (u16) 1);
                break;
 
-       /* function drivers must handle get/set altsetting; if there's
-        * no get() method, we know only altsetting zero works.
-        */
+       /* function drivers must handle get/set altsetting */
        case USB_REQ_SET_INTERFACE:
                if (ctrl->bRequestType != USB_RECIP_INTERFACE)
                        goto unknown;
@@ -1705,7 +1703,13 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
                f = cdev->config->interface[intf];
                if (!f)
                        break;
-               if (w_value && !f->set_alt)
+
+               /*
+                * If there's no get_alt() method, we know only altsetting zero
+                * works. There is no need to check if set_alt() is not NULL
+                * as we check this in usb_add_function().
+                */
+               if (w_value && !f->get_alt)
                        break;
                value = f->set_alt(f, w_index, w_value);
                if (value == USB_GADGET_DELAYED_STATUS) {
index aab3fc1dbb94c44f0287990e89aa98fc8bf3da3a..5e746adc8a2d5416b7e1bcbeb8c41559716599b4 100644 (file)
@@ -2091,8 +2091,8 @@ static int __ffs_data_do_entity(enum ffs_entity_type type,
 
        case FFS_STRING:
                /*
-                * Strings are indexed from 1 (0 is magic ;) reserved
-                * for languages list or some such)
+                * Strings are indexed from 1 (0 is reserved
+                * for languages list)
                 */
                if (*valuep > helper->ffs->strings_count)
                        helper->ffs->strings_count = *valuep;
@@ -2252,7 +2252,7 @@ static int __ffs_data_do_os_desc(enum ffs_os_desc_type type,
 
                if (len < sizeof(*d) ||
                    d->bFirstInterfaceNumber >= ffs->interfaces_count ||
-                   !d->Reserved1)
+                   d->Reserved1)
                        return -EINVAL;
                for (i = 0; i < ARRAY_SIZE(d->Reserved2); ++i)
                        if (d->Reserved2[i])
@@ -3666,6 +3666,7 @@ static void ffs_closed(struct ffs_data *ffs)
 {
        struct ffs_dev *ffs_obj;
        struct f_fs_opts *opts;
+       struct config_item *ci;
 
        ENTER();
        ffs_dev_lock();
@@ -3689,8 +3690,11 @@ static void ffs_closed(struct ffs_data *ffs)
            || !atomic_read(&opts->func_inst.group.cg_item.ci_kref.refcount))
                goto done;
 
-       unregister_gadget_item(ffs_obj->opts->
-                              func_inst.group.cg_item.ci_parent->ci_parent);
+       ci = opts->func_inst.group.cg_item.ci_parent->ci_parent;
+       ffs_dev_unlock();
+
+       unregister_gadget_item(ci);
+       return;
 done:
        ffs_dev_unlock();
 }
index 3151d2a0fe594b516841ae8c653878ad45899e2e..5f8139b8e601808414407e88a94a53a60892ae55 100644 (file)
@@ -593,7 +593,7 @@ static int hidg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
                }
                status = usb_ep_enable(hidg->out_ep);
                if (status < 0) {
-                       ERROR(cdev, "Enable IN endpoint FAILED!\n");
+                       ERROR(cdev, "Enable OUT endpoint FAILED!\n");
                        goto fail;
                }
                hidg->out_ep->driver_data = hidg;
index e8f4102d19df54fa1983578f8f773067ee317d92..6bde4396927c997b686419cbc4fb15997b0e304f 100644 (file)
@@ -1126,7 +1126,7 @@ ep0_write (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
        /* data and/or status stage for control request */
        } else if (dev->state == STATE_DEV_SETUP) {
 
-               /* IN DATA+STATUS caller makes len <= wLength */
+               len = min_t(size_t, len, dev->setup_wLength);
                if (dev->setup_in) {
                        retval = setup_req (dev->gadget->ep0, dev->req, len);
                        if (retval == 0) {
@@ -1734,10 +1734,12 @@ static struct usb_gadget_driver gadgetfs_driver = {
  * such as configuration notifications.
  */
 
-static int is_valid_config (struct usb_config_descriptor *config)
+static int is_valid_config(struct usb_config_descriptor *config,
+               unsigned int total)
 {
        return config->bDescriptorType == USB_DT_CONFIG
                && config->bLength == USB_DT_CONFIG_SIZE
+               && total >= USB_DT_CONFIG_SIZE
                && config->bConfigurationValue != 0
                && (config->bmAttributes & USB_CONFIG_ATT_ONE) != 0
                && (config->bmAttributes & USB_CONFIG_ATT_WAKEUP) == 0;
@@ -1762,7 +1764,8 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
        }
        spin_unlock_irq(&dev->lock);
 
-       if (len < (USB_DT_CONFIG_SIZE + USB_DT_DEVICE_SIZE + 4))
+       if ((len < (USB_DT_CONFIG_SIZE + USB_DT_DEVICE_SIZE + 4)) ||
+           (len > PAGE_SIZE * 4))
                return -EINVAL;
 
        /* we might need to change message format someday */
@@ -1786,7 +1789,8 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
        /* full or low speed config */
        dev->config = (void *) kbuf;
        total = le16_to_cpu(dev->config->wTotalLength);
-       if (!is_valid_config (dev->config) || total >= length)
+       if (!is_valid_config(dev->config, total) ||
+                       total > length - USB_DT_DEVICE_SIZE)
                goto fail;
        kbuf += total;
        length -= total;
@@ -1795,10 +1799,13 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
        if (kbuf [1] == USB_DT_CONFIG) {
                dev->hs_config = (void *) kbuf;
                total = le16_to_cpu(dev->hs_config->wTotalLength);
-               if (!is_valid_config (dev->hs_config) || total >= length)
+               if (!is_valid_config(dev->hs_config, total) ||
+                               total > length - USB_DT_DEVICE_SIZE)
                        goto fail;
                kbuf += total;
                length -= total;
+       } else {
+               dev->hs_config = NULL;
        }
 
        /* could support multiple configs, using another encoding! */
@@ -1811,7 +1818,6 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
                        || dev->dev->bDescriptorType != USB_DT_DEVICE
                        || dev->dev->bNumConfigurations != 1)
                goto fail;
-       dev->dev->bNumConfigurations = 1;
        dev->dev->bcdUSB = cpu_to_le16 (0x0200);
 
        /* triggers gadgetfs_bind(); then we can enumerate. */
index 9483489080f66230370db44a2326a152a3f3eb47..0402177f93cdde2346586ff95b392256e17f84ce 100644 (file)
@@ -1317,7 +1317,11 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver)
                        if (!ret)
                                break;
                }
-               if (!ret && !udc->driver)
+               if (ret)
+                       ret = -ENODEV;
+               else if (udc->driver)
+                       ret = -EBUSY;
+               else
                        goto found;
        } else {
                list_for_each_entry(udc, &udc_list, list) {
index 02b14e91ae6c5a586417dec05d558dbe1cace35a..c60abe3a68f9cf48c21831d40bc32c4e9390b892 100644 (file)
@@ -330,7 +330,7 @@ static void nuke(struct dummy *dum, struct dummy_ep *ep)
 /* caller must hold lock */
 static void stop_activity(struct dummy *dum)
 {
-       struct dummy_ep *ep;
+       int i;
 
        /* prevent any more requests */
        dum->address = 0;
@@ -338,8 +338,8 @@ static void stop_activity(struct dummy *dum)
        /* The timer is left running so that outstanding URBs can fail */
 
        /* nuke any pending requests first, so driver i/o is quiesced */
-       list_for_each_entry(ep, &dum->gadget.ep_list, ep.ep_list)
-               nuke(dum, ep);
+       for (i = 0; i < DUMMY_ENDPOINTS; ++i)
+               nuke(dum, &dum->ep[i]);
 
        /* driver now does any non-usb quiescing necessary */
 }
index be9e6383688111fe8d2c53d3e679758f36fd9873..414e3c376dbbd59587dc3398f4a90872a5aae19c 100644 (file)
@@ -43,7 +43,6 @@ struct at91_usbh_data {
        struct gpio_desc *overcurrent_pin[AT91_MAX_USBH_PORTS];
        u8 ports;                               /* number of ports on root hub */
        u8 overcurrent_supported;
-       u8 vbus_pin_active_low[AT91_MAX_USBH_PORTS];
        u8 overcurrent_status[AT91_MAX_USBH_PORTS];
        u8 overcurrent_changed[AT91_MAX_USBH_PORTS];
 };
@@ -266,8 +265,7 @@ static void ohci_at91_usb_set_power(struct at91_usbh_data *pdata, int port, int
        if (!valid_port(port))
                return;
 
-       gpiod_set_value(pdata->vbus_pin[port],
-                       pdata->vbus_pin_active_low[port] ^ enable);
+       gpiod_set_value(pdata->vbus_pin[port], enable);
 }
 
 static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
@@ -275,8 +273,7 @@ static int ohci_at91_usb_get_power(struct at91_usbh_data *pdata, int port)
        if (!valid_port(port))
                return -EINVAL;
 
-       return gpiod_get_value(pdata->vbus_pin[port]) ^
-              pdata->vbus_pin_active_low[port];
+       return gpiod_get_value(pdata->vbus_pin[port]);
 }
 
 /*
@@ -533,18 +530,17 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
                pdata->ports = ports;
 
        at91_for_each_port(i) {
-               pdata->vbus_pin[i] = devm_gpiod_get_optional(&pdev->dev,
-                                                            "atmel,vbus-gpio",
-                                                            GPIOD_IN);
+               if (i >= pdata->ports)
+                       break;
+
+               pdata->vbus_pin[i] =
+                       devm_gpiod_get_index_optional(&pdev->dev, "atmel,vbus",
+                                                     i, GPIOD_OUT_HIGH);
                if (IS_ERR(pdata->vbus_pin[i])) {
                        err = PTR_ERR(pdata->vbus_pin[i]);
                        dev_err(&pdev->dev, "unable to claim gpio \"vbus\": %d\n", err);
                        continue;
                }
-
-               pdata->vbus_pin_active_low[i] = gpiod_get_value(pdata->vbus_pin[i]);
-
-               ohci_at91_usb_set_power(pdata, i, 1);
        }
 
        at91_for_each_port(i) {
@@ -552,8 +548,8 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
                        break;
 
                pdata->overcurrent_pin[i] =
-                       devm_gpiod_get_optional(&pdev->dev,
-                                               "atmel,oc-gpio", GPIOD_IN);
+                       devm_gpiod_get_index_optional(&pdev->dev, "atmel,oc",
+                                                     i, GPIOD_IN);
                if (IS_ERR(pdata->overcurrent_pin[i])) {
                        err = PTR_ERR(pdata->overcurrent_pin[i]);
                        dev_err(&pdev->dev, "unable to claim gpio \"overcurrent\": %d\n", err);
index 321de2e0161b4a3ef825489ab59a96e6250b1cd9..8414ed2a02de98b08ccadbe375d75b93da59cd35 100644 (file)
@@ -979,6 +979,40 @@ void xhci_free_virt_device(struct xhci_hcd *xhci, int slot_id)
        xhci->devs[slot_id] = NULL;
 }
 
+/*
+ * Free a virt_device structure.
+ * If the virt_device added a tt_info (a hub) and has children pointing to
+ * that tt_info, then free the child first. Recursive.
+ * We can't rely on udev at this point to find child-parent relationships.
+ */
+void xhci_free_virt_devices_depth_first(struct xhci_hcd *xhci, int slot_id)
+{
+       struct xhci_virt_device *vdev;
+       struct list_head *tt_list_head;
+       struct xhci_tt_bw_info *tt_info, *next;
+       int i;
+
+       vdev = xhci->devs[slot_id];
+       if (!vdev)
+               return;
+
+       tt_list_head = &(xhci->rh_bw[vdev->real_port - 1].tts);
+       list_for_each_entry_safe(tt_info, next, tt_list_head, tt_list) {
+               /* is this a hub device that added a tt_info to the tts list */
+               if (tt_info->slot_id == slot_id) {
+                       /* are any devices using this tt_info? */
+                       for (i = 1; i < HCS_MAX_SLOTS(xhci->hcs_params1); i++) {
+                               vdev = xhci->devs[i];
+                               if (vdev && (vdev->tt_info == tt_info))
+                                       xhci_free_virt_devices_depth_first(
+                                               xhci, i);
+                       }
+               }
+       }
+       /* we are now at a leaf device */
+       xhci_free_virt_device(xhci, slot_id);
+}
+
 int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id,
                struct usb_device *udev, gfp_t flags)
 {
@@ -1795,7 +1829,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
        int size;
        int i, j, num_ports;
 
-       del_timer_sync(&xhci->cmd_timer);
+       cancel_delayed_work_sync(&xhci->cmd_timer);
 
        /* Free the Event Ring Segment Table and the actual Event Ring */
        size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries);
@@ -1828,8 +1862,8 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
                }
        }
 
-       for (i = 1; i < MAX_HC_SLOTS; ++i)
-               xhci_free_virt_device(xhci, i);
+       for (i = HCS_MAX_SLOTS(xhci->hcs_params1); i > 0; i--)
+               xhci_free_virt_devices_depth_first(xhci, i);
 
        dma_pool_destroy(xhci->segment_pool);
        xhci->segment_pool = NULL;
@@ -2342,9 +2376,9 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
 
        INIT_LIST_HEAD(&xhci->cmd_list);
 
-       /* init command timeout timer */
-       setup_timer(&xhci->cmd_timer, xhci_handle_command_timeout,
-                   (unsigned long)xhci);
+       /* init command timeout work */
+       INIT_DELAYED_WORK(&xhci->cmd_timer, xhci_handle_command_timeout);
+       init_completion(&xhci->cmd_ring_stop_completion);
 
        page_size = readl(&xhci->op_regs->page_size);
        xhci_dbg_trace(xhci, trace_xhci_dbg_init,
index 1094ebd2838ff95a5834f7a680e4a2c0aa13301c..bac961cd24ad62b649da486f62c519ab0b51661d 100644 (file)
@@ -579,8 +579,10 @@ static int xhci_mtk_probe(struct platform_device *pdev)
                goto disable_ldos;
 
        irq = platform_get_irq(pdev, 0);
-       if (irq < 0)
+       if (irq < 0) {
+               ret = irq;
                goto disable_clk;
+       }
 
        /* Initialize dma_mask and coherent_dma_mask to 32-bits */
        ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(32));
index e96ae80d107e94fd8db8c33cae52ff9153f14730..954abfd5014d281d537e11353cb6093b9b7a0bdd 100644 (file)
@@ -165,7 +165,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
                 pdev->device == PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_XHCI ||
                 pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI ||
                 pdev->device == PCI_DEVICE_ID_INTEL_BROXTON_M_XHCI ||
-                pdev->device == PCI_DEVICE_ID_INTEL_BROXTON_B_XHCI)) {
+                pdev->device == PCI_DEVICE_ID_INTEL_BROXTON_B_XHCI ||
+                pdev->device == PCI_DEVICE_ID_INTEL_APL_XHCI)) {
                xhci->quirks |= XHCI_PME_STUCK_QUIRK;
        }
        if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
index bdf6b13d9b6755a0504a15ba10fcfe1d06b5bc73..25f522b09dd9746938168e6f675464db9f2e6740 100644 (file)
@@ -279,23 +279,76 @@ void xhci_ring_cmd_db(struct xhci_hcd *xhci)
        readl(&xhci->dba->doorbell[0]);
 }
 
-static int xhci_abort_cmd_ring(struct xhci_hcd *xhci)
+static bool xhci_mod_cmd_timer(struct xhci_hcd *xhci, unsigned long delay)
+{
+       return mod_delayed_work(system_wq, &xhci->cmd_timer, delay);
+}
+
+static struct xhci_command *xhci_next_queued_cmd(struct xhci_hcd *xhci)
+{
+       return list_first_entry_or_null(&xhci->cmd_list, struct xhci_command,
+                                       cmd_list);
+}
+
+/*
+ * Turn all commands on command ring with status set to "aborted" to no-op trbs.
+ * If there are other commands waiting then restart the ring and kick the timer.
+ * This must be called with command ring stopped and xhci->lock held.
+ */
+static void xhci_handle_stopped_cmd_ring(struct xhci_hcd *xhci,
+                                        struct xhci_command *cur_cmd)
+{
+       struct xhci_command *i_cmd;
+       u32 cycle_state;
+
+       /* Turn all aborted commands in list to no-ops, then restart */
+       list_for_each_entry(i_cmd, &xhci->cmd_list, cmd_list) {
+
+               if (i_cmd->status != COMP_CMD_ABORT)
+                       continue;
+
+               i_cmd->status = COMP_CMD_STOP;
+
+               xhci_dbg(xhci, "Turn aborted command %p to no-op\n",
+                        i_cmd->command_trb);
+               /* get cycle state from the original cmd trb */
+               cycle_state = le32_to_cpu(
+                       i_cmd->command_trb->generic.field[3]) & TRB_CYCLE;
+               /* modify the command trb to no-op command */
+               i_cmd->command_trb->generic.field[0] = 0;
+               i_cmd->command_trb->generic.field[1] = 0;
+               i_cmd->command_trb->generic.field[2] = 0;
+               i_cmd->command_trb->generic.field[3] = cpu_to_le32(
+                       TRB_TYPE(TRB_CMD_NOOP) | cycle_state);
+
+               /*
+                * caller waiting for completion is called when command
+                *  completion event is received for these no-op commands
+                */
+       }
+
+       xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
+
+       /* ring command ring doorbell to restart the command ring */
+       if ((xhci->cmd_ring->dequeue != xhci->cmd_ring->enqueue) &&
+           !(xhci->xhc_state & XHCI_STATE_DYING)) {
+               xhci->current_cmd = cur_cmd;
+               xhci_mod_cmd_timer(xhci, XHCI_CMD_DEFAULT_TIMEOUT);
+               xhci_ring_cmd_db(xhci);
+       }
+}
+
+/* Must be called with xhci->lock held, releases and aquires lock back */
+static int xhci_abort_cmd_ring(struct xhci_hcd *xhci, unsigned long flags)
 {
        u64 temp_64;
        int ret;
 
        xhci_dbg(xhci, "Abort command ring\n");
 
-       temp_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
-       xhci->cmd_ring_state = CMD_RING_STATE_ABORTED;
+       reinit_completion(&xhci->cmd_ring_stop_completion);
 
-       /*
-        * Writing the CMD_RING_ABORT bit should cause a cmd completion event,
-        * however on some host hw the CMD_RING_RUNNING bit is correctly cleared
-        * but the completion event in never sent. Use the cmd timeout timer to
-        * handle those cases. Use twice the time to cover the bit polling retry
-        */
-       mod_timer(&xhci->cmd_timer, jiffies + (2 * XHCI_CMD_DEFAULT_TIMEOUT));
+       temp_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
        xhci_write_64(xhci, temp_64 | CMD_RING_ABORT,
                        &xhci->op_regs->cmd_ring);
 
@@ -315,17 +368,30 @@ static int xhci_abort_cmd_ring(struct xhci_hcd *xhci)
                udelay(1000);
                ret = xhci_handshake(&xhci->op_regs->cmd_ring,
                                     CMD_RING_RUNNING, 0, 3 * 1000 * 1000);
-               if (ret == 0)
-                       return 0;
-
-               xhci_err(xhci, "Stopped the command ring failed, "
-                               "maybe the host is dead\n");
-               del_timer(&xhci->cmd_timer);
-               xhci->xhc_state |= XHCI_STATE_DYING;
-               xhci_halt(xhci);
-               return -ESHUTDOWN;
+               if (ret < 0) {
+                       xhci_err(xhci, "Stopped the command ring failed, "
+                                "maybe the host is dead\n");
+                       xhci->xhc_state |= XHCI_STATE_DYING;
+                       xhci_halt(xhci);
+                       return -ESHUTDOWN;
+               }
+       }
+       /*
+        * Writing the CMD_RING_ABORT bit should cause a cmd completion event,
+        * however on some host hw the CMD_RING_RUNNING bit is correctly cleared
+        * but the completion event in never sent. Wait 2 secs (arbitrary
+        * number) to handle those cases after negation of CMD_RING_RUNNING.
+        */
+       spin_unlock_irqrestore(&xhci->lock, flags);
+       ret = wait_for_completion_timeout(&xhci->cmd_ring_stop_completion,
+                                         msecs_to_jiffies(2000));
+       spin_lock_irqsave(&xhci->lock, flags);
+       if (!ret) {
+               xhci_dbg(xhci, "No stop event for abort, ring start fail?\n");
+               xhci_cleanup_command_queue(xhci);
+       } else {
+               xhci_handle_stopped_cmd_ring(xhci, xhci_next_queued_cmd(xhci));
        }
-
        return 0;
 }
 
@@ -1207,101 +1273,62 @@ void xhci_cleanup_command_queue(struct xhci_hcd *xhci)
                xhci_complete_del_and_free_cmd(cur_cmd, COMP_CMD_ABORT);
 }
 
-/*
- * Turn all commands on command ring with status set to "aborted" to no-op trbs.
- * If there are other commands waiting then restart the ring and kick the timer.
- * This must be called with command ring stopped and xhci->lock held.
- */
-static void xhci_handle_stopped_cmd_ring(struct xhci_hcd *xhci,
-                                        struct xhci_command *cur_cmd)
-{
-       struct xhci_command *i_cmd, *tmp_cmd;
-       u32 cycle_state;
-
-       /* Turn all aborted commands in list to no-ops, then restart */
-       list_for_each_entry_safe(i_cmd, tmp_cmd, &xhci->cmd_list,
-                                cmd_list) {
-
-               if (i_cmd->status != COMP_CMD_ABORT)
-                       continue;
-
-               i_cmd->status = COMP_CMD_STOP;
-
-               xhci_dbg(xhci, "Turn aborted command %p to no-op\n",
-                        i_cmd->command_trb);
-               /* get cycle state from the original cmd trb */
-               cycle_state = le32_to_cpu(
-                       i_cmd->command_trb->generic.field[3]) & TRB_CYCLE;
-               /* modify the command trb to no-op command */
-               i_cmd->command_trb->generic.field[0] = 0;
-               i_cmd->command_trb->generic.field[1] = 0;
-               i_cmd->command_trb->generic.field[2] = 0;
-               i_cmd->command_trb->generic.field[3] = cpu_to_le32(
-                       TRB_TYPE(TRB_CMD_NOOP) | cycle_state);
-
-               /*
-                * caller waiting for completion is called when command
-                *  completion event is received for these no-op commands
-                */
-       }
-
-       xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
-
-       /* ring command ring doorbell to restart the command ring */
-       if ((xhci->cmd_ring->dequeue != xhci->cmd_ring->enqueue) &&
-           !(xhci->xhc_state & XHCI_STATE_DYING)) {
-               xhci->current_cmd = cur_cmd;
-               mod_timer(&xhci->cmd_timer, jiffies + XHCI_CMD_DEFAULT_TIMEOUT);
-               xhci_ring_cmd_db(xhci);
-       }
-       return;
-}
-
-
-void xhci_handle_command_timeout(unsigned long data)
+void xhci_handle_command_timeout(struct work_struct *work)
 {
        struct xhci_hcd *xhci;
        int ret;
        unsigned long flags;
        u64 hw_ring_state;
-       bool second_timeout = false;
-       xhci = (struct xhci_hcd *) data;
 
-       /* mark this command to be cancelled */
+       xhci = container_of(to_delayed_work(work), struct xhci_hcd, cmd_timer);
+
        spin_lock_irqsave(&xhci->lock, flags);
-       if (xhci->current_cmd) {
-               if (xhci->current_cmd->status == COMP_CMD_ABORT)
-                       second_timeout = true;
-               xhci->current_cmd->status = COMP_CMD_ABORT;
+
+       /*
+        * If timeout work is pending, or current_cmd is NULL, it means we
+        * raced with command completion. Command is handled so just return.
+        */
+       if (!xhci->current_cmd || delayed_work_pending(&xhci->cmd_timer)) {
+               spin_unlock_irqrestore(&xhci->lock, flags);
+               return;
        }
+       /* mark this command to be cancelled */
+       xhci->current_cmd->status = COMP_CMD_ABORT;
 
        /* Make sure command ring is running before aborting it */
        hw_ring_state = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
        if ((xhci->cmd_ring_state & CMD_RING_STATE_RUNNING) &&
            (hw_ring_state & CMD_RING_RUNNING))  {
-               spin_unlock_irqrestore(&xhci->lock, flags);
+               /* Prevent new doorbell, and start command abort */
+               xhci->cmd_ring_state = CMD_RING_STATE_ABORTED;
                xhci_dbg(xhci, "Command timeout\n");
-               ret = xhci_abort_cmd_ring(xhci);
+               ret = xhci_abort_cmd_ring(xhci, flags);
                if (unlikely(ret == -ESHUTDOWN)) {
                        xhci_err(xhci, "Abort command ring failed\n");
                        xhci_cleanup_command_queue(xhci);
+                       spin_unlock_irqrestore(&xhci->lock, flags);
                        usb_hc_died(xhci_to_hcd(xhci)->primary_hcd);
                        xhci_dbg(xhci, "xHCI host controller is dead.\n");
+
+                       return;
                }
-               return;
+
+               goto time_out_completed;
        }
 
-       /* command ring failed to restart, or host removed. Bail out */
-       if (second_timeout || xhci->xhc_state & XHCI_STATE_REMOVING) {
-               spin_unlock_irqrestore(&xhci->lock, flags);
-               xhci_dbg(xhci, "command timed out twice, ring start fail?\n");
+       /* host removed. Bail out */
+       if (xhci->xhc_state & XHCI_STATE_REMOVING) {
+               xhci_dbg(xhci, "host removed, ring start fail?\n");
                xhci_cleanup_command_queue(xhci);
-               return;
+
+               goto time_out_completed;
        }
 
        /* command timeout on stopped ring, ring can't be aborted */
        xhci_dbg(xhci, "Command timeout on stopped ring\n");
        xhci_handle_stopped_cmd_ring(xhci, xhci->current_cmd);
+
+time_out_completed:
        spin_unlock_irqrestore(&xhci->lock, flags);
        return;
 }
@@ -1333,7 +1360,7 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
 
        cmd = list_entry(xhci->cmd_list.next, struct xhci_command, cmd_list);
 
-       del_timer(&xhci->cmd_timer);
+       cancel_delayed_work(&xhci->cmd_timer);
 
        trace_xhci_cmd_completion(cmd_trb, (struct xhci_generic_trb *) event);
 
@@ -1341,7 +1368,7 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
 
        /* If CMD ring stopped we own the trbs between enqueue and dequeue */
        if (cmd_comp_code == COMP_CMD_STOP) {
-               xhci_handle_stopped_cmd_ring(xhci, cmd);
+               complete_all(&xhci->cmd_ring_stop_completion);
                return;
        }
 
@@ -1359,8 +1386,11 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
         */
        if (cmd_comp_code == COMP_CMD_ABORT) {
                xhci->cmd_ring_state = CMD_RING_STATE_STOPPED;
-               if (cmd->status == COMP_CMD_ABORT)
+               if (cmd->status == COMP_CMD_ABORT) {
+                       if (xhci->current_cmd == cmd)
+                               xhci->current_cmd = NULL;
                        goto event_handled;
+               }
        }
 
        cmd_type = TRB_FIELD_TO_TYPE(le32_to_cpu(cmd_trb->generic.field[3]));
@@ -1421,7 +1451,9 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
        if (cmd->cmd_list.next != &xhci->cmd_list) {
                xhci->current_cmd = list_entry(cmd->cmd_list.next,
                                               struct xhci_command, cmd_list);
-               mod_timer(&xhci->cmd_timer, jiffies + XHCI_CMD_DEFAULT_TIMEOUT);
+               xhci_mod_cmd_timer(xhci, XHCI_CMD_DEFAULT_TIMEOUT);
+       } else if (xhci->current_cmd == cmd) {
+               xhci->current_cmd = NULL;
        }
 
 event_handled:
@@ -1939,8 +1971,9 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
        struct xhci_ep_ctx *ep_ctx;
        u32 trb_comp_code;
        u32 remaining, requested;
-       bool on_data_stage;
+       u32 trb_type;
 
+       trb_type = TRB_FIELD_TO_TYPE(le32_to_cpu(ep_trb->generic.field[3]));
        slot_id = TRB_TO_SLOT_ID(le32_to_cpu(event->flags));
        xdev = xhci->devs[slot_id];
        ep_index = TRB_TO_EP_ID(le32_to_cpu(event->flags)) - 1;
@@ -1950,14 +1983,11 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
        requested = td->urb->transfer_buffer_length;
        remaining = EVENT_TRB_LEN(le32_to_cpu(event->transfer_len));
 
-       /* not setup (dequeue), or status stage means we are at data stage */
-       on_data_stage = (ep_trb != ep_ring->dequeue && ep_trb != td->last_trb);
-
        switch (trb_comp_code) {
        case COMP_SUCCESS:
-               if (ep_trb != td->last_trb) {
+               if (trb_type != TRB_STATUS) {
                        xhci_warn(xhci, "WARN: Success on ctrl %s TRB without IOC set?\n",
-                                 on_data_stage ? "data" : "setup");
+                                 (trb_type == TRB_DATA) ? "data" : "setup");
                        *status = -ESHUTDOWN;
                        break;
                }
@@ -1967,15 +1997,25 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
                *status = 0;
                break;
        case COMP_STOP_SHORT:
-               if (on_data_stage)
+               if (trb_type == TRB_DATA || trb_type == TRB_NORMAL)
                        td->urb->actual_length = remaining;
                else
                        xhci_warn(xhci, "WARN: Stopped Short Packet on ctrl setup or status TRB\n");
                goto finish_td;
        case COMP_STOP:
-               if (on_data_stage)
+               switch (trb_type) {
+               case TRB_SETUP:
+                       td->urb->actual_length = 0;
+                       goto finish_td;
+               case TRB_DATA:
+               case TRB_NORMAL:
                        td->urb->actual_length = requested - remaining;
-               goto finish_td;
+                       goto finish_td;
+               default:
+                       xhci_warn(xhci, "WARN: unexpected TRB Type %d\n",
+                                 trb_type);
+                       goto finish_td;
+               }
        case COMP_STOP_INVAL:
                goto finish_td;
        default:
@@ -1987,7 +2027,7 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
                /* else fall through */
        case COMP_STALL:
                /* Did we transfer part of the data (middle) phase? */
-               if (on_data_stage)
+               if (trb_type == TRB_DATA || trb_type == TRB_NORMAL)
                        td->urb->actual_length = requested - remaining;
                else if (!td->urb_length_set)
                        td->urb->actual_length = 0;
@@ -1995,14 +2035,15 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
        }
 
        /* stopped at setup stage, no data transferred */
-       if (ep_trb == ep_ring->dequeue)
+       if (trb_type == TRB_SETUP)
                goto finish_td;
 
        /*
         * if on data stage then update the actual_length of the URB and flag it
         * as set, so it won't be overwritten in the event for the last TRB.
         */
-       if (on_data_stage) {
+       if (trb_type == TRB_DATA ||
+               trb_type == TRB_NORMAL) {
                td->urb_length_set = true;
                td->urb->actual_length = requested - remaining;
                xhci_dbg(xhci, "Waiting for status stage event\n");
@@ -3790,9 +3831,9 @@ static int queue_command(struct xhci_hcd *xhci, struct xhci_command *cmd,
 
        /* if there are no other commands queued we start the timeout timer */
        if (xhci->cmd_list.next == &cmd->cmd_list &&
-           !timer_pending(&xhci->cmd_timer)) {
+           !delayed_work_pending(&xhci->cmd_timer)) {
                xhci->current_cmd = cmd;
-               mod_timer(&xhci->cmd_timer, jiffies + XHCI_CMD_DEFAULT_TIMEOUT);
+               xhci_mod_cmd_timer(xhci, XHCI_CMD_DEFAULT_TIMEOUT);
        }
 
        queue_trb(xhci, xhci->cmd_ring, false, field1, field2, field3,
index 1cd56417cbec455b6db7605d3b3e20aa20a0998d..0c8deb9ed42def112efc8ad1aaf95526315c164f 100644 (file)
@@ -3787,8 +3787,10 @@ static int xhci_setup_device(struct usb_hcd *hcd, struct usb_device *udev,
 
        mutex_lock(&xhci->mutex);
 
-       if (xhci->xhc_state)    /* dying, removing or halted */
+       if (xhci->xhc_state) {  /* dying, removing or halted */
+               ret = -ESHUTDOWN;
                goto out;
+       }
 
        if (!udev->slot_id) {
                xhci_dbg_trace(xhci, trace_xhci_dbg_address,
index 8ccc11a974b8a62ee0afe18808babb0603071efa..2d7b6374b58d0c092528dff89e761716552735d2 100644 (file)
@@ -1568,7 +1568,8 @@ struct xhci_hcd {
 #define CMD_RING_STATE_STOPPED         (1 << 2)
        struct list_head        cmd_list;
        unsigned int            cmd_ring_reserved_trbs;
-       struct timer_list       cmd_timer;
+       struct delayed_work     cmd_timer;
+       struct completion       cmd_ring_stop_completion;
        struct xhci_command     *current_cmd;
        struct xhci_ring        *event_ring;
        struct xhci_erst        erst;
@@ -1934,7 +1935,7 @@ void xhci_queue_config_ep_quirk(struct xhci_hcd *xhci,
                unsigned int slot_id, unsigned int ep_index,
                struct xhci_dequeue_state *deq_state);
 void xhci_stop_endpoint_command_watchdog(unsigned long arg);
-void xhci_handle_command_timeout(unsigned long data);
+void xhci_handle_command_timeout(struct work_struct *work);
 
 void xhci_ring_ep_doorbell(struct xhci_hcd *xhci, unsigned int slot_id,
                unsigned int ep_index, unsigned int stream_id);
index 310238c6b5cd699bcd89ef101b926feba5d60a8c..8967980718170d5119d6331ed8395dfa2f4fa970 100644 (file)
@@ -469,6 +469,7 @@ static const struct musb_platform_ops bfin_ops = {
        .init           = bfin_musb_init,
        .exit           = bfin_musb_exit,
 
+       .fifo_offset    = bfin_fifo_offset,
        .readb          = bfin_readb,
        .writeb         = bfin_writeb,
        .readw          = bfin_readw,
index 9e226468a13eb07af0bf5a6407d81cd304436369..fca288bbc8009580ba96198ce1a2a49330074d20 100644 (file)
@@ -2050,6 +2050,7 @@ struct musb_pending_work {
        struct list_head node;
 };
 
+#ifdef CONFIG_PM
 /*
  * Called from musb_runtime_resume(), musb_resume(), and
  * musb_queue_resume_work(). Callers must take musb->lock.
@@ -2077,6 +2078,7 @@ static int musb_run_resume_work(struct musb *musb)
 
        return error;
 }
+#endif
 
 /*
  * Called to run work if device is active or else queue the work to happen
index a611e2f67bdc9e3233e4d6efde27d8ce18fe0a67..ade902ea1221e18543de05a5188c715d86af7398 100644 (file)
@@ -216,6 +216,7 @@ struct musb_platform_ops {
        void    (*pre_root_reset_end)(struct musb *musb);
        void    (*post_root_reset_end)(struct musb *musb);
        int     (*phy_callback)(enum musb_vbus_id_status status);
+       void    (*clear_ep_rxintr)(struct musb *musb, int epnum);
 };
 
 /*
@@ -626,6 +627,12 @@ static inline void musb_platform_post_root_reset_end(struct musb *musb)
                musb->ops->post_root_reset_end(musb);
 }
 
+static inline void musb_platform_clear_ep_rxintr(struct musb *musb, int epnum)
+{
+       if (musb->ops->clear_ep_rxintr)
+               musb->ops->clear_ep_rxintr(musb, epnum);
+}
+
 /*
  * gets the "dr_mode" property from DT and converts it into musb_mode
  * if the property is not found or not recognized returns MUSB_OTG
index feae1561b9abb6924d2fe2fc6f1222dfac9d2be7..9f125e179acd444ca43c73a1a5d263b8e5c8893d 100644 (file)
@@ -267,6 +267,17 @@ static void otg_timer(unsigned long _musb)
        pm_runtime_put_autosuspend(dev);
 }
 
+void dsps_musb_clear_ep_rxintr(struct musb *musb, int epnum)
+{
+       u32 epintr;
+       struct dsps_glue *glue = dev_get_drvdata(musb->controller->parent);
+       const struct dsps_musb_wrapper *wrp = glue->wrp;
+
+       /* musb->lock might already been held */
+       epintr = (1 << epnum) << wrp->rxep_shift;
+       musb_writel(musb->ctrl_base, wrp->epintr_status, epintr);
+}
+
 static irqreturn_t dsps_interrupt(int irq, void *hci)
 {
        struct musb  *musb = hci;
@@ -622,6 +633,7 @@ static struct musb_platform_ops dsps_ops = {
 
        .set_mode       = dsps_musb_set_mode,
        .recover        = dsps_musb_recover,
+       .clear_ep_rxintr = dsps_musb_clear_ep_rxintr,
 };
 
 static u64 musb_dmamask = DMA_BIT_MASK(32);
index f6cdbad00daceb5837a8cfcdec37438389aae800..ac3a4952abb4b290b019ac59fbddd7004b50d949 100644 (file)
@@ -2374,12 +2374,11 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh)
        int                     is_in = usb_pipein(urb->pipe);
        int                     status = 0;
        u16                     csr;
+       struct dma_channel      *dma = NULL;
 
        musb_ep_select(regs, hw_end);
 
        if (is_dma_capable()) {
-               struct dma_channel      *dma;
-
                dma = is_in ? ep->rx_channel : ep->tx_channel;
                if (dma) {
                        status = ep->musb->dma_controller->channel_abort(dma);
@@ -2395,10 +2394,9 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh)
                /* giveback saves bulk toggle */
                csr = musb_h_flush_rxfifo(ep, 0);
 
-               /* REVISIT we still get an irq; should likely clear the
-                * endpoint's irq status here to avoid bogus irqs.
-                * clearing that status is platform-specific...
-                */
+               /* clear the endpoint's irq status here to avoid bogus irqs */
+               if (is_dma_capable() && dma)
+                       musb_platform_clear_ep_rxintr(musb, ep->epnum);
        } else if (ep->epnum) {
                musb_h_tx_flush_fifo(ep);
                csr = musb_readw(epio, MUSB_TXCSR);
index f7b13fd252574f848e7984905cbaef4478c2e90a..a3dcbd55e43609b3140979d971a43426a1ce3db0 100644 (file)
@@ -157,5 +157,5 @@ struct musb_dma_controller {
        void __iomem                    *base;
        u8                              channel_count;
        u8                              used_channels;
-       u8                              irq;
+       int                             irq;
 };
index 5f17a3b9916d79ea28c82b04755e23d5680d4b2d..80260b08398b2e55833c65d21e0be70cc43ccf01 100644 (file)
@@ -50,6 +50,7 @@
 #define CYBERJACK_PRODUCT_ID   0x0100
 
 /* Function prototypes */
+static int cyberjack_attach(struct usb_serial *serial);
 static int cyberjack_port_probe(struct usb_serial_port *port);
 static int cyberjack_port_remove(struct usb_serial_port *port);
 static int  cyberjack_open(struct tty_struct *tty,
@@ -77,6 +78,7 @@ static struct usb_serial_driver cyberjack_device = {
        .description =          "Reiner SCT Cyberjack USB card reader",
        .id_table =             id_table,
        .num_ports =            1,
+       .attach =               cyberjack_attach,
        .port_probe =           cyberjack_port_probe,
        .port_remove =          cyberjack_port_remove,
        .open =                 cyberjack_open,
@@ -100,6 +102,14 @@ struct cyberjack_private {
        short           wrsent;         /* Data already sent */
 };
 
+static int cyberjack_attach(struct usb_serial *serial)
+{
+       if (serial->num_bulk_out < serial->num_ports)
+               return -ENODEV;
+
+       return 0;
+}
+
 static int cyberjack_port_probe(struct usb_serial_port *port)
 {
        struct cyberjack_private *priv;
index 8282a6a18fee83f6f1838b2f6f55b37a0ec4d409..22f23a429a95cb6a1cdeaca445a92035fd3e98e8 100644 (file)
@@ -1237,6 +1237,7 @@ static int f81534_attach(struct usb_serial *serial)
 static int f81534_port_probe(struct usb_serial_port *port)
 {
        struct f81534_port_private *port_priv;
+       int ret;
 
        port_priv = devm_kzalloc(&port->dev, sizeof(*port_priv), GFP_KERNEL);
        if (!port_priv)
@@ -1246,10 +1247,11 @@ static int f81534_port_probe(struct usb_serial_port *port)
        mutex_init(&port_priv->mcr_mutex);
 
        /* Assign logic-to-phy mapping */
-       port_priv->phy_num = f81534_logic_to_phy_port(port->serial, port);
-       if (port_priv->phy_num < 0 || port_priv->phy_num >= F81534_NUM_PORT)
-               return -ENODEV;
+       ret = f81534_logic_to_phy_port(port->serial, port);
+       if (ret < 0)
+               return ret;
 
+       port_priv->phy_num = ret;
        usb_set_serial_port_data(port, port_priv);
        dev_dbg(&port->dev, "%s: port_number: %d, phy_num: %d\n", __func__,
                        port->port_number, port_priv->phy_num);
index 97cabf803c2fa91a134c957dba74c4f77b97c712..b2f2e87aed945d7aceac24c99cf2f7c401beb5b2 100644 (file)
@@ -1043,6 +1043,7 @@ static int garmin_write_bulk(struct usb_serial_port *port,
                   "%s - usb_submit_urb(write bulk) failed with status = %d\n",
                                __func__, status);
                count = status;
+               kfree(buffer);
        }
 
        /* we are done with this urb, so let the host driver
index dcc0c58aaad5adaf89bdd535d4cd9699445de3ac..d50e5773483f5494be90ff42633cff70012079cc 100644 (file)
@@ -2751,6 +2751,11 @@ static int edge_startup(struct usb_serial *serial)
                                        EDGE_COMPATIBILITY_MASK1,
                                        EDGE_COMPATIBILITY_MASK2 };
 
+       if (serial->num_bulk_in < 1 || serial->num_interrupt_in < 1) {
+               dev_err(&serial->interface->dev, "missing endpoints\n");
+               return -ENODEV;
+       }
+
        dev = serial->dev;
 
        /* create our private serial structure */
index c339163698eb9960f8cc71735d8ed1cf24905e75..9a0db2965fbb45df5fd6b67f5eddb9d90969869c 100644 (file)
@@ -1499,8 +1499,7 @@ static int do_boot_mode(struct edgeport_serial *serial,
 
                dev_dbg(dev, "%s - Download successful -- Device rebooting...\n", __func__);
 
-               /* return an error on purpose */
-               return -ENODEV;
+               return 1;
        }
 
 stayinbootmode:
@@ -1508,7 +1507,7 @@ static int do_boot_mode(struct edgeport_serial *serial,
        dev_dbg(dev, "%s - STAYING IN BOOT MODE\n", __func__);
        serial->product_info.TiMode = TI_MODE_BOOT;
 
-       return 0;
+       return 1;
 }
 
 static int ti_do_config(struct edgeport_port *port, int feature, int on)
@@ -2546,6 +2545,13 @@ static int edge_startup(struct usb_serial *serial)
        int status;
        u16 product_id;
 
+       /* Make sure we have the required endpoints when in download mode. */
+       if (serial->interface->cur_altsetting->desc.bNumEndpoints > 1) {
+               if (serial->num_bulk_in < serial->num_ports ||
+                               serial->num_bulk_out < serial->num_ports)
+                       return -ENODEV;
+       }
+
        /* create our private serial structure */
        edge_serial = kzalloc(sizeof(struct edgeport_serial), GFP_KERNEL);
        if (!edge_serial)
@@ -2553,14 +2559,18 @@ static int edge_startup(struct usb_serial *serial)
 
        mutex_init(&edge_serial->es_lock);
        edge_serial->serial = serial;
+       INIT_DELAYED_WORK(&edge_serial->heartbeat_work, edge_heartbeat_work);
        usb_set_serial_data(serial, edge_serial);
 
        status = download_fw(edge_serial);
-       if (status) {
+       if (status < 0) {
                kfree(edge_serial);
                return status;
        }
 
+       if (status > 0)
+               return 1;       /* bind but do not register any ports */
+
        product_id = le16_to_cpu(
                        edge_serial->serial->dev->descriptor.idProduct);
 
@@ -2572,7 +2582,6 @@ static int edge_startup(struct usb_serial *serial)
                }
        }
 
-       INIT_DELAYED_WORK(&edge_serial->heartbeat_work, edge_heartbeat_work);
        edge_heartbeat_schedule(edge_serial);
 
        return 0;
@@ -2580,6 +2589,9 @@ static int edge_startup(struct usb_serial *serial)
 
 static void edge_disconnect(struct usb_serial *serial)
 {
+       struct edgeport_serial *edge_serial = usb_get_serial_data(serial);
+
+       cancel_delayed_work_sync(&edge_serial->heartbeat_work);
 }
 
 static void edge_release(struct usb_serial *serial)
index 344b4eea4bd59c4da0590f538323f37b5ed74074..d57fb51992182afec68a28fce42a242a4cd46ff2 100644 (file)
@@ -68,6 +68,16 @@ struct iuu_private {
        u32 clk;
 };
 
+static int iuu_attach(struct usb_serial *serial)
+{
+       unsigned char num_ports = serial->num_ports;
+
+       if (serial->num_bulk_in < num_ports || serial->num_bulk_out < num_ports)
+               return -ENODEV;
+
+       return 0;
+}
+
 static int iuu_port_probe(struct usb_serial_port *port)
 {
        struct iuu_private *priv;
@@ -1196,6 +1206,7 @@ static struct usb_serial_driver iuu_device = {
        .tiocmset = iuu_tiocmset,
        .set_termios = iuu_set_termios,
        .init_termios = iuu_init_termios,
+       .attach = iuu_attach,
        .port_probe = iuu_port_probe,
        .port_remove = iuu_port_remove,
 };
index e49ad0c63ad8b54c61995965445054e34cda6869..83523fcf6fb9d6a75bfba7738362e1c8bbfa01c9 100644 (file)
@@ -699,6 +699,19 @@ MODULE_FIRMWARE("keyspan_pda/keyspan_pda.fw");
 MODULE_FIRMWARE("keyspan_pda/xircom_pgs.fw");
 #endif
 
+static int keyspan_pda_attach(struct usb_serial *serial)
+{
+       unsigned char num_ports = serial->num_ports;
+
+       if (serial->num_bulk_out < num_ports ||
+                       serial->num_interrupt_in < num_ports) {
+               dev_err(&serial->interface->dev, "missing endpoints\n");
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
 static int keyspan_pda_port_probe(struct usb_serial_port *port)
 {
 
@@ -776,6 +789,7 @@ static struct usb_serial_driver keyspan_pda_device = {
        .break_ctl =            keyspan_pda_break_ctl,
        .tiocmget =             keyspan_pda_tiocmget,
        .tiocmset =             keyspan_pda_tiocmset,
+       .attach =               keyspan_pda_attach,
        .port_probe =           keyspan_pda_port_probe,
        .port_remove =          keyspan_pda_port_remove,
 };
index 2363654cafc9b79de61a30bcc00b7f875c470b60..813035f51fe73a4e0de69ce76e6c3329ba4d376c 100644 (file)
@@ -51,6 +51,7 @@
 
 
 /* Function prototypes */
+static int kobil_attach(struct usb_serial *serial);
 static int kobil_port_probe(struct usb_serial_port *probe);
 static int kobil_port_remove(struct usb_serial_port *probe);
 static int  kobil_open(struct tty_struct *tty, struct usb_serial_port *port);
@@ -86,6 +87,7 @@ static struct usb_serial_driver kobil_device = {
        .description =          "KOBIL USB smart card terminal",
        .id_table =             id_table,
        .num_ports =            1,
+       .attach =               kobil_attach,
        .port_probe =           kobil_port_probe,
        .port_remove =          kobil_port_remove,
        .ioctl =                kobil_ioctl,
@@ -113,6 +115,16 @@ struct kobil_private {
 };
 
 
+static int kobil_attach(struct usb_serial *serial)
+{
+       if (serial->num_interrupt_out < serial->num_ports) {
+               dev_err(&serial->interface->dev, "missing interrupt-out endpoint\n");
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
 static int kobil_port_probe(struct usb_serial_port *port)
 {
        struct usb_serial *serial = port->serial;
index d52caa03679c6cbc5886316cb27d471d0c4b7bc4..91bc170b408a08a59c49786e2cb5753149ce2425 100644 (file)
@@ -65,8 +65,6 @@ struct moschip_port {
        struct urb              *write_urb_pool[NUM_URBS];
 };
 
-static struct usb_serial_driver moschip7720_2port_driver;
-
 #define USB_VENDOR_ID_MOSCHIP          0x9710
 #define MOSCHIP_DEVICE_ID_7720         0x7720
 #define MOSCHIP_DEVICE_ID_7715         0x7715
@@ -970,25 +968,6 @@ static void mos7720_bulk_out_data_callback(struct urb *urb)
                tty_port_tty_wakeup(&mos7720_port->port->port);
 }
 
-/*
- * mos77xx_probe
- *     this function installs the appropriate read interrupt endpoint callback
- *     depending on whether the device is a 7720 or 7715, thus avoiding costly
- *     run-time checks in the high-frequency callback routine itself.
- */
-static int mos77xx_probe(struct usb_serial *serial,
-                        const struct usb_device_id *id)
-{
-       if (id->idProduct == MOSCHIP_DEVICE_ID_7715)
-               moschip7720_2port_driver.read_int_callback =
-                       mos7715_interrupt_callback;
-       else
-               moschip7720_2port_driver.read_int_callback =
-                       mos7720_interrupt_callback;
-
-       return 0;
-}
-
 static int mos77xx_calc_num_ports(struct usb_serial *serial)
 {
        u16 product = le16_to_cpu(serial->dev->descriptor.idProduct);
@@ -1917,6 +1896,11 @@ static int mos7720_startup(struct usb_serial *serial)
        u16 product;
        int ret_val;
 
+       if (serial->num_bulk_in < 2 || serial->num_bulk_out < 2) {
+               dev_err(&serial->interface->dev, "missing bulk endpoints\n");
+               return -ENODEV;
+       }
+
        product = le16_to_cpu(serial->dev->descriptor.idProduct);
        dev = serial->dev;
 
@@ -1941,19 +1925,18 @@ static int mos7720_startup(struct usb_serial *serial)
                        tmp->interrupt_in_endpointAddress;
                serial->port[1]->interrupt_in_urb = NULL;
                serial->port[1]->interrupt_in_buffer = NULL;
+
+               if (serial->port[0]->interrupt_in_urb) {
+                       struct urb *urb = serial->port[0]->interrupt_in_urb;
+
+                       urb->complete = mos7715_interrupt_callback;
+               }
        }
 
        /* setting configuration feature to one */
        usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
                        (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5000);
 
-       /* start the interrupt urb */
-       ret_val = usb_submit_urb(serial->port[0]->interrupt_in_urb, GFP_KERNEL);
-       if (ret_val)
-               dev_err(&dev->dev,
-                       "%s - Error %d submitting control urb\n",
-                       __func__, ret_val);
-
 #ifdef CONFIG_USB_SERIAL_MOS7715_PARPORT
        if (product == MOSCHIP_DEVICE_ID_7715) {
                ret_val = mos7715_parport_init(serial);
@@ -1961,6 +1944,13 @@ static int mos7720_startup(struct usb_serial *serial)
                        return ret_val;
        }
 #endif
+       /* start the interrupt urb */
+       ret_val = usb_submit_urb(serial->port[0]->interrupt_in_urb, GFP_KERNEL);
+       if (ret_val) {
+               dev_err(&dev->dev, "failed to submit interrupt urb: %d\n",
+                       ret_val);
+       }
+
        /* LSR For Port 1 */
        read_mos_reg(serial, 0, MOS7720_LSR, &data);
        dev_dbg(&dev->dev, "LSR:%x\n", data);
@@ -1970,6 +1960,8 @@ static int mos7720_startup(struct usb_serial *serial)
 
 static void mos7720_release(struct usb_serial *serial)
 {
+       usb_kill_urb(serial->port[0]->interrupt_in_urb);
+
 #ifdef CONFIG_USB_SERIAL_MOS7715_PARPORT
        /* close the parallel port */
 
@@ -2019,11 +2011,6 @@ static int mos7720_port_probe(struct usb_serial_port *port)
        if (!mos7720_port)
                return -ENOMEM;
 
-       /* Initialize all port interrupt end point to port 0 int endpoint.
-        * Our device has only one interrupt endpoint common to all ports.
-        */
-       port->interrupt_in_endpointAddress =
-               port->serial->port[0]->interrupt_in_endpointAddress;
        mos7720_port->port = port;
 
        usb_set_serial_port_data(port, mos7720_port);
@@ -2053,7 +2040,6 @@ static struct usb_serial_driver moschip7720_2port_driver = {
        .close                  = mos7720_close,
        .throttle               = mos7720_throttle,
        .unthrottle             = mos7720_unthrottle,
-       .probe                  = mos77xx_probe,
        .attach                 = mos7720_startup,
        .release                = mos7720_release,
        .port_probe             = mos7720_port_probe,
@@ -2067,7 +2053,7 @@ static struct usb_serial_driver moschip7720_2port_driver = {
        .chars_in_buffer        = mos7720_chars_in_buffer,
        .break_ctl              = mos7720_break,
        .read_bulk_callback     = mos7720_bulk_in_callback,
-       .read_int_callback      = NULL  /* dynamically assigned in probe() */
+       .read_int_callback      = mos7720_interrupt_callback,
 };
 
 static struct usb_serial_driver * const serial_drivers[] = {
index 9a220b8e810f161be985d9655ec6d9dee90147dc..ea27fb23967a13dd3e3c47d31fdaab52c38028eb 100644 (file)
@@ -214,7 +214,6 @@ MODULE_DEVICE_TABLE(usb, id_table);
 
 struct moschip_port {
        int port_num;           /*Actual port number in the device(1,2,etc) */
-       struct urb *write_urb;  /* write URB for this port */
        struct urb *read_urb;   /* read URB for this port */
        __u8 shadowLCR;         /* last LCR value received */
        __u8 shadowMCR;         /* last MCR value received */
@@ -1037,9 +1036,7 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
                                serial,
                                serial->port[0]->interrupt_in_urb->interval);
 
-                       /* start interrupt read for mos7840               *
-                        * will continue as long as mos7840 is connected  */
-
+                       /* start interrupt read for mos7840 */
                        response =
                            usb_submit_urb(serial->port[0]->interrupt_in_urb,
                                           GFP_KERNEL);
@@ -1186,7 +1183,6 @@ static void mos7840_close(struct usb_serial_port *port)
                }
        }
 
-       usb_kill_urb(mos7840_port->write_urb);
        usb_kill_urb(mos7840_port->read_urb);
        mos7840_port->read_urb_busy = false;
 
@@ -1199,12 +1195,6 @@ static void mos7840_close(struct usb_serial_port *port)
                }
        }
 
-       if (mos7840_port->write_urb) {
-               /* if this urb had a transfer buffer already (old tx) free it */
-               kfree(mos7840_port->write_urb->transfer_buffer);
-               usb_free_urb(mos7840_port->write_urb);
-       }
-
        Data = 0x0;
        mos7840_set_uart_reg(port, MODEM_CONTROL_REGISTER, Data);
 
@@ -2113,6 +2103,17 @@ static int mos7840_calc_num_ports(struct usb_serial *serial)
        return mos7840_num_ports;
 }
 
+static int mos7840_attach(struct usb_serial *serial)
+{
+       if (serial->num_bulk_in < serial->num_ports ||
+                       serial->num_bulk_out < serial->num_ports) {
+               dev_err(&serial->interface->dev, "missing endpoints\n");
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
 static int mos7840_port_probe(struct usb_serial_port *port)
 {
        struct usb_serial *serial = port->serial;
@@ -2388,6 +2389,7 @@ static struct usb_serial_driver moschip7840_4port_device = {
        .tiocmset = mos7840_tiocmset,
        .tiocmiwait = usb_serial_generic_tiocmiwait,
        .get_icount = usb_serial_generic_get_icount,
+       .attach = mos7840_attach,
        .port_probe = mos7840_port_probe,
        .port_remove = mos7840_port_remove,
        .read_bulk_callback = mos7840_bulk_in_callback,
index f6c6900bccf01c87c88734b2a7417db9f0fade8d..a180b17d24323b074aee19e33bf0f497ad271d8a 100644 (file)
@@ -38,6 +38,7 @@ static int  omninet_write(struct tty_struct *tty, struct usb_serial_port *port,
                                const unsigned char *buf, int count);
 static int  omninet_write_room(struct tty_struct *tty);
 static void omninet_disconnect(struct usb_serial *serial);
+static int omninet_attach(struct usb_serial *serial);
 static int omninet_port_probe(struct usb_serial_port *port);
 static int omninet_port_remove(struct usb_serial_port *port);
 
@@ -56,6 +57,7 @@ static struct usb_serial_driver zyxel_omninet_device = {
        .description =          "ZyXEL - omni.net lcd plus usb",
        .id_table =             id_table,
        .num_ports =            1,
+       .attach =               omninet_attach,
        .port_probe =           omninet_port_probe,
        .port_remove =          omninet_port_remove,
        .open =                 omninet_open,
@@ -104,6 +106,17 @@ struct omninet_data {
        __u8    od_outseq;      /* Sequence number for bulk_out URBs */
 };
 
+static int omninet_attach(struct usb_serial *serial)
+{
+       /* The second bulk-out endpoint is used for writing. */
+       if (serial->num_bulk_out < 2) {
+               dev_err(&serial->interface->dev, "missing endpoints\n");
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
 static int omninet_port_probe(struct usb_serial_port *port)
 {
        struct omninet_data *od;
index a4b88bc038b6d0a943b76457714e65a9449881b2..b8bf52bf7a944d5fddd6976f90a63db3cd6807e5 100644 (file)
@@ -134,6 +134,7 @@ static int oti6858_chars_in_buffer(struct tty_struct *tty);
 static int oti6858_tiocmget(struct tty_struct *tty);
 static int oti6858_tiocmset(struct tty_struct *tty,
                                unsigned int set, unsigned int clear);
+static int oti6858_attach(struct usb_serial *serial);
 static int oti6858_port_probe(struct usb_serial_port *port);
 static int oti6858_port_remove(struct usb_serial_port *port);
 
@@ -158,6 +159,7 @@ static struct usb_serial_driver oti6858_device = {
        .write_bulk_callback =  oti6858_write_bulk_callback,
        .write_room =           oti6858_write_room,
        .chars_in_buffer =      oti6858_chars_in_buffer,
+       .attach =               oti6858_attach,
        .port_probe =           oti6858_port_probe,
        .port_remove =          oti6858_port_remove,
 };
@@ -324,6 +326,20 @@ static void send_data(struct work_struct *work)
        usb_serial_port_softint(port);
 }
 
+static int oti6858_attach(struct usb_serial *serial)
+{
+       unsigned char num_ports = serial->num_ports;
+
+       if (serial->num_bulk_in < num_ports ||
+                       serial->num_bulk_out < num_ports ||
+                       serial->num_interrupt_in < num_ports) {
+               dev_err(&serial->interface->dev, "missing endpoints\n");
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
 static int oti6858_port_probe(struct usb_serial_port *port)
 {
        struct oti6858_private *priv;
index ae682e4eeaef575a23c90a8dda15407e862d42e1..46fca6b7584686744a9e79aae0bd78db08192813 100644 (file)
@@ -220,9 +220,17 @@ static int pl2303_probe(struct usb_serial *serial,
 static int pl2303_startup(struct usb_serial *serial)
 {
        struct pl2303_serial_private *spriv;
+       unsigned char num_ports = serial->num_ports;
        enum pl2303_type type = TYPE_01;
        unsigned char *buf;
 
+       if (serial->num_bulk_in < num_ports ||
+                       serial->num_bulk_out < num_ports ||
+                       serial->num_interrupt_in < num_ports) {
+               dev_err(&serial->interface->dev, "missing endpoints\n");
+               return -ENODEV;
+       }
+
        spriv = kzalloc(sizeof(*spriv), GFP_KERNEL);
        if (!spriv)
                return -ENOMEM;
index 659cb8606bd953a7585a013beeb3dc3989400a14..5709cc93b0837a0b73a8acec627caa05e27c9b64 100644 (file)
@@ -408,16 +408,12 @@ static void qt2_close(struct usb_serial_port *port)
 {
        struct usb_serial *serial;
        struct qt2_port_private *port_priv;
-       unsigned long flags;
        int i;
 
        serial = port->serial;
        port_priv = usb_get_serial_port_data(port);
 
-       spin_lock_irqsave(&port_priv->urb_lock, flags);
        usb_kill_urb(port_priv->write_urb);
-       port_priv->urb_in_use = false;
-       spin_unlock_irqrestore(&port_priv->urb_lock, flags);
 
        /* flush the port transmit buffer */
        i = usb_control_msg(serial->dev,
index ef0dbf0703c574eb62d1e2ce3be49e5186258aee..475e6c31b266b013ed4749b482c0477eda4a3904 100644 (file)
@@ -154,6 +154,19 @@ static int spcp8x5_probe(struct usb_serial *serial,
        return 0;
 }
 
+static int spcp8x5_attach(struct usb_serial *serial)
+{
+       unsigned char num_ports = serial->num_ports;
+
+       if (serial->num_bulk_in < num_ports ||
+                       serial->num_bulk_out < num_ports) {
+               dev_err(&serial->interface->dev, "missing endpoints\n");
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
 static int spcp8x5_port_probe(struct usb_serial_port *port)
 {
        const struct usb_device_id *id = usb_get_serial_data(port->serial);
@@ -477,6 +490,7 @@ static struct usb_serial_driver spcp8x5_device = {
        .tiocmget               = spcp8x5_tiocmget,
        .tiocmset               = spcp8x5_tiocmset,
        .probe                  = spcp8x5_probe,
+       .attach                 = spcp8x5_attach,
        .port_probe             = spcp8x5_port_probe,
        .port_remove            = spcp8x5_port_remove,
 };
index 8db9d071d9409a9f6e85ce6b23a1515f90f11157..64b85b8dedf33c9af7ea5faf68b7ea1a97335903 100644 (file)
@@ -579,6 +579,13 @@ static int ti_startup(struct usb_serial *serial)
                goto free_tdev;
        }
 
+       if (serial->num_bulk_in < serial->num_ports ||
+                       serial->num_bulk_out < serial->num_ports) {
+               dev_err(&serial->interface->dev, "missing endpoints\n");
+               status = -ENODEV;
+               goto free_tdev;
+       }
+
        return 0;
 
 free_tdev:
index af3c7eecff91d4a49fb1b49cdfce7b7d4c9b11fe..16cc18369111d039ffededa7559075a869638708 100644 (file)
@@ -2109,6 +2109,13 @@ UNUSUAL_DEV(  0x152d, 0x2566, 0x0114, 0x0114,
                USB_SC_DEVICE, USB_PR_DEVICE, NULL,
                US_FL_BROKEN_FUA ),
 
+/* Reported-by George Cherian <george.cherian@cavium.com> */
+UNUSUAL_DEV(0x152d, 0x9561, 0x0000, 0x9999,
+               "JMicron",
+               "JMS56x",
+               USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+               US_FL_NO_REPORT_OPCODES),
+
 /*
  * Entrega Technologies U1-SC25 (later Xircom PortGear PGSCSI)
  * and Mac USB Dock USB-SCSI */
index be1ee89ee9172f4408eab231c9b1e6a52a253c88..36d75c367d2215c4761f72d40b6c34eaf54bec02 100644 (file)
@@ -27,6 +27,45 @@ static LIST_HEAD(parent_list);
 static DEFINE_MUTEX(parent_list_lock);
 static struct class_compat *mdev_bus_compat_class;
 
+static LIST_HEAD(mdev_list);
+static DEFINE_MUTEX(mdev_list_lock);
+
+struct device *mdev_parent_dev(struct mdev_device *mdev)
+{
+       return mdev->parent->dev;
+}
+EXPORT_SYMBOL(mdev_parent_dev);
+
+void *mdev_get_drvdata(struct mdev_device *mdev)
+{
+       return mdev->driver_data;
+}
+EXPORT_SYMBOL(mdev_get_drvdata);
+
+void mdev_set_drvdata(struct mdev_device *mdev, void *data)
+{
+       mdev->driver_data = data;
+}
+EXPORT_SYMBOL(mdev_set_drvdata);
+
+struct device *mdev_dev(struct mdev_device *mdev)
+{
+       return &mdev->dev;
+}
+EXPORT_SYMBOL(mdev_dev);
+
+struct mdev_device *mdev_from_dev(struct device *dev)
+{
+       return dev_is_mdev(dev) ? to_mdev_device(dev) : NULL;
+}
+EXPORT_SYMBOL(mdev_from_dev);
+
+uuid_le mdev_uuid(struct mdev_device *mdev)
+{
+       return mdev->uuid;
+}
+EXPORT_SYMBOL(mdev_uuid);
+
 static int _find_mdev_device(struct device *dev, void *data)
 {
        struct mdev_device *mdev;
@@ -42,7 +81,7 @@ static int _find_mdev_device(struct device *dev, void *data)
        return 0;
 }
 
-static bool mdev_device_exist(struct parent_device *parent, uuid_le uuid)
+static bool mdev_device_exist(struct mdev_parent *parent, uuid_le uuid)
 {
        struct device *dev;
 
@@ -56,9 +95,9 @@ static bool mdev_device_exist(struct parent_device *parent, uuid_le uuid)
 }
 
 /* Should be called holding parent_list_lock */
-static struct parent_device *__find_parent_device(struct device *dev)
+static struct mdev_parent *__find_parent_device(struct device *dev)
 {
-       struct parent_device *parent;
+       struct mdev_parent *parent;
 
        list_for_each_entry(parent, &parent_list, next) {
                if (parent->dev == dev)
@@ -69,8 +108,8 @@ static struct parent_device *__find_parent_device(struct device *dev)
 
 static void mdev_release_parent(struct kref *kref)
 {
-       struct parent_device *parent = container_of(kref, struct parent_device,
-                                                   ref);
+       struct mdev_parent *parent = container_of(kref, struct mdev_parent,
+                                                 ref);
        struct device *dev = parent->dev;
 
        kfree(parent);
@@ -78,7 +117,7 @@ static void mdev_release_parent(struct kref *kref)
 }
 
 static
-inline struct parent_device *mdev_get_parent(struct parent_device *parent)
+inline struct mdev_parent *mdev_get_parent(struct mdev_parent *parent)
 {
        if (parent)
                kref_get(&parent->ref);
@@ -86,7 +125,7 @@ inline struct parent_device *mdev_get_parent(struct parent_device *parent)
        return parent;
 }
 
-static inline void mdev_put_parent(struct parent_device *parent)
+static inline void mdev_put_parent(struct mdev_parent *parent)
 {
        if (parent)
                kref_put(&parent->ref, mdev_release_parent);
@@ -95,7 +134,7 @@ static inline void mdev_put_parent(struct parent_device *parent)
 static int mdev_device_create_ops(struct kobject *kobj,
                                  struct mdev_device *mdev)
 {
-       struct parent_device *parent = mdev->parent;
+       struct mdev_parent *parent = mdev->parent;
        int ret;
 
        ret = parent->ops->create(kobj, mdev);
@@ -122,7 +161,7 @@ static int mdev_device_create_ops(struct kobject *kobj,
  */
 static int mdev_device_remove_ops(struct mdev_device *mdev, bool force_remove)
 {
-       struct parent_device *parent = mdev->parent;
+       struct mdev_parent *parent = mdev->parent;
        int ret;
 
        /*
@@ -153,10 +192,10 @@ static int mdev_device_remove_cb(struct device *dev, void *data)
  * Add device to list of registered parent devices.
  * Returns a negative value on error, otherwise 0.
  */
-int mdev_register_device(struct device *dev, const struct parent_ops *ops)
+int mdev_register_device(struct device *dev, const struct mdev_parent_ops *ops)
 {
        int ret;
-       struct parent_device *parent;
+       struct mdev_parent *parent;
 
        /* check for mandatory ops */
        if (!ops || !ops->create || !ops->remove || !ops->supported_type_groups)
@@ -229,7 +268,7 @@ EXPORT_SYMBOL(mdev_register_device);
 
 void mdev_unregister_device(struct device *dev)
 {
-       struct parent_device *parent;
+       struct mdev_parent *parent;
        bool force_remove = true;
 
        mutex_lock(&parent_list_lock);
@@ -266,7 +305,7 @@ int mdev_device_create(struct kobject *kobj, struct device *dev, uuid_le uuid)
 {
        int ret;
        struct mdev_device *mdev;
-       struct parent_device *parent;
+       struct mdev_parent *parent;
        struct mdev_type *type = to_mdev_type(kobj);
 
        parent = mdev_get_parent(type->parent);
@@ -316,6 +355,11 @@ int mdev_device_create(struct kobject *kobj, struct device *dev, uuid_le uuid)
        dev_dbg(&mdev->dev, "MDEV: created\n");
 
        mutex_unlock(&parent->lock);
+
+       mutex_lock(&mdev_list_lock);
+       list_add(&mdev->next, &mdev_list);
+       mutex_unlock(&mdev_list_lock);
+
        return ret;
 
 create_failed:
@@ -329,12 +373,30 @@ int mdev_device_create(struct kobject *kobj, struct device *dev, uuid_le uuid)
 
 int mdev_device_remove(struct device *dev, bool force_remove)
 {
-       struct mdev_device *mdev;
-       struct parent_device *parent;
+       struct mdev_device *mdev, *tmp;
+       struct mdev_parent *parent;
        struct mdev_type *type;
        int ret;
+       bool found = false;
 
        mdev = to_mdev_device(dev);
+
+       mutex_lock(&mdev_list_lock);
+       list_for_each_entry(tmp, &mdev_list, next) {
+               if (tmp == mdev) {
+                       found = true;
+                       break;
+               }
+       }
+
+       if (found)
+               list_del(&mdev->next);
+
+       mutex_unlock(&mdev_list_lock);
+
+       if (!found)
+               return -ENODEV;
+
        type = to_mdev_type(mdev->type_kobj);
        parent = mdev->parent;
        mutex_lock(&parent->lock);
@@ -342,6 +404,11 @@ int mdev_device_remove(struct device *dev, bool force_remove)
        ret = mdev_device_remove_ops(mdev, force_remove);
        if (ret) {
                mutex_unlock(&parent->lock);
+
+               mutex_lock(&mdev_list_lock);
+               list_add(&mdev->next, &mdev_list);
+               mutex_unlock(&mdev_list_lock);
+
                return ret;
        }
 
@@ -349,7 +416,8 @@ int mdev_device_remove(struct device *dev, bool force_remove)
        device_unregister(dev);
        mutex_unlock(&parent->lock);
        mdev_put_parent(parent);
-       return ret;
+
+       return 0;
 }
 
 static int __init mdev_init(void)
index d35097cbf3d755c027b7a98a8e6daed835754117..a9cefd70a7050a45d88b77dfd17efeffd5d3e95f 100644 (file)
 int  mdev_bus_register(void);
 void mdev_bus_unregister(void);
 
+struct mdev_parent {
+       struct device *dev;
+       const struct mdev_parent_ops *ops;
+       struct kref ref;
+       struct mutex lock;
+       struct list_head next;
+       struct kset *mdev_types_kset;
+       struct list_head type_list;
+};
+
+struct mdev_device {
+       struct device dev;
+       struct mdev_parent *parent;
+       uuid_le uuid;
+       void *driver_data;
+       struct kref ref;
+       struct list_head next;
+       struct kobject *type_kobj;
+};
+
+#define to_mdev_device(dev)    container_of(dev, struct mdev_device, dev)
+#define dev_is_mdev(d)         ((d)->bus == &mdev_bus_type)
+
 struct mdev_type {
        struct kobject kobj;
        struct kobject *devices_kobj;
-       struct parent_device *parent;
+       struct mdev_parent *parent;
        struct list_head next;
        struct attribute_group *group;
 };
@@ -29,8 +52,8 @@ struct mdev_type {
 #define to_mdev_type(_kobj)            \
        container_of(_kobj, struct mdev_type, kobj)
 
-int  parent_create_sysfs_files(struct parent_device *parent);
-void parent_remove_sysfs_files(struct parent_device *parent);
+int  parent_create_sysfs_files(struct mdev_parent *parent);
+void parent_remove_sysfs_files(struct mdev_parent *parent);
 
 int  mdev_create_sysfs_files(struct device *dev, struct mdev_type *type);
 void mdev_remove_sysfs_files(struct device *dev, struct mdev_type *type);
index 1a53deb2ee102b677f92d7388eb340a6e0204ffd..802df210929ba5d52924c102867cbe55ba365963 100644 (file)
@@ -92,7 +92,7 @@ static struct kobj_type mdev_type_ktype = {
        .release = mdev_type_release,
 };
 
-struct mdev_type *add_mdev_supported_type(struct parent_device *parent,
+struct mdev_type *add_mdev_supported_type(struct mdev_parent *parent,
                                          struct attribute_group *group)
 {
        struct mdev_type *type;
@@ -158,7 +158,7 @@ static void remove_mdev_supported_type(struct mdev_type *type)
        kobject_put(&type->kobj);
 }
 
-static int add_mdev_supported_type_groups(struct parent_device *parent)
+static int add_mdev_supported_type_groups(struct mdev_parent *parent)
 {
        int i;
 
@@ -183,7 +183,7 @@ static int add_mdev_supported_type_groups(struct parent_device *parent)
 }
 
 /* mdev sysfs functions */
-void parent_remove_sysfs_files(struct parent_device *parent)
+void parent_remove_sysfs_files(struct mdev_parent *parent)
 {
        struct mdev_type *type, *tmp;
 
@@ -196,7 +196,7 @@ void parent_remove_sysfs_files(struct parent_device *parent)
        kset_unregister(parent->mdev_types_kset);
 }
 
-int parent_create_sysfs_files(struct parent_device *parent)
+int parent_create_sysfs_files(struct mdev_parent *parent)
 {
        int ret;
 
index ffc36758cb84c08ce1b2c4d516bd73b0c18d52d1..fa848a701b8b4ed921ae56248eac3ef0fdc7d5a3 100644 (file)
@@ -27,7 +27,7 @@
 static int vfio_mdev_open(void *device_data)
 {
        struct mdev_device *mdev = device_data;
-       struct parent_device *parent = mdev->parent;
+       struct mdev_parent *parent = mdev->parent;
        int ret;
 
        if (unlikely(!parent->ops->open))
@@ -46,7 +46,7 @@ static int vfio_mdev_open(void *device_data)
 static void vfio_mdev_release(void *device_data)
 {
        struct mdev_device *mdev = device_data;
-       struct parent_device *parent = mdev->parent;
+       struct mdev_parent *parent = mdev->parent;
 
        if (likely(parent->ops->release))
                parent->ops->release(mdev);
@@ -58,7 +58,7 @@ static long vfio_mdev_unlocked_ioctl(void *device_data,
                                     unsigned int cmd, unsigned long arg)
 {
        struct mdev_device *mdev = device_data;
-       struct parent_device *parent = mdev->parent;
+       struct mdev_parent *parent = mdev->parent;
 
        if (unlikely(!parent->ops->ioctl))
                return -EINVAL;
@@ -70,7 +70,7 @@ static ssize_t vfio_mdev_read(void *device_data, char __user *buf,
                              size_t count, loff_t *ppos)
 {
        struct mdev_device *mdev = device_data;
-       struct parent_device *parent = mdev->parent;
+       struct mdev_parent *parent = mdev->parent;
 
        if (unlikely(!parent->ops->read))
                return -EINVAL;
@@ -82,7 +82,7 @@ static ssize_t vfio_mdev_write(void *device_data, const char __user *buf,
                               size_t count, loff_t *ppos)
 {
        struct mdev_device *mdev = device_data;
-       struct parent_device *parent = mdev->parent;
+       struct mdev_parent *parent = mdev->parent;
 
        if (unlikely(!parent->ops->write))
                return -EINVAL;
@@ -93,7 +93,7 @@ static ssize_t vfio_mdev_write(void *device_data, const char __user *buf,
 static int vfio_mdev_mmap(void *device_data, struct vm_area_struct *vma)
 {
        struct mdev_device *mdev = device_data;
-       struct parent_device *parent = mdev->parent;
+       struct mdev_parent *parent = mdev->parent;
 
        if (unlikely(!parent->ops->mmap))
                return -EINVAL;
index dcd7c2a9961830b7fd1ff4155d5c302cd55fd809..324c52e3a1a47736a819826eea2d1974e47c7a87 100644 (file)
@@ -1142,6 +1142,10 @@ static int vfio_pci_mmap(void *device_data, struct vm_area_struct *vma)
                        return ret;
 
                vdev->barmap[index] = pci_iomap(pdev, index, 0);
+               if (!vdev->barmap[index]) {
+                       pci_release_selected_regions(pdev, 1 << index);
+                       return -ENOMEM;
+               }
        }
 
        vma->vm_private_data = vdev;
index 5ffd1d9ad4bdf8111a35a9b6b0c217109d238ebf..357243d76f108fe184d2079736726e89a0ad0846 100644 (file)
@@ -193,7 +193,10 @@ ssize_t vfio_pci_vga_rw(struct vfio_pci_device *vdev, char __user *buf,
        if (!vdev->has_vga)
                return -EINVAL;
 
-       switch (pos) {
+       if (pos > 0xbfffful)
+               return -EINVAL;
+
+       switch ((u32)pos) {
        case 0xa0000 ... 0xbffff:
                count = min(count, (size_t)(0xc0000 - pos));
                iomem = ioremap_nocache(0xa0000, 0xbffff - 0xa0000 + 1);
index f3726ba12aa6ceccff8a0c96523aa683537be8f4..9266271a787a70b61325d1e92ae9a8d710465f0c 100644 (file)
@@ -268,28 +268,38 @@ static void vfio_lock_acct(struct task_struct *task, long npage)
 {
        struct vwork *vwork;
        struct mm_struct *mm;
+       bool is_current;
 
        if (!npage)
                return;
 
-       mm = get_task_mm(task);
+       is_current = (task->mm == current->mm);
+
+       mm = is_current ? task->mm : get_task_mm(task);
        if (!mm)
-               return; /* process exited or nothing to do */
+               return; /* process exited */
 
        if (down_write_trylock(&mm->mmap_sem)) {
                mm->locked_vm += npage;
                up_write(&mm->mmap_sem);
-               mmput(mm);
+               if (!is_current)
+                       mmput(mm);
                return;
        }
 
+       if (is_current) {
+               mm = get_task_mm(task);
+               if (!mm)
+                       return;
+       }
+
        /*
         * Couldn't get mmap_sem lock, so must setup to update
         * mm->locked_vm later. If locked_vm were atomic, we
         * wouldn't need this silliness
         */
        vwork = kmalloc(sizeof(struct vwork), GFP_KERNEL);
-       if (!vwork) {
+       if (WARN_ON(!vwork)) {
                mmput(mm);
                return;
        }
@@ -393,77 +403,71 @@ static int vaddr_get_pfn(struct mm_struct *mm, unsigned long vaddr,
 static long vfio_pin_pages_remote(struct vfio_dma *dma, unsigned long vaddr,
                                  long npage, unsigned long *pfn_base)
 {
-       unsigned long limit;
-       bool lock_cap = ns_capable(task_active_pid_ns(dma->task)->user_ns,
-                                  CAP_IPC_LOCK);
-       struct mm_struct *mm;
-       long ret, i = 0, lock_acct = 0;
+       unsigned long limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
+       bool lock_cap = capable(CAP_IPC_LOCK);
+       long ret, pinned = 0, lock_acct = 0;
        bool rsvd;
        dma_addr_t iova = vaddr - dma->vaddr + dma->iova;
 
-       mm = get_task_mm(dma->task);
-       if (!mm)
+       /* This code path is only user initiated */
+       if (!current->mm)
                return -ENODEV;
 
-       ret = vaddr_get_pfn(mm, vaddr, dma->prot, pfn_base);
+       ret = vaddr_get_pfn(current->mm, vaddr, dma->prot, pfn_base);
        if (ret)
-               goto pin_pg_remote_exit;
+               return ret;
 
+       pinned++;
        rsvd = is_invalid_reserved_pfn(*pfn_base);
-       limit = task_rlimit(dma->task, RLIMIT_MEMLOCK) >> PAGE_SHIFT;
 
        /*
         * Reserved pages aren't counted against the user, externally pinned
         * pages are already counted against the user.
         */
        if (!rsvd && !vfio_find_vpfn(dma, iova)) {
-               if (!lock_cap && mm->locked_vm + 1 > limit) {
+               if (!lock_cap && current->mm->locked_vm + 1 > limit) {
                        put_pfn(*pfn_base, dma->prot);
                        pr_warn("%s: RLIMIT_MEMLOCK (%ld) exceeded\n", __func__,
                                        limit << PAGE_SHIFT);
-                       ret = -ENOMEM;
-                       goto pin_pg_remote_exit;
+                       return -ENOMEM;
                }
                lock_acct++;
        }
 
-       i++;
-       if (likely(!disable_hugepages)) {
-               /* Lock all the consecutive pages from pfn_base */
-               for (vaddr += PAGE_SIZE, iova += PAGE_SIZE; i < npage;
-                    i++, vaddr += PAGE_SIZE, iova += PAGE_SIZE) {
-                       unsigned long pfn = 0;
+       if (unlikely(disable_hugepages))
+               goto out;
 
-                       ret = vaddr_get_pfn(mm, vaddr, dma->prot, &pfn);
-                       if (ret)
-                               break;
+       /* Lock all the consecutive pages from pfn_base */
+       for (vaddr += PAGE_SIZE, iova += PAGE_SIZE; pinned < npage;
+            pinned++, vaddr += PAGE_SIZE, iova += PAGE_SIZE) {
+               unsigned long pfn = 0;
 
-                       if (pfn != *pfn_base + i ||
-                           rsvd != is_invalid_reserved_pfn(pfn)) {
+               ret = vaddr_get_pfn(current->mm, vaddr, dma->prot, &pfn);
+               if (ret)
+                       break;
+
+               if (pfn != *pfn_base + pinned ||
+                   rsvd != is_invalid_reserved_pfn(pfn)) {
+                       put_pfn(pfn, dma->prot);
+                       break;
+               }
+
+               if (!rsvd && !vfio_find_vpfn(dma, iova)) {
+                       if (!lock_cap &&
+                           current->mm->locked_vm + lock_acct + 1 > limit) {
                                put_pfn(pfn, dma->prot);
+                               pr_warn("%s: RLIMIT_MEMLOCK (%ld) exceeded\n",
+                                       __func__, limit << PAGE_SHIFT);
                                break;
                        }
-
-                       if (!rsvd && !vfio_find_vpfn(dma, iova)) {
-                               if (!lock_cap &&
-                                   mm->locked_vm + lock_acct + 1 > limit) {
-                                       put_pfn(pfn, dma->prot);
-                                       pr_warn("%s: RLIMIT_MEMLOCK (%ld) "
-                                               "exceeded\n", __func__,
-                                               limit << PAGE_SHIFT);
-                                       break;
-                               }
-                               lock_acct++;
-                       }
+                       lock_acct++;
                }
        }
 
-       vfio_lock_acct(dma->task, lock_acct);
-       ret = i;
+out:
+       vfio_lock_acct(current, lock_acct);
 
-pin_pg_remote_exit:
-       mmput(mm);
-       return ret;
+       return pinned;
 }
 
 static long vfio_unpin_pages_remote(struct vfio_dma *dma, dma_addr_t iova,
@@ -473,10 +477,10 @@ static long vfio_unpin_pages_remote(struct vfio_dma *dma, dma_addr_t iova,
        long unlocked = 0, locked = 0;
        long i;
 
-       for (i = 0; i < npage; i++) {
+       for (i = 0; i < npage; i++, iova += PAGE_SIZE) {
                if (put_pfn(pfn++, dma->prot)) {
                        unlocked++;
-                       if (vfio_find_vpfn(dma, iova + (i << PAGE_SHIFT)))
+                       if (vfio_find_vpfn(dma, iova))
                                locked++;
                }
        }
index 2d3b691f3fc4885414ae9234950d8e9c798e5fe6..038ac6934fe9d7f865f9711f24fecadc27071b65 100644 (file)
@@ -308,6 +308,11 @@ static int cobalt_lcdfb_probe(struct platform_device *dev)
        info->screen_size = resource_size(res);
        info->screen_base = devm_ioremap(&dev->dev, res->start,
                                         info->screen_size);
+       if (!info->screen_base) {
+               framebuffer_release(info);
+               return -ENOMEM;
+       }
+
        info->fbops = &cobalt_lcd_fbops;
        info->fix = cobalt_lcdfb_fix;
        info->fix.smem_start = res->start;
index 778acf80aacbf81042a3debc4ca1e90d58037f6c..85dd20e0572678581ffa03a8ff6b734773230d1e 100644 (file)
@@ -58,9 +58,13 @@ static int xen_map_device_mmio(const struct resource *resources,
        xen_pfn_t *gpfns;
        xen_ulong_t *idxs;
        int *errs;
-       struct xen_add_to_physmap_range xatp;
 
        for (i = 0; i < count; i++) {
+               struct xen_add_to_physmap_range xatp = {
+                       .domid = DOMID_SELF,
+                       .space = XENMAPSPACE_dev_mmio
+               };
+
                r = &resources[i];
                nr = DIV_ROUND_UP(resource_size(r), XEN_PAGE_SIZE);
                if ((resource_type(r) != IORESOURCE_MEM) || (nr == 0))
@@ -87,9 +91,7 @@ static int xen_map_device_mmio(const struct resource *resources,
                        idxs[j] = XEN_PFN_DOWN(r->start) + j;
                }
 
-               xatp.domid = DOMID_SELF;
                xatp.size = nr;
-               xatp.space = XENMAPSPACE_dev_mmio;
 
                set_xen_guest_handle(xatp.gpfns, gpfns);
                set_xen_guest_handle(xatp.idxs, idxs);
index c03f9c86c7e37d580032d1553e829a6f14ef2014..3c41470c7fc4f123b845bc611bb6ea1d48aabc92 100644 (file)
@@ -369,8 +369,7 @@ static void evtchn_fifo_resume(void)
                }
 
                ret = init_control_block(cpu, control_block);
-               if (ret < 0)
-                       BUG();
+               BUG_ON(ret < 0);
        }
 
        /*
index e8c7f09d01be8a483df94db111faec580beb032a..6890897a6f30edab0c0d87926942463f9b481aa9 100644 (file)
@@ -125,7 +125,7 @@ static int add_evtchn(struct per_user_data *u, struct user_evtchn *evtchn)
        while (*new) {
                struct user_evtchn *this;
 
-               this = container_of(*new, struct user_evtchn, node);
+               this = rb_entry(*new, struct user_evtchn, node);
 
                parent = *new;
                if (this->port < evtchn->port)
@@ -157,7 +157,7 @@ static struct user_evtchn *find_evtchn(struct per_user_data *u, unsigned port)
        while (node) {
                struct user_evtchn *evtchn;
 
-               evtchn = container_of(node, struct user_evtchn, node);
+               evtchn = rb_entry(node, struct user_evtchn, node);
 
                if (evtchn->port < port)
                        node = node->rb_left;
index 478fb91e3df2b8a9f8c75d8538668465feb59462..f905d6eeb0482ee481cb24d9714bc6081a852d1e 100644 (file)
@@ -275,6 +275,10 @@ int __ref xen_swiotlb_init(int verbose, bool early)
                rc = 0;
        } else
                rc = swiotlb_late_init_with_tbl(xen_io_tlb_start, xen_io_tlb_nslabs);
+
+       if (!rc)
+               swiotlb_set_max_segment(PAGE_SIZE);
+
        return rc;
 error:
        if (repeat--) {
@@ -392,7 +396,7 @@ dma_addr_t xen_swiotlb_map_page(struct device *dev, struct page *page,
        if (dma_capable(dev, dev_addr, size) &&
            !range_straddles_page_boundary(phys, size) &&
                !xen_arch_need_swiotlb(dev, phys, dev_addr) &&
-               !swiotlb_force) {
+               (swiotlb_force != SWIOTLB_FORCE)) {
                /* we are not interested in the dma_addr returned by
                 * xen_dma_map_page, only in the potential cache flushes executed
                 * by the function. */
@@ -552,7 +556,7 @@ xen_swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl,
                phys_addr_t paddr = sg_phys(sg);
                dma_addr_t dev_addr = xen_phys_to_bus(paddr);
 
-               if (swiotlb_force ||
+               if (swiotlb_force == SWIOTLB_FORCE ||
                    xen_arch_need_swiotlb(hwdev, paddr, dev_addr) ||
                    !dma_capable(hwdev, dev_addr, sg->length) ||
                    range_straddles_page_boundary(paddr, sg->length)) {
index e74f9c1fbd80a9fe4c6cfbba0176785b005c06fd..867a2e4252086531bcd682367838f4c4c169427d 100644 (file)
@@ -42,7 +42,6 @@ int xb_write(const void *data, unsigned len);
 int xb_read(void *data, unsigned len);
 int xb_data_to_read(void);
 int xb_wait_for_data_to_read(void);
-int xs_input_avail(void);
 extern struct xenstore_domain_interface *xen_store_interface;
 extern int xen_store_evtchn;
 extern enum xenstore_init xen_store_domain_type;
index 6c0ead4be784340019e69942a8d704ab088ea202..79130b31024754dc7560f60732545a8f28c103b1 100644 (file)
@@ -302,6 +302,29 @@ static void watch_fired(struct xenbus_watch *watch,
        mutex_unlock(&adap->dev_data->reply_mutex);
 }
 
+static int xenbus_command_reply(struct xenbus_file_priv *u,
+                               unsigned int msg_type, const char *reply)
+{
+       struct {
+               struct xsd_sockmsg hdr;
+               const char body[16];
+       } msg;
+       int rc;
+
+       msg.hdr = u->u.msg;
+       msg.hdr.type = msg_type;
+       msg.hdr.len = strlen(reply) + 1;
+       if (msg.hdr.len > sizeof(msg.body))
+               return -E2BIG;
+
+       mutex_lock(&u->reply_mutex);
+       rc = queue_reply(&u->read_buffers, &msg, sizeof(msg.hdr) + msg.hdr.len);
+       wake_up(&u->read_waitq);
+       mutex_unlock(&u->reply_mutex);
+
+       return rc;
+}
+
 static int xenbus_write_transaction(unsigned msg_type,
                                    struct xenbus_file_priv *u)
 {
@@ -316,12 +339,12 @@ static int xenbus_write_transaction(unsigned msg_type,
                        rc = -ENOMEM;
                        goto out;
                }
-       } else if (msg_type == XS_TRANSACTION_END) {
+       } else if (u->u.msg.tx_id != 0) {
                list_for_each_entry(trans, &u->transactions, list)
                        if (trans->handle.id == u->u.msg.tx_id)
                                break;
                if (&trans->list == &u->transactions)
-                       return -ESRCH;
+                       return xenbus_command_reply(u, XS_ERROR, "ENOENT");
        }
 
        reply = xenbus_dev_request_and_reply(&u->u.msg);
@@ -372,12 +395,12 @@ static int xenbus_write_watch(unsigned msg_type, struct xenbus_file_priv *u)
        path = u->u.buffer + sizeof(u->u.msg);
        token = memchr(path, 0, u->u.msg.len);
        if (token == NULL) {
-               rc = -EILSEQ;
+               rc = xenbus_command_reply(u, XS_ERROR, "EINVAL");
                goto out;
        }
        token++;
        if (memchr(token, 0, u->u.msg.len - (token - path)) == NULL) {
-               rc = -EILSEQ;
+               rc = xenbus_command_reply(u, XS_ERROR, "EINVAL");
                goto out;
        }
 
@@ -411,23 +434,7 @@ static int xenbus_write_watch(unsigned msg_type, struct xenbus_file_priv *u)
        }
 
        /* Success.  Synthesize a reply to say all is OK. */
-       {
-               struct {
-                       struct xsd_sockmsg hdr;
-                       char body[3];
-               } __packed reply = {
-                       {
-                               .type = msg_type,
-                               .len = sizeof(reply.body)
-                       },
-                       "OK"
-               };
-
-               mutex_lock(&u->reply_mutex);
-               rc = queue_reply(&u->read_buffers, &reply, sizeof(reply));
-               wake_up(&u->read_waitq);
-               mutex_unlock(&u->reply_mutex);
-       }
+       rc = xenbus_command_reply(u, msg_type, "OK");
 
 out:
        return rc;
index 6254cee8f8f382bf8aa881426453bae189973d34..5db5d1340d69eccf475f0feac7f85665bd6aceb5 100644 (file)
@@ -328,6 +328,7 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
        struct file *file = iocb->ki_filp;
        struct inode *inode = bdev_file_inode(file);
        struct block_device *bdev = I_BDEV(inode);
+       struct blk_plug plug;
        struct blkdev_dio *dio;
        struct bio *bio;
        bool is_read = (iov_iter_rw(iter) == READ);
@@ -353,6 +354,7 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
        dio->multi_bio = false;
        dio->should_dirty = is_read && (iter->type == ITER_IOVEC);
 
+       blk_start_plug(&plug);
        for (;;) {
                bio->bi_bdev = bdev;
                bio->bi_iter.bi_sector = pos >> 9;
@@ -394,6 +396,7 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
                submit_bio(bio);
                bio = bio_alloc(GFP_KERNEL, nr_pages);
        }
+       blk_finish_plug(&plug);
 
        if (!dio->is_sync)
                return -EIOCBQUEUED;
index d21771fcf7d345ab4299cb7fa25881ffcc61ef52..0e87401cf33535b03a1d2aa9da6e919d8a56a906 100644 (file)
@@ -1660,7 +1660,7 @@ void clean_bdev_aliases(struct block_device *bdev, sector_t block, sector_t len)
                        head = page_buffers(page);
                        bh = head;
                        do {
-                               if (!buffer_mapped(bh))
+                               if (!buffer_mapped(bh) || (bh->b_blocknr < block))
                                        goto next;
                                if (bh->b_blocknr >= block + len)
                                        break;
index 6eeea1dcba41c2fa75c479ce1a3fa16f7cd2e7a5..95cd4c3b06c326708a3315d3da86bdb9aafd5469 100644 (file)
@@ -248,7 +248,8 @@ int fscrypt_get_crypt_info(struct inode *inode)
                goto out;
 
        if (fscrypt_dummy_context_enabled(inode)) {
-               memset(raw_key, 0x42, FS_AES_256_XTS_KEY_SIZE);
+               memset(raw_key, 0x42, keysize/2);
+               memset(raw_key+keysize/2, 0x24, keysize - (keysize/2));
                goto got_key;
        }
 
index 6ed7c2eebeec53c7656054d05061dc83a23ef1c0..d6cd7ea4851da877b13c7af306fd07f8468a54f4 100644 (file)
@@ -179,6 +179,11 @@ int fscrypt_has_permitted_context(struct inode *parent, struct inode *child)
                BUG_ON(1);
        }
 
+       /* No restrictions on file types which are never encrypted */
+       if (!S_ISREG(child->i_mode) && !S_ISDIR(child->i_mode) &&
+           !S_ISLNK(child->i_mode))
+               return 1;
+
        /* no restrictions if the parent directory is not encrypted */
        if (!parent->i_sb->s_cop->is_encrypted(parent))
                return 1;
index a8732fbed381a45bbce44fcdf0731ccfdc1a09ba..5c74f60d0a5094dc0a27f27ae0acd41667414332 100644 (file)
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -451,16 +451,37 @@ void dax_wake_mapping_entry_waiter(struct address_space *mapping,
                __wake_up(wq, TASK_NORMAL, wake_all ? 0 : 1, &key);
 }
 
+static int __dax_invalidate_mapping_entry(struct address_space *mapping,
+                                         pgoff_t index, bool trunc)
+{
+       int ret = 0;
+       void *entry;
+       struct radix_tree_root *page_tree = &mapping->page_tree;
+
+       spin_lock_irq(&mapping->tree_lock);
+       entry = get_unlocked_mapping_entry(mapping, index, NULL);
+       if (!entry || !radix_tree_exceptional_entry(entry))
+               goto out;
+       if (!trunc &&
+           (radix_tree_tag_get(page_tree, index, PAGECACHE_TAG_DIRTY) ||
+            radix_tree_tag_get(page_tree, index, PAGECACHE_TAG_TOWRITE)))
+               goto out;
+       radix_tree_delete(page_tree, index);
+       mapping->nrexceptional--;
+       ret = 1;
+out:
+       put_unlocked_mapping_entry(mapping, index, entry);
+       spin_unlock_irq(&mapping->tree_lock);
+       return ret;
+}
 /*
  * Delete exceptional DAX entry at @index from @mapping. Wait for radix tree
  * entry to get unlocked before deleting it.
  */
 int dax_delete_mapping_entry(struct address_space *mapping, pgoff_t index)
 {
-       void *entry;
+       int ret = __dax_invalidate_mapping_entry(mapping, index, true);
 
-       spin_lock_irq(&mapping->tree_lock);
-       entry = get_unlocked_mapping_entry(mapping, index, NULL);
        /*
         * This gets called from truncate / punch_hole path. As such, the caller
         * must hold locks protecting against concurrent modifications of the
@@ -468,16 +489,46 @@ int dax_delete_mapping_entry(struct address_space *mapping, pgoff_t index)
         * caller has seen exceptional entry for this index, we better find it
         * at that index as well...
         */
-       if (WARN_ON_ONCE(!entry || !radix_tree_exceptional_entry(entry))) {
-               spin_unlock_irq(&mapping->tree_lock);
-               return 0;
-       }
-       radix_tree_delete(&mapping->page_tree, index);
+       WARN_ON_ONCE(!ret);
+       return ret;
+}
+
+/*
+ * Invalidate exceptional DAX entry if easily possible. This handles DAX
+ * entries for invalidate_inode_pages() so we evict the entry only if we can
+ * do so without blocking.
+ */
+int dax_invalidate_mapping_entry(struct address_space *mapping, pgoff_t index)
+{
+       int ret = 0;
+       void *entry, **slot;
+       struct radix_tree_root *page_tree = &mapping->page_tree;
+
+       spin_lock_irq(&mapping->tree_lock);
+       entry = __radix_tree_lookup(page_tree, index, NULL, &slot);
+       if (!entry || !radix_tree_exceptional_entry(entry) ||
+           slot_locked(mapping, slot))
+               goto out;
+       if (radix_tree_tag_get(page_tree, index, PAGECACHE_TAG_DIRTY) ||
+           radix_tree_tag_get(page_tree, index, PAGECACHE_TAG_TOWRITE))
+               goto out;
+       radix_tree_delete(page_tree, index);
        mapping->nrexceptional--;
+       ret = 1;
+out:
        spin_unlock_irq(&mapping->tree_lock);
-       dax_wake_mapping_entry_waiter(mapping, index, entry, true);
+       if (ret)
+               dax_wake_mapping_entry_waiter(mapping, index, entry, true);
+       return ret;
+}
 
-       return 1;
+/*
+ * Invalidate exceptional DAX entry if it is clean.
+ */
+int dax_invalidate_mapping_entry_sync(struct address_space *mapping,
+                                     pgoff_t index)
+{
+       return __dax_invalidate_mapping_entry(mapping, index, false);
 }
 
 /*
@@ -488,15 +539,16 @@ int dax_delete_mapping_entry(struct address_space *mapping, pgoff_t index)
  * otherwise it will simply fall out of the page cache under memory
  * pressure without ever having been dirtied.
  */
-static int dax_load_hole(struct address_space *mapping, void *entry,
+static int dax_load_hole(struct address_space *mapping, void **entry,
                         struct vm_fault *vmf)
 {
        struct page *page;
+       int ret;
 
        /* Hole page already exists? Return it...  */
-       if (!radix_tree_exceptional_entry(entry)) {
-               vmf->page = entry;
-               return VM_FAULT_LOCKED;
+       if (!radix_tree_exceptional_entry(*entry)) {
+               page = *entry;
+               goto out;
        }
 
        /* This will replace locked radix tree entry with a hole page */
@@ -504,8 +556,17 @@ static int dax_load_hole(struct address_space *mapping, void *entry,
                                   vmf->gfp_mask | __GFP_ZERO);
        if (!page)
                return VM_FAULT_OOM;
+ out:
        vmf->page = page;
-       return VM_FAULT_LOCKED;
+       ret = finish_fault(vmf);
+       vmf->page = NULL;
+       *entry = page;
+       if (!ret) {
+               /* Grab reference for PTE that is now referencing the page */
+               get_page(page);
+               return VM_FAULT_NOPAGE;
+       }
+       return ret;
 }
 
 static int copy_user_dax(struct block_device *bdev, sector_t sector, size_t size,
@@ -934,6 +995,17 @@ dax_iomap_actor(struct inode *inode, loff_t pos, loff_t length, void *data,
        if (WARN_ON_ONCE(iomap->type != IOMAP_MAPPED))
                return -EIO;
 
+       /*
+        * Write can allocate block for an area which has a hole page mapped
+        * into page tables. We have to tear down these mappings so that data
+        * written by write(2) is visible in mmap.
+        */
+       if ((iomap->flags & IOMAP_F_NEW) && inode->i_mapping->nrpages) {
+               invalidate_inode_pages2_range(inode->i_mapping,
+                                             pos >> PAGE_SHIFT,
+                                             (end - 1) >> PAGE_SHIFT);
+       }
+
        while (pos < end) {
                unsigned offset = pos & (PAGE_SIZE - 1);
                struct blk_dax_ctl dax = { 0 };
@@ -992,23 +1064,6 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
        if (iov_iter_rw(iter) == WRITE)
                flags |= IOMAP_WRITE;
 
-       /*
-        * Yes, even DAX files can have page cache attached to them:  A zeroed
-        * page is inserted into the pagecache when we have to serve a write
-        * fault on a hole.  It should never be dirtied and can simply be
-        * dropped from the pagecache once we get real data for the page.
-        *
-        * XXX: This is racy against mmap, and there's nothing we can do about
-        * it. We'll eventually need to shift this down even further so that
-        * we can check if we allocated blocks over a hole first.
-        */
-       if (mapping->nrpages) {
-               ret = invalidate_inode_pages2_range(mapping,
-                               pos >> PAGE_SHIFT,
-                               (pos + iov_iter_count(iter) - 1) >> PAGE_SHIFT);
-               WARN_ON_ONCE(ret);
-       }
-
        while (iov_iter_count(iter)) {
                ret = iomap_apply(inode, pos, iov_iter_count(iter), flags, ops,
                                iter, dax_iomap_actor);
@@ -1023,6 +1078,15 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
 }
 EXPORT_SYMBOL_GPL(dax_iomap_rw);
 
+static int dax_fault_return(int error)
+{
+       if (error == 0)
+               return VM_FAULT_NOPAGE;
+       if (error == -ENOMEM)
+               return VM_FAULT_OOM;
+       return VM_FAULT_SIGBUS;
+}
+
 /**
  * dax_iomap_fault - handle a page fault on a DAX file
  * @vma: The virtual memory area where the fault occurred
@@ -1055,12 +1119,6 @@ int dax_iomap_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
        if (pos >= i_size_read(inode))
                return VM_FAULT_SIGBUS;
 
-       entry = grab_mapping_entry(mapping, vmf->pgoff, 0);
-       if (IS_ERR(entry)) {
-               error = PTR_ERR(entry);
-               goto out;
-       }
-
        if ((vmf->flags & FAULT_FLAG_WRITE) && !vmf->cow_page)
                flags |= IOMAP_WRITE;
 
@@ -1071,9 +1129,15 @@ int dax_iomap_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
         */
        error = ops->iomap_begin(inode, pos, PAGE_SIZE, flags, &iomap);
        if (error)
-               goto unlock_entry;
+               return dax_fault_return(error);
        if (WARN_ON_ONCE(iomap.offset + iomap.length < pos + PAGE_SIZE)) {
-               error = -EIO;           /* fs corruption? */
+               vmf_ret = dax_fault_return(-EIO);       /* fs corruption? */
+               goto finish_iomap;
+       }
+
+       entry = grab_mapping_entry(mapping, vmf->pgoff, 0);
+       if (IS_ERR(entry)) {
+               vmf_ret = dax_fault_return(PTR_ERR(entry));
                goto finish_iomap;
        }
 
@@ -1096,13 +1160,13 @@ int dax_iomap_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
                }
 
                if (error)
-                       goto finish_iomap;
+                       goto error_unlock_entry;
 
                __SetPageUptodate(vmf->cow_page);
                vmf_ret = finish_fault(vmf);
                if (!vmf_ret)
                        vmf_ret = VM_FAULT_DONE_COW;
-               goto finish_iomap;
+               goto unlock_entry;
        }
 
        switch (iomap.type) {
@@ -1114,12 +1178,15 @@ int dax_iomap_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
                }
                error = dax_insert_mapping(mapping, iomap.bdev, sector,
                                PAGE_SIZE, &entry, vma, vmf);
+               /* -EBUSY is fine, somebody else faulted on the same PTE */
+               if (error == -EBUSY)
+                       error = 0;
                break;
        case IOMAP_UNWRITTEN:
        case IOMAP_HOLE:
                if (!(vmf->flags & FAULT_FLAG_WRITE)) {
-                       vmf_ret = dax_load_hole(mapping, entry, vmf);
-                       break;
+                       vmf_ret = dax_load_hole(mapping, &entry, vmf);
+                       goto unlock_entry;
                }
                /*FALLTHRU*/
        default:
@@ -1128,31 +1195,25 @@ int dax_iomap_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
                break;
        }
 
+ error_unlock_entry:
+       vmf_ret = dax_fault_return(error) | major;
+ unlock_entry:
+       put_locked_mapping_entry(mapping, vmf->pgoff, entry);
  finish_iomap:
        if (ops->iomap_end) {
-               if (error || (vmf_ret & VM_FAULT_ERROR)) {
-                       /* keep previous error */
-                       ops->iomap_end(inode, pos, PAGE_SIZE, 0, flags,
-                                       &iomap);
-               } else {
-                       error = ops->iomap_end(inode, pos, PAGE_SIZE,
-                                       PAGE_SIZE, flags, &iomap);
-               }
-       }
- unlock_entry:
-       if (vmf_ret != VM_FAULT_LOCKED || error)
-               put_locked_mapping_entry(mapping, vmf->pgoff, entry);
- out:
-       if (error == -ENOMEM)
-               return VM_FAULT_OOM | major;
-       /* -EBUSY is fine, somebody else faulted on the same PTE */
-       if (error < 0 && error != -EBUSY)
-               return VM_FAULT_SIGBUS | major;
-       if (vmf_ret) {
-               WARN_ON_ONCE(error); /* -EBUSY from ops->iomap_end? */
-               return vmf_ret;
+               int copied = PAGE_SIZE;
+
+               if (vmf_ret & VM_FAULT_ERROR)
+                       copied = 0;
+               /*
+                * The fault is done by now and there's no way back (other
+                * thread may be already happily using PTE we have installed).
+                * Just ignore error from ->iomap_end since we cannot do much
+                * with it.
+                */
+               ops->iomap_end(inode, pos, PAGE_SIZE, copied, flags, &iomap);
        }
-       return VM_FAULT_NOPAGE | major;
+       return vmf_ret;
 }
 EXPORT_SYMBOL_GPL(dax_iomap_fault);
 
@@ -1276,16 +1337,6 @@ int dax_iomap_pmd_fault(struct vm_area_struct *vma, unsigned long address,
        if ((pgoff | PG_PMD_COLOUR) > max_pgoff)
                goto fallback;
 
-       /*
-        * grab_mapping_entry() will make sure we get a 2M empty entry, a DAX
-        * PMD or a HZP entry.  If it can't (because a 4k page is already in
-        * the tree, for instance), it will return -EEXIST and we just fall
-        * back to 4k entries.
-        */
-       entry = grab_mapping_entry(mapping, pgoff, RADIX_DAX_PMD);
-       if (IS_ERR(entry))
-               goto fallback;
-
        /*
         * Note that we don't use iomap_apply here.  We aren't doing I/O, only
         * setting up a mapping, so really we're using iomap_begin() as a way
@@ -1294,10 +1345,21 @@ int dax_iomap_pmd_fault(struct vm_area_struct *vma, unsigned long address,
        pos = (loff_t)pgoff << PAGE_SHIFT;
        error = ops->iomap_begin(inode, pos, PMD_SIZE, iomap_flags, &iomap);
        if (error)
-               goto unlock_entry;
+               goto fallback;
+
        if (iomap.offset + iomap.length < pos + PMD_SIZE)
                goto finish_iomap;
 
+       /*
+        * grab_mapping_entry() will make sure we get a 2M empty entry, a DAX
+        * PMD or a HZP entry.  If it can't (because a 4k page is already in
+        * the tree, for instance), it will return -EEXIST and we just fall
+        * back to 4k entries.
+        */
+       entry = grab_mapping_entry(mapping, pgoff, RADIX_DAX_PMD);
+       if (IS_ERR(entry))
+               goto finish_iomap;
+
        vmf.pgoff = pgoff;
        vmf.flags = flags;
        vmf.gfp_mask = mapping_gfp_mask(mapping) | __GFP_IO;
@@ -1310,7 +1372,7 @@ int dax_iomap_pmd_fault(struct vm_area_struct *vma, unsigned long address,
        case IOMAP_UNWRITTEN:
        case IOMAP_HOLE:
                if (WARN_ON_ONCE(write))
-                       goto finish_iomap;
+                       goto unlock_entry;
                result = dax_pmd_load_hole(vma, pmd, &vmf, address, &iomap,
                                &entry);
                break;
@@ -1319,20 +1381,23 @@ int dax_iomap_pmd_fault(struct vm_area_struct *vma, unsigned long address,
                break;
        }
 
+ unlock_entry:
+       put_locked_mapping_entry(mapping, pgoff, entry);
  finish_iomap:
        if (ops->iomap_end) {
-               if (result == VM_FAULT_FALLBACK) {
-                       ops->iomap_end(inode, pos, PMD_SIZE, 0, iomap_flags,
-                                       &iomap);
-               } else {
-                       error = ops->iomap_end(inode, pos, PMD_SIZE, PMD_SIZE,
-                                       iomap_flags, &iomap);
-                       if (error)
-                               result = VM_FAULT_FALLBACK;
-               }
+               int copied = PMD_SIZE;
+
+               if (result == VM_FAULT_FALLBACK)
+                       copied = 0;
+               /*
+                * The fault is done by now and there's no way back (other
+                * thread may be already happily using PMD we have installed).
+                * Just ignore error from ->iomap_end since we cannot do much
+                * with it.
+                */
+               ops->iomap_end(inode, pos, PMD_SIZE, copied, iomap_flags,
+                               &iomap);
        }
- unlock_entry:
-       put_locked_mapping_entry(mapping, pgoff, entry);
  fallback:
        if (result == VM_FAULT_FALLBACK) {
                split_huge_pmd(vma, pmd, address);
index 0093ea2512a85809e16605088074a8335513e81c..f073bfca694b9982b8bc23e8f0e00be6bef075a7 100644 (file)
@@ -751,9 +751,8 @@ static int ext2_get_blocks(struct inode *inode,
                        mutex_unlock(&ei->truncate_mutex);
                        goto cleanup;
                }
-       } else {
-               *new = true;
        }
+       *new = true;
 
        ext2_splice_branch(inode, iblock, partial, indirect_blks, count);
        mutex_unlock(&ei->truncate_mutex);
index b5f184493c57b0fd91cfc5f6c0633577ce770884..d663d3d7c81cb7fdff0f33f1903e9ed4d1f77f9a 100644 (file)
@@ -258,7 +258,6 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 static int ext4_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
        int result;
-       handle_t *handle = NULL;
        struct inode *inode = file_inode(vma->vm_file);
        struct super_block *sb = inode->i_sb;
        bool write = vmf->flags & FAULT_FLAG_WRITE;
@@ -266,24 +265,12 @@ static int ext4_dax_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
        if (write) {
                sb_start_pagefault(sb);
                file_update_time(vma->vm_file);
-               down_read(&EXT4_I(inode)->i_mmap_sem);
-               handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE,
-                                               EXT4_DATA_TRANS_BLOCKS(sb));
-       } else
-               down_read(&EXT4_I(inode)->i_mmap_sem);
-
-       if (IS_ERR(handle))
-               result = VM_FAULT_SIGBUS;
-       else
-               result = dax_iomap_fault(vma, vmf, &ext4_iomap_ops);
-
-       if (write) {
-               if (!IS_ERR(handle))
-                       ext4_journal_stop(handle);
-               up_read(&EXT4_I(inode)->i_mmap_sem);
+       }
+       down_read(&EXT4_I(inode)->i_mmap_sem);
+       result = dax_iomap_fault(vma, vmf, &ext4_iomap_ops);
+       up_read(&EXT4_I(inode)->i_mmap_sem);
+       if (write)
                sb_end_pagefault(sb);
-       } else
-               up_read(&EXT4_I(inode)->i_mmap_sem);
 
        return result;
 }
@@ -292,7 +279,6 @@ static int ext4_dax_pmd_fault(struct vm_area_struct *vma, unsigned long addr,
                                                pmd_t *pmd, unsigned int flags)
 {
        int result;
-       handle_t *handle = NULL;
        struct inode *inode = file_inode(vma->vm_file);
        struct super_block *sb = inode->i_sb;
        bool write = flags & FAULT_FLAG_WRITE;
@@ -300,27 +286,13 @@ static int ext4_dax_pmd_fault(struct vm_area_struct *vma, unsigned long addr,
        if (write) {
                sb_start_pagefault(sb);
                file_update_time(vma->vm_file);
-               down_read(&EXT4_I(inode)->i_mmap_sem);
-               handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE,
-                               ext4_chunk_trans_blocks(inode,
-                                                       PMD_SIZE / PAGE_SIZE));
-       } else
-               down_read(&EXT4_I(inode)->i_mmap_sem);
-
-       if (IS_ERR(handle))
-               result = VM_FAULT_SIGBUS;
-       else {
-               result = dax_iomap_pmd_fault(vma, addr, pmd, flags,
-                                            &ext4_iomap_ops);
        }
-
-       if (write) {
-               if (!IS_ERR(handle))
-                       ext4_journal_stop(handle);
-               up_read(&EXT4_I(inode)->i_mmap_sem);
+       down_read(&EXT4_I(inode)->i_mmap_sem);
+       result = dax_iomap_pmd_fault(vma, addr, pmd, flags,
+                                    &ext4_iomap_ops);
+       up_read(&EXT4_I(inode)->i_mmap_sem);
+       if (write)
                sb_end_pagefault(sb);
-       } else
-               up_read(&EXT4_I(inode)->i_mmap_sem);
 
        return result;
 }
index d3fea0bd89e2cbedcea630ba3e966963720f725a..6043306e8e21518daeb945ebf2569d19fe9edbbf 100644 (file)
@@ -510,18 +510,6 @@ void fsnotify_detach_group_marks(struct fsnotify_group *group)
        }
 }
 
-void fsnotify_duplicate_mark(struct fsnotify_mark *new, struct fsnotify_mark *old)
-{
-       assert_spin_locked(&old->lock);
-       new->inode = old->inode;
-       new->mnt = old->mnt;
-       if (old->group)
-               fsnotify_get_group(old->group);
-       new->group = old->group;
-       new->mask = old->mask;
-       new->free_mark = old->free_mark;
-}
-
 /*
  * Nothing fancy, just initialize lists and locks and counters.
  */
index e5ebc37704608a336dd8690d55f06389cd0173bd..d346d42c54d1590250040f0b36c05367287e7bf5 100644 (file)
@@ -256,6 +256,9 @@ xfs_ag_resv_init(
                        goto out;
        }
 
+       ASSERT(xfs_perag_resv(pag, XFS_AG_RESV_METADATA)->ar_reserved +
+              xfs_perag_resv(pag, XFS_AG_RESV_AGFL)->ar_reserved <=
+              pag->pagf_freeblks + pag->pagf_flcount);
 out:
        return error;
 }
index 6fb2215f8ff77bf0342e5f61dd6d060987e13d77..50add5272807e95374c3043819205f68c5ec55fa 100644 (file)
@@ -409,13 +409,14 @@ xfs_refcountbt_calc_size(
  */
 xfs_extlen_t
 xfs_refcountbt_max_size(
-       struct xfs_mount        *mp)
+       struct xfs_mount        *mp,
+       xfs_agblock_t           agblocks)
 {
        /* Bail out if we're uninitialized, which can happen in mkfs. */
        if (mp->m_refc_mxr[0] == 0)
                return 0;
 
-       return xfs_refcountbt_calc_size(mp, mp->m_sb.sb_agblocks);
+       return xfs_refcountbt_calc_size(mp, agblocks);
 }
 
 /*
@@ -430,22 +431,24 @@ xfs_refcountbt_calc_reserves(
 {
        struct xfs_buf          *agbp;
        struct xfs_agf          *agf;
+       xfs_agblock_t           agblocks;
        xfs_extlen_t            tree_len;
        int                     error;
 
        if (!xfs_sb_version_hasreflink(&mp->m_sb))
                return 0;
 
-       *ask += xfs_refcountbt_max_size(mp);
 
        error = xfs_alloc_read_agf(mp, NULL, agno, 0, &agbp);
        if (error)
                return error;
 
        agf = XFS_BUF_TO_AGF(agbp);
+       agblocks = be32_to_cpu(agf->agf_length);
        tree_len = be32_to_cpu(agf->agf_refcount_blocks);
        xfs_buf_relse(agbp);
 
+       *ask += xfs_refcountbt_max_size(mp, agblocks);
        *used += tree_len;
 
        return error;
index 3be7768bd51a1c0ebd8c2ccc6e930a730bd39b54..9db008b955b7ed68bb62d8654073da0302668171 100644 (file)
@@ -66,7 +66,8 @@ extern void xfs_refcountbt_compute_maxlevels(struct xfs_mount *mp);
 
 extern xfs_extlen_t xfs_refcountbt_calc_size(struct xfs_mount *mp,
                unsigned long long len);
-extern xfs_extlen_t xfs_refcountbt_max_size(struct xfs_mount *mp);
+extern xfs_extlen_t xfs_refcountbt_max_size(struct xfs_mount *mp,
+               xfs_agblock_t agblocks);
 
 extern int xfs_refcountbt_calc_reserves(struct xfs_mount *mp,
                xfs_agnumber_t agno, xfs_extlen_t *ask, xfs_extlen_t *used);
index de25771764bac313ec514a882d6069de1063e5cc..74e5a54bc428fa27d485d88e871fdd77f8494252 100644 (file)
@@ -550,13 +550,14 @@ xfs_rmapbt_calc_size(
  */
 xfs_extlen_t
 xfs_rmapbt_max_size(
-       struct xfs_mount        *mp)
+       struct xfs_mount        *mp,
+       xfs_agblock_t           agblocks)
 {
        /* Bail out if we're uninitialized, which can happen in mkfs. */
        if (mp->m_rmap_mxr[0] == 0)
                return 0;
 
-       return xfs_rmapbt_calc_size(mp, mp->m_sb.sb_agblocks);
+       return xfs_rmapbt_calc_size(mp, agblocks);
 }
 
 /*
@@ -571,25 +572,24 @@ xfs_rmapbt_calc_reserves(
 {
        struct xfs_buf          *agbp;
        struct xfs_agf          *agf;
-       xfs_extlen_t            pool_len;
+       xfs_agblock_t           agblocks;
        xfs_extlen_t            tree_len;
        int                     error;
 
        if (!xfs_sb_version_hasrmapbt(&mp->m_sb))
                return 0;
 
-       /* Reserve 1% of the AG or enough for 1 block per record. */
-       pool_len = max(mp->m_sb.sb_agblocks / 100, xfs_rmapbt_max_size(mp));
-       *ask += pool_len;
-
        error = xfs_alloc_read_agf(mp, NULL, agno, 0, &agbp);
        if (error)
                return error;
 
        agf = XFS_BUF_TO_AGF(agbp);
+       agblocks = be32_to_cpu(agf->agf_length);
        tree_len = be32_to_cpu(agf->agf_rmap_blocks);
        xfs_buf_relse(agbp);
 
+       /* Reserve 1% of the AG or enough for 1 block per record. */
+       *ask += max(agblocks / 100, xfs_rmapbt_max_size(mp, agblocks));
        *used += tree_len;
 
        return error;
index 2a9ac472fb15a2408ca6d58addc6a5d439b61fe9..19c08e93304954d62c1c1dcdf35a36a49f38ee71 100644 (file)
@@ -60,7 +60,8 @@ extern void xfs_rmapbt_compute_maxlevels(struct xfs_mount *mp);
 
 extern xfs_extlen_t xfs_rmapbt_calc_size(struct xfs_mount *mp,
                unsigned long long len);
-extern xfs_extlen_t xfs_rmapbt_max_size(struct xfs_mount *mp);
+extern xfs_extlen_t xfs_rmapbt_max_size(struct xfs_mount *mp,
+               xfs_agblock_t agblocks);
 
 extern int xfs_rmapbt_calc_reserves(struct xfs_mount *mp,
                xfs_agnumber_t agno, xfs_extlen_t *ask, xfs_extlen_t *used);
index 93d12fa2670d53bf8b6bf23c51325d48467b8ab2..242e8091296daff7a029b4233d53db8241ecbcd7 100644 (file)
@@ -631,6 +631,20 @@ xfs_growfs_data_private(
        xfs_set_low_space_thresholds(mp);
        mp->m_alloc_set_aside = xfs_alloc_set_aside(mp);
 
+       /*
+        * If we expanded the last AG, free the per-AG reservation
+        * so we can reinitialize it with the new size.
+        */
+       if (new) {
+               struct xfs_perag        *pag;
+
+               pag = xfs_perag_get(mp, agno);
+               error = xfs_ag_resv_free(pag);
+               xfs_perag_put(pag);
+               if (error)
+                       goto out;
+       }
+
        /* Reserve AG metadata blocks. */
        error = xfs_fs_reserve_ag_blocks(mp);
        if (error && error != -ENOSPC)
index ff4d6311c7f4b4912e5bc1c6bdcead81ab855d81..70ca4f608321b9ac9d8123bc2ddc5f216929211c 100644 (file)
@@ -1597,7 +1597,8 @@ xfs_inode_free_cowblocks(
         * If the mapping is dirty or under writeback we cannot touch the
         * CoW fork.  Leave it alone if we're in the midst of a directio.
         */
-       if (mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY) ||
+       if ((VFS_I(ip)->i_state & I_DIRTY_PAGES) ||
+           mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY) ||
            mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_WRITEBACK) ||
            atomic_read(&VFS_I(ip)->i_dio_count))
                return 0;
index fe86a668a57e70419e7fc6e5f126c0aa97cecb96..6e4c7446c3d4561f85d86686d5b4a40bc4cd0ce6 100644 (file)
@@ -526,13 +526,14 @@ xfs_cui_recover(
        xfs_refcount_finish_one_cleanup(tp, rcur, error);
        error = xfs_defer_finish(&tp, &dfops, NULL);
        if (error)
-               goto abort_error;
+               goto abort_defer;
        set_bit(XFS_CUI_RECOVERED, &cuip->cui_flags);
        error = xfs_trans_commit(tp);
        return error;
 
 abort_error:
        xfs_refcount_finish_one_cleanup(tp, rcur, error);
+abort_defer:
        xfs_defer_cancel(&dfops);
        xfs_trans_cancel(tp);
        return error;
index 276d3023d60f8201b635ae1f0c2ccbf26aac74fd..de6195e3891096316e51fd4efcd49ff091024a4a 100644 (file)
@@ -396,7 +396,7 @@ max_retries_show(
        int             retries;
        struct xfs_error_cfg *cfg = to_error_cfg(kobject);
 
-       if (cfg->retry_timeout == XFS_ERR_RETRY_FOREVER)
+       if (cfg->max_retries == XFS_ERR_RETRY_FOREVER)
                retries = -1;
        else
                retries = cfg->max_retries;
@@ -422,7 +422,7 @@ max_retries_store(
                return -EINVAL;
 
        if (val == -1)
-               cfg->retry_timeout = XFS_ERR_RETRY_FOREVER;
+               cfg->max_retries = XFS_ERR_RETRY_FOREVER;
        else
                cfg->max_retries = val;
        return count;
index df13637e4017342ac427894ec5c342123b77339e..939869c772b17a07a9776e323e1a253dba1f92d2 100644 (file)
@@ -1,7 +1,13 @@
 #include <linux/bitops.h>
+#undef __memset
 extern void *__memset(void *, int, __kernel_size_t);
+#undef __memcpy
 extern void *__memcpy(void *, const void *, __kernel_size_t);
+#undef __memmove
 extern void *__memmove(void *, const void *, __kernel_size_t);
+#undef memset
 extern void *memset(void *, int, __kernel_size_t);
+#undef memcpy
 extern void *memcpy(void *, const void *, __kernel_size_t);
+#undef memmove
 extern void *memmove(void *, const void *, __kernel_size_t);
index 29e01ed10e74dc47de5298fafc89d8f0c3fb0676..ce09915c298fd8179a3289ebac8b2fe101015649 100644 (file)
 #define R7S72100_CLK_SCIF6     1
 #define R7S72100_CLK_SCIF7     0
 
+/* MSTP5 */
+#define R7S72100_CLK_OSTM0     1
+#define R7S72100_CLK_OSTM1     0
+
 /* MSTP7 */
 #define R7S72100_CLK_ETHER     4
 
diff --git a/include/dt-bindings/clock/stm32fx-clock.h b/include/dt-bindings/clock/stm32fx-clock.h
new file mode 100644 (file)
index 0000000..08bcab6
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * stm32fx-clock.h
+ *
+ * Copyright (C) 2016 STMicroelectronics
+ * Author: Gabriel Fernandez for STMicroelectronics.
+ * License terms:  GNU General Public License (GPL), version 2
+ */
+
+/*
+ * List of clocks wich are not derived from system clock (SYSCLOCK)
+ *
+ * The index of these clocks is the secondary index of DT bindings
+ * (see Documentatoin/devicetree/bindings/clock/st,stm32-rcc.txt)
+ *
+ * e.g:
+       <assigned-clocks = <&rcc 1 CLK_LSE>;
+*/
+
+#ifndef _DT_BINDINGS_CLK_STMFX_H
+#define _DT_BINDINGS_CLK_STMFX_H
+
+#define SYSTICK                        0
+#define FCLK                   1
+#define CLK_LSI                        2
+#define CLK_LSE                        3
+#define CLK_HSE_RTC            4
+#define CLK_RTC                        5
+#define PLL_VCO_I2S            6
+#define PLL_VCO_SAI            7
+#define CLK_LCD                        8
+#define CLK_I2S                        9
+#define CLK_SAI1               10
+#define CLK_SAI2               11
+#define CLK_I2SQ_PDIV          12
+#define CLK_SAIQ_PDIV          13
+
+#define END_PRIMARY_CLK                14
+
+#endif
index e98942dc0d44e22aa30c68b0001c14e727b688f4..082a81c9429883815effc721caaf3180d97b27ca 100644 (file)
 #define STM32F4_RCC_AHB1_GPIOJ 9
 #define STM32F4_RCC_AHB1_GPIOK 10
 #define STM32F4_RCC_AHB1_CRC   12
+#define STM32F4_RCC_AHB1_BKPSRAM       18
+#define STM32F4_RCC_AHB1_CCMDATARAM    20
 #define STM32F4_RCC_AHB1_DMA1  21
 #define STM32F4_RCC_AHB1_DMA2  22
 #define STM32F4_RCC_AHB1_DMA2D 23
 #define STM32F4_RCC_AHB1_ETHMAC        25
-#define STM32F4_RCC_AHB1_OTGHS 29
+#define STM32F4_RCC_AHB1_ETHMACTX      26
+#define STM32F4_RCC_AHB1_ETHMACRX      27
+#define STM32F4_RCC_AHB1_ETHMACPTP     28
+#define STM32F4_RCC_AHB1_OTGHS         29
+#define STM32F4_RCC_AHB1_OTGHSULPI     30
 
 #define STM32F4_AHB1_RESET(bit) (STM32F4_RCC_AHB1_##bit + (0x10 * 8))
-#define STM32F4_AHB1_CLOCK(bit) (STM32F4_RCC_AHB1_##bit + (0x30 * 8))
+#define STM32F4_AHB1_CLOCK(bit) (STM32F4_RCC_AHB1_##bit)
 
 
 /* AHB2 */
 #define STM32F4_RCC_AHB2_OTGFS 7
 
 #define STM32F4_AHB2_RESET(bit)        (STM32F4_RCC_AHB2_##bit + (0x14 * 8))
-#define STM32F4_AHB2_CLOCK(bit)        (STM32F4_RCC_AHB2_##bit + (0x34 * 8))
+#define STM32F4_AHB2_CLOCK(bit)        (STM32F4_RCC_AHB2_##bit + 0x20)
 
 /* AHB3 */
 #define STM32F4_RCC_AHB3_FMC   0
+#define STM32F4_RCC_AHB3_QSPI  1
 
 #define STM32F4_AHB3_RESET(bit)        (STM32F4_RCC_AHB3_##bit + (0x18 * 8))
-#define STM32F4_AHB3_CLOCK(bit)        (STM32F4_RCC_AHB3_##bit + (0x38 * 8))
+#define STM32F4_AHB3_CLOCK(bit)        (STM32F4_RCC_AHB3_##bit + 0x40)
 
 /* APB1 */
 #define STM32F4_RCC_APB1_TIM2  0
 #define STM32F4_RCC_APB1_UART8 31
 
 #define STM32F4_APB1_RESET(bit)        (STM32F4_RCC_APB1_##bit + (0x20 * 8))
-#define STM32F4_APB1_CLOCK(bit)        (STM32F4_RCC_APB1_##bit + (0x40 * 8))
+#define STM32F4_APB1_CLOCK(bit)        (STM32F4_RCC_APB1_##bit + 0x80)
 
 /* APB2 */
 #define STM32F4_RCC_APB2_TIM1  0
 #define STM32F4_RCC_APB2_TIM8  1
 #define STM32F4_RCC_APB2_USART1        4
 #define STM32F4_RCC_APB2_USART6        5
-#define STM32F4_RCC_APB2_ADC   8
+#define STM32F4_RCC_APB2_ADC1  8
+#define STM32F4_RCC_APB2_ADC2  9
+#define STM32F4_RCC_APB2_ADC3  10
 #define STM32F4_RCC_APB2_SDIO  11
 #define STM32F4_RCC_APB2_SPI1  12
 #define STM32F4_RCC_APB2_SPI4  13
 #define STM32F4_RCC_APB2_SPI6  21
 #define STM32F4_RCC_APB2_SAI1  22
 #define STM32F4_RCC_APB2_LTDC  26
+#define STM32F4_RCC_APB2_DSI   27
 
 #define STM32F4_APB2_RESET(bit)        (STM32F4_RCC_APB2_##bit + (0x24 * 8))
-#define STM32F4_APB2_CLOCK(bit)        (STM32F4_RCC_APB2_##bit + (0x44 * 8))
+#define STM32F4_APB2_CLOCK(bit)        (STM32F4_RCC_APB2_##bit + 0xA0)
 
 #endif /* _DT_BINDINGS_MFD_STM32F4_RCC_H */
diff --git a/include/dt-bindings/mfd/tps65217.h b/include/dt-bindings/mfd/tps65217.h
deleted file mode 100644 (file)
index cafb9e6..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * This header provides macros for TI TPS65217 DT bindings.
- *
- * Copyright (C) 2016 Texas Instruments
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * 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/>.
- */
-
-#ifndef __DT_BINDINGS_TPS65217_H__
-#define __DT_BINDINGS_TPS65217_H__
-
-#define TPS65217_IRQ_USB       0
-#define TPS65217_IRQ_AC                1
-#define TPS65217_IRQ_PB                2
-
-#endif
index f97bcfe794724d4fb757297851fe218268d0c86b..24ad711739955e573aefea713852b2f49a8fed85 100644 (file)
@@ -41,6 +41,9 @@ ssize_t dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
 int dax_iomap_fault(struct vm_area_struct *vma, struct vm_fault *vmf,
                        struct iomap_ops *ops);
 int dax_delete_mapping_entry(struct address_space *mapping, pgoff_t index);
+int dax_invalidate_mapping_entry(struct address_space *mapping, pgoff_t index);
+int dax_invalidate_mapping_entry_sync(struct address_space *mapping,
+                                     pgoff_t index);
 void dax_wake_mapping_entry_waiter(struct address_space *mapping,
                pgoff_t index, void *entry, bool wake_all);
 
index 70231425379751021b57326eec85e70d881d3f42..a0934e6c9babf8436a18b28f4dea285894e5dca5 100644 (file)
@@ -610,7 +610,6 @@ bool bpf_helper_changes_pkt_data(void *func);
 struct bpf_prog *bpf_patch_insn_single(struct bpf_prog *prog, u32 off,
                                       const struct bpf_insn *patch, u32 len);
 void bpf_warn_invalid_xdp_action(u32 act);
-void bpf_warn_invalid_xdp_buffer(void);
 
 #ifdef CONFIG_BPF_JIT
 extern int bpf_jit_enable;
index 0cf34d6cc253853c459e60908aa06128b4a8cf45..487246546ebebb63da20fde2eb12bd9a2914040c 100644 (file)
@@ -323,8 +323,6 @@ extern void fsnotify_init_mark(struct fsnotify_mark *mark, void (*free_mark)(str
 extern struct fsnotify_mark *fsnotify_find_inode_mark(struct fsnotify_group *group, struct inode *inode);
 /* find (and take a reference) to a mark associated with group and vfsmount */
 extern struct fsnotify_mark *fsnotify_find_vfsmount_mark(struct fsnotify_group *group, struct vfsmount *mnt);
-/* copy the values from old into new */
-extern void fsnotify_duplicate_mark(struct fsnotify_mark *new, struct fsnotify_mark *old);
 /* set the ignored_mask of a mark */
 extern void fsnotify_set_mark_ignored_mask_locked(struct fsnotify_mark *mark, __u32 mask);
 /* set the mask of a mark (might pin the object into memory */
index e0341af6950e2116a43b3b0281f57fea8099c06f..76f39754e7b0299df616bc3cb909f9a35fce9ea1 100644 (file)
@@ -146,15 +146,6 @@ enum {
        DISK_EVENT_EJECT_REQUEST                = 1 << 1, /* eject requested */
 };
 
-#define BLK_SCSI_MAX_CMDS      (256)
-#define BLK_SCSI_CMD_PER_LONG  (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8))
-
-struct blk_scsi_cmd_filter {
-       unsigned long read_ok[BLK_SCSI_CMD_PER_LONG];
-       unsigned long write_ok[BLK_SCSI_CMD_PER_LONG];
-       struct kobject kobj;
-};
-
 struct disk_part_tbl {
        struct rcu_head rcu_head;
        int len;
index 228bd44efa4c6efecd3af2e3ec16be8bd02d3d1b..497f2b3a5a62c8da6f87107de16519b176cc9f1f 100644 (file)
@@ -115,6 +115,16 @@ struct st_sensor_bdu {
        u8 mask;
 };
 
+/**
+ * struct st_sensor_das - ST sensor device data alignment selection
+ * @addr: address of the register.
+ * @mask: mask to write the das flag for left alignment.
+ */
+struct st_sensor_das {
+       u8 addr;
+       u8 mask;
+};
+
 /**
  * struct st_sensor_data_ready_irq - ST sensor device data-ready interrupt
  * @addr: address of the register.
@@ -185,6 +195,7 @@ struct st_sensor_transfer_function {
  * @enable_axis: Enable one or more axis of the sensor.
  * @fs: Full scale register and full scale list available.
  * @bdu: Block data update register.
+ * @das: Data Alignment Selection register.
  * @drdy_irq: Data ready register of the sensor.
  * @multi_read_bit: Use or not particular bit for [I2C/SPI] multi-read.
  * @bootime: samples to discard when sensor passing from power-down to power-up.
@@ -200,6 +211,7 @@ struct st_sensor_settings {
        struct st_sensor_axis enable_axis;
        struct st_sensor_fullscale fs;
        struct st_sensor_bdu bdu;
+       struct st_sensor_das das;
        struct st_sensor_data_ready_irq drdy_irq;
        bool multi_read_bit;
        unsigned int bootime;
index ec819e9a115af492a8e57d2fe67384accb925436..b6e048e1045f99868642b920a005d2382e6dc316 100644 (file)
 #ifndef MDEV_H
 #define MDEV_H
 
-/* Parent device */
-struct parent_device {
-       struct device           *dev;
-       const struct parent_ops *ops;
-
-       /* internal */
-       struct kref             ref;
-       struct mutex            lock;
-       struct list_head        next;
-       struct kset             *mdev_types_kset;
-       struct list_head        type_list;
-};
-
-/* Mediated device */
-struct mdev_device {
-       struct device           dev;
-       struct parent_device    *parent;
-       uuid_le                 uuid;
-       void                    *driver_data;
-
-       /* internal */
-       struct kref             ref;
-       struct list_head        next;
-       struct kobject          *type_kobj;
-};
+struct mdev_device;
 
 /**
- * struct parent_ops - Structure to be registered for each parent device to
+ * struct mdev_parent_ops - Structure to be registered for each parent device to
  * register the device to mdev module.
  *
  * @owner:             The module owner.
@@ -86,10 +62,9 @@ struct mdev_device {
  *                     @mdev: mediated device structure
  *                     @vma: vma structure
  * Parent device that support mediated device should be registered with mdev
- * module with parent_ops structure.
+ * module with mdev_parent_ops structure.
  **/
-
-struct parent_ops {
+struct mdev_parent_ops {
        struct module   *owner;
        const struct attribute_group **dev_attr_groups;
        const struct attribute_group **mdev_attr_groups;
@@ -103,7 +78,7 @@ struct parent_ops {
                        size_t count, loff_t *ppos);
        ssize_t (*write)(struct mdev_device *mdev, const char __user *buf,
                         size_t count, loff_t *ppos);
-       ssize_t (*ioctl)(struct mdev_device *mdev, unsigned int cmd,
+       long    (*ioctl)(struct mdev_device *mdev, unsigned int cmd,
                         unsigned long arg);
        int     (*mmap)(struct mdev_device *mdev, struct vm_area_struct *vma);
 };
@@ -142,27 +117,22 @@ struct mdev_driver {
 };
 
 #define to_mdev_driver(drv)    container_of(drv, struct mdev_driver, driver)
-#define to_mdev_device(dev)    container_of(dev, struct mdev_device, dev)
-
-static inline void *mdev_get_drvdata(struct mdev_device *mdev)
-{
-       return mdev->driver_data;
-}
 
-static inline void mdev_set_drvdata(struct mdev_device *mdev, void *data)
-{
-       mdev->driver_data = data;
-}
+extern void *mdev_get_drvdata(struct mdev_device *mdev);
+extern void mdev_set_drvdata(struct mdev_device *mdev, void *data);
+extern uuid_le mdev_uuid(struct mdev_device *mdev);
 
 extern struct bus_type mdev_bus_type;
 
-#define dev_is_mdev(d) ((d)->bus == &mdev_bus_type)
-
 extern int  mdev_register_device(struct device *dev,
-                                const struct parent_ops *ops);
+                                const struct mdev_parent_ops *ops);
 extern void mdev_unregister_device(struct device *dev);
 
 extern int  mdev_register_driver(struct mdev_driver *drv, struct module *owner);
 extern void mdev_unregister_driver(struct mdev_driver *drv);
 
+extern struct device *mdev_parent_dev(struct mdev_device *mdev);
+extern struct device *mdev_dev(struct mdev_device *mdev);
+extern struct mdev_device *mdev_from_dev(struct device *dev);
+
 #endif /* MDEV_H */
index 93bdb3485192ff7f4094a649f6f98f4cdad02f51..6533c16e27ad7fb03926286ec94055d26b26f615 100644 (file)
@@ -1384,6 +1384,8 @@ int set_phv_bit(struct mlx4_dev *dev, u8 port, int new_val);
 int get_phv_bit(struct mlx4_dev *dev, u8 port, int *phv);
 int mlx4_get_is_vlan_offload_disabled(struct mlx4_dev *dev, u8 port,
                                      bool *vlan_offload_disabled);
+void mlx4_handle_eth_header_mcast_prio(struct mlx4_net_trans_rule_hw_ctrl *ctrl,
+                                      struct _rule_hw *eth_header);
 int mlx4_find_cached_mac(struct mlx4_dev *dev, u8 port, u64 mac, int *idx);
 int mlx4_find_cached_vlan(struct mlx4_dev *dev, u8 port, u16 vid, int *idx);
 int mlx4_register_vlan(struct mlx4_dev *dev, u8 port, u16 vlan, int *index);
index 9f489365b3d39c2400fd2fd19099ca98803396d7..52b437431c6a642b04d33da532cfcd722c69fa0f 100644 (file)
@@ -1071,11 +1071,6 @@ enum {
        MLX5_INFINIBAND_PORT_COUNTERS_GROUP   = 0x20,
 };
 
-enum {
-       MLX5_PCIE_PERFORMANCE_COUNTERS_GROUP       = 0x0,
-       MLX5_PCIE_TIMERS_AND_STATES_COUNTERS_GROUP = 0x2,
-};
-
 static inline u16 mlx5_to_sw_pkey_sz(int pkey_sz)
 {
        if (pkey_sz > MLX5_MAX_LOG_PKEY_TABLE)
index 0ae55361e674be4c08ffa33c3c69573eee7bf99b..735b36335f297e8babe3f1d2089acd11a735bc43 100644 (file)
@@ -123,7 +123,6 @@ enum {
        MLX5_REG_HOST_ENDIANNESS = 0x7004,
        MLX5_REG_MCIA            = 0x9014,
        MLX5_REG_MLCR            = 0x902b,
-       MLX5_REG_MPCNT           = 0x9051,
 };
 
 enum mlx5_dcbx_oper_mode {
index 57bec544e20a81070d999fc59253d0774a4c6c3b..a852e9db6f0d5ec809cfc0e5245d1ee3fff7c36b 100644 (file)
@@ -1757,80 +1757,6 @@ struct mlx5_ifc_eth_802_3_cntrs_grp_data_layout_bits {
        u8         reserved_at_4c0[0x300];
 };
 
-struct mlx5_ifc_pcie_perf_cntrs_grp_data_layout_bits {
-       u8         life_time_counter_high[0x20];
-
-       u8         life_time_counter_low[0x20];
-
-       u8         rx_errors[0x20];
-
-       u8         tx_errors[0x20];
-
-       u8         l0_to_recovery_eieos[0x20];
-
-       u8         l0_to_recovery_ts[0x20];
-
-       u8         l0_to_recovery_framing[0x20];
-
-       u8         l0_to_recovery_retrain[0x20];
-
-       u8         crc_error_dllp[0x20];
-
-       u8         crc_error_tlp[0x20];
-
-       u8         reserved_at_140[0x680];
-};
-
-struct mlx5_ifc_pcie_tas_cntrs_grp_data_layout_bits {
-       u8         life_time_counter_high[0x20];
-
-       u8         life_time_counter_low[0x20];
-
-       u8         time_to_boot_image_start[0x20];
-
-       u8         time_to_link_image[0x20];
-
-       u8         calibration_time[0x20];
-
-       u8         time_to_first_perst[0x20];
-
-       u8         time_to_detect_state[0x20];
-
-       u8         time_to_l0[0x20];
-
-       u8         time_to_crs_en[0x20];
-
-       u8         time_to_plastic_image_start[0x20];
-
-       u8         time_to_iron_image_start[0x20];
-
-       u8         perst_handler[0x20];
-
-       u8         times_in_l1[0x20];
-
-       u8         times_in_l23[0x20];
-
-       u8         dl_down[0x20];
-
-       u8         config_cycle1usec[0x20];
-
-       u8         config_cycle2to7usec[0x20];
-
-       u8         config_cycle_8to15usec[0x20];
-
-       u8         config_cycle_16_to_63usec[0x20];
-
-       u8         config_cycle_64usec[0x20];
-
-       u8         correctable_err_msg_sent[0x20];
-
-       u8         non_fatal_err_msg_sent[0x20];
-
-       u8         fatal_err_msg_sent[0x20];
-
-       u8         reserved_at_2e0[0x4e0];
-};
-
 struct mlx5_ifc_cmd_inter_comp_event_bits {
        u8         command_completion_vector[0x20];
 
@@ -2995,12 +2921,6 @@ union mlx5_ifc_eth_cntrs_grp_data_layout_auto_bits {
        u8         reserved_at_0[0x7c0];
 };
 
-union mlx5_ifc_pcie_cntrs_grp_data_layout_auto_bits {
-       struct mlx5_ifc_pcie_perf_cntrs_grp_data_layout_bits pcie_perf_cntrs_grp_data_layout;
-       struct mlx5_ifc_pcie_tas_cntrs_grp_data_layout_bits pcie_tas_cntrs_grp_data_layout;
-       u8         reserved_at_0[0x7c0];
-};
-
 union mlx5_ifc_event_auto_bits {
        struct mlx5_ifc_comp_event_bits comp_event;
        struct mlx5_ifc_dct_events_bits dct_events;
@@ -7320,18 +7240,6 @@ struct mlx5_ifc_ppcnt_reg_bits {
        union mlx5_ifc_eth_cntrs_grp_data_layout_auto_bits counter_set;
 };
 
-struct mlx5_ifc_mpcnt_reg_bits {
-       u8         reserved_at_0[0x8];
-       u8         pcie_index[0x8];
-       u8         reserved_at_10[0xa];
-       u8         grp[0x6];
-
-       u8         clr[0x1];
-       u8         reserved_at_21[0x1f];
-
-       union mlx5_ifc_pcie_cntrs_grp_data_layout_auto_bits counter_set;
-};
-
 struct mlx5_ifc_ppad_reg_bits {
        u8         reserved_at_0[0x3];
        u8         single_mac[0x1];
@@ -7937,7 +7845,6 @@ union mlx5_ifc_ports_control_registers_document_bits {
        struct mlx5_ifc_pmtu_reg_bits pmtu_reg;
        struct mlx5_ifc_ppad_reg_bits ppad_reg;
        struct mlx5_ifc_ppcnt_reg_bits ppcnt_reg;
-       struct mlx5_ifc_mpcnt_reg_bits mpcnt_reg;
        struct mlx5_ifc_pplm_reg_bits pplm_reg;
        struct mlx5_ifc_pplr_reg_bits pplr_reg;
        struct mlx5_ifc_ppsc_reg_bits ppsc_reg;
index c56b39890a412abfec4acc31e404781215ae3ff6..6b5818d6de322f8b5898e082ab4b3936042beb5a 100644 (file)
  */
 enum pageflags {
        PG_locked,              /* Page is locked. Don't touch. */
-       PG_waiters,             /* Page has waiters, check its waitqueue */
        PG_error,
        PG_referenced,
        PG_uptodate,
        PG_dirty,
        PG_lru,
        PG_active,
+       PG_waiters,             /* Page has waiters, check its waitqueue. Must be bit #7 and in the same byte as "PG_locked" */
        PG_slab,
        PG_owner_priv_1,        /* Owner use. If pagecache, fs may use*/
        PG_arch_1,
index 5dea8f6440e44f8d7345289847deaa9e9434e136..52bda854593b4a9eae9bad2d9990f9dd166ed609 100644 (file)
@@ -306,7 +306,9 @@ void radix_tree_iter_replace(struct radix_tree_root *,
 void radix_tree_replace_slot(struct radix_tree_root *root,
                             void **slot, void *item);
 void __radix_tree_delete_node(struct radix_tree_root *root,
-                             struct radix_tree_node *node);
+                             struct radix_tree_node *node,
+                             radix_tree_update_node_t update_node,
+                             void *private);
 void *radix_tree_delete_item(struct radix_tree_root *, unsigned long, void *);
 void *radix_tree_delete(struct radix_tree_root *, unsigned long);
 void radix_tree_clear_tags(struct radix_tree_root *root,
index 183f37c8a5e164ad5864ac433dd69093bac5bad7..4ee479f2f355b1fa2658b1c2aabbdfc376125651 100644 (file)
@@ -9,7 +9,13 @@ struct device;
 struct page;
 struct scatterlist;
 
-extern int swiotlb_force;
+enum swiotlb_force {
+       SWIOTLB_NORMAL,         /* Default - depending on HW DMA mask etc. */
+       SWIOTLB_FORCE,          /* swiotlb=force */
+       SWIOTLB_NO_FORCE,       /* swiotlb=noforce */
+};
+
+extern enum swiotlb_force swiotlb_force;
 
 /*
  * Maximum allowable number of contiguous slabs to map,
@@ -108,11 +114,14 @@ swiotlb_dma_supported(struct device *hwdev, u64 mask);
 
 #ifdef CONFIG_SWIOTLB
 extern void __init swiotlb_free(void);
+unsigned int swiotlb_max_segment(void);
 #else
 static inline void swiotlb_free(void) { }
+static inline unsigned int swiotlb_max_segment(void) { return 0; }
 #endif
 
 extern void swiotlb_print_info(void);
 extern int is_swiotlb_buffer(phys_addr_t paddr);
+extern void swiotlb_set_max_segment(unsigned int);
 
 #endif /* __LINUX_SWIOTLB_H */
index f0cf5a1b777e4d4c37c0b927f5c9ee7bfd78fd64..0378e88f6fd3d6076f0393d67343cdb92643dbb4 100644 (file)
@@ -110,6 +110,7 @@ struct netns_ipv4 {
        int sysctl_tcp_orphan_retries;
        int sysctl_tcp_fin_timeout;
        unsigned int sysctl_tcp_notsent_lowat;
+       int sysctl_tcp_tw_reuse;
 
        int sysctl_igmp_max_memberships;
        int sysctl_igmp_max_msf;
index 207147b4c6b2a126af103e715d99c8914b290d48..6061963cca98ed84ef09f788ee0ebdc3867a07c8 100644 (file)
@@ -252,7 +252,6 @@ extern int sysctl_tcp_wmem[3];
 extern int sysctl_tcp_rmem[3];
 extern int sysctl_tcp_app_win;
 extern int sysctl_tcp_adv_win_scale;
-extern int sysctl_tcp_tw_reuse;
 extern int sysctl_tcp_frto;
 extern int sysctl_tcp_low_latency;
 extern int sysctl_tcp_nometrics_save;
index 7ea4c5e7c4487a963acfc75c027514a6cb360169..288c0c54a2b4ace63a94549c136fe255e2982089 100644 (file)
@@ -11,16 +11,16 @@ TRACE_EVENT(swiotlb_bounced,
        TP_PROTO(struct device *dev,
                 dma_addr_t dev_addr,
                 size_t size,
-                int swiotlb_force),
+                enum swiotlb_force swiotlb_force),
 
        TP_ARGS(dev, dev_addr, size, swiotlb_force),
 
        TP_STRUCT__entry(
-               __string(       dev_name,       dev_name(dev)   )
-               __field(        u64,    dma_mask                )
-               __field(        dma_addr_t,     dev_addr        )
-               __field(        size_t, size                    )
-               __field(        int,    swiotlb_force           )
+               __string(       dev_name,       dev_name(dev)           )
+               __field(        u64,    dma_mask                        )
+               __field(        dma_addr_t,     dev_addr                )
+               __field(        size_t, size                            )
+               __field(        enum swiotlb_force,     swiotlb_force   )
        ),
 
        TP_fast_assign(
@@ -37,7 +37,10 @@ TRACE_EVENT(swiotlb_bounced,
                __entry->dma_mask,
                (unsigned long long)__entry->dev_addr,
                __entry->size,
-               __entry->swiotlb_force ? "swiotlb_force" : "" )
+               __print_symbolic(__entry->swiotlb_force,
+                       { SWIOTLB_NORMAL,       "NORMAL" },
+                       { SWIOTLB_FORCE,        "FORCE" },
+                       { SWIOTLB_NO_FORCE,     "NO_FORCE" }))
 );
 
 #endif /*  _TRACE_SWIOTLB_H */
index acc63697a0cc415357792e922396a9ef296bb01f..b2a31a55a61237e65e4939a9d2722e136cc73ca0 100644 (file)
@@ -93,6 +93,7 @@ struct usb_ext_prop_desc {
  * |   0 | magic     | LE32         | FUNCTIONFS_DESCRIPTORS_MAGIC_V2      |
  * |   4 | length    | LE32         | length of the whole data chunk       |
  * |   8 | flags     | LE32         | combination of functionfs_flags      |
+ * |     | eventfd   | LE32         | eventfd file descriptor              |
  * |     | fs_count  | LE32         | number of full-speed descriptors     |
  * |     | hs_count  | LE32         | number of high-speed descriptors     |
  * |     | ss_count  | LE32         | number of super-speed descriptors    |
index 8b1dde96a0faa1bda645f0e03388f0a47f565bdc..7b44195da81bb25a080b165402b74cf8c7f59bcc 100644 (file)
@@ -231,9 +231,11 @@ static void untag_chunk(struct node *p)
        if (size)
                new = alloc_chunk(size);
 
+       mutex_lock(&entry->group->mark_mutex);
        spin_lock(&entry->lock);
        if (chunk->dead || !entry->inode) {
                spin_unlock(&entry->lock);
+               mutex_unlock(&entry->group->mark_mutex);
                if (new)
                        free_chunk(new);
                goto out;
@@ -251,6 +253,7 @@ static void untag_chunk(struct node *p)
                list_del_rcu(&chunk->hash);
                spin_unlock(&hash_lock);
                spin_unlock(&entry->lock);
+               mutex_unlock(&entry->group->mark_mutex);
                fsnotify_destroy_mark(entry, audit_tree_group);
                goto out;
        }
@@ -258,8 +261,8 @@ static void untag_chunk(struct node *p)
        if (!new)
                goto Fallback;
 
-       fsnotify_duplicate_mark(&new->mark, entry);
-       if (fsnotify_add_mark(&new->mark, new->mark.group, new->mark.inode, NULL, 1)) {
+       if (fsnotify_add_mark_locked(&new->mark, entry->group, entry->inode,
+                                    NULL, 1)) {
                fsnotify_put_mark(&new->mark);
                goto Fallback;
        }
@@ -293,6 +296,7 @@ static void untag_chunk(struct node *p)
                owner->root = new;
        spin_unlock(&hash_lock);
        spin_unlock(&entry->lock);
+       mutex_unlock(&entry->group->mark_mutex);
        fsnotify_destroy_mark(entry, audit_tree_group);
        fsnotify_put_mark(&new->mark);  /* drop initial reference */
        goto out;
@@ -309,6 +313,7 @@ static void untag_chunk(struct node *p)
        put_tree(owner);
        spin_unlock(&hash_lock);
        spin_unlock(&entry->lock);
+       mutex_unlock(&entry->group->mark_mutex);
 out:
        fsnotify_put_mark(entry);
        spin_lock(&hash_lock);
@@ -386,18 +391,21 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
 
        chunk_entry = &chunk->mark;
 
+       mutex_lock(&old_entry->group->mark_mutex);
        spin_lock(&old_entry->lock);
        if (!old_entry->inode) {
                /* old_entry is being shot, lets just lie */
                spin_unlock(&old_entry->lock);
+               mutex_unlock(&old_entry->group->mark_mutex);
                fsnotify_put_mark(old_entry);
                free_chunk(chunk);
                return -ENOENT;
        }
 
-       fsnotify_duplicate_mark(chunk_entry, old_entry);
-       if (fsnotify_add_mark(chunk_entry, chunk_entry->group, chunk_entry->inode, NULL, 1)) {
+       if (fsnotify_add_mark_locked(chunk_entry, old_entry->group,
+                                    old_entry->inode, NULL, 1)) {
                spin_unlock(&old_entry->lock);
+               mutex_unlock(&old_entry->group->mark_mutex);
                fsnotify_put_mark(chunk_entry);
                fsnotify_put_mark(old_entry);
                return -ENOSPC;
@@ -413,6 +421,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
                chunk->dead = 1;
                spin_unlock(&chunk_entry->lock);
                spin_unlock(&old_entry->lock);
+               mutex_unlock(&old_entry->group->mark_mutex);
 
                fsnotify_destroy_mark(chunk_entry, audit_tree_group);
 
@@ -445,6 +454,7 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
        spin_unlock(&hash_lock);
        spin_unlock(&chunk_entry->lock);
        spin_unlock(&old_entry->lock);
+       mutex_unlock(&old_entry->group->mark_mutex);
        fsnotify_destroy_mark(old_entry, audit_tree_group);
        fsnotify_put_mark(chunk_entry); /* drop initial reference */
        fsnotify_put_mark(old_entry); /* pair to fsnotify_find mark_entry */
index 042fd7e8e03098882b165787b163a597c4c92aa8..f75c4d031eeb2152c75182466dbf5ec97e93c008 100644 (file)
@@ -1471,6 +1471,7 @@ int __cpuhp_setup_state(enum cpuhp_state state,
                        bool multi_instance)
 {
        int cpu, ret = 0;
+       bool dynstate;
 
        if (cpuhp_cb_check(state) || !name)
                return -EINVAL;
@@ -1480,6 +1481,12 @@ int __cpuhp_setup_state(enum cpuhp_state state,
        ret = cpuhp_store_callbacks(state, name, startup, teardown,
                                    multi_instance);
 
+       dynstate = state == CPUHP_AP_ONLINE_DYN;
+       if (ret > 0 && dynstate) {
+               state = ret;
+               ret = 0;
+       }
+
        if (ret || !invoke || !startup)
                goto out;
 
@@ -1508,7 +1515,7 @@ int __cpuhp_setup_state(enum cpuhp_state state,
         * If the requested state is CPUHP_AP_ONLINE_DYN, return the
         * dynamically allocated state in case of success.
         */
-       if (!ret && state == CPUHP_AP_ONLINE_DYN)
+       if (!ret && dynstate)
                return state;
        return ret;
 }
index 6f382e07de77e2f543389c57e52f48a1f5d026ad..0b92d605fb69cc805a96c8333dab36174f755e22 100644 (file)
@@ -640,6 +640,7 @@ static inline void radix_tree_shrink(struct radix_tree_root *root,
                                update_node(node, private);
                }
 
+               WARN_ON_ONCE(!list_empty(&node->private_list));
                radix_tree_node_free(node);
        }
 }
@@ -666,6 +667,7 @@ static void delete_node(struct radix_tree_root *root,
                        root->rnode = NULL;
                }
 
+               WARN_ON_ONCE(!list_empty(&node->private_list));
                radix_tree_node_free(node);
 
                node = parent;
@@ -767,6 +769,7 @@ static void radix_tree_free_nodes(struct radix_tree_node *node)
                        struct radix_tree_node *old = child;
                        offset = child->offset + 1;
                        child = child->parent;
+                       WARN_ON_ONCE(!list_empty(&node->private_list));
                        radix_tree_node_free(old);
                        if (old == entry_to_node(node))
                                return;
@@ -1824,15 +1827,19 @@ EXPORT_SYMBOL(radix_tree_gang_lookup_tag_slot);
  *     __radix_tree_delete_node    -    try to free node after clearing a slot
  *     @root:          radix tree root
  *     @node:          node containing @index
+ *     @update_node:   callback for changing leaf nodes
+ *     @private:       private data to pass to @update_node
  *
  *     After clearing the slot at @index in @node from radix tree
  *     rooted at @root, call this function to attempt freeing the
  *     node and shrinking the tree.
  */
 void __radix_tree_delete_node(struct radix_tree_root *root,
-                             struct radix_tree_node *node)
+                             struct radix_tree_node *node,
+                             radix_tree_update_node_t update_node,
+                             void *private)
 {
-       delete_node(root, node, NULL, NULL);
+       delete_node(root, node, update_node, private);
 }
 
 /**
index cb1b54ee8527241de289ab66f34f9a0a1efa761f..975b8fc4f1e1143dcdd295731cf1fc18cf0561fe 100644 (file)
@@ -53,7 +53,7 @@
  */
 #define IO_TLB_MIN_SLABS ((1<<20) >> IO_TLB_SHIFT)
 
-int swiotlb_force;
+enum swiotlb_force swiotlb_force;
 
 /*
  * Used to do a quick range check in swiotlb_tbl_unmap_single and
@@ -82,6 +82,12 @@ static phys_addr_t io_tlb_overflow_buffer;
 static unsigned int *io_tlb_list;
 static unsigned int io_tlb_index;
 
+/*
+ * Max segment that we can provide which (if pages are contingous) will
+ * not be bounced (unless SWIOTLB_FORCE is set).
+ */
+unsigned int max_segment;
+
 /*
  * We need to save away the original address corresponding to a mapped entry
  * for the sync operations.
@@ -106,8 +112,12 @@ setup_io_tlb_npages(char *str)
        }
        if (*str == ',')
                ++str;
-       if (!strcmp(str, "force"))
-               swiotlb_force = 1;
+       if (!strcmp(str, "force")) {
+               swiotlb_force = SWIOTLB_FORCE;
+       } else if (!strcmp(str, "noforce")) {
+               swiotlb_force = SWIOTLB_NO_FORCE;
+               io_tlb_nslabs = 1;
+       }
 
        return 0;
 }
@@ -120,6 +130,20 @@ unsigned long swiotlb_nr_tbl(void)
 }
 EXPORT_SYMBOL_GPL(swiotlb_nr_tbl);
 
+unsigned int swiotlb_max_segment(void)
+{
+       return max_segment;
+}
+EXPORT_SYMBOL_GPL(swiotlb_max_segment);
+
+void swiotlb_set_max_segment(unsigned int val)
+{
+       if (swiotlb_force == SWIOTLB_FORCE)
+               max_segment = 1;
+       else
+               max_segment = rounddown(val, PAGE_SIZE);
+}
+
 /* default to 64MB */
 #define IO_TLB_DEFAULT_SIZE (64UL<<20)
 unsigned long swiotlb_size_or_default(void)
@@ -201,6 +225,7 @@ int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
        if (verbose)
                swiotlb_print_info();
 
+       swiotlb_set_max_segment(io_tlb_nslabs << IO_TLB_SHIFT);
        return 0;
 }
 
@@ -279,6 +304,7 @@ swiotlb_late_init_with_default_size(size_t default_size)
        rc = swiotlb_late_init_with_tbl(vstart, io_tlb_nslabs);
        if (rc)
                free_pages((unsigned long)vstart, order);
+
        return rc;
 }
 
@@ -333,6 +359,8 @@ swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs)
 
        late_alloc = 1;
 
+       swiotlb_set_max_segment(io_tlb_nslabs << IO_TLB_SHIFT);
+
        return 0;
 
 cleanup4:
@@ -347,6 +375,7 @@ swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs)
        io_tlb_end = 0;
        io_tlb_start = 0;
        io_tlb_nslabs = 0;
+       max_segment = 0;
        return -ENOMEM;
 }
 
@@ -375,6 +404,7 @@ void __init swiotlb_free(void)
                                   PAGE_ALIGN(io_tlb_nslabs << IO_TLB_SHIFT));
        }
        io_tlb_nslabs = 0;
+       max_segment = 0;
 }
 
 int is_swiotlb_buffer(phys_addr_t paddr)
@@ -543,8 +573,15 @@ static phys_addr_t
 map_single(struct device *hwdev, phys_addr_t phys, size_t size,
           enum dma_data_direction dir, unsigned long attrs)
 {
-       dma_addr_t start_dma_addr = phys_to_dma(hwdev, io_tlb_start);
+       dma_addr_t start_dma_addr;
 
+       if (swiotlb_force == SWIOTLB_NO_FORCE) {
+               dev_warn_ratelimited(hwdev, "Cannot do DMA to address %pa\n",
+                                    &phys);
+               return SWIOTLB_MAP_ERROR;
+       }
+
+       start_dma_addr = phys_to_dma(hwdev, io_tlb_start);
        return swiotlb_tbl_map_single(hwdev, start_dma_addr, phys, size,
                                      dir, attrs);
 }
@@ -721,6 +758,9 @@ static void
 swiotlb_full(struct device *dev, size_t size, enum dma_data_direction dir,
             int do_panic)
 {
+       if (swiotlb_force == SWIOTLB_NO_FORCE)
+               return;
+
        /*
         * Ran out of IOMMU space for this operation. This is very bad.
         * Unfortunately the drivers cannot handle this operation properly.
@@ -763,7 +803,7 @@ dma_addr_t swiotlb_map_page(struct device *dev, struct page *page,
         * we can safely return the device addr and not worry about bounce
         * buffering it.
         */
-       if (dma_capable(dev, dev_addr, size) && !swiotlb_force)
+       if (dma_capable(dev, dev_addr, size) && swiotlb_force != SWIOTLB_FORCE)
                return dev_addr;
 
        trace_swiotlb_bounced(dev, dev_addr, size, swiotlb_force);
@@ -904,7 +944,7 @@ swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems,
                phys_addr_t paddr = sg_phys(sg);
                dma_addr_t dev_addr = phys_to_dma(hwdev, paddr);
 
-               if (swiotlb_force ||
+               if (swiotlb_force == SWIOTLB_FORCE ||
                    !dma_capable(hwdev, dev_addr, sg->length)) {
                        phys_addr_t map = map_single(hwdev, sg_phys(sg),
                                                     sg->length, dir, attrs);
index 82f26cde830c4b70df30cfa47c7e21dbe6d05a7f..d0e4d1002059360e50254ae2c87dc8f7a87a2dff 100644 (file)
@@ -912,6 +912,29 @@ void add_page_wait_queue(struct page *page, wait_queue_t *waiter)
 }
 EXPORT_SYMBOL_GPL(add_page_wait_queue);
 
+#ifndef clear_bit_unlock_is_negative_byte
+
+/*
+ * PG_waiters is the high bit in the same byte as PG_lock.
+ *
+ * On x86 (and on many other architectures), we can clear PG_lock and
+ * test the sign bit at the same time. But if the architecture does
+ * not support that special operation, we just do this all by hand
+ * instead.
+ *
+ * The read of PG_waiters has to be after (or concurrently with) PG_locked
+ * being cleared, but a memory barrier should be unneccssary since it is
+ * in the same byte as PG_locked.
+ */
+static inline bool clear_bit_unlock_is_negative_byte(long nr, volatile void *mem)
+{
+       clear_bit_unlock(nr, mem);
+       /* smp_mb__after_atomic(); */
+       return test_bit(PG_waiters, mem);
+}
+
+#endif
+
 /**
  * unlock_page - unlock a locked page
  * @page: the page
@@ -921,16 +944,19 @@ EXPORT_SYMBOL_GPL(add_page_wait_queue);
  * mechanism between PageLocked pages and PageWriteback pages is shared.
  * But that's OK - sleepers in wait_on_page_writeback() just go back to sleep.
  *
- * The mb is necessary to enforce ordering between the clear_bit and the read
- * of the waitqueue (to avoid SMP races with a parallel wait_on_page_locked()).
+ * Note that this depends on PG_waiters being the sign bit in the byte
+ * that contains PG_locked - thus the BUILD_BUG_ON(). That allows us to
+ * clear the PG_locked bit and test PG_waiters at the same time fairly
+ * portably (architectures that do LL/SC can test any bit, while x86 can
+ * test the sign bit).
  */
 void unlock_page(struct page *page)
 {
+       BUILD_BUG_ON(PG_waiters != 7);
        page = compound_head(page);
        VM_BUG_ON_PAGE(!PageLocked(page), page);
-       clear_bit_unlock(PG_locked, &page->flags);
-       smp_mb__after_atomic();
-       wake_up_page(page, PG_locked);
+       if (clear_bit_unlock_is_negative_byte(PG_locked, &page->flags))
+               wake_up_page_bit(page, PG_locked);
 }
 EXPORT_SYMBOL(unlock_page);
 
index 7d23b505024846301d0e1bb77783489455c8c742..9f2c15cdb32c6327c0d2e8992c5c269ba573f698 100644 (file)
@@ -3008,13 +3008,6 @@ static int do_set_pmd(struct vm_fault *vmf, struct page *page)
        ret = 0;
        count_vm_event(THP_FILE_MAPPED);
 out:
-       /*
-        * If we are going to fallback to pte mapping, do a
-        * withdraw with pmd lock held.
-        */
-       if (arch_needs_pgtable_deposit() && ret == VM_FAULT_FALLBACK)
-               vmf->prealloc_pte = pgtable_trans_huge_withdraw(vma->vm_mm,
-                                                               vmf->pmd);
        spin_unlock(vmf->ptl);
        return ret;
 }
@@ -3055,20 +3048,18 @@ int alloc_set_pte(struct vm_fault *vmf, struct mem_cgroup *memcg,
 
                ret = do_set_pmd(vmf, page);
                if (ret != VM_FAULT_FALLBACK)
-                       goto fault_handled;
+                       return ret;
        }
 
        if (!vmf->pte) {
                ret = pte_alloc_one_map(vmf);
                if (ret)
-                       goto fault_handled;
+                       return ret;
        }
 
        /* Re-check under ptl */
-       if (unlikely(!pte_none(*vmf->pte))) {
-               ret = VM_FAULT_NOPAGE;
-               goto fault_handled;
-       }
+       if (unlikely(!pte_none(*vmf->pte)))
+               return VM_FAULT_NOPAGE;
 
        flush_icache_page(vma, page);
        entry = mk_pte(page, vma->vm_page_prot);
@@ -3088,15 +3079,8 @@ int alloc_set_pte(struct vm_fault *vmf, struct mem_cgroup *memcg,
 
        /* no need to invalidate: a not-present page won't be cached */
        update_mmu_cache(vma, vmf->address, vmf->pte);
-       ret = 0;
 
-fault_handled:
-       /* preallocated pagetable is unused: free it */
-       if (vmf->prealloc_pte) {
-               pte_free(vmf->vma->vm_mm, vmf->prealloc_pte);
-               vmf->prealloc_pte = 0;
-       }
-       return ret;
+       return 0;
 }
 
 
@@ -3360,15 +3344,24 @@ static int do_shared_fault(struct vm_fault *vmf)
 static int do_fault(struct vm_fault *vmf)
 {
        struct vm_area_struct *vma = vmf->vma;
+       int ret;
 
        /* The VMA was not fully populated on mmap() or missing VM_DONTEXPAND */
        if (!vma->vm_ops->fault)
-               return VM_FAULT_SIGBUS;
-       if (!(vmf->flags & FAULT_FLAG_WRITE))
-               return do_read_fault(vmf);
-       if (!(vma->vm_flags & VM_SHARED))
-               return do_cow_fault(vmf);
-       return do_shared_fault(vmf);
+               ret = VM_FAULT_SIGBUS;
+       else if (!(vmf->flags & FAULT_FLAG_WRITE))
+               ret = do_read_fault(vmf);
+       else if (!(vma->vm_flags & VM_SHARED))
+               ret = do_cow_fault(vmf);
+       else
+               ret = do_shared_fault(vmf);
+
+       /* preallocated pagetable is unused: free it */
+       if (vmf->prealloc_pte) {
+               pte_free(vma->vm_mm, vmf->prealloc_pte);
+               vmf->prealloc_pte = 0;
+       }
+       return ret;
 }
 
 static int numa_migrate_prep(struct page *page, struct vm_area_struct *vma,
index fd97f1dbce290f39e1d0d0367006df954f20e8f1..dd7b24e083c5b1f76851eb0b5e3359dde92d910e 100644 (file)
 #include <linux/rmap.h>
 #include "internal.h"
 
-static void clear_exceptional_entry(struct address_space *mapping,
-                                   pgoff_t index, void *entry)
+static void clear_shadow_entry(struct address_space *mapping, pgoff_t index,
+                              void *entry)
 {
        struct radix_tree_node *node;
        void **slot;
 
-       /* Handled by shmem itself */
-       if (shmem_mapping(mapping))
-               return;
-
-       if (dax_mapping(mapping)) {
-               dax_delete_mapping_entry(mapping, index);
-               return;
-       }
        spin_lock_irq(&mapping->tree_lock);
        /*
         * Regular page slots are stabilized by the page lock even
@@ -55,6 +47,56 @@ static void clear_exceptional_entry(struct address_space *mapping,
        spin_unlock_irq(&mapping->tree_lock);
 }
 
+/*
+ * Unconditionally remove exceptional entry. Usually called from truncate path.
+ */
+static void truncate_exceptional_entry(struct address_space *mapping,
+                                      pgoff_t index, void *entry)
+{
+       /* Handled by shmem itself */
+       if (shmem_mapping(mapping))
+               return;
+
+       if (dax_mapping(mapping)) {
+               dax_delete_mapping_entry(mapping, index);
+               return;
+       }
+       clear_shadow_entry(mapping, index, entry);
+}
+
+/*
+ * Invalidate exceptional entry if easily possible. This handles exceptional
+ * entries for invalidate_inode_pages() so for DAX it evicts only unlocked and
+ * clean entries.
+ */
+static int invalidate_exceptional_entry(struct address_space *mapping,
+                                       pgoff_t index, void *entry)
+{
+       /* Handled by shmem itself */
+       if (shmem_mapping(mapping))
+               return 1;
+       if (dax_mapping(mapping))
+               return dax_invalidate_mapping_entry(mapping, index);
+       clear_shadow_entry(mapping, index, entry);
+       return 1;
+}
+
+/*
+ * Invalidate exceptional entry if clean. This handles exceptional entries for
+ * invalidate_inode_pages2() so for DAX it evicts only clean entries.
+ */
+static int invalidate_exceptional_entry2(struct address_space *mapping,
+                                        pgoff_t index, void *entry)
+{
+       /* Handled by shmem itself */
+       if (shmem_mapping(mapping))
+               return 1;
+       if (dax_mapping(mapping))
+               return dax_invalidate_mapping_entry_sync(mapping, index);
+       clear_shadow_entry(mapping, index, entry);
+       return 1;
+}
+
 /**
  * do_invalidatepage - invalidate part or all of a page
  * @page: the page which is affected
@@ -262,7 +304,8 @@ void truncate_inode_pages_range(struct address_space *mapping,
                                break;
 
                        if (radix_tree_exceptional_entry(page)) {
-                               clear_exceptional_entry(mapping, index, page);
+                               truncate_exceptional_entry(mapping, index,
+                                                          page);
                                continue;
                        }
 
@@ -351,7 +394,8 @@ void truncate_inode_pages_range(struct address_space *mapping,
                        }
 
                        if (radix_tree_exceptional_entry(page)) {
-                               clear_exceptional_entry(mapping, index, page);
+                               truncate_exceptional_entry(mapping, index,
+                                                          page);
                                continue;
                        }
 
@@ -470,7 +514,8 @@ unsigned long invalidate_mapping_pages(struct address_space *mapping,
                                break;
 
                        if (radix_tree_exceptional_entry(page)) {
-                               clear_exceptional_entry(mapping, index, page);
+                               invalidate_exceptional_entry(mapping, index,
+                                                            page);
                                continue;
                        }
 
@@ -592,7 +637,9 @@ int invalidate_inode_pages2_range(struct address_space *mapping,
                                break;
 
                        if (radix_tree_exceptional_entry(page)) {
-                               clear_exceptional_entry(mapping, index, page);
+                               if (!invalidate_exceptional_entry2(mapping,
+                                                                  index, page))
+                                       ret = -EBUSY;
                                continue;
                        }
 
index 241fa5d6b3b2fe155ed0f458b9d188a926a51e80..abb58ffa3c64cb330d7e3d7aca7897aab0fea6a4 100644 (file)
@@ -473,7 +473,8 @@ static enum lru_status shadow_lru_isolate(struct list_head *item,
        if (WARN_ON_ONCE(node->exceptional))
                goto out_invalid;
        inc_node_state(page_pgdat(virt_to_page(node)), WORKINGSET_NODERECLAIM);
-       __radix_tree_delete_node(&mapping->page_tree, node);
+       __radix_tree_delete_node(&mapping->page_tree, node,
+                                workingset_update_node, mapping);
 
 out_invalid:
        spin_unlock(&mapping->tree_lock);
index 019557d0a11d2434ff7186da5504917717bf7d2b..09cfe87f0a44d64dbbdb9209d8eb358efa68f887 100644 (file)
@@ -1059,7 +1059,9 @@ static void __exit lane_module_cleanup(void)
 {
        int i;
 
+#ifdef CONFIG_PROC_FS
        remove_proc_entry("lec", atm_proc_root);
+#endif
 
        deregister_atm_ioctl(&lane_ioctl_ops);
 
index 8e0c0635ee975e1c71a126677f63ff220f7f0c44..fb55327dcfeabdaf3eeecc3a8d176ae215612649 100644 (file)
@@ -75,6 +75,7 @@ static struct sk_buff *reset_per_cpu_data(struct per_cpu_dm_data *data)
        struct nlattr *nla;
        struct sk_buff *skb;
        unsigned long flags;
+       void *msg_header;
 
        al = sizeof(struct net_dm_alert_msg);
        al += dm_hit_limit * sizeof(struct net_dm_drop_point);
@@ -82,21 +83,41 @@ static struct sk_buff *reset_per_cpu_data(struct per_cpu_dm_data *data)
 
        skb = genlmsg_new(al, GFP_KERNEL);
 
-       if (skb) {
-               genlmsg_put(skb, 0, 0, &net_drop_monitor_family,
-                               0, NET_DM_CMD_ALERT);
-               nla = nla_reserve(skb, NLA_UNSPEC,
-                                 sizeof(struct net_dm_alert_msg));
-               msg = nla_data(nla);
-               memset(msg, 0, al);
-       } else {
-               mod_timer(&data->send_timer, jiffies + HZ / 10);
+       if (!skb)
+               goto err;
+
+       msg_header = genlmsg_put(skb, 0, 0, &net_drop_monitor_family,
+                                0, NET_DM_CMD_ALERT);
+       if (!msg_header) {
+               nlmsg_free(skb);
+               skb = NULL;
+               goto err;
+       }
+       nla = nla_reserve(skb, NLA_UNSPEC,
+                         sizeof(struct net_dm_alert_msg));
+       if (!nla) {
+               nlmsg_free(skb);
+               skb = NULL;
+               goto err;
        }
+       msg = nla_data(nla);
+       memset(msg, 0, al);
+       goto out;
 
+err:
+       mod_timer(&data->send_timer, jiffies + HZ / 10);
+out:
        spin_lock_irqsave(&data->lock, flags);
        swap(data->skb, skb);
        spin_unlock_irqrestore(&data->lock, flags);
 
+       if (skb) {
+               struct nlmsghdr *nlh = (struct nlmsghdr *)skb->data;
+               struct genlmsghdr *gnlh = (struct genlmsghdr *)nlmsg_data(nlh);
+
+               genlmsg_end(skb, genlmsg_data(gnlh));
+       }
+
        return skb;
 }
 
index e6c412b94decba010662b90240959320c4e77921..1969b3f118c1d6e30b3edccd7c85a6caa520af5c 100644 (file)
@@ -2972,12 +2972,6 @@ void bpf_warn_invalid_xdp_action(u32 act)
 }
 EXPORT_SYMBOL_GPL(bpf_warn_invalid_xdp_action);
 
-void bpf_warn_invalid_xdp_buffer(void)
-{
-       WARN_ONCE(1, "Illegal XDP buffer encountered, expect throughput degradation\n");
-}
-EXPORT_SYMBOL_GPL(bpf_warn_invalid_xdp_buffer);
-
 static u32 sk_filter_convert_ctx_access(enum bpf_access_type type, int dst_reg,
                                        int src_reg, int ctx_off,
                                        struct bpf_insn *insn_buf,
index d6447dc1037151495d88064938dfb4e255377416..fe4e1531976c3a36127b6ad4af33f24534af4c52 100644 (file)
@@ -468,8 +468,9 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
                        if (hdr->flags & GRE_ACK)
                                offset += sizeof(((struct pptp_gre_header *)0)->ack);
 
-                       ppp_hdr = skb_header_pointer(skb, nhoff + offset,
-                                                    sizeof(_ppp_hdr), _ppp_hdr);
+                       ppp_hdr = __skb_header_pointer(skb, nhoff + offset,
+                                                    sizeof(_ppp_hdr),
+                                                    data, hlen, _ppp_hdr);
                        if (!ppp_hdr)
                                goto out_bad;
 
index 18b5aae99becf81c3aa55820d49332067a1c4fe7..75e3ea7bda08f39e07d515768b56678842e74c40 100644 (file)
@@ -3898,6 +3898,9 @@ static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh)
        u32 filter_mask;
        int err;
 
+       if (nlmsg_len(nlh) < sizeof(*ifsm))
+               return -EINVAL;
+
        ifsm = nlmsg_data(nlh);
        if (ifsm->ifindex > 0)
                dev = __dev_get_by_index(net, ifsm->ifindex);
@@ -3947,6 +3950,9 @@ static int rtnl_stats_dump(struct sk_buff *skb, struct netlink_callback *cb)
 
        cb->seq = net->dev_base_seq;
 
+       if (nlmsg_len(cb->nlh) < sizeof(*ifsm))
+               return -EINVAL;
+
        ifsm = nlmsg_data(cb->nlh);
        filter_mask = ifsm->filter_mask;
        if (!filter_mask)
index 3ff8938893ec85311012b55a27de10d9368b50f1..eae0332b0e8c1f861ce629ed9ce3ddc45802a6b8 100644 (file)
@@ -85,7 +85,7 @@ struct fib_table *fib_new_table(struct net *net, u32 id)
        if (tb)
                return tb;
 
-       if (id == RT_TABLE_LOCAL)
+       if (id == RT_TABLE_LOCAL && !net->ipv4.fib_has_custom_rules)
                alias = fib_new_table(net, RT_TABLE_MAIN);
 
        tb = fib_trie_table(id, alias);
index 68d622133f5386e621148da7330dcc747d186c6c..5b15459955f84cfc26dd2b12f129b1ee4014e62b 100644 (file)
@@ -219,9 +219,14 @@ static void igmp_start_timer(struct ip_mc_list *im, int max_delay)
 static void igmp_gq_start_timer(struct in_device *in_dev)
 {
        int tv = prandom_u32() % in_dev->mr_maxdelay;
+       unsigned long exp = jiffies + tv + 2;
+
+       if (in_dev->mr_gq_running &&
+           time_after_eq(exp, (in_dev->mr_gq_timer).expires))
+               return;
 
        in_dev->mr_gq_running = 1;
-       if (!mod_timer(&in_dev->mr_gq_timer, jiffies+tv+2))
+       if (!mod_timer(&in_dev->mr_gq_timer, exp))
                in_dev_hold(in_dev);
 }
 
index 57e1405e82822543ed6fc788e8b7dc69091f2bb3..53ae0c6315ad03e46f93ae68cb930fff5848edcd 100644 (file)
@@ -1225,8 +1225,14 @@ void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb)
                 * which has interface index (iif) as the first member of the
                 * underlying inet{6}_skb_parm struct. This code then overlays
                 * PKTINFO_SKB_CB and in_pktinfo also has iif as the first
-                * element so the iif is picked up from the prior IPCB
+                * element so the iif is picked up from the prior IPCB. If iif
+                * is the loopback interface, then return the sending interface
+                * (e.g., process binds socket to eth0 for Tx which is
+                * redirected to loopback in the rtable/dst).
                 */
+               if (pktinfo->ipi_ifindex == LOOPBACK_IFINDEX)
+                       pktinfo->ipi_ifindex = inet_iif(skb);
+
                pktinfo->ipi_spec_dst.s_addr = fib_compute_spec_dst(skb);
        } else {
                pktinfo->ipi_ifindex = 0;
index a82a11747b3f14c4567a6d8072dfc2f77421547a..0fcac8e7a2b2fb9fdb9f74bdcadf32bd177ceb39 100644 (file)
@@ -1914,7 +1914,8 @@ out:      return err;
                }
        }
 
-       rth = rt_dst_alloc(net->loopback_dev, flags | RTCF_LOCAL, res.type,
+       rth = rt_dst_alloc(l3mdev_master_dev_rcu(dev) ? : net->loopback_dev,
+                          flags | RTCF_LOCAL, res.type,
                           IN_DEV_CONF_GET(in_dev, NOPOLICY), false, do_cache);
        if (!rth)
                goto e_nobufs;
index 80bc36b25de21d5e6b1c3e6f6001258b38656d41..22cbd61079b5a9d2661583b7d96eea46eddb685d 100644 (file)
@@ -432,13 +432,6 @@ static struct ctl_table ipv4_table[] = {
                .extra1         = &tcp_adv_win_scale_min,
                .extra2         = &tcp_adv_win_scale_max,
        },
-       {
-               .procname       = "tcp_tw_reuse",
-               .data           = &sysctl_tcp_tw_reuse,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
        {
                .procname       = "tcp_frto",
                .data           = &sysctl_tcp_frto,
@@ -960,6 +953,13 @@ static struct ctl_table ipv4_net_table[] = {
                .mode           = 0644,
                .proc_handler   = proc_dointvec,
        },
+       {
+               .procname       = "tcp_tw_reuse",
+               .data           = &init_net.ipv4.sysctl_tcp_tw_reuse,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
 #ifdef CONFIG_IP_ROUTE_MULTIPATH
        {
                .procname       = "fib_multipath_use_neigh",
index 30d81f533ada5708a61155b589e3835d9af4128d..fe9da4fb96bf967ab27f5179fc5a9ac3576cc693 100644 (file)
@@ -84,7 +84,6 @@
 #include <crypto/hash.h>
 #include <linux/scatterlist.h>
 
-int sysctl_tcp_tw_reuse __read_mostly;
 int sysctl_tcp_low_latency __read_mostly;
 
 #ifdef CONFIG_TCP_MD5SIG
@@ -120,7 +119,7 @@ int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
           and use initial timestamp retrieved from peer table.
         */
        if (tcptw->tw_ts_recent_stamp &&
-           (!twp || (sysctl_tcp_tw_reuse &&
+           (!twp || (sock_net(sk)->ipv4.sysctl_tcp_tw_reuse &&
                             get_seconds() - tcptw->tw_ts_recent_stamp > 1))) {
                tp->write_seq = tcptw->tw_snd_nxt + 65535 + 2;
                if (tp->write_seq == 0)
@@ -2456,6 +2455,7 @@ static int __net_init tcp_sk_init(struct net *net)
        net->ipv4.sysctl_tcp_orphan_retries = 0;
        net->ipv4.sysctl_tcp_fin_timeout = TCP_FIN_TIMEOUT;
        net->ipv4.sysctl_tcp_notsent_lowat = UINT_MAX;
+       net->ipv4.sysctl_tcp_tw_reuse = 0;
 
        return 0;
 fail:
index 70d0de4041972ceaeb4656fa4bdef884a5403b10..38122d04fadc646c27a5ccdf0eef5eb6d7923a27 100644 (file)
@@ -1373,7 +1373,7 @@ static int __ip6_append_data(struct sock *sk,
         */
 
        cork->length += length;
-       if (((length > mtu) ||
+       if ((((length + fragheaderlen) > mtu) ||
             (skb && skb_is_gso(skb))) &&
            (sk->sk_protocol == IPPROTO_UDP) &&
            (rt->dst.dev->features & NETIF_F_UFO) && !rt->dst.header_len &&
index 8938b6ba57a037b6f95f9dcfd2461d7c3951cdfb..3d73278b86ca34bfbd774dc8f52e490169445e1b 100644 (file)
@@ -47,7 +47,8 @@ static inline struct l2tp_ip_sock *l2tp_ip_sk(const struct sock *sk)
        return (struct l2tp_ip_sock *)sk;
 }
 
-static struct sock *__l2tp_ip_bind_lookup(struct net *net, __be32 laddr, int dif, u32 tunnel_id)
+static struct sock *__l2tp_ip_bind_lookup(const struct net *net, __be32 laddr,
+                                         __be32 raddr, int dif, u32 tunnel_id)
 {
        struct sock *sk;
 
@@ -61,6 +62,7 @@ static struct sock *__l2tp_ip_bind_lookup(struct net *net, __be32 laddr, int dif
                if ((l2tp->conn_id == tunnel_id) &&
                    net_eq(sock_net(sk), net) &&
                    !(inet->inet_rcv_saddr && inet->inet_rcv_saddr != laddr) &&
+                   (!inet->inet_daddr || !raddr || inet->inet_daddr == raddr) &&
                    (!sk->sk_bound_dev_if || !dif ||
                     sk->sk_bound_dev_if == dif))
                        goto found;
@@ -71,15 +73,6 @@ static struct sock *__l2tp_ip_bind_lookup(struct net *net, __be32 laddr, int dif
        return sk;
 }
 
-static inline struct sock *l2tp_ip_bind_lookup(struct net *net, __be32 laddr, int dif, u32 tunnel_id)
-{
-       struct sock *sk = __l2tp_ip_bind_lookup(net, laddr, dif, tunnel_id);
-       if (sk)
-               sock_hold(sk);
-
-       return sk;
-}
-
 /* When processing receive frames, there are two cases to
  * consider. Data frames consist of a non-zero session-id and an
  * optional cookie. Control frames consist of a regular L2TP header
@@ -183,8 +176,8 @@ static int l2tp_ip_recv(struct sk_buff *skb)
                struct iphdr *iph = (struct iphdr *) skb_network_header(skb);
 
                read_lock_bh(&l2tp_ip_lock);
-               sk = __l2tp_ip_bind_lookup(net, iph->daddr, inet_iif(skb),
-                                          tunnel_id);
+               sk = __l2tp_ip_bind_lookup(net, iph->daddr, iph->saddr,
+                                          inet_iif(skb), tunnel_id);
                if (!sk) {
                        read_unlock_bh(&l2tp_ip_lock);
                        goto discard;
@@ -280,7 +273,7 @@ static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
                inet->inet_saddr = 0;  /* Use device */
 
        write_lock_bh(&l2tp_ip_lock);
-       if (__l2tp_ip_bind_lookup(net, addr->l2tp_addr.s_addr,
+       if (__l2tp_ip_bind_lookup(net, addr->l2tp_addr.s_addr, 0,
                                  sk->sk_bound_dev_if, addr->l2tp_conn_id)) {
                write_unlock_bh(&l2tp_ip_lock);
                ret = -EADDRINUSE;
index f092ac441fdda5cdaf294005d28d586c216d2f26..331ccf5a7bad80e011997e071489d7775b0c68c6 100644 (file)
@@ -59,12 +59,14 @@ static inline struct l2tp_ip6_sock *l2tp_ip6_sk(const struct sock *sk)
 
 static struct sock *__l2tp_ip6_bind_lookup(struct net *net,
                                           struct in6_addr *laddr,
+                                          const struct in6_addr *raddr,
                                           int dif, u32 tunnel_id)
 {
        struct sock *sk;
 
        sk_for_each_bound(sk, &l2tp_ip6_bind_table) {
-               const struct in6_addr *addr = inet6_rcv_saddr(sk);
+               const struct in6_addr *sk_laddr = inet6_rcv_saddr(sk);
+               const struct in6_addr *sk_raddr = &sk->sk_v6_daddr;
                struct l2tp_ip6_sock *l2tp = l2tp_ip6_sk(sk);
 
                if (l2tp == NULL)
@@ -72,7 +74,8 @@ static struct sock *__l2tp_ip6_bind_lookup(struct net *net,
 
                if ((l2tp->conn_id == tunnel_id) &&
                    net_eq(sock_net(sk), net) &&
-                   (!addr || ipv6_addr_equal(addr, laddr)) &&
+                   (!sk_laddr || ipv6_addr_any(sk_laddr) || ipv6_addr_equal(sk_laddr, laddr)) &&
+                   (!raddr || ipv6_addr_any(sk_raddr) || ipv6_addr_equal(sk_raddr, raddr)) &&
                    (!sk->sk_bound_dev_if || !dif ||
                     sk->sk_bound_dev_if == dif))
                        goto found;
@@ -83,17 +86,6 @@ static struct sock *__l2tp_ip6_bind_lookup(struct net *net,
        return sk;
 }
 
-static inline struct sock *l2tp_ip6_bind_lookup(struct net *net,
-                                               struct in6_addr *laddr,
-                                               int dif, u32 tunnel_id)
-{
-       struct sock *sk = __l2tp_ip6_bind_lookup(net, laddr, dif, tunnel_id);
-       if (sk)
-               sock_hold(sk);
-
-       return sk;
-}
-
 /* When processing receive frames, there are two cases to
  * consider. Data frames consist of a non-zero session-id and an
  * optional cookie. Control frames consist of a regular L2TP header
@@ -197,8 +189,8 @@ static int l2tp_ip6_recv(struct sk_buff *skb)
                struct ipv6hdr *iph = ipv6_hdr(skb);
 
                read_lock_bh(&l2tp_ip6_lock);
-               sk = __l2tp_ip6_bind_lookup(net, &iph->daddr, inet6_iif(skb),
-                                           tunnel_id);
+               sk = __l2tp_ip6_bind_lookup(net, &iph->daddr, &iph->saddr,
+                                           inet6_iif(skb), tunnel_id);
                if (!sk) {
                        read_unlock_bh(&l2tp_ip6_lock);
                        goto discard;
@@ -330,7 +322,7 @@ static int l2tp_ip6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
        rcu_read_unlock();
 
        write_lock_bh(&l2tp_ip6_lock);
-       if (__l2tp_ip6_bind_lookup(net, &addr->l2tp_addr, bound_dev_if,
+       if (__l2tp_ip6_bind_lookup(net, &addr->l2tp_addr, NULL, bound_dev_if,
                                   addr->l2tp_conn_id)) {
                write_unlock_bh(&l2tp_ip6_lock);
                err = -EADDRINUSE;
index 2c21b7039136fe467845df5494432b58a6a226fc..0d8b716e509edca48fbc65ceaf06e6b7d6a2c189 100644 (file)
@@ -3287,7 +3287,7 @@ static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata,
        int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2);
        int hw_headroom = sdata->local->hw.extra_tx_headroom;
        struct ethhdr eth;
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
+       struct ieee80211_tx_info *info;
        struct ieee80211_hdr *hdr = (void *)fast_tx->hdr;
        struct ieee80211_tx_data tx;
        ieee80211_tx_result r;
@@ -3351,6 +3351,7 @@ static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata,
        memcpy(skb->data + fast_tx->da_offs, eth.h_dest, ETH_ALEN);
        memcpy(skb->data + fast_tx->sa_offs, eth.h_source, ETH_ALEN);
 
+       info = IEEE80211_SKB_CB(skb);
        memset(info, 0, sizeof(*info));
        info->band = fast_tx->band;
        info->control.vif = &sdata->vif;
index 2d4c4d3911c02ce91de79ac4c9ad4923d4bc2329..9c62b6325f7adc92420b605cf4cdc3b26da437fc 100644 (file)
@@ -606,7 +606,6 @@ static int ovs_packet_cmd_execute(struct sk_buff *skb, struct genl_info *info)
        rcu_assign_pointer(flow->sf_acts, acts);
        packet->priority = flow->key.phy.priority;
        packet->mark = flow->key.phy.skb_mark;
-       packet->protocol = flow->key.eth.type;
 
        rcu_read_lock();
        dp = get_dp_rcu(net, ovs_header->dp_ifindex);
index 08aa926cd5cfe5f6b3f47f3dc4df5c970a6ba2a7..2c0a00f7f1b7d195b98f70e6ec0235b650a63311 100644 (file)
@@ -312,7 +312,8 @@ static bool icmp6hdr_ok(struct sk_buff *skb)
  * Returns 0 if it encounters a non-vlan or incomplete packet.
  * Returns 1 after successfully parsing vlan tag.
  */
-static int parse_vlan_tag(struct sk_buff *skb, struct vlan_head *key_vh)
+static int parse_vlan_tag(struct sk_buff *skb, struct vlan_head *key_vh,
+                         bool untag_vlan)
 {
        struct vlan_head *vh = (struct vlan_head *)skb->data;
 
@@ -330,7 +331,20 @@ static int parse_vlan_tag(struct sk_buff *skb, struct vlan_head *key_vh)
        key_vh->tci = vh->tci | htons(VLAN_TAG_PRESENT);
        key_vh->tpid = vh->tpid;
 
-       __skb_pull(skb, sizeof(struct vlan_head));
+       if (unlikely(untag_vlan)) {
+               int offset = skb->data - skb_mac_header(skb);
+               u16 tci;
+               int err;
+
+               __skb_push(skb, offset);
+               err = __skb_vlan_pop(skb, &tci);
+               __skb_pull(skb, offset);
+               if (err)
+                       return err;
+               __vlan_hwaccel_put_tag(skb, key_vh->tpid, tci);
+       } else {
+               __skb_pull(skb, sizeof(struct vlan_head));
+       }
        return 1;
 }
 
@@ -351,13 +365,13 @@ static int parse_vlan(struct sk_buff *skb, struct sw_flow_key *key)
                key->eth.vlan.tpid = skb->vlan_proto;
        } else {
                /* Parse outer vlan tag in the non-accelerated case. */
-               res = parse_vlan_tag(skb, &key->eth.vlan);
+               res = parse_vlan_tag(skb, &key->eth.vlan, true);
                if (res <= 0)
                        return res;
        }
 
        /* Parse inner vlan tag. */
-       res = parse_vlan_tag(skb, &key->eth.cvlan);
+       res = parse_vlan_tag(skb, &key->eth.cvlan, false);
        if (res <= 0)
                return res;
 
@@ -800,29 +814,15 @@ int ovs_flow_key_extract_userspace(struct net *net, const struct nlattr *attr,
        if (err)
                return err;
 
-       if (ovs_key_mac_proto(key) == MAC_PROTO_NONE) {
-               /* key_extract assumes that skb->protocol is set-up for
-                * layer 3 packets which is the case for other callers,
-                * in particular packets recieved from the network stack.
-                * Here the correct value can be set from the metadata
-                * extracted above.
-                */
-               skb->protocol = key->eth.type;
-       } else {
-               struct ethhdr *eth;
-
-               skb_reset_mac_header(skb);
-               eth = eth_hdr(skb);
-
-               /* Normally, setting the skb 'protocol' field would be
-                * handled by a call to eth_type_trans(), but it assumes
-                * there's a sending device, which we may not have.
-                */
-               if (eth_proto_is_802_3(eth->h_proto))
-                       skb->protocol = eth->h_proto;
-               else
-                       skb->protocol = htons(ETH_P_802_2);
-       }
+       /* key_extract assumes that skb->protocol is set-up for
+        * layer 3 packets which is the case for other callers,
+        * in particular packets received from the network stack.
+        * Here the correct value can be set from the metadata
+        * extracted above.
+        * For L2 packet key eth type would be zero. skb protocol
+        * would be set to correct value later during key-extact.
+        */
 
+       skb->protocol = key->eth.type;
        return key_extract(skb, key);
 }
index 3fbba79a4ef0521604df48275fb7dae8a8b7099e..1ecdf809b5fa8913d56bb4194ac193274d4d625a 100644 (file)
@@ -148,13 +148,15 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n)
        unsigned long cl;
        unsigned long fh;
        int err;
-       int tp_created = 0;
+       int tp_created;
 
        if ((n->nlmsg_type != RTM_GETTFILTER) &&
            !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN))
                return -EPERM;
 
 replay:
+       tp_created = 0;
+
        err = nlmsg_parse(n, sizeof(*t), tca, TCA_MAX, NULL);
        if (err < 0)
                return err;
index 333f8e26843128b4bd03a1c6409a21064f7c56e5..970db7a41684aa2a494b97663f91ca932308de05 100644 (file)
@@ -153,10 +153,14 @@ static int fl_classify(struct sk_buff *skb, const struct tcf_proto *tp,
 
                switch (ip_tunnel_info_af(info)) {
                case AF_INET:
+                       skb_key.enc_control.addr_type =
+                               FLOW_DISSECTOR_KEY_IPV4_ADDRS;
                        skb_key.enc_ipv4.src = key->u.ipv4.src;
                        skb_key.enc_ipv4.dst = key->u.ipv4.dst;
                        break;
                case AF_INET6:
+                       skb_key.enc_control.addr_type =
+                               FLOW_DISSECTOR_KEY_IPV6_ADDRS;
                        skb_key.enc_ipv6.src = key->u.ipv6.src;
                        skb_key.enc_ipv6.dst = key->u.ipv6.dst;
                        break;
index 8487bf136e5c4f54801777c4ef0f4e51b765cd62..a8c2307590b87ce5774f275fcbc1397f095d4c27 100644 (file)
@@ -537,7 +537,7 @@ int sockfs_setattr(struct dentry *dentry, struct iattr *iattr)
 {
        int err = simple_setattr(dentry, iattr);
 
-       if (!err) {
+       if (!err && (iattr->ia_valid & ATTR_UID)) {
                struct socket *sock = SOCKET_I(d_inode(dentry));
 
                sock->sk->sk_uid = iattr->ia_uid;
index 333c5dae0072aa3f7a517ec3f345a4a1f60ca5ad..800caaa699a1669f6efe228e51974e6e2bd19e60 100644 (file)
@@ -441,15 +441,19 @@ static void __tipc_shutdown(struct socket *sock, int error)
        while ((skb = __skb_dequeue(&sk->sk_receive_queue)) != NULL) {
                if (TIPC_SKB_CB(skb)->bytes_read) {
                        kfree_skb(skb);
-               } else {
-                       if (!tipc_sk_type_connectionless(sk) &&
-                           sk->sk_state != TIPC_DISCONNECTING) {
-                               tipc_set_sk_state(sk, TIPC_DISCONNECTING);
-                               tipc_node_remove_conn(net, dnode, tsk->portid);
-                       }
-                       tipc_sk_respond(sk, skb, error);
+                       continue;
+               }
+               if (!tipc_sk_type_connectionless(sk) &&
+                   sk->sk_state != TIPC_DISCONNECTING) {
+                       tipc_set_sk_state(sk, TIPC_DISCONNECTING);
+                       tipc_node_remove_conn(net, dnode, tsk->portid);
                }
+               tipc_sk_respond(sk, skb, error);
        }
+
+       if (tipc_sk_type_connectionless(sk))
+               return;
+
        if (sk->sk_state != TIPC_DISCONNECTING) {
                skb = tipc_msg_create(TIPC_CRITICAL_IMPORTANCE,
                                      TIPC_CONN_MSG, SHORT_H_SIZE, 0, dnode,
@@ -457,10 +461,8 @@ static void __tipc_shutdown(struct socket *sock, int error)
                                      tsk->portid, error);
                if (skb)
                        tipc_node_xmit_skb(net, skb, dnode, tsk->portid);
-               if (!tipc_sk_type_connectionless(sk)) {
-                       tipc_node_remove_conn(net, dnode, tsk->portid);
-                       tipc_set_sk_state(sk, TIPC_DISCONNECTING);
-               }
+               tipc_node_remove_conn(net, dnode, tsk->portid);
+               tipc_set_sk_state(sk, TIPC_DISCONNECTING);
        }
 }
 
index a6d2a43bbf2e290368410a6338abefecfa114f54..b124f62ed6cb30b0e89a2d698dc6a346b65e6b62 100644 (file)
@@ -105,4 +105,11 @@ config SAMPLE_BLACKFIN_GPTIMERS
        help
          Build samples of blackfin gptimers sample module.
 
+config SAMPLE_VFIO_MDEV_MTTY
+       tristate "Build VFIO mtty example mediated device sample code -- loadable modules only"
+       depends on VFIO_MDEV_DEVICE && m
+       help
+         Build a virtual tty sample driver for use as a VFIO
+         mediated device
+
 endif # SAMPLES
index e17d66d77f099c48f88bdc8518ca34c45b39cf29..86a137e451d978bec15778e13766648b6cfb3f18 100644 (file)
@@ -2,4 +2,5 @@
 
 obj-$(CONFIG_SAMPLES)  += kobject/ kprobes/ trace_events/ livepatch/ \
                           hw_breakpoint/ kfifo/ kdb/ hidraw/ rpmsg/ seccomp/ \
-                          configfs/ connector/ v4l/ trace_printk/ blackfin/
+                          configfs/ connector/ v4l/ trace_printk/ blackfin/ \
+                          vfio-mdev/
index a932edbe38eb9eba5a1b3429bb67cc9c99d0d3a6..cbbd868a50a8b145bf018329542f4fde829e06da 100644 (file)
@@ -1,13 +1 @@
-#
-# Makefile for mtty.c file
-#
-KERNEL_DIR:=/lib/modules/$(shell uname -r)/build
-
-obj-m:=mtty.o
-
-modules clean modules_install:
-       $(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) $@
-
-default: modules
-
-module: modules
+obj-$(CONFIG_SAMPLE_VFIO_MDEV_MTTY) += mtty.o
index 6b633a4ea33399aa32e6f3655b05c980aeb33403..1fc57a5093a7be425406cca55f4eb994e2eb979e 100644 (file)
@@ -164,7 +164,7 @@ static struct mdev_state *find_mdev_state_by_uuid(uuid_le uuid)
        struct mdev_state *mds;
 
        list_for_each_entry(mds, &mdev_devices_list, next) {
-               if (uuid_le_cmp(mds->mdev->uuid, uuid) == 0)
+               if (uuid_le_cmp(mdev_uuid(mds->mdev), uuid) == 0)
                        return mds;
        }
 
@@ -341,7 +341,8 @@ static void handle_bar_write(unsigned int index, struct mdev_state *mdev_state,
                                pr_err("Serial port %d: Fifo level trigger\n",
                                        index);
 #endif
-                               mtty_trigger_interrupt(mdev_state->mdev->uuid);
+                               mtty_trigger_interrupt(
+                                               mdev_uuid(mdev_state->mdev));
                        }
                } else {
 #if defined(DEBUG_INTR)
@@ -355,7 +356,8 @@ static void handle_bar_write(unsigned int index, struct mdev_state *mdev_state,
                         */
                        if (mdev_state->s[index].uart_reg[UART_IER] &
                                                                UART_IER_RLSI)
-                               mtty_trigger_interrupt(mdev_state->mdev->uuid);
+                               mtty_trigger_interrupt(
+                                               mdev_uuid(mdev_state->mdev));
                }
                mutex_unlock(&mdev_state->rxtx_lock);
                break;
@@ -374,7 +376,8 @@ static void handle_bar_write(unsigned int index, struct mdev_state *mdev_state,
                                pr_err("Serial port %d: IER_THRI write\n",
                                        index);
 #endif
-                               mtty_trigger_interrupt(mdev_state->mdev->uuid);
+                               mtty_trigger_interrupt(
+                                               mdev_uuid(mdev_state->mdev));
                        }
 
                        mutex_unlock(&mdev_state->rxtx_lock);
@@ -445,7 +448,7 @@ static void handle_bar_write(unsigned int index, struct mdev_state *mdev_state,
 #if defined(DEBUG_INTR)
                        pr_err("Serial port %d: MCR_OUT2 write\n", index);
 #endif
-                       mtty_trigger_interrupt(mdev_state->mdev->uuid);
+                       mtty_trigger_interrupt(mdev_uuid(mdev_state->mdev));
                }
 
                if ((mdev_state->s[index].uart_reg[UART_IER] & UART_IER_MSI) &&
@@ -453,7 +456,7 @@ static void handle_bar_write(unsigned int index, struct mdev_state *mdev_state,
 #if defined(DEBUG_INTR)
                        pr_err("Serial port %d: MCR RTS/DTR write\n", index);
 #endif
-                       mtty_trigger_interrupt(mdev_state->mdev->uuid);
+                       mtty_trigger_interrupt(mdev_uuid(mdev_state->mdev));
                }
                break;
 
@@ -504,7 +507,8 @@ static void handle_bar_read(unsigned int index, struct mdev_state *mdev_state,
 #endif
                        if (mdev_state->s[index].uart_reg[UART_IER] &
                                                         UART_IER_THRI)
-                               mtty_trigger_interrupt(mdev_state->mdev->uuid);
+                               mtty_trigger_interrupt(
+                                       mdev_uuid(mdev_state->mdev));
                }
                mutex_unlock(&mdev_state->rxtx_lock);
 
@@ -734,7 +738,7 @@ int mtty_create(struct kobject *kobj, struct mdev_device *mdev)
 
        for (i = 0; i < 2; i++) {
                snprintf(name, MTTY_STRING_LEN, "%s-%d",
-                       dev_driver_string(mdev->parent->dev), i + 1);
+                       dev_driver_string(mdev_parent_dev(mdev)), i + 1);
                if (!strcmp(kobj->name, name)) {
                        nr_ports = i + 1;
                        break;
@@ -1298,10 +1302,8 @@ static ssize_t
 sample_mdev_dev_show(struct device *dev, struct device_attribute *attr,
                     char *buf)
 {
-       struct mdev_device *mdev = to_mdev_device(dev);
-
-       if (mdev)
-               return sprintf(buf, "This is MDEV %s\n", dev_name(&mdev->dev));
+       if (mdev_from_dev(dev))
+               return sprintf(buf, "This is MDEV %s\n", dev_name(dev));
 
        return sprintf(buf, "\n");
 }
@@ -1402,7 +1404,7 @@ struct attribute_group *mdev_type_groups[] = {
        NULL,
 };
 
-struct parent_ops mdev_fops = {
+struct mdev_parent_ops mdev_fops = {
        .owner                  = THIS_MODULE,
        .dev_attr_groups        = mtty_dev_groups,
        .mdev_attr_groups       = mdev_dev_groups,
@@ -1447,6 +1449,7 @@ static int __init mtty_dev_init(void)
 
        if (IS_ERR(mtty_dev.vd_class)) {
                pr_err("Error: failed to register mtty_dev class\n");
+               ret = PTR_ERR(mtty_dev.vd_class);
                goto failed1;
        }
 
@@ -1458,7 +1461,8 @@ static int __init mtty_dev_init(void)
        if (ret)
                goto failed2;
 
-       if (mdev_register_device(&mtty_dev.dev, &mdev_fops) != 0)
+       ret = mdev_register_device(&mtty_dev.dev, &mdev_fops);
+       if (ret)
                goto failed3;
 
        mutex_init(&mdev_list_lock);
index 950fd2e64bb73b9f261188bba272ea7e7ec10249..12262c0cc6914e6a5eebac1b887b129a15fb7466 100644 (file)
@@ -39,6 +39,9 @@
 #include "hash-map.h"
 #endif
 
+#if BUILDING_GCC_VERSION >= 7000
+#include "memmodel.h"
+#endif
 #include "emit-rtl.h"
 #include "debug.h"
 #include "target.h"
@@ -91,6 +94,9 @@
 #include "tree-ssa-alias.h"
 #include "tree-ssa.h"
 #include "stringpool.h"
+#if BUILDING_GCC_VERSION >= 7000
+#include "tree-vrp.h"
+#endif
 #include "tree-ssanames.h"
 #include "print-tree.h"
 #include "tree-eh.h"
@@ -287,6 +293,22 @@ static inline struct cgraph_node *cgraph_next_function_with_gimple_body(struct c
        return NULL;
 }
 
+static inline bool cgraph_for_node_and_aliases(cgraph_node_ptr node, bool (*callback)(cgraph_node_ptr, void *), void *data, bool include_overwritable)
+{
+       cgraph_node_ptr alias;
+
+       if (callback(node, data))
+               return true;
+
+       for (alias = node->same_body; alias; alias = alias->next) {
+               if (include_overwritable || cgraph_function_body_availability(alias) > AVAIL_OVERWRITABLE)
+                       if (cgraph_for_node_and_aliases(alias, callback, data, include_overwritable))
+                               return true;
+       }
+
+       return false;
+}
+
 #define FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) \
        for ((node) = cgraph_first_function_with_gimple_body(); (node); \
                (node) = cgraph_next_function_with_gimple_body(node))
@@ -399,6 +421,7 @@ typedef union gimple_statement_d gassign;
 typedef union gimple_statement_d gcall;
 typedef union gimple_statement_d gcond;
 typedef union gimple_statement_d gdebug;
+typedef union gimple_statement_d ggoto;
 typedef union gimple_statement_d gphi;
 typedef union gimple_statement_d greturn;
 
@@ -452,6 +475,16 @@ static inline const gdebug *as_a_const_gdebug(const_gimple stmt)
        return stmt;
 }
 
+static inline ggoto *as_a_ggoto(gimple stmt)
+{
+       return stmt;
+}
+
+static inline const ggoto *as_a_const_ggoto(const_gimple stmt)
+{
+       return stmt;
+}
+
 static inline gphi *as_a_gphi(gimple stmt)
 {
        return stmt;
@@ -496,6 +529,14 @@ static inline const greturn *as_a_const_greturn(const_gimple stmt)
 
 typedef struct rtx_def rtx_insn;
 
+static inline const char *get_decl_section_name(const_tree decl)
+{
+       if (DECL_SECTION_NAME(decl) == NULL_TREE)
+               return NULL;
+
+       return TREE_STRING_POINTER(DECL_SECTION_NAME(decl));
+}
+
 static inline void set_decl_section_name(tree node, const char *value)
 {
        if (value)
@@ -511,6 +552,7 @@ typedef struct gimple_statement_base gassign;
 typedef struct gimple_statement_call gcall;
 typedef struct gimple_statement_base gcond;
 typedef struct gimple_statement_base gdebug;
+typedef struct gimple_statement_base ggoto;
 typedef struct gimple_statement_phi gphi;
 typedef struct gimple_statement_base greturn;
 
@@ -564,6 +606,16 @@ static inline const gdebug *as_a_const_gdebug(const_gimple stmt)
        return stmt;
 }
 
+static inline ggoto *as_a_ggoto(gimple stmt)
+{
+       return stmt;
+}
+
+static inline const ggoto *as_a_const_ggoto(const_gimple stmt)
+{
+       return stmt;
+}
+
 static inline gphi *as_a_gphi(gimple stmt)
 {
        return as_a<gphi>(stmt);
@@ -611,6 +663,11 @@ inline bool is_a_helper<const gassign *>::test(const_gimple gs)
 
 #define INSN_DELETED_P(insn) (insn)->deleted()
 
+static inline const char *get_decl_section_name(const_tree decl)
+{
+       return DECL_SECTION_NAME(decl);
+}
+
 /* symtab/cgraph related */
 #define debug_cgraph_node(node) (node)->debug()
 #define cgraph_get_node(decl) cgraph_node::get(decl)
@@ -619,6 +676,7 @@ inline bool is_a_helper<const gassign *>::test(const_gimple gs)
 #define cgraph_n_nodes symtab->cgraph_count
 #define cgraph_max_uid symtab->cgraph_max_uid
 #define varpool_get_node(decl) varpool_node::get(decl)
+#define dump_varpool_node(file, node) (node)->dump(file)
 
 #define cgraph_create_edge(caller, callee, call_stmt, count, freq, nest) \
        (caller)->create_edge((callee), (call_stmt), (count), (freq))
@@ -674,6 +732,11 @@ static inline cgraph_node_ptr cgraph_alias_target(cgraph_node_ptr node)
        return node->get_alias_target();
 }
 
+static inline bool cgraph_for_node_and_aliases(cgraph_node_ptr node, bool (*callback)(cgraph_node_ptr, void *), void *data, bool include_overwritable)
+{
+       return node->call_for_symbol_thunks_and_aliases(callback, data, include_overwritable);
+}
+
 static inline struct cgraph_node_hook_list *cgraph_add_function_insertion_hook(cgraph_node_hook hook, void *data)
 {
        return symtab->add_cgraph_insertion_hook(hook, data);
@@ -729,6 +792,13 @@ static inline gimple gimple_build_assign_with_ops(enum tree_code subcode, tree l
        return gimple_build_assign(lhs, subcode, op1, op2 PASS_MEM_STAT);
 }
 
+template <>
+template <>
+inline bool is_a_helper<const ggoto *>::test(const_gimple gs)
+{
+       return gs->code == GIMPLE_GOTO;
+}
+
 template <>
 template <>
 inline bool is_a_helper<const greturn *>::test(const_gimple gs)
@@ -766,6 +836,16 @@ static inline const gcall *as_a_const_gcall(const_gimple stmt)
        return as_a<const gcall *>(stmt);
 }
 
+static inline ggoto *as_a_ggoto(gimple stmt)
+{
+       return as_a<ggoto *>(stmt);
+}
+
+static inline const ggoto *as_a_const_ggoto(const_gimple stmt)
+{
+       return as_a<const ggoto *>(stmt);
+}
+
 static inline gphi *as_a_gphi(gimple stmt)
 {
        return as_a<gphi *>(stmt);
@@ -828,4 +908,9 @@ static inline void debug_gimple_stmt(const_gimple s)
 #define debug_gimple_stmt(s) debug_gimple_stmt(CONST_CAST_GIMPLE(s))
 #endif
 
+#if BUILDING_GCC_VERSION >= 7000
+#define get_inner_reference(exp, pbitsize, pbitpos, poffset, pmode, punsignedp, preversep, pvolatilep, keep_aligning)  \
+       get_inner_reference(exp, pbitsize, pbitpos, poffset, pmode, punsignedp, preversep, pvolatilep)
+#endif
+
 #endif
index 12541126575b1e2416ad48d58f1d01f8e08a5d93..8ff203ad48093f57fccf04bb9d7c9b9e1952603b 100644 (file)
@@ -328,9 +328,9 @@ static enum tree_code get_op(tree *rhs)
                        op = LROTATE_EXPR;
                        /*
                         * This code limits the value of random_const to
-                        * the size of a wide int for the rotation
+                        * the size of a long for the rotation
                         */
-                       random_const &= HOST_BITS_PER_WIDE_INT - 1;
+                       random_const %= TYPE_PRECISION(long_unsigned_type_node);
                        break;
                }
 
index ee47924aef0df676223975a08df37ad055cc1f51..827161bc269cfa1414972692bcdb45d0a42ad9ed 100644 (file)
@@ -117,7 +117,7 @@ destroy_stream(struct snd_efw *efw, struct amdtp_stream *stream)
                conn = &efw->in_conn;
 
        amdtp_stream_destroy(stream);
-       cmp_connection_destroy(&efw->out_conn);
+       cmp_connection_destroy(conn);
 }
 
 static int
index 4ad3bd7fd4453e3a64fc4cd95001165510292559..f1657a4e0621ef4999349477ce6e71fdbcd7f411 100644 (file)
@@ -343,7 +343,7 @@ int snd_tscm_stream_init_duplex(struct snd_tscm *tscm)
        if (err < 0)
                amdtp_stream_destroy(&tscm->rx_stream);
 
-       return 0;
+       return err;
 }
 
 /* At bus reset, streaming is stopped and some registers are clear. */
index 9448daff9d8b55d5de49ef9a4ff66fd9e2a80f6b..7d660ee1d5e84e6f7eaa42404232d9aad461b25c 100644 (file)
@@ -2230,6 +2230,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
        SND_PCI_QUIRK(0x1043, 0x1971, "Asus W2JC", ALC882_FIXUP_ASUS_W2JC),
        SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_FIXUP_EEE1601),
        SND_PCI_QUIRK(0x1043, 0x84bc, "ASUS ET2700", ALC887_FIXUP_ASUS_BASS),
+       SND_PCI_QUIRK(0x1043, 0x8691, "ASUS ROG Ranger VIII", ALC882_FIXUP_GPIO3),
        SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC889_FIXUP_VAIO_TT),
        SND_PCI_QUIRK(0x104d, 0x905a, "Sony Vaio Z", ALC882_FIXUP_NO_PRIMARY_HP),
        SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP),
@@ -6983,6 +6984,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
        SND_PCI_QUIRK(0x1043, 0x15a7, "ASUS UX51VZH", ALC662_FIXUP_BASS_16),
        SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51),
        SND_PCI_QUIRK(0x1043, 0x17bd, "ASUS N751", ALC668_FIXUP_ASUS_Nx51),
+       SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71SL", ALC662_FIXUP_ASUS_MODE8),
        SND_PCI_QUIRK(0x1043, 0x1b73, "ASUS N55SF", ALC662_FIXUP_BASS_16),
        SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_MODE4_CHMAP),
        SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
index 15d1d5c63c3c40faa5f62316370ea9d8e711fa75..c90607ebe155b4dce4cfa8aa75fc14ecab953d52 100644 (file)
@@ -384,6 +384,9 @@ static void snd_complete_urb(struct urb *urb)
        if (unlikely(atomic_read(&ep->chip->shutdown)))
                goto exit_clear;
 
+       if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags)))
+               goto exit_clear;
+
        if (usb_pipeout(ep->pipe)) {
                retire_outbound_urb(ep, ctx);
                /* can be stopped during retire callback */
@@ -534,6 +537,11 @@ static int wait_clear_urbs(struct snd_usb_endpoint *ep)
                        alive, ep->ep_num);
        clear_bit(EP_FLAG_STOPPING, &ep->flags);
 
+       ep->data_subs = NULL;
+       ep->sync_slave = NULL;
+       ep->retire_data_urb = NULL;
+       ep->prepare_data_urb = NULL;
+
        return 0;
 }
 
@@ -912,9 +920,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
 /**
  * snd_usb_endpoint_start: start an snd_usb_endpoint
  *
- * @ep:                the endpoint to start
- * @can_sleep: flag indicating whether the operation is executed in
- *             non-atomic context
+ * @ep: the endpoint to start
  *
  * A call to this function will increment the use count of the endpoint.
  * In case it is not already running, the URBs for this endpoint will be
@@ -924,7 +930,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
  *
  * Returns an error if the URB submission failed, 0 in all other cases.
  */
-int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep)
+int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
 {
        int err;
        unsigned int i;
@@ -938,8 +944,6 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep)
 
        /* just to be sure */
        deactivate_urbs(ep, false);
-       if (can_sleep)
-               wait_clear_urbs(ep);
 
        ep->active_mask = 0;
        ep->unlink_mask = 0;
@@ -1020,10 +1024,6 @@ void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep)
 
        if (--ep->use_count == 0) {
                deactivate_urbs(ep, false);
-               ep->data_subs = NULL;
-               ep->sync_slave = NULL;
-               ep->retire_data_urb = NULL;
-               ep->prepare_data_urb = NULL;
                set_bit(EP_FLAG_STOPPING, &ep->flags);
        }
 }
index 6428392d8f6244688e65d8be3d04bc9c30c68ce5..584f295d7c7738a6b91753c8c48eed0bf101a200 100644 (file)
@@ -18,7 +18,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
                                struct audioformat *fmt,
                                struct snd_usb_endpoint *sync_ep);
 
-int  snd_usb_endpoint_start(struct snd_usb_endpoint *ep, bool can_sleep);
+int  snd_usb_endpoint_start(struct snd_usb_endpoint *ep);
 void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep);
 void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep);
 int  snd_usb_endpoint_activate(struct snd_usb_endpoint *ep);
index 34c6d4f2c0b62967656b1687594161142bedf127..9aa5b18554812a949503375e23764b3d926a0f2d 100644 (file)
@@ -218,7 +218,7 @@ int snd_usb_init_pitch(struct snd_usb_audio *chip, int iface,
        }
 }
 
-static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep)
+static int start_endpoints(struct snd_usb_substream *subs)
 {
        int err;
 
@@ -231,7 +231,7 @@ static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep)
                dev_dbg(&subs->dev->dev, "Starting data EP @%p\n", ep);
 
                ep->data_subs = subs;
-               err = snd_usb_endpoint_start(ep, can_sleep);
+               err = snd_usb_endpoint_start(ep);
                if (err < 0) {
                        clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags);
                        return err;
@@ -260,7 +260,7 @@ static int start_endpoints(struct snd_usb_substream *subs, bool can_sleep)
                dev_dbg(&subs->dev->dev, "Starting sync EP @%p\n", ep);
 
                ep->sync_slave = subs->data_endpoint;
-               err = snd_usb_endpoint_start(ep, can_sleep);
+               err = snd_usb_endpoint_start(ep);
                if (err < 0) {
                        clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags);
                        return err;
@@ -850,7 +850,7 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
        /* for playback, submit the URBs now; otherwise, the first hwptr_done
         * updates for all URBs would happen at the same time when starting */
        if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK)
-               ret = start_endpoints(subs, true);
+               ret = start_endpoints(subs);
 
  unlock:
        snd_usb_unlock_shutdown(subs->stream->chip);
@@ -1666,7 +1666,7 @@ static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream
 
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_START:
-               err = start_endpoints(subs, false);
+               err = start_endpoints(subs);
                if (err < 0)
                        return err;
 
index 17a513268325d197b76aa36d7c26c337a70b9a4d..0b87e71c00fcc9c6cb0de2248b191e89228bf9b6 100644 (file)
@@ -5,8 +5,10 @@
 klibcdirs:;
 PHONY += klibcdirs
 
-suffix_y = $(CONFIG_INITRAMFS_COMPRESSION)
-AFLAGS_initramfs_data.o += -DINITRAMFS_IMAGE="usr/initramfs_data.cpio$(suffix_y)"
+suffix_y = $(subst $\",,$(CONFIG_INITRAMFS_COMPRESSION))
+datafile_y = initramfs_data.cpio$(suffix_y)
+AFLAGS_initramfs_data.o += -DINITRAMFS_IMAGE="usr/$(datafile_y)"
+
 
 # Generate builtin.o based on initramfs_data.o
 obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o
@@ -14,7 +16,7 @@ obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o
 # initramfs_data.o contains the compressed initramfs_data.cpio image.
 # The image is included using .incbin, a dependency which is not
 # tracked automatically.
-$(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio$(suffix_y) FORCE
+$(obj)/initramfs_data.o: $(obj)/$(datafile_y) FORCE
 
 #####
 # Generate the initramfs cpio archive
@@ -38,10 +40,8 @@ endif
 quiet_cmd_initfs = GEN     $@
       cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)
 
-targets := initramfs_data.cpio.gz initramfs_data.cpio.bz2 \
-       initramfs_data.cpio.lzma initramfs_data.cpio.xz \
-       initramfs_data.cpio.lzo initramfs_data.cpio.lz4 \
-       initramfs_data.cpio
+targets := $(datafile_y)
+
 # do not try to update files included in initramfs
 $(deps_initramfs): ;
 
@@ -51,6 +51,6 @@ $(deps_initramfs): klibcdirs
 # 2) There are changes in which files are included (added or deleted)
 # 3) If gen_init_cpio are newer than initramfs_data.cpio
 # 4) arguments to gen_initramfs.sh changes
-$(obj)/initramfs_data.cpio$(suffix_y): $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs
+$(obj)/$(datafile_y): $(obj)/gen_init_cpio $(deps_initramfs) klibcdirs
        $(Q)$(initramfs) -l $(ramfs-input) > $(obj)/.initramfs_data.cpio.d
        $(call if_changed,initfs)